我一直致力于数据集并使用glmnet进行线性LASSO / Ridge回归。
为简单起见,我们假设我使用的模型如下:
cv.glmnet(train.features, train.response, alpha=1, nlambda=100, type.measure = "mse", nfolds = 10)
我正在为客户准备演示文稿,我需要显示变量的T-stats 和 R-squared 值。此外,我还需要根据模型的拟合值绘制残差。
在创建从头开始执行此操作的功能之前,我想询问库中是否已涵盖此功能。我检查过glmnet vignette但没有找到任何内容。
感谢您的帮助!
答案 0 :(得分:5)
你的问题的部分答案: plotres 功能在 plotmo R包是一种简单的方法,可以为各种模型绘制残差,包括 glmnet 和 cv.glmnet 模型。 plotres vignette http://go.microsoft.com/fwlink/?LinkId=472540 包中附有详细信息。例如
library(glmnet)
data(longley)
mod <- glmnet(data.matrix(longley[,1:6]), longley[,7])
library(plotmo) # for plotres
plotres(mod)
给出以下图表。您可以通过将适当的参数传递给plotres来选择子图并修改图。
答案 1 :(得分:0)
这两个软件包“ yardstick”和“ modelr”可以提供帮助。
我用插入符号通过“ train()”调用glmnet,返回的对象有一个$ resample对象,其中每个交叉验证折叠都包含RMSE,Rsquared和MAE。
library( tictoc ) # If you don't want to install this, just take out the calls to tic() and toc()
library( caret )
library( tidyverse )
training_folds <- createFolds( dmv, returnTrain = TRUE )
ctl <- trainControl( method = "cv", number = 5, index = training_folds )
tic()
dmv_pp <- preProcess( dmv, method = c( "nzv", "center", "scale" ))
toc() # This can take a while
dmv_train <- predict( dmv_pp, dmv )
# Using just a subset of the data, because otherwise I run out of memory.
mdl <- train( duration_avg ~ ., data = dmv_train[1:1E4,], trControl = ctl, method = "glmnet",
tuneGrid = expand.grid(
alpha = c( 0, 0.5, 1),
lambda = c( 0.001, 0.01 )
)
)
mdl$resample %>% names()
mdl %>%
listviewer::jsonedit() # This object should contain $resamples
dmv_train <- dmv_train %>%
modelr::add_predictions( mdl, var = "predicted_duration_avg" ) # I think this should work with any model that has a predict() method
dmv_train %>%
yardstick::metrics( duration_avg, predicted_duration_avg )