एक विशाल विरल मैट्रिक्स के एसवीडी की गणना कैसे करें?


26

एक बहुत बड़े धनात्मक मैट्रिक्स (65M x 3.4M) के एकवचन मान अपघटन (SVD) की गणना करने का सबसे अच्छा तरीका क्या है जहाँ डेटा अत्यंत विरल है?

मैट्रिक्स का 0.1% से कम गैर शून्य है। मुझे एक तरीका चाहिए:

  • मेमोरी में फिट होगा (मुझे पता है कि ऑनलाइन तरीके मौजूद हैं)
  • एक उचित समय में गणना की जाएगी: 3,4 दिन
  • पर्याप्त सटीक होगा हालांकि सटीकता मेरी मुख्य चिंता नहीं है और मैं इसे नियंत्रित करने में सक्षम होना चाहूंगा कि मैंने इसमें कितने संसाधन लगाए।

एक हास्केल, पायथन, सी # आदि पुस्तकालय होना बहुत अच्छा होगा जो इसे लागू करता है। मैं मैथलैब या आर का उपयोग नहीं कर रहा हूं लेकिन यदि आवश्यक हो तो मैं आर के साथ जा सकता हूं।


3
आपके पास कितनी मेमोरी है? 0.1% 65M * 3.4M अभी भी 221e9 गैर शून्य मान है। यदि आप प्रति मूल्य 4 बाइट्स का उपयोग करते हैं, तो यह अभी भी 55 gb से अधिक कोई उपरि मान नहीं है, इसलिए स्पार्सिटी अभी भी समस्या का समाधान नहीं करती है ... क्या आपको एक बार में पूरे सेट को मेमोरी में लोड करने की आवश्यकता है?
बिटविन

मुझे और सटीक होना चाहिए था। 32-बिट पूर्णांक के साथ 250-500mb से अधिक नहीं। शायद बहुत कम है, लेकिन जैसा कि मैं इसे समझ रहा हूं, आयामीता समस्या है। मेरे पास 16GB की मशीन है।
सोनिया

इस बारे में कैसा है? quora.com/…
बिटवाइज़

: जो औजार "एक तेज, वृद्धिशील, कम स्मृति, बड़े मैट्रिक्स SVD एल्गोरिथ्म" एक अजगर पुस्तकालय के लिए इस वेबपेज लिंक en.wikipedia.org/wiki/Latent_semantic_analysis
बिटवाइस

जवाबों:


21

यदि यह मेमोरी में फिट बैठता है, तो मैट्रिक्स पैकेज का उपयोग करके R में एक स्पार्स मैट्रिक्स का निर्माण करें , और SVD के लिए irlba का प्रयास करें । आप निर्दिष्ट कर सकते हैं कि आप परिणाम में कितने विलक्षण वैक्टर चाहते हैं, जो गणना को सीमित करने का एक और तरीका है।

यह एक बहुत बड़ा मैट्रिक्स है, लेकिन मेरे पास इस पद्धति के साथ बहुत अच्छे परिणाम हैं। irlbaबहुत अत्याधुनिक है। यह अंतर्निहित लैंक्ज़ोस द्वि-विकर्ण एल्गोरिथ्म का उपयोग करता है

यह नेटफ्लिक्स प्राइज डाटासेट (480,189 पंक्तियों के माध्यम से 17,770 कॉलम, 100,480,507 गैर-शून्य प्रविष्टियों) को मिलीसेकंड में चबा सकता है। आप डेटासेट नेटफ्लिक्स डेटासेट की तुलना में ~ 200,000 गुना बड़ा है, इसलिए यह उससे काफी अधिक समय लेता है। यह उम्मीद करना उचित हो सकता है कि यह एक दो दिनों में गणना कर सकता है।


डेटा मैट्रिक्स मेमोरी में फिट हो जाता है, क्या irlba मेमोरी को कुशल तरीके से अपघटन के साथ ही संभाल लेगा?
सोनिया

@ सोनिया: irlba बहुत स्मृति कुशल है: यह एक अनुमानित समाधान की गणना करता है, आप एकवचन वैक्टर की संख्या को सीमित कर सकते हैं, और इसे विरल मैट्रिस पर काम करने के लिए डिज़ाइन किया गया था। जहां तक ​​मुझे पता है, यह उतना ही तेज है जितना कि आप आंशिक एसवीडी की गणना करने के लिए जा रहे हैं।
Zach

@ सोनिया: गुड लक!
Zach

इसे आज़माएं - स्मृति से बाहर ... मैं इसे चलाने से पहले एक त्रिकोण ब्लॉक रूप की गणना करूंगा।
सोनिया

@ सोनिया क्या आपके पास इसे एक विरल के रूप में संग्रहीत किया गया है Matrix? अपने द्वारा गणना किए गए एकवचन मानों की संख्या को सीमित करने का प्रयास करें ... शायद शीर्ष 10 को देखें?
Zach

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