以分类(字符串)数据作为标签的 SVC(支持向量分类)

SVC (support vector classification) with categorical (string) data as labels

我用scikit-learn实现了一个简单的监督学习算法。本质上,我遵循教程 here(但使用我自己的数据)。

我尝试拟合模型:

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

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

错误是预料之中的,因为 label_training 包含代表三个不同类别的字符串值,例如 ABC

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

你可以试试这个代码:

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'], dtype='|S1')

您应该将因变量 (y) 取为 'list'。

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

请特别注意使用 OneHotEncoder。这会将分类值转换为 SVM 可以使用的格式。