岭回归、Lasoo 回归可以理解为改良版的线性回归。本文主要概述下这两种回归的特点,以及其 scikit-learn 接口的使用:
- 岭回归
- Lasso 回归
1. 岭回归
岭回归,又称脊回归、吉洪诺夫正则化(Tikhonov regularization),是对不适定问题(ill-posed problem)进行回归分析时最经常使用的一种正则化方法。适定问题指的是满足以下条件的问题:
① 解是存在的
② 解是唯一的
③ 解是稳定的
对于有些矩阵,矩阵中某个元素的一个很小的变动,会引起最后计算结果误差很大,这种矩阵称为 “病态矩阵”。
最小二乘法无偏估计根据训练样本的数据分布来计算参数,有时样本集中包含一些噪声数据,此时会影响到最优参数计算。岭回归通过放弃最小二乘的无偏性,以损失部分信息、降低精度为代价获得一个更为符合实际、更可靠的参数。
所以,岭回归对存在共线性问题和病态数据偏多的数据集的拟合效果往往强于普通的最小二乘法。
岭回归是通过给损失函数增加 L2 正则化项来实现无偏的参数估计方法,其损失函数如下:
m 表示特征权重的个数,w 为每一个特征的权重值,α 为惩罚系数。通过公式,我们可以发现,正则化项会增加损失函数的值,特别是当 w 越大、越不平衡时,会极大增加损失函数。
假设:我们有两个模型,其损失函数值假设都一样。但是:
① 模型1的权重值为:[1, 0, 0, 0]
② 模型2的权重值为:[0.25, 0.25, 0.25, 0.25]
则模型 1 的正则化项增加的损失值为:1,模型 2 增加的损失值为:0.25。显然,模型 2 的整体损失值更小一些。但是,并不能说,模型 2 的实际泛化性能一定由于模型 1,只是模型 2 的权重系数可能会更合理一些,但是可能预测精度相对会低一些。
模型 1 的参数值如此不平衡,也说明也说明了其可能过于依赖于某些特征,导致模型的泛化能力不佳。
在 scikit-learn 中岭回归的接口如下:
from sklearn.linear_model import Ridge Ridge(alpha=1.0, fit_intercept=True, solver="auto", normalize=False)
- alpha 为 L2 正则化项的惩罚系数
- fit_intercept 表示是否计算偏置
- solver 使用的损失函数优化方法
- normalize 是否对训练数据进行标准化
2. Lasso 回归
LASSO(Least absolute shrinkage and selection operator,最小绝对收缩和选择)是由 1996 年 Robert Tibshirani 首次提出。
Lasso 回归通过在损失函数增加一个 L1 正则化惩罚项,强制某些特征权重值的绝对值之和小于某个固定值,同时设定一些特征权重值为零,从而得到一个较为精炼的模型。Lasso 是一种对存在多重共线性数据的有偏方法。
此处多重共线性指的是,当自变量的个数很多,且相互之间相关很高(变量之间存在近似的线性关系)时,由样本估计的回归系数的精度显著下降的现象。
根据 Lasso 回归的特点,其可以用来做特征选择。
Lasso 回归表示公式如下:
在 scikit-learn 中 Lasso 回归的接口如下:
from sklearn.linear_model import Lasso Lasso(alpha=1.0, fit_intercept=True, normalize=False)
- alpha 为 L2 正则化项的惩罚系数
- fit_intercept 表示是否计算偏置
- normalize 是否对训练数据进行标准化
- positive 是否强制要求权重向量值都为正数
至此,本文暂时结束,后续再补充案例。