【发布时间】:2016-07-01 15:30:02
【问题描述】:
我正在使用 Caret 包训练函数来拟合模型,然后进行预测以预测未知数据集上的值(然后我会得到反馈,以便了解我的预测质量)。我遇到了问题,我确信这与预处理未知数据有关。
简而言之,这就是我正在做的事情:
预处理训练数据:
preproc = preProcess(train_num,method = c("center", "scale"))
train_standardized <- predict(preproc, train_num)
训练模型:
gbmGrid <- expand.grid(interaction.depth = c(1, 5, 9),
n.trees = c(100,500),
shrinkage = 0.1,
n.minobsinnode = 20)
train.boost = train(x=train_standardized[,-length(train_standardized)],
y=train_standardized$response,
method = "gbm",
metric = "ROC",
maximize = FALSE,
tuneGrid= gbmGrid,
trControl = trainControl(method="cv",
number=5,
classProbs = TRUE,
verboseIter = TRUE,
summaryFunction=twoClassSummary,
savePredictions = TRUE))
为预测准备未知数据:
...
unknown_standardized <- predict(preproc, unknown_num)
...
对未知数据进行实际预测:
preds <- predict(train.boost,newdata=unknown_standardized,type="prob")
请注意,“preproc”对象与训练集分析产生的对象相同,用于对模型进行训练的中心化/标准化预测。
当我得到我的评估时,我对未知数据的评估比使用训练集预测的要差得多(通过交叉验证使用训练数据的 ROC 约为 0.83,使用我返回的未知数据的 ROC评估方约为 0.70)。
我的流程正确吗?我做错了什么?
提前致谢。
【问题讨论】:
-
您实际上使用插入符号显示了整个工作流程。干得好!