在数据预处理期间使用带有onehotencoding的toarray()

时间:2018-10-17 02:47:57

标签: python machine-learning scikit-learn artificial-intelligence data-science

我是机器学习的新手。我有一个疑问:为什么将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)

1 个答案:

答案 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.]])