今天将第2讲的课程看完了,继续学习笔记。
知识点1:在第1讲中,最后台大的林老师用了一张流程图画出了一个信用卡申请流程的机器学习方式,就是从D(training data)和H(hypothesis set)中学习出一个'best' hypothesis,输入x(信用卡申请人信息),得到y(approve,deny)。那H(hypothesis set)到底长什么样呢?
还是从信用卡申请的例子出发:
x是信用卡申请人的信息,x=(,
,...,
)可以将x看成一个向量,里面是申请人的特征属性,例如:年龄,工资等等信息,这些是分量(
)。每个分量有着不同的权重(
),例如:工资高则申请信用卡通过的概率大,则权重就高。通过分量和权重来计算出一个score,如果score>threhold申请通过,score<threhold则申请不通过,score=threhold则ignore。用公式显示如下:
如果 批准信用卡申请;
如果 拒绝信用卡申请。
y:{+1(approve), -1(deny)}, 0 ignore,这样linear formula h H
这个公式被称为perceptron hypothesis,就是感知器。hypothesis中的未知数是和threshold。
这个公式可以写成如下形式:
注意:这里的W和X进行的是向量的内积。这是在d纬的欧几里得空间中进行的计算(),H就是一个d纬的面。如果是在2纬空间(一个平面中),H就是一条直线
;在3纬空间(一个3微空间中),H就是一个平面。
上图是一个2纬平面的perceptron hypothesis,图片上的每个点是x;直线是perceptron hypothesis;圆圈(+1)和大叉(-1)是y。并且perceptron hypothesis只能进行线性的分类也就是二分类。
知识点2:PLA(Perceptron Learning Algorithm)感知器算法
PLA说白了就是对W向量(是未知数)不断地进行调整,因为H(hypothesis set)的数量是无限多个(在2纬空间可以画无数条的线),所以最理想的方式是得到一个g对现有的数据进行计算的结果都是正确的。
算法步骤:
- 在初始的时候将g的所有
设置为0;
- 对每个x进行遍历,一旦
,则
;(这里t代表第t轮的遍历)
- 直到所有的x在g中都计算正确,才停止遍历。
从上面的2纬图我们可以看出这样做的原理,如果,而g(x)计算的结果是-1,这说明w和x之间的角度过大(
,cos超过90度为负数),需要调小一些,用w+x;如果
,而g(x)计算的结果是+1,说明w和x之间的角度过小,需要调大一些,用w-x。怎么样程序写的很简单吧。
知识点3:通过数学的方法证明了PLA在D线性可分得情况下是循环是可以结束的。(这里我就不证明了,很长的一段证明,在网页上写太费劲了。)
知识点4:Pocket算法
PLA循环没有得到结果的原因有2个可能,一是循环次数不够;二是D不是线性可分的(linear separable)。
上图的D就是线性不可分的,这个时候Pocket算法就登场了。其实Pocket算法是PLA的改进。思路是找一条错误尽可能少的直线。手上先抓一个保留
,然后在优化一个
保留
,看哪个w犯的错误最少。
算法步骤:
- 在初始的时候将g的每个
(是向量w的分量)设置为0,这个为g的
;
- 将g的
和D中所有的x进行内积(
),看错了多少个(肯定全错);
- 随机找一个错误的点,
;
- 将g的
和D中所有的x进行内积(
),看错了多少个;如果
的错误个数少于
的错误个数,则舍弃
保留
;
- 重复进行足够多次的循环后,停止。
当然Pocket算法的效率是低于PLA算法的。
Machine Learning Foundation Lecture 03 Type Of Learning 学习笔记