- 概述
感知机可以看成是一种判别模型,适用于二分类的问题。它需要在给定样本点的基础上学习出来一个分离超平面,将已知的样本点分开。感知机是学习支持向量机的基础,因为两者基本上的思想是相似的,都是通过间隔最小化来实现的。
- 学习策略
通过给定的样本数据,学习得来一个分离超平面wx+b=0,使得这个平面可以很好的区分数据。对所有的数据分为正例点yi = +1和负例点yi = -1,即wx+b < 0,则yi = -1,wx+b >0,则yi = +1。这个是一些假设的前提。前面也说了是通过间隔最小化实现的,所以下面:
首先给出空间中点到直线的距离公式:
这个是空间距离,下面给出函数间隔:
对于所有的分类正确的点来说, ,|
| =
,但是对于所有的误分点来说,
,所以|
| =
。所以对于误分点来说点到直线的距离为
,所以所有误分点到分离超平面的距离为
,这里不考虑
,因为w是不断迭代的,对于计算过程中的每个w,我们都要重新计算其误分点的距离,所以这个w在当前情况下,都是一样的,所以只计算分子部分即可。即得到损失函数
,所以我们的目标就是要最小化上面的损失函数。
怎么理解这个函数:由于我们是基于误分点计算的损失函数,所以对于非误分点来说,我们不考虑。对于误分点来说,所以我们要最小化所有误分点的和,从而是损失降到最小,即L(w,b)最小。接下来就涉及到求极值的问题。
由于这里的w和b都是未知数,所以我们分别对w和b求导,得到下面公式:
我们知道对函数中所有的未知数求一阶导数是梯度的概念,梯度是函数值增长最快的方向,而我们这里求的是最小值,所以函数的增长方向是与梯度相反的。所以得到w和b的迭代公式:
其中η是步长,即每次w和b下降的幅度,专业的说法叫学习率。
- 算法过程
算法采用的是随机梯度下降法。首先要给定步长η,这个是自定义的量。
初始化一个w和b的值,然后随机选取一个点,看是否能对改点进行正确分类。如果不能够正确分类,就按照上面的迭代方式对w和b进行更新,直到改点可以进行正确分类,然后再选取下一个点。依此迭代下去,直到所有的样本点都能够正确分类。
- 特点
感知机算法的对象必须是线性可分的,就是一定能够找到一个分离超平面将所有的点分开,如果样本点不是线性可分的,那么以上的算法就不能够收敛。
- 对偶形式
根据上面的w和b的迭代过程,我们可以看出其过程就是逐步修改w,b,设修改b次,则w,b关于(xi,yi)的增量分别是aiyixi(i为下标)和aiyi,其中ai =niη,所以可以简化为下面的形式:
得到的感知机模型为:
对于误分的条件为
表达式中有x的內积形式,所以在计算之前,我们可以先计算出来Gram矩阵,就是x的值两两相乘,得到一个N*N的矩阵,可以方便计算。
对于误分条件,我们要更新ai和b的值,更新方式如下:
首先初始化a和b都是0,去第一个x,计算如果是误分,则按照上面方式更新ai的值,直到分类正确,记下来选取第二个值,同样的方法更新对应的ai,在迭代过程中,如果之前的值没有分类正确,就需要继续更新之前的值;若得到到a2时,之前的a1已经是确定好的,但是现在发现更新a2后,第一个点不能正确分类了,这时候就需要继续更新a1的值。。。。一次迭代,直到所有的点都能够正确分类;最后得到一组a的集合,在将其带入到公式中求得w和b,得到最终结果。