r - XGBoost 交叉验证错误: slice.xgb.DMatrix 中的错误
问题描述
我正在尝试针对 R 中的多类分类问题(通过 R Studio)运行 xgb.cv 算法,但我不断收到以下错误消息:
• slice.xgb.DMatrix(dall, unlist(folds[-k])) 中的错误:std::bad_alloc
我的数据集包括一个 4 类响应变量和 12 个解释变量。我已经完成了将响应变量转换为数字数据类型的过程,将我的数据拆分为训练组和测试组 (80/20),使用 1-hot 编码创建了一个稀疏矩阵,然后使用以下代码:
TrainM <- sparse.model.matrix(Response_var ~ .-1, data = Train_data)
Train_Label <- Train_data[,1]
Train_Matrix <- xgb.DMatrix(data = as.matrix(TrainM), label = Train_Label)
TestM <- sparse.model.matrix(Response_var ~ .-1, data = Test_data)
Test_Label <- Test_data[,1]
Test_Matrix <- xgb.DMatrix(data = as.matrix(TestM), label = Test_Label)
然后我将模型参数设置如下:
nc <- length(unique(Train_Label))
xgb_params <- list(objective = "multi:softprob",
eta = 0.01,
gamma = 2,
eval_metric = 'AUC',
max_depth = 15,
subsample = 0.5,
colsample_bytree = 0.5,
num_class = nc,
min_child_weight = 2)
然后将交叉验证模型运行为:
CV_Model <- xgb.cv(params = xgb_params,
data = Train_Matrix,
nrounds = 1000,
nfold = 10,
stratified = TRUE,
print_every_n = 1,
early_stopping_rounds = 15,
maximize = FALSE,
prediction = TRUE)
在我启动 CV 模型之前,一切都运行良好,该模型很快就会出错(就像模型正在初始化一样)。
slice.xgb.DMatrix(dall, unlist(folds[-k])) 中的错误:std::bad_alloc
我在使用 R v4.1.1 和 RStudio V1.4.1106 的 Windows 10 工作站上运行它。我应该注意,我已经运行“相同”代码几个星期了,没有任何问题,唯一的区别是评估指标 = 'mlogloss' 而不是 'AUC'。但是,一旦我切换到“AUC”,问题就开始出现了。
任何解决此问题的帮助将不胜感激!
解决方案
嗨,Doug Turk,欢迎来到该网站。此错误很可能与内存不足有关。
例如,请参见此处: https ://en.cppreference.com/w/cpp/memory/new/bad_alloc
在 Windows 中,您可以通过在运行代码时打开任务管理器来验证这一点,您应该会看到内存上升到 100%。尝试使用您的数据子集重新运行代码,以减少内存需求,看看是否能解决您的问题
祝你好运。
推荐阅读
- java - 为什么 Optional 的 or 和 flatMap 方法的供应商类型参数是通配符?
- asynchronous - maxBufferSize="-1" 在 Mule 中是什么意思?
- regex - 从文本中删除大量字符串
- tensorflow-serving - 发生不可能的错误:grpc status = StatusCode.NOT_FOUND ,details = "Servable not found for request
- sql - 当我尝试创建 log_in 函数时?为什么我有错误 Error(3,10): PLS-00215: String length constraint must be in range (1 .. 32767)
- c - C fopen() 无法在 /tmp 中打开文件
- nim-lang - Nim:不带赋值的 let 语句
- angular - Angular 6 构建无法加载资源
- class - 在每个页面或单个文档上定义类或 ID?
- nestjs - 在 NestJS 中使用 AWS SSM 参数存储进行 TypeORM 配置