我正在使用Python中的sklearn 0.14模块来创建决策树。我希望使用OneHotEncoder将一些功能转换为分类功能。根据文档,我应该能够提供一系列索引来指示应该转换哪些功能。但是,尝试以下代码:
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:UserssaraDocumentsShipping
ProjectPythonSandboxCarrierDecisionTree.py", line 35, in <module>
encoder.fit(xs) File "C:Python27libsite-packagessklearnpreprocessingdata.py", line
892, in fit
self.fit_transform(X) File "C:Python27libsite-packagessklearnpreprocessingdata.py", line
944, in fit_transform
self.categorical_features, copy=True) File "C:Python27libsite-packagessklearnpreprocessingdata.py", line
795, in _transform_selected
return sparse.hstack((X_sel, X_not_sel)) File "C:Python27libsite-packagesscipysparseconstruct.py", line 417,
in hstack
return bmat([blocks], format=format, dtype=dtype) File "C:Python27libsite-packagesscipysparseconstruct.py", line 532,
in bmat
dtype = upcast( *tuple([A.dtype for A in blocks[block_mask]]) ) File "C:Python27libsite-packagesscipysparsesputils.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的所有优点,因为我稍后将使用更多功能。
作为答案发布,记录在案:
TypeError: no supported conversion for types: (dtype('int32'), dtype('S6'))
意味着真正的xs
(而不是代码片段中显示的)中的某些内容是字符串:dtype('S6')
是NumPy的长度为六的字符串类型。