如何在R中堆叠机器学习模型

如何在R中堆叠机器学习模型,r,machine-learning,ensemble-learning,R,Machine Learning,Ensemble Learning,我是机器学习和R的新手 我知道有一个名为的R包,它可以方便地将模型堆叠在R中。但是,这个包看起来有 暂时,我编写了一些代码来尝试手动堆叠模型,下面是我处理的示例: library(caret) set.seed(123) library(AppliedPredictiveModeling) data(AlzheimerDisease) adData = data.frame(diagnosis, predictors) inTrain = crea

我是机器学习和R的新手

我知道有一个名为的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
然后,我只是使用这样的数据帧作为新的
列车集
来创建一个堆叠模型:

   modelStack <- train(diagnosis ~ ., data = predDF, method = "rf")
   combPred <- predict(modelStack, predDF)
   confusionMatrix(combPred, testing$diagnosis)$overall[1] 
   #Accuracy 
   #0.804878

您可以将predDF分为一个验证集(在其上进行堆叠)和最终测试集(在其上进行样本外预测)。不要在整个predDF上叠加,因为您的模型不应该以任何方式依赖于最终的测试集。您好@raymkchow,您的意思是:我可以将predDF分为验证集和测试集,并将三个模型和叠加模型应用于验证集,以查看结果并与这些结果进行比较,以找到最佳模型。下一步,我可以把最好的模型应用到测试集中去做样本外预测,对吗?是的,你是对的。我们可以选择最好的模型,也可以将这三个模型(基础模型)组合成更好的模型。您可以将predDF分为验证集(在上面进行叠加)和最终测试集(在上面进行样本外预测)。不要在整个predDF上叠加,因为您的模型不应该以任何方式依赖于最终的测试集。您好@raymkchow,您的意思是:我可以将predDF分为验证集和测试集,并将三个模型和叠加模型应用于验证集,以查看结果并与这些结果进行比较,以找到最佳模型。下一步,我可以把最好的模型应用到测试集中去做样本外预测,对吗?是的,你是对的。我们可以选择最好的模型,或者将这三个模型(基础模型)组合成更好的模型。
   modelStack <- train(diagnosis ~ ., data = predDF, method = "rf")
   combPred <- predict(modelStack, predDF)
   confusionMatrix(combPred, testing$diagnosis)$overall[1] 
   #Accuracy 
   #0.804878
   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]