带插入符号的 LASSO 系数

Coefficient of LASSO with caret

I 运行 带插入符号 glmnet 的 LASSO 算法。 我特别想知道系数,以便知道哪个变量缩小到 0。

例如我运行下面的代码。(由于这段代码在统计方面可能没有价值,请仅作为示例代码查看)

library(tidyverse)
iris = data("iris") %>% as.tibble() %>% select(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width)
Sformula = as.formula(Sepal.Length ~ (Sepal.Width + Petal.Length + Petal.Width)^2)
fitControl = trainControl( method = "cv", number = 10)
Fit = train(
     Sformula,
     data = iris,
     method = "glmnet",
     preProcess = c("center","scale"),
     weights = NULL,
     trControl = fitControl,
     tuneLength = 10
)
coef(Fit)

然而,它只是返回 NULL

我该怎么办?

补充

我运行coef(Fit$finalModel)。好像是系数,而是7×82的矩阵。特征变量个数和截距为7,这个矩阵的列是多少?

> coef(Fit$finalModel)
7 x 82 sparse Matrix of class "dgCMatrix"
   [[ suppressing 82 column names ‘s0’, ‘s1’, ‘s2’ ... ]]
                                                                                                                      
(Intercept)              5.843333 5.84333333 5.8433333 5.8433333 5.8433333 5.84333333 5.84333333 5.84333333 5.84333333
Sepal.Width              .        .          .         .         .         .          .          .          .         
Petal.Length             .        .          .         .         .         0.01198642 0.02620089 0.03826789 0.04878216
Petal.Width              .        .          .         .         .         .          .          .          .         
Sepal.Width:Petal.Length .        0.06075376 0.1169792 0.1689475 0.2169243 0.25032859 0.27810921 0.30448688 0.32918552
Sepal.Width:Petal.Width  .        .          .         .         .         .          .          .          .         
Petal.Length:Petal.Width .        .          .         .         .         .          .          .          .         
                                                                                                                         
(Intercept)              5.8433333 5.84333333 5.84333333 5.84333333 5.8433333 5.84333333 5.84333333 5.84333333 5.84333333
Sepal.Width              .         .          .          .          .         .          .          .          .         
Petal.Length             0.0577385 0.06528163 0.07155311 0.07668659 0.0806087 0.08401776 0.08647254 0.08822959 0.08939423
Petal.Width              .         .          .          .          .         .          .          .          .         
Sepal.Width:Petal.Length 0.3524559 0.37439483 0.39508484 0.41459979 0.4331915 0.45037744 0.46672510 0.48213864 0.49665175
Sepal.Width:Petal.Width  .         .          .          .          .         .          .          .          .         
Petal.Length:Petal.Width .         .          .          .          .         .          .          .          .        

这些是沿着正则化路径返回的系数(对于 lambda 的每个值,在本例中也是 alpha)。

caret 提供最佳 lambda,存储在 Fit$bestTune$lambda。您可以使用它来提取与兰巴匹配的最佳系数,如下所示:

lambda_use <- min(Fit$finalModel$lambda[Fit$finalModel$lambda >= Fit$bestTune$lambda])
position <- which(Fit$finalModel$lambda == lambda_use)
data.frame(coef(Fit$finalModel)[, position])

而且我不确定这是否只是您的简化示例,但这不是套索。除了 lambda 之外,您还在 运行 弹性网和调整 alpha 参数。对于套索,您需要将 alpha 参数设置为 1。在 caret.

中查看下面的问题