Uso il pacchetto di cursore per allenare un oggetto randomForest con 10x10CV.
library(caret)
tc <- trainControl("repeatedcv", number=10, repeats=10, classProbs=TRUE, savePred=T)
RFFit <- train(Defect ~., data=trainingSet, method="rf", trControl=tc, preProc=c("center", "scale"))
Successivamente, testare randomForest su un testSet (nuovi dati)
RF.testSet$Prediction <- predict(RFFit, newdata=testSet)
La matrice di confusione mi mostra che il modello non è poi così male.
confusionMatrix(data=RF.testSet$Prediction, RF.testSet$Defect)
Reference
Prediction 0 1
0 886 179
1 53 126
Accuracy : 0.8135
95% CI : (0.7907, 0.8348)
No Information Rate : 0.7548
P-Value [Acc > NIR] : 4.369e-07
Kappa : 0.4145
Ora voglio provare $ finalModel e penso che dovrebbe darmi lo stesso risultato, ma in qualche modo ricevo
> RF.testSet$Prediction <- predict(RFFit$finalModel, newdata=RF.testSet)
> confusionMatrix(data=RF.testSet$Prediction, RF.testSet$Defect)
Confusion Matrix and Statistics
Reference
Prediction 0 1
0 323 66
1 616 239
Accuracy : 0.4518
95% CI : (0.4239, 0.4799)
No Information Rate : 0.7548
P-Value [Acc > NIR] : 1
Kappa : 0.0793
Cosa mi sto perdendo?
modifica @topepo:
Ho anche imparato un altro randomForest senza l'opzione pre-elaborata e ho ottenuto un altro risultato:
RFFit2 <- train(Defect ~., data=trainingSet, method="rf", trControl=tc)
testSet$Prediction2 <- predict(RFFit2, newdata=testSet)
confusionMatrix(data=testSet$Prediction2, testSet$Defect)
Confusion Matrix and Statistics
Reference
Prediction 0 1
0 878 174
1 61 131
Accuracy : 0.8111
95% CI : (0.7882, 0.8325)
No Information Rate : 0.7548
P-Value [Acc > NIR] : 1.252e-06
Kappa : 0.4167
trainmodello otterrai un risultato leggermente diverso a meno che tu non imposti il seme del numero casuale prima di eseguirlo (vedi ?set.seed). I valori di precisione sono 0,8135 e 0,8111, che sono piuttosto vicini e solo a causa della casualità del ricampionamento e dei calcoli del modello.
RFFit, nella seconda volta in cui hai predetto l'utilizzo dell'oggetto modello, immagino. Quindi la differenza potrebbe essere nel passare altre cose insieme all'oggetto train che ha elaborato i nuovi dati di test in qualche modo in modo diverso rispetto a quando non si utilizza l'oggetto train.