1

我是机器学习和 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

现在我得到了三个模型:modelFitRFmodelFitGBMmodelFitLDA,以及对应于基于 的这三个模型的三个预测向量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] 
4

0 回答 0