2012-05-08 13 views
5

मैं मॉडल पीढ़ी के लिए आर में caret लाइब्रेरी का उपयोग कर रहा हूं। मैं earth (उर्फ एमएआरएस) मॉडल उत्पन्न करना चाहता हूं और मैं इस मॉडल पीढ़ी के लिए degree पैरामीटर निर्दिष्ट करना चाहता हूं। documentation (पृष्ठ 11) के अनुसार earth विधि इस पैरामीटर का समर्थन करता है।caret :: ट्रेन: मॉडल-पीढ़ी-पैरामीटर निर्दिष्ट करें

मैं कैसे इस त्रुटि जब degree पैरामीटर निर्दिष्ट करने से बच सकते हैं:

मैं जब पैरामीटर को निर्दिष्ट निम्न त्रुटि संदेश मिल सकता है?

> sessionInfo() 
R version 2.15.0 (2012-03-30) 
Platform: x86_64-pc-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_GB.UTF-8  LC_NUMERIC=C    
[3] LC_TIME=en_GB.UTF-8  LC_COLLATE=en_GB.UTF-8  
[5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8 
[7] LC_PAPER=C     LC_NAME=C     
[9] LC_ADDRESS=C    LC_TELEPHONE=C    
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C  

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

other attached packages: 
[1] earth_3.2-3 plotrix_3.4 plotmo_1.3-1 leaps_2.9  caret_5.15-023 
[6] foreach_1.4.0 cluster_1.14.2 reshape_0.8.4 plyr_1.7.1  lattice_0.20-6 

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

उत्तर

7

मुझे पता चला है कि यह कैसे करना है, Joran मुझे सही दिशा में नेतृत्व किया:

एक नया कार्य जो प्रशिक्षण ग्रिड उत्पन्न करता है बनाएँ। इस फ़ंक्शन को दो पैरामीटर len और data स्वीकार करना होगा। मूल प्रशिक्षण ग्रिड को पुनः प्राप्त करने के लिए, आप caret पैकेज द्वारा प्रदान की गई createGrid विधि को कॉल कर सकते हैं। फिर आप अपनी जरूरतों के लिए ग्रिड को संशोधित कर सकते हैं।Neave के लिए उदाहरण nprune पैरामीटर अपरिवर्तित और 5 निम्नलिखित कोड को 1 उपयोग से degree जोड़ने के लिए:

createMARSGrid <- function(len, data) { 
     g = createGrid("earth", len, data) 
     g = expand.grid(.nprune=g$.nprune, .degree=seq(1,5)) 
     return(g) 
    } 

तो यह इस तरह आह्वान:

train(formula, data=data, method='earth', tuneGrid = createMARSGrid) 
+0

धन्यवाद @theomega। यह बहुत उपयोगी है। क्या आप जानते हैं कि 'createGrid' और' tuneLength' में 'len' के बीच कनेक्शन (' ट्रेन' के लिए तर्क) क्या है? इसके अलावा, 'createGrid' को कुछ मॉडलों के लिए डेटा प्राप्त करने की आवश्यकता क्यों है? ('? createGrid' इस पर बहुत कुछ नहीं कहता है) –

+0

कृपया एक नया प्रश्न पूछें और मुझे आपकी मदद करने में खुशी होगी – theomega

+0

धन्यवाद थीमेगा: यहां मेरा प्रश्न है: http://stackoverflow.com/questions/14839730/caret- त्रुटियों-साथ-creategrid के लिए आरएफ-randomforest। मुझे अभी भी 'ट्यून लम्बाई' और 'createGrid' में लेन पैरामीटर के बीच कनेक्शन को स्पष्ट करने का उत्तर गुम है, उदाहरण के लिए क्या वे एक साथ इस्तेमाल किया जा सकता है? उनका रिश्ता क्या है? –

9

मैं हमेशा कैरट दोनों उपयोगी और कुछ हद तक कष्टदायक में कार्य मिल गया है। यहां क्या हो रहा है।

train पर earth के माध्यम से आप earth पर तर्क देने का प्रयास कर रहे हैं।

तर्क वर्गीकरण या प्रतिगमन दिनचर्या (जैसे randomForest) को पारित कर दिया: train के लिए प्रलेखन कि तर्क के लिए इस विवरण में शामिल है। त्रुटियां तब होंगी जब ट्यूनिंग पैरामीटर के मान यहां पारित किए गए हैं।

ट्यूनिंग पैरामीटर, एह? खैर, यदि आप नीचे स्क्रॉल करते हैं और प्रत्येक मॉडल प्रकार के लिए ट्यूनिंग पैरामीटर की आधिकारिक सूची की जांच करते हैं, तो आप देखेंगे कि earth के लिए, वे degree और nprune हैं।

तो यहां मुद्दा यह है कि train कुछ ट्यूनिंग पैरामीटर के साथ खोज ग्रिड को स्वचालित करने के लिए बनाया गया है, और ... तर्क उन ट्यूनिंग पैरामीटर के लिए को छोड़कर मॉडल फिटिंग समारोह के लिए आगे तर्क पारित करने के लिए प्रयोग की जाने वाली है।

आप ट्यूनिंग पैरामीटर तुम इतनी जैसे अन्य तर्कों का उपयोग करने के लिए, की आवश्यकता होगी सेट करना चाहते हैं:

train(Volume~Girth+Height, data=trees, method='earth', 
     tuneGrid = data.frame(.degree = 1,.nprune = 5)) 

नोट कैसे कॉलम प्रमुख समय के साथ नाम हैं। साथ ही, यह निराशाजनक है कि earth में nprune के लिए डिफ़ॉल्ट मान NULL है, मुझे यकीन नहीं है कि आप इस तरह से केवल डिफ़ॉल्ट मानों को पारित कर सकते हैं। (आम तौर पर, डेटा फ्रेम में NULL के लिए चीजों की स्थापना बस उन्हें हटा देगा।)

+1

समाधान के लिए धन्यवाद। समस्या यह है: मैं 'nprune' को अपने डिफ़ॉल्ट मान में कैसे रख सकता हूं? मैंने इसे स्रोत में देखा और पाया कि डिफ़ॉल्ट-मूल्य निजी (गैर-कॉल करने योग्य) फ़ंक्शन 'marsSeq' का उपयोग करके कैलकुएटेड है, इसलिए यह निश्चित मान नहीं है। जैसा कि आपने बताया था, आप इसे छोड़ नहीं सकते हैं। – theomega

+0

नीचे मेरा उत्तर देखें जो मेरे (और आपके) प्रश्न का समाधान प्रदान करता है। – theomega

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