ฉันสับสนเล็กน้อย: ผลลัพธ์ของโมเดลที่ได้รับการฝึกอบรมผ่านคาเร็ตจะแตกต่างจากโมเดลในแพ็คเกจดั้งเดิมอย่างไร ฉันอ่านว่าจำเป็นต้องมีการประมวลผลล่วงหน้าก่อนการทำนายด้วย FinalModel ของ RandomForest พร้อมชุดคาเร็ตหรือไม่? แต่ฉันไม่ได้ใช้ preprocessing ใด ๆ ที่นี่
ฉันฝึกป่าสุ่มที่แตกต่างกันโดยใช้ชุดคาเร็ตและปรับแต่งค่า mtry ที่แตกต่างกัน
> 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
ฉันพบว่า mtry = 15 เป็นพารามิเตอร์ที่ดีที่สุดใน 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.
ฉันประเมินโมเดลด้วย ROC Curve และเมทริกซ์ความสับสน:
##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")
เมทริกซ์ความสับสนและผลลัพธ์ที่แม่นยำ:
Confusion Matrix and Statistics
Reference
Prediction No Yes
No 2757 693
Yes 375 6684
Accuracy : 0.8984
....
ตอนนี้ฉันฝึก Rorest แบบสุ่มด้วยพารามิเตอร์เดียวกันและ training_data เดียวกันโดยใช้แพ็คเกจ randomForest พื้นฐาน:
randomForestManual <- randomForest(case_success ~ ., data=train_data, mtry = 15, ntree=500,keep.forest=TRUE)
curClassifier = randomForestManual
ฉันสร้างการคาดการณ์อีกครั้งสำหรับ test_data เดียวกันข้างต้นและประเมินเมทริกซ์ความสับสนด้วยรหัสเดียวกันข้างต้น แต่ตอนนี้ฉันมีมาตรการที่แตกต่าง:
Confusion Matrix and Statistics
Reference
Prediction No Yes
No 2702 897
Yes 430 6480
Accuracy : 0.8737
....
เหตุผลคืออะไร ฉันกำลังคิดถึงอะไร
seeds
อาร์กิวเมนต์ของtrainControl