2012-05-23 19 views
13

पर पीसीए लागू करें मैं आर के साथ एक टेक्स्ट वर्गीकरण कार्य कर रहा हूं, और मुझे 120,000 तक आकार 224 9 0 (केवल 4 मिलियन गैर-शून्य प्रविष्टियां, 1% प्रविष्टियों से कम) के साथ एक दस्तावेज़-अवधि मैट्रिक्स प्राप्त होता है। अब मैं पीसीए (प्रिंसिपल कंपोनेंट एनालिसिस) का उपयोग करके आयाम को कम करना चाहता हूं। दुर्भाग्यवश, आर इस विशाल मैट्रिक्स को संभाल नहीं सकता है, इसलिए मैं पीसीए करने के लिए कुछ अन्य तकनीकों का उपयोग करने की उम्मीद करते हुए, "मैट्रिक्स मार्केट फॉर्मेट" में एक फ़ाइल में इस स्पैर मैट्रिक्स को स्टोर करता हूं।बहुत बड़े स्पैस मैट्रिक्स

तो किसी को भी मुझे उपयोगी पुस्तकालयों के लिए कुछ संकेत (जो भी प्रोग्रामिंग भाषा) है, जो आसानी से इस बड़े पैमाने पर मैट्रिक्स के साथ पीसीए कर सकता है, या अपने आप के द्वारा एक पूरे अक्षरों में लिखावट पीसीए कर दूसरे शब्दों में,, गणना दे सकता है पहले covariance मैट्रिक्स, और फिर covariance मैट्रिक्स के लिए eigenvalues ​​और eigenvectors की गणना।

क्या मैं चाहता हूँ calculate सभी पीसी (120,000) के लिए केवल शीर्ष N पीसी, जो 90% विचरण के लिए खातों है, और चुनें। जाहिर है, इस मामले में, मुझे कुछ बहुत ही भिन्न भिन्नता मानों को 0 (कोविरेन्स मैट्रिक्स में) सेट करने के लिए एक थ्रेसहोल्ड देना होगा, अन्यथा, कॉन्वर्सिस मैट्रिक्स स्पैस नहीं होगा और इसका आकार 120,000 तक 120,000 होगा, जो कि है एक मशीन के साथ संभालना असंभव है। इसके अलावा, लोडिंग (eigenvectors) बहुत बड़ा होगा, और स्पैस प्रारूप में संग्रहीत किया जाना चाहिए।

किसी भी मदद के लिए बहुत बहुत धन्यवाद!

नोट: मैं 24 जीबी रैम और 8 सीपीयू कोर के साथ एक मशीन का उपयोग कर रहा हूं।

+0

मुझे यकीन नहीं है कि यह 100% सही है, लेकिन मुझे लगता है कि मैटलैब नौकरी कर सकता है। – Anton

+0

यदि आपको यहां कोई खुशी नहीं मिलती है, तो http://stats.stackexchange.com/ – NPE

+0

@aix पर पूछने के लायक हो सकता है आपकी सलाह के लिए धन्यवाद, मैंने इसे कम्प्यूटेशनल साइंस बीटा में ले जाया है, और कुछ उपयोगी पाएं संकेत। आप इस [यूआरएल] पर भी इसका अनुसरण कर सकते हैं (http://scicomp.stackexchange.com/questions/2313/apply-pca-on-very-large-sparse-matrix) –

उत्तर

11

पायथन टूलकिट scikit-learn में कुछ पीसीए वेरिएंट हैं, जिनमें से RandomizedPCAscipy.sparse द्वारा समर्थित प्रारूपों में स्पैर मैट्रिस को संभाल सकता है। scipy.io.mmread मैट्रिक्स मार्केट प्रारूप को पार्स करने में सक्षम होना चाहिए (हालांकि मैंने कभी कोशिश नहीं की)।

अस्वीकरण: मैं विज्ञान-शिक्षा विकास टीम पर हूं।

EDIT: RandomizedPCA से स्पैर मैट्रिक्स समर्थन को विज्ञान-सीखने 0.14 में बहिष्कृत कर दिया गया है। TruncatedSVD अपने स्थान पर उपयोग किया जाना चाहिए। विवरण के लिए दस्तावेज देखें।

+0

धन्यवाद, बहुत कुछ @ एलर्मन, कुछ डिग्री के लिए, आपकी प्रस्तावित विधि स्पैस मैट्रिक्स के साथ पीसीए कर सकती है, लेकिन यह बड़ी स्मृति खपत के कारण केवल कुछ छोटी मात्रा में पीसी की गणना कर सकती है: - ( –

+0

ध्यान दें कि 'पीसीए' के ​​पक्ष में 'RandomizedPCA' को कीवर्ड तर्क' svd_solver = 'randomized' के साथ बहिष्कृत कर दिया गया है – BallpointBen

6

पीसीए चलाने के बजाए, आप लेटेंट ड्रिचलेट आवंटन (एलडीए) को आजमा सकते हैं, जो दस्तावेज़-शब्द मैट्रिक्स को दस्तावेज़-विषय और विषय-शब्द मैट्रिक्स में विघटित करता है। यहां आर कार्यान्वयन का एक लिंक दिया गया है: http://cran.r-project.org/web/packages/lda/ - वहां कुछ कार्यान्वयन हैं, हालांकि यदि आप Google हैं।

एलडीए के साथ आपको अग्रिम में विषयों की एक निश्चित संख्या (सिद्धांत घटकों के समान) निर्दिष्ट करने की आवश्यकता है। संभावित रूप से बेहतर विकल्प एचडीपी-एलडीए (http://www.gatsby.ucl.ac.uk/~ywteh/research/npbayes/npbayes-r21.tgz) है, जो आपके कॉर्पस का एक अच्छा प्रतिनिधित्व करने वाले विषयों की संख्या सीखता है।

यदि आप स्मृति में हमारे डेटासेट को फिट कर सकते हैं (जो ऐसा लगता है कि आप कर सकते हैं), तो आपको एलडीए कोड चलाने में कोई समस्या नहीं होनी चाहिए।

स्किकॉमप फ़ोरम पर कई लोगों ने बताया कि 120k सिद्धांत घटकों की गणना करने की आवश्यकता नहीं होनी चाहिए। http://en.wikipedia.org/wiki/Power_iteration जैसे एल्गोरिदम मैट्रिक्स के सबसे बड़े eigenvalues ​​की गणना करते हैं, और एलडीए एल्गोरिदम निर्दिष्ट विषयों की संख्या दिए गए डेटा के न्यूनतम-विवरण-लंबाई प्रतिनिधित्व में एकत्रित होंगे।

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