Python svm原理其一

SVM算法


博文类型: 学习向
背景: 本科阶段学完了knn与贝叶斯算法后,继而想学习更复杂一些的算法
目标: 了解svm算法的基本原理


一、前期准备

  • 一定的数学底子

二、正文

1.、支持向量机的定义

支持向量机(英语:Support Vector Machine,常简称为SVM)是一种监督式学习的方法

2、各种概念

1.线性可分支持向量机

(1)硬间隔最大
(2)硬间隔支持向量机
在这里插入图片描述上图中有两个类别,我们可以用一个分界面100%区分两个类,同时这个分界面的周围存在一个范围(也就是虚线里的范围),这个范围内没有样本。那么我们就称这个是一个标准的线性可分的svm

2.线性支持向量机

(1)软间隔最大
(2)软间隔支持向量机
在这里插入图片描述
有时候一些样本不是线性可分的,或者是线性可分的但我们希望有些样本分的不是分的特别好(在虚线内有样品或者有些样品分错了如上图),那么我们称这个为软间隔的最大化
所谓的软间隔和硬间隔的区别,无非就是加了一个参数 ζ \zeta ζ

3.非线性支持向量机

核函数
在这里插入图片描述
分割面不是一条直线,上图就是非线性的,这里就需要用到核函数
如果样本特征是二维的那么分割面就是一条直线,样本特征是三维的那么分割面就是一个平面,样本特征是n维的那么分割面就是一个超平面

4.函数距离和几何距离

函数距离就是把样本点的值代入分割面方程式中得到的y的值
几何距离是样本点到分割面的距离,也就是把分割面方程式进行归一化后,将样本点 的值代入式子中所得的值

下面的讲的是线性可分的svm

3、如何确定分割面

在这里插入图片描述
如图,一个线性可分的样本集,存在无数条直线来把两个类区分开来,那么我们选取哪个分割面呢?
这里面就涉及一些数学公式,让我来从头理一理
在这里插入图片描述
怎么来判断一个分割面是好是坏?我们认为在所有的分割面中,距离一个分割面最近的样本点(如上图的d1,d2这里d1=d2,我们可以调节直线的平行位置来使得d1=d2,如果有其他的样本点的值也等于d1或者d2那么这些样本点也需要取出来)的距离比距离其他分割面最近的样本点的距离都要大,那么这个分割面就是最好的。这些取出来的样本点对这个分割面起到了支持的作用,我们称这些样本点为支持向量(图中的两个样本点就是支持向量)

好的!以上是感性的认识,接下来我们要理性的分析了。

1.基础数学回顾

先来回顾一下高中的数学知识:

y=kx+b
这是二维平面上的一条直线,斜-截式方程,这里的y,x,b都是标量

如果现在x变成了向量 x ⃗ \vec{x} x ,那么公式就变成了这个样子:
y = w ⃗ T ⋅ x ⃗ + b y=\vec{w}^T\cdot\vec{x}+b y=w Tx +b -----(1)
这时候可能有人要问了T是什么呀,T是转置的意思,假设 x ⃗ \vec{x} x 有两个特征那么 x ⃗ \vec{x} x Cannot read properties of undefined (reading 'type') w ⃗ \vec{w} w Cannot read properties of undefined (reading 'type')因为矩阵的乘法的要求,则我们需要对 w ⃗ \vec{w} w 进行转置
直线的标准式:
Ax+By+C=0-----(2)
现有一点( x 0 , y 0 x_0,y_0 x0y0),那么该点到直线的距离为d= ∣ A x 0 + B y 0 + C ∣ A 2 + B 2 \frac{|Ax_0+By_0+C|}{\sqrt{A^2+B^2}} A2+B2 Ax0+By0+C,把分母的绝对值去掉,我们就可以区分该点是在直线的正半区还是负半区
我们把距离d的式子进行变形d= A A 2 + B 2 x 0 + B A 2 + B 2 y 0 + C \frac{A}{\sqrt{A^2+B^2}}x_0+\frac{B}{\sqrt{A^2+B^2}}y_0+C A2+B2 Ax0+A2+B2 By0+C

这时候我们就可以认为 w ⃗ \vec{w} w Cannot read properties of undefined (reading 'type') x ⃗ \vec{x} x Cannot read properties of undefined (reading 'type')
式子就变成了(1)式。

2.分割面的求取

由1里面的数学式子我们可以求出每个样本点到分割面的距离,这时候式子已经归一化了
现在的们的目标函数是:Cannot read properties of undefined (reading 'type')Cannot read properties of undefined (reading 'type')( w ⃗ j T ⋅ x i ⃗ + b j \vec{w}_j^T\cdot\vec{x_i}+b_j w jTxi +bj)
这个式子的意思就是求最短距离里最长的那个,此时得到的参数w,b就是我们分割超平面的两个参数
以上是对感性认识的一个数学体现,可是这个是中看不中用,因为有无数条分割超平面,我们不可能遍历完,所以我们要用更加厉害的数学公式来弄一弄
(1)数据
训练数据集: T = ( x 1 , y 1 ) , ( x 2 , y 2 ) . . . ( x n , y n ) T={(x_1,y_1),(x_2,y_2)...(x_n,y_n)} T=(x1,y1),(x2,y2)...(xn,yn)
其中x是样本特征向量集,y是类别-1,1。 ( x i , y i ) (x_i,y_i) (xi,yi)是一个样本点
(2)特征映射
假设一个样本有两个特征(a,b),那么他的一个映射可以为 ϕ = ( a , b , a b , a 2 , b 2 ) \phi=(a,b,ab,a^2,b^2) ϕ=(a,b,ab,a2,b2)也可以是三次方等等
(3)目标函数推导
从前面的结果可以得到 y ( x ) = w T ϕ ( x ) + b y(x)=w^T\phi(x)+b y(x)=wTϕ(x)+b这个式子还没进行归一化
这时有
{ y ( x i ) > 0 ⇒ y i = + 1 y ( x i ) < 0 ⇒ y i = − 1 \left\{ \begin{array}{rcl} y(x_i)>0 \Rightarrow y_i=+1\\ y(x_i)<0 \Rightarrow y_i=-1 \end{array} \right. {y(xi)>0yi=+1y(xi)<0yi=1
y i ⋅ y ( x i ) > 0 y_i\cdot y(x_i)>0 yiy(xi)>0
对w,b等比例缩放
y i ⋅ y ( x i ) ∣ ∣ w ∣ ∣ \frac{y_i\cdot y(x_i)}{||w||} wyiy(xi)= y i ⋅ ( w T ϕ ( x i ) + b ) ∣ ∣ w ∣ ∣ \frac{y_i\cdot (w^T\phi(x_i)+b)}{||w||} wyi(wTϕ(xi)+b)-----(3) (3)式中的 w T ϕ ( x i ) + b ∣ ∣ w ∣ ∣ \frac{w^T\phi(x_i)+b}{||w||} wwTϕ(xi)+b就是样本点 x i x_i xi到分割面的距离除以了||w||后就是归一化了
最终目标函数就变成了:Cannot read properties of undefined (reading 'type')Cannot read properties of undefined (reading 'type')( y i ⋅ ( w T ϕ ( x i ) + b ) ∣ ∣ w ∣ ∣ \frac{y_i\cdot (w^T\phi(x_i)+b)}{||w||} wyi(wTϕ(xi)+b) )
(4)目标函数化简
我们可以将w等比例的缩放,使得 ∣ y ( x i ) ∣ > = 1 |y(x_i)|>=1 y(xi)>=1这里是函数距离
则约束条件: y i ⋅ ( w T ϕ ( x i ) + b ) y_i\cdot (w^T\phi(x_i)+b) yi(wTϕ(xi)+b)>=1
新的目标函数为:Cannot read properties of undefined (reading 'type')
新目标函数等价为:Cannot read properties of undefined (reading 'type')
(5)拉格朗日乘子
举个例子来体会一下什么是拉格朗日乘子
现在目标函数是 m i n f 0 ( x ) min f_0(x) minf0(x)
约束条件是: f 1 ( x ) < = 0 f_1(x)<=0 f1(x)<=0
拉格朗日函数: L ( x , λ ) L(x,\lambda) L(x,λ)= f 0 ( x ) + λ f 1 ( x ) f_0(x)+\lambda f _1(x) f0(x)+λf1(x) λ > = 0 \lambda >=0 λ>=0
那么我们算法里的拉格朗日函数就是:
L ( w , b , λ ) L(w,b,\lambda) L(w,b,λ)= 1 2 ∣ ∣ w ∣ ∣ 2 \frac{1}{2}||w||^2 21w2- ∑ i = 1 n λ i ( y i ⋅ ( w T ϕ ( x i ) + b ) − 1 ) \sum_{i=1}^n \lambda_i(y_i\cdot (w^T\phi(x_i)+b)-1) i=1nλi(yi(wTϕ(xi)+b)1)
原问题就是:
Cannot read properties of undefined (reading 'type')-----(4)
(4)式中的Cannot read properties of undefined (reading 'type')就是 1 2 \frac{1}{2} 21 ∣ ∣ w ∣ ∣ 2 ||w||^2 w2
原问题的对偶问题:
Cannot read properties of undefined (reading 'type')-----(5)
(4)>=(5)
要求(5)式的值,则首先对w,b求偏导
ϑ L ϑ w = 0 ⟹ w = ∑ i = 1 n λ i y i ϕ ( x i ) \frac{\vartheta L}{\vartheta w}=0 \Longrightarrow w=\sum_{i=1}^n \lambda_iy_i\phi(x_i) ϑwϑL=0w=i=1nλiyiϕ(xi)-----(6)

ϑ L ϑ b = 0 ⟹ 0 = ∑ i = 1 n λ i y i \frac{\vartheta L}{\vartheta b}=0 \Longrightarrow 0=\sum_{i=1}^n \lambda_iy_i ϑbϑL=00=i=1nλiyi-----(7)
将(6),(7)带回到 L ( w , b , λ ) L(w,b,\lambda) L(w,b,λ)得:
L ( w , b , λ ) = 1 2 ∣ ∣ w ∣ ∣ 2 L(w,b,\lambda)=\frac{1}{2}||w||^2 L(w,b,λ)=21w2- ∑ i = 1 n λ i ( y i ⋅ ( w T ϕ ( x i ) + b ) − 1 ) \sum_{i=1}^n \lambda_i(y_i\cdot (w^T\phi(x_i)+b)-1) i=1nλi(yi(wTϕ(xi)+b)1)

= 1 2 w T w − w T ∑ i = 1 n λ i y i ϕ ( x i ) − b ∑ i = 1 n λ i y i + ∑ i = 1 n λ i \frac{1}{2}w^Tw-w^T\sum_{i=1}^n \lambda_iy_i\phi(x_i)-b\sum_{i=1}^n \lambda_iy_i+\sum_{i=1}^n \lambda_i 21wTwwTi=1nλiyiϕ(xi)bi=1nλiyi+i=1nλi

= 1 2 w T ∑ i = 1 n λ i y i ϕ ( x i ) − w T ∑ i = 1 n λ i y i ϕ ( x i ) − b ⋅ 0 + ∑ i = 1 n λ i \frac{1}{2}w^T\sum_{i=1}^n \lambda_iy_i\phi(x_i)-w^T\sum_{i=1}^n \lambda_iy_i\phi(x_i)-b\cdot0+\sum_{i=1}^n \lambda_i 21wTi=1nλiyiϕ(xi)wTi=1nλiyiϕ(xi)b0+i=1nλi

= ∑ i = 1 n λ i − 1 2 ( ∑ i = 1 n λ i y i ϕ ( x i ) ) T ∑ i = 1 n λ i y i ϕ ( x i ) \sum_{i=1}^n \lambda_i-\frac{1}{2}(\sum_{i=1}^n \lambda_iy_i\phi(x_i))^T\sum_{i=1}^n \lambda_iy_i\phi(x_i) i=1nλi21(i=1nλiyiϕ(xi))Ti=1nλiyiϕ(xi)

= ∑ i = 1 n λ i − 1 2 ∑ i , j = 1 n λ i λ j y i y j ϕ T ( x i ) ϕ ( x j ) \sum_{i=1}^n \lambda_i-\frac{1}{2}\sum_{i,j=1}^n\lambda_i\lambda_jy_iy_j\phi^T(x_i)\phi(x_j) i=1nλi21i,j=1nλiλjyiyjϕT(xi)ϕ(xj)

Cannot read properties of undefined (reading 'type')

最终目标函数又发生了变化:
Cannot read properties of undefined (reading 'type') -----(8)
约束条件:
∑ i = 1 n λ i y i = 0 \sum_{i=1}^n\lambda_iy_i=0 i=1nλiyi=0-----(9)

λ i > = 0 \lambda_i>=0 λi>=0 -----(10)
(8),(9),(10)三个式子就是最终我们需要的
接下来举一个栗子,看看怎么来用这三个式子
如下图
在这里插入图片描述
给定三个数据点 x 1 ( 3 , 3 , 1 ) , x 2 ( 4 , 3 , 1 ) , x 3 ( 1 , 1 , − 1 ) x_1(3,3,1),x_2(4,3,1),x_3(1,1,-1) x1(3,3,1),x2(4,3,1),x3(1,1,1),求线性可分支持向量机。1,-1是数据的类别,横轴是特征一,纵轴是特征二
由式(8)变形可得:
目标函数为:
Cannot read properties of undefined (reading 'type')
= 1 2 ( 18 λ 1 2 + 25 λ 2 2 + 2 λ 3 2 + 42 λ 1 λ 2 − 12 λ 1 λ 3 − 14 λ 2 λ 3 ) − λ 1 − λ 2 − λ 3 \frac{1}{2}(18\lambda_1^2+25\lambda_2^2+2\lambda_3^2+42\lambda_1\lambda_2-12\lambda_1\lambda_3-14\lambda_2\lambda_3)-\lambda_1-\lambda_2-\lambda_3 21(18λ12+25λ22+2λ32+42λ1λ212λ1λ314λ2λ3)λ1λ2λ3
约束条件:
λ 1 + λ 2 − λ 3 = 0 \lambda_1+\lambda_2-\lambda_3=0 λ1+λ2λ3=0
λ i > = 0 , i = 1 , 2 , 3 \lambda_i>=0,i=1,2,3 λi>=0,i=1,2,3
由约束条件我可以把 λ 3 \lambda_3 λ3给替换掉得关于 λ 1 , λ 2 \lambda_1,\lambda_2 λ1,λ2的函数:
s ( λ a , λ 2 ) = 4 λ 1 2 + 13 2 λ 2 2 + 10 λ 1 λ 2 − 2 λ 1 − 2 λ 2 s(\lambda_a,\lambda_2)=4\lambda_1^2+\frac{13}{2}\lambda_2^2+10\lambda_1\lambda_2-2\lambda_1-2\lambda_2 s(λa,λ2)=4λ12+213λ22+10λ1λ22λ12λ2
分别对 λ 1 , λ 2 \lambda_1,\lambda_2 λ1,λ2求导并令其为0,得 s ( λ 1 , λ 2 ) s(\lambda_1,\lambda_2) s(λ1,λ2)在点(1.5,-1)取极值,但是根据约束条件 λ i > = 0 \lambda_i>=0 λi>=0,则在边界处取极值
λ 1 = 0 \lambda_1=0 λ1=0时,最小值s(0,2/13)=-2/13
λ 2 = 0 \lambda_2=0 λ2=0时,最小值s(1/4,0)=-1/4
于是, s ( λ 1 , λ 2 ) s(\lambda_1,\lambda_2) s(λ1,λ2) λ 1 = 1 / 4 , λ 2 = 0 \lambda_1=1/4,\lambda_2=0 λ1=1/4,λ2=0时达到最小, λ 3 = 1 / 4 \lambda_3=1/4 λ3=1/4
由(6)式可以得到 w 1 = w 2 = 0.5 w_1=w_2=0.5 w1=w2=0.5
由公式 y ( x ) = w T ϕ ( x ) + b y(x)=w^T\phi(x)+b y(x)=wTϕ(x)+b可以得到b=-2
则超平面就是 1 2 x 1 + 1 2 x 2 − 2 = 0 \frac{1}{2}x_1+\frac{1}{2}x_2-2=0 21x1+21x22=0
这里的 x 1 x_1 x1是特征一, x 2 x_2 x2是特征二。那么这个超平面就是我们图中的那条实线。符合事实

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值