समझ में कैसे Numpy SVD करता है


13

मैं मैट्रिक्स के रैंक और समीकरणों के मैट्रिक्स सिस्टम के समाधान की गणना करने के लिए विभिन्न तरीकों का उपयोग कर रहा हूं। मैं फंक्शन में आया था linalg.svd। गौसियन उन्मूलन के साथ प्रणाली को हल करने के मेरे अपने प्रयास की तुलना में, यह तेज और अधिक सटीक दोनों प्रतीत होता है। मैं यह समझने की कोशिश कर रहा हूं कि यह कैसे संभव है।

जहाँ तक मुझे पता है, linalg.svd फ़ंक्शन मेरे मैट्रिक्स के eigenvalues ​​की गणना करने के लिए एक QR एल्गोरिथ्म का उपयोग करता है। मुझे पता है कि यह गणितीय रूप से कैसे काम करता है, लेकिन मैं नहीं जानता कि कैसे Numpy इसे इतनी जल्दी और बिना अधिक सटीकता खोए प्रबंधित करता है।

तो मेरा सवाल: numpy.svd फ़ंक्शन कैसे काम करता है, और अधिक विशेष रूप से, यह इसे तेजी से और सही तरीके से कैसे प्रबंधित करता है (गॉसियन उन्मूलन की तुलना में)?


2
numpy dgesddवास्तविक मूल्यवान SVDs के लिए लापैक रूटीन का उपयोग करता है । तो आपका असली सवाल शायद "लैपैक डीएजीएसडी कैसे काम करता है?", और स्टैकओवरफ्लो के लिए यह बहुत ही विषय है।
टैलोनमीज़

यदि आपकी वास्तव में उत्सुकता है, तो मैं LAPACK स्रोत की जांच करने का सुझाव दूंगा।

आपकी टिप्पणी के लिए धन्यवाद, और मेरी क्षमा याचना मैं अपमानजनक हूं।
RobVerheyen

यह पोस्ट स्टैक ओवरफ्लो से क्रॉस-पोस्ट है । क्रॉस-पोस्टिंग आमतौर पर स्टैक एक्सचेंज साइटों पर हतोत्साहित किया जाता है। एक अलग साइट पर एक प्रश्न को रीपोस्ट करने के लिए मानक प्रोटोकॉल एक अलग साइट पर रीपोस्ट करने का प्रयास करने से पहले मूल पोस्ट को बंद करना, हटाना या माइग्रेट करना है। (यदि आप प्रश्न को माइग्रेट करते हैं, तो यह अपने आप
रीपोस्ट

मुझे क्षमा करें, मुझे प्रोटोकॉल की जानकारी नहीं थी। मुझे उम्मीद है कि मुझे अभी भी जवाब मिल सकता है।
RobVerheyen

जवाबों:


15

आपके प्रश्न में कई समस्याएं हैं।

मैट्रिक्स की संख्यात्मक रैंक की गणना करने के लिए गॉसियन एलिमिनेशन (एलयू फैक्टराइजेशन) का उपयोग न करें। फ्लोटिंग-पॉइंट अंकगणित में इस उद्देश्य के लिए एलयू फैक्टराइजेशन अविश्वसनीय है। इसके बजाय, रैंक-खुलासा करने वाले क्यूआर अपघटन का उपयोग करें (जैसे कि xGEQPXया xGEPQYएलएपीकेई में, जहां एक्स सी, डी, एस या जेड है, हालांकि उन रूटीनों को ट्रैक करना मुश्किल है; संबंधित प्रश्न पर जेडब्रोर्न का जवाब देखें ), या एसवीडी का उपयोग करें (एकवचन मान अपघटन, जैसे xGESDDया xGESVD, जहाँ x फिर C, D, S या Z है)। एसवीडी संख्यात्मक रैंक के निर्धारण के लिए एक अधिक सटीक, विश्वसनीय एल्गोरिथ्म है, लेकिन इसके लिए अधिक फ्लोटिंग-पॉइंट संचालन की आवश्यकता होती है।

हालांकि, एक रैखिक प्रणाली को हल करने के लिए, एलयू कारक (आंशिक धुरी के साथ, जो कि लैपैक में मानक कार्यान्वयन है) व्यवहार में अत्यंत विश्वसनीय है। कुछ रोग संबंधी मामले हैं जिनके लिए आंशिक धुरी के साथ LU कारक अस्थिर है ( संख्यात्मक 22 रेखीय बीजगणित में व्याख्यान 22 देखें)ट्रेफेथेन और विवरण के लिए बाऊ द्वारा)। क्यूआर फ़ैक्टराइजेशन रैखिक प्रणालियों को हल करने के लिए एक अधिक स्थिर संख्यात्मक एल्गोरिथ्म है, यही कारण है कि शायद यह आपको ऐसे सटीक परिणाम देता है। हालाँकि, इसे वर्ग मैट्रिक्स के लिए 2 के कारक द्वारा LU कारक से अधिक फ्लोटिंग-पॉइंट संचालन की आवश्यकता होती है (मुझे लगता है कि; जैकपॉल्सन मुझे उस पर सही कर सकता है)। आयताकार प्रणालियों के लिए, क्यूआर फ़ैक्टराइजेशन एक बेहतर विकल्प है क्योंकि यह कम से कम वर्गों के समाधान के लिए अधिक से अधिक रैखिक प्रणालियों का उत्पादन करेगा। एसवीडी का उपयोग रैखिक प्रणालियों को हल करने के लिए भी किया जा सकता है, लेकिन यह क्यूआर फैक्टराइजेशन की तुलना में अधिक महंगा होगा।

janneb सही है कि numpy.linalg.svd xGESDDLAPACK में एक आवरण है । एकवचन मान decompositions दो चरणों में आगे बढ़ते हैं। सबसे पहले, मैट्रिक्स को विघटित करने के लिए बोली-प्रक्रिया के रूप में कम किया जाता है। एलएपीकेए में बीडियोऑर्गनल फॉर्म को कम करने के लिए उपयोग किया जाने वाला एल्गोरिदम संभवतः लॉसन-हैनसन-चान एल्गोरिथ्म है, और यह एक बिंदु पर क्यूआर फैक्टराइजेशन का उपयोग करता है। ट्रेफेथेन और बाऊ द्वारा न्यूमेरिकल रैखिक बीजगणित में व्याख्यान 31 इस प्रक्रिया का अवलोकन देता है। फिर, xGESDDद्विदिशीय मैट्रिक्स से एकवचन मूल्यों और बाएँ और दाएँ एकवचन वैक्टर की गणना करने के लिए एक डिवाइड-और-कॉनकॉर एल्गोरिथ्म का उपयोग करता है। इस कदम पर पृष्ठभूमि प्राप्त करने के लिए, आपको जिम डिमेल द्वारा गोलब और वैन ऋण, या एप्लाइड न्यूमेरिकल रैखिक बीजगणित द्वारा मैट्रिक्स संगणनाओं से परामर्श करने की आवश्यकता होगी ।

अंत में, आपको eigenvalues ​​के साथ एकवचन मूल्यों को भ्रमित नहीं करना चाहिए । मात्रा के ये दो सेट समान नहीं हैं। एसवीडी एक मैट्रिक्स के विलक्षण मूल्यों की गणना करता है। MATLAB के साथ क्लीव मोलर की न्यूमेरिकल कम्प्यूटिंग एकवचन मूल्यों और आइजनवेल्यूज़ के बीच के अंतर का एक अच्छा अवलोकन देती है । सामान्य तौर पर, वहाँ एकवचन और अपने eigenvalues, किसी दिए गए मैट्रिक्स के मूल्यों के बीच कोई स्पष्ट संबंध के मामले को छोड़कर है सामान्य मैट्रिक्स, जहां विलक्षण मूल्यों eigenvalues का निरपेक्ष मान रहे हैं।


मुझे लगता है कि eigenvalues ​​और एकवचन मूल्यों के बीच संबंध के लिए "संबंधित नहीं" बहुत मजबूत है। जब तक आप अपने मैट्रिक्स के पूर्ण जॉर्डन अपघटन को नहीं जानते हैं, तब तक संबंध बहुत अस्पष्ट है, लेकिन आप एक का उपयोग दूसरे के अनुमान प्राप्त करने के लिए कर सकते हैं यदि आपके पास जॉर्डन अपघटन के बारे में जानकारी (या धारणा बनाने के लिए तैयार) है।
डैन

इसके बजाय आप क्या सुझाव देंगे?
ज्योफ ऑक्सीबेरी

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

मैं जोड़ सकता हूं कि मैं जिस मैट्रिक्स को हल कर रहा हूं वह वास्तव में विलक्षण है। वास्तव में, मैट्रिक्स रैंक मैट्रिक्स के आकार का केवल आधा है। शायद यह कुछ विधि को अधिक बेहतर बनाता है?
रॉबेरहेन

1
@ रॉवेरहेन: क्यूआर लू की तुलना में धीमी होगी, लेकिन काफी अधिक सटीक। SVD, QR से भी धीमी होगी, लेकिन संख्यात्मक रैंक निर्धारित करने के लिए SVD को सबसे विश्वसनीय तरीका माना जाता है (उदाहरण के लिए, MATLAB अपने rankफ़ंक्शन में SVD का उपयोग करता है )। दृष्टिकोण का उपयोग करते समय इसमें थोड़ा सा विवेक भी शामिल होता है; एसवीडी दृष्टिकोण में, संख्यात्मक रैंक एक निर्दिष्ट (आमतौर पर बहुत छोटा) कटऑफ के ऊपर एकवचन मूल्यों की संख्या है। (क्यूआर दृष्टिकोण समान है, लेकिन आर मैट्रिक्स के विकर्ण प्रविष्टियों के साथ एकवचन मूल्यों को बदल देता है।)
ज्योफ ऑक्सीबेरी

8

आपके प्रश्न के शब्दों के कारण, मैं मान रहा हूं कि आपका मैट्रिक्स चौकोर है। LAPACK का SVD रूटीन, जैसे कि zgesvd , अनिवार्य रूप से चौकोर मैट्रेस के लिए तीन चरणों में आगे बढ़ते हैं:

  1. UAVAAB:=UAHAVAUAVABO(n3)
  2. {UB,VB,Σ}B=UBΣVBHO(n2)O(n3)
  3. UABVAH=AA=(UAUB)Σ(VAVB)HUAVAUBVBO(n3)

7

numpy.linalg.svd LAPACK से {Z, D} GESDD के आसपास एक आवरण है। बदले में, LAPACK, संख्यात्मक रेखीय बीजगणित में दुनिया के कुछ अग्रणी विशेषज्ञों द्वारा बहुत सावधानी से लिखा गया है। वास्तव में, यह बहुत आश्चर्यजनक होगा यदि कोई व्यक्ति क्षेत्र से परिचित नहीं है, तो वह LAPACK (या तो गति या सटीकता में) की पिटाई करने में सफल होगा।

क्यूंकि गॉसियन उन्मूलन की तुलना में क्यूआर बेहतर क्यों है, यह शायद /scicomp// के लिए अधिक उपयुक्त है


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