0

我对 glmnet 中的标准化感到非常困惑。

我有 500 个变量(化学品),每个变量都有 3 个估计水平,这意味着我实际上在数据集中有 1500 个变量(X)。现在我想排除对结果(Y)没有重要作用的化学物质,所以我使用 glmnet 来选择它们。

我正在训练我的数据并尝试按如下方式应用 glmnet:

 a <- seq(0.1,0.9,0.05)
 search <- foreach(i=a, .combine = rbind, .packages = 'glmnet') %dopar%{
 cv <- cv.glmnet(mdlX, mdlY, family = 'binomial', nfold = 10, type.measure = 'auc', parallel = TRUE, alpha = i, standardize = TRUE)
 data.frame(cvm = cv$cvm[cv$lambda == cv$lambda.min], lambda.min = cv$lambda.min, alpha = i)}
 cv3 <- search[search$cvm == min(search$cvm),]
 md3 <- glmnet(mdlX, mdlY, family = 'binomial', alpha = cv3$alpha, lambda = cv3$lambda.min, standardize = TRUE)

我读到默认值是standardize = TRUEif family = 'gaussian',所以我将它添加到我的代码中。但随后,表明系数将按原始比例返回。

所以我的问题是:

如果变量(化学品)有不同的单位,我还应该Scale(X)standardize = TRUEcv.glmnet 和 glmnet 中做些什么?因为最后,我用它来通过变量包含概率来选择我需要的变量:

Result <- apply(coeff_df,2,function(x) {sum(x!=0)/5*100})

先感谢您!

(我也在Cross Validated上发帖,但如果违反规则,我会删除它!)

4

0 回答 0