आर में यादृच्छिक वन कंप्यूटिंग समय


49

मैं आर पैकेज में 10,000 पंक्तियों और 34 विशेषताओं के साथ पार्टी पैकेज का उपयोग कर रहा हूं , और कुछ कारक विशेषताओं में 300 से अधिक स्तर हैं। कंप्यूटिंग का समय बहुत लंबा है। (इसमें अभी तक 3 घंटे का समय लगा है और यह अभी तक समाप्त नहीं हुआ है।)

मैं जानना चाहता हूं कि यादृच्छिक वन के कंप्यूटिंग समय पर किन तत्वों का बड़ा प्रभाव पड़ता है। क्या यह बहुत अधिक स्तरों वाले कारक हैं? क्या आरएफ कंप्यूटिंग समय को बेहतर बनाने के लिए कोई अनुकूलित तरीके हैं?

जवाबों:


65

RF की समग्र जटिलता कुछ ऐसी है जैसे ; यदि आप अपनी गणना में तेजी लाना चाहते हैं, तो आप निम्नलिखित प्रयास कर सकते हैं:ntreemtry(# objects)log(# objects)

  1. के randomForestबजाय का उपयोग करें party, या, और भी बेहतर, rangerया Rborist(हालांकि दोनों अभी तक युद्ध-परीक्षण नहीं हैं)।
  2. सूत्र का उपयोग न करें, अर्थात randomForest(predictors,decision)इसके बजाय कॉल करें randomForest(decision~.,data=input)
  3. do.traceवास्तविक समय में OOB त्रुटि देखने के लिए तर्क का उपयोग करें ; इस तरह आप पता लगा सकते हैं कि आप कम कर सकते हैं ntree
  4. कारकों के बारे में; RF (और सभी ट्री मेथड) इस प्रकार संभावनाओं को स्कैन करते हुए स्तरों का एक इष्टतम सबसेट खोजने की कोशिश करते हैं ; यह अंत नहीं बल्कि यह अनुभवहीन है कि यह कारक आपको इतनी जानकारी दे सकता है - यह उल्लेख नहीं करने के लिए कि randomForest 32 से अधिक स्तरों वाले कारकों को नहीं खाएगा। हो सकता है कि आप इसे एक आदेशित के रूप में मान सकते हैं (और इस तरह आरएफ के लिए एक सामान्य, संख्यात्मक चर के बराबर) या कुछ समूहों में इसे क्लस्टर कर सकते हैं, इस एक विशेषता को कई में विभाजित करते हैं?2(# of levels-1)
  5. जांचें कि क्या आपका कंप्यूटर रैम से बाहर नहीं चला है और यह स्वैप स्पेस का उपयोग कर रहा है। यदि ऐसा है, तो एक बड़ा कंप्यूटर खरीदें।
  6. अंत में, आप वस्तुओं के कुछ यादृच्छिक सबसेट निकाल सकते हैं और इस पर कुछ प्रारंभिक प्रयोग कर सकते हैं।

2
धन्यवाद, मैं आपके उत्तर से बहुत कुछ सीखता हूं और आपने जैसा कहा था, वैसा ही एक परीक्षण किया, इसके अलावा, दूसरा सुझाव क्यों काम करता है?
चेंगहो लियू

4
@ChenghaoLiu फ़ार्मुलों को छोटे अभी तक जटिल लाइनर मॉडल फ़्रेमों के लिए डिज़ाइन किया गया था, और इस तरह वे अयोग्य हैं जब सेट की नकल करना महंगा हो जाता है।

1
रनिंग टाइम को कम करते हुए रैंडम फ़ॉरस्टेस्ट (भविष्यवक्ता, निर्णय) क्यों कहते हैं?
JENSCDC

क्या है ? mtry
11

1
RandomAorest में @AndyBlankertz फॉर्मूला व्याख्या पूरे इनपुट की प्रतिलिपि बनाने के लिए नेतृत्व करती है।

12

क्योंकि randomForest सुविधाओं की एक यादृच्छिक सबसेट पर प्रशिक्षित स्वतंत्र गाड़ियों का एक संग्रह है और इसे समानांतर करने के लिए उधार देता है। combine()RandomForest पैकेज में समारोह एक साथ स्वतंत्र रूप से प्रशिक्षित जंगलों जोड़ देगा। यहाँ एक खिलौना उदाहरण है। जैसा कि @mpq का उत्तर बताता है कि आपको सूत्र संकेतन का उपयोग नहीं करना चाहिए, लेकिन चर के डेटाफ्रेम / मैट्रिक्स और परिणामों के वेक्टर में पास होना चाहिए। मैंने बेशर्म को डॉक्स से उठा लिया।

library("doMC")
library("randomForest")
data(iris)

registerDoMC(4) #number of cores on the machine
darkAndScaryForest <- foreach(y=seq(10), .combine=combine ) %dopar% {
   set.seed(y) # not really needed
   rf <- randomForest(Species ~ ., iris, ntree=50, norm.votes=FALSE)
}

मैंने समान रूप से नामांकित .combine पैरामीटर (जो लूप के आउटपुट पर फ़ंक्शन को नियंत्रित करता है) को रैंडम फ़ॉरेस्ट कंबाइन फ़ंक्शन पास किया। नीचे की ओर आपको कोई ओओबी त्रुटि दर या अधिक दुखद रूप से चर महत्व नहीं मिलता है।

संपादित करें:

पोस्ट को पुन: प्रकाशित करने के बाद मुझे एहसास होता है कि मैं 34+ कारक मुद्दे के बारे में कुछ भी नहीं बोलता हूं। एक बिना विचार वाला उत्तर बाइनरी चर के रूप में उनका प्रतिनिधित्व करने के लिए हो सकता है। वह प्रत्येक कारक एक स्तंभ है जो एन्कोडेड है 0/1 -वेवल फैक्टर इसकी उपस्थिति / गैर-उपस्थिति के बारे में। महत्वहीन कारकों पर कुछ परिवर्तनशील चयन करके और उन्हें हटाकर आप फ़ीचर को बहुत बड़े होने से रोक सकते हैं।


साइट में आपका स्वागत है, @jdennison यह वास्तव में एक अच्छा योगदान की तरह दिखता है (हालांकि मैं वास्तव में RFs के बारे में बहुत अधिक नहीं जानता हूं और समानांतर कंप्यूटिंग के बारे में कुछ भी नहीं)। एक नोट, उत्तरों का क्रम समय के साथ उतार-चढ़ाव कर सकता है, इसलिए यह "उत्तर के ऊपर" का संदर्भ नहीं देना है, बल्कि इसके बजाय '\ _ तो-और' द्वारा जवाब '।
गुंग - को पुनः स्थापित मोनिका

उत्तर देने के लिए क्षमा करें। मैंने आपके ब्लॉग को पढ़ा, महान कार्य
चेंगहो लियू

3

मैं कुछ लिंक सुझाऊंगा:

1) पैकेज का उपयोग करते समय एक समान मुद्दे से निपटने के लिए एक कारक चर के स्तर की संख्या को सिकोड़ना एक प्रश्न का लिंक है । विशेष रूप से यह केवल सबसे अधिक बार होने वाले स्तरों का उपयोग करने और अन्य सभी स्तरों पर एक नया स्तर प्रदान करने, कम अक्सर होने वाले स्तरों से संबंधित है। stackoverflowrandomForest

इसके लिए विचार यहाँ से आया: 2009 केडीडी कप स्लो चैलेंज । इस प्रतियोगिता के आंकड़ों में बहुत सारे स्तर थे और इसमें कुछ तरीकों पर चर्चा की गई थी, जिसमें उन्होंने 2-कोर / 2 जीबी रैम लैपटॉप पर चलने के लिए डेटा को 50,000 पंक्तियों से 15,000 पंक्तियों से नीचे करने के लिए इस्तेमाल किया था।

मेरा आखिरी सुझाव यह होगा कि समस्या को देखते हुए, जैसा कि ऊपर सुझाव दिया गया है, एक हाय-सीपीयू अमेज़ॅन ईसी 2 उदाहरण पर समानांतर में।


कोई ह) नह) ं है । आपको पूरी तरह से लिंक पर निर्भर रहने के बजाय पेज का महत्वपूर्ण हिस्सा प्रदान करना चाहिए।
AL

मैं प्यार करता हूँ कि कैसे चुनाव आयोग उदाहरण चलाते हैं। वाह क्या वे अच्छे हैं? मुझे लगता है कि वर्चुअलाइज्ड हार्डवेयर वास्तविक चीज से बेहतर है।
EngrStudent -

2

मैं R में विशिष्ट एल्गोरिदम की गति से बात नहीं कर सकता, लेकिन यह स्पष्ट होना चाहिए कि लंबे कंप्यूटिंग समय का कारण क्या है। प्रत्येक शाखा के प्रत्येक पेड़ के लिए CART सर्वश्रेष्ठ बाइनरी स्प्लिट का रूप दे रहा है। तो 34 में से प्रत्येक सुविधाओं के लिए यह सबसे अधिक चर के प्रत्येक स्तर के द्वारा दिए गए विभाजन को देखता है। पेड़ में शाखाओं की संख्या से एक पेड़ में प्रत्येक विभाजन के लिए रन समय को गुणा करें और फिर जंगल में पेड़ों की संख्या से कई गुणा और आपके पास लंबे समय तक चलने का समय है। कौन जाने? शायद एक तेज कंप्यूटर के साथ भी इसे खत्म करने में कई साल लग सकते हैं?

चीजों को गति देने का सबसे अच्छा तरीका मुझे लगता है कि कुछ स्तरों को एक साथ मिलाना होगा ताकि प्रत्येक चर 300 से अधिक के बजाय 3 से 5 स्तरों तक कम हो। बेशक, यह महत्वपूर्ण खोने के बिना ऐसा करने में सक्षम होने पर निर्भर करता है आपके डेटा में जानकारी।

उसके बाद शायद आप यह देख सकें कि क्या कुछ चतुर एल्गोरिथ्म है जो अलग-अलग पेड़ों के प्रत्येक नोड पर विभाजन के लिए खोज समय को तेज कर सकता है। यह हो सकता है कि किसी विशेष पेड़ पर विभाजित खोज पिछले पेड़ के लिए पहले से की गई खोज का दोहराव हो। इसलिए यदि आप पिछले विभाजन के निर्णयों के समाधान को बचा सकते हैं और पहचान सकते हैं कि आप कब दोहरा रहे हैं तो रणनीति कंप्यूटिंग समय पर थोड़ी बचत कर सकती है।


धन्यवाद फिर से, मैं पूरी तरह से आपके साथ सहमत हूं। और मैं एक नकली डमी विधि के साथ स्तरों की संख्या को कम करने की कोशिश करता हूं। उदाहरण के लिए, मैं एक भविष्यवक्ता को 600 स्तरों के साथ 4 भविष्यवक्ताओं की जगह देता हूं (600 <5 ^ 4) इस परिवर्तन के बाद, मैं यादृच्छिक वन एल्गोरिथ्म चला सकते हैं। फिर भी, आरएमएसई परिणाम अजीब है, मैं दो अन्य प्रश्न खोलूंगा कि कारक सुविधा के स्तर को कैसे कम किया जाए और 10 गुना सीवी आरएमएसई और टेस्ट सेट आरएमएसई स्कोर के बीच क्या संबंध है?
चेंगहाऊ लियू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.