2016-07-26 93 views
2

我使用scikit-learn来实现简单的监督式学习算法。实质上,我遵循教程here(但使用我自己的数据)。以分类(字符串)数据作为标签的SVC(支持向量分类)

我尽量拟合模型:

clf = svm.SVC(gamma=0.001, C=100.) 
clf.fit(features_training,labels_training) 

但在第二行中,我得到一个错误:ValueError: could not convert string to float: 'A'

预计此错误的原因label_training包含字符串值代表三个不同的类别,例如如AB,C

所以问题是:如果标记数据表示字符串形式的类别,我该如何使用SVC(支持向量分类)。对我来说,一个直观的解决方案似乎只是将每个字符串转换为数字。例如,A = 0,B = 1等,但这真的是最好的解决方案?

回答

2

看看http://scikit-learn.org/stable/modules/preprocessing.html#encoding-categorical-featuressection 4.3.4 Encoding categorical features.

特别是看使用OneHotEncoder。这会将分类值转换为可由SVM使用的格式。

+1

您应至少直接链接到该部分并提及OneHotEncoder –

+0

但是当您尝试预测新颜色时,热编码如何帮助您?也许在你的情况下,你必须重新训练模型。你有任何解决方案? – gtzinos

0

可以尝试此代码:

from sklearn import svm 
X = [[0, 0], [1, 1],[2,3]] 
y = ['A', 'B','C'] 
clf = svm.SVC(gamma=0.001, C=100.) 
clf.fit(X, y) 
clf.predict([[2,3]]) 

输出: 阵列([ 'C'], D类= '| S1')

你应该采取的因变量(y)根据“清单”。