在Multiclass SVM SKLearn中返回了哪些支​​持向量

时间:2016-01-26 19:29:37

标签: scikit-learn svm

默认情况下,SKLearn在多类案例中训练SVM时使用One vs One分类方案。

当你调用诸如svm.n_support_或svm.support_vectors_这样的属性时,我有点困惑,这些属性支持你得到的向量?例如,在虹膜数据集的情况下,有3个类,因此应该总共构建3 *(3-1)/ 2 = 3个不同的SVM分类器。你在哪个分类器中得到支持向量?

Example of Multiclass

2 个答案:

答案 0 :(得分:3)

  

更新dual_coef_是关键,为您提供决策函数中支持向量的系数。 “每个支持向量用于n_class - 1个分类器。每行中的n_class - 1个条目对应于这些分类器的双重系数。”

     
    

看一下本节的最后(1.4.1.1),该表清楚地解释了它http://scikit-learn.org/stable/modules/svm.html#multi-class-classification

  

实施细节对我来说也很混乱。多类决策函数中支持向量的系数是非平凡的。

但是,只要我想详细了解所选支持向量的特定属性,我就会使用这个经验法则:

y[svm.support_]

输出:

array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])

通过这种方式,您可以了解(可能出于调试目的)哪个支持向量对应于哪个类。当然,您可以查看支持向量:

X[svm.support_]

我的直觉是,正如其名称所示,您可以获取相关类别的样本子集。假设我们有3个类别A,B和C:

  • A vs. B - >它为您提供了A和B的几个支持向量(a,a,a,b,b,...)
  • A vs. C - >相同... a,a,a,c,c,c,c(也许某些'a'从之前重复)
  • B vs. C - >同上

所以svm.support_vectors_ 会返回所有支持向量,但它在decision_function中的使用方式对我来说仍然很棘手,因为我不确定它是否可以用于示例支持A对B与A对B的向量 - 我找不到实现细节(http://scikit-learn.org/stable/modules/generated/sklearn.multiclass.OneVsOneClassifier.html#sklearn.multiclass.OneVsOneClassifier.decision_function

答案 1 :(得分:1)

所有3个分类器的所有支持向量。 看svm.support_.shape它是45。 19 + 19 + 7 = 45.所有加起来。

另外,如果你看svm.support_vectors_.shape,它将是(45,4) - [n_SV, n_features]。再次有意义,因为我们在虹膜数据集中有45个支持向量和4个特征。