感知机(Perceptron)是二类分类的线性分类模型,是neural networks和SVM的基础。一个感知机的输入是实例的特征向量,输出为实例的类别,由于是二分类任务,所以用 +1 和 -1 进行表示即可。感知机对应分类的分离超平面,属于判别模型。说到这里,我简单介绍一下判别模型和生成模型。
我们说的生成方法和判别方法都属于一种监督学习的方法,可以用一种决策函数 Y=f(X)或者一种条件概率分布P(Y|X)来进行表示。生成方法是由数据学习联合概率分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型,就是生成模型(Generative Model):P(Y|X)=P(X,Y)/P(X),这样的方法之所以称为生成方法,是因为该模型表示了输入X和输出Y的生成关系,其中,典型的生成模型有:朴素贝叶斯法和隐马尔可夫模型。
判别方法由数据直接学习决策函数 Y=f(X)或者条件概率分布P(Y|X)作为预测的模型,也就是判别模型(Discriminative Model)。判别方法关心的是给定固定的输入X,应该输出什么样的Y。其中,典型的判别模型有:K近邻法,感知机,决策树,Logistic回归模型,最大熵模型,支持向量机,Boost方法和条件随机场等。生成模型和判别模型都将在今后的博客中加以介绍。
感知机学习的目的就是求出对数据线性划分的分离超平面(hyperplane),常常采用梯度下降法对损失函数进行极小化,从而得到感知机模型。感知机学习算法分为原始形式和对偶形式。
定义
假设输入空间(特征向量)X⊆Rn,输出空间为Y={-1, +1}。输入x∈X表示实例的特征向量,对应于输入空间的点;输出y∈Y表示实例的类别。由输入空间到输出空间的函数为:
称为感知机。其中,参数w叫做权值向量weight,b称为偏置bias。w·x表示w和x的点积
sign为符号函数:
在二分类问题中,输出f(x)的值(+1或-1)就是用于分类x为正样本(+1)还是负样本(-1)。感知机是一种简单的线性分类模型。我们在使用感知机模型的时候,要做的就是找一个最佳的满足w⋅x+b=0的w和b值,也就是分离超平面(separating hyperplane)。下面给出一个线性可分的感知机模型
学习策略
感知机在学习的时候,核心是极小化损失函数,如果训练集是可分的,那么感知机的学习目的就是求得一个能将训练集正负实例点完全分开的分离超平面。那么同大多数机器学习算法一样,要寻找这样的分类超平面,我们采用loss function(损失函数)来确定感知机模型的参数w和b,并将损失函数极小化。对于损失函数的选择,我们采用的是误分类点到超平面的距离,在这里采用的是几何间距,也就是欧几里得距离。
其中||w||是L2范数。
对于误分类点(xi,yi)来说:
误分类点到超平面的距离为:
基于上式,所有点到超平面的总距离为:
那么我们就可以得到感知机的损失函数:
其中M为误分类的集合。我们称该损失函数L(w,b)就是感知机学习的经验风险函数。
从式子可以看出,损失函数L(w,b)是非负的。如果没有误分类点,则损失函数的值为0,而且误分类点越少,误分类点距离超平面就越近,损失函数值就越小。更一般的,损失函数L(w,b)是连续可导函数。
算法学习
对感知机算法进行学习,一般采用随机梯度下降法(Stochastic Gradient Descent)。下面给出随机梯度下降法的可视化图。
由于梯度下降法容易陷入局部最优情况,所以一般采用随机梯度下降进行优化。
算法
对于感知机算法的原始形式:
给出算法流程如下:
(1)对于所有的错分类点i∈M,都有−yi(w⋅xi+b)>0,因此我们可以定义如下的损失函数作为优化准则:
(2)求梯度,也就是求导运算
(3)更新参数:
(4)整个算法的流程如下:
2)在训练数据集中任意选取点(xi,yi);
3)如果−yi(w⋅xi+b)>0则按照第(3)步更新w和b;
4)重复步骤2)直到没有被误分的点。
对于感知机算法的对偶形式:
(1)对偶形式的基本想法是将参数w和b分别表示为实例xi 和标记 yi 的线性组合的形式,然后通过求解其系数而求得w和b
(2)首先初始化w和b,当所有点不发生误判时,则有:
(3)其中αi=ni*η中ni表示对第i个样本的学习次数
(4)因此可以得到感知机算法的对偶形式:
(5)对偶形式的算法流程如下:
1)初始化α=0,b=0;
2)任意选取(xi,yi);3)如果yi(∑αjyjxj⋅xi+b)≤0,就是发生了误判,此时对αi,b进行更新:
4)复步骤2)直到没有被误分的点。
我把两种算法的实现挂在了GitHub主页上,欢迎批评指正。
https://github.com/HCShi/perception-machine