如何解释SVM功能权重?


42

我试图解释通过拟合线性SVM给出的可变权重。

(我正在使用scikit-learn):

from sklearn import svm

svm = svm.SVC(kernel='linear')

svm.fit(features, labels)
svm.coef_

我在文档中找不到任何具体说明如何计算或解释这些权重的信息。

体重的迹象与上课有关系吗?

Answers:


55

对于一般内核,很难解释SVM权重,但是对于线性SVM,实际上有一个有用的解释:

1)回想一下,在线性SVM中,结果是一个超平面,该平面将类别尽可能地分开。权重通过提供与该超平面正交的矢量坐标来表示该超平面-这些是svm.coef_给定的系数。我们称这个向量为w。

2)我们可以用这个向量做什么?方向为我们提供了预测的类,因此,如果将任意点的点积与向量相乘,则可以判断出它在哪一侧:如果点积为正,则属于正类,如果为负,则为正类属于负面类别。

3)最后,您甚至可以了解每个功能的重要性。这是我自己的解释,因此请先说服自己。假设svm将仅找到一个可用于分离数据的功能,然后超平面将与该轴正交。因此,您可以说该系数相对于其他系数的绝对大小表明了该功能对分离的重要性。例如,如果仅将第一个坐标用于分隔,则w将具有(x,0)的形式,其中x是某个非零数,然后| x |> 0。


3
第3点是使用线性SVM的权重向量进行特征(基因)选择的RFE算法的基础:请参见Guyon axon.cs.byu.edu/Dan/778/papers/Feature%20Selection/guyon2.pdf
B_Miner

1
@B_Miner谢谢!我担心,因为我自己想到了这可能是错误的(我不是来自“纯” CS),但我想这是正确的。
2012年

1
如果正交矢量将两个类别分开,那么它的方向是什么意思?它与分离超平面对类预测总体概率的贡献有关吗?
奥斯丁·理查森

0

@B_Miner,我想您的意思是链接到本文,而不是Guyon的另一篇。
ijoseph '18

11

文档非常完整:对于多类情况,基于libsvm库的SVC使用“一对一”设置。在线性核的情况下,n_classes * (n_classes - 1) / 2为每个可能的类对拟合单个线性二进制模型。因此,连接在一起的所有原始参数的总形状为[n_classes * (n_classes - 1) / 2, n_features](属性中的+ [n_classes * (n_classes - 1) / 2截距intercept_)。

对于二进制线性问题,coef_在此示例中完成了从属性绘制分离超平面的操作。

如果需要有关拟合参数含义的详细信息,尤其是对于非线性核的情况,请查看数学公式和文档中提到的参考。


1
在Sklearn的文档中,coef_属性的形状为[n_class-1,n_features]。我相信这是一个错误。
Naomi

6

我试图解释通过拟合线性SVM给出的可变权重。

理解权重是如何计算以及如何在线性SVM情况下解释权重的一个好方法是在一个非常简单的示例上手动执行计算。

考虑以下线性可分离的数据集

import numpy as np
X = np.array([[3,4],[1,4],[2,3],[6,-1],[7,-1],[5,-3]] )
y = np.array([-1,-1, -1, 1, 1 , 1 ])

SVM简单

通过检查解决SVM问题

x2=x13wTx+b=0

w=[1,1]  b=3

SVM理论告诉我们,边距的“宽度”由给出2||w||22=242

c

cx1cx23c=0
w=[c,c]  b=3c

重新插入方程式中得到的宽度

2||w||=4222c=42c=14

w=[14,14]  b=34


(我正在使用scikit-learn)

我是吗,这是一些代码来检查我们的手动计算

from sklearn.svm import SVC
clf = SVC(C = 1e5, kernel = 'linear')
clf.fit(X, y) 
print('w = ',clf.coef_)
print('b = ',clf.intercept_)
print('Indices of support vectors = ', clf.support_)
print('Support vectors = ', clf.support_vectors_)
print('Number of support vectors for each class = ', clf.n_support_)
print('Coefficients of the support vector in the decision function = ', np.abs(clf.dual_coef_))
  • w = [[0.25 -0.25]] b = [-0.75]
  • 支持向量的索引= [2 3]
  • 支持向量= [[2. 3.] [6. -1。]]
  • 每个类别的支持向量数量= [1 1]
  • 决策函数中支持向量的系数= [[0.0625 0.0625]]

体重的迹象与上课有关系吗?

并不是真的,权重的符号与边界平面的方程有关。

 

资源

https://ai6034.mit.edu/wiki/images/SVM_and_Boosting.pdf


5

有关功能选择,请查阅本文。作者使用由线性内核SVM分配的(属性的)权重平方作为确定特定属性的相关性的排名指标。这是从微阵列数据中选择基因的一种被广泛引用的方法。


3

Guyon和Elisseeff(2003)的出色论文。变量和特征选择简介。机器学习研究杂志,1157-1182年说:“构造和选择对构建良好预测变量有用的特征子集与查找或排序所有潜在相关变量的问题形成对比。选择最相关的变量通常对于构建模型而言不是最优相反,有用变量的子集可能会排除许多冗余但相关的变量。”

因此,在一般情况下解释线性模型的权重(包括逻辑回归,线性回归和线性核SVM)时,建议谨慎使用。如果输入数据未标准化,则SVM权重可能会补偿。特定功能的SVM权重还取决于其他功能,尤其是在功能相关的情况下。为了确定单个功能的重要性,功能排序方法是一个更好的选择。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.