2015-06-30 9 views
15

आर पैकेज कैरेट का उपयोग करके, मैं ट्रेन() फ़ंक्शन के क्रॉस-सत्यापन परिणामों के आधार पर आरओसी वक्र कैसे उत्पन्न कर सकता हूं?कैरेट में प्रशिक्षण डेटा से आरओसी वक्र

कहो, मैं निम्न कार्य करें:

data(Sonar) 
ctrl <- trainControl(method="cv", 
    summaryFunction=twoClassSummary, 
    classProbs=T) 
rfFit <- train(Class ~ ., data=Sonar, 
    method="rf", preProc=c("center", "scale"), 
    trControl=ctrl) 

प्रशिक्षण समारोह mtry पैरामीटर की एक सीमा से अधिक हो जाता है और आरओसी एयूसी गणना करता है। मैं संबंधित आरओसी वक्र देखना चाहता हूं - मैं यह कैसे कर सकता हूं?

नोट: यदि नमूनाकरण के लिए उपयोग की जाने वाली विधि LOOCV है, तो rfFit में rfFit$pred स्लॉट में एक गैर-शून्य डेटा फ्रेम होगा, जो वास्तव में मुझे चाहिए। हालांकि, मुझे एलओओ की बजाय "सीवी" विधि (के-गुना सत्यापन) की आवश्यकता है।

इसके अलावा: नहीं, roc फ़ंक्शन जो कैरेट के पूर्व संस्करणों में शामिल किया जाता था, वह उत्तर नहीं है - यह निम्न स्तर का फ़ंक्शन है, यदि आप प्रत्येक के लिए पूर्वानुमान संभावनाएं नहीं हैं तो आप इसका उपयोग नहीं कर सकते पार-प्रमाणित नमूना।

+0

http://www.inside-r.org/packages/cran/देखभाल/दस्तावेज़/roc – Frash

+0

नहीं, यह जवाब नहीं है। सबसे पहले, कैरेट के आधुनिक संस्करण में फ़ंक्शन नहीं है। दूसरा, फ़ंक्शन को "कटौती करने के लिए परिवर्तनीय" की आवश्यकता होती है - विशेष रूप से, पूर्वानुमान संभावनाएं, लेकिन मैं ट्रेन() फ़ंक्शन द्वारा लौटाई गई वस्तु से इन्हें कैसे प्राप्त करूं? – January

उत्तर

22

सिर्फ savePredictions = TRUE तर्क ctrl से लापता है (यह भी अन्य resampling तरीकों के लिए काम करता है) है: कुछ

library(caret) 
library(mlbench) 
data(Sonar) 
ctrl <- trainControl(method="cv", 
        summaryFunction=twoClassSummary, 
        classProbs=T, 
        savePredictions = T) 
rfFit <- train(Class ~ ., data=Sonar, 
       method="rf", preProc=c("center", "scale"), 
       trControl=ctrl) 
library(pROC) 
# Select a parameter setting 
selectedIndices <- rfFit$pred$mtry == 2 
# Plot: 
plot.roc(rfFit$pred$obs[selectedIndices], 
     rfFit$pred$M[selectedIndices]) 

ROC

हो सकता है कि मुझे याद आ रही है, लेकिन एक छोटे से चिंता यह है कि train हमेशा अनुमान है plot.roc और pROC::auc (पूर्ण अंतर < 0.005) से थोड़ा अलग एयूसी मान, हालांकि twoClassSummary AUC का अनुमान लगाने के लिए pROC::auc का उपयोग करता है। संपादित करें: मुझे लगता है कि ऐसा होता है क्योंकि train से आरओसी अलग सीवी-सेट का उपयोग करके एयूसी का औसत है और यहां हम कुल एयूसी प्राप्त करने के लिए एक साथ सभी resamples पर एयूसी की गणना कर रहे हैं।

अद्यतन चूंकि यह ध्यान का एक सा हो रही है, यहाँ ggplot2 के लिए plotROC::geom_roc() का उपयोग कर एक समाधान है:

library(ggplot2) 
library(plotROC) 
ggplot(rfFit$pred[selectedIndices, ], 
     aes(m = M, d = factor(obs, levels = c("R", "M")))) + 
    geom_roc(hjust = -0.4, vjust = 1.5) + coord_equal() 

ggplot_roc

+4

ओओबी नमूने से बनाए गए एक बनाम कई एयूसी औसत के बारे में आपकी टिप्पणी सही है। वे कुछ अलग होंगे। – topepo

+0

'rfFit $ finalModel $ mtry' के साथ अंतिम मॉडल mtry निकाला जा सकता है –

8

यहाँ, मैं @ thei1e की साजिश को संशोधित कर रहा हूँ, जो दूसरों हो सकता है सहायक पाएं

ट्रेन मॉडल और बनाने भविष्यवाणियों

library(caret) 
library(ggplot2) 
library(mlbench) 
library(plotROC) 

data(Sonar) 

ctrl <- trainControl(method="cv", summaryFunction=twoClassSummary, classProbs=T, 
        savePredictions = T) 

rfFit <- train(Class ~ ., data=Sonar, method="rf", preProc=c("center", "scale"), 
       trControl=ctrl) 

# Select a parameter setting 
selectedIndices <- rfFit$pred$mtry == 2 

अपडेट किया गया ROC वक्र साजिश

g <- ggplot(rfFit$pred[selectedIndices, ], aes(m=M, d=factor(obs, levels = c("R", "M")))) + 
    geom_roc(n.cuts=0) + 
    coord_equal() + 
    style_roc() 

g + annotate("text", x=0.75, y=0.25, label=paste("AUC =", round((calc_auc(g))$AUC, 4))) 

enter image description here

संबंधित मुद्दे