如何在R中实现XGBoost外部内存版本并转换数据为LIBSVM格式
XGBoost外部内存版本数据格式问题
自定义DataFrame是否必须转LIBSVM格式?
是的——如果要启用XGBoost的外部内存模式,必须将数据存储为磁盘上的LIBSVM格式文件。外部内存模式依赖磁盘序列化数据来处理大规模数据集,无法直接读取内存中的DataFrame。
如果不需要外部内存模式,直接将DataFrame转换为xgb.DMatrix即可,但这不属于你要实现的外部内存版本场景。
内置agaricus数据集转LIBSVM格式的代码
以下代码可将xgboost包内置的agaricus.train和agaricus.test转换为LIBSVM格式并保存到本地:
# 加载内置数据集 data(agaricus.train, package='xgboost') data(agaricus.test, package='xgboost') train <- agaricus.train test <- agaricus.test # 定义转换函数 to_libsvm <- function(data, output_path) { features <- data$data labels <- data$label libsvm_content <- mapply(function(label, row) { non_zero <- which(row != 0) paste( label, paste(paste0(non_zero, ":", row[non_zero]), collapse = " ") ) }, labels, split(features, row(features))) writeLines(libsvm_content, output_path) } # 保存转换后的文件 to_libsvm(train, "C:/test/agaricus_train.libsvm") to_libsvm(test, "C:/test/agaricus_test.libsvm")
转换完成后,即可用外部内存模式加载:
dtrain <- xgb.DMatrix('C:/test/agaricus_train.libsvm#train.cache') dtest <- xgb.DMatrix('C:/test/agaricus_test.libsvm#test.cache')
内容的提问来源于stack exchange,提问作者user2165379
相关产品推荐
相关产品推荐

