Tôi hơi bối rối: Làm thế nào các kết quả của một Mô hình được đào tạo thông qua caret khác với mô hình trong gói ban đầu? Tôi đọc Có cần tiền xử lý trước khi dự đoán bằng FinalModel của RandomForest với gói caret không? nhưng tôi không sử dụng bất kỳ tiền xử lý nào ở đây.
Tôi đã huấn luyện các Rừng ngẫu nhiên khác nhau bằng cách sử dụng gói caret và điều chỉnh cho các giá trị mtry khác nhau.
> 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
Tôi thấy mtry = 15 là tham số tốt nhất trên 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.
Tôi đã đánh giá mô hình với Đường cong ROC và ma trận nhầm lẫn:
##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")
Ma trận nhầm lẫn kết quả và độ chính xác:
Confusion Matrix and Statistics
Reference
Prediction No Yes
No 2757 693
Yes 375 6684
Accuracy : 0.8984
....
Bây giờ tôi đã đào tạo một Rorest ngẫu nhiên với cùng các tham số và cùng training_data bằng cách sử dụng gói RandomForest cơ bản:
randomForestManual <- randomForest(case_success ~ ., data=train_data, mtry = 15, ntree=500,keep.forest=TRUE)
curClassifier = randomForestManual
Một lần nữa tôi đã tạo dự đoán cho test_data giống như trên và đánh giá ma trận nhầm lẫn với cùng mã như trên. Nhưng bây giờ tôi có các biện pháp khác nhau:
Confusion Matrix and Statistics
Reference
Prediction No Yes
No 2702 897
Yes 430 6480
Accuracy : 0.8737
....
Lý do là gì? Tôi đang thiếu gì?
seeds
đối số củatrainControl