感知机(perceptron)是一种二类分类的线性分类模型,也就是说,使用于将数据分成两类的,并且数据要线性可分的情况。线性可分是指存在一个超平面能够将空间分成两部分,每一部分为一类,感知机的目的就在于找这样的一个超平面。
假设输入数据形式为x = (x1,x2....xn),即所谓的特征向量。y代表输入数据的类别,为{+1,-1},感知机的形式为f(x) = sign(w*x+b),当w*x+b>=0时,f(x)=+1,当w*x+b<0时,f(x)=-1.
f(x)就是我们对输入数据的分类,感知机的目的就在于找到合适的w和b,使得f(x)能正确分类。w是和x维数相同的向量(一个是行向量,一个是列向量),w是我们求的超平面的法向量,b是超平面的截距。
定义损失函数:误分类点到超平面的总距离(不定成误分类的点的个数是因为这样损失函数对w,b不是连续可导,不易优化),假设误分类点为0,那么总距离为0.
空间中任意一点到超平面的距离为|w*x+b|/(||w||),我们只要使得分子部分变成0就行。
对于误分类点(xi,yi)来说,如果w*xi+b>=0,本应该为+1,但是误分类的话yi=-1,如果w*xi+b<0,本应该为-1,但是误分类的话yi=+1,这样我们就能得到-yi(w*xi+b)>0,即我们可以使对误分类点的-yi(w*xi+b)求和,使之最小化,当然这里是指变成0.
那么具体是如何求w,b的呢?(下面是感知机算法的原始形式)
(1)首先任意选一个超平面w0,b0(w是向量,里面元素都为0)
(2)然后采用梯度下降法不断的极小化目标函数,在这里具体来说就是每次取一个误分类的点(xi,yi),令w = w+nyixi,b = b+nyi, 可以这么理解,每当有一个误分类点,我们就把平面往这个误分类点的方向移动一些,使得它能够被正确分类,0<n<=1,n被称为学习率
(3)重复步骤2,直至没有误分类点,即损失函数为0.
当数据是线性可分的时候,可以证明感知机学习算法是收敛的,不过证明方面一直看不懂= =。。。