下面是机器学习的《监督式学习》课程的一篇试读文章,进行了一下重新排版,然后展示在这里。由于格式的限制,缺少了一些习题、可运行的代码、证明、注释等,可能会导致解释差强人意,所以介意的同学可以直接访问感知机的暴力实现,以获得最佳的阅读体验。
简单来说,感知机就是要找到一条直线(或者说超平面),将两类点分开(下图中的为横坐标,为纵坐标):
我们知道,直线(或者超平面)的方程为(下面的):
本文就来介绍感知机如何通过一种看似暴力的方法来寻找合适的和,从而找到将两类点分开的直线(或者超平面)。
首先我们要知道一些前置的结论,下面一一来介绍。
2.1 点积的正负与夹角的大小
根据的知识,可以知道点积的正负与夹角的大小如下:
2.2 法向量
比如二维空间中,是一条直线,就垂直于该直线:
同样的道理,在中是一个平面,是该平面的法向量:
2.3 超平面的两侧
中的
与超平面
的关系为:
-
:在超平面的法向量所指的一侧
-
:在超平面上
-
:在超平面的法向量所指的另外一侧
比如中的直线周围有三个向量:根据上述结论可得:
-
:在直线的法向量所指的一侧
-
:在直线上
-
:在直线的法向量所指的另外一侧
三维空间也是一样的,假设平面周围有两个向量:
根据上述结论可得:
-
:在平面的法向量所指的一侧
-
:在平面的法向量所指的另外一侧
讲了这么多前置,下面开始介绍感知机的暴力实现。第一个问题是,要能判断找到的超平面的对错。
3.1 随便找的直线
下面是用来作例子的数据集,其中为某点的作用,对应的表示该点的类别:
然后随便(对,就是随便,要不怎么叫暴力实现)找一条直线,看看能不能将这些点分开(作图时,表示该点为,表示概率为):
3.2 是否分对
下面来判断该直线的对错。我们希望标签的特征向量在直线法向量所指的一侧,而的特征向量在法向量所指的另一侧。据此,上图中分对的点为、、、,根据上面“超平面的两侧”的介绍,可知它们是有共同特征的:
同理,分错的点、也是有共同特征的(分错边或者分到了边界线上都算错):
3.3 小结
综上,判断对错的标准就是:
如果所有的都分对了,那么就说明是正确的超平面。
前面看到、分错了,所以超平面是错误的,需要纠正。本节用两个中例子来说明纠错的思路,当然这些推论也是适用于的。
4.1 拉近
比如下面是标签的,它被错分到了直线的法向量所指另一侧,或者说本来和的夹角应该是锐角的,现在却是钝角:
那就想办法将法向量拉近一些。根据的,可以看到就是和夹角更小的向量:
所以用为法向量,直线方程被纠正为,此时就可以正确分类:
4.2 推远
而下面是标签的被错分了,我们希望将法向量推远一点,同样根据的,可以看到就是和夹角更大的向量:
所以用为法向量,直线方程被纠正为,此时就可以正确分类:
4.3 小结
总结下,当标签为的被错分时,也就有
此时,只需要令,就可以得到修正后的:
下面给一个例子来进一步说明该结论。
4.4 错误纠正的例子
例 如下图所示:
标签为的特征向量分错了吗?如果分错又如何纠正?
解 通过看图,或者进行计算(该直线的法向量为),都可以发现分错了:
应该将法向量推远一点,修正后为:
修正后的直线为,从夹角来看,修正后的法向量更远了:
好了,现在具备需要的知识了,让我们来为、纠错。按顺序来吧。
5.1 的纠错
只需要令就可以得到新的超平面:
纠错后,对了。
5.2 持续纠错
可是,原本没有错的却错了,令进行纠错;然后又错了,继续:
5.3 找到决策边界
还有错,还得继续:
最后,法向量为的直线将所有的点正确分开,这就是感知机的暴力实现所要寻找的决策边界。
刚才介绍的算法一开始随机找了个超平面,实在太暴力了,下面来规范一下:
(1)令权重向量和都为0:
所以初始函数为:
(2)顺序遍历数据集,从中得到。
(3)如果分错了,即
则进行更正(因为刚开始,不更正的话,超平面的截距就一直是0,导致的后果是有可能不能将数据分开):
(4)转至(2),直到找到合适的和,使得对于所有的都满足:
此时可以说,该超平面将数据分为了两类。
6.1 实现
语言描述的算法可能有歧义,下面是按照上面步骤实现的代码,可以帮助同学们精确理解感知机的暴力实现: