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

本文介绍了支持向量机的基本概念,包括硬间隔的函数间隔和几何间隔原理,以及如何通过拉格朗日乘子法优化目标函数。重点讨论了线性与非线性SVM,以及SVM的分类决策和对极端数据点的处理,最后概括了SVM的优点和参数C的选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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=Wlablek(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)]w1)

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

  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

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

arg:maxw,b(1∣∣w∣∣)arg: max_{w, b} \left( \frac{1}{||w||} \right)arg:maxw,b(w1)
前提条件为: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(w1)=>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(21w2)
凸二次优化问题

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)=21w2i=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=1nlableiaixi

∑i=1nai∗lablei=0\sum ^{n}_{i=1}a_{i}*lable_{i}=0i=1nailablei=0

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

w=∑i=1nlablei∗aixiw=\sum ^{n}_{i=1}lable_{i}*a_{i}x_{i}w=i=1nlableiaixi

b=lablei−wTxib=lable_{i}-w^Tx_{i}b=lableiwTxi

所以超平面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优点

  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、付费专栏及课程。

余额充值