您的位置:首页 > 其它

[机器学习算法详解]感知机模型——以马的患病分类问题为例

2015-04-03 09:26 351 查看

[机器学习算法详解]感知机模型——以马的患病分类问题为例

问题背景

感知机(perceptron)模型是一种非常简单的分类模型,其思想主要是想通过一个分离超平面对数据进行分类,分离超平面实际是一种判别模型,在感知机、逻辑斯蒂回归和支持向量机等中都使用。任何维度中的超平面是x∣wTx+b=0\\{x \mid w^Tx+b=0\\},在平面一侧使得wTx+b>0w^Tx+b>0的向量为正例,另一侧使得其小于0则为反例,这样超平面就将数据分成了两个类别,达到了分类的目的。其中x是一个样本的特征空间,如马的患病问题中一匹马的特征属性集合,将x带入超平面计算就可以将马分成患病和不患病两类

我们希望获得一个这样的分离超平面,但是如何建立这个超平面?这个超平面是否唯一?这两个问题是感知机算法的重点,接下来通过详细的推导步骤和证明进行分析。

算法详解

1. 建立超平面

建立超平面的过程实际上就是求超平面参数的过程,感知机中超平面的参数有两个,w是超平面的法线方向,b是超平面的位置信息,通过这两个向量就能唯一确定一个超平面。感知机模型通过经验风险最小化策略对超平面进行建立,其主要思想就是希望在最优分离超平面下,错误分类的样本点的距离之和最小,接下来我们用函数的形式来构造。

首先一个样本点 x(i)x^{(i)} 到超平面 ll 的距离为dist(x(i),l)=|wTx(i)+b|||w||dist(x^{(i)}, l) = \frac{|w^Tx^{(i)}+b|}{||w||}对于正例的样本点,其分子大于0,类别标签y也大于0,对于反例的样本点,其分子小于0,类别标签y也小于0,因此正确分类点的距离可以改写成去掉绝对值加入标签y的项dist(x(i),l)=y(i)(wTx(i)+b)||w||dist(x^{(i)}, l) = \frac{y^{(i)}(w^Tx^{(i)}+b)}{||w||}同样对于错误的分类点,其距离取相反数即可,假设错误分类样本点的集合为M,那么很显然,错误分类的样本点的距离之和可以表示成这样的函数L(w,b)=∑x(i)∈M−y(i)(wTx(i)+b)||w||L(w,b)=\sum_{x^{(i)} \in M} -\frac{y^{(i)}(w^Tx^{(i)}+b)}{||w||}对目标函数L,w和b是待求的自变量,希望求出最优解使得L最小化,提出分母这一常数项并且去除符号,问题转化为maxw,b∑x(i)∈My(i)(wTx(i)+b)\max_{w,b}\sum_{x^{(i)} \in M}y^{(i)}(w^Tx^{(i)}+b)求解这样一个最大化问题的思路很明确,求出其极大值,而极大值就是对自变量偏导数为0的点,而是否只有一个极大值在接下来会介绍,这里我们希望通过偏导等于0求出极大值点,发现不能通过直接求偏导数等于0而求出自变量的值,因此改用另外一种很常用的求极值的思路就是梯度下降法(求极小值是梯度下降,求极大值是梯度上升)。

梯度下降法的思想是随机选择假设空间中的一点(即令w和b为一个随机初始值),然后沿着梯度下降的方向按照一定的步长搜索假设空间,这样不断迭代能找到最优值。其实对梯度下降法的可以这样理解,在该点选择一个平面来拟合当前的曲面,这个平面的方向就是当前自变量的梯度的方向(梯度在工数中的理解就是函数下降最快的方向),在平面上移动一定的距离即步长来获得下一轮的解。如果步长参数调整得很好梯度下降法可快速收敛,如果整个问题只有一个极值即最值,那么梯度下降法最终可以收敛到这个最值,但是如果问题有不止一个极值,那么就会存在陷入局部最优的情况。因此梯度下降法需要依据具体情况适用和调整。

这里使用梯度下降法,求出w的梯度为∇w=∑ix(i)y(i)\nabla_w=\sum_i x^{(i)}y^{(i)},b的梯度为∇w=∑iy(i)\nabla_w=\sum_i y^{(i)},因此w和b的大小按照梯度进行迭代一定步骤或者直至完全分离测试样例(实际上就是使得损失函数L为0达到最小值),这里使用的是随机梯度下降法,每次不是使用所有的误分类样例,而是随机选取其中的一个进行求梯度的近似求解,这样可以充分利用数据。

普通的梯度下降法(即批处理梯度下降法)和随机梯度下降法有这样一些区别。

+ 批处理梯度下降法使用所有满足条件的数据进行梯度求解,是标准的梯度方向。随机梯度下降法使用随机一个满足条件的数据,求解的是梯度方向的近似。

+ 批处理法需要更多的计算代价,因为其求梯度使用了所有满足条件的数据。随机法相比有更小的步长,因此可能需要更多次的迭代步骤。

+ 随机法使用梯度的近似求解,在有多个极值的情况下,随机法可能更好地避免陷入局部最优的情况。

算法步骤

初始化参数为w0w_0和b0b_0。

对样本集进行分类并获得误分类样本集M。

依据误分类集M计算w和b的梯度方向对w和b进行赋值。w←w+αx(i)y(i),b←b+αy(i)w \leftarrow w + \alpha x^{(i)}y^{(i)}, b \leftarrow b + \alpha y^{(i)}

迭代2~3步直至固定迭代次数或样本集被完全分类。

2. 收敛性分析

根据kinoff定理得知。如果样本集线性可分,那么必然存在分离超平面,并且这些样本到平面的距离存在一个最小值。在迭代过程中,迭代次数k也存在一个上限,换句话说,迭代过程是收敛的。kinoff定理将在《感知机模型收敛性证明》这篇博客中进行详细证明。

3. 问题讨论

李航的《统计学习方法》中有这样的描述“感知机模型存在多个最优解,并依赖于参数初始值和误分类样本点的选择顺序”。优化问题为使当前误分类点的距离之和最小化,这一目标函数是距离之和最小化minw,b−∑x(i)∈My(i)(wTx(i)+b)\min_{w,b}-\sum_{x^{(i)} \in M}y^{(i)}(w^Tx^{(i)}+b),限制条件是这些点都是误分类点y(i)(wTx(i)+b)<0y^{(i)}(w^Tx^{(i)}+b)<0。对损失函数L进行推导,令w^=[wT,b]T\hat w=[w^T,b]^T,函数可以推导成L=w^TXTYL=\hat w^TX^TY,对这个函数进行凸函数分析,由于L(au+bv)=(au+bv)TXTY=auTXTY+bvTXTY=aL(u)+bL(v)L(au+bv)=(au+bv)^TX^TY=au^TX^TY+bv^TX^TY=aL(u)+bL(v)因为这个函数既是凸的,也是凹的,他是一个放射函数,因此这个函数是没有最优解的,可以理解为二维中直线没有最优解,三维中平面没有最优解,但是随着迭代过程,这个函数在不断的变化,因为误分类点的个数发生了变化,二维中可以理解为这条直线在发生变化,其斜率在下降,因为x(i)x^{(i)}的个数在减小,斜率必然减小。当减到某一程度时,误分类点的个数为0,此时直线斜率为0,直线在参数空间中的每一个点都是这个函数极值点,因此,最终的解的个数是无穷的。这样“感知机模型存在多个最优解”这句话解决了。而另一句话可以这样理解,参数初始值的选择不同,参数空间中直线是不同的,根据不同的错误分类点的选取,迭代过程也必然是不一样的,那么最终的直线斜率为0时也不是确定的,必然导致参数空间的解是不确定的,也就是分离超平面不一样。如果使用批处理梯度下降法,两次过程一旦参数初始值选取一样,那么最终的参数会是一样的,也就是分离超平面会一样。

我们再从另一个角度来理解,在二维空间中,极端情况样本点有2个,那么分离超平面(这里是直线)会是两点连线端的垂线中的任意一条,因为任意一条直线对应的损失函数都是0,但是这样的直线有无数条,而具体是哪一条则依赖初始值的选择。因此感知机模型可以收敛但存在多个最优解,并依赖于参数初始值和误分类样本点的选择顺序

实验

实验使用的测试集是UCI中的马的患病问题,使用299个训练样例,每个样例包括21个特征属性,分为0、1两类,有30%左右的缺损数据。67个测试样例。计算的平均错误率为32.8%。python代码在这里

标签 : 机器学习
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐