【发布时间】:2021-01-02 10:02:19
【问题描述】:
这个问题在 CrossValidation 被关闭,因为它专注于编程,所以这里更适合:
我正在对我的数据进行弹性网络逻辑回归。我研究了每次在相同数据上运行相同模型时如何获得可复制系数。但是,它似乎没有发生。我尝试设置nfolds 和foldid,但是一旦我更改set.seed,系数就会发生变化。
我了解交叉验证的工作原理以及set.seed 可能会如何改变整个过程。有些人建议像在我的代码中那样设置foldid,但是一旦set.seed 发生变化,它对我的情况就没有帮助。
每次运行获得相同系数或模型系数的统计合理测量的可能性有哪些?
df <- read_csv("data.csv")
View(df)
set.seed(123)
library(caret)
library(tidyverse)
library(glmnet)
library(ROCR)
library(doParallel)
registerDoParallel(4, cores = 4)
training.samples <- df$V1 %>% createDataPartition(p = 0.8, list = FALSE)
train <- df[training.samples, ]
test <- df[-training.samples, ]
x.train <- data.frame(train[, names(train) != "V1"])
x.train <- data.matrix(x.train)
y.train <- train$V1
x.test <- data.frame(test[, names(test) != "V1"])
x.test <- data.matrix(x.test)
y.test <- test$V1
foldid <- sample(rep(seq(10), length.out = nrow(train)))
list.of.fits <- list()
for (i in 0:10){
fit.name <- paste0("alpha", i/10)
list.of.fits[[fit.name]] <- cv.glmnet(x.train, y.train, type.measure = "dev",
alpha = i/10, family = "binomial", nfolds = 10, foldid = foldid, parallel = TRUE)
}
coef <- coef(list.of.fits[[fit.name]], s = list.of.fits[[fit.name]]$lambda.1se)
coef
我的输出结果如下:
set.seed(123)
(Intercept) -18.533050
V2 -0.0049142
V3 -0.0013228
V4 -0.0029664
V5 0.0123987
V6 0.1433817
V7 .
V8 -0.0188888
V9 0.0007504
V10 -0.0626482
set.seed(42)
(Intercept) -22.16271709
V2 -0.005898701
V3 -0.001332854
V4 -0.003506514
V5 0.013343484
V6 0.097911065
V7 -0.269346185
V8 -0.024876785
V9 0.027937690
V10 -0.070759818
【问题讨论】:
标签: r regression feature-selection glmnet