在使用带有插入符号包的 RandomForest 的 FinalModel 进行预测之前是否需要预处理?

机器算法验证 r 随机森林 预言 插入符号
2022-03-17 05:05:55

我使用 caret 包来训练一个 10x10CV 的 randomForest 对象。

library(caret)
tc <- trainControl("repeatedcv", number=10, repeats=10, classProbs=TRUE, savePred=T) 
RFFit <- train(Defect ~., data=trainingSet, method="rf", trControl=tc, preProc=c("center", "scale"))

之后,我在 testSet 上测试 randomForest(新数据)

RF.testSet$Prediction <- predict(RFFit, newdata=testSet)

混淆矩阵告诉我,模型还不错。

confusionMatrix(data=RF.testSet$Prediction, RF.testSet$Defect)
              Reference
    Prediction   0   1
             0 886 179
             1  53 126  

      Accuracy : 0.8135          
             95% CI : (0.7907, 0.8348)
No Information Rate : 0.7548          
P-Value [Acc > NIR] : 4.369e-07       

              Kappa : 0.4145 

我现在想测试 $finalModel 并且我认为它应该给我相同的结果,但不知何故我收到

> RF.testSet$Prediction <- predict(RFFit$finalModel, newdata=RF.testSet)
>  confusionMatrix(data=RF.testSet$Prediction, RF.testSet$Defect)
Confusion Matrix and Statistics

          Reference
Prediction   0   1
         0 323  66
         1 616 239

               Accuracy : 0.4518          
                 95% CI : (0.4239, 0.4799)
    No Information Rate : 0.7548          
    P-Value [Acc > NIR] : 1               

                  Kappa : 0.0793 

我错过了什么?

编辑@topepo:

我还学习了另一个没有 preProcessed 选项的 randomForest 并得到了另一个结果:

RFFit2 <- train(Defect ~., data=trainingSet, method="rf", trControl=tc)
testSet$Prediction2 <- predict(RFFit2, newdata=testSet)
confusionMatrix(data=testSet$Prediction2, testSet$Defect)

Confusion Matrix and Statistics

          Reference
Prediction   0   1
         0 878 174
         1  61 131

               Accuracy : 0.8111          
                 95% CI : (0.7882, 0.8325)
    No Information Rate : 0.7548          
    P-Value [Acc > NIR] : 1.252e-06       

                  Kappa : 0.4167     
1个回答

区别在于预处理。predict.train自动居中并缩放新数据(因为您要求这样做),同时predict.randomForest获取给定的任何内容。由于树拆分是基于处理后的值,因此预测将关闭。

最大限度