我在使用OneHotEncoder仅编码分类列时遇到麻烦,而忽略了连续列。无论我在categorical_features中指定什么内容,编码器都会对所有列进行编码。例如:

enc = preprocessing.OneHotEncoder()
enc.fit([[0, 40, 3], [1, 50, 0], [0, 45, 1], [1, 30, 2]])
OneHotEncoder(categorical_features=[0,2],
   handle_unknown='error', n_values='auto', sparse=True)
print enc.n_values_
print enc.feature_indices_
enc.transform([[0, 45, 3]]).toarray()


我只想对第1列和第3列进行编码,而将中间列(值40、50、45、30)保留为连续值。因此,我指定categorical_features = [0,2],但是无论我做什么,此代码的输出仍然是:

[ 2 51  4]
[ 0  2 53 57]
Out[129]:
array([[ 1.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  1.]])

最佳答案

为什么您在tcc中调用OneHotEncoder构造函数? enc是默认构造函数创建的,因此对于enc,您具有categorical_features='all'(所有功能都是分类的)。据我了解,您需要这样的东西:

enc = OneHotEncoder(categorical_features=[0,2],
    handle_unknown='error', n_values='auto', sparse=True)
enc.fit([[0, 40, 3], [1, 50, 0], [0, 45, 1], [1, 30, 2]])
print(enc.n_values_)
print(enc.feature_indices_)
enc.transform([[0, 45, 3]]).toarray()


你将有

[2 4]
[0 2 6]
Out[23]: array([[  1.,   0.,   0.,   0.,   0.,   1.,  45.]])

10-07 23:15