说明:此篇是作者对“SVM”的第二次总结,因此可以算作对上次总结的查漏补缺以及更进一步的理解,所以很多在第一次总结中已经整理过的内容在本篇中将不再重复,如果你看的有些吃力,那建议你看下我的第一次总结:
http://blog.csdn.net/xueyingxue001/article/details/51261397
如何定位唯一的分隔超平面
如上所示,有无数根线可以把两种样本的完全正确分开,那么谁是最优的?
SVM是这样求的:
1,假设上图中这一个个分隔超平面的方程是: f(x, w),于是第一个是f(x,w1),第二个是f(x,w2),...,第n个是f(x, wn)。
PS:x是所有样本的集合,w是方程的参数,如:wnx= y。当然了,方程可能是ax + b =y的形式,这样的话w就是(a, b)
2,上图所示的那些分隔超平面是可以通过某种算法求出来的,即:所有超平面的方程的参数wn是已知的,于是我们将所有的样本代入这一个个分隔超平面的方程中就可以算所有样本与这一个个超平面的距离。
假设:
1号样本到1号超平面的距离是d11;
2号样本到1号超平面的距离是d12;
...
n号样本到1号超平面的距离是d1n;
于是可以得出所有样本中距离1号超平面最近的点:d1*;
同理得出所有样本距离所有超平面最近的点:d2*,d3*,... ,dn*;
你知道上面的dn*意味着什么吗?
d1*:意味着d1*对应的样本点对1号分隔超平面来说是最“危险”最“难受”的,如果把1号分隔超平面比做人的话他一定回想:“我去,你这孙子离这么近可千万别乱动啊!你一动万一跑到另一侧那我就不能完全正确分类了!”
其他同理。
3,对第二步的结果求最大,即:max(d1*,d2*,d3*,... ,dn*),即:求一个分隔超平面,使得“离他最近的样本到它的距离”比“其他所有分隔超平面与离其最近的样本的距离” 都大。即:这样的分隔超平面是最安全的!而这条分隔超平面就是我们相要的!
一句话描述上面的过程就是:
通过间隔最大化得到SVM的分隔超平面。
用数学公式描述上面的过程就是:
max_imin_j f(x(j), wi)
即:求出“到所有分隔超平面” 距离最近一个个样本点x(j)后得到一个“距离集合”,然后在该“距离集合”中找到距离最大的那个超平面wi,也就是SVM的最优分隔超平面。
PS:之后会说怎么求,这里只要知道SVM求最优分隔超平面的原理就好了。
线性可分SVM目标函数的推导
实际上刚才已经写出SVM的目标函数了,即:
max_imin_j f(x(j), wi)
当然了,这种程度中看不中用,于是下面给出SVM目标函数的推导。
首要说明:这是针对线性可分支持向量机。
输入数据:
假设给定一个特征空间上的训练数据集
T={(x1,y1 ), (x2 ,y2 )…(xN ,yN)}
其中,xi ∈Rn ,yi ∈{+1,-1},i=1,2,…N。
xi为第i个实例(若n>1, x i 为向量);
yi为xi 的类标记;
当yi =+1时,称xi 为正例;
当yi =-1时,称xi 为负例;
(xi,yi )称为样本点。
求解描述:
1,给定线性可分训练数据集,通过间隔最大化得到分隔超平面:
y(x)= wTφ(x) +b
这里φ(x)是已知的(通过线性回归/Logistics等求出来了N个分隔超平面),而我们的目的是求wT和b。
2,从而有 yi·y(xi) > 0
3,不过有时会有这样的情况:
我求出两个方程ax + b = y,2ax + 2b = 2y
但这明显是一个方程,即:方程的参数w伸缩成若干倍无所谓。
所以有下面的式子:
yi·y(xi)/||w|| = yi·(wTφ(x) +b)/||w||
即:除以w做归一化。
PS:从另一个角度看:y(xi)/||w|| 就是再求样本到分割超平面的距离。
4,于是刚才的max_i min_j f(x(j), wi)就可以表示为:
这就是SVM的目标函数!
不过说实话,上面的目标函数不好求,于是我们要简化简化它。
函数间隔
对于分隔超平面:y(x) = wTφ(x) +b
函数间隔是:wTφ(x) +b
几何间隔
对于分隔超平面:y(x) = wTφ(x) +b
几何间隔是:(wTφ(x) +b) / ||w||
简化目标函数
说上面两个间隔是为了说明这一点:我总可以通过等比例缩放w的方法,使得两类点的函数值都满足|y| ≥1,如下图所示:
即:对于SVM的目标函数:
argmax{(1/||w||)min[yi·(wT·φ(xi)+b)]}
因为|y| ≥1,即:yi·(wT·φ(xi)+b) ≥ 1
所以min[yi·(wT·φ(xi)+b)] = 1
这样一来,SVM的目标函数就可以简化为:
打个比方: 本来有两个样本点x1,x2。它们到分隔超平面的距离分别是d1=5,d2=10。 方法一:我用5,10判断,知道距离最小的样本点是x1。 方法二:我先对距离都除以5,于是距离变成了d1=1,d2=2,然后用1,2这两个距离判断,最后知道距离最小的样本点是x1。 就最终结果来说,上面的方法一和方法二都行吧! 真正说明的话: 对于分隔超平面,假设其方程是5x+10y + 1 = 0(方程1),此时两个样本点x1, x2到它的距离分别是d1=5,d2=10。 方法一:直接用5,10判断,知道距离最小的样本点是x1。 方法二: 1,缩放分隔超平面的系数,使的两个样本到超平面的距离是d1=1,d2=2。 PS:假设缩放系数后超平面的方程是:0.5x + 1y + 0.1 = 0(方程2),这时方程1和方程2是一个方程吧,所以我可以这么缩放,而且不会有任何后遗症。 2,用1,2这两个距离判断,最后知道距离最小的样本点是x1。 就最终结果来说,上面的方法一和方法二是没区别的! |
习惯上把求最大转换成求最小,于是上式修改为:
而这,就是SVM最终的目标函数!!
是不是好简单!!
使用拉格朗日乘子法求解
对于有约束的求极值问题,就使用拉格朗日乘子法呗,因为这里有个不等式约束,所以要使用KKT条件,从而有下面的式子:
原问题是极小极大问题:
为了求解方便,将其转换成原始问题的对偶问题,即极大极小问题:
PS:这个在我的这个总结里有说明:http://blog.csdn.net/xueyingxue001/article/details/51858098
于是第一步对w,b求偏导后令偏导为0,有如下结果:
结合上述结果作如下推导:
最终得到α的目标式:
但这里是求极大,习惯上将其转换成求极小,转换后如下:
如果求出α的话
如果求出α的话,那代入下面的式子:
求出w和b,这样就得到了分隔超平面:
w*φ(x) + b* = 0
分类决策函数也就出来了:
f(x)= sign(w*φ(x) + b*)
于是下面我们的主要问题是如何求α。
求α
方法是SMO,手算的话就是下面这样了。不过这个虽然是手算,但有个很重要的结论,所以还是建议看下。(截图来自小象学院的邹博老师)
一个重要的结论
话说,上面这个例子很简单,但结论很有趣。
上面这个分隔超平面求出时:点x1和x3的α1和α3不等于0,点x2的α2等于0,这说明什么?
这说明:α=0的那个(些)样本点不参与w*和b*的构架,即:分隔超平面的构建,即:α≠0的样本点是支持向量!