Apakah preprocessing diperlukan sebelum prediksi menggunakan FinalModel dari RandomForest dengan paket caret?


12

Saya menggunakan paket caret untuk melatih objek randomForest dengan 10x10CV.

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"))

Setelah itu, saya menguji randomForest pada testSet (data baru)

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

Matriks kebingungan menunjukkan kepada saya, bahwa modelnya tidak terlalu buruk.

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 

Saya sekarang ingin menguji $ finalModel dan saya pikir itu harus memberi saya hasil yang sama, tetapi entah bagaimana saya terima

> 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 

Apa yang saya lewatkan?

edit @topepo:

Saya juga belajar randomForest lain tanpa opsi preProcessed dan mendapat hasil lain:

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     

dalam contoh pertama, Anda memprediksikan dengan objek kereta yang Anda panggil RFFit, di kedua kalinya Anda diprediksi menggunakan objek model, saya kira. Jadi perbedaannya mungkin dalam melewati hal-hal lain bersama dengan objek kereta yang memproses data tes baru Anda entah bagaimana berbeda daripada tanpa menggunakan objek kereta.
doktoral

4
Untuk trainmodel ke-2 Anda akan mendapatkan hasil yang sedikit berbeda kecuali jika Anda mengatur seed number acak sebelum menjalankannya (lihat ?set.seed). Nilai akurasi adalah 0,8135 dan 0,8111, yang cukup dekat dan hanya karena keacakan sampel dan perhitungan model.
topepo

Jawaban:


17

Perbedaannya adalah pra-pemrosesan. predict.trainsecara otomatis memusatkan dan menskala data baru (karena Anda memintanya) sambil predict.randomForestmengambil apa pun yang diberikan. Karena pembagian pohon didasarkan pada nilai yang diproses, prediksi akan dimatikan.

Maks


tetapi RFFitobjek dibuat dengan trainmetode preProcessed ... jadi itu harus mengembalikan objek terpusat dan diskalakan (tidak boleh itu?). Jika demikian -> $finalModeljuga harus diskalakan dan dipusatkan
Frank

2
Ya tetapi, sesuai dengan kode di atas, Anda belum menerapkan pemusatan dan penskalaan testSet. predict.trainmelakukan itu tetapi predict.randomForesttidak.
topepo

jadi tidak ada perbedaan dalam menggunakan predict(RFFit$finalModel, testSet)dan predict(RFFit, testSet)pada testSet yang sama?
Frank

6
predict(RFFit$finalModel, testSet)dan predict(RFFit, testSet)akan berbeda jika Anda menggunakan preProcopsi di train. Jika tidak, mereka dilatih dengan dataset yang sama. Dengan kata lain, setiap pra-pemrosesan yang Anda minta dilakukan untuk set pelatihan sebelum berjalan randomForest. Itu juga menerapkan pra-pemrosesan yang sama untuk setiap data yang Anda prediksi (menggunakan predict(RFFit, testSet)). Jika Anda menggunakan finalModelobjek, Anda menggunakan predict.randomForestbukan predict.traindan tidak ada pra-pemrosesan dilakukan sebelum prediksi.
topepo
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.