2.4 Learning to Answer Yes/No-Non-Separable Data|机器学习基石(林轩田)-学习笔记

文章原创,最近更新:2018-07-16

学习链接:
2.4 Learning to Answer Yes/No-Non-Separable Data

学习参考链接:
1、台湾大学林轩田机器学习基石课程学习笔记2 -- Learning to Answer Yes/No
2、林轩田机器学习基石——Non-Separable Data

上一部分,我们证明了线性可分的情况下,PLA是可以停下来并正确分类的,但对于非线性可分的情况, Wf实际上并不存在,那么之前的推导并不成立,PLA不一定会停下来。所以,PLA虽然实现简单,但也有缺点:



对于非线性可分的情况,我们可以把它当成是数据集D中掺杂了一下noise,事实上,大多数情况下我们遇到的D,都或多或少地掺杂了noise。这时,机器学习流程是这样的:


在非线性情况下,我们可以把条件放松,即不苛求每个点都分类正确,而是容忍有错误点,取错误点的个数最少时的权重w:

这里的[ ]表示,boolean运算,是True or False的意思,表示总共犯错的次数。

事实证明,上面的解是N-P­hard问题,难以求解。然而,我们可以对在线性可分类型中表现很好的PLA做个修改,把它应用到非线性可分类型中,获得近似最好的g。

用PLA做个修改,可以理解为这样:
NP-hard问题,用pocke-t algrithm,可以理解为贪心算法,每次把最好的放在口袋里。用比较随机的方式找新的线,每次比较新的线与口袋里的(老的)线,哪个的效果更好(犯的错误比较少),如果新的更好,才把口袋里的换成新的。

修改后的PLA称为Packet Algorithm。它的算法流程与PLA基本类似,首先初始化权重W0,计算出在这条初始化的直线中,分类错误点的个数。然后对错误点进行修正,更新w,得到一条新的直线,在计算其对应的分类错误的点的个数,并与之前错误点个数比较,取个数较小的直线作为我们当前选择的分类直线。之后,再经过n次迭代,不断比较当前分类错误点个数与之前最少的错误点个数比较,选择最小的值保存。直到迭代次数完成后,选取个数最少的直线对应的w,即为我们最终想要得到的权重值。

如何判断数据集D是不是线性可分?对于二维数据来说,通常还是通过肉眼观察来判断的。一般情况下,Pocket Algorithm要比PLA速度慢一些。为什么呢?
原因有两点:

  • pocket算法每次要把当前最好的超平面存储下来

  • pocket算法每次要计算新找到的超平面对所有的数据点的分类结果,与原来的进行比较。

这两点使得pocket算法会更慢。

题目测试练习:


假设数据D是线性可分,答案是1.

关于PLA的总结:
本节课主要介绍了线性感知机模型,以及解决这类感知机分类问题的简单算法:PLA。我们详细证明了对于线性可分问题,PLA可以停下来并实现完全正确分类。对于不是线性可分的问题,可以使用PLA的修正算法Pocket Algorithm来解决。

你可能感兴趣的:(2.4 Learning to Answer Yes/No-Non-Separable Data|机器学习基石(林轩田)-学习笔记)