林轩田机器学习基石课程个人笔记-第二讲

59 阅读7分钟

第二讲学习一个很基本的模型:感知机模型(Percenptron)


在这里插入图片描述

为了更好的理解感知机模型,首先举一个例子:当我们去银行申请信用卡的时候,通常需要填写一些相关的信息,然后银行审查后会决定是否发放。常用的信息有如下几种:

  • 年龄、性别

  • 工作年限

  • 目前收入

  • 信用情况

  • ……


    在这里插入图片描述

那么有了上述的信息后,银行如何来决定是否放发信用卡呢?其中一种简单的做法就是对于每一个数据赋予一个权重 w w w,然后求加权和 ∑ i = 1 d w i x i \sum_{i = 1}^d w_i x_i ∑i=1d​wi​xi​,判断结果和我们设置的阈值的大小关系。如果大于阈值,发放,否则不予发放。


在这里插入图片描述

我们也可以使用sign(x)来将结果二值化,+1表示可以,-1表示否决。


在这里插入图片描述

如果 h ( x ) h(x) h(x)进行一个转化,将其写成 W W W的转置和 X X X向量相乘的形式


在这里插入图片描述

假设数据分布如下图所示,特征 x x x表现在二维平面上就是一系列的点,标签就是o和×,表示前面提到的+1和-1。而我们所作出的假设 h ( x ) h(x) h(x)就是图中的线,目标就是找到一个可以正确对图中的点进行划分的线。


在这里插入图片描述
在这里插入图片描述

感知机模型在这里也可以认为是一种二分类的线性模型。


在这里插入图片描述

既然我们的目标是找到一条最好的划分的线,换言之,我们做的很多的假设都可以取得想要的结果,但是如何在假设集中找到最接近于 f f f的 g g g呢


在这里插入图片描述

但是最优的 g g g是很难直接获取到的,因为用于分个数据点的直线稍微移动一点就是一条不同的线,那么理论上 g g g有无限多个。因此,因此寻找最优 g g g的过程就是不断优化 g g g和真实 f f f之间误差的过程。


在这里插入图片描述

那么应该怎么去做呢?既然我们无法一次性找到最好的,我们这里采用逐点修正的方法,随机的从一个 g i g_{i} gi​开始,不断地调整来到达最好的 g g g。


在这里插入图片描述

感知机模型是怎么做的?首先随机选择一条直线进行分类,然后找到第一个分类错误的点,如果这个点表示正类,被误分为负类,即乘积<0,那表示 w w w和 x x x夹角大于90度,其中 w w w是直线的法向量。所以, x x x误分在直线的下侧(相对于法向量,法向量的方向即为正类所在的一侧),修正的方法就是使 w w w和 x x x夹角小于90度。通常做法是, W ← W + Y X , Y = 1 W \leftarrow W+YX,Y=1 W←W+YX,Y=1,如图右上角所示,一次或多次更新后的 W + Y X W+YX W+YX与 x x x夹角小于90度,能保证 x x x位于直线的上侧,则对误分为负类的错误点完成了直线修正。

同理,如果是误分为正类的点,即乘积>0,那表示 w w w和 x x x夹角小于90度, x x x被误分在直线的上侧,修正的方法就是使 w w w和 x x x夹角大于90度。通常做法是 W ← W + Y X , Y = − 1 W \leftarrow W+YX,Y=-1 W←W+YX,Y=−1,如图右下角所示,一次或多次更新后的 W + Y X W+YX W+YX与 x x x夹角大于90度,能保证 x x x位于直线的下侧,则对误分为正类的错误点也完成了直线修正。

按照这种思想,遇到个错误点就进行修正,不断迭代。实际操作中,可以一个点一个点地遍历,发现分类错误的点就进行修正,直到所有点全部分类正确。这种被称为Cyclic PLA。


在这里插入图片描述

每次修正直线,可能使之前分类正确的点变成错误点,这是可能发生的。但是没关系,不断迭代,不断修正,最终会将所有点完全正确分类(PLA前提是线性可分的)。

具体的过程示例如下:


在这里插入图片描述

那么在这个过程中就会有两个问题:

  • 算法迭代一定会停下吗?
  • 如果停下了是否一定有g接近于f?在其中的过程中是否有接近于f的g存在呢?

那么PLA什么时候会停下来呢?根据PLA的定义,当找到一条直线,能将所有平面上的点都分类正确,那么PLA就停止了。要达到这个终止条件,就必须保证D是线性可分(linear separable)。如果是非线性可分的,那么PLA就不会停止。


在这里插入图片描述

对于线性可分的情况,如果有这样一条直线,能够将正类和负类完全分开,令这时候的目标权重为 W f W_f Wf​,则对每个点,必然满足 Y n = s i g n ( W f T X n ) Y_n=sign(W_f^TX_n) Yn​=sign(WfT​Xn​),即对任一点:

在这里插入图片描述
PLA会对每次错误的点进行修正,更新权重 W t + 1 W_{t+1} Wt+1​的值,如果 W t + 1 W_{t+1} Wt+1​与 W f W_f Wf​越来越接近,数学运算上就是内积越大,那表示 W t + 1 W_{t+1} Wt+1​是在接近目标权重 W f W_f Wf​,证明PLA是有学习效果的。所以,我们来计算 W t + 1 W_{t+1} Wt+1​与 W f W_f Wf​的内积:

在这里插入图片描述
从推导可以看出, W t + 1 W_{t+1} Wt+1​与 W f W_f Wf​的内积跟与的内积相比更大了。似乎说明了 W t + 1 W_{t+1} Wt+1​更接近 W f W_f Wf​,但是内积更大,可能是向量长度更大了,不一定是向量间角度更小。所以,下一步,我们还需要证明 W t + 1 W_{t+1} Wt+1​与 W f W_f Wf​向量长度的关系:


在这里插入图片描述

W t W_t Wt​只会在分类错误的情况下更新,最终得到的 ∣ ∣ W t + 1 2 ∣ ∣ ||W_{t+1}^2|| ∣∣Wt+12​∣∣相比 ∣ ∣ W t 2 ∣ ∣ ||W_t^2|| ∣∣Wt2​∣∣的增量值不超过 max ⁡ ∣ ∣ X n 2 ∣ ∣ \max ||X_n^2|| max∣∣Xn2​∣∣。也就是说, W t W_t Wt​的增长被限制了, W t + 1 W_{t+1} Wt+1​与 W t W_t Wt​向量长度不会差别太大!如果令初始权值 W 0 = 0 W_0=0 W0​=0,那么经过T次错误修正后,有如下结论:


在这里插入图片描述

上一部分,我们证明了线性可分的情况下,PLA是可以停下来并正确分类的。但对于非线性可分的情况, PLA不一定会停下来。


在这里插入图片描述

对于非线性可分的情况,我们可以把它当成是数据集D包含有noise的情况。事实上,大多数情况下我们遇到的数据集都或多或少地掺杂了noise。


在这里插入图片描述

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


在这里插入图片描述

事实证明,上面的解是 N p − h a r d Np-hard Np−hard问题,难以求解。然而,我们可以对在线性可分类型中表现很好的PLA做个修改,把它应用到非线性可分类型中,获得近似最好的g。修改后的PLA称为Packet Algorithm。它的算法流程与PLA基本类似,首先初始化权重,计算出在这条初始化的直线中,分类错误点的个数。然后对错误点进行修正,更新 w w w,得到一条新的直线,在计算其对应的分类错误的点的个数,并与之前错误点个数比较,取个数较小的直线作为我们当前选择的分类直线。之后,再经过n次迭代,不断比较当前分类错误点个数与之前最少的错误点个数比较,选择最小的值保存。直到迭代次数完成后,选取个数最少的直线对应的 w w w,即为我们最终想要得到的权重值。


在这里插入图片描述

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


总结


在这里插入图片描述