机器学习总结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个样本,
第i个样本的特征是:
第i个样本的标签(label)是:
!!!!一定要分清楚X 和x ,一定要分清楚上标和下标(上标表示第几个样本,下标表示这个样本的第几个特征),一定要区分清楚样本和特征的概念,一定要分清楚N和n所表示的含义的不同(N表示样本数量,n表示特征的数量)!!!!
!!!!一定要分清楚X 和x ,一定要分清楚上标和下标(上标表示第几个样本,下标表示这个样本的第几个特征),一定要区分清楚样本和特征的概念,一定要分清楚N和n所表示的含义的不同(N表示样本数量,n表示特征的数量)!!!!
!!!!一定要分清楚X 和x ,一定要分清楚上标和下标(上标表示第几个样本,下标表示这个样本的第几个特征),一定要区分清楚样本和特征的概念,一定要分清楚N和n所表示的含义的不同(N表示样本数量,n表示特征的数量)!!!!
如果你对!!!!所说的内容有所疑惑的话,请暂停你前进的步伐,先百度把这几个问题弄清楚,这个真的很重要。
(3)
PLA的输出模型(也叫作目标函数):
注:W是一个n维的行向量,通常叫做权值向量,W=
X是一个n维的列向量,是样本特征,X=
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=
那么原来的WX+b就可以直接写成WX了。为了方便我们的描述,在本文如果没有特别说明,都会沿用这种表达方式。
我们在(1)说了,PLA的任务是找到那条能把训练样本正确分类的直线(现在可以直观的看出来,它不是一条直线那么简单了吧。在(1)中,只是为了方便描述,我们才把X的维度设定为2。当X的维度>2时,WX所表示的就是一个平面了,我们通常称这个平面为分隔(分离)超平面)。
我觉得有必要先说一下,我们得到一个模型,这个模型怎么用?
假设现在我们通过PLA算法已经求得了一个模型。现在需要去预测一个不知道标签的样本的标签是多少?
我们把这个样本的特征X带入到h(X)中,h(X)就会等于+1或者-1(这个模型判断的这个样本最有可能属于哪个类别),我们就预测出来这个样本的标签了。
2.正式的描述PLA算法
假设训练数据集是线性可分的(可以通过一条直线或者一个平面将训练集完全分类正确)。
PLA算法流程:
输入:训练数据集
输出:W
(1)选取初值
(2)从训练集中选取样本
(3)更新。如果
(4)转至(2),直至训练集中的所有样本被完全正确分类。
注:
1.在(1)中,我们总是喜欢令
2.在(3)中,如果
如果
所以这里就是说:如果
3.现在重点解释下
我们把两种发生错误的情景用图片表示出来:
第一个图是:正确的标签是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向量之间夹角是钝角。同样可以修复第二种错误。
把这两种情况进行汇总,就可以写成
4.上面给出了更新式在几何上的解释。实际上,PLA有着自己的损失函数,对损失函数最小化,通过求梯度的方式同样可以得出这个更新式。
首先说一下损失函数是什么?损失函数,loss function,cost function都是一个东西。用李航的《统计学习方法》中的描述:度量我们的模型预测错误的程度。
这里列出几种常见的损失函数。
我不喜欢用这种公式化的东西去描述算法,这种公式化的描述往往是我们觉得混乱的根源。
我们直观的解释一下:如果有一个样本发生了预测错误,我们需要定义发生这个错误的代价是多少。我们可以有很多定义的方式,最简单的就是统一而论只要发生错误了我就定义这个代价是1。除了这一种定义外,还有其他的定义方法,例如 我们可以更细化的定义,这个错误是一个大错误还是一个小错误,大错误的代价就大,小错误的代价就小。有很多类似这种的定义方式,然后就产生了不同的算法。
PLA是如何定义的呢?
PLA就是根据距离把错误细分成了大错误和小错误。这个点分类错误的程度,也就是这个错误分类的点到这个平面的距离去定义代价,距离越大,代价越大。
训练集上的全部代价为:
PLA在这里并不是严格按照这个定义进行的。它在这里直接把
通过最小化L(W)可以得到我们想要模型,这个模型的
现在说一下最小化L(W)该怎么做?
这里采用梯度下降的方法去取得局部最小值。沿着梯度的方向下降,下降的最快。梯度如下:
在我们的算法中,每次只选择一个误分类点
现在我们可以很清楚的知道每次为什么要这么更新了。1.几何上的直观解释 2.通过每次对W进行更新,最终达到的效果是使得L(W)最小化,也就是
3.一些更深层次的说明
(1)我们在上面的解释PLA算法流程的时候只解释了PLA对Ein 要接近0作了保证。然而通过前一讲 学习理论可以知道,我们还需要保证Ein要和Eout 很接近,关于Eout 这个问题,PLA到底是怎么保证Ein要和Eout 很接近的呢?
事实上,我们可以证明PLA的vc维是d+1;d是X的特征的个数,也就是我们这里所说的n。这是上一讲的关于VC维理论的说明:
我们可以看到当该算法的VC维(
证明:这个证明分成了两个部分,首先证明
(这里的有些符号(X和下标)表示的意思和前面我们说的不一样,请注意下!!!)
(1)dvc≥d+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维的定义
(2)dvc≤d+1 ,这个时候就需要证明对于任意d+2个样本,PLA都不可能shatter。
X是d+2个样本的组合,我们会发现X矩阵是d+2行d+1列的矩阵。(矩阵行比列多的时候)我们根据线性代数的知识就可以得到:任意某一行都能被其他d+1行的线性组合表示出来。
现在假设
综上所述,PLA的vc维
(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算法的假设空间是什么?
我们在之前说过关于假设空间的定义:一个包含这个算法所能产生的所有可能的模型的集合。这里就是
(4)最后一点
PLA的输出模型(也叫作目标函数):
1.我们一直说的可以把它理解成分隔超平面。
2.我在这里想强调第二点,我们可以把h(X)理解成一种加权和。是什么的加权和?是X的各个特征的加权和。直观的理解:根据特征的重要程度赋予不同的权重w,然后用每个特征的加权和决定最后的输出结果。这种直观的理解我觉得很重要,以后会经常遇到这种线性关系的情形。下图虽然符号不是太对应,不过它所表达的思想就是我们在这里说的加权和思想。
- 机器学习总结2_感知机算法(PLA)
- PLA-感知机学习算法
- 机器学习 - 感知机(PLA, Perceptron Learning Algorithm)
- [机器学习][1]--PLA算法
- PLA算法总结——Percetron Learning Algorithm(机器学习基石2)
- 机器学习:感知机算法
- 机器学习算法:感知机
- 台大学习第二讲PLA(感知学习算法)
- 机器学习基石作业一PLA算法
- 什么是感知器学习算法(Perceptron Learning Algorithm/PLA)?
- 机器学习算法笔记之2:感知机
- 机器学习算法——感知机
- 机器学习——感知机总结
- 分类算法(3) ---- 感知机(PLA)
- 感知机算法原理(PLA原理)及 Python 实现
- 感知器 机器学习算法
- 感知机PLA(perceptron)
- 机器学习笔记——感知机算法的几点总结
- 136.LeetCode Single Number(medium)[数组 单数]
- Series——series_custom&reindex&sort_index
- 共同学习Java源代码--常用工具类--AbstractStringBuilder(三)
- 20160421 每天半小时学英语
- Android面试基础知识总结
- 机器学习总结2_感知机算法(PLA)
- PostgreSQL数据库pg_dump命令行不输入密码的方法
- poj1159——Palindrome(组成回文串的最少字符数,dp)
- js基本语法--查找(二分查找)
- s3c2440x系统时钟设置及定时器的设置与应用
- hdoj-1097-A hard puzzle
- NSURLSession如何上传图片的同时带有参数
- 线段树
- 北国的春