MachineLearning(Hsuan-Tien Lin)第二讲

第二讲

1、hypothesis set

第一讲说到机器学习做的事情就是算法A从假设集合h中选一个g。这一讲主要解决机器学习如何做是非题。比如判断一个银行是否给顾客信用卡。

首先要想的一个问题就是h长什么样。就是说假设集合中h到底有哪些。

对于银行给顾客信用卡的例子,数据D是什么呢?就是之前的一堆顾客的资料以及那些顾客是否拿到信用卡。

顾客的资料就是x,顾客是否拿到信用卡就是y


如上图所示,我们把顾客资料当成一个向量x,这样资料里面的每一个特征就是向量的每一维。这和Andrew所讲的房屋预测类似,房屋的价格和屋子的面积、屋龄、房间数等特征有关。相似的,是否给顾客资料,也和很多特征有关。比如顾客的年龄,年轻一点的可能消费能力比较强;月工资在某个范围,工资很高可能不需要用信用卡,工资就够他花;工作时间,工作很多年的可能存了不少钱,也不用信用卡……这些特征需要综合起来,判断给不给一个顾客信用卡。就好像考试的时候,选择题占20%,判断题30%,简答题50%,然后把你的得分加起来,就是你考试的成绩。我们也要给每一个特征一个权重,代表这个特征的重要程度,比如性别可能不那么重要,给它2%,年龄比较重要,给它30%。权重有正负,比如贷款金额,我们觉得某个顾客欠钱很多很多,肯定不给他信用卡。所以贷款金额这个特征的权重就是-40%。这个特征可以想成是考试作弊,作弊要倒扣分数。

于是,接下来就可以想模型了。每个特征就是xi,特征的重要性用wi(和Andrew的θ一样)。所以我们考虑给不给一个顾客信用卡时,就可以把每个特征的xi*wi分数加起来。如果分数超过一个值,就给他信用卡;否则不给。就像考试的时候,超过60就及格。如


那么,“给信用卡”和“不给信用卡”在模型中怎么表示呢?我们用+1表示给,-1表示不给,这样,就有:

 

sign是取正负号的意思。就好像考试后,老师看学生及不及格,看看分数就知道,计算机是没法自己判断的。所以,计算机把分数加起来,减掉60,取符号。如果是正号,就输出+1;如果是负号,就输出-1。

上面所描述的模型h和w(权重)及threshold(阈值)有关,不同w不同threshold,h不同。这样的h叫做感知机(perceptron)

为了简化写法,我们把threshold看做w0,也给它配一个x0=1(这个和Andrew中的给θ0凑一个x0一样),最后写成向量的形式:

 

这样的h有点抽象,我们用图来展示下h的样子。

假设x就两个特征,x1和x2,(当然还有个x0,不过那是假的三维向量)

 

上图所示,二维就是平面。平面的点,就是一个顾客资料,就是上图所有的x(红色)和o(蓝色)。y就是x或者o,y=+1是用o表示,意味着给顾客信用卡;y=-1是用x表示,意味着不给信用卡。h=0就是中间那条线。h把平面分成三个部分,h上是0,h的一边是正的(>0),一边是负的(<0)。

感知机(perceptron)就是一个线性分类器(linear classifiers)。
二维的感知机就是一个直线,多维的呢?(平面、超平面)

2、PLA(Perceptron Learning Algorithm)

我们的目标是用A从h集合中选出最好的那条线g

但是因为我们不知道f长什么样。所以,我们能做的就是用D来测试一下g  。D中的(x,y)表示一个已知是否给信用卡的顾客,比如顾客i,资料是xi,没给他信用卡,yi=0,顾客i在D中就是(xi,yi)这一条记录;顾客j,资料为xj,给了信用卡yj=1,在D中表示为(xj,yj)。把资料xi、xj放到g中看看输出什么。如果g是好的,是想要的,那么xi放到g中,就会输出-1,xj就会输出+1。因此,我们就从这个思路来推出g  。目标是用数据D去试假设集合h,找到那条输入x时,输出的y正确的g  。

这里明显看出难度,h有多少?在上面图中,平面上的线有无数条,搞不好h集合中就有无数条,一条一条试,实在是一项巨大工程。如果维度高点,n维空间,这样就非常难找g  。

有没有可行的思路?有。如果我们一开始就有一个假设g0在手上,通过不断修正它,使它越变越好,直到好到和f一样,那就是要找的g了

比如上面的图,有一条线g0()在手上了,但是它有点问题,并不是所有的o(+1)都在一边,x(-1)都在另一边。所以,想办法修正它。修正后是g1,如果它还是犯错,就继续修正,直到变得很好。

这里说,我们一开始有一条g0在手上,那么g0是什么呢?上面说g0是由w0决定的,所以,我们可以很任性的说,我们有一个g0,它对应的w0都是0。我们用这样的g0作为起点。如果g0不完美,那么一定有点没分对边(如果是完美的g,x一定都在一边,o都在另一边)。g0不好,则发生了把点o(+1),放到g0中后,输出了-1,即把这个点放到了h<0的一边(或者说把o点放到了x点的阵营中)。注意,点是o或者x是不能改变的,因为我们用的D是“已知是否给顾客信用卡的数据”,就是说x和o是已经定好的。所以,犯错就是:

即输出和已知的y不一样。式子中0是指PLA刚开始,修正了好几轮之后,第t轮犯错的点:

于是我们需要修正它。

如何修正?

(注意下面截图中h都是指分类器,是平面或线,一个假设,不是假设的集合。)




如下图所示,我们扩展到三维空间看更直观。图中就是第t轮的权重,对应第t轮的h'。图中h'就是那个平面,而w'就是平面的法向量(请看后面关于法向量的解释)。h'把下图中的点(看着跟个球似的^_^,就当是放大的点吧)放错了边,图中放到了h'上方。实际上,它是非黑的点,应该在h的下方。(想象,正确的话,黑色在h下方,非黑的在上方)


如果放正确的位置,h会把非黑的点放在下方。所以我们要修正h',就是把h'变成h,h就是下一轮的平面,它的法向量是w。


修正h'就是修正w',如下图所示。要把w'变成w,只要减掉那个放错位置的点的向量x即可。


如果点本应放在平面上方,而错放在平面下方呢?同样的道理,不过w=w'+x(自行画图观察)

这里强调一点,修正的目的是越来越好。

关于法向量的解释(从网上搜到的比较好的解释):

设(x0,y0,z0)是平面Ax+By+Cz+D=0上的一个点,则Ax0+By0+Cz0+D=0;

(x,y,z)是平面上任意点Ax+By+Cz+D=0。

相减得:A(x-x0)+B(y-y0)+C(z-z0)=0,而(x-x0,y-y0,z-z0)是平面上的向量,它与(A,B,C)的内积为0,所以垂直。所以(A,B,C)为平面的法向量。所以,方程系数就是法向量。

PLA算法思路:





上面的过程,简单模拟了PLA算法的过程。概括起来就是,有个w',找错的点,修正为w,求出h,再观察有哪些放错位置的点。

再次强调,上面的点的位置和颜色是不能变的,是在w和h上做修正,变的是w和h。

3、PLA不是异想天开?

我们上面讲的PLA的思路,好像听上去很简单,从w0=0就开始了,经过几轮修正就找到完美的g,似乎很美好。但是,再多想一点好像有些问题,让人觉得不太对。一定能找到完美的g吗?如果根本就没有这样的g,使所有点都放对阵营呢?如下图:


左下角的o好像很碍事

还有这个图:

直线应该不可能很好的选择吧。

所以,这里就必须做规定,要用PLA一定要线性可分的点。什么是线性可分?如图:


其次,找错误的点一定会修正g,让g越变越好吗?搞不好越来越糟,最后根本就没法找到最好的g。

我们看看上面的PLA算法思路:



w是最后要求的h的权重

修正的式子左右两边都同时乘以w。ww2是w和w2做的内积,是求w和w2的角度差多少。如果ww2=0,则二者垂直,w2很不准了;如果ww2=1,则二者平行,说明w2在方向上对了。

是什么呢?w是最后正确的h的权重,它在数据D中的表现,是输入x输出的值和y是同号。 > 0。


但是ww2 = ||w||*||w2||* cosθ,所以内积不仅是角度,也包括长度。

w1是有错误的h1的权重,所以


因为,PLA的数据要线性可分。所以会出错的点都是在线附近的。就好像两国的边界,肯定是争端比较多的,比较敏感的区域,他国不可能争论别国首都“是我国领土”。归错阵营的点一定是在线附近的。


设n是修正的次数。根据内积公式。做最坏的假设,每次修正的时候,w'靠近w的角度很小(图中(1)式),即很小。上面说到,w'和w靠近,还可能是因为选的点长度非常大,如图中式(2)。可以看出,即使增长最多的点也只是,x是我们的数据D,一般x最大也不会很大,更何况,还没说做数据归一化处理。


所以,

是一个近似常数。所以随着n增大,w'和w的角度是越来越小,表示它们越来越靠近。从上图最底下那个式子看出,n也是有限的。

4、有噪声的数据

线性可分告诉我们w'和w会越来越接近,用错误修正告诉我们w'接近的比较慢。所以w'总是会接近w。我们总会找到w就会求得相应的g。但是,数据一定就线性可分吗?我们开始就不知道数据到底可不可分,如果有g,我们就一眼能看出线性可分,可是我们就是要求g,所以就陷入了循环。因为不知道数据是否线性可分,我们也不知道到底能不能求出g。当数据有噪声时,就是线性不可分的数据,我们能不能在这种状况下,依然找到g?

通常,数据都是大量的,而噪声数量很少(如果噪声比数据要多,数据挖掘就是做噪声挖掘了……),所以我们的f产生的y与x的关系大部分都是正确的,错误的部分就是受得了噪声的影响。这样,g预测的y与x的关系也是大部分都是对的。(前面说到,我们的目标是找到一个g,能把所有的x和o分对阵营,注意是所有的。这里说,因为受到了噪声影响,有可能无法做到所有,所以尽可能找能分对阵营的g)


如何找到犯错误最少的g?这是一个NP-hard问题。

所以,只能找近似的,即选出的g大概/可能就是犯错误最少的那个。

这里介绍一个算法,叫做Pocket Algorithm。

这个算法和PLA不一样的地方在于,有一个w'放在手中;然后随机的找一个犯错的点,求一个w";和w'比较,如果比w'好就替换它,否则就继续找。什么时候停下来?在一开始就设置了迭代次数。Pocket Algorithm更新的时候,因为随机选点,而且要比较前后两次的犯错率(Pocket Algorithm要把所有点都算一遍看看是对的还是错的,然后统计错的数量。PLA每次只要找一个有错的点就可以了),只有犯错少才更新,所以比PLA要低效(PLA是每次都修正得越来越好)。


所以,如果有噪声,用PLA的变形Pocket Algorithm,可以找到还不错的g。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值