其他线性模型

  • 1 共线性与L2正则化
  • 2 Lasso回归
  • 3 多任务Lasso回归
  • 4 弹性网络
  • 5 随机梯度下降
  • 6 回归模型的评价标准
  • 7 岭回归交叉验证
  • 8 岭回归调参


1 共线性与L2正则化

L2正则化,可以使系数w的绝对值变小,使对应的特征项对结果的影响变小。如果数据没有问题,多元线性回归和多项式回归中,才有使用正则化的必要,一元线性回归不需要L2正则化。

在岭回归中,经常能看到共线性(collinearity)这个词,其实就是特征之间线性相关。

线性回归和岭回归 岭回归共线性_机器学习

这里假如m表示样本数量,n表示特征数,那么线性回归和岭回归 岭回归共线性_Lasso_02均为列向量,若线性回归和岭回归 岭回归共线性_Lasso_02线性相关,则说明特征之间存在共线性。

因此当特征之间存在共线性时,X不可逆,线性回归和岭回归 岭回归共线性_岭回归_04也不可逆,那么正规方程线性回归和岭回归 岭回归共线性_机器学习_05就不能使用,L2正则化,就是为了解决这个问题而诞生的,即令线性回归和岭回归 岭回归共线性_岭回归_06I是单位矩阵,λ是超参数

在线性回归的损失函数中,添加一个L2正则化项,即为岭回归的损失函数,为

线性回归和岭回归 岭回归共线性_正则化_07


对J2(θ)求导

线性回归和岭回归 岭回归共线性_岭回归_08

其中,J1(θ)是没加L2正则化项时的损失函数,即

线性回归和岭回归 岭回归共线性_机器学习_09


线性回归和岭回归 岭回归共线性_岭回归_06时,

线性回归和岭回归 岭回归共线性_岭回归_11


具体过程详见这篇知乎文章:https://zhuanlan.zhihu.com/p/32488420

2 Lasso回归

岭回归是在构建损失函数的时候,在普通线性回归损失函数的基础上加上L2正则化项,如果加的不是L2正则化项,而是L1正则化,那么就是Lasso回归。

关于L1正则化,详见这篇知乎文章:https://zhuanlan.zhihu.com/p/38309692

Lasso回归的目标函数为:

线性回归和岭回归 岭回归共线性_正则化_12

3 多任务Lasso回归

先说一下何为多任务,如果要用同一条数据做多个预测,比如用一个人的身高、体重预测他的体脂率、血压、血糖等信息,这就是多任务,说白了,就是目标值不止一个。

而多任务Lasso回归,其实就是对每个目标值都用Lasso回归进行预测。

多任务Lasso回归的目标函数:

线性回归和岭回归 岭回归共线性_正则化_13


这里Fro表示弗伦尼乌斯范数

线性回归和岭回归 岭回归共线性_岭回归_14


正则化项为L1和L2的混合范数

线性回归和岭回归 岭回归共线性_线性回归和岭回归_15

4 弹性网络

弹性网络的正则化项综合了L1和L2范数,其目标函数为

线性回归和岭回归 岭回归共线性_正则化_16

5 随机梯度下降

随机梯度下降,在每次迭代参数时,都只使用一个样本,而非遍历所有训练样本,这样与普通梯度下降比起来,计算量就会小很多,从而使得参数快速接近局部最优解。但随机梯度下降仅以当前样本点进行梯度更新,通常无法达到真正局部最优解,只能比较接近,属于用精度换效率。

sklearn.linear_model.SGDRegressor()

线性回归和岭回归 岭回归共线性_机器学习_17


可以通过参数,指定正则化方法(L1,L2,elasticnet等),学习率是常数还是衰减(如果要指定学习率是多少,那么learning_rate=‘constant’ 而非具体的值,eta0才是指定具体的值),是否早停等。关于参数的详细说明,请查阅scikit-learn官方文档(这个还是去读源文档吧,一个个介绍参数真的太花时间,但这个方法中不少参数确实有必要看)。

关于在函数中出现参数 * ,可以阅读这个问题下的回答:https://www.zhihu.com/question/287097169

6 回归模型的评价标准

在回归问题中,不能再像分类一样用准确率来估计误差,sklearn中自带的评价标准为R^2

如果不建模,直接用训练集目标值的平均值进行估计(暴力估计),假如 y_i 为真实值,那么误差平方和为

线性回归和岭回归 岭回归共线性_正则化_18


建模之后,根据模型的预测值来估计,那么误差平方和为

线性回归和岭回归 岭回归共线性_Lasso_19


我们做优化/升级的时候,喜欢使用“经过优化(升级、改造)后,成本(效率)仅仅相当于原来的50%,30%”之类的术语,其实就是优化后的成本除以优化前的。我们把这种思路引入到模型评价上来,使用模型估计的误差,除以暴力估计的误差,那么也就可以用前面的术语了:建模后的误差为原来的百分之几了。

线性回归和岭回归 岭回归共线性_机器学习_20

如果要计算建模后的误差相对于建模前降低了多少,那么可以用1减上面的数,得到:

线性回归和岭回归 岭回归共线性_机器学习_21


此即为R^2,即

线性回归和岭回归 岭回归共线性_岭回归_22


当 R^2 越大,表示回归效果越好。

为何不用均方差来作为模型评价的标准,可以看这篇知乎专栏:https://zhuanlan.zhihu.com/p/158817889?utm_source=wechat_session

在sklearn的线性回归模型中,默认使用 R^2 作为模型的评价标准

线性回归和岭回归 岭回归共线性_岭回归_23


线性回归和岭回归 岭回归共线性_正则化_24


可以看到,使用线性回归模型自带的score方法得到的分数,和自己按照 R^2 定义计算得到的,完全一样

7 岭回归交叉验证

线性回归和岭回归 岭回归共线性_Lasso_25


alpha是正则化力度的候选值np.logspace()是获取一个在log尺度上等距分布的序列,即等比数列

线性回归和岭回归 岭回归共线性_线性回归和岭回归_26

8 岭回归调参

线性回归和岭回归 岭回归共线性_机器学习_27


输出

线性回归和岭回归 岭回归共线性_岭回归_28


调整 alpha 的时候,选择绿色范围,这样的话,通过调整 alpha,线性模型的系数有变化,但又不至于波动太大。