机器学习 之 SVM

SVM是纯粹的分类模型

支持向量机(support vector machines, SVM)是一种二分类模型,追求最大明显划分。

感知机 (perceptron):感知机是神经网络(深度学习)的起源算法,追求完全划分,先讲这个。

感知机是二分类的线性模型,
其输入是实例的特征向量,
输出的是事例的类别,分别是+1和-1,属于判别模型。
感知机学习的目标是求得一个能够将训练数据集正实例点和负实例点完全正确分开的分离超平面。如果是非线性可分的数据,则最后无法获得超平面。

假设超平面为 h = ( w 0 , w 1 . . . w m ) T ( 1 , x 1 . . . x m ) h=(w_0,w_1...w_m)^T(1,x_1...x_m) h=(w0,w1...wm)T(1,x1...xm),那么样本点p到超平面(一般比当下空间仅仅少一维)的距离如下:
d = x ⋅ w ∣ ∣ w ∣ ∣ d=\frac{\textbf x·\textbf w}{||\textbf w||} d=wxw

实际上这个公式也可以当作SVM分类函数,大于0就代表正,小于0就代表负。分子是普通的带入,分母是p2范数,就是 w 0 2 + w 1 2 + . . . + W m 2 \sqrt{w_0^2+w_1^2+...+W_m^2} w02+w12+...+Wm2 ,感知机就是不断缩小误分类点到超平面的距离,直到没有任何误分类点,整体就可以了。

如果不是超平面就不会收敛了。因为感知机学习算法最终的终止条件是所有的输入都被正确分类,即不存在误分类的点。因此忽略 1 ∣ ∣ w ∣ ∣ \frac{1}{||w||} w1(分母)也不会对感知机学习算法的执行过程产生任何影响。反而还能简化运算,提高算法执行效率(SVM运算特别困难)。为什么能丢掉分母呢?因为这里是“误分类驱动”原则,分母不影响误分类,实际上是说不太明白了,但总之没差。

因为只有误分类的M集合里面的样本才能参与损失函数的优化,因此 w , b w,b w,b取误差点距离和最小时的 w , b w,b w,b,损失函数也就是
L ( w , b ) = a r g m i n ( − ∑ x i ∈ M y i ( w ⋅ x i + b ) ) L(w,b)=argmin(-\sum_{x_i\in M}y_i(w·x_i+b)) L(w,b)=argmin(xiMyi(wxi+b))

损失函数中的 x i , y i x_i,y_i xi,yi是已知值,其中 y i y_i yi是-1或1,因为当错误分类时,输出值与标签值必定反号,因此相乘就是负的,前面再添加上一个符号就是正的,所以整体损失函数就相当于正距离,当损失函数最小时,求 w , b w,b w,b的值,如何运算呢?拿出一个点来,判断是不是误分类点,如果是,执行如下公式更新 w , b w,b w,b
w = w + a y i x i w=w+ay_ix_i w=w+ayixi b = b + a y i b=b+ay_i b=b+ayi

迭代公式, a a a为学习率, y i y_i yi为正负1,基本上这样算就会越来越靠近中间了。为什么是这样的迭代呢?因为这是对 w w w求导了,导数自然是 y i x i y_ix_i yixi!就一直迭代,迭代到误分类点没有就好了,为什么不能求导等于0呢,这里有选择,反正这样做是最好的。

支持向量机则固定分子,实际上,函数间隔 y i w x i y_iwx_i yiwxi并不能正常反应点到超平面的距离(是吧,这是有问题的),只有几何间隔(欧氏距离)才能表示,不能偷工减料。
SVM是找一个最优平面,而这个最优平面可以证明是唯一的,离这个平面最近的向量叫做支持向量。SVM的模型是让所有点到超平面的距离大于一定的距离,不得小于支持向量。
s . t .     y i ( w ∣ ∣ w ∣ ∣ ⋅ x i + b ∣ ∣ w ∣ ∣ ) ≥ γ s . t .     y i ( w ∣ ∣ w ∣ ∣ γ ⋅ x i + b ∣ ∣ w ∣ ∣ γ ) ≥ 1 s.t. \space\space\space y_i(\frac{w}{||w||}·x_i+\frac{b}{||w||})\geq \gamma\\ s.t. \space\space\space y_i(\frac{w}{||w||\gamma}·x_i+\frac{b}{||w||\gamma})\geq 1 s.t.   yi(wwxi+wb)γs.t.   yi(wγwxi+wγb)1

我们要知道我们要干什么,我们要最大化 γ \gamma γ,又注意到其被移到分母中,实际上我们直接最大化 1 ∣ ∣ w ∣ ∣ \frac{1}{||w||} w1,最大化后的 γ \gamma γ就是支持向量(最近点)的最远距离,或者说,极小化 1 2 ∣ ∣ w ∣ ∣ 2 \frac{1}{2}||w||^2 21w2,前面的 1 2 \frac{1}{2} 21只是为了运算方便。

这是一个含有不等式约束的凸二次规划问题,可以对其使用拉格朗日乘子法得到其对偶问题。求分母倒数的最大化,这可太简单了,然后带上分子(拉格朗日法)(凸优化)(受限条件,无约束转化,这样转化约束就没了 s . t . y i ( w T x i + b ) ≤ 1 s.t. y_i(w^Tx_i+b)\leq 1 s.t.yi(wTxi+b)1)(处于方便推导和优化的目的,我们可以令 γ \gamma γ等于1),先求 w w w的最小值,再求拉格朗日乘子的最大值(因为前面是负号嘛)。具体的,优化函数转化为:
L ( w , b , a ) = 1 2 ∣ ∣ w ∣ ∣ 2 2 − ∑ i = 1 m a i [ y i ( w T x i + b ) − 1 ] L(w,b,a)=\frac{1}{2}||w||^2_2-\sum^m_{i=1}a_i[y_i(w^Tx_i+b)-1] L(w,b,a)=21w22i=1mai[yi(wTxi+b)1]

由于引入了拉格朗日乘子 a i a_i ai,我们的优化目标变成:
m i n w , b m a x a i > 0 ( w , b , a ) min_{w,b}max_{a_i>0}(w,b,a) minw,bmaxai>0(w,b,a)

很明显的是,当约束条件不满足时( y i ( w T x i + b ) < 1 y_i(w^Tx_i+b)<1 yi(wTxi+b)<1),那么只要让 a i = ∞ a_i=\infty ai=,整个式子将会达到极小,而当约束满足时,则最优值为 L ( w , b , a ) = 1 2 ∣ ∣ w ∣ ∣ 2 L(w,b,a)=\frac{1}{2}||w||^2 L(w,b,a)=21w2,亦即最初要最小化的量。

我们也可以先求优化函数对于 w w w b b b的极小值,接着再求拉格朗日乘子 α \alpha α的极大值。但这个不好做(为什么不好做?反正就是不好做),我们需要转换成拉格朗日对偶,即先求最大,再求最小。但应满足:

  1. 优化问题是凸优化问题
  2. 满足KKT条件(Karush-Kuhn-Tucker (KKT)条件,是非线性规划(nonlinear programming)最佳解的必要条件。)

首先,本优化问题显然是一个凸优化问题,所以条件一满足,而要满足条件二,即要求
在这里插入图片描述
非常注意第三个式子才是主要式子。
在这里插入图片描述
为什么,不知道,这个SVM实在太困难了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
到这里就完了,继续就是非线性SVM了。

这里只说SMO,东西太多太杂了。
那么你就需要了解核函数,你就需要明白非线性SVM。。。
在这里插入图片描述
由于分类完全有超平面决定,而超平面完全由支持向量决定。所以这些无关的点并不会参与分类问题的计算,因而也就不会产生任何影响了。
具体来说,在线性不可分的情况下,支持向量机首先在低维空间中完成计算,然后通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分离超平面,从而把平面上本身不好分的非线性数据分开。如图所示,一堆数据在二维空间无法划分,从而映射到三维空间里划分:
在这里插入图片描述
在这里插入图片描述
如何升维,就是通过之前两个坐标进行组合就可以了。与PCA相对吧。如果有一种方式可以在特征空间中直接计算内积〈φ(xi · φ(x)〉,就像在原始输入点的函数中一样,就有可能将两个步骤融合到一起建立一个非线性的学习器,这样直接计算法的方法称为核函数方法。
在这里插入图片描述
在这里插入图片描述
我们把这里的计算两个向量在隐式映射过后的空间中的内积的函数叫做核函数 (Kernel Function),核函数能简化映射空间中的内积运算——刚好“碰巧”的是,在我们的 SVM 里需要计算的地方数据向量总是以内积的形式出现的。
这样一来计算的问题就算解决了,避开了直接在高维空间中进行计算,而结果却是等价的!

核函数通过运算,能够尽可能低地向上映射,跟PCA有异曲同工之妙。
也就是说,SVM同样适用于非线性。

在这里插入图片描述
此为松弛变量,这样就会允许一些误分类点,结果就会导致分类平面更佳。

在这里插入图片描述
在这里插入图片描述
SMO看来是一种迭代方法
第一步选取一对a_i和a_j,选取方法使用启发式方法;
第二步,固定除和之外的其他参数,确定W极值条件下的,由表示。

SMO算法的基本思想是将Vapnik在1982年提出的Chunking方法推到极致,SMO算法每次迭代只选出两个分量ai和aj进行调整,其它分量则保持固定不变,在得到解ai和aj之后,再用ai和aj改进其它分量。与通常的分解算法比较,尽管它可能需要更多的迭代次数,但每次迭代的计算量比较小,所以该算法表现出较好的快速收敛性,且不需要存储核矩阵,也没有矩阵运算。

SMO就是为了化简如下问题的:
在这里插入图片描述
首先,初始化一个α,让它满足对偶问题的两个初始限制条件,然后不断优化它,使得由它确定的分离超平面满足g(x)目标条件,在优化的过程中始终确保它满足初始限制条件,这样就可以找到最优解。

具体怎么优化α呢?经过思考,我发现必须遵循如下两个基本原则:

每次优化时,必须同时优化α的两个分量,因为只优化一个分量的话,新的α就不再满足初始限制条件中的等式条件了。

每次优化的两个分量应当是违反g(x)目标条件比较多的。就是说,本来应当是大于等于1的,越是小于1违反g(x)目标条件就越多,这样一来,选择优化的两个分量时,就有了基本的标准。

虽然我不知道怎样优化α1、α2,让它们对应的样本违反g(x)目标条件变轻,但是我可以让它们优化后目标函数的值变小啊!使目标函数变小,肯定是朝着正确的方向优化!也就肯定是朝着使违反g(x)目标条件变轻的方向优化,二者是一致的啊!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值