【问题标题】:Which Support Vectors returned in Multiclass SVM SKLearnMulticlass SVM SKLearn 中返回了哪些支​​持向量
【发布时间】:2016-05-03 12:19:45
【问题描述】:

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

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

【问题讨论】:

    标签: scikit-learn svm


    【解决方案1】:

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

    此外,如果您查看svm.support_vectors_.shape,它将是 (45,4) - [n_SV, n_features]。同样有意义,因为我们在 iris 数据集中有 45 个支持向量和 4 个特征。

    【讨论】:

      【解决方案2】:

      更新: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 与 C --> 相同... a,a,a,c,c,c,c(可能之前重复了一些 'a')
      • B 与 C --> 同上

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

      【讨论】:

        猜你喜欢
        • 2022-12-25
        • 2013-07-30
        • 2013-08-21
        • 1970-01-01
        • 2011-11-09
        • 2011-03-27
        • 2020-10-26
        • 2023-03-15
        • 2019-06-03
        相关资源
        最近更新 更多