在基因數據的分析中,經常會用到lasso(套索)這種方法來進行變量的篩選,其實就是在目標優化函數後邊加一個L1正則化項,其中參數lamda為超參數,需要我們去確定。接下來以線性回歸為例介紹其在R語言中的實現,當然在logistic回歸、cox回歸也是可用lasso的。
實例數據
R包(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)
我們可以驗證下看lambda.min對應的是不是最小的mse,運行下面程序,發現mse最小處對應的lamda與以上程序返回值一致
cv_lasso$lambda[which(cv_lasso$cvm==min(cv_lasso$cvm))]返回參數的係數,可以看到只剩下兩個變量
coef(cv_lasso,s = "lambda.min")