在 sklearn 0.14 中使用 OneHotEncoder 指定要分类的选择特征

Posted

技术标签:

【中文标题】在 sklearn 0.14 中使用 OneHotEncoder 指定要分类的选择特征【英文标题】:Specifying select features to be categorical using OneHotEncoder in sklearn 0.14 【发布时间】:2013-08-30 15:45:44 【问题描述】:

我正在使用 Python 中的 sklearn 0.14 模块来创建决策树。我希望使用 OneHotEncoder 将一些特征转换为分类特征。根据documentation,我应该能够提供一个索引数组来指示应该转换哪些特征。但是,尝试以下代码:

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 的所有优点,因为我稍后将使用更多功能。

【问题讨论】:

在这里工作正常。从该错误消息的外观来看,您在 xs 的某处有一个字符串。 我同意错误消息似乎暗示了这一点,但是如果数据中的字符串导致问题,为什么它会为 categorical_features='all' 而不是 categorical_features=[1, 2] 正常工作? 这完全有效。在使用 csv.DictReader 将我的所有训练数据读入后将其转换为浮点数后,它就像一个魅力。非常感谢! 【参考方案1】:

作为答案发布,以备记录:

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

表示真正的xs(不是代码 sn-p 中显示的那个)是字符串:dtype('S6') 是 NumPy 的长度为六的字符串类型。

【讨论】:

以上是关于在 sklearn 0.14 中使用 OneHotEncoder 指定要分类的选择特征的主要内容,如果未能解决你的问题,请参考以下文章

onehot的好处,还是可以看看的

在随机森林中使用“一个热”编码的因变量

sklearn “管道实例尚未安装。”错误,即使它是

sklearn中的LabelEncoder和OneHotEncoder的区别

尝试使用 OneHot Encoder Python 的预处理错误

图片验证码识别,标签中onehot编码对应多个1怎么做?