导读
本章讲的是让他机器学习说yes/no,目录分为:
-
感知机假设集合
-
感知机学习算法(PLA)
-
确保数据集线性可分
-
非线性可分数据
-
实践代码与效果
Perceptron Hypothesis Set
我们还以是否给办理信用卡为例,上面是客户的信息。
x是上面的客户信息向量,每一个维度对应一个权重w,w理解为这个维度的重要性。这个我们设定一个阈值,客户的每个信息*权重超过了阈值则就给办理,否则不给办理。
其中
我们简化下,将+1设为good,-1设为bad。因为权重*x求和-阈值是一个数,经过sign函数,如果大于0就返回+1,小于0就返回-1,来判断。
我们再来简化下这个公式:
这里的阈值可以看做是*+1的一个变量,将+1看做已知的向量元素x,即:
然后就可以合并:
最终变为两个向量的内积形式。
那么我们的h长什么样子呢?我们在二维上用图表示:
其中:
(x1,x2)为平面上的点
label y为已知,平面上表示为o为+1,x为-1
假设h集合,为平面上的很多线,在线的两边分别为正的,负的。
在数学上,这个叫做线性分类器linear classifiers。
Perceptron Algorithm Learning(PLA)
我们知道集合h里面有我们想要的最终g,但是h集合里面有太多的选择了,我们怎么也不能一个一个选吧?比如上面的二维分类中的h集合里是所有的平面的线条,但是我们怎么也不能一个一个拿来试试吧。我们要想人一样的,想做下试试,再根据错误反馈慢慢调整。
比如下面这条线,我们能不能稍微弄动下,把正确的包含进来呢?
方法如下:
对于每条数据(x,y)来说,如果发现通过通过函数返回值和label y不一样,那么我们就更新,怎么更新呢?
当y=+1时,所得的内积后的值为负数,那代表w和x的夹角太大了,要缩小下,通过公式:
将新的w更新到w和x之间。
当y=-1时,所得的内积后的值为正数,那代表w和x的夹角太小了,要扩大下,通过公式:
将新的w更新到w和x之外。
直到没有错误为止,停止更新,返回w向量即可。
一句话表示这个简单的算法:
知错能改,善莫大焉。
这里有个我拓展个知识:
向量w是该二维平面的法向量:
其实向量w是n维超平面的法向量,因为上图是二维的,所以超平面是一条线。
这里再补充点超平面的知识:
超平面分离定理是应用凸集到最优化理论中的重要结果,这个结果在最优化理论中有重要的位置。所谓两个凸集分离,直观地看是指两个凸集合没有交叉和重合的部分,因此可以用一张超平面将两者隔在两边。
Guarantee of PLA
我们的数据必须是能用一条线(或者一个平面)分开,我们叫这个为线性可分linear separable,如图:
线性可分
线性不可分
Non-Separable Data
像这种线性不可分的怎么办呢?这个其实很简单,找犯错误最小的就行。公式为:
可是。。这个是个NP-hard问题,而NP-hard问题是直接难倒计算机界的一大难题,至今未解。所以,这样最佳的分割线还是找不到的。
以上图片(除了纸上的推导)来自台大林轩田机器学习基石视频
代码实践
初始化数据
显示的正常分类结果为:
循环迭代更新
更多精彩内容,请关注 深度学习自然语言处理 公众号,就是下方啦!跟随小博主,每天进步一丢丢!哈哈!