SVM 的俩种视角

本篇博文参考来自李航统计学习方法,周志华机器学习,李宏毅机器学习课程,还有sklearn的官方文档http://sklearn.apachecn.org/cn/0.19.0/modules/svm.html

支持向量机的优缺点

优点:

  • 即使在数据维度比样本数量大的情况下仍然有效.
  • 在决策函数(称为支持向量)中使用训练集的子集,因此它也是高效利用内存的.
  • 高效性:可以通过核函数来处理线性及非线性数据
  • 鲁棒性1:对支持向量机有效的样本集是支持向量的样本,删除非支持向量样本数据,对支持向量机不产生影响
  • 鲁棒性2:软间隔的支持向量机如下图所示,即使有一些样本出现在街道内,只要还没有越过边界,依然可以将它们分类准确

缺点:

  • 支持向量机需要将很多数据放到内存里面一起进行运算,SVC 类基于libsvm库,它实现了支持核技巧的算法。训练时间复杂度通常介于O(m^2 × n)O(m^3 × n)之间。不幸的是,这意味着当训练样本变大时,它将变得极其慢
  • 支持向量机对特征的大小非常敏感,而有些数据不是仅仅依靠对特征值进行标准化就能消除这一部分影响的,比如在我看来one-hot类型数据还是用树模型要合适一些。
  • 支持向量机不向logistic、softmax模型有着概率的含义。这是由它的损失函数是hinge-loss导致的

超平面视角

从这种角度来看呢,SVM就是一个优化问题,用二次规划问题来求解。比如SMO等方法(机器学习实战详细提供了用SMO求解的步骤)

线性 SVM 分类器通过简单地计算决策函数 来预测新样本的类别:如果结果是正的,预测类别ŷ是正类,为 1,否则他就是负类,为 0

公式如下:

我们的训练目标就是:(硬间隔,如果对几何间隔和函数间隔还不太清楚,建议仔细阅读《统计学习方法》97页-100页)

我们可以看出这个问题实际上就是一个凸二次规划问题,想到这又一次难受了,总觉得凸规划的知识不够用,但是最近一直没有太多时间去学sigh。。。。

这个问题可以证明若训练集T线性可分,则可将训练集分离出来的超平面存在且唯一。李航101页

为了获得软间隔的目标,我们需要对每个样本应用一个松弛变量(slack variable)ξ。ξi 表示了第i个样本允许违规间隔的程度。我们现在有两个不一致的目标:一个是使松弛变量尽可能的小,从而减小间隔违规,另一个是使1/2 w·w尽量小,从而增大间隔。这时C超参数发挥作用:它允许我们在两个目标之间权衡,软间隔下的SVM公式如下

不管是软间隔还是硬间隔也好,都是二次规划问题(QP问题)这种问题的一般公式如下:

根据上面的通用公式我们很容易得到硬间隔的优化目标:

p是(n+1)维的w 向量 n是代表特诊变量的数目,n+1包含了常数项

H则是(n+1)x(n+1)维的特征向量

f是0

A则是 m x (n+1)维的特征向量

b是m维的-1

对于软间隔还是一样得到优化目标:

只不过在原来基础上稍微有一点小的改动,比如

H现在是(n+1+m)x (n+1+m)维数据等等。。。由于自己写公式太累

但是用QP的方法去解,就无法用核技巧,使用核技巧我们将会看到一个不同的约束优化问题。

对偶问题

这种QP问题还可以给出一个约束优化问题,即原始问题(primal problem),它可能表示不同但是和另一个问题紧密相连,称为对偶问题(Dual Problem)。对偶问题的解通常是对原始问题的解给出一个下界约束,但在某些条件下,它们可以获得相同解。幸运的是,SVM 问题恰好满足这些条件,所以你可以选择解决原始问题或者对偶问题,两者将会有相同解。(请阅读把李航统计学习方法104-106页,如果不明白KKT点这些条件请阅读拉格朗日法)

这里还是一个二次规划问题

我们依旧可以求解得到:

核技巧

你想把一个 2 次多项式变换应用到二维空间的训练集,把原来不是线性可分的数据映射到另一个空间变成线性可分的,那就不得不采用核变换,比如这样的一个数据映射后的效果是:

转换后向量的点积等于原始向量点积的平方:

关键点是:如果你应用转换ϕ到所有训练样本,那么对偶问题将会包含点积 。但如果ϕ像在 2 次多项式转换,那么你可以将这个转换后的向量点积替换成 。所以实际上你根本不需要对训练样本进行转换:仅仅需要在公式 5-6 中,将点积替换成它点积的平方。结果将会和你经过麻烦的训练集转换并拟合出线性 SVM 算法得出的结果一样,但是这个技巧使得整个过程在计算上面更有效率。这就是核技巧的精髓

常见的核函数有rbf核、多项式核,RBF可以依据泰勒公式展开,将其映射到无穷维度的空间

至于怎么定义核函数好像要服从一个mercy定理。。。事实上我的理解是只要核函生成的矩阵是半正定的都可以,李航的书121页给出了证明。

sklearn 中自己定义的一个核

这样超平面视角我们就讲完了!

Hinge—LOSS视角去看SVM

其实SVM也可以用梯度下降的方式去解:

我们可以这样观察我们刚开始的公式

我们开始的作为松弛变量的软间隔ζ正好就是hidgeloss!!! 

根据李航的114页hinge-loss其实就是整个模型的损失函数,这意味着我们也可以用梯度下降的方法去进行求解!!

同样是分类问题,logistic模型的LOSS

SVM的LOSS

我们很容易发现一个事实,hidge呢是只要大于1就好,而logistic则是精益求精,要越大越好

所以我们可以得到Linear的步骤是,这里的w的二范数看成了正则化项

从这个梯度下降角度我们依旧可以得到,即w是数据的线性组合:alpha在这里只是一个权重而已,

这个是怎么得到的呢?让我们回顾一下梯度下降的步骤

我们把w初始化为0

然后对w求导:

然后我们开始梯度下降:

这里的w1是0 ,那么w自然就是数据向量x的线性组合啦!

启示

从这里我们可以看出来SVM梯度下降方法是怎么求解的,SVM存在数据点内积的情况,那我们自然也可以联想到Logistic模型、线性回归也都可以用核变换啦!

'''
还是很难去接受你离开我们的事实,有的人大概就像流星一样,即使是一瞬也发出了比太阳还强烈的光芒,北航66周年校庆,我想如果你在的话,肯定是那个挥舞大旗,向校友们介绍北航最新发展,并大声说出“归航正青春”的人吧。扼腕!!!
'''

猜你喜欢

转载自blog.csdn.net/PythonstartL/article/details/83443165
svm