感知机(Perceptron)是二分类问题的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取+1和-1二值。
感知机于输入空间(特征空间)中将实例划分为正负两类的分离超平面,属于判别模型。感知机于1957年由Rosenblatt提出,是神经网络和支持向量机的基础。
在这里,不用《统计学习方法》书中的变量表示方式,我们用表示数据集,一共个样本,个维度,用表示数据集中的第个样本,用表示标记(类别)向量,代表第个样本的标记。
我们将要学习的目标函数是:
称为感知机。其中,和为感知机模型参数,为权值向量,叫作偏置(bias),表示和的内积。是符号函数,即:
所以,在这里,根据上式可知时为分类的边界(超平面)。
对于数据集,如果能够将数据集的正负样例完全正确地划分到超平面的两侧,即对于所有的实例有,对于所有的实例有,则称这个数据集为线性可分的数据集,否则数据集线性不可分。
假设数据集是线性可分的,感知机的学习目标是求得一个能够将训练集正负样例能够完全分开的超平面。找出这样的超平面,其实就是要确定感知机的模型参数和。所以我们首先要定义损失函数,再将其最小化。
感知机的损失函数是针对误分类的点,最小化误分类的点到超平面的距离,不断进行调整。
对于输入空间的任一一个样例,所要计算的距离就是这个点到的距离。
根据点到直线的距离公式:
代入其中,可以得到:
进一步,进行简化约等,可以得到如下式子:
其中,是的范数。
对于误分类的样例来说,成立。所以误分类的点到超平面的距离为:
假如对于所有的误分类点集合为,那么所有的误分类点到超平面的总距离为:
显然,损失函数是非负的,如果没有误分类的点,损失函数的值为0。并且,误分类点越少,误分类点离超平面越近,损失函数越小。所以对于完全线性可分的数据集,当损失函数为0时,即达到了完全正确分类。
这个损失函数可以用梯度下降法来解,对于和的梯度用偏导可以直接求出来,具体过程不再赘述。
给定一个线性可分的数据集
感知机学习算法是误分类驱动的,具体采用随机梯度下降法。首先,任意选取一个超平面w0,b0,然后用梯度下降法不断地极小化损失函数。极小化过程中不是一次使M中所有误分类点的梯度下降,而是一次随机选取一个误分类点使其梯度下降。损失函数L(w,b)的梯度为
综上所述,得到如下算法(感知机学习算法的原始形式)
输入:训练集T={(x1,y1),(x2,y2),...(xN,yN)},其中xi∈X=Rn,yi∈Y={+1,−1},i=1,2,3,...N ;学习率η(0<η≤1);
输出:w,b;感知机模型f(x)=sign(w⋅x+b)
(1)选取初值w0,b0
(2)在训练集中选取数据(xi,yi)
(3)如果yi(w⋅xi+b)≤0
例子:如图所示,正实例点是x1=(3,3)T,x2=(4,3)T,负实例点是x3=(1,1)T,使用感知机算法求解感知机模型f(x)=sign(w⋅x+b)