分类系列之感知器学习算法PLA 和 口袋算法Pocket Algorithm
我们有一堆数据,默认他们是线性可分的。
定义f为这个数据分割线的最优解,但是我们不知道他的值。
我们仅有一个函数集H,这个函数一般是无穷大的。我们的目的就是从H中找出一条线g来尽可能的接近f。但是,我刚刚说了,H内的函数一般是无穷多的,我们不可能把H中的函数一 一 比较,得到最好的分割线g吧!!!
不过伟大的科学家就说,我们的目的不就是找出一条线把这些数据都分开吗!!那我随机的初始化一条分割线 g0,让他一 一和数据点进行比较(数据总该是有限个的吧), 如果 某一个数据点划分对了,那这条线就不动,继续比较下一个点。如果错了,那就调整 这条线,让他能把这个点分对。以此下去,直到我们发现所有的点都分隔对了为止。。。
那么问题就来了,我们怎么调整这条分隔线呢???
首先要明确,只有当分类出错误的时候,才对分割线进行调整。
假设我们遇到的数据点(xn,yn)是我们第t次分类错误。那么就有当yn=+1 时,则我们的错误结果为wTxn=wt−→∗xn−→=||w||∗||xn||∗cosΘ<0,即cosΘ<0 则Θ太大,为了能过纠正错误,决定减小Θ,就让w→t+1=w→t+x→
即
紫色的就是更改后的wt+1同理
当yn=−1时,则我们的错误结果为wTxn=wt−→∗xn−→=||w||∗||xn||∗cosΘ>0,即cosΘ>0 则Θ太小,为了能过纠正错误,决定增大Θ,就让w→t+1=w→t−x→
即
紫色的就是更改后的wt+1综上所述,当分割线遇到点(xn,yn)时,如果分割正确,那么wt就不变,如果分割错误,那么就令
注意w是分割线wTx=0的法线,也就是说分割线的方向是与w的方向垂直的。。。
这个想法是挺好的,那么问题是,用这种方法到底行不行得通呢???现在,我们就来验证这个算法的正确性!!!
这种方法到底行不行得通,其实就是说这个算法到底能不能找到正确区分所有点的线。即这个算法到底能不能收敛?(收敛就是能停下来,算法只有找到了满足要求的线才停下来,所以说法不同,但意思是一样的)
证明:
首先有两个前提:
前提1:数据本就是可以线性可分的。(如果数据不是线性可分的话,那不管我们怎么找都找不到那条线)
前提2:我们仅仅是遇到分错的点时,才改变wt,遇到分对的点wt不变。根据前提1,说明最终的线一定存在。
假设wf是我们要的线,则有
当线wTtx=0遇到(xn,yn)发生错误时,则更新wt+1,即
遂有
则
根据前提2,有
又有
则
判断w_t,wf是否相近,只需他们的Θ尽可能为0
我们初始化w0=0,则可以怎么得,在T次误差矫正后,有
所以,最终得到
即cosΘ>=T−−√.Cconstant,即随着T逐渐增大,cosΘ也会逐渐增大,那么Θ会逐渐减小到0,所以wt是越来越接近wf 又cosΘ<=1,所以 wt一定收敛。
这个算法最大的缺点就是假设数据点是线性可分的。问题是,我们并不知道数据到底是不是线性可分的!!如果不是,也就是说最终根本没有上面的wf,即没有一条不犯错误的线,那么以上的推论都是“白搭”!!!
那怎么办???有个想法是,我们能不能把找出一条犯错误最少的线呢????即
其实,从实际意义上,是不能的。这是一个著名的NP hard 问题!!!因为线有无穷多个啊!!!
伟大的科学家又提出一条算法,来解决这个问题——-口袋算法
口袋算法基于贪心的思想。他总是让遇到的最好的线拿在自己的手上。。。
就是我首先手里有一条分割线wt,发现他在数据点(xn,yn)上面犯了错误,那我们就纠正这个分割线得到wt+1,我们然后让wt与wt+1遍历所有的数据,看哪条线犯的错误少。如果wt+1犯的错误少,那么就让wt+1替代wt,否则wt不变。
那怎样让算法停下来呢??——–我们就 自己规定迭代的次数
由于口袋算法得到的线越来越好(PLA就不一定了,PLA是最终结果最好,其他情况就说不准了),所以我们就 自己规定迭代的次数 。
- 最后一个问题,如果数据本就是线性可分,那么我们用 pocket algorithm 和用 PLA,那个更好???
答案是PLA更好。先不说PLA可以找到最好的那条线。单从效率上来说,PLA也更好些。最主要的原因是,pocket algorithm 每次比较的时候,都要遍历所有的数据点,且两个算法都要遍历一遍,才会决定那个算法好,而这还是比较一次,如果我们让他迭代500次的,那就麻烦了!!!但是,所有前提是,数据是线性可分的。如果线性不可分,只能用pocket algorithm,因为PLA根本不会停下来(而且PLA的wt也不是每更改一次效果就会比之前的好)!!
总结一下,这篇博客讲了些什么:
1. 先 讲解了 PLA算法
2. 然后 证明PLA算法在数据是线性可分的情况下的正确性
方法: 余弦定理+公式wt+1=wt+yn∗xn
3. 讨论在线性不可分情况下的 口袋算法pocket algorithm
4. 简单的讨论了 PLA和pocket algorithm的优缺点
5. 那么你能否将这些内容复述一遍 -_-
来自 丁磊_ml博客 网址为 blog.csdn.net/MosBest
分类系列之感知器学习算法PLA 和 口袋算法Pocket Algorithm相关推荐
- 机器学习算法系列(一)- 感知器学习算法(PLA)
阅读本文需要的背景知识点:数学基础知识.一丢丢编程知识 一.引言 前面一节我们了解了机器学习算法系列(〇)- 基础知识,接下来正式开始机器学习算法的学习,首先我们从最简单的一个算法--感知器学习算 ...
- AI实战:从入门到精通系列——用感知器实现情感分类(一)
前言 人工智能的第一次高潮始于上世纪50年代.在算法方面,感知器数学模型被提出用于模拟人的神经元反应过程,并能够使用梯度下降法从训练样本中自动学习,完成分类任务. 感知器 感知器算法在上个世纪50-7 ...
- 【Python-ML】感知器学习算法(perceptron)
1.数学模型 2.权值训练 3.Python代码 感知器收敛的前提是两个类别必须是线性可分的,且学习速率足够小.如果两个类别无法通过一个线性决策边界进行划分,要为模型在训练集上的学习迭代次数设置一 ...
- Tensorflow中的多层感知器学习
Tensorflow中的多层感知器学习 在这篇文章中,我们将了解多层感知器的概念和它在Python中使用TensorFlow库的实现. 多层感知 多层感知也被称为MLP.它是完全连接的密集层,可以将任 ...
- 逻辑斯第回归、softmax分类与多层感知器
本专栏将推出一系列深度学习与图像处理相关的教程文章.注重原理精讲和代码实现.实现框架将重点选择Tensorflow或Pytorch.本讲从逻辑斯第回归入手,然后讲解softmax分类器,最后讲解多层感 ...
- 单层感知器线性分类、多层感知器非线性分类样例 调用matlab神经网络工具箱实现
%给定样本输入向量P,目标输出向量T %net = newp(PR,S,TF,LF) %PR为输入矢量的取值范围的最大值和最小值 S为神经元的个数 TF为网络的传递函数 默认为hardlim LF为网 ...
- 计算智能——感知器模型
主要内容 1.感知器总述 2.感知器模型 3.感知器策略(建立损失函数) 4.感知器算法(梯度下降和随机梯度下降) 4.1梯度下降 4.2随机梯度下降 5.感知器MATLAB简单实现 5.1newp函 ...
- 模式识别系列(一)感知器算法(PLA)
目录 写在前头 1.感知器算法简介 2.Perceptron Learning Algorithm(PLA) 2.1权重向量和特征向量到分类面的距离 2.2PLA的原理和流程 2.3PLA的收敛性证明 ...
- 机器学习系列(一)感知器分类算法
分类算法有两种类型:感知器和适应性线性神经元 神经元的数学表示 w=[w1w2...wm],x=[x1x2...xm]w=\begin{bmatrix} w_1 \\ w_2 \\ ... \\ w_ ...
最新文章
- apply()智用:需要几个参数但只有一个参数数组
- ecplise中插件Jrebel的安装
- sentry 命令_sentry(二)集成sourcemap
- 【BZOJ3512】DZY Loves Math IV(杜教筛)
- 回文质数(洛谷P1217题题解,Java语言描述)
- 在java中对于构造函数_在Java语言中,下面有关于构造函数的描述正确的是()。
- [习题]给初学者的范例,多重字段搜寻引擎 for GridView,兼论 SqlDataSource与SelectParameter的用法...
- 《R与Hadoop大数据分析实战》一2.6 小结
- 自定义console.log字体样式
- c 语言编程怎样弄循环语句,C 语言循环语句
- SpringBoot系列(1):Spring和SpringBoot常用注解总结
- 盘点那些不为大众所知,却暗地里很“牛逼”的软件
- Javaweb安全——Java类加载机制
- Air202学习(4)官方例程(luat版)
- java基础-对15位或18位身份证号码的验证
- 电脑bios进入方法介绍
- 惠普电脑BIOS设置图文详细介绍
- LightSensor传感器
- C++实现聊天程序(QQ类型)
- AIX小型机在DLPAR之间移动磁带机