2012-09-17 14 views
5

पर पढ़ने के बिना बड़ी xdf फ़ाइलों पर यादृच्छिक वन बड़े (लगभग 10 जीबी) xdf (क्रांति आर प्रारूप) फ़ाइलों पर यादृच्छिक वन चलाने का कोई तरीका है? जाहिर है, मैं rxReadXdf को आजमा सकता हूं और इसे डेटाफ्रेम पर ले जा सकता हूं ... लेकिन मेरी मशीन में केवल 8 जीबी रैम है और मैं भविष्य में भी बड़े डेटा सेट से निपट सकता हूं। उदाहरण के लिए, foreach पाश का उपयोग कर, मैं अपने क्वाड-कोर मशीन पर 1000 पेड़ों को चलाने के लिए पसंद करेंगे:डेटाफ्रेम

#'train.xdf" is a 10gb training data set 
rf<- foreach(ntree=rep(250, 4), .combine=combine, 
      .packages='randomForest') %do% 
    randomForest(amount2~.,data="train", ntree=ntree, importance=TRUE, 
       na.action=na.omit, replace=FALSE) 

लेकिन randomForest "प्रशिक्षित" (एक xdf) फ़ाइल में लेने में असमर्थ है। डेटाफ्रेम में पढ़ने के बिना सीधे xdf पर यादृच्छिक वन चलाने का कोई तरीका है?

चीयर्स,

agsub
+0

मुझे नहीं लगता कि यह संभव है, लेकिन मैंने कभी भी एक्सडीएफ फाइलों के साथ काम नहीं किया है। मैं इसके बजाय डेटा को छोटे हिस्सों में विभाजित करने की कोशिश करता हूं, उन पर यादृच्छिक जंगलों को प्रशिक्षित करता हूं और सभी हिस्सों से जुड़ी सर्वोत्तम सुविधाओं पर अंतिम मॉडल बनाता हूं। हालांकि यह काफी बोझिल है। – Backlin

+0

हां शायद मैं जिस तरह से जाऊंगा – thiakx

+0

इसका उज्ज्वल पक्ष यह है कि यदि डेटा विश्लेषण आसान था तो मेरे पास नौकरी नहीं होगी :) – Backlin

उत्तर

3

नहीं, आर कोड कि randomForest पैकेज के आधार हैं और फिर भी यह संभव के रूप में FORTRAN दिनचर्या कि आरएफ विधि बुनियाद शायद सब चाहते हैं कि डेटा नहीं हो सकता है बदले बिना स्मृति में आयोजित किया जाना चाहिए। आपको सामान्य रूप से मशीन के लिए अधिक रैम प्राप्त करने या इस समस्या को चलाने के लिए मशीनों के कुछ बड़े वर्कस्टेशंस/क्लस्टर खोजने में सर्वश्रेष्ठ सेवा दी जा सकती है।

(क्यों आप 1000 यादृच्छिक जंगलों चाहते हैं?)

+2

मैं क्रांति फ़ाइल प्रारूप से परिचित नहीं हूं, लेकिन यह संभव है अपने डेटा के कई सबसेट पर 'randomForest' चलाएं और फिर परिणामों को एक एकल कलाकार में गठबंधन करें। – joran

+0

+1 अच्छा बिंदु; मैं अपने उत्तर में एक ही बिंदु बनाने जा रहा था लेकिन यह सुनिश्चित नहीं था कि इसका मतलब है कि सभी डेटा को सबसेट उत्पन्न करने के लिए रैम में लोड करना होगा; यह देखते हुए कि ओपी क्या कहता है, यहां तक ​​कि उनकी मशीन पर भी संभव नहीं हो सकता है, लेकिन फ़ाइल को पहले स्थान पर बनाना संभव होना चाहिए। –

+0

हाँ, मुझे लगता है कि मेरे लिए सबसे अच्छा तरीका डेटा को विभाजित करना और यादृच्छिक वन कुछ बार करना है। एक्सडीएफ फ़ाइल मूल रूप से एचडीडी पर वर्चुअल मेमोरी डंप बनाती है, आप इसे वर्चुअल मेमोरी के रूप में सोच सकते हैं कि आर जल्दी से एक्सेस कर सकता है। इसके अलावा, मैंने अपने क्यूएन में सुधार किया है, 1000 पेड़ चलाने की कोशिश कर रहा है, 1000 यादृच्छिक वन नहीं। आपकी मदद दोस्तों के लिए धन्यवाद =) – thiakx

2

रैंडम जंगलों आमतौर पर प्रशिक्षित किया जाता है गहराई-प्रथम, कि वर्तमान नोड पर प्रशिक्षण है, और फिर रिकर्सिवली बच्चे नोड्स पर ट्रेन। इसके लिए पूरे डेटा-सेट को स्मृति में रखा जाना आवश्यक है।

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

मैं जानता हूँ कि यह शायद, उपयोगी नहीं है क्योंकि आप दिए गए कोड को बदल नहीं सकते हैं, लेकिन हो सकता है आप एल्गोरिथ्म के उन ऑनलाइन संस्करण के कार्यान्वयन मिलेगा (कोशिश Amir Safar's group)

1

स्मृति सीमाओं को पार करने के लिए, उपयोग :

max_size_of_pagefiles <- 60000 # in MBs 
memory.limit(size = max_size_of_pagefiles) 

मैं पृष्ठ फ़ाइल और स्थान की मात्रा स्टोर करने के लिए एक अभियान के रूप में एक एसएसडी का उपयोग करें (निम्न उदाहरण विंडोज पर काम करता है) स्मृति के रूप में इस्तेमाल किया जा सकता:

freespace <- as.numeric(gsub("Total # of free bytes  : ", "", 
    system2('fsutil', 'volume diskfree c:', stdout = TRUE)[1]))/(1024*1024) 
memory.limit(size = freespace*0.9) 

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

  • कोई संबंधित समस्या नहीं^_^