机器学习 - 算法 - SVM 支持向量机
SVM 原理引入
支持向量机( SVM,Support Vector Machine )
背景
2012年前较为火热, 但是在12年后被神经网络逼宫, 由于应用场景以及应用算法的不同, SVM还是需要有所了解,而且在面试中SVM一般都会问到, 支持向量机是一个非常 经典且高效的分类模型
要解决的问题
如下图所示,3条黑色的线都可以将两边的数据进行分类,
那哪条线作为决策边界才是最好的呢?
如果特征数据本身就很难分,那又怎么办呢?
计算复杂度怎么样?能否实际应用?
决策边界定义
两边雷区, 要选择一条部队不触发地雷的行军路线, 而且要尽可能的宽一点
向左边的图就窄一些, 右边宽一些
而这个所谓的行军道路就是 决策边界 , 越胖越好
以下的公式推导也皆使用此实例
距离计算
计算目的
对决策边界理解之后, 决策边界的计算就是我们要解决的问题, 即这里的物理意义就是距离的计算
决策边界的宽度是根据距离最近的点的距离决定的, 这里需要首选引入距离如何计算
数学转换计算
假设决策边界是一个阴影平面,那这个距离 distance 就是求点到平面 hyperplane 的距离
既然垂直于这个平面, 那就自然垂直于这个平面的任意一条线
但是直接求这个距离还是不容易的, 需要一定的转换
这里取出来 hyperplane 上的两个点 x` .x`` , 这两个点形成一个向量
计算出 x 到 x` 的距离, 然后计算出这个距离在垂直方向到平面的投影即可, 这也是 x 到平面的垂直距离了
公式中的 x` 需要消除掉, 利用 x` 在平面的特性, 因此 将其转换成 -b 即可从而得到最终的距离计算公式
数学补充
wTx+b=0 ? 是从何而来?
因为二维空间里面,一条直线的方程可以表示为:Ax+By+C=0
三维空间里面,平面的方程可以表示为:Ax+By+Cz+D=0。
依次推广,n维空间的超平面方程可以表示为:Ax1+Bx2+Cx3+Dx4+Ex5+Fx6+....+K=0
因为n维空间对应的是n维坐标系,仅仅用x、y、z几个字母较难表示
所以此处用x1、x2、x3、...、xn来表示n维坐标系,各个维度的系数此处也可以用w1、w2、w3、...、wn来表示
所以n维空间里面的超平面方程可以写成如下形式:w1x1+w2x2+w3x3+w4x4+...+wnxn+b=0。wx相乘可以看作是内积的相乘:
可以将x看作w,y看作x则上面超平面方程就变成了:[w,x]+b = 0 ,即wTx+b=0。所以,样本空间中,任何一个超平面都可以用方程如下方程表示:WTX+b=0。
其中,W=(w1,w2,w3,...,wn)为法向量,b为位移项可以认为是截距,该超平面可以唯一的由此方程决定
SVM 目标函数
数据标签定义
数据集
Y 为样本的类别 (标签), X 为每一个样本数据
这里依旧是个二分类的问题将 Y 进行了两个区间的判断
X 为正例的时候 Y = +1
X 为负例的时候 Y = -1
和回归的时候使用的 0 / 1 不同, 这里使用的是 +1 / -1
决策方程
在基于之前 y = wTx+b 的情况下多加了一个 Φ
这里的 Φ 是对 x 做了一个转换, 后面会解释
对于预测结果可以进行简化, 不论 Xi 正例还是负例, yi * y(Xi) > 0 恒成立
优化目标
通俗解释
找到一个线 ( w, b ) 使得距离该线的最近的点 (雷区) 能够最远
优化目标即是如何让这个距离尽可能靠近最远, 或者足够远
将点到直线的距离化简得
由于 yi * y(Xi) > 0 , 所以将绝对值展开依旧成立
本来 是恒大于 0 的, 这里使用放缩变换将其用某种手段让他恒大于 1
然后下面的优化目标中的正好对这里进行求最小值, 恒大于 1 的最小值那最小值自然就是 1 了约分掉了这块内容
由此将目标这样化简成
目标函数
当前目标
约束条件 - 任何 w 都需满足
常规套路
求解极大值转换成极小值问题
- 求 1/w 的最大值就是求 w 的最小值
- 当然 求 w2 的最小值也是一样的
- ||w|| 看着碍眼, 总之是正数, 那就用 w2 代替
- 为了方便后面的求导, 多加个常数项 1/2 方便消去
- 最终的结果优化为
如何求解 - 拉格朗日乘子法
直接将我们的式子和约束带进转换即可, 这里多加个一个 α 的对每个 xi 的系数
最终目标函数
SVM 目标函数求解
根据对偶性质 KKT 可以进行一下的推导
KKT 大概意思就是说在拉格朗日乘子法中
先求解最大值然后求解最小值这个过程可以转换成先求解成最小值再求解成最大值
在这儿我们先求解这个函数的极小值, 首先在L(w,b,α)函数中对w,b分别求偏导
由于需要求解极值点,令其偏导等于0
可以看出w与α这个变量有了关系,就是说求出α也就求出了w。 然后继续接下来的求解,将上面求出的两个式子带回原式。
然后接下来求解α的极大值
求解一直以来都是较难的事情, 这里先看一个简单的 SVM 的求解实例参考
简单示例
上面其实已经得出最终的表达式了,下面我们会根据一些具体的点来求解α的值
数据:3个点,其中正例 X1(3,3) ,X2(4,3) ,负例X3(1,1) 如下图所示
分别对α1和α2求偏导,偏导等于0可得: α1=1.5,α2=-1(并不满足约束条件αi >= 0,i=1,2,3 )
所以这时求出来的α的值是无效的,那这个时候 α 的解应在边界上,也就是说要么 α1=0,要么 α2=0,再代入上式然后求偏导看下
(这儿经过我的计算发现α2似乎等于正的2/13,应该是教程有些小问题,猜测可能是上式由α1+α2=α3化简这儿出了点小问题,但是对于答案似乎影响不大) ,
所以经过计算最小值在 (α1 = 0.25,α2 = 0,α3 = 0.25) 处取得
上面的平面方程其实就是代表直线方程,也就是决策边界的方程。
支持向量机名词解释
以上就是我们对 SVM 的一次实际求解过程
注意公式中
可以看出只要 α 为 0 , 则结果一定为 0, 因此 为 0 的点就是无意义的点
在图中展示就是说 x2 所在的点, 也就是不在觉得边界的点, 这些点对我们画出方程是无价值的也就是非支持向量
而这也就是 支持向量机的说法由来, 决策边界的生成是由决策边界上的有价值的点支撑起来的也叫做支持向量
于此原理, 对于结果有影响的点是支持向量, 哪怕加入多少非支持向量, 对结果都不会有意义
软间隔 soft-margin
松弛因子
目标函数
C 趋近很大的时候, 为了满足式子最小, 那就只能要求 松弛因子 ε 越小, 即越严格, 反之越宽容
解法
引入新的参数后的解法
SVM 核变换
低纬不可分问题
假设在低纬度的时候发现很难分, 比如下图二维中是一条非线性的曲线来划分
这时候可以考虑转换到高纬来尝试, 比如转换为下图中三维的中的平面
核变换原理
低纬不可分问题映射到高纬后通过一种变换方式从而实现更直观更效率的划分
原理阐述的简单示例
我们为了一个简单直观的非线性的问题简化, 如果将维度上升到过分大的程度, 就会导致计算量暴增
因此上升到什么样的维度, 以及什么维度又是在可解范围内的程度才是最重要核心的问题
但是还有一个发现就是, 高纬度的内积和低纬度的内积是有一定关系的
先做内积在做映射和先做映射在做内积的结果是一致的
因此实际操作的时候并没有真的去高纬中进行复杂的内积计算
只需要在低纬中计算内积之后也映射到高纬的值即可
核函数
核函数就是在公式中的 的具体操作, 通常使用的是高斯核函数
公式
体现效果如下图中所示
SVM 总结梳理
支持向量机被说为机器学习中最复杂的算法, 真正理解起来最好还是从物理意义上去着手
物理意义 - 解决的问题是什么 ?
找出最胖的决策边界, 越宽越好
怎么决定宽度?
距离计算, 从而引出距离计算公式
优化目标是什么?
找到一条线 (w, b) 使得离该线的点越远越好 (从而更宽)
进一步的化简得到
转换成数学表达 - 目标函数 ?
利用放缩, 用 |Y| >= 1 带入到优化目标
中
约掉了右边的式子后就只需要考虑 从而得到了
目标函数
以及一个约束条件
如何求解目标函数 ?
第一步 - 将极大值问题先转换成极小值问题,
第二步 - 然后应用 拉格朗日乘子法
在拉格朗日乘子法中将 求 w,b 的问题转换成了 求 α 的问题
求 α 的时候利用分别求偏导在求解, 利用到了拉格朗日乘子法中某些特质
利用支持向量进行比对 (不在最边界的点就是无价值的点了) 从而求出 w, b
这里也点出了支持向量机的名字由来, 所谓支持向量是什么, 意义如何等
特殊问题处理 ?
过耦合问题
引入了松弛因子, 然后利用 C 的大小让计算更加严格或者宽松
再多一个约束条件的情况下, 再次求解也是类似的操作
低纬不可分问题
利用核函数变换为高纬度中去解决问题
需要注意并么有真的在高纬中进行复杂计算
本文来自博客园,作者:羊驼之歌,转载请注明原文链接:https://www.cnblogs.com/shijieli/p/11906216.html