一、说明
本章主要讲述一些用于回归的方法,如果需要使用广义线性模型进行分类,请使用Logistic回归。
二、符号说明
X: 训练集
三、普通最小二乘法
普通最小二乘法拟合一个带有系数的线性模型,使得目标值和预测值之间的残差平方和最小,其数学表达式为:
3.1、普通最小二乘法示例
普通最小二乘法优势:简单,易于实现。
普通最小二乘法缺点:普通最小二乘法的系数估计依赖于各个特征的相互独立性。当各个特征相关时,样本集合X所构成的矩阵会趋向于奇异矩阵,那么这种模型对于随机误差会非常敏感,可能产生很大的方差。比如,我们将最右下角的点重新设为(5,20),拟合直线会产生较大波动。
3.2、普通最小二乘法的复杂度
由于对X矩阵进行奇异值分解,假设矩阵大小为,当时,该方法的复杂度为。
四、岭回归
岭回归通过对系数施加惩罚来解决最小二乘法的缺点,其数学表达式为:
4.1、岭回归示例
从岭回归模型可以看出来岭回归具有较好的鲁棒性。
4.2、岭回归复杂度
岭回归只是在普通最小二乘法的基础上增加了惩罚项,所以它的复杂度与普通最小二乘法一样。
4.3、设置α参数:广义交叉验证
广义交叉验证是一种有效的留一验证,如果我们将超参数值cv修改为10,则广义交叉验证变为10折交叉验证。
如果将最后一个点的y值设置更大点,普通最小二乘法与岭回归的对比效果可能会更明显点。
五、Lasso回归
Lasso回归利用坐标下降法拟合稀疏系数的线性模型,即它设定一些系数为0,倾向于使用较少参数值的情况,有效的减少所依赖的特征数量。它的最小化目标函数为:
5.1、Lasso回归示例
随机生成的回归数据集,利用Lasso回归,我们可以看看它最终的权值向量(由于特征过多,给出部分):
最后权值向量中非0元素只有10个,意味着我们可以只用其中对应的10个特征来训练数据集就可以得到一个很好的模型,Lasso回归的效果应该不言而喻了吧。
5.2、使用交叉验证
对于Lasso回归来说,有两种交叉验证函数,一种是LassoCV,还有一种是LassoLarsCV(就是下面要说的最小角回归)。根据官网API的说明,当样本数量比特征数量少的多时,LassoLarsCV更快,通常,远小于的标准为。
5.3、与SVM正则化参数的比较
或者
六、弹性网络
弹性网络是一种使用L1、L2范数作为先验正则项的线性回归模型,这种组合既可以像Lasso一样允许拟合到只有少量参数的非零稀疏模型,也可以像Ridge一样保持它的可导性质。弹性网络在特征相互联系下是很有用的。它的最小化目标函数为:
其中,,那么这个式子就转换为了带罚项的目标函数。
6.1、弹性网络示例
与Lasso回归的数据集一样,我们看看弹性网络的效果。(由于特征过多,博主只给出部分)
经检验,最后弹性网络权值向量中非0元素占了2111个。那么它和Lasso回归相比,哪个效果更好一点呢?
我们利用分数来进行对比:
差距挺大,问题出在哪?经过博主的不断查找,总结有两点原因:1、我们的决定系数,分数高不一定说明每个回归系数都可信任,换句话说,从5000维降到2111维可能比从5000维降到10维的权值更可信一点。2、我们选取的数据为维,对于这样的高维数据,并且参杂着一半的噪声的数据,Lasso可能更适合一点。
七、最小角回归
LARS也是一种对高维数据的回归算法,这里我们只介绍它的主要优点和缺点:
优点:
1、当p>>n时,该算法运算更快。
2、它拥有和普通最小二乘法相同的复杂度(如果数据集的n和p都不是非常大的话的确算个优点)。
缺点:
对噪声非常敏感(博主认为这个缺点很致命),我们不妨看看它对噪声到底有多敏感:
我们将回归数据集的一半替换为噪声,我们看看它与Lasso的效果差别:
当然,在不同的数据集中会有不同的结果,如果你觉得结果能在你的容许范围内,想要换取更快的时间,那么就用最小角回归。
博主想把广义线性模型分为两部分,毕竟量太多,博主也需要时间去思考。博主认为对于绝大多少机器学习者来说,应该将重点放在业务上,知道何时用什么模型,理论给予我们的是:当模型出现问题的时候,我们能够通过理论迅速定位问题出在哪里。最后,如有错误,请指正;如有疑问,请留言。
参考:《Scikit-learn文档》