02 Learning to Answer Yes/No

一.Perceptron Learning Algorithm

1.回顾机器学习流程

       思考假设空间H是什么样的,学习算法A确定后,h的样子就确定了,根据W的不同可以得到不同的h,构成假设空间H,学习算法从H中挑选表现最好的h即为最终的g,g和f在D上表现应该尽量一致,在未知数据(test data)上越接近代表性能越高。

2.PLA原理

       PLA是二元线性分类算法,找一条直线或平面或超平面可以将数据根据标签的不同一分为二。银行发信用卡问题,给用户不同的信息赋不同的权值,当累加超过阈值时,发行用卡,当没有超过阈值时不发信用卡。

       当算法确定后,H的形式确定,即为h(x),由wi和threshold决定,看PLA在二维空间的情况,根据w0(-threshold),w1,w2的不同取值,得到不同的h,这些h构成了假设空间H,算法的目标是在H中找一条最好的直线(没有误分类点)将D中的数据一分为二。

       公式化简,将阈值的相反数表示为w0,W的维数增加了一维,相应地数据X的维数也要增加一维x0,x0=1。

       前面提到算法的目标是找到一条最好的直线,但是二维空间中的直线有无数条,找最好的并不容易,我们一般采取的方法是选定一条直线,对该直线进行修正。

3.修正方法(更新过程) 

       遍历数据集D,当出现误分类点时,更新W,重复该过程直到在数据集上没有误分类点为止。

       更新规则有两种情况:①yn=+1,而计算出来的h(xn)=-1,说明W和X的内积<0,说明W和X的夹角太大,需要W+X,调小角度。

                                           ②yn=-1,而计算出来的h(xn)=+1,说明W和X的内积>0,说明W和X的夹角太小,需要W-X,调大角度。

       更新W其实就是在H中找到与目标f更为相似的h的过程。

       更新使异常程度变小,尝试把线转到正确的方向上去,即h越接近目标函数f。

4.停止更新(算法收敛)

思考:算法迭代一定会停吗?

 回顾停止条件:在当前W下,遍历数据集D中的所有数据点,没有误分类点时,停止。

当数据集线性可分时,算法能够停止。

 

思考:每次更新使Wt接近Wf?

       更新一轮后,Wf和Wt+1的内积>Wf和Wt的内积,内积=||Wf||*||Wt||cosθ,内积变大有可能是cosθ变大,也有可能是||Wt||变大,不能说明Wt和Wf越来越接近,还需解决长度问题。

       可见Wt不会增加太快,所以每次更新Wt会越来越接近Wf,即h越来越接近目标函数f。

      在存在Wf的情况下(数据集线性可分),随着T的增大,向量夹角的余弦值增大,即每次更新都使Wt越来越接近Wf,但是T不能一直增大,因为向量夹角余弦值<=1,T的值有限,所以PLA算法收敛。

5.PLA的特点

        wf与wt的内积增长较快,wt长度增长较慢,wt越来越接近wf,h越来越接近f。

       PLA的优点:实现简单,快速,适用于任意维度(W和X的向量的长度)。

       PLA的缺点:假设数据集D线性可分,但是我们一开始并不知道数据集是否线性可分,更新能停则线性可分,否则更新则一直进行下去,要是一开始知道线性可分,Wf就知道了,没必要再使用PLA;不知道更新多少次才能收敛,如上证明,收敛T依赖于Wf,但是Wf不知道。

二.Pocket Algoritnm

        若数据集线性不可分,将PLA的条件放宽一点,不要求所有的样本都能正确分开,而是要求犯错误的样本尽可能的少,即不能找到一个h使得所有的数据点被正确分类,为了使找到的h和f最接近,我们考虑找到一个h使得被误分类的点最少,也就是找到一个W使得被误分类的点最少。

        我们发现这是一个NP-hard问题,因为线有无穷多个,所以无法求得最优解,因此只能求尽可能接近最优解的近似解。

    NP问题:O(nk)为多项式型时间复杂度,O(kn)/O(n!)/O(>n!)/...为指数型时间复杂度。问题分为可解问题和不可解问题,多项式型时间复杂度的可解问题为P问题,验证时为多项式型时间复杂度的为NP问题,能否可解未知。P问题肯定是NP问题,NP问题不一定是P问题。

        修改后的PLA,称为Packet Algorithm,基于贪心的思想,即虽然不能找到一个h将所有数据点正确分类,也不能找到一个h使得误分类点最少,但是每次挑选一个更好的h放进口袋,在一定时间后停止。

        PA的流程,初始化W0,放到口袋里,若遇到异常点,使用PLA的更新规则得到新的W,遍历数据集,若是新的W下异常点的数目更少,则用新的W替换旧的W放到口袋中,否则不替换。继续遍历数据集,得到下一个异常点,重复上述过程至足够迭代次数。口袋里放的永远是目前使得异常点最少的W

思考:如果数据集本就是线性可分的,那么PA和PLA哪个更好?

        如果数据集是线性可分的,PLA和PA都能找到能够正确分类所有数据点的h,但是PA花费的时间更长,因为每次迭代,PA都多了比较在两个不同的W下,遍历数据集中所有的点,以统计误分类点的个数的时间。但是,如果数据集线性不可分,只能用PA,因为PLA根本不会停下来。

 

posted @ 2019-04-17 23:27  huangshansan  阅读(151)  评论(0编辑  收藏  举报