आर

2012-06-15 15 views
36

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

तो आर बस यह करने के लिए गलत तरीका है, मैं अन्य मजबूत मुक्त सुझाव के लिए खुले हूँ (जैसे scipy अगर वहाँ बहुत बड़े डेटासेट को संभालने के लिए कुछ अच्छा तरीका है)

+10

पर एक नज़र डालें "बड़े स्मृति और आउट-ऑफ-मेमोरी डेटा" [उच्च निष्पादन कंप्यूटिंग कार्य दृश्य] की उपधारा (http://cran.r-project.org/web/views/HighPerformanceComputing.html) सीआरएएन पर [bigmemory] (http://cran.r-project.org/web/packages/bigmemory/index.html) और [एफएफ] (http://cran.r-project.org/web/packages/ff/index एचटीएमएल) दो लोकप्रिय पैकेज हैं। साथ ही, डेटाबेस में डेटा संग्रहीत करने और विश्लेषण के लिए छोटे बैचों में पढ़ने पर विचार करें। – jthetzel

उत्तर

28

CRAN पर high performance computing task view के "बड़े स्मृति और आउट-ऑफ-मेमोरी डेटा" उपखंड पर एक नज़र डालें। bigmemory और ff दो लोकप्रिय पैकेज हैं। Bigmemory (और संबंधित biganalytics, और bigtabulate) के लिए, bigmemory website में जे एमर्सन से कुछ बहुत अच्छी प्रस्तुतियों, विगनेट्स और अवलोकन हैं। एफएफ के लिए, मैं ff website पर एडलर ओहेल्स्क्लागेल और सहकर्मियों की उत्कृष्ट स्लाइड प्रस्तुतियों को पढ़ने की सलाह देता हूं।

इसके अलावा, डेटाबेस में डेटा संग्रहीत करने और विश्लेषण के लिए छोटे बैचों में पढ़ने पर विचार करें। विचार करने के लिए किसी भी दृष्टिकोण की संभावना है।शुरू करने के लिए, biglm पैकेज में कुछ उदाहरणों के साथ-साथ थॉमस लुमली से this presentation में कुछ उदाहरण देख रहे हैं।

और उच्च प्रदर्शन कंप्यूटिंग कार्य दृश्य पर अन्य संकुल की जांच और अन्य उत्तर में बताया गया है। जिन पैकेजों का मैंने ऊपर उल्लेख किया है वे केवल वे हैं जिनके साथ मुझे अधिक अनुभव है।

+1

बिगमेमरी का उपयोग करके समाप्त हुआ और आम तौर पर इसके साथ काफी प्रसन्न हूं। –

+1

लेकिन एफएफ, bigmemory या डेटाबेस के साथ ... क्या आप आर या किसी भी पैकेज द्वारा सीधे पेश किए गए किसी भी ऑपरेशन कर सकते हैं? या आप केवल उन कार्यों को चला सकते हैं जो एफएफ, बिगमेमरी या डेटाबेस इंजन ने कार्यान्वित किया है? (छोटे टुकड़ों पर डेटा तोड़ने की आवश्यकता के बिना)। उदाहरण के लिए मैं 50 जीबी संख्यात्मक फ़ाइल पर एक रिग्रेशन चलाने या औसत की गणना करना चाहता हूं। या मैं डीबीएसकेन को लागू करना चाहता हूं, या सिर्फ एक और वेक्टर बनाना चाहता हूं जहां प्रत्येक तत्व पुराने बीबी [i] = एए [i] * एए [i-1] + एए [i-2] के साथ कुछ ऑपरेशन के रूप में व्यक्त किया जाता है। क्या मैं इसे आर और एफएफ, bigmemory या किसी डेटाबेस कनेक्टर के साथ कर सकता हूँ? – skan

8

मुझे लगता है कि डेटा की मात्रा आप कर सकते हैं प्रक्रिया किसी और चीज की तुलना में प्रोग्रामिंग कौशल से अधिक सीमित है। यद्यपि स्मृति विश्लेषण में बहुत सी मानक कार्यक्षमता पर ध्यान केंद्रित किया गया है, लेकिन आपके डेटा को टुकड़ों में काटने से पहले ही बहुत मदद मिलती है। संभोग, मानक आर कोड चुनने से प्रोग्राम में अधिक समय लगता है, लेकिन अक्सर यह काफी संभव है।

डेटा काटना exale के लिए read.table या readBin का उपयोग करके किया जा सकता है जो केवल डेटा के सबसेट को पढ़ने का समर्थन करता है। वैकल्पिक रूप से, आप पैकेज के लिए उच्च प्रदर्शन कंप्यूटिंग कार्य दृश्य पर एक नज़र डाल सकते हैं जो स्मृति कार्यक्षमता से बाहर बॉक्स से बाहर निकलता है। आप अपने डेटा को डेटाबेस में भी डाल सकते हैं। स्थानिक रास्टर डेटा के लिए, उत्कृष्ट रास्टर पैकेज स्मृति विश्लेषण से बाहर प्रदान करता है।

8

मशीन सीखने के कार्यों के लिए मैं biglm पैकेज का उपयोग करने की सलाह दे सकता हूं, "स्मृति में फिट होने के लिए डेटा के लिए बहुत अधिक प्रतिक्रिया" करने के लिए उपयोग किया जाता है। वास्तव में बड़े डेटा के साथ आर का उपयोग करने के लिए, कोई बैकएंड के रूप में Hadoop का उपयोग कर सकते हैं और फिर एक हडोप क्लस्टर पर मैपरेड्यूस के माध्यम से सांख्यिकीय (या अन्य) विश्लेषण करने के लिए पैकेज rmr का उपयोग कर सकते हैं।

7

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

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

यदि आपका डेटा हार्ड ड्राइव पर भी संग्रहीत नहीं किया जा सकता है, तो आपको वितरित मशीन लर्निंग सिस्टम का उपयोग करने की आवश्यकता होगी। ऐसी एक आर-आधारित प्रणाली Revolution R है जो handle वास्तव में बड़े डेटासेट के लिए डिज़ाइन की गई है। दुर्भाग्यवश, यह खुला स्रोत नहीं है और बहुत सारा पैसा खर्च करता है, लेकिन आप free academic license प्राप्त करने का प्रयास कर सकते हैं। वैकल्पिक रूप से, आपको जावा-आधारित Apache Mahout में दिलचस्पी हो सकती है - हडोप के आधार पर और बहुत महत्वपूर्ण एल्गोरिदम सहित बहुत ही सुरुचिपूर्ण, लेकिन बहुत ही कुशल समाधान नहीं है।

+1

क्रांति आर के साथ आप बड़े डेटासेट पर कुछ फ़ंक्शंस लागू कर सकते हैं, लेकिन पैकेज Revoscaler पर लागू केवल फ़ंक्शंस। आपके पास बड़े डेटासेट पर किसी भी आर फ़ंक्शन या पैकेज का उपयोग करने का सामान्य तरीका नहीं है। उदाहरण के लिए यदि आप डीबीएससीएएन क्लस्टरिंग को चलाने के लिए चाहते हैं तो आपको रीवॉस्केकर (या इसी तरह के पैकेज) द्वारा प्रदान किए गए मूल कार्यों के साथ पूरी विधि को फिर से लिखना होगा। – skan

3

स्मृति पर्याप्त नहीं है, तो एक ही समाधान डिस्क पर डेटा धक्का और वितरित अभिकलन का उपयोग कर रहा है। मुझे लगता है कि RHadoop (R + Hadoop) बड़ी मात्रा में डेटासेट से निपटने के लिए एक समाधान हो सकता है।

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

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