RandomForestClassfier.fit(): ValueError: 无法将字符串转换为浮点数

新手上路,请多包涵

给出的是一个简单的 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 许可协议

阅读 1k
2 个回答

在使用 fit() 之前,您必须进行一些编码。正如它被告知 fit() 不接受字符串,但你解决了这个问题。

有几个类可以使用:

就个人而言,我前段时间在 Stack Overflow 上发布了几乎 相同的问题。我想要一个可扩展的解决方案,但没有得到任何答案。我选择了将所有字符串二值化的 OneHotEncoder。它非常有效,但是如果你有很多不同的字符串,矩阵会增长得非常快并且需要内存。

原文由 RPresle 发布,翻译遵循 CC BY-SA 4.0 许可协议

LabelEncoding 对我有用(基本上你必须按功能对数据进行编码)(mydata 是字符串数据类型的二维数组):

 myData=np.genfromtxt(filecsv, delimiter=",", dtype ="|a20" ,skip_header=1);

from sklearn import preprocessing
le = preprocessing.LabelEncoder()
for i in range(*NUMBER OF FEATURES*):
    myData[:,i] = le.fit_transform(myData[:,i])

原文由 SinOfWrath 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏