罚广义线性模型:LASSO vs 岭回归
-
3 罚广义线性模型 51
install.packages("lars") install.packages("ridge")
(1) OLS回归
library(ridge) data(GenCont) model.ols <- lm(Phenotypes ~ ., data = as.data.frame(GenCont)) summary(model.ols)
提取回归系数
coef.ols <- coef(model.ols)
查看不等于0的回归系数
coef.ols[coef.ols!=0]
(2) ridge regression(岭回归)
model.rid <- linearRidge(Phenotypes ~ ., seq(0, 10, length = 100), data = as.data.frame(GenCont))
查看结果
summary(model.rid)
提取系数
coef返回的是标准化系数; 直接输入model.rid返回的是原始数据系数 coef.rid <- coef(model.rid) model.rid2 <- linearRidge(Phenotypes ~ ., data = as.data.frame(GenCont)) summary(model.rid2) coef.rid <- coef(model.rid2)
查看不等于0的系数
coef.rid[coef.rid!=0]
(3) 做 lasso regression
模型设定
library(lars) dt<-as.matrix(GenCont) X<-dt[,-1] Y<-dt[,1] model.lasso1 <- lars(X, Y) model.lasso2 <- lars(X, Y, type='lasso') model.lasso3 <- lars(X, Y, type='for') # Can use abbreviations
看变量选入顺序
model.lasso3 summary(model.lasso3)
Cp的含义:衡量多重共线性,其取值越小越好,这里取到第3步使得Cp值最小
画个图
plot(model.lasso3) set.seed(12345)
做交叉验证
CV.lasso <- cv.lars(X, Y, K=10) (best <- CV.lasso$index[which.min(CV.lasso$cv)])
选择最好的效果
(coef.lasso <- coef.lars(model.lasso3, mode='fraction', s=best))
命名
names(coef.lasso) <- colnames(dt)[-1]
查看结果
coef.lasso[coef.lasso!=0]
-
- 为什么用Penalized regression而不是普通的OLS回归?它究竟有什么好处?
- Lasso regression和ridge regression有什么区别?
用罚回归(Penalized regression)的原因
罚回归主要用来解决两个问题:一个是过拟合(over fitting),一个是特征(feature)的多重共线性。
普通的OLS模型如下所示:
$y = \beta_0 + \beta_1 \times x_1 + \beta_2 \times x_2 + ... \beta_n \times x_n +e$其中
- $y$是因变量(dependent variable)
- $x_i$ $i=1,2,...n$ 是自变量
- $\beta_i$ $i=0,1,2,...n$ 是系数
- e 是残差项
OLS算法要做小化残差平方和 $\sum_{i=1}^{i=n}(y-\hat{y})^2$,这个函数也可以看作OLS的损失函数(loss function)
过拟合
但是这个模型可能有过拟合的问题,过拟合就意味着一些特征是不需要的。因此,需要把一些特征剔除或者让它们的系数越小越好。
因此,如果能够在原本的损失函数(loss function)的基础上,加上一个惩罚项$f(\beta)$,使得这个损失函数能够随着$\beta$的增加而增加就好了。
罚回归和普通回归最大的区别就是在损失函数上加上了惩罚项。
多重共线性
罚回归可以解决多重共线性的问题。
Lasso regression和Ridge regression
Lasso regression和Ridge regression的区别在于它们对于惩罚项的定义不同。
Lasso regression用的是l1-norm,Ridge regression用的是l2-norm。
l1-norm是$\beta$绝对值的和,l2-norm是$\beta$的平方和。用公式写出来的话,就是-
l1-norm: $f(\beta) = ||\beta||_1 = \sum|\beta|$
-
l2-norm $f(\beta) = ||\beta||_2^2 = \sum\beta^2$
所以Lasso和Ridge的损失函数分别是
$\sum_{i=1}^{i=n}(y-\hat{y})^2 + \lambda \sum|\beta|$$\sum_{i=1}^{i=n}(y-\hat{y})^2 + \lambda \sum\beta^2$
$\lambda$参数代表惩罚程度的高低。
- 当$\lambda$过高时,最后得到的模型就会过于简单。
- 当$\lambda$过低时,最后得到的模型就会过于复杂,相当于没有解决过拟合问题。
Lasso和Ridge在实践过程中最大的区别是:Lasso求得的损失函数最小值点会让一些$\beta$系数直接变成0,然而Ridge求得的损失函数最小值点虽然会让一些$\beta$系数变得很小,但是一般不会减小到0。
因此Lasso回归还有选择特征的作用。当特征很多时,Lasso回归的表现往往更好。
但是Lasso在两种情况下表现较差:
- 特征很多,观测值(observations)很少的时候。极端情况下是观测值小于特征数。此时,Lasso回归选择的参数不会多于观测值的个数。
- 变量高度相关的时候,Lasso只会选择高度相关变量中的一个而忽略其它变量。
Elastic Net
为了解决Lasso和Ridge回归的缺点,可以使用Elastic Net回归,Elastic net结合了Lasso和Ridge两者的惩罚项。
Elastic net的惩罚项是:
$f(\beta) = \lambda_1 ||\beta||_1 + \lambda_2 ||\beta||_2^2$- 当$\lambda_1 = \lambda, \lambda_2 =0的时候,它是Lasso 回归$
- 当$\lambda_2 = \lambda, \lambda_1 =0的时候,它是Ridge 回归$
参考文献:
https://en.wikipedia.org/wiki/Elastic_net_regularization
-
为什么用Penalized regression前需要对变量做标准化(standardization)
惩罚项是不对任何参数区别对待的。但是当一个变量取不同的量纲时,其参数的估计值自然也不一样。在这种情况下,惩罚项就会更多的“惩罚”大参数。
为了避免这种情况,需要对变量进行标准化,让它们有相同的量纲。
这里介绍两种标准化的方法,分别对应sklearn包中的StandardScaler和MaxminScaler
-
StandardScaler:变量减去均值除以标准差。用Standard Scaler还有能够简化计算的优点。
-
MaxminScaler:有时也叫做Normalization(注:这个词有多重意思)。把变量缩小到0和1之间。
用哪种最好目前说法不一。实际操作中最好两者都进行尝试。根据结果选择最好的方法。
-
-
感谢老师!我加一点理论知识,有时间把相对应的python代码传上来。
-
为什么penalized regression可以解决多重共线问题我还没有想明白,欢迎大家补充
-
Ridge罚回归的贝叶斯解释: Bayesian interpretation of regularization
普通OLS回顾
对于普通的OLS回归,当假设残差项为正态分布时,我们可以把它算作MLE(Maximum likelihood regression)
$y = \beta_0 + \beta_1 \times x_1 + \beta_2 \times x_2 + ... \beta_n \times x_n +e$
($\beta_0 + \beta_1 \times x_1 + \beta_2 \times x_2 + ... \beta_n \times x_n$用向量表示的话就是 $X\beta$)
$\text{Likelihood}: L(\beta|X) = p(Y|X, \beta)$
MLE的任务就是要最大化likelihood。
因为$e\text{服从} N(0, \sigma_e^2)$, 所以
$y \text{服从} N(X\beta, \sigma_e^2 I)$因此, likelihood 可以表示为
$\text{Likelihood} ~ N(X\beta, \sigma_e^2 I) \propto exp(-\frac{1}{2\sigma_e^2}||Y-X\beta||^2)$
所以得出结论:需要找到让$||Y-X\beta||^2$最小的$\beta$
罚回归
这里要引入MAP的概念(maximum a posteriori estimate),是指最大化后验分布概率
罚回归相当于我们假设$\beta$的先验分布是正态分布$N(0, \tau^2 I)$其中$\tau$是未知常量
根据贝叶斯公式,可以得到
$p(\beta|X,Y) \propto p(Y|X, \beta) p(\beta)$
$\text{Likelihood} \propto exp(-\frac{1}{2\sigma_e^2}||Y-X\beta||^2) \times exp(-\frac{1}{2\tau^2}||\beta||_2^2)$
最大化likelihood就是最小化$||Y-X\beta||^2+\frac{\sigma_e^2}{\tau^2}||\beta||_2^2$
其中$\frac{\sigma_e^2}{\tau^2}$就是参数$lambda$
-
此回复已被删除!