我是机器学习的新手。我有一个疑问:为什么将toarray()
与onehotencoding一起使用,而不在这里将其与标签编码一起使用。我什么都不知道。请有人帮忙。
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
label_encoder_x = LabelEncoder()
x[:, 0] = label_encoder_x.fit_transform(x[:, 0])
onehotencoder = OneHotEncoder(categorical_features= [0])
x = onehotencoder.fit_transform(x).toarray()
label_encoder_y = LabelEncoder()
y = label_encoder_y.fit_transform(y)
答案 0 :(得分:0)
如docs中所述,OneHotEncoder
默认情况下将返回稀疏矩阵,使用起来较不直观。举一个最小的例子:
>>> df
0
0 2
1 2
2 2
3 1
4 1
5 2
6 2
7 1
8 1
9 1
onehotencoder = OneHotEncoder(categorical_features= [0])
>>> onehotencoder.fit_transform(df[0].values.reshape(1,-1))
<1x10 sparse matrix of type '<class 'numpy.float64'>'
with 10 stored elements in COOrdinate format>
但是,如果您致电toarray
,您会得到一些更容易使用或至少更容易理解的东西:
>>> onehotencoder.fit_transform(df[0].values.reshape(1,-1)).toarray()
array([[1., 2., 2., 1., 1., 2., 2., 1., 1., 1.]])
另一种方法是在创建OneHotEncoder时使用sparse = False
,然后默认情况下会创建一个密集数组:
onehotencoder = OneHotEncoder(categorical_features= [0], sparse=False)
>>> onehotencoder.fit_transform(df[0].values.reshape(1,-1))
array([[1., 2., 2., 1., 1., 2., 2., 1., 1., 1.]])