感知机(Perceptron)是二类分类的线性分类模型, 是SVM和神经网络的基础. 感知机以一个实数值向量作为输入, 计算这些输入的线性组合, 如果结果大于某个阈值就输出+1, 否则输出-1. 下面就从模型, 策略和算法三方面来说说这个模型, 最后会推导一下算法的收敛性.
1 模型
感知机模型为:
其中 是输入, 每一维输入的一个特征(性别, 年龄, 工作年限…).
稍微整理得到:
其中 是符号函数.
换一种我们常见的写法:
不同的就对应不同的 , 感知机模型的假设空间是定义在特征空间的所有线性分类模型, 即所有线性函数的集合.
2 分离超平面
考虑线性方程:
它对应于特征空间的一个超平面, 其中是超平面的法向量, 是超平面的截距. 这个超平面把特征空间划分为两部分, 一部分为正类, 一部分为负类. (想想哪边是正, 哪边是负? )这个平面我们叫分离超平面(separating hyperplane). 在二维空间, 对应的就是直线, 在三维空间, 对应的就是平面.
3 线性可分
如果存在某个超平面能将数据集的正类点和负类点完全正确地划分到超平面的两侧, 即对所有标记为+1的实例, 都有 , 对所有标记为-1的实例, 都有 . 则称数据集线性可分, 否则数据集线性不可分.
4 策略
假设训练数据线性可分, 感知机学习的目标是求得一个能够将训练集正例和负例完全正确分开的超平面, 即求出, 为此我们需要确定一个学习策略, 即定义一个损失函数, 然后将损失函数最小化. 很容易想到的是选择误分类点的总数作为损失函数, 但这样的损失函数不是的连续可到函数, 不好优化, 所以我们需要另辟蹊径. 损失函数的另外一个选择是误分类点到分离超平面的距离. 什么样的点是误分类点呢? 对标记y=+1的实例, 如果 , 则会错误的将该点分为负例;对于标记为y=-1的实例, 如果 , 则会错误的将该点分类正例, 无论哪种情况, 都有 , 即.
误分类点到超平面S的距离为:
假设超平面S的误分类点集合为M, 那么所有误分类点到超平面S的总距离为:
不考虑 , 就得到了感知机的损失函数:
5 算法
我们采用随机梯度下降法来极小化损失函数, 具体地, 首先任意选取一个超平面 , 然后利用梯度下降不断极小化目标函数, 随机选取一个误分类点, 对进行更新:
其中 是步长, 又称学习率(Learning rate).
注意: 感知机学习算法由于采用不同的初值, 或者选取不同的误分类点顺序不一样, 解可以不一样.
6 几何解释
如果引入 和 , 则感知机可以表达为:
在学习的过程中, 我们还是任意随机选取一个超平面, 每遇到一个误分类点, 就将往正确的方向调整一下, 直到最后完全把数据集分开, 下面我们看看怎么调整:
对于y=+1的点, 如果分错了, 需要往方向调整, 即:
对于y=-1的点, 如果分错了, 需要往反方向调整, 即:
无论哪种情况, 调整的结果都有:
下面看一个逐步调整的例子:
7 收敛性证明
假设数据集线性可分, 那么一定存在一个分离超平面能够将数据集完全正确无误的分开, 假设这个超平面记为 , 即对数据集里所有的点, 都有:
即我们记
下面从两个方面说明感知机算法是收敛的.
第一方面: 每次调整都会让 和 更接近一点.
什么叫两个向量比较接近? 什么东西描述了两个向量的相似性? 对, 是内积. 考虑从第 次到第 次的迭代, 假如点 是被 误分类的点, 即:
则 的更新为:
第二方面 只有在误分的时候才调整, 而且长度不会变化太快.
的长:
结合两个方面得出的不等式:
所以:
从上面的式子可以看出, 误分类的次数是有上限的, 经过有限次搜索可以找到将训练数据完全正确分开的分离超平面.
8 练习题
这里有个数据集, 一个是训练数据(500条记录), 一个是测试数据(500条记录), 大家可以用训练数据训练出一个感知机模型, 然后再用测试数据测试一下模型在测试数据上的效果, 测试的结果采用误分类点的比例.
9 参考资料
- 统计学习方法 李航著
- 机器学习基石
- 机器学习 Tom M.Mitchell 著