标签:
博客已经迁移至Marcovaldo’s blog (http://marcovaldong.github.io/)
刚刚完成了机器学习基石的第二讲,主要介绍了机器学习的定义,PLA算法和pocket PLA算法。下面将笔记整理在下面。
延续前面的信用卡发放问题。银行已有的用户数据可能包括用户的年龄、年薪、工作时长、债务情况等特征信息,我们分别用
对于这样的hypothesis,我们称之为感知机(perceptron)。
我们将上式向量化,并将阈值加到前面的求和中,就变成了下面这样:
此时,x和权值向量w均为d+1维。下面给出一个二维平面上的perceptron hypothesis的例子,我们的perceptron要做的就是将图中的圈圈和叉叉给分开。
我们看到perceptron在二维平面上就是一条直线,其在更高维的空间呢应该以个超平面,所以我们说感知机是一个线性分类器。
下面是关于垃圾邮件分类的一个小测试:
现在我们知道了hypothesis是什么样的,那么我们怎样从H = all possible perceptrons中选择一条最好的呢?怎么去判断hypothesis的好坏呢,我们的思路是用这个hypothesis去处理已有的数据集,该hypothesis对已有数据的处理结果越正确则越好。就是说,如果又一个hypothesis对银行用户信息的处理结果与银行之前作出的信用卡发放决定都一致的话,那这个hypothesis就是好的。
hypothesis有无穷多个,那我们怎么去遍历呢?我们的思路是从某一条hypothesis出发,不断的去修正它,使其一次比一次变得好。修正的方法是这样的:对于一个hypothesis,对应其由一个
我们将这个算法称为PLA。下图是PLA算法的一个伪算法(当然还有对数据点的其他遍历方法):
然后视频中作了一个修正hypothesis的演示,这里省略。
前面我们说当hypothesis在任何数据点上都不犯错误的时候,算法就会停下来,那算法一定会停下来吗?就算算法会停下来,那我们最终得到的g肯定会很接近目标函数f吗?这是本小节遗留的两个问题,以后会介绍。
最后是小测试(对修正公式等号两边均左乘
对于一个数据集中的两类数据点(一组是圈圈,一组是叉叉),当存在一条直线(或超平面)能够将圈圈和叉叉完全分开时,我们称这样的数据集时线性可分的(linear separable)。下图中给出了线性可分数据集和非线性可分的数据集。
对于线性可分的数据集D,存在一个完美的
通过上图中的推导,我们得到了
我们说hypothesis只有在犯错的时候才更新,才有
从上面的推导,我们知道了
而上式的左边又不可能超过1(两个向量夹角的余弦值的上限),由此我们说循环一定可以停下来。
最后是小测试:
我从网上找到了一个解释,详情推导请见传送门(http://www.cnblogs.com/HappyAngel/category/348262.html),这里给出推导过程。
其实有了这个推导,我们才完全从数学上证明了PLA会在T次修正计算后停下来。
前面我们说,如果数据集时线性可分的,那我们的PLA就一定会停下来。但我们事先是不知道数据集是否线性可分,而且初始的数据集中会含有噪声noise。在这种情况下,我们如何去找到一个好的hypothesis去很好的分开圈圈和叉叉呢?
既然我们现在无法找到不犯错误的hypothesis,那我们就去找一条犯的错误最少的hypothesis,这就引出了pocket PLA算法。
最后是小测试:
机器学习基石第二讲:learn to answer yes/no
标签:
原文地址:http://blog.csdn.net/majordong100/article/details/51181148