给出的是一个简单的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。
在使用fit之前,您必须进行一些编码。如前所述,fit()不接受字符串,但是您可以解决此问题。
有几种可以使用的类:
就个人而言,前段时间我在StackOverflow上发布了几乎相同的问题。我想拥有一个可扩展的解决方案,但没有得到任何答案。我选择了将所有字符串二值化的OneHotEncoder。这是非常有效的,但是如果您有很多不同的字符串,矩阵将非常快地增长并且将需要内存。