一、感知机 - 线性二分类
感知机是一种相对简单的 二分类 的 线性 分类模型,其输入为实例的特征向量,输出为实例的类别,取+1和-1二值。
感知机通过学习将训练数据进行线性划分的超平面,将整个输入空间空间分为正负两类,因而属于判别模型。
由输入空间到输出空间的如下函数:
称为感知机。其中, w ∈ R 叫做权值(weight)或权值向量(weight vector), b ∈ R 叫做偏置(bias)。
具体地看,感知机是在没有基函数的线性回归上套了马甲。
其中sign是符号函数:
感知机算法应用的前提是假设数据集是线性可分的,而感知机算法也是在求得一个使得训练集正实例点和负实例点完全正确分开的分离超平面,清楚了感知机算法的分类函数以及它的假设,那么接下来的事情就是定义损失函数并使得损失函数最小化,以确定分类函数中的参数。
二、感知机的损失函数
损失函数的一个自然选择是 错误分类点的个数,只要使得误分类点的个数为零,就可以得到满足我们要求的一个分离超平面了,即:
0-1 loss简单直观,可惜它不是一个凸函数,不容易优化。感知机选择的是另一个损失函数:误分类点到分离超平面的距离之和 。 我们知道空间中任一点到超平面的距离公式为:
对于误分类的数据来说,总有:
我们可以成比例地缩放参数而不改变分离超平面的位置,为方便计算我们可以将法向量的模置为 1 ,因而不考虑上述距离公式的分母,就得到感知机学习的损失函数为:
其中 M 为误分类点的集合。
有了可微的损失函数,那么随机梯度下降就可以逐步地调整分离超平面的位置,使之每一次梯度下降之后 都朝着被选择的误分类点的方向移动,值得说明的是,这样的一次移动并不能保证一定使得误分类点的个数减少,有可能会增加,但是 Novikoff 定理保证对于线性可分的训练数据集,误分类的次数 k 是有上限的,也就是经过有限次的搜索可以找到将训练数据集完全正确分开的分离超平面,即感知机算法的随机梯度下降是收敛的,当然对于线性不可分的数据集,感知机算法不会收敛,迭代结果会一直发生震荡。
同样的我们要知道,由于初始参数值选择的不同以及随机梯度下降算法迭代过程中误分类点的选择不同,使得 感知机算法最后得到的分离超平面多种多样。为了得到唯一的分离超平面,就需要对其增加更多的约束条件,这也就是之后介绍的 线性SVM 的想法。
三、感知机实战:sklearn.linear_model.Perceptron
官网:sklearn.linear_model.Perceptron
四、Linear SVM
如我们刚才所说,感知机算法的结果具有不确定性,线性可分的数据集可能有多个满足要求的分离超平面,如下图所示:
这些分离超平面并不是都一样好的,实际上,距离正负两类实例点越远的越好。
所以 SVM 选择的是最近点的距离,分离超平面距离最近点的距离越远,空白越多。特别地,给这些距离目标分离超平面最近的点起了个名字,叫作支持向量(support vector),支持向量距离分离超平面的距离称为间隔(margin),这种间隔最远的思想称为最大间隔(Max-margin)。