在numpy数组上应用onehotencoder

时间:2018-05-22 06:13:17

标签: python numpy scikit-learn one-hot-encoding

我在numpy数组上应用OneHotEncoder。

这是代码

print X.shape, test_data.shape #gives 4100, 15) (410, 15)
onehotencoder_1 = OneHotEncoder(categorical_features = [0, 3, 4, 5, 6, 8, 9, 11, 12])
X = onehotencoder_1.fit_transform(X).toarray()
onehotencoder_2 = OneHotEncoder(categorical_features = [0, 3, 4, 5, 6, 8, 9, 11, 12])
test_data = onehotencoder_2.fit_transform(test_data).toarray()

print X.shape, test_data.shape #gives (4100, 46) (410, 43)

Xtest_data都是<type 'numpy.ndarray'>

X是我在test_data测试时设置的火车。

怎么回事。 X&amp;的列数不同test_data。应用onehotencoder后,它们应该 46 43

我在特定属性上应用OnehotEncoder,因为它们在Xtest_data

中属于绝对属性

有人可以指出这里有什么问题吗?

1 个答案:

答案 0 :(得分:1)

不要在test_data上使用新的OneHotEncoder,使用第一个,只使用transform()。这样做:

test_data = onehotencoder_1.transform(test_data).toarray()

切勿在测试数据时使用fit()(或fit_transform())。

不同数量的列是完全可能的,因为测试数据可能不包含列车数据中存在的某些类别。因此,当您使用新的OneHotEncoder并在其上调用fit()(或fit_transform())时,它只会了解test_data中存在的类别。因此列之间会有所不同。