【问题标题】:SVC (support vector classification) with categorical (string) data as labels以分类(字符串)数据作为标签的 SVC(支持向量分类)
【发布时间】:2016-11-29 19:17:16
【问题描述】:

我使用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等。但这真的是最好的解决方案吗?

【问题讨论】:

    标签: python machine-learning scikit-learn svm


    【解决方案1】:

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

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

    【讨论】:

    • 您至少应该直接链接到该部分并提及 OneHotEncoder
    • 但是当您尝试预测一种新颜色时,热编码如何帮助您?也许在您的情况下,您必须重新训练模型。你有什么解决办法吗?
    【解决方案2】:

    你可以试试这个代码:

    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) 作为“列表”。

    【讨论】:

      猜你喜欢
      • 2019-07-14
      • 2015-09-24
      • 2017-08-18
      • 2021-06-28
      • 2011-07-01
      • 2013-08-31
      • 1970-01-01
      • 2017-11-30
      • 2015-02-16
      相关资源
      最近更新 更多