正则化技术(lasso, 岭回归, 弹性网络)-特征筛选
正则化技术
- 对于高维数据,普通的变量筛选方法并不见效,或者可能需要消耗高昂的计算机算力成本。
- 普通方法难以避免模型的过拟合,及多重共线性问题。
- 通过正则化,我们会在残差平方和(RSS)最小化过程中,加入一个正则化项,称为收缩惩罚。这个惩罚项包含了一个希腊字母λ以及对系数β和权重的规范化。(RSS+收缩惩罚最小化)
- 因此,正则化对于高维数据,可以对系数进行限制,避免多重共线性,甚至将其缩减到0。同时由于增加了正则化项,可以有效避免过拟合。
- 正则化技术可以分为三种类型:
- 岭回归
- Lasso
- 弹性网络
岭回归
在岭回归中,正则化项是所有变量系数的平方和,称为L2-norm。在我们的模型中就是试图使RSS+λ(sumβ_j^2)最小(残差平方和+(λ * 变量系数的平方和) )。当λ 增加时,系数β_j 会缩小,趋于0,但永远不会是0。也就是说岭回归可以解决多重共线性问题,但是不具有筛选自变量的功能。
lasso回归
在lasso回归中,正则化项是变量系数的绝对值的和,称之为L1-norm。在我们的模型中试图使RSS+λ(sum|β_j|)最小。这里收缩惩罚项可以使β_j收缩到0 。因此lasso回归具有筛选变量的功能。
每条曲线对应一个变量,
##
## Call: glmnet(x = x, y = y)
##
## Df %Dev Lambda
## 1 0 0.00 1.63100
## 2 2 5.53 1.48600
## 3 2 14.59 1.35400
## 4 2 22.11 1.23400
## 5 2 28.36 1.12400
## 6 2 33.54 1.02400
....
非零系数的数量 ( Df)、解释的偏差百分比 ( %dev) 和?( Lambda)。尽管默认情况下glmnet适合 100 个值的模型,但如果从一个 lambda 到下一个 lambda 没有充分变化(通常在路径的末端附近) lambda,它会提前停止%dev
glmnet返回一系列模型供用户选择。在许多情况下,用户可能更喜欢软件来选择其中之一。交叉验证可能是该任务最简单和最广泛使用的方法。cv.glmnet是这里进行交叉验证的主要功能,以及绘图和预测等各种支持方法
这绘制了交叉验证曲线(红色虚线)以及沿上下标准偏差曲线?序列(误差线)。两个特殊值?的垂直虚线表示:lambda.min是的价值?给出最小平均交叉验证误差,而lambda.1se是?这给出了最正则化的模型,使得交叉验证的误差在最小值的一个标准误差内
岭回归存在的原因?
当自变量存在高度共线性或者高度两两相关时,Lasso回归可能会将某个自变量强制删除,这损失了模型预测能力。
弹性网络
在弹性网络中,我们的目的是使RSS+λ[ (1-α)(sumβ_j^2)/2 + α(sum|β_j|) ]/N最小化
当α等于0时,弹性网络等假于岭回归;当α等于1时,弹性网络等价于Lasso回归。
弹性网络的优势在于,它既能做到岭回归不不能做的变量筛选,又能实现Lasso不能做的变量分组
glmnet Commonly used function arguments
nlambda
is the number of ? values in the sequence (default is 100).alpha
is for the elastic net mixing parameter ?, with range ?∈[0,1]. ?=1 is lasso regression (default) and ?=0 is ridge regression.lambda
can be provided if the user wants to specify the lambda sequence, but typical usage is for the program to construct the lambda sequence on its own. 10^seq(5,-1,length=100)