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