感知机是什么?
感知机是二分类的线性分类模型(是判别式模型),其输入为实例的特征向量,输出为实例的类别,类别取+1和-1两种。感知机学习旨在求出将训练数据集进行线性划分的分类超平面,为此,导入了基于误分类的损失函数,然后利用梯度下降法对损失函数进行极小化,从而求出感知机模型。感知机模型是神经网络和支持向量机的基础。也是现代流行的深度学习网络模型的基础。
感知机模型
感知机的假设空间是定义在特征空间中的所有线性分类模型,其目的是找到一个超平面将不同类别数据进行分离。
空间中定义一个超平面的充要条件是一个法向量w(表征超平面的方向)和截距b(表征超平面到原点的距离),因此超平面可假设为:
上图是感知机模型的工作图,超平面上方(wx+b>0)为正例,下方(wx+b<0)为负例,为了给正例负例一个具体的映射关系,此处采用sign函数:
那么感知机模型可表示为:
其中w和b为感知机的参数,w是权值向量,b是偏置,感知机的学习目的就是确定最佳的w和b。
学习策略
为了确定感知机模型的参数w和b,需要确定一个学习策略,即定义一个损失函数并将损失函数极小化。感知机采用的损失函数为误分类点到超平面的总距离。
空间中任意一点到超平面的距离为:||W||表示的是L2范数。
无论是正例误分类到负例还是负例误分类为正例,其都满足:
因此,对于误分类点到超平面的距离来说,可以定义为:
那么对于全部误分类点,假设误分类点其集合为M,那么所有误分类点到超平面的总距离为:
那么不考虑系数1 / ||w||,感知机的损失函数(经验风险函数)就是:
因此,感知机的学习策略就是在假设空间中选取使上式最小的模型参数w,b。
学习算法
通俗的讲解上述的学习算法:
当一个实例被误分类,即位于分离超平面的错误一侧,此时调整w,b的值,使分类超平面向该误分类点的一侧移动,以减小该误分类点与超平面间的距离,直至超平面能够将其正确分类。也就是说,正确被分类的点后续不再去参与参数更新。
收敛性思考以及与SVM关系
其实在数据集线性可分的前提下,感知机的算法是能够找到满足线性分割的那个超平面,也就是说,算法是收敛的。但是很多情况下,由于参数初值的选择差异或是误分类点被选择顺序的差别,会导致感知机学习到的最终结果不尽相同,为了得到唯一的超平面,需要对分离超平面增加一些约束条件,因此,诞生出了SVM!
感知机的对偶形式
对于上面的原始形式,假设初值w0=0, b0=0,那么对于误分类点,其参数更新为:
对于某点(xi, yi),假设上述优化算法在该点上共执行了ni次才收敛,那么w 和b关于(xi, yi)的增量分别是 αiyixi 和αiyi,这里αi=niη。这样最后学到的w和b可以分别表示为:
上面式子展开就是:
当学习率取1时,αi=ni 就表示第i个实例由于误分类而重复对参数更新的次数。除去学习率这个超参之外,整个学习目标可以顺势转为学习ni 而不再是w和b.
那么新的学习算法变为:
将上面的原始形式化为对偶形式求解其本质并没有什么不同,但对于对偶形式而言,可以发现,样本特征向量以内积的形式存在于感知机训练算法中,因此,如果事先计算好所有的内积,也就是Gram矩阵,就能极大提高计算效率。
相关问题
-
如果判别n维特征中哪一维最重要,或是对哪些特征敏感一些
例如要看第七维特征对最终结果的影响程度,那么我们就对 x7 求偏导:
发现其偏导数就是X7的系数,那么可以知道,特征7每次以w7的速度来影响着我们的结果。
但是这种方法也不是在任何场景下都可以判别特征的重要度,例如特征5和特征7的的系数相同,但是特征5是一个0 1 二元特征,特征7 是一个0~100的区间值,显然,模型对特征7要更敏感一些,因此我们事先需要对特征进行归一化放缩,或者消除量纲等方法来让特征间变得相对公平。 -
如果一个包含1w条样本的训练集,前100条样本就使得感知机达到了一个很好的分类性能,并且对后面的9899条样本都表现很好,但是紧接着的第9900条样本使得系数发生了较大的更新,使得模型性能突然变弱,这个时候该怎么办?
分为两种解决方法:
1)Voting
需要记下来每一轮的参数 w_i,定义参数的存活时间C_k为首次被更新时为1,之后每预测正确一个样本,存活次数就加一,那么我们的模型变为如下式子,相当于对里面的指示函数进行了投票。
2)Averaging
与投票法的不同在于内部没有指示函数,将函数内部括号打开,可以发现我们在计算过程中只需要记录当前累加的 c 以及当前的 w 即可。
网友评论