2011-12-05 21 views
5

पर जावा में पीसीए करना मेरे पास एक बहुत बड़ा मैट्रिक्स (लगभग 500000 * 20000) है जिसमें डेटा पीसीए के साथ विश्लेषण करेगा। ऐसा करने के लिए मैं पैरालेलकोल्ट लाइब्रेरी का उपयोग कर रहा हूं, लेकिन दोनों एकवचन मूल्य अपघटन और eigenvalues ​​अपघटन का उपयोग कर covariance मैट्रिक्स के eigenvectors और eigenvalues ​​प्राप्त करने के लिए। लेकिन ये विधियां ढेर को बर्बाद कर देती हैं और मुझे "आउटऑफमेमरी" त्रुटियां मिलती हैं ...बड़े मैट्रिक्स

स्पैर्सडब्लूएममैट्रिक्स 2 डी (डेटा बहुत अस्पष्ट है) का उपयोग कर त्रुटियां अभी भी रहती हैं, इसलिए मैं आपसे पूछता हूं: मैं इस समस्या को कैसे हल कर सकता हूं?

लाइब्रेरी बदलें?

+0

जावा केवल माना भाषा, मैं कल्पना कर सकते हैं इस मैट्रिक्स पागलपन की हद तक बड़ा है ......? – Beginner

+0

मुझे नहीं पता कि दूसरी भाषा में स्विच करने से कुछ भी बदलेगा। परिणाम के – duffymo

उत्तर

2

आप ओजा के नियम के साथ पीसीए की गणना कर सकते हैं: यह एक पुनरावृत्ति एल्गोरिदम है, पीसीए के अनुमान में सुधार, एक वेक्टर एक समय। यह सामान्य पीसीए की तुलना में धीमी है, लेकिन आपको स्मृति में केवल एक वेक्टर स्टोर करने की आवश्यकता है। यह भी बहुत संख्यानुसार स्थिर

http://en.wikipedia.org/wiki/Oja%27s_rule

0

मुझे यकीन है कि बदलते पुस्तकालयों में मदद मिलेगी नहीं कर रहा हूँ है। आपको युगल (8 बाइट प्रति) की आवश्यकता होगी। मुझे नहीं पता कि इस मामले में कॉन्वर्सिस मैट्रिक्स का आयाम क्या होगा, लेकिन लाइब्रेरी स्विचिंग अंतर्निहित गणनाओं को ज्यादा नहीं बदलेगी।

जब आप दौड़ते हैं तो एक्सएमएक्स सेटिंग क्या होती है? परम जीन आकार के बारे में क्या? शायद आप उन्हें बढ़ा सकते हैं।

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

"Google search" के लिए "बड़ी मैट्रिक्स के जावा ईजीनवे" के लिए Google से this library चालू हुआ। यदि आप टिप्पणियों में स्क्रॉल करते हैं तो मुझे लगता है कि एक ब्लॉक लांज़ोज़ eigenvalue विश्लेषण की मदद कर सकता है। यदि आप eigenvalues ​​का सबसेट प्राप्त कर सकते हैं तो यह पर्याप्त हो सकता है।

ये SVM ​​कार्यान्वयन बड़े डेटासेट के लिए उपयोगी होने का दावा:

http://www.support-vector-machines.org/SVM_soft.html

मुझे नहीं लगता कि आप एक JVM के लिए 2GB से अधिक के लिए पूछ सकते हैं:

http://www.theserverside.com/discussions/thread.tss?thread_id=26347

अनुसार ओरेकल के लिए, आपको 64-बिट ओएस पर चलने वाले 64-बिट जेवीएम की आवश्यकता होगी:

http://www.oracle.com/technetwork/java/hotspotfaq-138619.html#gc_heap_32bit

+0

मंद 500000x500000 होगा। – Beginner

+0

इसके बारे में निश्चित है? 20K x 20K नहीं है? – duffymo

+0

यह कॉन्वर्स मैट्रिक्स है। (एक्स इनपुट है) http://upload.wikimedia.org/wikipedia/en/math/6/7/6/67616c643a158c1e00a8e4d5ec3d0b1a.png – Beginner

0

मैंने इस तरह की समस्या के लिए कुछ स्पैस, वृद्धिशील एल्गोरिदम बनाए। सुविधाजनक रूप से, यह कोल्ट के शीर्ष पर बनाया गया है।

नीचे दिए गए ट्रिक-क्लस्टर लाइब्रेरी में HallMarshalMartin क्लास देखें। आप इसे एक समय में पंक्तियों के टुकड़े खिला सकते हैं, इसलिए इसे आपके मेमोरी के मुद्दों को हल करना चाहिए।

कोड जीपीएल के तहत उपलब्ध है। मुझे डर है कि मैंने इसे अभी जारी किया है, इसलिए यह दस्तावेज़ीकरण पर छोटा है, उम्मीद है कि यह काफी आत्म व्याख्यात्मक है। जुनीट परीक्षण हैं जो उपयोग में मदद कर सकते हैं।

http://open.trickl.com/trickl-pca/index.html

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