练习:感知机算法
感知机算法是 <统计学习方法> 这本书讲的第一个机器学习算法,据说是最简单的机器学习算法。这里参考书中的例子,使用程序实现该算法,以便加深理解。
感知机学习算法是误分类驱动的,可采用随机梯度下降法求解。
原始形式
算法介绍
具体来讲,先任意选择一个超平面 (参数为向量
该目标函数的梯度为
沿梯度的相反方向移动可使梯度减小,这就是梯度下降的含义。所谓随机梯度下降,就是每次随机选择一个误分类点使变量的梯度下降,与此相对的是批梯度下降法。
随机梯度下降的更新规则如下
算法分析
原始形式的训练过程如下
- 选取初始参数值
- 在训练集中选取样本数据
- 如果
则更新参数值 - 转到第 2 步继续,直到训练集中没有误分类点
由训练过程可知,该算法的核心包括两部分
- 误分类点的判定
- 参数值的更新
下面通过 java 程序实现该算法
算法实现
问题:训练集包含正样本
样本定义
这里仅用于演示算法,故暂不考虑扩展性。
1 | /** |
参数 w 和 b
同样,定义参数 w 和 b 的数据结构
1 | /** |
误分类点判定
其实就是计算样本点到分离超平面的函数间隔
1 | /** |
参数的更新
如果当前选择的样本点是误分类点,则使用该样本更新参数值
1 | /** |
训练
有了以上这些,我们就可以实现感知机算法了。实现的思路是:
- 设置误分类标记为 False (表示这一次循环开始啦),对样本集进行遍历,检查样本是否误分类。
- 如果误分类则更新参数值,同时误分类标记置为 True (表示存在误分类情况)。
- 检查误分类标记,如果为 False 则结束
重复上述动作,直到退出循环。具体代码如下
1 | for (int i = 0; i < 100; i++) { |
对样本集进行训练,训练结果如下
1 | 第1次更新:Example{name='x1', x1=3.0, x2=3.0, y=1.0}, Parameter{w1=0.0, w2=0.0, b=0.0} |
可以看到每一次更新参数时使用的样本,以及更新后的结果。最终的参数结果为
分离超平面为
感知机模型为
完整代码
1 | /** |
对偶形式
感知机学习算法的对偶形式基本思想是,将 w 和 b 表示为实例
算法介绍
仍按照原始形式对参数 w 和 b 进行更新
假设更新了 n 次。对于样本
其中
可以想象,样本点距离分离超平面越近,则每次更新越有可能导致该样本点被误分类,从而使其更新的次数增多。也就是说样本点距离分离超平面越近,它对学习的结果影响越大 (这种样本点更有可能是 SVM 中的支持向量)
算法核心如下
- 误分类点判断
其中
- 更新规则
b 的更新规则不变。w 的更新规则变成
算法实现
参数定义
首先要修改参数定义,将 w 改为
1 | /** |
Gram 矩阵计算
本例中的 Gram 矩阵如下 (比如第一行第二列表示
代码如下
1 | /** |
误分类判断
若
1 | /** |
参数更新
更新规则如下
1 | /** |
训练
训练过程和之前类似,区别是这里需要用到下标 i
1 | for (int count = 0; count < 100; count++) { |
参数转换
使用对偶形式训练出结果后,还需要转换成 w 和 b
1 | /** |
训练结果
1 | 第1次更新:Example{name='x1', x1=3.0, x2=3.0, y=1.0}, ParameterDual{alpha=[0.0, 0.0, 0.0], b=0.0} |
可以看出,该训练步骤和原始形式相对应
完整代码
1 | /** |
说明
以上代码可到 https://github.com/gorden5566/machine-learning 下载
参考
- 2018-07-19
本节首先介绍函数间隔和几何间隔的概念,进而引出最优间隔分类器和拉格朗日对偶,最后介绍核函数和 SMO algorithm
- 2018-07-07
二分类 (binary classification) 是最简单的一种分类问题,
的取值只有两种:0 和 1,对应的样本分别称为负样本和正样本。逻辑回归 (Logistic regression) 可用于处理二分类问题。 - 2018-05-20
升级了 theme-next 主题,开启了 Mathjax 功能,测试下书写公式,先来个看看
- 2018-07-08
前两节分别介绍了一个回归模型和一个分类模型,其中线性回归中假设概率分布为
,二分类中假设概率分布为 。这两种模型都是广义线性模型 (Generalized Linear Models) 的特殊情况。 - 2018-08-05
对于线性可分的数据集,感知机学习算法的原始形式是收敛的。也就是说,经过有限次的迭代,可以找到一个将数据集完全正确划分的分离超平面。
预览: