"standardize = " glmnet 包中的选项

"standardize = " option in glmnet package

我有一个关于 glmnet 包中的标准化选项的问题。
我知道为了使系数有意义,回归分析需要缩放或标准化数据集。
通常,对于线性回归(例如,在 R 中使用 glm 函数),我在 运行 glm 模型之前使用 scale() 函数手动缩放数据集。
但是,似乎在使用 glmnet 包(用于正则化回归)时,标准化选项确实对数据集进行了标准化,从而使系数本身有意义(可比较)。我说得对吗?

如果这是正确的,假设我 运行 下面的代码。事实证明,变量“x3”具有最高系数(在绝对值范围内)。那么我是否可以得出结论,变量“x3”是区分类别的最重要变量???

我期待听到任何意见!!谢谢

set.seed(12345) 
example.dat <- data.frame(Category = rbinom(100, 1, 0.5),
                          x1 = rpois(100, 10),
                          x2 = rnorm(100, 3, 10),
                          x3 = rbeta(100, 8, 20),
                          x4 = rnorm(100, -3, 45),
                          x5 = rnorm(100, 1000, 10000))

sample = sample.split(example.dat$Category, SplitRatio = .70)
train = subset(example.dat, sample == TRUE)
test  = subset(example.dat, sample == FALSE)

set.seed(12345)
lasso.fit <- cv.glmnet(data.matrix(train[,-1]),
                       train[,1], 
                       family         = "binomial",
                       nfolds         = nrow(train), # LOOCV
                       grouped        = FALSE,
                       type.measure   = "class",
                       alpha          = 0.6,
                       standardize    = TRUE,
                       standardize.response = TRUE)
print(lasso.fit)
coef       <- as.matrix(abs(coef(lasso.fit, s = "lambda.1se")))
coef.order <- as.matrix(coef[order(coef, decreasing = TRUE),])
rownames(as.matrix(coef.order[coef.order[,1]>0,]))
# [1] "x3"          "(Intercept)"

回复有点晚,但希望对您有所帮助。

请记住,在使用原生标准化选项时,glmnet returns 原始尺度上的系数(请参阅下面的文档),因此我会谨慎得出该结论。

每当我想在同一尺度上比较系数时,我都会在运行 glmnet之前使用scale()进行标准化。这样,您可以获得返回的比例系数以进行比较。

standardize
Logical flag for x variable standardization, prior to fitting the model sequence. The coefficients are always returned on the original scale. Default is standardize=TRUE. If variables are in the same units already, you might not wish to standardize.

glmnet documentation