使用sklearn 0.14中的OneHotEncoder指定要分类的选择要素

时间:2013-08-27 18:44:56

标签: python-2.7 scikit-learn decision-tree categorical-data

我在Python中使用sklearn 0.14模块来创建决策树。我希望使用OneHotEncoder将一些功能转换为分类功能。根据{{​​3}},我应该能够提供一系列索引来指示应转换哪些功能。但是,请尝试以下代码:

xs = [[64, 15230], [3, 67673], [16, 43678]]
encoder = preprocessing.OneHotEncoder(n_values='auto', categorical_features=[1], dtype=numpy.integer)
encoder.fit(xs)

我收到以下错误:

Traceback (most recent call last):   File
"C:\Users\sara\Documents\Shipping
Project\PythonSandbox\CarrierDecisionTree.py", line 35, in <module>
    encoder.fit(xs)   File "C:\Python27\lib\site-packages\sklearn\preprocessing\data.py", line
892, in fit
    self.fit_transform(X)   File "C:\Python27\lib\site-packages\sklearn\preprocessing\data.py", line
944, in fit_transform
    self.categorical_features, copy=True)   File "C:\Python27\lib\site-packages\sklearn\preprocessing\data.py", line
795, in _transform_selected
    return sparse.hstack((X_sel, X_not_sel))   File "C:\Python27\lib\site-packages\scipy\sparse\construct.py", line 417,
in hstack
    return bmat([blocks], format=format, dtype=dtype)   File "C:\Python27\lib\site-packages\scipy\sparse\construct.py", line 532,
in bmat
    dtype = upcast( *tuple([A.dtype for A in blocks[block_mask]]) )   File "C:\Python27\lib\site-packages\scipy\sparse\sputils.py", line 53,
in upcast
    raise TypeError('no supported conversion for types: %r' % (args,)) TypeError: no supported conversion for types: (dtype('int32'),
dtype('S6'))

如果相反,我将数组[0,1]提供给categorical_features,它可以正常工作并正确转换这两个功能。使用'all'到categorical_features时会出现相同的正确行为。但是,我只希望第二个功能转换而不是第一个。我知道我可以通过一次转换一个功能来手动执行此操作,但我希望能够使用OneHotEncoder的所有功能,因为我稍后将使用更多功能。

1 个答案:

答案 0 :(得分:0)

发布作为答案,记录:

TypeError: no supported conversion for types: (dtype('int32'), dtype('S6'))

表示真实xs中的内容(不是代码段中显示的内容)是字符串:dtype('S6')是NumPy的长度为六的字符串类型。