如何使用OneHotEncoder categorical_features

时间:2016-04-16 17:44:25

标签: python encoding

我无法使用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.]])

1 个答案:

答案 0 :(得分:2)

为什么要调用OneHotEncoder构造函数twise? 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.]])