r - glmnet 包中的“standardize =”选项
问题描述
我有一个关于 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
(请参阅下面的文档),所以我会小心得出这个结论。
每当我想在相同的尺度上比较系数时,我都会scale()
在运行前进行标准化glmnet
。这样,您可以获得返回的缩放系数以进行比较。
在拟合模型序列之前,标准化 x 变量标准化的逻辑标志。系数始终以原始比例返回。默认为标准化=真。如果变量已经采用相同的单位,您可能不希望标准化。
推荐阅读
- rust - Rust 影子内存管理
- jsf - 如何为调用 remoteCommand 的按钮添加确认检查
- c++ - 有没有办法将旧类模板中的所有类型模板参数传递到新类模板中?
- c - 如何将二维数组地址传递给函数并在其上写入并在调用函数中打印
- java - 在java中,如果我扩展一个类并使其成为主函数中的对象,是否会在堆中创建父类的任何对象?
- html -
标签未根据 Bootstrap 版本显示 - python - Psycopg2 关系数据库不存在
- android - 如何解决“无法确定任务':app:compileReleaseKotlin'的依赖关系。” 飘飘然
- ssis - SSIS执行进程任务在运行.bat文件时表现异常
- javascript - Jupyter Notebook 拒绝来自 localhost 的跨域请求