首页 > 解决方案 > 使用交叉验证时,有没有办法确保每个折叠以某种方式包含至少几个真实类的实例?

问题描述

我正在使用带有插入符号的交叉折叠验证来拟合模型:

library(caret)

## tuning & parameters
set.seed(123)
train_control <- trainControl(
  method = "cv",
  number = 5,
  savePredictions = TRUE,
  verboseIter = TRUE,
  classProbs = TRUE,
  summaryFunction = my_summary
)

linear_model = train(
  x = select(training_data, Avg_Load_Time),
  y = target,
  trControl = train_control,
  method = "glm", # logistic regression
  family = "binomial",
  metric = "ROC"
)

问题是,在大约 5K 行中,我只有大约 120 个真实案例。当通过插入符号“glm.fit:出现数字 0 或 1 的拟合概率”使用 GLM 时,这会引发警告消息。

是否有我可以设置的参数或某种方法来确保每个折叠都有一些真实的情况?

标签: rlogistic-regression

解决方案


当你打乱数据并且每个类都有足够的例子时,它会更容易。

如果您没有足够的示例,您可以使用 SMOTE(Synthetic Minority Oversampling Technique)增加少数类的大小。包smotefamily在 R 中。

然后您将能够进行 5 或 10 倍的交叉验证而不会引发任何问题。


推荐阅读