本系列是七月算法机器学习课程笔记
文章目录
- 1 问题
- 2 key idea 1
- 3 key idea 2
- 4 key idea 3
- 5 key idea4
- 6 拉格朗日乘子求解
- 7 核函数的发现
学习SVM不要先看数学公式,这样把SVM的精华都丢掉了。学习SVM学习作者是如何构建出这样一个算法的过程。
1 问题
无论线性分类、逻辑回归、决策树都是要找到一个决策边界。但是这个决策边界什么时候最好呢?
就像图中这样,答案应该是线条3最好,它的泛化能力更强。那怎么找到这样的一条线呢?
2 key idea 1
目标是要找到最宽的那条街道(widest street way)。
假设这条线已经存在,可以做这条线的法向量w⃗\vec{w}w,那么对于需要预测的一个点,记作向量ux⃗\vec{u_x}ux,那么ux⃗\vec{u_x}ux在法向量上的投影和截距b有这样一个关系:如果ux⃗w⃗+b>=0\vec{u_x}\vec{w}+b>=0uxw+b>=0,则是属于正分类。否则属于负分类。u是属于任意一个样本。
3 key idea 2

根据上面的式子,我们可以要求如下:
对于训练集中的正样本x+⃗w⃗+b>=1\vec{x_+}\vec{w}+b>=1x+w+b>=1
对于训练集中的负样本x−⃗w⃗+b<=−1\vec{x_-}\vec{w}+b<=-1x−w+b<=−1
对于训练集中的站在街边的点取到等于号。
用yiy_iyi乘以上面的式子会发现两个条件变成一个条件了。
先看正样本,yi=1y_i=1yi=1,yi∗(xi⃗w⃗+b)>=1∗1y_i*(\vec{x_i}\vec{w}+b)>=1*1yi∗(xiw+b)>=1∗1 得到 xi⃗w⃗+b>=1\vec{x_i}\vec{w}+b>=1xiw+b>=1
再看负样本,yi=−1y_i=-1yi=−1, yi∗(xi⃗w⃗+b)>=−1∗(−1)y_i*(\vec{x_i}\vec{w}+b)>=-1*(-1)yi∗(xiw+b)>=−1∗(−1),得到yi(xi⃗w⃗)+b>=1y_i(\vec{x_i}\vec{w})+b>=1yi(xiw)+b>=1
所以对于训练集中的每一个样本有这样一个约束:yi(xi⃗w⃗+b)>=1y_i(\vec{x_i}\vec{w}+b)>=1yi(xiw+b)>=1
站在街边的样本取到等于号。
4 key idea 3

取训练集中站在街边的一个正样本x+⃗\vec{x_+}x+,一个负样本x−⃗\vec{x_-}x−,可以得到一个x+⃗−x−⃗\vec{x_+}-\vec{x_-}x+−x−(图中红色的向量)
这条街的宽度就是红色向量在法向量上的投影。
width=(x+⃗−x−⃗)w⃗∣w⃗∣width=(\vec{x_+}-\vec{x_-})\dfrac{\vec{w}}{|\vec{w}|}width=(x+−x−)∣w∣w
对于站点街上的正样本,因为yi(x+⃗w⃗+b)=1y_i(\vec{x_+}\vec{w}+b)=1yi(x+w+b)=1,得到x+⃗w⃗=1−b\vec{x_+}\vec{w}=1-bx+w=1−b
对于站点街上的负样本,因为yi(x−⃗w⃗+b)=1y_i(\vec{x_-}\vec{w}+b)=1yi(x−w+b)=1,得到x−⃗w⃗=−1+b\vec{x_-}\vec{w}=-1+bx−w=−1+b
代入上面的式子
width=(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∣最小,那就12∣w⃗∣2\dfrac{1}{2}|\vec{w}|^221∣w∣2最小。
到现在的结论是:min(12∣w⃗∣2)min(\dfrac{1}{2}|\vec{w}|^2)min(21∣w∣2),约束条件是:yi(xi⃗w⃗+b)−1=0y_i(\vec{x_i}\vec{w}+b)-1=0yi(xiw+b)−1=0
5 key idea4
现在我们知道目标是要找到最小的(12∣w⃗∣2)(\dfrac{1}{2}|\vec{w}|^2)(21∣w∣2),在约束条件下:yi(xi⃗w⃗+b)−1=0y_i(\vec{x_i}\vec{w}+b)-1=0yi(xiw+b)−1=0
使用拉格朗日解决:L=12∣w⃗∣2−∑λi[yi(xi⃗w⃗+b)−1]L=\dfrac{1}{2}|\vec{w}|^2-\sum\lambda_i[y_i(\vec{x_i}\vec{w}+b)-1]L=21∣w∣2−∑λi[yi(xiw+b)−1]
在这个式子中,假设拉格朗日因子λ\lambdaλ已知,w和b是未知数。
首先对w求导取到极值点:w⃗−∑λiyixi⃗=0\vec{w}-\sum\lambda_iy_i\vec{x_i}=0w−∑λiyixi=0,得到w⃗=∑λiyixi⃗\vec{w}=\sum\lambda_iy_i\vec{x_i}w=∑λiyixi
其次对b求导取到极值点:∑λiyi=0\sum\lambda_iy_i=0∑λiyi=0
将刚刚求得的两个式子带回到拉格朗日式子:
L=12∣w⃗∣2−∑λi[yi(xi⃗w⃗+b)−1]L=\dfrac{1}{2}|\vec{w}|^2-\sum\lambda_i[y_i(\vec{x_i}\vec{w}+b)-1]L=21∣w∣2−∑λi[yi(xiw+b)−1]
=12∑λiyixi⃗∑λjyjxj⃗−∑λiyixi⃗∑λjyjxj⃗−∑λiyib+∑λ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
=12∑λiyixi⃗∑λjyjxj⃗−∑λiyixi⃗∑λjyjxj⃗+∑λ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−12∑λiyixi⃗∑λjyjxj⃗=\sum\lambda_i-\dfrac{1}{2}\sum\lambda_iy_i\vec{x_i}\sum\lambda_jy_j\vec{x_j}=∑λi−21∑λiyixi∑λjyjxj
=∑λi−12∑∑λiλjyiyj(xi⃗xj⃗)=\sum\lambda_i-\dfrac{1}{2}\sum\sum\lambda_i\lambda_jy_iy_j(\vec{x_i}\vec{x_j})=∑λi−21∑∑λiλjyiyj(xixj)
可以看到L取决于两个样本的乘积:xi⃗xj⃗\vec{x_i}\vec{x_j}xixj
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>=0wu+b>=0,则是属于正分类。
∑λiyixi⃗u⃗+b>=0\sum\lambda_iy_i\vec{x_i}\vec{u}+b>=0∑λiyixiu+b>=0
∑λiyi(xi⃗u⃗)+b>=0\sum\lambda_iy_i(\vec{x_i}\vec{u})+b>=0∑λiyi(xiu)+b>=0
xi⃗u⃗\vec{x_i}\vec{u}xiu是向量的点乘,表示一个线性关系。如果样本线性不可分,怎么办?一种方法是将每个点升级到高维空间。让它们在高维空间线性可分。发现找不到这样的线性函数。上面的式子告诉我们,不用找到每个点的高维空间,只要找到两个点点乘的高维空间即可。也就是说K(xi,xj)=Θ(xi)Θ(xj)K(x_i,x_j)=\varTheta(x_i)\varTheta(x_j)K(xi,xj)=Θ(xi)Θ(xj)
常用的核函数有:
线性核函数:K(xi,xj)=xiTxjK(x_i,x_j)=x_i^Tx_jK(xi,xj)=xiTxj
多项式核函数:K(xi,xj)=(λxiTxj+r)dK(x_i,x_j)=(\lambda x_i^Tx_j+r)^dK(xi,xj)=(λxiTxj+r)d
RBF:K(xi,xj)=e1λ∣xi−xj∣2K(x_i,x_j)=e^{\dfrac{1}{\lambda|x_i-x_j|^2}}K(xi,xj)=eλ∣xi−xj∣21
sigmoid函数:K(xi,xj)=tanh(λxiTxj+r)K(x_i,x_j)=tanh(\lambda x_i^Tx_j+r)K(xi,xj)=tanh(λxiTxj+r)