Estou um pouco confuso: como os resultados de um modelo treinado via sinal de intercalação diferem do modelo na embalagem original? Eu li se o pré-processamento é necessário antes da previsão usando o FinalModel do RandomForest com pacote de interpolação? mas eu não uso nenhum pré-processamento aqui.
Treinei diferentes florestas aleatórias usando o pacote de acento circunflexo e ajustando-me para diferentes valores de manejo.
> 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
Eu achei mtry = 15 o melhor parâmetro no 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.
Avaliei o modelo com uma curva ROC e uma matriz de confusão:
##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")
A matriz de confusão e precisão resultantes:
Confusion Matrix and Statistics
Reference
Prediction No Yes
No 2757 693
Yes 375 6684
Accuracy : 0.8984
....
Agora eu treinei um Random Rorest com os mesmos parâmetros e os mesmos training_data usando o pacote randomForest básico:
randomForestManual <- randomForest(case_success ~ ., data=train_data, mtry = 15, ntree=500,keep.forest=TRUE)
curClassifier = randomForestManual
Novamente, criei previsões para os mesmos dados_de_teste como acima e avaliei a matriz de confusão com o mesmo código acima. Mas agora eu tenho medidas diferentes:
Confusion Matrix and Statistics
Reference
Prediction No Yes
No 2702 897
Yes 430 6480
Accuracy : 0.8737
....
Qual é a razão? o que estou perdendo?
seeds
argumento detrainControl