默认情况下,SKLearn在多类案例中训练SVM时使用One vs One分类方案。
当你调用诸如svm.n_support_或svm.support_vectors_这样的属性时,我有点困惑,这些属性支持你得到的向量?例如,在虹膜数据集的情况下,有3个类,因此应该总共构建3 *(3-1)/ 2 = 3个不同的SVM分类器。你在哪个分类器中得到支持向量?
答案 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:
所以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个特征。