程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

Scikit-Learn OneHotEncoder 无法正常工作?

发布于2023-02-27 13:53     阅读(1082)     评论(0)     点赞(18)     收藏(1)


我有一个如下所示的数据列表:

[['ocak' 2017]
 ['subat' 2017]
 ['mart' 2017]
 ['nisan' 2017]
 ['mayis' 2017]
 ['haziran' 2017]
 ['temuz' 2017]
 ['agustos' 2017]
 ['eylul' 2017]
 ['ekim' 2017]
 ['kasim' 2017]
 ['aralik' 2017]
 ['ocak' 2018]
 ['subat' 2018]
 ['mart' 2018]
 ['nisan' 2018]]

我想使用 OneHotEncoder 对列表的字符串部分('subat'、'mart' 等)进行编码,以便在我的回归模型中使用它。

我使用的代码是这样的:

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [0])], remainder='passthrough')
X = np.array(ct.fit_transform(X))

但是我的输出是这样的:

(0, 9)  1.0
  (0, 13)   2017.0
  (1, 10)   1.0
  (1, 13)   2017.0
  (2, 6)    1.0
  (2, 13)   2017.0
  (3, 8)    1.0
  (3, 13)   2017.0
  (4, 7)    1.0
  (4, 13)   2017.0
  (5, 4)    1.0
  (5, 13)   2017.0
  (6, 12)   1.0
  (6, 13)   2017.0
  (7, 0)    1.0
  (7, 13)   2017.0
  (8, 3)    1.0
 

这是 train_test_split 类不能接受的..

我需要这样的输出

[1.0 0.0 0.0 2017]

我怎样才能让它像上面那样给我输出。还是我的代码或数据集有问题?


解决方案


OneHotEncoder默认情况下返回一个稀疏矩阵,因此当您用 包装返回值时np.array,您会得到一个不需要的表示。你有两个选择:

  • 传递sparse=FalseOneHotEncoder
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(sparse=False), [0])], remainder='passthrough')
  • 或将结果转换为 numpy 数组toarray,即
X = ct.fit_transform(X).toarray()

得到第二种方式(我把它包装成pd.DataFrame更容易检查结果):

>>> pd.DataFrame(X)

     0    1    2    3    4    5    6    7    8    9    10   11      12
0   0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  1.0  0.0  0.0  2017.0
1   0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  1.0  0.0  2017.0
2   0.0  0.0  0.0  0.0  0.0  0.0  1.0  0.0  0.0  0.0  0.0  0.0  2017.0
3   0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  1.0  0.0  0.0  0.0  2017.0
4   0.0  0.0  0.0  0.0  0.0  0.0  0.0  1.0  0.0  0.0  0.0  0.0  2017.0
5   0.0  0.0  0.0  0.0  1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  2017.0
6   0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  1.0  2017.0
7   1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  2017.0
8   0.0  0.0  0.0  1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  2017.0
9   0.0  0.0  1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  2017.0
10  0.0  0.0  0.0  0.0  0.0  1.0  0.0  0.0  0.0  0.0  0.0  0.0  2017.0
11  0.0  1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  2017.0
12  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  1.0  0.0  0.0  2018.0
13  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  1.0  0.0  2018.0
14  0.0  0.0  0.0  0.0  0.0  0.0  1.0  0.0  0.0  0.0  0.0  0.0  2018.0
15  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  1.0  0.0  0.0  0.0  2018.0


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.phpheidong.com/blog/article/495118/7d633ac74c58b0dcbe2c/

来源:php黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

18 0
收藏该文
已收藏

评论内容:(最多支持255个字符)