R---岭回归 & lasso回归

1.岭回归:
岭回归(ridge regression, Tikhonov regularization)实际上算是最小二乘法(OLS)的改良版。最小二乘法中使用的是无偏估计回归,而岭回归使用的是 有偏估计回归——通过损失部分信息、减低精度得到的回归系数,但是这样跟符合实际情况。因为OLS有四个基本假设:
1.解释变量是确定变量,不是随机变量
2.随机误差项具有零均值、同方差
3.随机误差项与解释变量之间不相关
4.随机误差项服从零均值、同方差、零协方差的正态分布
(这就和以前做物理题目一样:假设在理想状态下。然而实际是不理想的-_-)
将下面之前先来了解一下什么叫l0/l1/l2范数
l0:向量中非零元素个数
l1:向量中各元素的绝对值之和(美称‘稀疏规则算子’)
l2:向量中各元素的平方和后再对和开平方(有点像欧式距离)
岭回归可以简单理解为 在最小二乘法的基础上加了一个正则化项(l2范数)作为惩罚项(权值衰减)
    损失函数: RSS+λ∑β^2 #RSS是残差平方和,λ是调整参数,
(λ∑β^2)这个惩罚项的加入使得 带估计参数收缩到接近0(权值衰减)
这使得岭回归在处理 共线性、病态数据较多的数据集更有利,但是通常岭回归方程的R平方值会稍低于普通回归分析,但回归系数的显著性往往明显高于普通回归。
2.lasso回归:
lasso( The Least Absolute Shrinkage and Selection Operator);
 上文提到l2范数的加入使得岭回归能使带估计参数收缩到接近0,而lasso能直接使带估计参数收缩到0(即剔除部分数据集的变量)  
损失函数:RSS+λ∑|β| #RSS是残差平方和,λ是调整参数 
由于lasso的损失函数的惩罚项是不可导的,所以它求损失函数最小的方法比较复杂(坐标下降法)有兴趣可看:
http://www.cnblogs.com/pinard/p/6018889.html 
lasso一般用于数据维度太多太多时,可以用它剔除一部分影响因素的维度。

R中的glmnet包的可以实现岭回归 和 lasso
 x = model.matrix(label~.,data)[,-1]#矩阵化
 y = data$label
 cv.out=cv.glmnet(x[train,],y[train],alpha=0)#交叉验证得到最优lambda 值,带入模型
 plot(cv.out)
 ridge.mod  = glmnet(x[train,],y[train],alpha=0)
ridge.pred=predict(ridge.mod,s =cv.out$lambda.min,newx = x[test,])   
 mean((ridge.pred-y.test)^2) 
 lasso与岭回归 就只有 alpha=1 的差别

你可能感兴趣的:(r语言)