上次的文章《入门感知机:一种二分类模型》中我们讲述了感知机的背景、模型定义、学习策略。
本次将继续讲解将如何通过学习算法建立模型,并给出案例。
下一次将给出案例的完整计算过程帮助理解,并用pyhon代码跑通一个完整的感知机模型。
正式开聊,上花生毛豆啤酒?,世界杯决赛下菜。
常用的两种算法:原始形式的随机梯度下降法;对偶形式的随机梯度下降法。
原始形式的随机梯度下降法
上次说到,感知机的算法就是最小化误分类点到超平面的总距离。即寻找下式的损失函数最小化问题:
随机梯度下降算法
首先,任意选取一个超平面w0,b0,然后用梯度下降法不断地极小化目标函数。极小化过程不是一次使所有误分类点的梯度同时下降,而是一次随机选取一个误分类点使其梯度下降。
伪代码描述
伪代码引用自:李航,《统计学习方法》
通俗的解释一下
- 我们的目标是找出可以使损失函数最小的w和b的取值;
- 一开始先瞎猜一个,比如都是0;
- 然后随便选一个训练样本,计算损失函数的值;
- 如果是误分类情况,则对w和b进行更新,更新规则通过学习率参数和样本点计算;
- 如果分类正确,则遍历其他样本点,直到对所有的样本点都分类正确;
- 此时的w和b所确定的感知机模型就确定了,可以对所有训练样本正确分类;
- 聪明的你应该知道,其实故事还没有结束,因为不代表对新的验证样本分类一定正确,这是一个关于模型泛化能力的问题,或者叫过拟合问题,以后我们再深入探讨。可以先记住的是,对于训练样本分类精确不一定对所有样本的分类精度很好。
对偶形式的随机梯度下降法
所谓对偶形式,本质上还是随机梯度下降算法,区别在于通过矩阵的形式大大降低了计算量,使得算法效率更高,更具有实用性。在支持向量机中的算法同样有原始形式和对偶形式两种。
核心点在于将w和b的初始值设定为0,此后对参数的更新可以转换为对一个矩阵的查表计算,我们管他叫Gram矩阵,这个矩阵可以预先计算好。该矩阵是对训练样本的内积计算的集合,以矩阵的形式存储起来。形式如下:
图片引用自CSDN博客:https://blog.csdn.net/wangyang20170901/article/details/79037867
算法的伪代码
伪代码引用自知乎:https://www.zhihu.com/question/26526858
通俗的解释一下
对于原始形式的学习算法有一种更加简便的计算方法,那就是先求出所有训练样本点的内积矩阵,然后将每一次的更新计算变成查表计算,大大提升计算效率。算法的本质并没有区别。
算法收敛性的证明
算法的收敛性指的是:对于线性可分数据集感知机学习算法原始形式收敛,即经过有限次迭代可以得到一个将训练数据集完全正确划分的超平面及感知机模型。
整个证明是关于Novikoff定理的证明。贴在下面供有兴趣的同学参考,由于数学性比较强,适合偏理论的同学研究,这里不做解释了。
可以简单记住,感知机对于线性可分数据集的分类能力是有理论支撑的,即理论上所有线性可分数据集都可以通过感知机进行分类,这件事情是肯定走得通的。感知机的整个迭代过程是不是无限的,而是有限次数的,经过有限次的搜索是可以找到将训练数据完全正确分开的分离超平面。
证明过程省略,具体参见李航老师的《统计学习方法》。
举个栗子:股价预测
我们有一只股票(市盈率,每股净收益)的4个样本点:x1(20,2),x2(50,1),x3(10,3),x4(60,0.5)。其所属类别(一年后上涨,一年后下跌)为:{1,-1,1,-1},中1代表上涨,-1代表下跌。如下图所示。我们用感知机模型来做分类,对不同股票的上涨和下跌趋势进行分类预测。
未完待续
这个例子就是典型的数据分类问题,当然股价预测也没有这么简单了,我们假设是线性可分数据集而已。
这次就留作作业吧,求一下感知机模型。下一次我们把整个建模过程及代码进行详细讲解。