बहुत बड़े विरल मैट्रिक्स पर पीसीए लागू करें


16

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

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

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

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

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


मैट्रिक्स कितना विरल है? आप परिणामी SVD का उपयोग कैसे करते हैं? यदि आपको इसके केवल भाग की आवश्यकता है तो आप शायद इसे कहीं अधिक सस्ता मान सकते हैं।
अर्नोल्ड न्यूमैयर

@ArnoldNeumaier क्षमा करें, मैं विरल जानकारी जोड़ना भूल गया। मैंने अपने संपूर्ण विचार के साथ पोस्ट को अपडेट किया है।
सुनिश्चित होदे

अब तक दिए गए उत्तरों में सुझाए गए SLEPc, महावत और irlba में से प्रत्येक आपकी समस्या के लिए उपयुक्त लगता है।
अर्नोल्ड न्यूमैयर

1
आप सभी 120k की गणना क्यों करना चाहते हैं ? ऐसा लगता है कि आप केवल उन 90% विचरण के लिए लेखांकन चाहते हैं, जिन्हें गणना करने के लिए बहुत सस्ता होना चाहिए।
जेड ब्राउन

@JedBrown हे जेड, तुम पूरी तरह से सही हो! मैं केवल उन लोगों पर दिलचस्पी रखता हूं जो 90% विचरण के लिए खाते हैं, और इसके बाद के इसी आइजनवेक्टर (टेस्ट डेटासेट को बाद में बदलने के लिए)। क्या आप कृपया मुझे अपने सस्ते तरीके बता सकते हैं ?
होसोमर को सुनिश्चित करें

जवाबों:


4

मैं irlba पैकेज का सुझाव देता हूं - यह लगभग svd के समान परिणाम पैदा करता है, फिर भी आप हल करने के लिए एक बड़ी संख्या में विलक्षण मानों को परिभाषित कर सकते हैं। एक उदाहरण, नेटफ्लिक्स पुरस्कार को हल करने के लिए विरल मैट्रिस का उपयोग करते हुए, यहां पाया जा सकता है: http://bigcomputing.blogspot.de/2011/05/bryan-lewiss-vignette-on-irlba-for-svd.html


आपकी टिप्पणियों के लिए आभार। वास्तव में, मैंने उस वीडियो को देखा था और कल irlba पैकेज की भी कोशिश की थी, लेकिन ऐसा लगता था कि इसका उपयोग केवल कुछ विलक्षण मूल्यों की गणना के लिए किया जा सकता है । हालांकि, जैसा कि पोस्ट में कहा गया है, मैं सभी विलक्षण मूल्यों (120,000) की गणना करना चाहता हूं , ताकि वे जिस संस्करण के लिए खाते हैं, उसके अनुसार उपयुक्त संख्या में पीसी चुन सकें। इस मामले में, मुझे लगता है कि irlba अब उपयुक्त नहीं है।
Ensom होडर

क्या आप पीसीए के समान तरीके से एसवीडी के परिणामों का उपयोग कर सकते हैं? PCA करने के लिए आपको SVD करने से पहले डेटा को केंद्र में रखने की आवश्यकता नहीं है?
Zach

@Zach - SVD PCA के पीछे मुख्य एल्गोरिथ्म है (देखें prcomp - stat.ethz.ch/R-manual/R-patched/library/stats/html/prcomp.html )। पीसीए के अधीन करने से पहले डेटा को केंद्रित करना भी मानक प्रक्रिया है, हालांकि आपके प्रश्न के आधार पर कई प्रकार के विकल्प हैं (जैसे विभिन्न प्रकार के स्केलिंग भी लागू किए जा सकते हैं)।
बॉक्स में मार्क

यदि मैं एसवीडी से पहले डेटा को केंद्र में नहीं रखता तो यह कितना बड़ा सौदा है? मेरे पास एक विरल मैट्रिक्स है जो मेमोरी में फिट बैठता है, लेकिन सेंटिंग करने से यह घने और मेमोरी में फिट होने के लिए बहुत बड़ा हो जाएगा।
Zach

@Zach - यह वास्तव में इस बात पर निर्भर करता है कि आप अपने नमूनों को एक-दूसरे से कैसे संबंधित करना चाहते हैं। यदि आप मेमोरी सीमा के कारण केंद्रित डेटा के साथ काम नहीं कर सकते हैं, तो मुझे लगता है कि निर्णय आपके लिए किया गया है। आम तौर पर, केंद्रित डेटा में PCA नमूनों के सहसंयोजक मैट्रिक्स पर संचालित होता है, जबकि डेटा के केंद्र और स्केलिंग में PCA एक सहसंबंध मैट्रिक्स पर संचालित होता है। इन फैसलों के बारे में अधिक जानकारी के लिए, आप आँकड़ों पर एक सवाल पूछ सकते हैं ।
बॉक्स में मार्क

8

मैं एक आंशिक SVD की गणना करने के लिए SLEPc का उपयोग करने का सुझाव देता हूं । विवरण के लिए उपयोगकर्ता के मैनुअल और SVD मैन पेज के अध्याय 4 देखें।


1
चूंकि वह पीसीए चाहता है, उसे एसवीडी की गणना करने से पहले डेटा को केंद्र में रखना चाहिए। यह विरलता को मिटा देगा। क्या कोई ऐसा तरीका है जो SLEPc इसके लिए समायोजित करता है?
12:53

3
यह सिर्फ विरल + निम्न रैंक है। SLEPc को मैट्रिक्स प्रविष्टियों की आवश्यकता नहीं है, बस एक रैखिक ऑपरेटर है, जिसे एक स्पार्स मैट्रिक्स और सुधार के रूप में लागू किया जा सकता है।
जेड ब्राउन

2

मैं महावत के लिए वोट करता हूं जो अन्य एनएलपी / टीए कार्यों और कार्यान्वयन मानचित्र / कम के लिए भी अच्छा है।


हां, आप सही हैं, महावत मेरे रोड मैप में बिल्कुल है। लेकिन मैं पहले से ही कुछ "सरल" (i suppose) तकनीकों के साथ एक प्रोटोटाइप बनाना पसंद करता हूं।
एनसोम होडर

1

मेरा सुझाव है कि वृद्धिशील एकवचन मूल्य अपघटन का उपयोग करना, जिनमें से साहित्य में कई हैं। उदाहरण के लिए:

  • मैथ्यू ब्रांड 1 और 2 की तकनीकी रिपोर्टों का पालन ​​करना काफी आसान है
  • क्रिस बेकर के मास्टर की थीसिस , उनका सॉफ्टवेयर इंकपैक , और बाद में वृद्धिशील एसवीडी विधि पर उनका पेपर
  • बंच और नीलसन ने सबसे पहले ज्ञात पेपर प्रकाशित किया
  • 1 और 2 के स्वदेशी समस्याओं को अद्यतन करने पर हॉल द्वारा कागजात
  • अनुक्रमिक करहुनेन-लोव द्वारा लेवी का विश्लेषण, एट अल।, जो मूल रूप से एक ही बात है

ये सभी दृष्टिकोण निम्न को कम करते हैं:

  • एक छोटे डेटा सेट के साथ शुरू करें
  • किसी भी तरह SVD की गणना करें (यह कदम एकल स्तंभ मैट्रिक्स के लिए तुच्छ है)
  • समाप्त होने तक दोहराएं:
    • नया डेटा सेट जोड़ें
    • नए डेटा सेट के SVD की गणना करने के लिए मौजूदा SVD और अपडेट नियमों का उपयोग करें

एन


0

आप अभी भी आर का उपयोग कर सकते हैं।

Revolution RR का निर्माण एक ऐसा डेटा सेट है जो RAM से बड़ा है। फ़ंक्शन का उपयोग करें princomp

इसमें विशेष रूप से बड़ी डेटा शैली समस्याओं के लिए डिज़ाइन किए गए आँकड़े फ़ंक्शन की पूरी श्रृंखला है जो रैम में फिट नहीं होते हैं, जैसे रैखिक प्रतिगमन, लॉजिस्टिक प्रतिगमन, क्वांटाइल्स, आदि।

"I am an अकादमिक" बॉक्स पर टिक करके आप पूरी तरह से चित्रित अकादमिक संस्करण को निःशुल्क डाउनलोड कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.