其他线性模型
- 1 共线性与L2正则化
- 2 Lasso回归
- 3 多任务Lasso回归
- 4 弹性网络
- 5 随机梯度下降
- 6 回归模型的评价标准
- 7 岭回归交叉验证
- 8 岭回归调参
1 共线性与L2正则化
L2正则化,可以使系数w的绝对值变小,使对应的特征项对结果的影响变小。如果数据没有问题,多元线性回归和多项式回归中,才有使用正则化的必要,一元线性回归不需要L2正则化。
在岭回归中,经常能看到共线性(collinearity)这个词,其实就是特征之间线性相关。
这里假如m表示样本数量,n表示特征数,那么均为列向量,若
线性相关,则说明特征之间存在共线性。
因此当特征之间存在共线性时,X不可逆,也不可逆,那么正规方程
就不能使用,L2正则化,就是为了解决这个问题而诞生的,即令
I是单位矩阵,λ是超参数
在线性回归的损失函数中,添加一个L2正则化项,即为岭回归的损失函数,为
对J2(θ)求导
其中,J1(θ)是没加L2正则化项时的损失函数,即
当时,
具体过程详见这篇知乎文章:https://zhuanlan.zhihu.com/p/32488420
2 Lasso回归
岭回归是在构建损失函数的时候,在普通线性回归损失函数的基础上加上L2正则化项,如果加的不是L2正则化项,而是L1正则化,那么就是Lasso回归。
关于L1正则化,详见这篇知乎文章:https://zhuanlan.zhihu.com/p/38309692
Lasso回归的目标函数为:
3 多任务Lasso回归
先说一下何为多任务,如果要用同一条数据做多个预测,比如用一个人的身高、体重预测他的体脂率、血压、血糖等信息,这就是多任务,说白了,就是目标值不止一个。
而多任务Lasso回归,其实就是对每个目标值都用Lasso回归进行预测。
多任务Lasso回归的目标函数:
这里Fro表示弗伦尼乌斯范数
正则化项为L1和L2的混合范数
4 弹性网络
弹性网络的正则化项综合了L1和L2范数,其目标函数为
5 随机梯度下降
随机梯度下降,在每次迭代参数时,都只使用一个样本,而非遍历所有训练样本,这样与普通梯度下降比起来,计算量就会小很多,从而使得参数快速接近局部最优解。但随机梯度下降仅以当前样本点进行梯度更新,通常无法达到真正局部最优解,只能比较接近,属于用精度换效率。
sklearn.linear_model.SGDRegressor()
可以通过参数,指定正则化方法(L1,L2,elasticnet等),学习率是常数还是衰减(如果要指定学习率是多少,那么learning_rate=‘constant’ 而非具体的值,eta0才是指定具体的值),是否早停等。关于参数的详细说明,请查阅scikit-learn官方文档(这个还是去读源文档吧,一个个介绍参数真的太花时间,但这个方法中不少参数确实有必要看)。
关于在函数中出现参数 * ,可以阅读这个问题下的回答:https://www.zhihu.com/question/287097169
6 回归模型的评价标准
在回归问题中,不能再像分类一样用准确率来估计误差,sklearn中自带的评价标准为R^2
如果不建模,直接用训练集目标值的平均值进行估计(暴力估计),假如 y_i 为真实值,那么误差平方和为
建模之后,根据模型的预测值来估计,那么误差平方和为
我们做优化/升级的时候,喜欢使用“经过优化(升级、改造)后,成本(效率)仅仅相当于原来的50%,30%”之类的术语,其实就是优化后的成本除以优化前的。我们把这种思路引入到模型评价上来,使用模型估计的误差,除以暴力估计的误差,那么也就可以用前面的术语了:建模后的误差为原来的百分之几了。
如果要计算建模后的误差相对于建模前降低了多少,那么可以用1减上面的数,得到:
此即为R^2,即
当 R^2 越大,表示回归效果越好。
为何不用均方差来作为模型评价的标准,可以看这篇知乎专栏:https://zhuanlan.zhihu.com/p/158817889?utm_source=wechat_session
在sklearn的线性回归模型中,默认使用 R^2 作为模型的评价标准
可以看到,使用线性回归模型自带的score方法得到的分数,和自己按照 R^2 定义计算得到的,完全一样
7 岭回归交叉验证
alpha是正则化力度的候选值np.logspace()是获取一个在log尺度上等距分布的序列,即等比数列
8 岭回归调参
输出
调整 alpha 的时候,选择绿色范围,这样的话,通过调整 alpha,线性模型的系数有变化,但又不至于波动太大。