机器学习总结2_感知机算法(PLA)

来源:互联网 发布:一橙网络 编辑:程序博客网 时间:2024/05/16 19:20

1.正式开始之前的描述

(1)

PLA:Perceptron Learning Algorithm。
在正式开始之前,我想先说一下,PLA到底是干嘛的。大部分机器学习的书以及视频都是以感知机算法作为开头的。既然放在最前面,它应该就是一个很简单的机器学习算法。事实上,它确实很简单。
如下图所示: 红色和蓝色的点分别表示训练集中的正样本和负样本,PLA的任务就是寻找下面那条能将训练集完全分开的蓝色直线。(一般简单的认为,这个样本的类别是-1,那它就是负样本;反之,它就是正样本。正负样本共同构成训练集。)
注:图片是从这篇博客盗的,(:|。

http://blog.sina.com.cn/s/blog_59fabe030101ji4r.html
这里写图片描述
注意:这里只是为了方便理解,我们才用二维坐标系下的点表示样本。事实上,样本的特征的维度往往要比2大的多,想象一下一个6维的点,我们很难去用图形化的方式把它表示出来。

(2)

说了PLA是干什么的之后,我把正式开始PLA之前需要说清楚的一些概念先写出来。

我们的训练集里面有N个样本,trainingSet={(X1,Y1),(X2,Y2),...,(XN,YN)}
(Xi,Yi)表示第i个样本,这个样本是由特征和标签(label)构成。
第i个样本的特征是:Xi=[xi1,xi2,...,xin],Xi是一个n维的向量,我们在这里假设样本的特征是n维的。
第i个样本的标签(label)是:Yi{+1,1}Yi是+1或者-1。

!!!!一定要分清楚Xx,一定要分清楚上标和下标(上标表示第几个样本,下标表示这个样本的第几个特征),一定要区分清楚样本和特征的概念,一定要分清楚N和n所表示的含义的不同(N表示样本数量,n表示特征的数量)!!!!

!!!!一定要分清楚Xx,一定要分清楚上标和下标(上标表示第几个样本,下标表示这个样本的第几个特征),一定要区分清楚样本和特征的概念,一定要分清楚N和n所表示的含义的不同(N表示样本数量,n表示特征的数量)!!!!

!!!!一定要分清楚Xx,一定要分清楚上标和下标(上标表示第几个样本,下标表示这个样本的第几个特征),一定要区分清楚样本和特征的概念,一定要分清楚N和n所表示的含义的不同(N表示样本数量,n表示特征的数量)!!!!

如果你对!!!!所说的内容有所疑惑的话,请暂停你前进的步伐,先百度把这几个问题弄清楚,这个真的很重要。

(3)

PLA的输出模型(也叫作目标函数):h(X)=sign(WX+b)
注:W是一个n维的行向量,通常叫做权值向量,W=[w1,w2,....wn]
X是一个n维的列向量,是样本特征,X=[x1,x2,...,xn]T
sign函数:当k>0时,sign(k)=+1;当k<0时,sign(k)=-1。
每次说到输出模型,我总会想多叨唠几句,以确保看者能理解我想表达的意思。在PLA中输出模型是h(X)函数,我们可以发现:只要我们知道了参数W和b,那么h(X)也就可以确定了。所以可以说PLA算法真正的输出是W和b。能为了让表述更系统化,我们通常都会说输出模型是h(X)函数。

W和X是两个向量,我们做如下改写:
W=[b,w1,w2,....wn];X=[1,x1,x2,...,xn]T
那么原来的WX+b就可以直接写成WX了。为了方便我们的描述,在本文如果没有特别说明,都会沿用这种表达方式。

我们在(1)说了,PLA的任务是找到那条能把训练样本正确分类的直线(现在可以直观的看出来,它不是一条直线那么简单了吧。在(1)中,只是为了方便描述,我们才把X的维度设定为2。当X的维度>2时,WX所表示的就是一个平面了,我们通常称这个平面为分隔(分离)超平面)。

我觉得有必要先说一下,我们得到一个模型,这个模型怎么用?
假设现在我们通过PLA算法已经求得了一个模型。现在需要去预测一个不知道标签的样本的标签是多少?
我们把这个样本的特征X带入到h(X)中,h(X)就会等于+1或者-1(这个模型判断的这个样本最有可能属于哪个类别),我们就预测出来这个样本的标签了。

2.正式的描述PLA算法

假设训练数据集是线性可分的(可以通过一条直线或者一个平面将训练集完全分类正确)。
PLA算法流程:
输入:训练数据集{(X1,Y1),(X2,Y2),...,(XN,YN)}
输出:W
(1)选取初值W0
(2)从训练集中选取样本(Xi,Yi)
(3)更新。如果Yi(WtXi)0, 则Wt+1=Wt+ηYiXi
(4)转至(2),直至训练集中的所有样本被完全正确分类。

注:
1.在(1)中,我们总是喜欢令W0=0。初始值是随便选的,只是通常人们总是喜欢从0开始。
2.在(3)中,如果Yi(WtXi)0,这是什么意思?
如果sign(WtXi)Yi.我们在这个时候就称以这个Wt为参数的模型错误分类了这个样本。
sign(WtXi)Yi的等价的写法是Yi(WtXi)0,这是因为Yi只能是-1或者+1。
所以这里就是说:如果Wt对训练集中的样本(Xi,Yi)错误分类了,那么这个Wt就是不符合我们的要求的,我们需要对Wt进行更新,得到Wt+1
3.现在重点解释下Wt+1=Wt+ηYiXi这个公式的几何意义。
我们把两种发生错误的情景用图片表示出来:
这里写图片描述
第一个图是:正确的标签是Y=+1,但是我们现在的模型h(X)=WX预测出来的结果是-1.(W向量和X向量的夹角是钝角,WX<0)。
第二个图是:正确的标签是Y=-1,但是我们现在的模型h(X)=WX预测出来的结果是+1.(W向量和X向量的夹角是锐角,WX>0)。
我们现在思考一下如果发生这两种错误了,我们想要怎么去更正W才能得到正确的标签?
第一个图,如果把W向X方向进行旋转,使得W向量和X向量之间的夹角是锐角了。那么这种错误就得到了修正。
第二个图W向远离X的方向进行旋转,使得W向量和X向量之间夹角是钝角。同样可以修复第二种错误。
把这两种情况进行汇总,就可以写成Wt+1=Wt+ηYiXi。(Wt是修正前的W,Wt+1是修正后的W,η称作学习率,对应到图中就是每次修正的时候旋转了多少,η越大,修正的时候旋转的角度越大;η越小,修正的时候旋转的角度越小)。

4.上面给出了更新式在几何上的解释。实际上,PLA有着自己的损失函数,对损失函数最小化,通过求梯度的方式同样可以得出这个更新式。


首先说一下损失函数是什么?损失函数,loss function,cost function都是一个东西。用李航的《统计学习方法》中的描述:度量我们的模型预测错误的程度。
这里写图片描述
这里列出几种常见的损失函数。


我不喜欢用这种公式化的东西去描述算法,这种公式化的描述往往是我们觉得混乱的根源。
我们直观的解释一下:如果有一个样本发生了预测错误,我们需要定义发生这个错误的代价是多少。我们可以有很多定义的方式,最简单的就是统一而论只要发生错误了我就定义这个代价是1。除了这一种定义外,还有其他的定义方法,例如 我们可以更细化的定义,这个错误是一个大错误还是一个小错误,大错误的代价就大,小错误的代价就小。有很多类似这种的定义方式,然后就产生了不同的算法。
PLA是如何定义的呢?
PLA就是根据距离把错误细分成了大错误和小错误。这个点分类错误的程度,也就是这个错误分类的点到这个平面的距离去定义代价,距离越大,代价越大。
训练集上的全部代价为:L(w)=1WXiYi(WXi)。(训练集中所有错误分类的样本点到超平面的距离累加和)
PLA在这里并不是严格按照这个定义进行的。它在这里直接把1W这一项省掉了,剩下的并不是严格的距离定义。这么做虽然不是特别严谨,不过也可以一定程度去反应距离大小。(我认为这也是PLA简单的体现,像是在SVM里面,就不是直接省略掉1W,而是将其考虑在内。)
通过最小化L(W)可以得到我们想要模型,这个模型的Ein就会趋近0,在训练集内的误差很小。
现在说一下最小化L(W)该怎么做?
这里采用梯度下降的方法去取得局部最小值。沿着梯度的方向下降,下降的最快。梯度如下:wL(X)=XiYiXi
在我们的算法中,每次只选择一个误分类点(Xi,Yi),所以更新规则为:
Wt+1=Wt+ηYiXi。(沿梯度方向更新)

现在我们可以很清楚的知道每次为什么要这么更新了。1.几何上的直观解释 2.通过每次对W进行更新,最终达到的效果是使得L(W)最小化,也就是Ein很小。

3.一些更深层次的说明

(1)我们在上面的解释PLA算法流程的时候只解释了PLA对Ein要接近0作了保证。然而通过前一讲 学习理论可以知道,我们还需要保证EinEout很接近,关于Eout这个问题,PLA到底是怎么保证EinEout很接近的呢?

事实上,我们可以证明PLA的vc维是d+1;d是X的特征的个数,也就是我们这里所说的n。这是上一讲的关于VC维理论的说明:
这里写图片描述
我们可以看到当该算法的VC维(dvc)不是很大的时候,EinEout的差是有上界的,所以只要我们证明了PLA的vc维是d+1,我们就可以在这很响亮的说PLA保证了EinEout很接近。
证明:这个证明分成了两个部分,首先证明dvcd+1,然后再证明dvcd+1。(这个证明用到了线性代数的秩、线性组合、方程组等的一些知识)
(这里的有些符号(X和下标)表示的意思和前面我们说的不一样,请注意下!!!)

(1)dvcd+1,只要找出来一组d+1个样本可以被PLA shatter,就行了

关于shatter的定义:见
http://www.cnblogs.com/wuyuegb2312/archive/2012/12/03/2799893.html

这里写图片描述
这里写图片描述
注:一行代表一个样本。
我们现在给出了一组固定的X包含d+1个样本,X是可逆的。所以根据线性代数里面的方程组的知识 WX=Y对于任意Y,都可以求出来与之相对应的W。也就是说PLA可以shatter 这d+1个样本,所以根据vc维的定义dvcd+1得证。

(2)dvcd+1,这个时候就需要证明对于任意d+2个样本,PLA都不可能shatter。

这里写图片描述
X是d+2个样本的组合,我们会发现X矩阵是d+2行d+1列的矩阵。(矩阵行比列多的时候)我们根据线性代数的知识就可以得到:任意某一行都能被其他d+1行的线性组合表示出来。这里写图片描述
现在假设Xd+2可以被X1,...,Xd+1的线性组合表示,我们可以发现:只要我知道了X1,...,Xd+1的标签是多少,Xd+2的标签也就被确定了,也就是Xd+2的标签被前d+1个样本决定,就一定是+1或者-1的一个。所以PLA不能shatter 任意d+2个样本。所以dvcd+1得证。
综上所述,PLA的vc维dvc=d+1

(2)还有一个问题需要去说明:有人就会问了,你怎么知道PLA一定可以找到那个超平面的,它会不会有bug,一直循环下去,找不到那个可以将训练样本完全分开的超平面呢?

这种顾虑是多余的,我们是可以证明在有限次迭代之后,就找到了那个将训练样本完全分开的超平面了。我们的算法是收敛的。
有两种证明方法:
1. 李航《统计学习方法》P37
2. 台湾大学公开课《机器学习基石》第2讲

这篇博客里2.3进行了证明:
http://www.cnblogs.com/ymingjingr/p/4271761.html
只说明一点:在证明的过程用到了余弦相似度。计算两个向量的余弦值cosθ,θ。当cosθ趋近1的时候,由cos函数的性质就可以知道θ是趋近0的,两个向量的夹角为0,就可以认为这两个向量重合了(非常相似)。一定程度上可以认为,cosθ越趋近1,这两个向量就越相似。

(3)思考一个问题:PLA算法的假设空间是什么?

我们在之前说过关于假设空间的定义:一个包含这个算法所能产生的所有可能的模型的集合。这里就是H={w1x1+w2x2+...+wnxn+bw1R,w2R..wnRbR}。(所有可能的超平面组成的一个集合)

(4)最后一点

PLA的输出模型(也叫作目标函数):h(X)=sign(WX),我们该怎么理解这个模型呢?
1.我们一直说的可以把它理解成分隔超平面。
2.我在这里想强调第二点,我们可以把h(X)理解成一种加权和。是什么的加权和?是X的各个特征的加权和。直观的理解:根据特征的重要程度赋予不同的权重w,然后用每个特征的加权和决定最后的输出结果。这种直观的理解我觉得很重要,以后会经常遇到这种线性关系的情形。下图虽然符号不是太对应,不过它所表达的思想就是我们在这里说的加权和思想。
这里写图片描述

4 0