第三课 SVM

本系列是七月算法机器学习课程笔记


学习SVM不要先看数学公式,这样把SVM的精华都丢掉了。学习SVM学习作者是如何构建出这样一个算法的过程。

1 问题

无论线性分类、逻辑回归、决策树都是要找到一个决策边界。但是这个决策边界什么时候最好呢?

就像图中这样,答案应该是线条3最好,它的泛化能力更强。那怎么找到这样的一条线呢?

2 key idea 1

在这里插入图片描述

目标是要找到最宽的那条街道(widest street way)。

假设这条线已经存在,可以做这条线的法向量 w ⃗ \vec{w} w ,那么对于需要预测的一个点,记作向量 u x ⃗ \vec{u_x} ux ,那么 u x ⃗ \vec{u_x} ux 在法向量上的投影和截距b有这样一个关系:如果 u x ⃗ w ⃗ + b > = 0 \vec{u_x}\vec{w}+b>=0 ux w +b>=0,则是属于正分类。否则属于负分类。u是属于任意一个样本。

3 key idea 2

根据上面的式子,我们可以要求如下:
对于训练集中的正样本 x + ⃗ w ⃗ + b > = 1 \vec{x_+}\vec{w}+b>=1 x+ w +b>=1
对于训练集中的负样本 x − ⃗ w ⃗ + b < = − 1 \vec{x_-}\vec{w}+b<=-1 x w +b<=1
对于训练集中的站在街边的点取到等于号。

y i y_i yi乘以上面的式子会发现两个条件变成一个条件了。
先看正样本, y i = 1 y_i=1 yi=1 y i ∗ ( x i ⃗ w ⃗ + b ) > = 1 ∗ 1 y_i*(\vec{x_i}\vec{w}+b)>=1*1 yi(xi w +b)>=11 得到 x i ⃗ w ⃗ + b > = 1 \vec{x_i}\vec{w}+b>=1 xi w +b>=1

再看负样本, y i = − 1 y_i=-1 yi=1 y i ∗ ( x i ⃗ w ⃗ + b ) > = − 1 ∗ ( − 1 ) y_i*(\vec{x_i}\vec{w}+b)>=-1*(-1) yixi w +b)>=1(1),得到 y i ( x i ⃗ w ⃗ ) + b > = 1 y_i(\vec{x_i}\vec{w})+b>=1 yi(xi w )+b>=1

所以对于训练集中的每一个样本有这样一个约束: y i ( x i ⃗ w ⃗ + b ) > = 1 y_i(\vec{x_i}\vec{w}+b)>=1 yi(xi w +b)>=1
站在街边的样本取到等于号。

4 key idea 3

取训练集中站在街边的一个正样本 x + ⃗ \vec{x_+} x+ ,一个负样本 x − ⃗ \vec{x_-} x ,可以得到一个 x + ⃗ − x − ⃗ \vec{x_+}-\vec{x_-} x+ x (图中红色的向量)

这条街的宽度就是红色向量在法向量上的投影。

w i d t h = ( x + ⃗ − x − ⃗ ) w ⃗ ∣ w ⃗ ∣ width=(\vec{x_+}-\vec{x_-})\dfrac{\vec{w}}{|\vec{w}|} width=(x+ x )w w
对于站点街上的正样本,因为 y i ( x + ⃗ w ⃗ + b ) = 1 y_i(\vec{x_+}\vec{w}+b)=1 yi(x+ w +b)=1,得到 x + ⃗ w ⃗ = 1 − b \vec{x_+}\vec{w}=1-b x+ w =1b

对于站点街上的负样本,因为 y i ( x − ⃗ w ⃗ + b ) = 1 y_i(\vec{x_-}\vec{w}+b)=1 yi(x w +b)=1,得到 x − ⃗ w ⃗ = − 1 + b \vec{x_-}\vec{w}=-1+b x w =1+b

代入上面的式子
w i d t h = ( x + ⃗ − x − ⃗ ) w ⃗ ∣ w ⃗ ∣ = 2 ∣ w ⃗ ∣ width=(\vec{x_+}-\vec{x_-})\dfrac{\vec{w}}{|\vec{w}|}=\dfrac{2}{|\vec{w}|} width=(x+ x )w w =w 2

推到到这里,发现这个宽度和数据集没有关系。

要想width最大,那就应该 2 ∣ w ⃗ ∣ \dfrac{2}{|\vec{w}|} w 2最大,那么就 ∣ w ⃗ ∣ |\vec{w}| w 最小,那就 1 2 ∣ w ⃗ ∣ 2 \dfrac{1}{2}|\vec{w}|^2 21w 2最小。

到现在的结论是: m i n ( 1 2 ∣ w ⃗ ∣ 2 ) min(\dfrac{1}{2}|\vec{w}|^2) min(21w 2),约束条件是: y i ( x i ⃗ w ⃗ + b ) − 1 = 0 y_i(\vec{x_i}\vec{w}+b)-1=0 yi(xi w +b)1=0

5 key idea4

现在我们知道目标是要找到最小的 ( 1 2 ∣ w ⃗ ∣ 2 ) (\dfrac{1}{2}|\vec{w}|^2) (21w 2),在约束条件下: y i ( x i ⃗ w ⃗ + b ) − 1 = 0 y_i(\vec{x_i}\vec{w}+b)-1=0 yi(xi w +b)1=0

使用拉格朗日解决: L = 1 2 ∣ w ⃗ ∣ 2 − ∑ λ i [ y i ( x i ⃗ w ⃗ + b ) − 1 ] L=\dfrac{1}{2}|\vec{w}|^2-\sum\lambda_i[y_i(\vec{x_i}\vec{w}+b)-1] L=21w 2λi[yi(xi w +b)1]

在这个式子中,假设拉格朗日因子 λ \lambda λ已知,w和b是未知数。
首先对w求导取到极值点: w ⃗ − ∑ λ i y i x i ⃗ = 0 \vec{w}-\sum\lambda_iy_i\vec{x_i}=0 w λiyixi =0,得到 w ⃗ = ∑ λ i y i x i ⃗ \vec{w}=\sum\lambda_iy_i\vec{x_i} w =λiyixi

其次对b求导取到极值点: ∑ λ i y i = 0 \sum\lambda_iy_i=0 λiyi=0

将刚刚求得的两个式子带回到拉格朗日式子:
L = 1 2 ∣ w ⃗ ∣ 2 − ∑ λ i [ y i ( x i ⃗ w ⃗ + b ) − 1 ] L=\dfrac{1}{2}|\vec{w}|^2-\sum\lambda_i[y_i(\vec{x_i}\vec{w}+b)-1] L=21w 2λi[yi(xi w +b)1]

= 1 2 ∑ λ i y i x i ⃗ ∑ λ j y j x j ⃗ − ∑ λ i y i x i ⃗ ∑ λ j y j x j ⃗ − ∑ λ i y i b + ∑ λ i =\dfrac{1}{2}\sum\lambda_iy_i\vec{x_i}\sum\lambda_jy_j\vec{x_j}-\sum\lambda_iy_i\vec{x_i}\sum\lambda_jy_j\vec{x_j}-\sum\lambda_iy_ib+\sum\lambda_i =21λiyixi λjyjxj λiyixi λjyjxj λiyib+λi

= 1 2 ∑ λ i y i x i ⃗ ∑ λ j y j x j ⃗ − ∑ λ i y i x i ⃗ ∑ λ j y j x j ⃗ + ∑ λ i =\dfrac{1}{2}\sum\lambda_iy_i\vec{x_i}\sum\lambda_jy_j\vec{x_j}-\sum\lambda_iy_i\vec{x_i}\sum\lambda_jy_j\vec{x_j}+\sum\lambda_i =21λiyixi λjyjxj λiyixi λjyjxj +λi

= ∑ λ i − 1 2 ∑ λ i y i x i ⃗ ∑ λ j y j x j ⃗ =\sum\lambda_i-\dfrac{1}{2}\sum\lambda_iy_i\vec{x_i}\sum\lambda_jy_j\vec{x_j} =λi21λiyixi λjyjxj

= ∑ λ i − 1 2 ∑ ∑ λ i λ j y i y j ( x i ⃗ x j ⃗ ) =\sum\lambda_i-\dfrac{1}{2}\sum\sum\lambda_i\lambda_jy_iy_j(\vec{x_i}\vec{x_j}) =λi21λiλjyiyj(xi xj )

可以看到L取决于两个样本的乘积: x i ⃗ x j ⃗ \vec{x_i}\vec{x_j} xi xj

6 拉格朗日乘子求解

拉格朗日乘子: λ i \lambda_i λi可以使用SMO、KTT、QP来求解。在求解过程中每次以其中两个数 λ i \lambda_i λi λ j \lambda_j λj为未知数进行求导,求得下一轮的值。因为如果只以一个为未知数: λ i \lambda_i λi那么会存在另外一个 λ j \lambda_j λj和它是线性关系,不能求解。

7 核函数的发现

用来预测的函数:如果 w ⃗ u ⃗ + b > = 0 \vec{w}\vec{u}+b>=0 w u +b>=0,则是属于正分类。
∑ λ i y i x i ⃗ u ⃗ + b > = 0 \sum\lambda_iy_i\vec{x_i}\vec{u}+b>=0 λiyixi u +b>=0

∑ λ i y i ( x i ⃗ u ⃗ ) + b > = 0 \sum\lambda_iy_i(\vec{x_i}\vec{u})+b>=0 λiyi(xi u )+b>=0

x i ⃗ u ⃗ \vec{x_i}\vec{u} xi u 是向量的点乘,表示一个线性关系。如果样本线性不可分,怎么办?一种方法是将每个点升级到高维空间。让它们在高维空间线性可分。发现找不到这样的线性函数。上面的式子告诉我们,不用找到每个点的高维空间,只要找到两个点点乘的高维空间即可。也就是说 K ( x i , x j ) = Θ ( x i ) Θ ( x j ) K(x_i,x_j)=\varTheta(x_i)\varTheta(x_j) K(xi,xj)=Θ(xi)Θ(xj)

常用的核函数有:
线性核函数: K ( x i , x j ) = x i T x j K(x_i,x_j)=x_i^Tx_j K(xi,xj)=xiTxj
多项式核函数: K ( x i , x j ) = ( λ x i T x j + r ) d K(x_i,x_j)=(\lambda x_i^Tx_j+r)^d K(xi,xj)=(λxiTxj+r)d
RBF: K ( x i , x j ) = e 1 λ ∣ x i − x j ∣ 2 K(x_i,x_j)=e^{\dfrac{1}{\lambda|x_i-x_j|^2}} K(xi,xj)=eλxixj21

sigmoid函数: K ( x i , x j ) = t a n h ( λ x i T x j + r ) K(x_i,x_j)=tanh(\lambda x_i^Tx_j+r) K(xi,xj)=tanh(λxiTxj+r)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值