Saya agak bingung: Bagaimana hasil dari Model yang terlatih melalui caret berbeda dari model dalam paket aslinya? Saya membaca apakah preprocessing diperlukan sebelum prediksi menggunakan FinalModel dari RandomForest dengan paket caret? tapi saya tidak menggunakan preprocessing di sini.
Saya melatih berbagai Random Forests dengan menggunakan paket caret dan tuning untuk nilai mtry yang berbeda.
> cvCtrl = trainControl(method = "repeatedcv",number = 10, repeats = 3, classProbs = TRUE, summaryFunction = twoClassSummary)
> newGrid = expand.grid(mtry = c(2,4,8,15))
> classifierRandomForest = train(case_success ~ ., data = train_data, trControl = cvCtrl, method = "rf", metric="ROC", tuneGrid = newGrid)
> curClassifier = classifierRandomForest
Saya menemukan mtry = 15 sebagai parameter terbaik di training_data:
> curClassifier
...
Resampling results across tuning parameters:
mtry ROC Sens Spec ROC SD Sens SD Spec SD
4 0.950 0.768 0.957 0.00413 0.0170 0.00285
5 0.951 0.778 0.957 0.00364 0.0148 0.00306
8 0.953 0.792 0.956 0.00395 0.0152 0.00389
10 0.954 0.797 0.955 0.00384 0.0146 0.00369
15 0.956 0.803 0.951 0.00369 0.0155 0.00472
ROC was used to select the optimal model using the largest value.
The final value used for the model was mtry = 15.
Saya menilai model dengan Kurva ROC dan matriks kebingungan:
##ROC-Curve
predRoc = predict(curClassifier, test_data, type = "prob")
myroc = pROC::roc(test_data$case_success, as.vector(predRoc[,2]))
plot(myroc, print.thres = "best")
##adjust optimal cut-off threshold for class probabilities
threshold = coords(myroc,x="best",best.method = "closest.topleft")[[1]] #get optimal cutoff threshold
predCut = factor( ifelse(predRoc[, "Yes"] > threshold, "Yes", "No") )
##Confusion Matrix (Accuracy, Spec, Sens etc.)
curConfusionMatrix = confusionMatrix(predCut, test_data$case_success, positive = "Yes")
Matriks dan Akurasi yang dihasilkan:
Confusion Matrix and Statistics
Reference
Prediction No Yes
No 2757 693
Yes 375 6684
Accuracy : 0.8984
....
Sekarang saya melatih Rorest Acak dengan parameter yang sama dan training_data yang sama menggunakan paket randomForest dasar:
randomForestManual <- randomForest(case_success ~ ., data=train_data, mtry = 15, ntree=500,keep.forest=TRUE)
curClassifier = randomForestManual
Sekali lagi saya membuat prediksi untuk test_data yang sama seperti di atas dan menilai matriks kebingungan dengan kode yang sama seperti di atas. Tapi sekarang saya mendapat langkah berbeda:
Confusion Matrix and Statistics
Reference
Prediction No Yes
No 2702 897
Yes 430 6480
Accuracy : 0.8737
....
Apa alasannya? Apa yang saya lewatkan?
seeds
argumentrainControl