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
r
random-forest
prediction
caret
jujur
sumber
sumber
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.train
model 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.Jawaban:
Perbedaannya adalah pra-pemrosesan.
predict.train
secara otomatis memusatkan dan menskala data baru (karena Anda memintanya) sambilpredict.randomForest
mengambil apa pun yang diberikan. Karena pembagian pohon didasarkan pada nilai yang diproses, prediksi akan dimatikan.Maks
sumber
RFFit
objek dibuat dengantrain
metode preProcessed ... jadi itu harus mengembalikan objek terpusat dan diskalakan (tidak boleh itu?). Jika demikian ->$finalModel
juga harus diskalakan dan dipusatkantestSet
.predict.train
melakukan itu tetapipredict.randomForest
tidak.predict(RFFit$finalModel, testSet)
danpredict(RFFit, testSet)
pada testSet yang sama?predict(RFFit$finalModel, testSet)
danpredict(RFFit, testSet)
akan berbeda jika Anda menggunakanpreProc
opsi ditrain
. Jika tidak, mereka dilatih dengan dataset yang sama. Dengan kata lain, setiap pra-pemrosesan yang Anda minta dilakukan untuk set pelatihan sebelum berjalanrandomForest
. Itu juga menerapkan pra-pemrosesan yang sama untuk setiap data yang Anda prediksi (menggunakanpredict(RFFit, testSet)
). Jika Anda menggunakanfinalModel
objek, Anda menggunakanpredict.randomForest
bukanpredict.train
dan tidak ada pra-pemrosesan dilakukan sebelum prediksi.