上次介绍了应用于二元分类问题的二项逻辑回归模型,相信大家对逻辑回归的理论基础已有一定的了解。然而实际应用中遇到的往往是多元分类问题,如果仅能处理二元分类问题的话,模型的实用性将大打折扣。为了使模型可以应用于多元分类场景,本次向大家分享二项逻辑回归的加强版——Softmax Regression。
Softmax Regression与二项逻辑回归的分类原理基本一致,只是目标变量由二项分布变成了多项分布,因此只需对模型稍加改造即可得到Softmax Regression模型。
模型定义
输入向量维度:I
输出分类个数:K
权值矩阵:
截距向量:
训练样本编号:
第n个样本输入变量:
第n个样本目标变量:
假设目标变量的取值集合是,那么Softmax Regression模型是
同样采用极大似然估计的方法做参数估计,定义函数,
模型似然值
模型对数似然值
损失函数
正则化
为了增强模型稳定性,防止过拟合情况出现,可以在损失函数中加入正则项进行修正。
损失函数一阶偏导数
权值向量及截距项更新程序(Java)
小试牛刀
为了方便对比,采用上次神经网络识别手写数字的数据进行测试。
样本描述
训练样本包括0,1,2,3,4五个数字及其像素矩阵。每个数字对应训练样本与测试样本数量如下表:
测试结果如下:
相比上篇文章介绍的BP神经网络模型,虽然模型复杂度有所降低(从模型结构上看,相当于去掉隐含层的神经网络),但是训练精度确没有下降,甚至训练效率还有所提高。
注:详细的数据集信息请参见本公众号的另一篇文章:《基于BP神经网络的手写数字识别》,数据下载地址如下:
http://yun.baidu.com/s/1nt3UewD 。
小结
如果有些输入变量为定类或者定序的离散型变量,则必须将其转换成虚拟变量。当某一自变量有m个取值时,需要设定m-1个虚拟变量。即假设有输入变量年龄,取值为{儿童,青年,中年,老年},则会生成3个虚拟变量,分别为儿童、青年、中年。转换规则如下:
关于模型的正则化与过拟合,在此可以简要介绍一下。模型的泛化误差通常可以分解为Bias与Variance两部分,其中Bias表示模型在训练样本上的误差,而Varience表示模型本身的稳定性。一般来说,如果要降低模型的Bias,就会在一定程度上提高模型的Varience,反之亦然。造成这种现象的原因,是我们在建模的时候总是希望试图用有限的训练样本去估计无限真实的数据。如果我们更相信训练数据的真实性,而忽略对模型的先验知识,就会尽量保证模型在训练样本上的准确性,这样可以减少模型的Bais。但是这样的学习模型,很可能会是去一定的泛化能力,从而造成过拟合,增强模型的不确定性。相反如果更加相信我们对于模型的先验知识,在参数学习的过程中对模型加入过多的限制,则可以降低模型的Varience,增强模型稳定性,但是会导致模型的Bias增大。
在本文中,添加正则项,实际上相当于给模型的参数添加了一个协方差为1/η的零均值高斯分布先验。对于η=0,也就是不添加正则化约束,相当于参数的高斯先验分布有着无穷大的协方差,那么这个先验约束则会变得非常弱,模型为了降低Bais,参数可以变得任意大。η越大,表明先验的高斯分布协方差越小,模型越稳定,但是模型的Bais会增大。因此,为了增强模型的实用性,需要选取适当的η来均衡Bais和Varience。
梯度下降法虽然可以令模型收敛,但是通常学习步长的选择需要依赖一定的经验,学习步长设置太大可能导致不收敛,设置太小又会导致收敛太慢,很难找到一个十分恰当的值可以应用于所有的数据集。除了梯度下降之外,还有另外几种常用的凸优化方法可以用来求解参数。
1)Conjugate Gradient(共轭梯度法)
2)BFGS(拟牛顿法)
3)L-BFGS(Limited-Memory BFGS)
因为好多机器学习算法的参数训练最终都会转化成凸优化问题,以后有机会可以考虑开一个专题和大家一起讨论一下凸优化算法。所谓“工欲善其事必先利其器”,如果对凸优化算法有了较为深刻理解的话,学习机器学习必然会事半功倍。废话不再多说,敬请期待《Logistic回归第三弹——共轭梯度法求解Softmax Regression》!