Scikit learn sklearn中对偶系数的维数。SVC

Scikit learn sklearn中对偶系数的维数。SVC,scikit-learn,svm,Scikit Learn,Svm,在多分类的SVC()中,训练一对一分类器。因此,应该总共有n_class*(n_class-1)/2个分类器。但是为什么clf.dual\u coef\ucode>只返回我(n\u class-1)*n\u SV?那么每一行代表什么?在多类设置中,sklearn.svm.SVC的对偶系数很难解释。报告中有一个解释。sklearn.svm.SVC用于计算,并对双系数采用相同的数据结构。关于这些系数的组织的另一种解释见。对于在拟合SVC分类器中找到的系数,解释如下: SVC识别的每个支持向量都属于某

在多分类的
SVC()
中,训练一对一分类器。因此,应该总共有
n_class*(n_class-1)/2个
分类器。但是为什么
clf.dual\u coef\ucode>只返回我
(n\u class-1)*n\u SV
?那么每一行代表什么?

在多类设置中,sklearn.svm.SVC的对偶系数很难解释。报告中有一个解释。sklearn.svm.SVC用于计算,并对双系数采用相同的数据结构。关于这些系数的组织的另一种解释见。对于在拟合SVC分类器中找到的系数,解释如下:

SVC识别的每个支持向量都属于某一类。在对偶系数中,它们是根据它们所属的类别排序的。 给定一个拟合的SVC估计器,例如

from sklearn.svm import SVC
svc = SVC()
svc.fit(X, y)
你会发现

svc.classes_   # represents the unique classes
svc.n_support_ # represents the number of support vectors per class
支持向量根据这两个变量进行组织。每个支持向量都清楚地标识为一个类,很明显,它可以隐含在最多n_类中——1对1问题,即与所有其他类的每次比较。但完全有可能的是,一个给定的支持向量不会在所有的一对一问题中都隐含

看看

support_indices = np.cumsum(svc.n_support_)
svc.dual_coef_[0:support_indices[0]]  # < ---
                                      # weights on support vectors of class 0
                                      # for problems 0v1, 0v2, ..., 0v(n-1)
                                      # so n-1 columns for each of the 
                                      # svc.n_support_[0] support vectors
svc.dual_coef_[support_indices[1]:support_indices[2]]  
                                      #  ^^^
                                      # weights on support vectors of class 1
                                      # for problems 0v1, 1v2, ..., 1v(n-1)
                                      # so n-1 columns for each of the 
                                      # svc.n_support_[1] support vectors
...
svc.dual_coef_[support_indices[n_classes - 2]:support_indices[n_classes - 1]]
                                      #  ^^^
                                      # weights on support vectors of class n-1
                                      # for problems 0vs(n-1), 1vs(n-1), ..., (n-2)v(n-1)
                                      # so n-1 columns for each of the 
                                      # svc.n_support_[-1] support vectors
svc.coef_
然后看一看

support_indices = np.cumsum(svc.n_support_)
svc.dual_coef_[0:support_indices[0]]  # < ---
                                      # weights on support vectors of class 0
                                      # for problems 0v1, 0v2, ..., 0v(n-1)
                                      # so n-1 columns for each of the 
                                      # svc.n_support_[0] support vectors
svc.dual_coef_[support_indices[1]:support_indices[2]]  
                                      #  ^^^
                                      # weights on support vectors of class 1
                                      # for problems 0v1, 1v2, ..., 1v(n-1)
                                      # so n-1 columns for each of the 
                                      # svc.n_support_[1] support vectors
...
svc.dual_coef_[support_indices[n_classes - 2]:support_indices[n_classes - 1]]
                                      #  ^^^
                                      # weights on support vectors of class n-1
                                      # for problems 0vs(n-1), 1vs(n-1), ..., (n-2)v(n-1)
                                      # so n-1 columns for each of the 
                                      # svc.n_support_[-1] support vectors
svc.coef_
这是一个形状(n_类*(n_类-1)/2)、n_特征的数组,表示上述权重

根据重量,重量的顺序如下:

class 0 vs class 1
class 0 vs class 2
...
class 0 vs class n-1
class 1 vs class 2
class 1 vs class 3
...
...
class n-2 vs class n-1

如果这是您正在寻找的,并且您还有其他问题,请毫不犹豫地发表评论。肯,非常感谢您的输入(+1)。这个链接很有用。如果我的理解是正确的,那么该页表格中唯一不同的系数是a_0(0,1)、a_1(0,1)和a_2(0,1)?我仍然很困惑(0类对1类)和(0类对2类)之间的支持向量如何相同。感谢您的反馈!在sklearn.svm.SVC分类器的具体案例中,我为双系数组织的描述添加了一些细节。谢谢你,艾肯。很抱歉,我仍然不清楚svc.dual_coef是支持向量还是这些支持向量上的权重?对于标签0与标签1、0与2、0与3、.0与n-1,支持向量(或其权重)完全相同(svc.dual_coef_u0:support_Index[0]])是否正确?这在一般情况下是不可能的。原始向量可以是无限维的,具体取决于核。在线性情况下,原始系数仅容易从对偶系数中提取。