एसवीडी की गणना के लिए कौन से तेज़ एल्गोरिदम मौजूद हैं?


14

संभवत: यहां विषय बंद है, लेकिन पहले से ही कई ( एक , दो ) संबंधित प्रश्न मौजूद हैं।

साहित्य में घूमना (या ट्रंकेटेड एसवीडी एल्गोरिदम के लिए एक Google खोज) बहुत सारे पेपर को बदल देता है जो विभिन्न तरीकों से काटे गए एसवीडी का उपयोग करते हैं, और दावा करते हैं (निराशा की बात है, अक्सर बिना उद्धरण के) यह कंप्यूटिंग के लिए तेज एल्गोरिदम है, लेकिन कोई भी नहीं लगता है कि उन एल्गोरिदम क्या इंगित कर रहे हैं।

केवल एक चीज जो मुझे मिल सकती है वह है एक एकल यादृच्छिक एल्गोरिदम , जिसका उपयोग रेडस् वीडी लाइब्रेरी में किया जाता है ।

मैं जो देखना चाहता हूं वह सटीक और अक्षम एल्गोरिदम का एक सेट है, यह समझने के लिए उपयुक्त है कि सिस्टम कैसे काम करते हैं (लेकिन जरूरी नहीं कि वास्तव में उन्हें पाठ्यक्रम के कार्यान्वयन के लिए!)।

किसी को भी इस तरह की बात के लिए एक अच्छा संदर्भ है?


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

एसवीडी को काटकर, आप इसका मतलब है कि आप केवल उन सभी के विपरीत कई प्रमुख विलक्षण वैक्टर / मूल्यों को खोजने में रुचि रखते हैं?
अमीबा का कहना है कि

@amoeba हां, यह विचार है।
जॉन डकेट

जवाबों:


17

बहुत व्यापक रूप से, eigenvalue या एकवचन मान decompositions की गणना करने के लिए दो दृष्टिकोण हैं। एक दृष्टिकोण मैट्रिक्स को विकर्ण करना है और यह अनिवार्य रूप से पूरे eigenvalue / singular value decomposition (पूरे eigenvalue स्पेक्ट्रम) को एक ही समय में प्राप्त करता है, यहाँ कुछ अवलोकन देखें: singal value decomposition (SVD) की गणना करने के लिए कुशल एल्गोरिदम क्या हैं? विकल्प एक पुनरावृत्त एल्गोरिथ्म का उपयोग करना है जो एक समय में एक (या कई) eigenvectors पैदावार करता है। वांछित संख्या में प्रतिजन की गणना किए जाने के बाद Iterations को रोका जा सकता है।

मुझे नहीं लगता कि एसवीडी के लिए विशेष रूप से पुनरावृत्त एल्गोरिदम हैं। इसका कारण यह है एक एक की SVD गणना कर सकता है मैट्रिक्स बी एक वर्ग सममित के eigendecomposition करके ( n + मीटर ) × ( n + मीटर ) मैट्रिक्स एक = ( 0 बी बी 0 )इसलिए बजाय क्या एल्गोरिदम गणना छोटा कर दिया SVD, आप पूछ किया जाना चाहिए क्या पुनरावृत्ति एल्गोरिदम गणना eigendecomposition पूछने का: छोटा कर दिया SVD के लिए एल्गोरिथ्म eigendecomposition के लिए पुनरावृत्ति एल्गोरिथ्म n×mB(n+m)×(n+m)

A=(0BB0).
algorithm for truncated SVDiterative algorithm for eigendecomposition.

सबसे सरल पुनरावृत्ति एल्गोरिथ्म को शक्ति पुनरावृत्ति कहा जाता है और वास्तव में बहुत सरल है:

  1. यादृच्छिक आरंभ करेंx
  2. एक्सएक्स
  3. एक्सएक्स/एक्स
  4. गोटो चरण # 2 जब तक परिवर्तित नहीं किया गया।

सभी अधिक जटिल एल्गोरिदम अंततः शक्ति पुनरावृत्ति विचार पर आधारित हैं, लेकिन काफी परिष्कृत हैं। क्रिलोव उपप्रजातियों द्वारा आवश्यक गणित दिया जाता है । एल्गोरिदम अर्नोल्डी पुनरावृत्ति हैं (वर्ग nonsymmetric matrices के लिए), लैंक्ज़ोस पुनरावृत्ति (वर्ग सममित matrices के लिए), और इसके रूप में भिन्नरूप जैसे " विधि और व्हाट्सएप।

आप इसका वर्णन निम्न पाठ्यपुस्तकों में कर सकते हैं:

  1. गोलूब और वैन ऋण, मैट्रिक्स संगणना
  2. ट्रेफेथेन और बाऊ, न्यूमेरिकल रैखिक बीजगणित
  3. डेमिमल, एप्लाइड न्यूमेरिकल रैखिक बीजगणित
  4. साद, बड़ी Eigenvalue समस्याओं के लिए संख्यात्मक तरीके

सभी उचित प्रोग्रामिंग लैंग्वेज और स्टेटिस्टिक पैकेज (मैटलैब, आर, पाइथन सुपी, यू नेम इट) उसी फोरट्रान लाइब्रेरीज़ का इस्तेमाल करते हैं जो ईजन / एकवचन-मूल्य विघटन करती है। ये LAPACK हैं और ARPACK हैं । ARPACK का अर्थ ARnoldi Package है, और यह सभी अर्नोल्डी / लैंक्ज़ोस पुनरावृत्तियों के बारे में है। उदाहरण के लिए मतलाब में SVD के लिए दो कार्य हैं: svdLAPACK के माध्यम से पूर्ण अपघटन करता है, और svdsARPACK के माध्यम से दिए गए एकवचन वैक्टर की संख्या की गणना करता है और यह वास्तव eigsमें "स्क्वायर-इलेक्टेड" मैट्रिक्स पर कॉल के लिए केवल एक आवरण है ।

अपडेट करें

BAAB

इन विधियों के लिए एक फोरट्रान पुस्तकालय भी है, इसे कहा जाता है PROPACK :

सॉफ्टवेयर पैकेज PROPACK में बड़े और विरल या संरचित मैट्रिसेस के एकवचन मान के अपघटन की गणना के लिए फ़ंक्शंस का एक सेट होता है। एसवीडी दिनचर्या लैंकोस बिडियोऑनलाइज़ेशन एल्गोरिथ्म पर आंशिक पुनर्वितरण (बीपीआरओ) के साथ आधारित हैं।

हालाँकि, PROPACK ARPACK की तुलना में बहुत कम मानक है और मूल रूप से मानक प्रोग्रामिंग भाषाओं में समर्थित नहीं है। यह रासमस लार्सन द्वारा लिखा गया है, जिनके पास 90-पृष्ठ लंबा 1998 का ​​पेपर लैंक्ज़ोस बिडियोऑनलाइज़ेशन है, जो आंशिक रूप से पुनर्मूल्यांकन के साथ एक अच्छा अवलोकन है। इस कम्प्यूटेशनल विज्ञान एसई धागा के माध्यम से @MichaelGrant के लिए धन्यवाद ।

सबसे हाल के पत्रों में, सबसे लोकप्रिय लग रहा है Baglama & Reichel, 2005, बगलामा और रीचेल संवर्धित रूप से लैंक्ज़ोस बिडियोऑगनाइजेशन विधियों को फिर से शुरू किया गया है, जो संभवतः कला की स्थिति के आसपास है। इस लिंक को टिप्पणियों में देने के लिए @Dougal का धन्यवाद।

अपडेट २

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


ध्यान दें कि SVD- विशिष्ट पुनरावृत्ति विधियाँ मौजूद हैं; जैसे कि संवर्धित इम्प्लांटली रीस्टार्ट्ड लैंक्ज़ोस बिदिओगलाइज़ेशन मेथड्स , जे। बगलामा और एल। रेइचेल , सियाम जे। साइंस। कंप्यूटर। 2005. (मैंने यह जानने के लिए पेपर नहीं पढ़ा है कि क्या यह आपके द्वारा दिए गए आईनेगल दृष्टिकोण से मौलिक रूप से भिन्न है, बस यह जान लें कि लोग उस तरीके को पसंद करते हैं।)
डगल

1
लिंक के लिए धन्यवाद, @ डगल। मुझे यह कहना चाहिए कि मैं वास्तव में इनमें से किसी भी तरीके को अच्छी तरह से नहीं जानता, इसलिए वास्तव में उस पर कोई टिप्पणी नहीं कर सकता। यह बहुत अच्छा होगा यदि कोई अधिक जानकार विभिन्न पुनरावृत्तियों के बीच संबंध की व्याख्या करेगा। जहां तक ​​मैं समझता हूं, वेनिला लैंजोस विधि एक वर्ग मैट्रिक्स के eigenvalues ​​की गणना के लिए है और एसवीडी के लिए नहीं; "संवर्धित रूप से फिर से शुरू किए गए लैंज़ोज़" को इसके साथ निकटता से संबंधित होना चाहिए, लेकिन आप सही हैं - यह सीधे एसवीडी से लगता है। सुनिश्चित नहीं है कि यह सब एक साथ कैसे फिट बैठता है। अगर मुझे कभी कोई नज़दीकी नज़र आती है तो मैं अपने उत्तर को अपडेट करूंगा।
अमीबा

1
@ डगल, मैंने कुछ सरसरी वाचन किया और एक अद्यतन किया।
अमीबा का कहना है कि

@amoeba नियमित रूप से कम से कम वर्गों के संदर्भ में "एसवीडी को छंटनी" करेगा " अनिवार्य रूप से सिद्धांत सिद्धांत" के समान है ?
जियोमैट

1
@amoeba क्या आप फेसबुक के यादृच्छिक एसवीडी कार्यान्वयन पर टिप्पणी कर सकते हैं , कुछ लोगों का कहना है कि यह अभी सबसे तेजी से संभव समाधानों में से है। यह बहुत अच्छा होगा अगर आप इस पर भी टिप्पणी कर सकते हैं।
टिम

4

मैं बस तेजी से एसवीडी के माध्यम से धागे पर ठोकर खाई, इसलिए मैं खुद चीजों का पता लगाने की कोशिश कर रहा हूं, लेकिन शायद आपको देखना चाहिए अनुकूली क्रॉस सन्निकटन (एसीए) पर ।

MM=i=0kUiViTN×NO(N) )। तो यह वास्तव में तेज़ है; दुर्भाग्य से बहुत से लोग "तेज" शब्द का हल्के से उपयोग करते हैं।

फिर, यह आपकी समस्या पर निर्भर करता है कि क्या काम करता है। कई मामलों में मैं व्यक्तिगत रूप से मुठभेड़ करता हूं, एसीए एक बहुत ही उपयोगी संख्यात्मक उपकरण है।

नोट: मैं इसे एक टिप्पणी के रूप में लिखना चाहता था, लेकिन क्योंकि मैंने अभी-अभी यह खाता बनाया है, जिसमें टिप्पणियों के लिए मेरी पर्याप्त प्रतिष्ठा नहीं है ... लेकिन पोस्टिंग कार्य करता है।


2

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

  1. इससे पहले कि आप कुछ भी करें, एक साधारण मॉडल (जैसे, वैश्विक माध्य + स्तंभ और पंक्ति स्थिर मान) को फिट करें, और केवल एक बार जब आपने किया है तो आपको अवशिष्ट को फिट करने के लिए छंटनी की गई SVD का उपयोग करना चाहिए।
  2. प्रत्येक पंक्ति और स्तंभ (नेटफ्लिक्स मामले में प्रत्येक फिल्म और उपयोगकर्ता के लिए) को लंबाई k (जहां वह रैंक आप को ट्रंक कर रहे हैं) के यादृच्छिक वेक्टर को प्रारंभ करें।
  3. मैट्रिक्स में ज्ञात प्रविष्टियों को त्रुटि आरटी को कम करने के लिए कॉलम वैक्टर को निर्धारित करें और कॉलम वैक्टर को अपडेट करें । पेपर में मैटलैब कोड में प्रक्रिया दी गई है।
  4. कॉलम वैक्टर निर्धारित करें और पंक्ति वैक्टर को एक अनुरूप तरीके से अपडेट करें।
  5. 3 और 4 को दोहराएं जब तक आप अभिसरण करते हैं या पर्याप्त अच्छे परिणाम प्राप्त कर रहे हैं।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.