当我尝试学习sklearn库中的OneHotEncoder时,我尝试了scikit-learn.org提供的以下示例代码。但这个代码给我带来了错误,我无法调试它。
from sklearn.preprocessing import OneHotEncoderenc = OneHotEncoder(handle_unknown='ignore')X = [['Male', 1], ['Female', 3], ['Female', 2]]enc.fit(X)
我得到了这个错误:
array = np.array(array, dtype=dtype, order=order, copy=copy)ValueError: could not convert string to float: 'Male'
我假设如果这个代码是写在scikit-learn.org上的,那么问题一定是出在我自己的环境中,或者是我在这里做错了什么。
回答:
这可能与您的scikit-learn版本有关。从0.20版本开始,OneHotEncoder
可以处理字符串,而在旧版本中并非如此 – 请注意,v0.19的文档没有提供相同的示例:https://scikit-learn.org/0.19/modules/generated/sklearn.preprocessing.OneHotEncoder.html
发布说明中,版本0.20.2(12月18日)特别提到了这一点:
主要功能:扩展了
preprocessing.OneHotEncoder
,允许将分类字符串特征编码为使用独热(或哑变量)编码方案的数字数组
因此,请将您的scikit-learn升级到当前版本(0.20),您应该就没问题了。