线性可分
存在一个超平面,可以将数据集的正负例完全正确地划分至超平面两侧。如:左图中的数据是线性可分,而右图不是。
线性模型形式
是x在第i个特征的取值。
反映了第i个特征的重要程度。如
可看出在决定一个瓜是否为好瓜时,根蒂属性最重要。
线性分类器
本文介绍两种常见的线性分类器:
- 感知器算法
- 支持向量机SVM
感知器算法
函数定义
我们要做的就是求出W与b,从图形上看就是找到一条直线将数据划分在直线两侧。
感知器损失函数
分析发现,误分类点有两种情况:
- 真实标签y=1,而带入分类器计算得
- 真实标签y=-1,而带入分类器计算得
整合得:,称其为函数距离。所以我们的目标是最小化误分类点,即损失函数为:,最小化误分类点与超平面间的函数距离。
现在有了数据集与损失函数,如何求得W与b呢?我们采用梯度下降方法。
梯度下降
先给个例子简单回顾一下梯度下降步骤:
已知 , 我们的目标是。现在假设起点为(1.0 , 1.0),求下一个位置。
由梯度下降更新:(设学习率为0.1)
求得更新后 , , 所以下一个位置为(0.8,0.8)
感知器算法中的梯度下降
,更新方式: ,
现在总结一下感知器算法步骤:(以二维为例)
输入:数据集T={{x1,y1},{x2,y2},...,{xN,yN}},yi为1/-1。学习率为
要求输出:w,b。感知器模型
- 选定初值w0,b0
- 从数据集中选出数据(xi,yi)
- 如果(xi,yi)满足,则用 ,
- 转至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:
step1:将X=[-1,0]带入当前f(x)得f(x)<=0,而给定的标签y=1,是误分类点,所以
step2:将X=[0,1]带入当前f(x)得f(x)=1>0,而给定的标签y=1,不是误分类点,所以不变
step3:将X=[0,-1]带入当前f(x)得f(x)=1而给定的标签y=-1,是误分类点,所以
step3:将X=[1,0]带入当前f(x)得f(x)=-1,而给定的标签y=-1,不是误分类点,所以不变
(此时所有数据虽已迭代一遍,但W更新了,所以得再迭代以检测更新后的f(x)是否还有误分类点)
step4:将X=[-1,0]、[0,1]、[0,-1]、[1,0]带入发现都不是误分类点,所以
综上,我们求出,f(x)=sign(-x1+x2)
通过感知器算法,我们已经能找到一条直线将数据集按类别划分,但是这样的直线有无数条,我们的目标是要找到一条最优的。我们希望这条直线离样本点越远越好,这样分类器的鲁棒性比较好。
支持向量机SVM
引出:满足将样本点按类别划分的直线有无数条,我们想找到一条离样本点最远的。可以通过找一条最宽的带子能将样本点划分开,则这条带子的中线便是我们要求的划分超平面。
- 支持向量:离划分超平面垂直距离最小的样本点
- SVM通过找出支持向量来求出超平面
我们设超平面方程为 , 我们知道点到直线Ax+By+C=0的距离为 , 所以可推出第i个样本点到超平面的距离为 ,d即函数距离。
SVM损失函数
超平面可以将样本点按类别分开,也即对于样本点(Xi,yi):
- 如果yi=1,则
- 如果yi=-1,则
令 为支持向量到超平面的几何距离。则我们的目标是 , 且使得 (因为其它样本到超平面的几何距离应该大于支持向量到超平面的几何距离)
可以发现当W,b成比例增大时,几何距离都不会变。即最后求得的是一组W,b的集合,若W,b为一组解,则KW,Kb也为一组解。
所以我们令并不会影响最优解的求导,因此我们的目标函数可化为:
最后求出的 分离超平面为,分类决策函数为
code
SVM python例子见机器学习:支持向量机SVM原理及python实现