2013-01-22 14 views
9

मेरे पास rfe लाइब्रेरी caret लाइब्रेरी से संबंधित प्रश्न है। algorithmआर कैरेट/आरएफ काम के भीतर ट्रेन के लिए क्रॉस-सत्यापन कैसे करता है

इस उदाहरण के लिए मैं 3 गुना पार सत्यापन के साथ rfe समारोह और एक रेखीय-SVM और 5 गुना के साथ ट्रेन समारोह का उपयोग कर रहा: कैरट-मुखपृष्ठ link पर वे निम्नलिखित RFE एल्गोरिथ्म देना परिणाम का सत्यापन करना।

library(kernlab) 
library(caret) 
data(iris) 

# parameters for the tune function, used for fitting the svm 
trControl <- trainControl(method = "cv", number = 5) 

# parameters for the RFE function 
rfeControl <- rfeControl(functions = caretFuncs, method = "cv", 
        number= 4, verbose = FALSE) 

rf1 <- rfe(as.matrix(iris[,1:4]), as.factor(iris[,5]) ,sizes = c(2,3) , 
      rfeControl = rfeControl, trControl = trControl, method = "svmLinear") 
  • एल्गोरिथ्म ऊपर मैं मान लिया है कि एल्गोरिथ्म 2 नेस्टेड पार सत्यापन के साथ काम करेगा से:
    1. rfe 3 सिलवटों
    2. train समारोह होगा में डेटा (150 नमूने) विभाजित हैं मॉडल पैरामीटर को ट्यून करने के लिए 5 गुना क्रॉस सत्यापन के साथ प्रशिक्षण-सेट (100 नमूने) पर चलाएं - बाद में आरएफई के साथ।

मुझे क्या confuses कि जब मैं rfe समारोह के परिणामों पर एक नज़र रखना है:

> lapply(rf1$control$index, length) 
$Fold1 
[1] 100 
$Fold2 
[1] 101 
$Fold3 
[1] 99 

> lapply(rf1$fit$control$index, length) 
$Fold1 
[1] 120 
$Fold2 
[1] 120 
$Fold3 
[1] 120 
$Fold4 
[1] 120 
$Fold5 
[1] 120 

कि से ऐसा लगता है कि 5 गुना से प्रशिक्षण सेट के आकार जब मैं 80 के आकार की अपेक्षा करता हूं तो सीवी 120 नमूने होता है ??

तो यह बहुत अच्छा अगर किसी को कैसे RFE और ट्रेन काम एक साथ स्पष्ट कर सकते हैं।

चीयर्स

> sessionInfo() 
R version 2.15.1 (2012-06-22) 
Platform: i386-apple-darwin9.8.0/i386 (32-bit) 

locale: 
[1] C 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] pROC_1.5.4  e1071_1.6-1  class_7.3-5  caret_5.15-048 
[5] foreach_1.4.0 cluster_1.14.3 plyr_1.7.1  reshape2_1.2.1 
[9] lattice_0.20-10 kernlab_0.9-15 

loaded via a namespace (and not attached): 
[1] codetools_0.2-8 compiler_2.15.1 grid_2.15.1  iterators_1.0.6 
[5] stringr_0.6.1 tools_2.15.1 
+1

5-गुना सीवी प्रत्येक सीवी बांह के लिए डेटा सेट के पांचवें हिस्से को छोड़ देता है। इसलिए, आप प्रत्येक बार 120 पर ट्रेन करते हैं और परीक्षण सेट शेष 30 नमूने हैं। 30 नमूने * 5 = 150 नमूने। – tcash21

+0

हां, लेकिन एल्गोरिदम के विवरण के अनुसार 5-गुना-सीवी को 3-गुना-सीवी के परिणामस्वरूप प्रशिक्षण डेटा पर लागू किया जाना चाहिए। तो इसलिए पहला प्रशिक्षण सेट = 150/3 * 2, दूसरा 100/5 * 4 = 80. –

+0

@Fabian_G क्या आपने कभी यह पता लगाया है? मैं एक ही मुद्दे पर चल रहा हूं, और टोपेपो से संपर्क करने या बग रिपोर्ट दर्ज करने पर विचार कर रहा था। – Reilstein

उत्तर

0

समस्या है कि यहाँ lapply(rf1$fit$control$index, length) की दुकान नहीं है कि हम क्या लगता है कि यह करता है।

मेरे लिए यह समझने के लिए कि कोड को देखना आवश्यक था। क्या होता है:

जब आप rfe पर कॉल करते हैं तो पूरा डेटा nominalRfeWorkflow पर जाता है।

nominalRfeWorkflow में, rfeControl के अनुसार विभाजित ट्रेन और परीक्षण डेटा (हमारे उदाहरण में 3 गुना सीवी नियम के अनुसार 3 बार) rfeIter पर पास किया गया है। ये विभाजन हम rf1$control$index के तहत हमारे परिणाम में पा सकते हैं।

rfeIter में ~ 100 प्रशिक्षण नमूने (हमारे उदाहरण) का उपयोग अंतिम चर (जो उस फ़ंक्शन का आउटपुट है) खोजने के लिए किया जाता है। जैसा कि मैं इसे समझता हूं, ~ 50 परीक्षण नमूने (हमारे उदाहरण) का उपयोग विभिन्न चर सेटों के प्रदर्शन की गणना करने के लिए किया जाता है लेकिन उन्हें केवल बाहरी प्रदर्शन के रूप में संग्रहीत किया जाता है लेकिन अंतिम चर का चयन करने के लिए उपयोग नहीं किया जाता है। इन्हें चुनने के लिए 5 गुना क्रॉस सत्यापन का प्रदर्शन अनुमान उपयोग किया जाता है। लेकिन हम इन सूचकांक को अंतिम परिणाम में rfe द्वारा नहीं देख पाएंगे। यदि हमें वास्तव में उनकी आवश्यकता है, तो हमें उन्हें से rfeIter में लाने की आवश्यकता है, उन्हें nominalRfeWorkflow पर वापस करें, फिर rfe पर और परिणामी rfe -Class ऑब्जेक्ट rfe द्वारा लौटाया गया।

तो lapply(rf1$fit$control$index, length) में संग्रहीत क्या है? - जब rfe सर्वोत्तम चर पाया गया तो अंतिम मॉडल फिट सर्वोत्तम चर और पूर्ण संदर्भ डेटा (150) के साथ बनाया गया है। rf1$fitrfe में इस प्रकार बनाई गई है:

fit <- rfeControl$functions$fit(x[, bestVar, drop = FALSE], y, first = FALSE, last = TRUE, ...)

इस समारोह फिर train समारोह चलाता है और पूर्ण संदर्भ डेटा के साथ एक अंतिम पार सत्यापन करता है, अंतिम सुविधा सेट और trControl दीर्घवृत्त के माध्यम से दिए गए (...) । चूंकि हमारे trControl को 5 गुना सीवी करना है, इसलिए यह सही है कि lapply(rf1$fit$control$index, length) 120 लौटाता है क्योंकि हमें 150/5 * 4 = 120 की गणना करना है।

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