Ich bin etwas verwirrt: Wie können sich die Ergebnisse eines trainierten Modells per Caret vom Modell in der Originalverpackung unterscheiden? Ich habe gelesen, ob vor der Vorhersage mit FinalModel von RandomForest mit Caret-Paket eine Vorverarbeitung erforderlich ist. aber ich benutze hier keine vorverarbeitung.
Ich habe verschiedene Zufallswälder trainiert, indem ich das Caret-Paket verwendet und für verschiedene mtry-Werte gestimmt habe.
> 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
Ich fand mtry = 15 als den besten Parameter für die 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.
Ich habe das Modell mit einer ROC-Kurve und einer Verwirrungsmatrix bewertet:
##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")
Die resultierende Verwirrungsmatrix und Genauigkeit:
Confusion Matrix and Statistics
Reference
Prediction No Yes
No 2757 693
Yes 375 6684
Accuracy : 0.8984
....
Jetzt habe ich mit dem Basispaket randomForest einen Zufalls-Rorest mit denselben Parametern und denselben trainingsdaten trainiert:
randomForestManual <- randomForest(case_success ~ ., data=train_data, mtry = 15, ntree=500,keep.forest=TRUE)
curClassifier = randomForestManual
Wiederum habe ich Vorhersagen für dieselben Testdaten wie oben erstellt und die Verwirrungsmatrix mit demselben Code wie oben bewertet. Aber jetzt habe ich verschiedene Maßnahmen:
Confusion Matrix and Statistics
Reference
Prediction No Yes
No 2702 897
Yes 430 6480
Accuracy : 0.8737
....
Was ist der Grund? Was vermisse ich?
seeds
Argument vontrainControl