时间有限,markdown编辑公式不熟悉,全当是自己理理svm的公式了
支持向量机
SVM出发点:
1 对于二维平面,给定平面上的任何一个直线:
y(x)=ωTϕ(x)+b 直线1 (1)
对于平面上的任何一点,与直线的关系为:要么在直线上,要么在直线外,在直线上就是y(x)=0
对于不在直线上,代入直线要么y(x)>0,要么y(x)<0
svm:对于平面上要分类的两类点(A类和B类,直线之上的定义为A类,类别标签为1,直线之下的定义为B类,标签定义为-1,标签用t表示),对于上面的直线,有
tny(xn)>0
(2) 与直线1平行,且经过A类最近的点,有y(x)≥0,我们归一化ω,b参数,使得y(x)≥1
同理对于经过B类最近的点,有y(x)≤0,我们归一化参数ω,b,使得y(x)≤−1,
两边再乘以标签t,就得到一个统一的表达式:
tny(xn)−1≥0
(3) (注意,虽然归一化到一个公式,但是实际上对应有两条直线,对应于A,B类离y(x)=0直线最近点所组成的平行于y(x)=0两条平行线)
SVM要做的就是,将平行线:
tn(ωTϕ(xn)+b)=1
(4) 之间的距离最大化,对于两条直线上的点,这些点到直线y(x)=0的距离:
|y(x)|∥ω∥
(5) 由上面可以知道对于直线y(x)乘以t以后,一定大于零,且不会带来值的缩放,那么就可以变成下面的式子:
tny(xn)∥ω∥=tn(ωTϕ(xn)+b)∥ω∥
(6) 由于(3),我们取边界点值的话就是=1,那么优化就变成了:
1|ω∗ω+1|
,我们可以写的再简单一点,去掉1,取倒数,乘以1/2,不影响结果: argminω,b12∥ω∥2
(7) 由于在简化优化等式的时候,加上的前提条件:
t(ωTϕ(xn)+b)≥1,n=1,...,N
(8) 所有的数据点都满足式子8,只有边界点上的值会使得等号成立,我们一般希望用一个cost函数来进行优化,因此希望在一个优化式子中加入上面的约束,(7)是最小化,那么我们希望下面的式子也最小化:
tn(ωTϕ(xn)+b)−1
(9) 上面这个式子实际上大于等于0,因此越大越好,可以转化成求最大值,因此乘以负号,这样就可以用一个最小化代价函数来表示,一般我们会对约束(有时这个式子也叫正则项)加上一个系数,这个系数的作用代表了影响力(这个系数大于等于0),最后的式子就是:
L(ω,b,a)=12∥ω∥2−∑n=1Nan{tn(ωTϕ(xn)+b)−1}
(10) 要求这个式子的最值,对于连续函数,最值在导数为0 的点,因此分别对参数求导:
得到下面的等式:
ω=∑n=1Nantnϕ(xn)0=∑n=1Nantn
(11)
代入上面的式子,乘以负号,求该式子的最大值,就变成了上面等式的对偶问题,下面的最大化解即是上面的最小化解:
L\~(a)=∑n=1Nan−12∑n=1N∑m=1Nanamtntmk(xn,xm)
(12) 限制条件为:
an≥0,n=1,...,N∑n=1Nantn=0
(13) 这是一个多元二次函数的寻优问题,存在唯一解,求出来的w值,是公式11中的形式,将w代入1式
后,对任意的输入x,输出的y值为:
y(x)=∑n=1Nantnk(x,xn)+b
(14) 同时,有一下三个性质成立:
an≥0tny(xn)−1≥0an{tny(xn)−1}=0
(15) 对于每个数据点,都对应于一个:
an
(16) 要么:
an=0
(17) 要么:
tny(xn)=1
(18) 。任何使得17成立的数据点都不会出现在14求和式子中,因此对新数据的预测没有作用。剩下的数据点被称为支持向量,由这些向量,及向量系数支撑了分类器的边界。由于这些支持向量满足18,因此他们对应于特征空间中位于最大边缘超平面内的点。这个性质是支持向量机在实际应用中的核心。一旦模型被训练完毕,相当多的数据点都可以被抛弃,只有支持向量被保存下来。
现在还有阈值参数b没确定,由公式14和18我们可以得到:
tn(∑m∈Samtmk(xn,xm)+b)=1
(19) m表示支持向量的集合,n表示我们任取的一个支持向量,虽然任取一个支持向量可以求到b,但是使用整个支持向量的集合求解b取均值更稳健,tn的平方为1,两边乘以tn,整理后:
b=1NS∑n∈S(tn−∑m∈S(amtmk(xn,xm)))
(20) 这样求得a,b参数后,就可以对任意输入向量进行判别了
数据重合
不一定所有的数据都是线性可分的,对于非线性可分,有以下两种处理方式:
1 将数据投影到高维空间中,典型的二维数据不可分数据投影到三维中就有可能线性可分
2 添加松弛变量
实际使用时,更多的是上面二者的结合,即同时进行投影和添加松弛变量,理想的情况下,所有的数据点满足公式8:
t(ωTϕ(xn)+b)≥1,n=1,...,N
(8) 但在这里,我们为每一个数据添加一个松弛变量,使得8式子变成:
tny(xn)≥1−ξn,n=1,...,N
(21) 这个松弛变量的意义就在于,当有些数据点不满足8式子时,即有可能小于1,甚至小于0时,我们通过调节对应数据的松弛变量,就可以使得8式子成立。这个松弛变量被限定为大于等于0,等于0的点是在边界或者边界内部的点,是正确分类的点,在0和1之间的是边界面到中间面之间的数据,也是属于分类正确的点,当大于1 的时候,就是属于分类错误的点:
通过这种方式,允许一些数据点被错分,得到一个softmargin,虽然能够解决上面的无法求解的问题,但是会也会带来另一个问题,对异常点很敏感,因为误分类的惩罚随着松弛变量而线性增加。参考上面的最小化,我们这里的最小化变成:
C∑n=1Nξn+12∥ω∥2
(22) 参数C控制了松弛变量惩罚与边缘之间的折中,由于任何误分类的数据点松弛变量都大于1,那么
∑nξn
(23) 是误分类数据点数量的上界,C就类似于正则化系数,控制了最小训练误差和模型复杂度之间的折中。当C趋于无穷大时,就变成了上面的线性可分的支持向量机,即C越大,错分点越少,为什么?因为在具有导向作用的loss函数中,C越大,整个loss中C对应的那个松弛变量累加和所占比例越大,loss函数越关注C对应那个松弛变量,即整个求解函数中,会重点,优化关注这个正则项,但是太大,也会带来一个问题,就是过拟合,所以,C的选择要适中。
对应于10式子:
L(ω,b,a)=12∥ω∥2−∑n=1Nan{tn(ωTϕ(xn)+b)−1}
(10)
就变成
L(ω,b,ξ,a,u)=12∥ω∥2+C∑n=1Nξn−∑n=1Nan{tny(xn)−1+ξn}−∑n=1Nunξn
(24)
a和u是系数,也叫拉格朗日乘数,都大于等于0.对应的KKT条件:
an≥0tny(xn)−1+ξn≥0a(tny(xn)−1+ξn)=0un≥0,ξn≥0,unξn=0
(25)
同上面一样,我们对24式子对每个参数分别求偏导数:
∂L∂ω=0⇒ω=∑n=1Nantnϕ(xn)
(26) ∂L∂b=0⇒∑n=1Nantn=0∂L∂ξn=0⇒an=C−un
(27) 使用这些结果代入24式,可以得到:
L\~(a)=∑n=1Nan−12∑n=1N∑m=1Nanamtntmk(xn,xm)
(28)
可以看到与线性可分的情况完全一样,唯一的区别,就是限制条件不一样,由于拉格朗日乘子大于0,即a,u大于0,那么由27中a = C -u:可知:
0≤an≤C∑n=1Nantn=0
(29) 由于非支持向量的系数an为0,支持向量的an大于0,对于前面的KKT条件第三个式子可知,对于支持向量,必有:
tny(xn)=1−ξn
(30) 如果a小于c,那么u大于0,由式子25最下面一个可以得到松弛变量必须为0,因此,对于满足
0<an<C
(31) 的支持向量有:
t(∑m∈Samtmk(xn,xm)+b)=1
(32) 对于满足31添加的支持向量可以求b:
b=1NM∑n∈M(tn−∑m∈Samtmk(xn,xm))
(33) M表示满足31条件的数据集合
上面用到了参数C,对应的SVM叫C-SVM,还有还有另外对应的v-SVM,将C替换为v,然后修改式子28和对应的限制条件:
L\~(a)=−12∑n=1N∑m=1Nanamtntmk(xn,xm)
(34) 限制:
0≤an≤1N∑n=1Nantn=0∑n=1Nan≥v
(35) 这种方法的优点是,v替代C,即可以被看成margin error的上界,也可以看作支持向量数量的下界。