我是机器学习和 R 的新手。
我知道有一个名为caretEnsemble的 R 包,它可以方便地在 R 中堆叠模型。但是,这个包在处理多类分类任务时看起来有些问题。
暂时,我写了一些代码来尝试手动堆叠模型,这是我处理的示例:
library(caret)
set.seed(123)
library(AppliedPredictiveModeling)
data(AlzheimerDisease)
adData = data.frame(diagnosis, predictors)
inTrain = createDataPartition(adData$diagnosis, p = 3 / 4)[[1]]
training = adData[inTrain,]
testing = adData[-inTrain,]
set.seed(62433)
modelFitRF <- train(diagnosis ~ ., data = training, method = "rf")
modelFitGBM <- train(diagnosis ~ ., data = training, method = "gbm",verbose=F)
modelFitLDA <- train(diagnosis ~ ., data = training, method = "lda")
predRF <- predict(modelFitRF,newdata=testing)
predGBM <- predict(modelFitGBM, newdata = testing)
prefLDA <- predict(modelFitLDA, newdata = testing)
confusionMatrix(predRF, testing$diagnosis)$overall[1]
#Accuracy
#0.7682927
confusionMatrix(predGBM, testing$diagnosis)$overall[1]
#Accuracy
#0.7926829
confusionMatrix(prefLDA, testing$diagnosis)$overall[1]
#Accuracy
#0.7682927
现在我得到了三个模型:modelFitRF
、modelFitGBM
和modelFitLDA
,以及对应于基于 的这三个模型的三个预测向量test set
。
然后我将创建一个数据框来包含这些预测向量和原始因变量test set
:
predDF <- data.frame(predRF, predGBM, prefLDA, diagnosis = testing$diagnosis, stringsAsFactors = F)
然后,我只是使用这样的数据框作为一个新train set
的来创建一个堆叠模型:
modelStack <- train(diagnosis ~ ., data = predDF, method = "rf")
combPred <- predict(modelStack, predDF)
confusionMatrix(combPred, testing$diagnosis)$overall[1]
#Accuracy
#0.804878
考虑到堆叠模型通常应该提高预测的准确性,我想相信这可能是堆叠模型的权利。但是,我也怀疑在这里我使用了predDF
由三个模型的预测创建的test set
.
我不确定是否应该使用来自 的结果test set
,然后将它们应用回 以test set
获得最终预测?(我指的是下面的这个块:)
predDF <- data.frame(predRF, predGBM, prefLDA, diagnosis = testing$diagnosis, stringsAsFactors = F)
modelStack <- train(diagnosis ~ ., data = predDF, method = "rf")
combPred <- predict(modelStack, predDF)
confusionMatrix(combPred, testing$diagnosis)$overall[1]