J'utilise le package caret pour entraîner un objet randomForest avec 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"))
Après cela, je teste randomForest sur un testSet (nouvelles données)
RF.testSet$Prediction <- predict(RFFit, newdata=testSet)
La matrice de confusion me montre que le modèle n'est pas si mauvais.
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
Je veux maintenant tester le $ finalModel et je pense qu'il devrait me donner le même résultat, mais je reçois en quelque sorte
> 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
Qu'est-ce que je rate?
modifier @topepo:
J'ai également appris un autre randomForest sans l'option pré-traitée et j'ai obtenu un autre résultat:
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
train
modèle, vous obtiendrez un résultat légèrement différent, sauf si vous définissez la valeur de départ aléatoire avant de l'exécuter (voir ?set.seed
). Les valeurs de précision sont 0,8135 et 0,8111, qui sont assez proches et uniquement en raison du caractère aléatoire du rééchantillonnage et des calculs du modèle.
RFFit
, dans un second temps vous avez prédit en utilisant l'objet modèle, je suppose. Ainsi, la différence pourrait être de passer d'autres choses avec l'objet train qui a traité vos nouvelles données de test différemment que sans utiliser l'objet train.