r语言 回归分析 分类变量_R 语言 lasso回归

在基因数据的分析中,经常会用到lasso(套索)这种方法来进行变量的筛选,其实就是在目标优化函数后边加一个L1正则化项,其中参数lamda为超参数,需要我们去确定。接下来以线性回归为例介绍其在R语言中的实现,当然在logistic回归、cox回归也是可用lasso的。

实例数据

data("longley")

e21df80c82ca0b650265d4b3d9e1844f.png

R包(glmnet)

library(glmnet)

我们用交叉验证来确定lamda的值,在这里我们随便指定使用nfolds=4 4折交叉验证,实际中常用5折或者10折。以Employed为因变量,其余变量为自变量(不包括年份)建立模型

set.seed(123)x <- as.matrix(longley[,-c(6,7)])cv_lasso = cv.glmnet(x, longley$Employed,nfolds = 4,family = "gaussian", alpha = 1)

在这里对应于mse最小的lamda即为我们最终采用的lamda,lambda.min就是所求,大小约为0.097

plot(cv_lasso) sprintf('Best lambda for LASSO: %f.', cv_lasso$lambda.min)

49d0101260ac851356b48096ae15eae0.png

30f2cd120790ffb9aff93cd6f3fcc4b1.png

我们可以验证下看lambda.min对应的是不是最小的mse,运行下面程序,发现mse最小处对应的lamda与以上程序返回值一致

cv_lasso$lambda[which(cv_lasso$cvm==min(cv_lasso$cvm))]

返回参数的系数,可以看到只剩下两个变量

coef(cv_lasso,s = "lambda.min")

4145c926f65045c4bc33b029a3b6828f.png