2016-05-13 16 views
8

Tôi muốn biết liệu có cách nào để vẽ Đường cong ROC trung bình từ dữ liệu xác thực chéo của mô hình SVM-RFE được tạo bằng gói caret hay không.Đường cong ROC lô từ dữ liệu Cross-Validation (đào tạo) trong R

kết quả của tôi là:

Recursive feature selection 

Outer resampling method: Cross-Validated (10 fold, repeated 5 times) 

Resampling performance over subset size: 

Variables ROC Sens Spec Accuracy Kappa ROCSD SensSD SpecSD AccuracySD KappaSD Selected 
     1 0.6911 0.0000 1.0000 0.5900 0.0000 0.2186 0.0000 0.0000  0.0303 0.0000   
     2 0.7600 0.3700 0.8067 0.6280 0.1807 0.1883 0.3182 0.2139  0.1464 0.3295   
     3 0.7267 0.4233 0.8667 0.6873 0.3012 0.2020 0.3216 0.1905  0.1516 0.3447   
     4 0.6989 0.3867 0.8600 0.6680 0.2551 0.2130 0.3184 0.1793  0.1458 0.3336   
     5 0.7000 0.3367 0.8600 0.6473 0.2006 0.2073 0.3359 0.1793  0.1588 0.3672   
     6 0.7167 0.3833 0.8200 0.6427 0.2105 0.1909 0.3338 0.2539  0.1682 0.3639   
     7 0.7122 0.3767 0.8333 0.6487 0.2169 0.1784 0.3226 0.2048  0.1642 0.3702   
     8 0.7144 0.4233 0.7933 0.6440 0.2218 0.2017 0.3454 0.2599  0.1766 0.3770   
     9 0.8356 0.6533 0.7867 0.7300 0.4363 0.1706 0.3415 0.2498  0.1997 0.4209   
     10 0.8811 0.6867 0.8200 0.7647 0.5065 0.1650 0.3134 0.2152  0.1949 0.4053  * 
     11 0.8700 0.6933 0.8133 0.7627 0.5046 0.1697 0.3183 0.2147  0.1971 0.4091   
     12 0.8678 0.6967 0.7733 0.7407 0.4682 0.1579 0.3153 0.2559  

... 
The top 5 variables (out of 10): 
    SumAverage_GLCM_R1SC4NG2, Variance_GLCM_R1SC4NG2, HGZE_GLSZM_R1SC4NG2, LGZE_GLSZM_R1SC4NG2, SZLGE_GLSZM_R1SC4NG2 

Tôi đã thử với các giải pháp đề cập ở đây: ROC curve from training data in caret

optSize <- svmRFE_NG2$optsize 
selectedIndices <- svmRFE_NG2$pred$Variables == optSize 
plot.roc(svmRFE_NG2$pred$obs[selectedIndices], 
     svmRFE_NG2$pred$LUNG[selectedIndices]) 

Nhưng giải pháp này dường như không làm việc (kết quả giá trị AUC là khá khác nhau). Tôi đã tách các kết quả của quá trình đào tạo thành 50 bộ xác nhận chéo, như đã đề cập trong câu trả lời trước, nhưng tôi không biết phải làm gì tiếp theo.

resamples<-split(svmRFE_NG2$pred,svmRFE_NG2$pred$Variables) 
resamplesFOLD<-split(resamples[[optSize]],resamples[[optSize]]$Resample) 

Bất kỳ ý tưởng nào?

Trả lời

10

Như bạn đã làm bạn có thể a) cho phép savePredictions = T trong trainControl tham số của caret::train, sau đó, b) từ đối tượng mô hình đào tạo, sử dụng pred biến - trong đó có tất cả các dự đoán trên khắp các phân vùng và resamples - để tính toán bất cứ ROC đường cong bạn muốn xem. Bây giờ bạn có nhiều lựa chọn trong đó Trung Hoa Dân Quốc này có thể, ví dụ:

bạn có thể nhìn vào tất cả các dự đoán trên khắp các phân vùng và resamples cùng một lúc:

plot(roc(predictor = modelObject$pred$CLASSNAME, response = modelObject$pred$obs)) 

Hoặc bạn có thể làm điều này trên phân vùng cá nhân và/hoặc lấy lại mẫu (đó là những gì bạn đã thử ở trên). Ví dụ sau sẽ tính toán đường cong ROC mỗi phân vùng đổi mẫu, như vậy với 10 phân vùng và 5 lặp đi lặp lại sẽ gây ra 50 đường cong ROC:

library(plyr) 
l_ply(split(modelObject$pred, modelObject$pred$Resample), function(d) { 
    plot(roc(predictor = d$CLASSNAME, response = d$obs)) 
}) 

Tùy thuộc vào dữ liệu và mô hình của bạn, sau này sẽ cung cấp cho bạn một số phương sai trong đường cong ROC và giá trị AUC. Bạn có thể thấy phương sai tương tự trong các giá trị AUCSDcaret được tính cho các phân đoạn và mẫu của riêng bạn, vì vậy kết quả này từ dữ liệu và mô hình của bạn và chính xác.

BTW: Tôi đã sử dụng chức năng pROC::roc để tính toán các ví dụ ở trên, nhưng bạn có thể sử dụng bất kỳ chức năng phù hợp nào tại đây. Và, khi sử dụng caret::train thu thập ROC luôn giống nhau, bất kể loại mô hình là gì.

Các vấn đề liên quan