Jestem trochę zdezorientowany: w jaki sposób wyniki wyszkolonego Modelu za pomocą karetki mogą różnić się od modelu w oryginalnym opakowaniu? Czytałem, czy wstępne przetwarzanie jest potrzebne przed prognozowaniem przy użyciu FinalModel z RandomForest z pakietem Caret? ale nie używam tutaj żadnego przetwarzania wstępnego.
Trenowałem różne Losowe Lasy, używając pakietu Caret i dostosowując je do różnych wartości mtry.
> 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
Odkryłem, że mtry = 15 jest najlepszym parametrem w danych treningowych:
> 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.
Oceniłem model za pomocą krzywej ROC i macierzy zamieszania:
##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")
Wynikowa macierz nieporozumień i dokładność:
Confusion Matrix and Statistics
Reference
Prediction No Yes
No 2757 693
Yes 375 6684
Accuracy : 0.8984
....
Teraz trenowałem Random Rorest z tymi samymi parametrami i tymi samymi danymi_ treningowymi przy użyciu podstawowego pakietu randomForest:
randomForestManual <- randomForest(case_success ~ ., data=train_data, mtry = 15, ntree=500,keep.forest=TRUE)
curClassifier = randomForestManual
Ponownie stworzyłem prognozy dla tych samych danych test_danych jak powyżej i oceniłem macierz pomyłek przy użyciu tego samego kodu jak powyżej. Ale teraz mam inne środki:
Confusion Matrix and Statistics
Reference
Prediction No Yes
No 2702 897
Yes 430 6480
Accuracy : 0.8737
....
Jaki jest powód? czego mi brakuje?
seeds
argumentutrainControl