给出的是一个简单的 CSV 文件:
A,B,C
Hello,Hi,0
Hola,Bueno,1
显然真实的数据集远比这复杂,但这一个重现了错误。我正在尝试为其构建一个随机森林分类器,如下所示:
cols = ['A','B','C']
col_types = {'A': str, 'B': str, 'C': int}
test = pd.read_csv('test.csv', dtype=col_types)
train_y = test['C'] == 1
train_x = test[cols]
clf_rf = RandomForestClassifier(n_estimators=50)
clf_rf.fit(train_x, train_y)
但是我在调用 fit() 时得到了这个回溯:
ValueError: could not convert string to float: 'Bueno'
scikit-learn 版本为 0.16.1。
原文由 nilkn 发布,翻译遵循 CC BY-SA 4.0 许可协议
在使用
fit()
之前,您必须进行一些编码。正如它被告知fit()
不接受字符串,但你解决了这个问题。有几个类可以使用:
LabelEncoder
: 把你的字符串变成增量值OneHotEncoder
: 使用One-of-K算法将字符串转换为整数就个人而言,我前段时间在 Stack Overflow 上发布了几乎 相同的问题。我想要一个可扩展的解决方案,但没有得到任何答案。我选择了将所有字符串二值化的 OneHotEncoder。它非常有效,但是如果你有很多不同的字符串,矩阵会增长得非常快并且需要内存。