机器学习基石笔记:02 Learning to Answer Y
一、Perceptron Learning Algorithm
(一)算法原理
PLA本质是二元线性分类算法,即用一条线/一个面/一个超平面将1、2维/3维/4维及以上数据集根据标签的不同一分为二。算法确定后,根据取值的不同形成不同的
,构成假设集合
。如2维感知器算法,根据
,
,
的不同取值,构成了不同的
,这些
最终构成
。为了方便表示,将阈值的相反数记为
,对应的数据点增加一维
,恒为1。算法就是根据给定数据集
从
中选出与目标模式
最为相似的
。
![](https://img.haomeiwen.com/i8016875/51e6f230881ff57a.png)
![](https://img.haomeiwen.com/i8016875/4c987e62ad72fbaa.png)
![](https://img.haomeiwen.com/i8016875/fd2bae64e9e42d81.png)
(二)更新规则/学习过程
遍历数据集合,若遇到异常点,即由当前更新为新的
。
若异常点的值为+1,表明
与当前
的内积值为负,角度过大,更新后角度将会变小;若异常点的
值为-1,表明
与当前
的内积值为正,角度过小,更新后角度将会变大。
更新的本质其实是从
中选出与
更为相似的
的过程。
![](https://img.haomeiwen.com/i8016875/5685a9a6a8e2c8be.png)
更新后不能保证异常点变为正常点,只是异常的程度小了点。
![](https://img.haomeiwen.com/i8016875/b6553fb76c674c8d.png)
(三)停止更新
在当前的情况下,遍历
中所有数据点,无异常点时停止更新。
然而一定能够保证能停止更新吗?即在当前下无法找到一个新的
使得对应的
与
更为接近?
答案是只要数据线性可分就能!
![](https://img.haomeiwen.com/i8016875/16981f93f72a1704.png)
与
的内积值随着更新次数的上升而增大,同时,
的模也在增大。不过,内积增大的程度往往大于模增大的程度,保证了随着更新次数的上升,
与
趋于越来越接近。
![](https://img.haomeiwen.com/i8016875/e198b6bef28c43f5.png)
![](https://img.haomeiwen.com/i8016875/4844e7a410c1a0d6.png)
![](https://img.haomeiwen.com/i8016875/2b2db958aecdf099.png)
![](https://img.haomeiwen.com/i8016875/b304a9fbb9e6b021.png)
(四)PLA的优缺点
优点:简单、快速、任意维度;
缺点:假设数据线性可分,然而我们并不知道,也就不知道是否可分。再来,要是知道线性可分,
也已经知道了,没有必要再用PLA了;经过多少次更新才能收敛也不知道,如上证明,
与
有关,然而我们不知道
。
![](https://img.haomeiwen.com/i8016875/d4d07b29ccb50758.png)
二、Pocket Algorithm
若数据线性不可分,使用PA,即既然异常点无法避免,PA在中找到一个使得异常点数目最小的
作为
。
NP问题:为多项式型时间复杂度,
为指数型时间复杂度。问题分为可解问题和不可解问题,多项式型时间复杂度的可解问题为P问题,验证时为多项式型时间复杂度的问题为NP问题,能否可解未知。P问题肯定是NP问题,NP问题不一定是P问题。
![](https://img.haomeiwen.com/i8016875/523912d673460677.png)
PA,初始化,放到口袋里,若遇到异常点,使用PLA的更新规则得到新的
,遍历数据集,若是新的
下异常点的数目更少,则用新的
替换旧的
放到口袋中,否则不替换。继续遍历数据集,得到下一个异常点,重复上述过程至足够迭代次数。口袋里放的永远是目前使得异常点最少的
。
PA不影响PLA的正常运行,只是从历史中挑出使得样本内分类错误最少的
作为最终返回值。
![](https://img.haomeiwen.com/i8016875/f65a54d752aea62b.png)
如果数据集是线性可分的,PLA和PA都能够实现内无异常点的分类,但是PA的时间会长于PLA,因为多了比较两个不同的
下遍历一轮数据所得异常点数目多少的过程。
![](https://img.haomeiwen.com/i8016875/7edc9a98706f679f.png)