【发布时间】:2018-02-28 19:31:15
【问题描述】:
我有以下 R 代码,它在一组训练和测试数据上运行一个简单的 xgboost 模型,目的是预测二元结果。
我们从
开始1) 阅读相关库。
library(xgboost)
library(readr)
library(caret)
2) 清理训练和测试数据
train.raw = read.csv("train_data", header = TRUE, sep = ",")
drop = c('column')
train.df = train.raw[, !(names(train.raw) %in% drop)]
train.df[,'outcome'] = as.factor(train.df[,'outcome'])
test.raw = read.csv("test_data", header = TRUE, sep = ",")
drop = c('column')
test.df = test.raw[, !(names(test.raw) %in% drop)]
test.df[,'outcome'] = as.factor(test.df[,'outcome'])
train.c1 = subset(train.df , outcome == 1)
train.c0 = subset(train.df , outcome == 0)
3) 对格式正确的数据运行 XGBoost。
train_xgb = xgb.DMatrix(data.matrix(train.df [,1:124]), label = train.raw[, "outcome"])
test_xgb = xgb.DMatrix(data.matrix(test.df[,1:124]))
4) 运行模型
model_xgb = xgboost(data = train_xgb, nrounds = 8, max_depth = 5, eta = .1, eval_metric = "logloss", objective = "binary:logistic", verbose = 5)
5) 做出预测
pred_xgb <- predict(model_xgb, newdata = test_xgb)
我的问题是:我如何调整这个过程,以便我只是拉入/调整一个“训练”数据集,并获得对交叉验证文件的保留集的预测?
【问题讨论】:
-
尝试在
xgboost调用中添加nfold = 5以进行5 倍CV。此外,您应该指定更多轮次,可能是 1000 轮左右。如果您这样做,print_every_n = 100是一个受欢迎的论点。一般来说,如果你指定测试集,你会做验证,如果你指定 nfold,你会做 k-fold CV。 -
@missuse 抱歉,我意识到我的问题不是很清楚,不过您的回答很有帮助。我真正想要了解的是如何对仅包含训练数据的 10 倍交叉验证数据集的保留集进行预测。
-
对不起,我搞错了,要指定k-fold CV,需要调用
xgb.cv函数。在这里您可以指定prediction = TRUE,您将对每个折叠进行预测:model$pred- 它们的顺序与您的火车组中的顺序相同。折叠在model$folds中指定。在 xgb.cv 之前设置种子将选择相同的折叠但不同的模型,要重现相同的模型,需要在xgb.cv调用中设置seed。 -
@missuse 谢谢,那么我是否可以简单地将 xgboost 替换为 xgb.cv 并添加 prediction = TRUE 作为参数?我还需要调整什么才能使其正常工作吗?
-
是的,
xgb.cv(nfold = 10, prediction = TRUE, seed = 123...)else as inxgboostcall
标签: r machine-learning