标签: r-caret

插入符号中的折叠与训练错误

在模型调整中使用交叉验证,我从caret::trainresults对象中获得不同的错误率,并自己计算其对象上的错误pred。我想了解它们为何不同,以及理想情况下如何使用折叠错误率进行模型选择、绘制模型性能等。

pred对象包含折叠外的预测。该文档非常清楚,trainControl(..., savePredictions = "final")保存了最佳超参数值的折叠预测:“应保存每次重采样的保留预测量的指标......“最终”保存了最佳调整的预测参数。” (保留“所有”预测然后过滤到最佳调整值并不能解决问题。)

文档train说该results对象是“训练错误率的数据框......”我不确定这意味着什么,但最佳行的值始终与 上计算的指标不同pred。为什么它们不同以及如何使它们对齐?

d <- data.frame(y = rnorm(50))
d$x1 <- rnorm(50, d$y)
d$x2 <- rnorm(50, d$y)
train_control <- caret::trainControl(method = "cv",
                                     number = 4,
                                     search = "random",
                                     savePredictions = "final")
m <- caret::train(x = d[, -1],
                     y = d$y,
                     method = "ranger",
                     trControl = train_control,
                     tuneLength = 3)
#> Loading required package: lattice
#> Loading required package: ggplot2
m …
Run Code Online (Sandbox Code Playgroud)

r r-caret

5
推荐指数
1
解决办法
1324
查看次数

如何在 R studio 的 Caret 中抑制 Boosted 树模型 gbm 的迭代输出

如果我运行此代码来使用 Knit 训练 GBM 模型,我会收到几页 Iter 输出,如下所示。有没有办法抑制这个输出?

mod_gbm <- train(classe ~ ., data = TrainSet, method = "gbm")


## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.6094             nan     0.1000    0.1322
##      2        1.5210             nan     0.1000    0.0936
##      3        1.4608             nan     0.1000    0.0672
##      4        1.4165             nan     0.1000    0.0561
##      5        1.3793             nan     0.1000    0.0441
Run Code Online (Sandbox Code Playgroud)

谢谢你!

r gbm r-caret

5
推荐指数
1
解决办法
2073
查看次数

使用 mouse、caret 和 glmnet 的汇总回归结果

不确定这是否更多是一个统计问题,但我能找到的最接近的类似问题就在这里,尽管我无法让它适用于我的案例。

我正在尝试开发一个汇总的惩罚逻辑回归模型。我使用鼠标创建一个 mids 对象,然后使用插入符号重复交叉验证和弹性网络回归 ( glmnet ) 将模型拟合到每个数据集来调整参数。拟合的对象不属于“mira”类,但我想我通过使用正确的列表项更改对象类来解决这个问题。主要问题是glmnet没有关联的vcov方法,而pool()需要该方法。

我想根据变量的数量和哪些变量是最佳预测变量的不确定性来使用惩罚回归。我的数据由 4 个数值变量和 9 个不同级别的分类变量组成,我预计包括交互作用。

有谁知道我如何创建自己的 vcov 方法或以其他方式解决此问题?我不确定这是否可能。

随附示例数据和代码,请注意我无法共享实际数据。

library(mice)
library(caret)

dat <- as.data.frame(list(time=c(4,3,1,1,2,2,3,5,2,4,5,1,4,3,1,1,2,2,3,5,2,4,5,1),
                      status=c(1,1,1,0,2,2,0,0,NA,1,2,0,1,1,1,NA,2,2,0,0,1,NA,2,0),
                      x=c(0,2,1,1,NA,NA,0,1,1,2,0,1,0,2,1,1,NA,NA,0,1,1,2,0,1),
                      sex=c("M","M","M","M","F","F","F","F","M","F","F","M","F","M","M","M","F","F","M","F","M","F","M","F")))

imp <- mice(dat,m=5, seed=192)

control = trainControl(method = "repeatedcv", 
                          number = 10, 
                          repeats=3, 
                          verboseIter = FALSE)

mod <- list(analyses=vector("list", imp$m))

for(i in 1:imp$m){
  mod$analyses[[i]] <- train(sex ~ .,
                           data = complete(imp, i),
                           method = "glmnet",
                           family="binomial",
                           trControl = control,
                           tuneLength = 10, 
                           metric="Kappa")
} …
Run Code Online (Sandbox Code Playgroud)

r glmnet logistic-regression r-mice r-caret

5
推荐指数
0
解决办法
922
查看次数

插入符号交叉验证中的预处理

我有一个关于数据预处理的问题需要澄清。据我了解,当我们通过交叉验证调整超参数并估计模型性能时,我们需要在交叉验证中进行,而不是预处理整个数据集。换句话说,在交叉验证中,我们对训练折叠进行预处理,然后使用相同的预处理参数来处理测试折叠并进行预测。

在下面的示例代码中,当我在 caret::train 中指定 preProcess 时,它会自动执行此操作吗?如果有人能澄清我这一点,我真的很感激。

从一些在线资源来看,有些人预处理整个数据集(训练集),然后使用预处理数据通过交叉验证来调整超参数,这似乎不对......

library(caret)
library(mlbench)
data(PimaIndiansDiabetes)

control <- trainControl(method="cv", 
                        number=5,
                        preProcOptions = list(pcaComp=4))
grid=expand.grid(mtry=c(1,2,3))

model <- train(diabetes~., data=PimaIndiansDiabetes, method="rf", 
               preProcess=c("scale", "center", "pca"), 
               trControl=control,
               tuneGrid=grid)
Run Code Online (Sandbox Code Playgroud)

r r-caret

5
推荐指数
1
解决办法
1337
查看次数

对多个列进行分层以进行交叉验证

我见过很多方法通过单个变量对样本进行分层以用于交叉验证。该caret包通过该createFolds()函数很好地做到了这一点。默认情况下,似乎caret会进行分区,以使每次折叠具有大致相同的目标事件率。

我想做的是按目标率和时间进行分层。我找到了一个可以部分完成此操作的函数,它是splitstackshape包并使用该stratified()函数。该函数的问题是它返回单个样本,但在给定条件下它不会将数据分成 k 组。

这是一些要重现的虚拟数据。

set.seed(123)

time = rep(seq(1:10),100)
target = rbinom(n=100, size=1, prob=0.3)

data = as.data.frame(cbind(time,target))

table(data$time,data$target)

      0  1
  1  60 40
  2  80 20
  3  80 20
  4  60 40
  5  80 20
  6  80 20
  7  60 40
  8  60 40
  9  70 30
  10 80 20
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,目标事件率在不同时间段内并不相同。时间 1 为 40%,时间 2 为 20%,等等。我想在创建用于交叉验证的折叠时保留这一点。如果我理解正确的话,插入符号将按总体事件率进行分区。

table(data$target)

  0   1 
710 290 
Run Code Online (Sandbox Code Playgroud)

总体而言,大约 30% 的发生率将得到保留,但随着时间的推移,目标事件发生率将不会保留。

我们可以得到这样的一个样本:

library(splitstackshape)
train.index <- stratified(data,c("target","time"),size=.2) …
Run Code Online (Sandbox Code Playgroud)

partitioning r cross-validation r-caret

5
推荐指数
1
解决办法
1368
查看次数

带插入符号的嵌套交叉验证

我使用过一个小数据集,并使用了 mlr 包的嵌套交叉验证。然而,插入符在测试不同模型方面有一些优势。所以,我想知道:是否有人对如何使用插入符实现嵌套交叉验证有任何好的建议(如果可能的话,还有一个例子)?非常感谢。

nested r resampling cross-validation r-caret

5
推荐指数
0
解决办法
884
查看次数

XGBoost xgbTree 的插入符号 varImp 包装器是否使用 XGBoost Gain?

使用 XGBoostxgb.importance可以打印重要性矩阵,显示通过增益、覆盖率和频率测量的分类的可变重要性值。增益是推荐的可变重要性指标。使用脱字符重采样(repeatedcv,数量=10,重复=5)、特定的调整网格和训练method = "xgbTree",脱字符varImp()函数显示从 0-100% 缩放的 k 倍特征重要性估计。

我的问题是插入符varImp(xgbMod)包装函数是否使用增益或增益、覆盖率和频率的所有组合?

r machine-learning r-caret

5
推荐指数
1
解决办法
2258
查看次数

当存在缺失数据时,使用 R 随机森林预测新数据

我想预测包含 NA 行的新数据。我需要保持这些行在输入数据和预测输出中具有相同的行数。如何使用 R Caret 训练的随机森林模型来做到这一点?我为预测函数的参数 na.action 尝试了不同的值,例如:

predictions = predict(RF_model, newdata = newdata, type = "prob", na.action = "na.exclude")
Run Code Online (Sandbox Code Playgroud)

随着na.excludena.omit行被删除。我得到na.pass了一个错误输出“缺失值”。

编辑:模型已经过训练,我们正在谈论对全新数据的预测,其中一些不好。我知道我们无法预测这些不良数据,但我需要跟踪这些行。

r predict random-forest r-caret

5
推荐指数
1
解决办法
2712
查看次数

闪亮的应用程序产生错误:“参数意味着不同的行数:0、1”

我正在尝试创建一个 R Shiny 应用程序,它使用岭回归计算分数,然后在随机森林模型中使用它。我将这两个模型保存为 RDS,并将它们保存在 app.R 所在的同一文件夹中。

然后我读取预测概率的模型和数据并定义一些函数:

    # Reading data
    phats <- read.csv("Predicted_probabilities_training.csv")
    phats_graph <- phats %>% mutate(`PTD Event Status` = ifelse(Observed_Event=="PTD", "PTD Event", "No PTD Event"))
    phats_event <- phats[phats$Observed_Event=="PTD",]
    phats_nonevent <- phats[phats$Observed_Event=="No_PTD",]
            
    # load the models
    ridge_model <- readRDS("ridge_model.rds")
    final_model <- readRDS("final_model.rds")

        # Defining some functions
matrix.for.ILS.function <- function(input){
  return(data.matrix(data.frame(input$MIP_1a,
               input$MIP_3a,
               input$RANTES,
               input$sIL_6R,
               input$ITAC,
               input$IL_21,
               input$Fractalkine,
               input$TNF_a,
               input$IL_1b,
               input$IL_7,
               input$IL_10,
               input$GM_CSF,
               input$MIP_1b)))
}

ILS.function <- function(input){
  ILS.ridge = as.numeric(predict(ridge_model, matrix.for.ILS.function(input), s = 0.7414409, type="link"))
  return(ILS.ridge)
}

test.data.function <- …
Run Code Online (Sandbox Code Playgroud)

r caret glmnet shiny r-caret

5
推荐指数
1
解决办法
611
查看次数

用于插入符号训练的公式和非公式的不同结果

我注意到在训练中使用配方和非配方方法会产生不同的结果.此外,配方方法所花费的时间几乎是非配方方法所用时间的10倍.这是预期的吗?

> z <- data.table(c1=sample(1:1000,1000, replace=T), c2=as.factor(sample(LETTERS, 1000, replace=T)))

# SYSTEM TIME WITH FORMULA METHOD
# -------------------------------

> system.time(r <- train(c1 ~ ., z, method="rf", importance=T))
   user  system elapsed
376.233   9.241  18.190

> r
1000 samples
   1 predictors

No pre-processing
Resampling: Bootstrap (25 reps)

Summary of sample sizes: 1000, 1000, 1000, 1000, 1000, 1000, ...

Resampling results across tuning parameters:

  mtry  RMSE  Rsquared  RMSE SD  Rsquared SD
  2     295   0.00114   4.94     0.00154
  13    300   0.00113   5.15     0.00151
  25    300   0.00111 …
Run Code Online (Sandbox Code Playgroud)

r random-forest r-caret

4
推荐指数
1
解决办法
3722
查看次数