一、了解支持向量机
支持向量机(support vector machings, SVM) 是一种二分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。
支持向量机学习方法的构建由简单到复杂:线性可分模型、线性支持向量机、以及非线性支持向量机。简单模型是复杂模型的基础,也是复杂模型的特殊情况。当训练数据线性可分时通过硬间隔最大化,学习一个线性分类器,即为线性可分支持向量机;当训练数据接近线性可分时,通过软间隔最大化,也学习一个线性分类器,即线性支持向量机;当训练数据线性不可分时,通过使用核技巧(kernel trick)及软间隔最大化,学习非线性支持向量机。
二、线性支持向量机之硬间隔最大化
1、什么是线性可分?
在下图的例子中,二维平面的点可以通过一条直线将两类样本完全分开,我们称这种情况下是线性可分的。一般的,两种样本标签分别用(+1)和(-1)表示,在多维空间中,所谓线性可分其实就是可以找到一个超平面使得两类样本分别在超平面的两侧。
超平面可以用$w cdot x + b = 0$其中$w$是一个$n$维向量,$x=[x_1,x_2,..,x_n]^T$表示样本点向量。$cdot$表示向量内积,超平面也可以等效的表示为$w^Tx+b=0$.(因为$w cdot x = w^Tx$),我们令$f(x)=w^Tx+b$,则 $ f(x) > 0 $ 时,$x$在超平面上方,$f(x)=0$ 时,$x$ 在超平面上,$f(x)<0$时,$x$在超平面下方。
## 2. 计算点到超平面的距离
在超平面表达式$w cdot x+ b =0$中,$w$就是超平面的法向量,设空间任意一点为$x$,它在超平面上的投影点是$x'$,则有
$$f(x)=w cdot x+b quad (1)
$$
$$
x = x'+lambda w quad (2)
$$
通过$(1)、(2)$可以得到
$$
f(x)=w cdot (x'+ lambda w)+b=w cdot x' + lambda w cdot w + b
$$
$$
= lambda w cdot w
$$
也就是
$$
lambda = frac{g(x)}{w cdot w}
$$
点到超平面的距离$M$表示为
$$
M = ||x-x'||=||lambda w||
$$
$$
=frac{|g(x)| imes ||w||}{w cdot w}=frac{|g(x)|}{||w||}
$$
3. 函数间隔和几何间隔
一般而言,一个点距离超平面的远近可以表示分类预测的确信度,在超平面(w cdot x + b = 0)确定的情况下,(|w cdot x + b|)可以相对的表示(x)距离超平面的远近,而(w cdot x + b)与(y)的符号是否一致能够表示分类是否正确,所以可以使用(y(w cdot x + b))表示分类正确性以及确信度,这就是函数间隔的概念。
函数间隔 对于给定的训练数据集(T)和超平面((w,b)),定义超平面((w,b))关于样本((x_i,y_i))的函数间隔为
[hat{gamma_i} = y_i(w cdot x_i +b)
]
注意 :样本((x_i,y_i))中,(x_i)是样本的特征向量,(y_i)是样本标签,(y_i)取值为1或者-1
定义超平面((w,b))关于训练集的函数间隔为超平面((w,b))关于所有训练样本点((x_i,y_i))的函数间隔最小值
[hat{gamma} = min ; hat{gamma_i} quad where quad i=1,2...,N
]
显然只有函数间隔是不够的,如果按照比率的改变(w)和(b),超平面并没有变,但是函数间隔却变为原来的倍数,所以我们一般约定(||w||=1)使得间隔是确定的,这时函数间隔就变为几何间隔,其实就是点到超平面的距离。
几何间隔 对于给定的训练数据集(T)和超平面((w,b)),定义超平面((w,b))关于样本((x_i,y_i))的几何间隔为
[gamma_i = y_ifrac{g(x)}{||w||}
]
定义超平面((w,b))关于训练集的函数间隔为超平面((w,b))关于所有训练样本点((x_i,y_i))的几何间隔间隔最小值
[gamma= min ; gamma_i quad where quad i = 1,2...,N
]
4.间隔最大化
我们需要将几何间隔最大化,即为
[max;gamma
]
[s.t. quad y_i(frac{g(x_i)}{||w||}) geq gamma quad i=1,2,...,N
]
由于(hat{gamma}=gamma ||w||)上面最优化问题等价于
[max;frac{hat{gamma}}{||w||}
]
[s.t. quad y_ig(x_i) geq hat{gamma} quad i=1,2,...,N
]
由于可以对(w,b)同时乘以任意倍数,所以实际上(hat{gamma})的值对上述最优化问题没有影响,这等价于(hat{gamma}=1)的情况,上述最优化问题等价于
[max;frac{1}{||w||}
]
[s.t. quad y_ig(x_i) geq 1 quad i=1,2,...,N
]
再者最大化(frac{1}{||w||})等同于小化(frac{1}{2}||w||^2=frac{1}{2}w^Tw),从而上述最优化问题也等价于
[min;frac{1}{2} w^Tw
]
[s.t. quad y_ig(x_i) geq 1 quad i=1,2,...,N
]
所以我们的问题转化为
[Minimize quad quad quad quad quad quad phi(w) = frac{1}{2}w^Tw
]
[Subject ;; to quad quad y_i(w cdot x_i + b) geq 1 quad i=1,2,...,N
]
5.利用拉格朗日乘数法求解最优化问题
下面我们通过拉格朗日乘数法求解上述最优化问题
[L_p=frac{1}{2}w^Tw-sum_{i=1}^Nalpha_iy_i(w_icdot x_i +b)+sum_{i=1}^N alpha_i quad (1)
]
求偏导数得
[frac{ partial L_p}{partial w}=w-sum_{i=1}^Nalpha_iy_ix_i=0 quad Longrightarrow quad w =sum_{i=1}^Nalpha_iy_ix_i quad (2)
]
[frac{partial L_p}{partial b}=0 quad Longrightarrow quad sum_{i=1}^N{alpha_iy_i}=0 quad (3)
]
我们将((2)、(3))代入((1))得到(为了区分,用(L_D)替换(L_p))
[L_D=sum_{i=1}^N{alpha_i}-frac{1}{2}sum_{i,j}alpha_ialpha_jy_iy_jx_i cdot x_jquadquadquadquadquadquadquadquadquad
]
[=sum_{i=1}^Nalpha_i-frac{1}{2}alpha^THalpha quad where quad H_{ij}=y_iy_jx_i cdot x_j
]
[s.t. quad sum_{i=1}^N{alpha_iy_i}=0;;,;; alpha_i geq 0 quadquadquadquadquadquadquadquadquadquadquad
]
这样,上式最优化问题已经很简单了,我们就可以借助软件工具求解了。假设我们求解出了最优化下的(alpha)向量为(alpha^*=[alpha_1^*,alpha_2^*...,alpha_{l}^*]^T),这时候代入((2))就可以得到
[w=sum_{i=1}^Nalpha_i^*y_ix_i quad (4)
]
并可以选择一个(alpha^*)的正分量(alpha_j^*>0)来计算(b)
[b = y_j-sum_{i=1}^Nalpha_i^*y_i(x_i cdot x_j) quad (5)
]
并且得到函数间隔(g(x))可以表示为
[g(x)=w cdot x +b = (sum_{i=1}^N alpha_i y_ix_i)cdot x+ b=sum_{i=1}^N{alpha_iy_i (x_icdot x )}+ b
]
上述表示是内积的形式,我们在后面将会用到
6.什么是支持向量?
下图是两类点蓝色和红色,两条绿色线之间的几何距离就是最大的(margins),中间虚线就是是我们所求的超平面(w cdot x + b =0),而在两条绿色线上的点就是我们所说的支持向量,它其实就是那些决定硬间隔的样本点,这些点一定在间隔边界上(图中的绿线)。
支持向量的定义 求解原始最优化问题后,将训练集中对应的(alpha_i^*>0)的样本点((x_i,y_i))的实例(x_i in R^n)称做支持向量。支持向量一定在间隔边界上,它满足
[y_ig(x_i)=1 quad Longrightarrow quad y_i(w cdot x+b)=1 quad Longrightarrow quad w cdot x + b = pm 1
]
7.一个计算例子
正点样列为(x_1=[3,3]^T,x_2=[4,3]^T),负点样列为(x_3=[1,1]^T),下面来计算(w)和(b).
根据条件得到
[sum_{i=1}^3alpha_iy_i=0 quad Longrightarrow quad alpha_1+alpha_2-alpha_3=0
]
然后计算矩阵(H)为
[H =
left [
egin{matrix}
H_{11} & H_{12} & H_{13} \
H_{21} & H_{22} & H_{23} \
H_{31} & H_{32} & H_{33} \
end{matrix}
ight ]=left [
egin{matrix}
y_1y_1x_1 cdot x_1 & y_1y_2x_1 cdot x_2 & y_1y_3x_1 cdot x_3 \
y_2y_1x_2 cdot x_1 & y_2y_2x_2 cdot x_2 & y_2y_3x_2 cdot x_3 \
y_3y_1x_3 cdot x_1 & y_3y_2x_3 cdot x_2 & y_3y_3x_3 cdot x_3 \
end{matrix}
ight ] =left [
egin{matrix}
18 & 21 & -6 \
21 & 25 & -7 \
-6 & -7 & 2 \
end{matrix}
ight ]
]
从而
[L_D=sum_{i=1}^3alpha_i - frac{1}{2}[alpha_1,alpha_2,alpha_3]H[alpha_1,alpha_2,alpha_3]^Tquadquadquadquadquadquadquadquadquadquadquadquadquadquad
]
[=-9alpha_1^2-frac{25}{2}alpha_2^2-alpha_3^2-21alpha_1alpha_2+6alpha_1alpha_3+7alpha_2alpha_3+alpha_1+alpha_2+alpha_3
]
即为
[max ; L_D quadquadquadquadquadquadquad
]
[s.t. quad alpha_1+alpha_2-alpha_3=0,alpha_1 geq 0,alpha_2 geq 0,alpha_3 geq 0
]
将(alpha_3 = alpha_1+alpha_2)代入目标函数得
[F(alpha_1,alpha_2)=-4alpha_1^2-frac{13}{2}alpha_2^2-10alpha_1alpha_2+2alpha_1+2alpha_2
]
可以求得(F(alpha_1,alpha_2))在点([frac{3}{2},-1]^T)处取极值,但是不满足(alpha_2 geq 0),所以在边界处取得最大值,分别令(alpha_1=0)和(alpha_2=0),可以求得极值分别为(F(0,frac{2}{13})=frac{2}{13})和(F(frac{1}{4},0)=frac{1}{4}),故(F(alpha_1,alpha_2))在点([frac{1}{4},0])处取得最大值为(frac{1}{4})
从而(alpha^*=[frac{1}{4},0,frac{1}{4}]^T),则(x_1,x_3)对应支持向量。此时可以计算出(w)为
[w=sum_{i=1}^3alpha_i^*y_ix_i=[frac{1}{2},frac{1}{2}]
]
同理可以计算处(b=-2),所以分离超平面为
[frac{1}{2}x_1+frac{1}{2}x_2-2=0
]
三、线性支持向量机之软间隔最大化
1. 线性支持向量机
线性可分问题的支持向量机学习方法,对线性不可分训练数据是不适用的,因为这时候上述方法的不等式约束并不都成立,怎么将它扩展到线性不可分问题呢?这就要修改硬间隔最大化,使它成为软间隔最大化。
设训练数据集合为(T={(x_i,y_i)|i=1,2...,N}),我们假设数据集是线性不可分的,通常情况下,训练数据中有一些(outlier),将这些点去除后,剩下的样本点构成的集合是线性可分的。线性不可分意味这存在某些点((x_i,y_i))不满足(w cdot x + b geq 1),这个时候我们可以给每个样本点引进一个松弛变量(xi_i geq 0) 使得约束条件
[y_i(w cdot x_i +b) + xi_i geq 1
]
同时目标函数需要最小化
[frac{1}{2}w^Tw+Csum_{i=1}^Nxi_i
]
这里的(C>0)是惩罚因子,(C)越大表示对误差的分类增大,(C)越小表示对误差的分类乘法越小。最小化目标函数包含两次含义:使(frac{1}{2}w^Tw)尽量小(即间隔尽量大),同时使误差分类的个数尽量小,(C)是调和二者的系数。新的最优化问题可以表示为
[minquad frac{1}{2}w^Tw+Csum_{i=1}^Nxi_i quad quad quad
]
[s.t. quad y_i(w cdot x_i + b) geq 1 - xi_i
]
2. 求解优化问题
和前面做法一样,用拉格朗日乘数法构造函数
[L_p=frac{1}{2}w^Tw+Csum_{i=1}^Nxi_i-sum_{i=1}^Nalpha_i[y_i(w cdot x_i + b) -1+xi_i)] -sum_{i=1}^nmu_ixi_i
]
接下里做法和前面一样
[frac{partial L_p}{partial w} =w - sum_{i=1}^Nalpha_iy_ix_i = 0 quad Longrightarrow quad w =sum_{i=1}^Nalpha_iy_ix_i
]
[frac{partial L_p}{partial b} =0quad Longrightarrow quad sum_{i=1}^Nalpha_iy_i=0 quadquadquadquadquadquadquadquad
]
[frac{partial L_p}{partial xi_i}=C-alpha_i-xi_i=0 quad Longrightarrow quad C=alpha_i+xi_iquad quad
]
代入目标函数,我们可以得到(为了区分,用(L_D)代替(L_p))
[max quad L_D=sum_{i=1}^Nalpha_i-frac{1}{2}alpha^THalpha quad quad quad quad
]
[s.t. quad 0 leq alpha_i leq C quad and quad sum_{i=1}^Nalpha_iy_i=0
]
与前面硬间隔最优化比较,这里就多啦一项约束条件(alpha_i leq C),到这里就可以用软件求解了。
四、非线性支持向量机
对于解决线性问题,线性支持向量机是一种非常有效的方法,但是,有时候分类问题的非线性的,这时候可以使用非线性支持向量机,其主要特点是利用核技巧(kernel tirck).核技巧不仅应用于支持向量机,而且应用于其他统计学问题。
1.非线性可分问题的处理策略
非线性分类问题是指利用非线性模型才可以很好的进行分类,通常是一个曲面,如下面的右图,在二维平面上,可以用一个圆将原始数据分开。
解决非线性问题一般策略是将其转化为线性问题来求解,将原始样本点做一个非线性变换,将非线性问题转化为线性问题,通过求解变换后的线性问题的方法求解原来的非线性问题。如上图的例子,我们对样本点做非线性变换
$$
phi quad: quad [x_1,x_2]^T longmapsto [x_1^2,x_2^2]^T
$$
通过这样的变换后,我们就可以利用线性支持向量机来求解原理问题了。归纳起来就是,用线性分类方法处理非线性分类问题分为2步:首先使用一个非线性变换将原始空间数据映射到新空间;然后从新空间里用线性分类方法从训练数据中学习分类模型。核技巧就属于这样的方法。
## 2. 核函数
核技巧应用到支持向量机中,其基本想法就是通过一个非线性变换将输入空间对应于一个特征空间,使得在输入空间里面的超曲面模型对应特征空间中的超平面模型,这样分类问题的学习任务在特征空间求解线性支持向量机就可以完成。
核函数的定义 设 输入空间是(Omega),特征空间为(Upsilon),如果存在一个从(Omega)到(Upsilon)的映射
[phi(x) quad: quad Omega quad longrightarrow quad Upsilon
]
使得对任意的(x,z in Omega)都有
[K(x,z)=phi(x)cdot phi(z)
]
则称(K(x,z))为核函数,(phi(x))为映射函数。
通常情况下计算(phi(x)cdot phi(z))是不容易的,核函数的做法是,它不显示的定义映射函数(phi),这是由于(phi(x)cdot phi(z))的计算直接可以归结于(K(x,z))的计算,通常特征空间是高维甚至是无穷维的,核技巧只需要完成在低维空间的计算,但可以实现高维度的功能。显然,对于给定的核函数(K(x,z)),特征空间和映射(phi)都不是唯一的。
例如 输入空间是(R^2),核函数是(K(x,z)=(x cdot z)^2),试找出相关特征空间(Upsilon)和映射(phi(x): R^2 longrightarrow R^3)
记(x=[x_1,x_2]^T;,;z=[z_1,z_2]^T),则
[K(x,z)=(xcdot z)^2=(x_1z_1+x_2z_2)^2=(x_1z_1)^2+2x_1z_1x_2z_2+(x_2z_2)^2
]
于是可以取映射
[phi(x)=[x_1^2,sqrt{2};x_1x_2,x_2^2]^T
]
这样就满足(K(x,z)=phi(x)cdot phi(z)),当然(phi(x))还可以取其它的。
3.核函数在支持向量机的应用
记得之前在线性支持向量机中的目标函数和决策函数吗?他们都只需要输入实例的内积计算,如下
[L_D=sum_{i=1}^Nalpha_i-frac{1}{2}sum_{i,j}alpha_ialpha_jy_iy_jx_icdot x_j
]
分类决策函数为
[g(x)=sum_{i=1}^Nalpha_iy_ix_icdot x+b
]
通过非线性映射(x longmapsto phi(x)),得到特征空间函数形式为
[L_D=sum_{i=1}^Nalpha_i-frac{1}{2}sum_{i,j}alpha_ialpha_jy_iy_jphi(x_i)cdot phi(x_j)=sum_{i=1}^Nalpha_i-frac{1}{2}sum_{i,j}alpha_ialpha_jy_iy_jK(x_i,x_j)
]
[g(x)=sum_{i=1}^Nalpha_iy_i phi(x_i)cdot phi(x)+b=sum_{i=1}^Nalpha_iy_iK(x_i,x)+b quad quad quad quad quad quad quad quadquadquad
]
这样我们完全隐含了映射(phi),无序考虑特征空间究竟是怎样的。叶就是说在(K(x,z))给定的条件下,可以利用解线性分类的方法来求解非线性分类问题的支持向量机,学习是隐式的在特征空间进行的,不需要显式的定义特征空间和映射函数,这就是所谓的核技巧。
3. 常用核函数
多项式核函数
[K(x,z)=(x cdot z+1)^p
]
对应的向量机是一个(p)次多项式分类器,在此情况下分类函数为
[g(x)=sum_{i=1}^Nalpha_iy_i(x_i cdot x +1)^p+b
]
高斯核函数
[K(x,z)=exp left ( -frac{||x-z||^2}{2sigma^2}
ight )
]
对应的向量机是一个(p)次多项式分类器,在此情况下分类函数为
[g(x)=sum_{i=1}^Nalpha_iy_iexp left ( -frac{||x-x_i||^2}{2sigma^2}
ight )+b
]
字符串核函数
暂略......