感知机为线性分类模型,属于判别模型。是神经网络和支持向量机的基础。
感知机学习旨在求出将训练数据进行线性化分的分离超平面。
感知机从输入到输出的模型如下:
f(x)=sign(w*x+b)
其中,w叫作权值向量,b叫作偏量,sign是符号函数。
sign(x)=+1 x>=0
sign(x)=-1 x<0
wx+b对应特征空间中的一个分离超平面S,其中w是S的法向量,b是S的截距。S将特征空间划分为两个部分,分别为正负两类。
如果在某个超平面S能够将数据集的正实例点和负实例点完全正确的划分到超平面两侧,则称数据集为线性可分数据集(linearly separable data set)
直线方程Ax+By+C=0,点P坐标为(x0,y0)
d=Ax0+By0+C/根号下(A^2 + B^2)
我们假设超平面h=wx+b,其中w=(w0,w1,…wm),x=(x0,x1,…xm),样本点x‘到超平面的距离如下:
d=wx’+b/||w||
||w||是w的L2范数
假设训练集数据集是线性可分的,感知机的损失函数是误分类点到平面S的总距离,因为误分类点到超平面S的距离为3.3所示,且对于误分类数据来说总有-yi(wxi+b)>0成立,因此不考虑||w||,就得到感知机损失函数:
L(w,b)=-Σyi(wxi+b)
这个损失函数就是感知机学习的经验风险函数。
感知机的策略就是在假设空间中选取使损失函数式最小的模型参数w,b即感知机模型。
感知机学习算法是对上述损失函数进行极小化,求得w和b,但是用普通的基于所有样本的梯度和均值的批量梯度下降法(BGD)是行不通的,原因在于我们的损失函数里面有限定,只有误分类的M集合里面的样本才能参与损失函数的优化。所以只能采用随机梯度下降(SGD),目标函数如下:
L(w,b)=arg min(-Σyi(w*xi+b))
输入:训练数据集T={(x1,y1)…}yi∈{-1,+1}
学习率:e (0,1]
输出:w,b;感知机模型f(X)=sign(wx+b)
1.赋初值w0,b0
2.选取数据点(xi,yi)
3.判断该数据点是否为当前模型的误分类点,即yi(wxi+b)<=0则更新
w=w+eyixi
b=b+eyi
4.转到2,直到训练集中没有误分类点
由于原始的梯度更新公式,经过n次变化,假设初始w,b都为0,其中a=ny
w=Σxi∈M eyixi=Σaiyixi
b=Σxi∈M eyi=Σaiyi
输入:训练数据集T
学习率e
输出:a,b;感知机模型f(x)=sign(Σajyjxjx+b)
1.赋初值a0,b0
2.选取数据点
3.判断该数据点是否为当前模型的误分类点,即判断若yi(Σajyjxjx+b)<=0则更新
ai=ai+e
b=b+eyi
4.转到2,直到训练集中没有误分类点
在向量维数(特征数)过高时,计算内积非常耗时,应选择对偶形式算法加速。
在向量个数(样本数)过多时,每次计算累计和就没有必要,应选择原始算法
遗留问题Ⅰ:损失函数为何是非负的?没有误分类点的损失函数值为何是0?
遗留问题Ⅱ:点到超平面的距离是如何得到的?
遗留问题Ⅲ:对偶形式的意义:将训练集中实例间的内积计算出来,存在Gram矩阵中,可以大大加快训练速度。