R---岭回归 & lasso回归

来源:互联网 发布:python 股票自动化 编辑:程序博客网 时间:2024/04/29 01:44
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 的差别