Ich verwende das Caret-Paket zum Trainieren eines randomForest-Objekts mit 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"))
Danach teste ich den randomForest auf einem testSet (neue Daten)
RF.testSet$Prediction <- predict(RFFit, newdata=testSet)
Die Verwirrungsmatrix zeigt mir, dass das Modell nicht so schlecht ist.
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
Ich möchte jetzt das $ finalModel testen und ich denke, es sollte mir das gleiche Ergebnis liefern, aber irgendwie erhalte ich es
> 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
Was vermisse ich?
edit @topepo:
Ich habe auch einen anderen randomForest ohne die vorverarbeitete Option gelernt und ein anderes Ergebnis erhalten:
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
Modell erhalten Sie ein etwas anderes Ergebnis, es sei denn, Sie legen den Zufallszahlen-Startwert fest, bevor Sie ihn ausführen (siehe ?set.seed
). Die Genauigkeitswerte sind 0,8135 und 0,8111, die ziemlich nahe beieinander liegen und nur auf die Zufälligkeit des Resamplings und die Modellberechnungen zurückzuführen sind.
RFFit
haben. In der zweiten Instanz haben Sie mit dem Modellobjekt vorausgesagt, denke ich. Der Unterschied könnte also darin bestehen, andere Dinge zusammen mit dem Zugobjekt zu übergeben, das Ihre neuen Testdaten irgendwie anders verarbeitet hat, als ohne das Zugobjekt zu verwenden.