支持向量机SVM入门(线性+非线性)

SVM 概述

支持向量机:是一种监督学习的算法。

前置芝士:
  • 支持向量:就是距离超平面最近的那些点
  • 机:表示一种算法
  • 超平面:就是分割数据的一个(n-1)维的面,就是分类的决策边界
  • 线性可分:数据可以通过画一条直线就可以将它们完全分开
  • 线性不可分:上一条相反的意思

在这里插入图片描述

场景

  • 给左右两边的点进行分类
  • 直觉就会发现D这种分类方法最好

摘录自<<机器学习实战>>

算法流程:

我们找到函数间隔最小值的向量(也就是找到支持向量),然后让几何间隔最大化。
函数间隔、几何间隔、为什么这样选择是最优得我下面会说。
本质求一个函数最小化的最大值得过程

所以什么是函数间隔几何间隔呢?

函数间隔:

就是训练数据集T中得样本点( x i x_i xi, y i y_i yi)距离超平面 w T x + b w^{T}x+b wTx+b 的距离。

r ^ = l a b l e k ∗ ( w T x k + 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 ^ = l a b l e k ∗ ( W T x + b ) ∥ W ∥ \widehat{r}=\dfrac{lable_{k}*(W^{T}x+b)}{\left\| W\right\| } r =Wlablek(WTx+b)

下图形象的解释了函数间隔几何间隔

在这里插入图片描述

有了上面的讲解,目标函数就很容易就的出来了。

a r g : m a x w , b ( m i n [ l a b e l ∗ ( w T x + b ) ] ∗ 1 ∣ ∣ w ∣ ∣ ) arg: max_{w, b} \left( min[label*(w^Tx+b)]*\frac{1}{||w||} \right) arg:maxw,b(min[label(wTx+b)]w1)

目标函数非常的复杂吗,那么我们怎么优化函数让其便于求解呢?:

  1. l a b e l ∗ ( w T x + b ) > = 1 label*(w^Tx+b)>=1 label(wTx+b)>=1,因为0-1之间,得到的点存在误判的可能性,所以要保证 m i n [ l a b e l ∗ ( w T x + b ) = = 1 min[label*(w^Tx+b)==1 min[label(wTx+b)==1,才能更好的降低噪音数据的影响。

因为要保证函数间隔最小(找到支持向量),所以将最小的函数距离设为1,也就是说非支持向量的函数距离大于1

  1. 所以目标函数得以简化为:

a r g : m a x w , b ( 1 ∣ ∣ w ∣ ∣ ) arg: max_{w, b} \left( \frac{1}{||w||} \right) arg:maxw,b(w1)
前提条件为: l a b e l ∗ ( w T x + b ) = = 1 label*(w^Tx+b)==1 label(wTx+b)==1

3.进一步化简:

a r g : m a x w , b ( 1 ∣ ∣ w ∣ ∣ ) = > arg: max_{w, b} \left( \frac{1}{||w||} \right) => arg:maxw,b(w1)=> a r g : m i n w , b ( ∣ ∣ w ∣ ∣ ) arg: min_{w, b}\left( {||w||} \right) arg:minw,b(w)
(求矩阵偏导很麻烦,如果x求 1 2 x 2 \frac{1}{2x^2} 2x21的偏导数,同样求得是最小值)

所以目标函数最终变为

a r g : m i n w , b ( 1 2 ∗ ∣ ∣ w ∣ ∣ 2 ) arg: min_{w, b}\left( \frac{1}{2}*{||w||^2} \right) arg:minw,b(21w2)
凸二次优化问题

4.应用拉格朗日乘子法求解凸优化问题:

L ( w , b , a ) = 1 2 ∥ w ∥ 2 − ∑ i = 1 n a i [ l a b l e ∗ ( w T x i + 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)=21w2i=1nai[lable(wTxi+b)1]

令L(w,b,a)对w和b的偏导数为0,有

w = ∑ i = 1 n l a b l e i ∗ a i x i w=\sum ^{n}_{i=1}lable_{i}*a_{i}x_{i} w=i=1nlableiaixi

∑ i = 1 n a i ∗ l a b l e i = 0 \sum ^{n}_{i=1}a_{i}*lable_{i}=0 i=1nailablei=0

再将上述两个结果带入L(w,b,a)中消去w和b,之后有其对偶化处理得到拉格朗日乘子a的值最终得到结果。

w = ∑ i = 1 n l a b l e i ∗ a i x i w=\sum ^{n}_{i=1}lable_{i}*a_{i}x_{i} w=i=1nlableiaixi

b = l a b l e i − w T x i b=lable_{i}-w^Tx_{i} b=lableiwTxi

所以超平面 w x + b = 0 wx+b=0 wx+b=0
分类决策函数 f ( x ) = s i g n ( w x + b ) f(x)=sign(wx+b) f(x)=sign(wx+b)

对待有极端数据点的优化:

上述所述算法是基于硬间隔,硬间隔对异常数据点太过于敏感,接下来我们介绍一下软间隔
软间隔SVM模型:允许对少量训练样本出现分类错误。这里我们引入了松弛变量 ξ i \xi _{i} ξi和惩罚因子 C C C,约束条件转化为:
在这里插入图片描述
这里的 y i y_i yi代表lable值。

线性SVM算法流程概览:

在这里插入图片描述

非线性SVM

概述

对于非线性的情况,支持向量机选择一个核函数k(…,…)将数据映射到高维空间,从而解决原始空间中线性不可分的问题。

算法流程

分类函数定义为 f ( x ) = ∑ i = 1 n w i ϕ i ( x ) + b f\left ( x\right) =\sum ^{n}_{i=1}w_{i}\phi _{i}\left( x\right) +b f(x)=i=1nwiϕi(x)+b

这里的 ϕ i \phi _{i} ϕi是核函数,将低维数据到高维空间的映射关系。

在这里插入图片描述
下面是将三维的x矩阵映射为六维的Z矩阵在这里插入图片描述

接下来严格数学证明还没整理 ~ 考完试再来补充 ~ (一定~)

SVM优点

  1. 训练好的模型算法的复杂度是由支持向量的个数决定的,而不是由数据维度决定的。所以SVM不太容易产生过拟合
  2. SVM训练出来的模型完全依赖于支持向量,即使训练集里面所有非支持向量点被去除,重复训练过程,结果仍然得到一样的模型。
  3. 如果支持向量个数比较少,SVM训练出的模型容易被泛化。

SVC算法中不同参数的影响:

  1. C:惩罚系数(对误差的宽容度):

C越大,越不容忍误差,容易过拟合。C越小,越容忍误差,容易欠拟合。设计算法时我们要选取合适的C,以便在平滑决策边界和分类正确性之间进行平衡。

2.gamma:指定核函数的系数

隐含地决定了数据映射到新的特征空间中的分布。gamma值越大,支持向量越少。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值