带插入符号的 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
.
中查看下面的问题
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
.