1,SVM算法的思考出发点算法
SVM算法是一种经典的分类方法。对于线性可分问题,找到那个分界面就万事大吉了。这个分界面能够有不少,怎么找呢?SVM是要找到最近点距离最远的那个分界面。有点绕,看下面的图就明白了函数
为了推导简单,咱们先假设样本集是彻底线性可分的,也就一个分界面能达到100%的正确率。工具
2,线性可分的状况学习
(1)优化目标的创建优化
最近点距离最远的分界面,这句话得用数学式子表示出来,这样才能用数学工具进行求解。3d
首先,假设分界面是y=wx+b,点\(x_i\)距离平面的距离用数学表达是\(\gamma_i=\frac{y_i(wx_i+b)}{||w||}\),这个是咱们在中学学过的点到平面的距离,咱们称之为几何距离。由于点分布在平面的两侧,因此这里乘以了\(y_i\)。xml
“最近点”该如何表达呢?blog
\(\gamma\)字符串
s.t \(y_i(\frac{w\cdot x_i+b}{||w||})>=\gamma, i=1,2,...N\)数学
最近点距离最远的分界面,就是要上面的距离最大,用数学语言表示为
\(max_{w,b} \gamma\)
s.t \(y_i(\frac{w\cdot x_i+b}{||w||})>=\gamma, i=1,2,...N\)
到目前为止,咱们的目标函数已经获得。
分析这个目标函数,这是个有约束的优化问题,可是要求解的w在分母上,为了方便求解,咱们作一些整理,原优化问题为,
\(max_{w,b}\frac{y^*(w\cdot x^*+b)}{||w||}\)
s.t \(y_i(\frac{w\cdot x_i+b}{||w||})>=\frac{y^*(w\cdot x^*+b)}{||w||}, i=1,2,...N\)
其实\(y^*(w\cdot x^*+b)\)的值对最终的结果没有影响,就像y=ax+b与2y=2ax+2b实际上是同样,因此不妨让\(y^*(w\cdot x^*+b)=1\),这样目标函数变为,
\(max_{w,b}\frac{1}{||w||}\)
s.t \(y_i(w\cdot x_i+b)>=1, i=1,2,...N\)
在考虑到最大化\(\frac{1}{||w||}\)和最小化\(||w||^2\)的等价的,目标函数能够写成以下形式
\(min_{w,b}\frac{1}{2}||w||^2\)
s.t \(y_i(w\cdot x_i+b)>=1, i=1,2,...N\)
这样就变成了一个容易求解的凸二次规划问题。
(2)优化目标的求解
对于凸二次规划问题,经常使用的求解方法就是拉格朗日对偶算法。
对偶问题和原问题的解是否相同呢?只有相同,咱们才能用对偶算法。按照李航《统计学习方法》附录C,定理C.2,
回到咱们的目标函数,由于数据线性可分,确定存在w,使得全部不等式小于0(目标函数中的约束不等式取个负号,大于等于变成小于等于)。所以,咱们能够经过求解对偶问题获得原始问题的解。
首先,构建拉格朗日函数,将不等式约束去除,
\(L(w,b,\alpha)=||w||^2-\sum_{i=1}^N\alpha_iy_i(w\cdot x_i+b)+\sum_{i=1}^N\alpha_i\),要求\(\alpha_i>=0\)
原始问题的对偶问题是极大极小问题,
\(max_\alpha min_{w,b}L(w,b,\alpha)\)
下面开始求解这个问题
接下来求解相应的\(\alpha\),这里不在详述。
求解出\(\alpha\),根据定理C.3,求解原问题的解
假设\(\alpha^*\)是对偶问题最优解,\(w^*,b^*\)是原始问题最优解,根据KKT条件成立,即得:
(1)\(\triangledown L(w^*,b^*,\alpha^*)=w^*-\sum_{i=1}^N \alpha_i^* y_i x_i=0\),获得\(w^*=\sum_{i=1}^N \alpha_i^* y_i x_i=0\)
(2)\(\triangledown L(w^*,b^*,\alpha^*)=-\sum_{i=1}^N \alpha_i^*y_i=0\)
(3)\(a_i^*(y_i(w^* \cdot x_i+b^*)-1)=0\),i=1,2,3..N
(4)\(y_i(w^* \cdot x_i+b^*)-1\)>=0,i=1,2,..N
(5)\(a_i^*>=0\),i=1,2,...N
至少有一个\(\alpha_j>0\),这个能够用反证法证实,假设\(\alpha^*=0\),由(1)得\(w^*=0\),可是\(w^*=0\)不是原问题的一个解,所以确定存在\(\alpha_j>0\),那么根据(3)获得
\(y_j(w^* \cdot x_j+b^*)-1=0\)
左后乘以\(y_j获得\)
\(b^*=y_i-\sum_{i=1}^N \alpha_i^* y_i (x_i \cdot x_j)\)
由此,获得了分类超平面的w和b,决策函数能够写成
\(f(x) = sign(\sum_{i=1}^N \alpha_i y_i (x_i \cdot x)+b^*)\) (*)
由此能够看出,分类决策函数只依赖于输入x和训练样本的内积。前面分析过存在\(\alpha_j>0\),那么根据(3)能够获得\(y_j(w^* \cdot x_j+b^*)-1=0\),\(\alpha_j>0\)对应的样本叫作支持向量,它们分布于分隔边界上。还有一部分样本,它们分布在分隔边界里,这些样本知足\(y_i(w^* \cdot x_i+b^*)-1>0\),那么根据(3)可知,这些样本对应的\(\alpha\)份量为0。因此,从(*)式看到,一个新来的样本x被分红哪一个类,至于支持向量有关,而与其它训练样本无关,由于它们对应的\(\alpha_i\)为0.
3,线性可分可是存在异常点
实际状况中,用来训练模型的数据,不多有彻底线性可分,老是存在部分异常点。而在2部分推导的模型,显然没有考虑这种状况。
在2部分获得的优化目标是
\(min_{w,b}\frac{1}{2}||w||^2\)
s.t \(y_i(w\cdot x_i+b)>=1, i=1,2,...N\)
为了使这个优化目标可以容忍异常,咱们为每一个样本点添加个松弛因子\(\xi_i\),允许这个点超出些界限,约束变成\(y_i(w\cdot x_i+b)>=1-\xi_i, i=1,2,...N\)。可是每一个松弛因子的添加也不能不付出代价,因此最终的目标函数变成
\(min_{w,b}\frac{1}{2}||w||^2+C\sum_{i=1}^{N}\xi_i\)
s.t \(y_i(w\cdot x_i+b)>=1-\xi_i, i=1,2,...N\)
\(\xi_i>=0,i=1,2,3...N\)
目标函数的求解和2部分大同小异,这里再也不推导,具体可参见李航《统计学习方法》第7章。最终结果是:
\(w^*=\sum_{i=1}^N \alpha_i^* y_i x_i=0\)
\(b^*=y_i-\sum_{i=1}^N \alpha_i^* y_i (x_i \cdot x_j)\)
形式上看和2部分相同,可是\(y_i\)的条件不一样,这里不细述。
这里给出KKT条件,这有利于咱们对支持向量的分析。
(1)\(\triangledown_w L(w^*,b^*,\xi^*,\alpha^*,\mu^*)=w^*-\sum_{i=1}^N \alpha_i^* y_i x_i=0\),获得\(w^*=\sum_{i=1}^N \alpha_i^* y_i x_i=0\)
(2)\(\triangledown_b L(w^*,b^*,\xi^*,\alpha^*,\mu^*)=-\sum_{i=1}^N \alpha_i^*y_i=0\)
(3)\(\triangledown_\xi L(w^*,b^*,\xi^*,\alpha^*,\mu^*)=C-\alpha^*-\nu^*=0\)
(4)\(a_i^*(y_i(w^* \cdot x_i+b^*)-1+\xi_i^*)=0\),i=1,2,3..N
(5)\nu_i^*\xi_i^*=0
(6)\(y_i(w^* \cdot x_i+b^*)-1+\xi_i^*\)>=0,i=1,2,..N
(7)\(a_i^*>=0\),i=1,2,...N
(8)\(\xi_i>=0\),i=1,2,...N
(9)\(\mu_i^*>=0\),i=1,2,...N
\(\alpha_i^*>0\)的样本点的实例\(x_i\)称做为支持向量,在2部分,只有间隔边界上的点知足\(\alpha_i^*>0\)。可是,当引入松弛变量时,状况变的复杂。
第一类点:间隔边界里面的点
这些点知足 \(y_i(w^* \cdot x_i+b^*)>1 \),由(4)得\(\alpha_i^*=0\),由(2)得\(\mu_i^*=0\),又由(5)得\(\xi_i^*=0\),
第二类点:间隔边界上的点
若\(0<\alpha_i^*<C\),则\(\xi_i^*=0\),支持向量落在间隔边界上。由(3)(4)(5)容易推得。
第三类点:间隔边界和分界线之间的点
若\(\alpha_i^*=C\),\(0<\xi_i^*<1\),则分类正确,\(x_i\)在间隔边界和分界线之间。由(3)(4)容易推得。
第四类点:分错的点
若\(\alpha_i^*=C\),\(\xi_i^*>1\),则样本位于误分一侧。由(3)(4)容易推得。
参考下图理解
4,线性不可分的状况
现实中,不少状况下两类样本是线性不可分的。SVM的思路是进行空间映射,将样本从不可分的空间映射到可分的空间。
从前两部分推导出来分隔面能够看出,
\(f(x) = sign(\sum_{i=1}^N \alpha_i y_i (x_i \cdot x)+b^*)\)
新来的样本只需与训练样本作点积便可获得label. 其实,样本如何从A空间映射到B空间并非很重要,只要可以获得两个样本在新空间的点积就够了。核函数正是利用这一思想。它省掉了映射这一步,这一步能够很是复杂,所以,核函数的应用提升了效率。
经常使用的核函数有:多项式核函数,高斯核函数,字符串核函数。
核函数理论很丰富,这里再也不详述。
参考: 李航《统计学习方法》