Sono un po 'confuso: in che modo i risultati di un modello addestrato tramite il cursore possono differire dal modello nella confezione originale? Ho letto Se è necessaria la preelaborazione prima della previsione utilizzando FinalModel di RandomForest con pacchetto di inserimento? ma non uso alcuna preelaborazione qui.
Ho addestrato diverse foreste casuali utilizzando il pacchetto di inserimento e sintonizzazione per valori di mtry diversi.
> 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
Ho trovato mtry = 15 come il miglior parametro su 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.
Ho valutato il modello con una curva ROC e una matrice di confusione:
##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")
La matrice di confusione e la precisione risultanti:
Confusion Matrix and Statistics
Reference
Prediction No Yes
No 2757 693
Yes 375 6684
Accuracy : 0.8984
....
Ora ho allenato un Random Rorest con gli stessi parametri e gli stessi training_data usando il pacchetto randomForest di base:
randomForestManual <- randomForest(case_success ~ ., data=train_data, mtry = 15, ntree=500,keep.forest=TRUE)
curClassifier = randomForestManual
Ancora una volta ho creato previsioni per lo stesso test_data di cui sopra e valutato la matrice di confusione con lo stesso codice di cui sopra. Ma ora ho ottenuto diverse misure:
Confusion Matrix and Statistics
Reference
Prediction No Yes
No 2702 897
Yes 430 6480
Accuracy : 0.8737
....
Qual è il motivo? Cosa mi sto perdendo?
seeds
argomento ditrainControl