线性分类器:感知器/SVM

线性可分

存在一个超平面,可以将数据集的正负例完全正确地划分至超平面两侧。如:左图中的数据是线性可分,而右图不是。

   

线性模型形式

f(x)=w_{1}x_{1}+w_{2}x_{2}+...+w_{d}x_{d}+b = W^{T}X+b

x_{i}是x在第i个特征的取值。

w_{i}反映了第i个特征的重要程度。如

可看出在决定一个瓜是否为好瓜时,根蒂属性最重要。

线性分类器

本文介绍两种常见的线性分类器:

  • 感知器算法
  • 支持向量机SVM

感知器算法

函数定义

f(x)=sign(W^{T}X+b)

sign(x)=\begin{Bmatrix} 1&x\geqslant 0 \\ -1& x<0 \end{Bmatrix}

我们要做的就是求出W与b,从图形上看就是找到一条直线将数据划分在直线两侧。

感知器损失函数

分析发现,误分类点有两种情况:

  • 真实标签y=1,而带入分类器计算得W^{T}X+b<0
  • 真实标签y=-1,而带入分类器计算得W^{T}X+b>0

整合得:-y(W^{T}X+b)>0,称其为函数距离。所以我们的目标是最小化误分类点,即损失函数为:L(W,b)=-\sum_{i=1}^{m}y_{i}(W^TX_{i}+b),最小化误分类点与超平面间的函数距离。

现在有了数据集与损失函数,如何求得W与b呢?我们采用梯度下降方法。

梯度下降

先给个例子简单回顾一下梯度下降步骤:

已知J(\theta _{1},\theta _{2})=\theta _{1}^{2}+\theta _{2}^{2} , 我们的目标是minJ(\theta _{1},\theta _{2})。现在假设起点为(1.0 , 1.0),求下一个位置。

由梯度下降更新:(设学习率为0.1)

求得更新后\theta _{1}=1.0-0.1\cdot2\cdot 1.0=0.8 , \theta _{2}=1.0-0.1\cdot2\cdot 1.0=0.8 , 所以下一个位置为(0.8,0.8)

感知器算法中的梯度下降

L(W,b)=-\sum_{i=1}^{m}y_{i}(W^TX_{i}+b)  ,更新方式:b=b+\alpha \sum_{i=1}^{m}y_{i} , W=W+\alpha \sum_{i=1}^{m}y_{i}x_{i}

现在总结一下感知器算法步骤:(以二维为例)

输入:数据集T={{x1,y1},{x2,y2},...,{xN,yN}},yi为1/-1。学习率为\alpha

要求输出:w,b。感知器模型f(x)=sign(wx+b)

  1. 选定初值w0,b0
  2. 从数据集中选出数据(xi,yi)
  3. 如果(xi,yi)满足y_{i}(wx_{i}+b)\leq 0,则用w=w+\alpha y_{i}x_{i} , b=b+\alpha y_{i}
  4. 转至2直至数据集中没有误分类的点。

Example

初值w=(0,0),b=0 -->(w1,w2,b),给出的数据及其标签:

  

求出一个感知器分类器?

解:(首先自己要清楚更新w,b规则为w=w+a xi yi , b=b+a yi,这里为了方便看就取学习率a=1),将w,b合并成一个矩阵,则 初始时step0: W^T=\begin{bmatrix} 0\\ 0 \\ 0 \end{bmatrix}

step1:将X=[-1,0]带入当前f(x)得f(x)<=0,而给定的标签y=1,是误分类点,所以W^T=\begin{bmatrix} 0\\ 0 \\ 0 \end{bmatrix}+1\cdot \begin{bmatrix} 1\\ -1 \\ 0 \end{bmatrix}=\begin{bmatrix} 1\\ -1 \\ 0 \end{bmatrix}

step2:将X=[0,1]带入当前f(x)得f(x)=1>0,而给定的标签y=1,不是误分类点,所以W^T=\begin{bmatrix} 1\\ -1 \\ 0 \end{bmatrix}不变

step3:将X=[0,-1]带入当前f(x)得f(x)=1而给定的标签y=-1,是误分类点,所以W^T=\begin{bmatrix} 1\\ -1 \\ 0 \end{bmatrix}+\begin{bmatrix} -1\\ 0 \\ 1 \end{bmatrix}=\begin{bmatrix} 0\\ -1 \\ 1 \end{bmatrix}

step3:将X=[1,0]带入当前f(x)得f(x)=-1,而给定的标签y=-1,不是误分类点,所以W^T=\begin{bmatrix} 0\\ -1 \\ 1\end{bmatrix}不变

(此时所有数据虽已迭代一遍,但W更新了,所以得再迭代以检测更新后的f(x)是否还有误分类点)

step4:将X=[-1,0]、[0,1]、[0,-1]、[1,0]带入发现都不是误分类点,所以W^T=\begin{bmatrix} 0\\ -1 \\ 1\end{bmatrix}

综上,我们求出W^T=\begin{bmatrix} 0\\ -1 \\ 1\end{bmatrix},f(x)=sign(-x1+x2)

通过感知器算法,我们已经能找到一条直线将数据集按类别划分,但是这样的直线有无数条,我们的目标是要找到一条最优的。我们希望这条直线离样本点越远越好,这样分类器的鲁棒性比较好。

支持向量机SVM

引出:满足将样本点按类别划分的直线有无数条,我们想找到一条离样本点最远的。可以通过找一条最宽的带子能将样本点划分开,则这条带子的中线便是我们要求的划分超平面。

  • 支持向量:离划分超平面垂直距离最小的样本点
  • SVM通过找出支持向量来求出超平面

我们设超平面方程为W^{T}X+b=0 , 我们知道点到直线Ax+By+C=0的距离为d=\frac{|Ax_{0}+By_{0}+C|}{\sqrt{A^{2}+B^{2}}} , 所以可推出第i个样本点到超平面的距离为d=\frac{|W^{T}X_{i}+b|}{\left \| W \right \| } ,d即函数距离。

SVM损失函数 

 超平面可以将样本点按类别分开,也即对于样本点(Xi,yi):

  • 如果yi=1,则W^{T}X^{(i)}+b>0
  • 如果yi=-1,则W^{T}X^{(i)}+b<0

\hat{\gamma}=|W^{T}X_{i}+b| 为支持向量到超平面的几何距离。则我们的目标是max (W,b) \frac{\hat{\gamma }}{\left \| W \right \| } , 且使得y_{i}(W^TX_{i}+b)\geq \hat{\gamma } (因为其它样本到超平面的几何距离应该大于支持向量到超平面的几何距离)

可以发现当W,b成比例增大时,几何距离都不会变。即最后求得的是一组W,b的集合,若W,b为一组解,则KW,Kb也为一组解。

所以我们令\hat{\gamma }=1并不会影响最优解的求导,因此我们的目标函数可化为:

min (W,b) \frac{1}{2}\left \| W \right \|^{2}, st,y_{i}(W^TX_{i}+b)-1\geq 0

最后求出的 分离超平面为(W^{*})^{T}X+b^{*}=0,分类决策函数为f(x)=sign((W^{*})^{T}X+b^{*})

code

SVM python例子见机器学习:支持向量机SVM原理及python实现

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值