r语言 - 预处理插入符号中的数据并对未知数据集进行预测



我正在使用插入符号包训练函数来拟合模型,然后进行预测以预测未知数据集上的值(然后我得到反馈,以便我知道我的预测质量)。 我遇到了问题,我确信这与预处理未知数据有关。

简而言之,这就是我正在做的事情:

预处理训练数据:

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 约为 .83,使用我从评估方返回的未知数据的 ROC 约为 .70)。

我的流程对吗? 我做错了什么?

提前谢谢。

从某种意义上说,你根本没有做错任何事。

预测器可能会在训练样本上做得更好,因为它已经使用该数据来构建模型。

训练集的全部意义在于查看该模型的泛化程度。 它可能会或多或少地"过度拟合"训练数据,并在新数据上做得更糟。

至少一旦你对新数据有了分数,你就知道模型的真实准确性。 如果该准确性足以满足您的目的,那么该模型将可用,并且(因为您已经完成了训练/测试)对新数据具有鲁棒性。

现在,如果模型在更广泛的数据上进行训练,可能会更好。 因此,为了提高实际准确性,可能值得使用交叉验证在多个数据切片上对其进行训练 - k 倍交叉验证。 Caret有一个很好的设施。 http://machinelearningmastery.com/how-to-estimate-model-accuracy-in-r-using-the-caret-package/

最新更新