以分类(字符串)数据作为标签的 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
包含代表三个不同类别的字符串值,例如 A
、B
、C
。
所以问题是:如果标记数据以字符串形式表示类别,我该如何使用 SVC(支持向量分类)。对我来说,一个直观的解决方案似乎只是将每个字符串转换为一个数字。例如,A = 0
、B = 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 可以使用的格式。
我用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
包含代表三个不同类别的字符串值,例如 A
、B
、C
。
所以问题是:如果标记数据以字符串形式表示类别,我该如何使用 SVC(支持向量分类)。对我来说,一个直观的解决方案似乎只是将每个字符串转换为一个数字。例如,A = 0
、B = 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 可以使用的格式。