支持向量机SVM简述

支持向量机SVM

1、概述

SVM全称是supported vector machine(支持向量机),即寻找到一个超平面使样本分成两类,并且间隔最大。

SVM 模型有3种:

  • 线性可分支持向量机:适用于训练数据线性可分。
  • 线性支持向量机:适用于训练数据近似线性可分,也就是存在一些特异点。
  • 非线性支持向量机:适用于训练数据线性不可分。

2、相关概念

(一)、硬间隔

如果样本线性可分,在所有的样本分类都正确的情况下,寻找最大间隔,这就是硬间隔。如果出现异常值、或者样本不能线性可分,此时硬间隔无法实现。

总结一句,硬间隔是严格的间隔,不允许有任何异常值。

(二)、软间隔和惩罚系数

允许部分样本,在最大间隔之内,甚至在错误的一边,寻找最大间隔,这就是软间隔。目标是尽可能在保持间隔宽阔和限制间隔违例之间找到良好的平衡。

通过惩罚系数C来控制这个平衡:C值越小,则间隔越宽,但是间隔违例也会越多。

(三)、核函数

核函数将原始输入空间映射到新的特征空间,使得原本线性不可分的样本在核空间可分

3、相关原理

样本空间中任何点x到超平面(w,b)的距离可以写成:
d = ∣ W T x + b ∣ ∣ ∣ W ∣ ∣ d=\frac{|W^Tx+b|}{||W||} d=∣∣W∣∣∣WTx+b∣

如果要找到间距最大的超平面,也就是要找到满足下式中约束的参数w和b,使得间隔最大。
假设两边宽度都为 1 , y i 指样本属于哪一类 { W T x i + b > = + 1 , y i = + 1 W T x i + b = < − 1 , y i = − 1 假设两边宽度都为1,y_i指样本属于哪一类\\ \begin{cases}W^Tx_i+b>=+1,y_i=+1\\W^Tx_i+b=<-1,y_i=-1\end{cases} 假设两边宽度都为1,yi指样本属于哪一类{WTxi+b>=+1,yi=+1WTxi+b=<−1,yi=−1

距离超平面最近的几个训练样本点使上式等号成立,这些点被称为"支持向量",两个异类支持向量到超平面的距离之和为:
γ = 2 ∣ ∣ W ∣ ∣ \gamma=\frac{2}{||W||} γ=∣∣W∣∣2

可以根据上述公式将最大间隔表示为:
m a x W , b = 2 ∣ ∣ W ∣ ∣ y i ( W T x i + b ) > = 1 , 其中 i = 1 , 2 , 3 , . . . , n max_{W,b}=\frac{2}{||W||}\\ y_i(W^Tx_i+b)>=1,其中i = 1,2,3,...,n maxW,b=∣∣W∣∣2yi(WTxi+b)>=1,其中i=1,2,3,...,n

对上式进行优化:
m i n W , b = 1 2 ∣ ∣ W ∣ ∣ 2 其中 y i ( W T x i + b ) > = 1 , 其中 i = 1 , 2 , 3 , . . . , n min_{W,b}=\frac{1}{2}||W||^2\\ 其中y_i(W^Tx_i+b)>=1,其中i = 1,2,3,...,n minW,b=21∣∣W∣∣2其中yi(WTxi+b)>=1,其中i=1,2,3,...,n

添加核函数,对目标函数进行转换:
m i n W , b = 1 2 ∣ ∣ W ∣ ∣ 2 ∑ i = 1 n ( 1 − y i ( w T ⋅ Φ ( x i ) + b ) ) < = 0 min_{W,b}=\frac{1}{2}||W||^2\\ \sum_{i=1}^n(1-y_i(w^T·\Phi(x_i)+b))<=0 minW,b=21∣∣W∣∣2i=1∑n(1−yi(wT⋅Φ(xi)+b))<=0

构建拉格朗日函数,其中αi为拉格朗日乘子。拉格朗日乘子法构建的拉格朗日函数将目标优化函数和优化约束条件放在了一起,从而将带约束的极值问题转换为不带约束极值问题。
L ( w , b , α ) = 1 2 ∣ ∣ w ∣ ∣ 2 = ∑ i = 1 n α i ( y i ( w T ⋅ Φ ( x i ) + b ) − 1 ) L(w,b,\alpha)=\frac{1}{2}||w||^2=\sum_{i=1}^n\alpha_i(y_i(w^T·\Phi(x_i)+b)-1) L(w,b,α)=21∣∣w∣∣2=i=1∑nαi(yi(wT⋅Φ(xi)+b)−1)

想要对上式求极小值,可以转化为对后式求最大值,转化为对偶问题。

此时就可以利用KKT方式求拉格朗日函数的极值。众所周知,使用拉格朗日乘子法计算不等式约束的极值,结果必须满足3个条件,这就是KKT条件。
∂ L ∂ x = 0 ,拉格朗日函数对变量求导为 0 α i > = 0 ,所有乘子大于等于 0 α i g i ( x ) = 0 ,乘子和约束 ( g i ( x ) 为约束 ) 至少一个为零,互补松弛条件 \frac{\partial L}{\partial x}=0,拉格朗日函数对变量求导为0\\ \alpha_i>=0,所有乘子大于等于0\\ \alpha_ig_i(x)=0,乘子和约束(g_i(x)为约束)至少一个为零,互补松弛条件 ∂x∂L=0,拉格朗日函数对变量求导为0αi>=0,所有乘子大于等于0αigi(x)=0,乘子和约束(gi(x)为约束)至少一个为零,互补松弛条件

利用上面的特性,对目标式子做偏导:
1 :对 w 求偏导,并令其等于 0 ∂ L ∂ w = w − ∑ i = 1 n α i y i Φ ( x i ) = 0 2 :对 b 求偏导,并令其等于 0 ∂ L ∂ b = ∑ i = 1 n α i y i = 0 1:对w求偏导,并令其等于0\\ \frac{\partial L}{\partial w}=w-\sum_{i=1}^n\alpha_iy_i\Phi(x_i)=0\\ 2:对b求偏导,并令其等于0\\ \frac{\partial L}{\partial b}=\sum_{i=1}^n\alpha_iy_i=0 1:对w求偏导,并令其等于0∂w∂L=w−i=1∑nαiyiΦ(xi)=02:对b求偏导,并令其等于0∂b∂L=i=1∑nαiyi=0

求出两个参数偏导后,将结果带入到原式L中
L ( w , b , α ) = 1 2 ∣ ∣ w ∣ ∣ 2 = ∑ i = 1 n α i ( y i ( w T ⋅ Φ ( x i ) + b ) − 1 ) = 1 2 w T w − ∑ i = 1 n ( α i y i w T Φ ( x i ) + α i y i b − α i ) = 1 2 w T w − ∑ i = 1 n α i y i w T Φ ( x i ) − ∑ i = 1 n α i y i b + ∑ i = 1 n α i = 1 2 w T w − ∑ i = 1 n α i y i w T Φ ( x i ) + ∑ i = 1 n α i = 1 2 w T ∑ i = 1 n α i y i Φ ( x i ) − w T ∑ i = 1 n α i y i Φ ( x i ) + ∑ i = 1 n α i = ∑ i = 1 n α i − 1 2 ( ∑ i = 1 n α i y i Φ ( x i ) ) T ⋅ ∑ i = 1 n α i y i Φ ( x i ) = ∑ i = 1 n α i − 1 2 ∑ i = 1 n ∑ j = 1 m α i α j y i y j Φ T ( x i ) Φ ( x j ) L(w,b,\alpha)=\frac{1}{2}||w||^2=\sum_{i=1}^n\alpha_i(y_i(w^T·\Phi(x_i)+b)-1)\\ =\frac{1}{2}w^Tw-\sum_{i=1}^n(\alpha_iy_iw^T\Phi(x_i)+\alpha_iy_ib-\alpha_i)\\ =\frac{1}{2}w^Tw-\sum_{i=1}^n\alpha_iy_iw^T\Phi(x_i)-\sum_{i=1}^n\alpha_iy_ib+\sum_{i=1}^n\alpha_i\\ =\frac{1}{2}w^Tw-\sum_{i=1}^n\alpha_iy_iw^T\Phi(x_i)+\sum_{i=1}^n\alpha_i\\ =\frac{1}{2}w^T\sum_{i=1}^n\alpha_iy_i\Phi(x_i)-w^T\sum_{i=1}^n\alpha_iy_i\Phi(x_i)+\sum_{i=1}^n\alpha_i\\ =\sum_{i=1}^n\alpha_i-\frac{1}{2}(\sum_{i=1}^n\alpha_iy_i\Phi(x_i))T·\sum_{i=1}^n\alpha_iy_i\Phi(x_i)\\ =\sum_{i=1}^n\alpha_i-\frac{1}{2}\sum_{i=1}^n\sum_{j=1}^m\alpha_i\alpha_jy_iy_j\Phi^T(x_i)\Phi(x_j) L(w,b,α)=21∣∣w∣∣2=i=1∑nαi(yi(wT⋅Φ(xi)+b)−1)=21wTw−i=1∑n(αiyiwTΦ(xi)+αiyib−αi)=21wTw−i=1∑nαiyiwTΦ(xi)−i=1∑nαiyib+i=1∑nαi=21wTw−i=1∑nαiyiwTΦ(xi)+i=1∑nαi=21wTi=1∑nαiyiΦ(xi)−wTi=1∑nαiyiΦ(xi)+i=1∑nαi=i=1∑nαi−21(i=1∑nαiyiΦ(xi))T⋅i=1∑nαiyiΦ(xi)=i=1∑nαi−21i=1∑nj=1∑mαiαjyiyjΦT(xi)Φ(xj)

此时我们就需要求解α等于多少时拉格朗日函数最大。
a ∗ = a r g m a x ( ∑ i = 1 n α i − 1 2 ∑ i = 1 n ∑ j = 1 m α i α j y i y j Φ T ( x i ) Φ ( x j ) ) a^*=arg max(\sum_{i=1}^n\alpha_i-\frac{1}{2}\sum_{i=1}^n\sum_{j=1}^m\alpha_i\alpha_jy_iy_j\Phi^T(x_i)\Phi(x_j)) a∗=argmax(i=1∑nαi−21i=1∑nj=1∑mαiαjyiyjΦT(xi)Φ(xj))

再次转换,将上式转为求最小值问题:
m i n ( 1 2 ∑ i = 1 n ∑ j = 1 m α i α j y i y j Φ T ( x i ) Φ ( x j ) − ∑ i = 1 n α i ) ∑ i = 1 n α i y i = 0 , α i > = 0 , i = 1 , 2 , 3 , . . . , n min(\frac{1}{2}\sum_{i=1}^n\sum_{j=1}^m\alpha_i\alpha_jy_iy_j\Phi^T(x_i)\Phi(x_j)-\sum_{i=1}^n\alpha_i)\\ \sum_{i=1}^n\alpha_iy_i=0,\alpha_i>=0,i=1,2,3,...,n min(21i=1∑nj=1∑mαiαjyiyjΦT(xi)Φ(xj)−i=1∑nαi)i=1∑nαiyi=0,αi>=0,i=1,2,3,...,n

将训练样本带入上述公式,求解出αi值,再将该值带入之前偏导的结果式子中,得出:
w ∗ = ∑ i = 1 n α i ∗ y i Φ ( x i ) b ∗ = y k − ∑ i = 1 n α i ∗ y i Φ T ( x i ) Φ ( x k ) 其中 k 时一个支持向量点,即对 求得最终分类超平面: α k > 0 ,有 y k ( w T Φ ( x k ) + b ) = 1 w ∗ Φ ( x ) + b ∗ = 0 w^*=\sum_{i=1}^n\alpha_i^*y_i\Phi(x_i)\\ b^*=y_k-\sum_{i=1}^n\alpha_i^*y_i\Phi^T(x_i)\Phi(x_k)\\ 其中k时一个支持向量点,即对\\ 求得最终分类超平面:\alpha_k>0,有y_k(w^T\Phi(x_k)+b)=1\\ w^*\Phi(x)+b^*=0 w∗=i=1∑nαi∗yiΦ(xi)b∗=yk−i=1∑nαi∗yiΦT(xi)Φ(xk)其中k时一个支持向量点,即对求得最终分类超平面:αk>0,有yk(wTΦ(xk)+b)=1w∗Φ(x)+b∗=0

4、相关api

导包:

from sklearn.svm import LinearSVC

调用:

LinearSVC(C=1.0)

C:惩罚系数,类似于线性回归中的正则化系数

C惩罚力度越大,则间隔越小

C惩罚力度越小,则间隔越大

5、核函数

(一)、概述

原始输入空间映射到新的特征空间,从而,使原本线性不可分的样本可能在核空间可分

(二)、分类

线性核:一般是不增加数据维度,而是预先计算内积,提高速度

多项式核:一般是通过增加多项式特征,提升数据维度,并计算内积

高斯核(RBF、径向基函数):产生将样本投射到无限维空间的运算效果,使得原来不可分的数据变得可分。使用最多

(三)、高斯核函数

(1)、概述

高斯核 Radial Basis Function Kernel (径向基函数,又称RBF核)
K ( x , y ) = e − γ ∣ ∣ x − y ∣ ∣ 2 γ 是超参数,作用于标准差相反 K(x,y)=e^{-\gamma||x-y||^2}\\ \gamma是超参数,作用于标准差相反 K(x,y)=e−γ∣∣x−y∣∣2γ是超参数,作用于标准差相反

gamma越大,高斯分布越窄,gamma越小,高斯分布越宽

(2)、相关api

导包:

from sklearn.svm import SVC

调用:

SVC(kernel='rbf',gamma=gamma)

(3)、对比高斯函数

K ( x , y ) = e − γ ∣ ∣ x − y ∣ ∣ 2 g ( x ) = 1 σ 2 π e − 1 2 ( x − μ σ ) 2 可以看的出来 γ 等价于 1 2 σ 2 K(x,y)=e^{-\gamma||x-y||^2}\\ g(x)=\frac{1}{\sigma\sqrt{2\pi}}e^{-\frac{1}{2}(\frac{x-\mu}{\sigma})^2}\\ 可以看的出来\gamma等价于\frac{1}{2\sigma^2} K(x,y)=e−γ∣∣x−y∣∣2g(x)=σ2π 1e−21(σx−μ)2可以看的出来γ等价于2σ21

相关推荐
网易独家音乐人Mike Zhou2 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
安静读书2 小时前
Python解析视频FPS(帧率)、分辨率信息
python·opencv·音视频
小二·4 小时前
java基础面试题笔记(基础篇)
java·笔记·python
小喵要摸鱼5 小时前
Python 神经网络项目常用语法
python
Swift社区6 小时前
LeetCode - #139 单词拆分
算法·leetcode·职场和发展
Kent_J_Truman6 小时前
greater<>() 、less<>()及运算符 < 重载在排序和堆中的使用
算法
一念之坤7 小时前
零基础学Python之数据结构 -- 01篇
数据结构·python
IT 青年7 小时前
数据结构 (1)基本概念和术语
数据结构·算法
wxl7812277 小时前
如何使用本地大模型做数据分析
python·数据挖掘·数据分析·代码解释器
NoneCoder7 小时前
Python入门(12)--数据处理
开发语言·python