SVM 概述
支持向量机:是一种监督学习的算法。
前置芝士:
- 支持向量:就是距离超平面最近的那些点
- 机:表示一种算法
- 超平面:就是分割数据的一个(n-1)维的面,就是分类的决策边界
- 线性可分:数据可以通过画一条直线就可以将它们完全分开
- 线性不可分:上一条相反的意思
场景
- 给左右两边的点进行分类
- 直觉就会发现D这种分类方法最好
算法流程:
我们找到函数间隔最小值的向量(也就是找到支持向量),然后让几何间隔最大化。
函数间隔、几何间隔、为什么这样选择是最优得我下面会说。
本质:求一个函数最小化的最大值得过程
所以什么是函数间隔和几何间隔呢?
函数间隔:
就是训练数据集T中得样本点(xix_ixi,yiy_iyi)距离超平面 wTx+bw^{T}x+bwTx+b 的距离。
r^=lablek∗(wTxk+b)\widehat{r}=lable_{k}\ast \left( w^{T}x_{k}+b\right)r=lablek∗(wTxk+b)
(lable表示分类决策,lable == 1表示在正分类,lable == -1表示在负分类。前面用label乘一下来保证这个间隔是非负的)
只要等比例改变w和b,超平面没变但是函数间隔变了为什么呢?
答案: 函数间隔能表示分类的正确性和可信度,但无法表示出间隔的数量大小(定性表示)。我们因此就引入了几何间隔。
几何间隔:
r^=lablek∗(WTx+b)∥W∥\widehat{r}=\dfrac{lable_{k}*(W^{T}x+b)}{\left\| W\right\| }r=∥W∥lablek∗(WTx+b)
下图形象的解释了函数间隔和几何间隔
有了上面的讲解,目标函数就很容易就的出来了。
arg:maxw,b(min[label∗(wTx+b)]∗1∣∣w∣∣)arg: max_{w, b} \left( min[label*(w^Tx+b)]*\frac{1}{||w||} \right)arg:maxw,b(min[label∗(wTx+b)]∗∣∣w∣∣1)
目标函数非常的复杂吗,那么我们怎么优化函数让其便于求解呢?:
- 令label∗(wTx+b)>=1label*(w^Tx+b)>=1label∗(wTx+b)>=1,因为0-1之间,得到的点存在误判的可能性,所以要保证min[label∗(wTx+b)==1min[label*(w^Tx+b)==1min[label∗(wTx+b)==1,才能更好的降低噪音数据的影响。
因为要保证函数间隔最小(找到支持向量),所以将最小的函数距离设为1,也就是说非支持向量的函数距离大于1
- 所以目标函数得以简化为:
arg:maxw,b(1∣∣w∣∣)arg: max_{w, b} \left( \frac{1}{||w||} \right)arg:maxw,b(∣∣w∣∣1)
前提条件为:label∗(wTx+b)==1label*(w^Tx+b)==1label∗(wTx+b)==1
3.进一步化简:
arg:maxw,b(1∣∣w∣∣)=>arg: max_{w, b} \left( \frac{1}{||w||} \right) =>arg:maxw,b(∣∣w∣∣1)=>arg:minw,b(∣∣w∣∣)arg: min_{w, b}\left( {||w||} \right)arg:minw,b(∣∣w∣∣)
(求矩阵偏导很麻烦,如果x求12x2\frac{1}{2x^2}2x21的偏导数,同样求得是最小值)
所以目标函数最终变为:
arg:minw,b(12∗∣∣w∣∣2)arg: min_{w, b}\left( \frac{1}{2}*{||w||^2} \right)arg:minw,b(21∗∣∣w∣∣2)
(凸二次优化问题)
4.应用拉格朗日乘子法求解凸优化问题:
L(w,b,a)=12∥w∥2−∑i=1nai[lable∗(wTxi+b)−1]L\left( w,b,a\right) =\dfrac{1}{2}\left\| w\right\| ^{2}-\sum ^{n}_{i=1}a_{i}\left[ lable\ast \left( w^Tx_{i}+b\right) -1\right]L(w,b,a)=21∥w∥2−∑i=1nai[lable∗(wTxi+b)−1]
令L(w,b,a)对w和b的偏导数为0,有
w=∑i=1nlablei∗aixiw=\sum ^{n}_{i=1}lable_{i}*a_{i}x_{i}w=∑i=1nlablei∗aixi
∑i=1nai∗lablei=0\sum ^{n}_{i=1}a_{i}*lable_{i}=0∑i=1nai∗lablei=0
再将上述两个结果带入L(w,b,a)中消去w和b,之后有其对偶化处理得到拉格朗日乘子a的值最终得到结果。
w=∑i=1nlablei∗aixiw=\sum ^{n}_{i=1}lable_{i}*a_{i}x_{i}w=∑i=1nlablei∗aixi
b=lablei−wTxib=lable_{i}-w^Tx_{i}b=lablei−wTxi
所以超平面:wx+b=0wx+b=0wx+b=0
分类决策函数:f(x)=sign(wx+b)f(x)=sign(wx+b)f(x)=sign(wx+b)
对待有极端数据点的优化:
上述所述算法是基于硬间隔,硬间隔对异常数据点太过于敏感,接下来我们介绍一下软间隔。
软间隔SVM模型:允许对少量训练样本出现分类错误。这里我们引入了松弛变量 ξi\xi _{i}ξi和惩罚因子CCC,约束条件转化为:
这里的yiy_iyi代表lable值。
线性SVM算法流程概览:
非线性SVM
概述
对于非线性的情况,支持向量机选择一个核函数k(…,…)将数据映射到高维空间,从而解决原始空间中线性不可分的问题。
算法流程
分类函数定义为:f(x)=∑i=1nwiϕi(x)+bf\left ( x\right) =\sum ^{n}_{i=1}w_{i}\phi _{i}\left( x\right) +bf(x)=∑i=1nwiϕi(x)+b
这里的ϕi\phi _{i}ϕi是核函数,将低维数据到高维空间的映射关系。
下面是将三维的x矩阵映射为六维的Z矩阵
接下来严格数学证明还没整理 ~ 考完试再来补充 ~ (一定~)
SVM优点
- 训练好的模型算法的复杂度是由支持向量的个数决定的,而不是由数据维度决定的。所以SVM不太容易产生过拟合。
- SVM训练出来的模型完全依赖于支持向量,即使训练集里面所有非支持向量点被去除,重复训练过程,结果仍然得到一样的模型。
- 如果支持向量个数比较少,SVM训练出的模型容易被泛化。
SVC算法中不同参数的影响:
- C:惩罚系数(对误差的宽容度):
C越大,越不容忍误差,容易过拟合。C越小,越容忍误差,容易欠拟合。设计算法时我们要选取合适的C,以便在平滑决策边界和分类正确性之间进行平衡。
2.gamma:指定核函数的系数
隐含地决定了数据映射到新的特征空间中的分布。gamma值越大,支持向量越少。