एक समय में काटे गए एसवीडी, एक विलक्षण मूल्य / वेक्टर की गणना


11

वहाँ एक छोटा SVD एल्गोरिथ्म है जो एक समय में एकवचन मूल्यों की गणना करता है?

मेरी समस्या: मैं एक बड़े घने मैट्रिक्स के पहले एकवचन मान (और एकवचन वैक्टर) की गणना करना चाहूंगा , लेकिन मुझे नहीं पता कि का एक उचित मूल्य क्या होगा। बड़ी है, इसलिए दक्षता कारणों से, मैं केवल एसवीडी का मूल्यांकन नहीं करना चाहता हूं ताकि सबसे छोटे एसवी के बाद में छोटा हो जाए।kMkM

आदर्श रूप से, एकवचन मानों की गणना करने का एक तरीका होगा क्रमिक रूप से, सबसे बड़ा ( ) से सबसे छोटा ( )। इस तरह, मैं बस गणना को रोकने के बाद वें विलक्षण मान की गणना कर सकता हूं यदि कुछ सीमा से नीचे आता है।σ1,σ2,σ1σnkσk/σ1

क्या ऐसा एल्गोरिथ्म मौजूद है (अधिमानतः पायथन कार्यान्वयन के साथ)? अपने गुगुलिंग में, मैंने केवल एसवीडी कार्यों को छोटा कर दिया है जो कि एक पैरामीटर के रूप में कश्मीर लेते हैं, इस प्रकार आपको इसे प्राथमिकता का अनुमान लगाने के लिए मजबूर करते हैं।


क्या आपका M वर्ग या आयताकार है? यदि आयताकार है, तो क्या आप लंबे या छोटे विलक्षण वैक्टर चाहते हैं? यही है, यदि M m (n) के साथ M (mxn) है, तो क्या आप चाहते हैं (mxk) या (kxn)?
मैक्स हचिंसन

M आयताकार है, जिसमें स्तंभों की तुलना में कई अधिक पंक्तियाँ हैं। मैं शॉर्ट सिंगुलर वैक्टर (यानी V, M = U S V ^ T में) चाहता हूं ।
सुपरइलेक्ट्रिक

जवाबों:


6

यदि आप एक अनुमानित रैंक-के कारक चाहते हैं तो कुछ विकल्प उपलब्ध हैं।

  1. दृढ़ता से रैंक-खुलासा क्यूआर कारक
  2. इंटरपोलेटिव अपघटन (आईडी) और अन्य यादृच्छिक तकनीक।

आम तौर पर बोलते हुए, वे फॉर्म का एक गुणन प्रदान करते हैं

AMNTfactor×σk+1(A):=ϵ

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

सॉफ्टवेयर के संदर्भ में आईडी एल्गोरिदम का एक इंटरफ़ेस scipy (scipy.linalg.interpolative) http://docs.scipy.org/doc/scipy-dev/reference/linalg.interpolive.html में उपलब्ध है जो आपको उपयोगकर्ता को निर्दिष्ट करने की अनुमति देता है। ।ϵ


2

(संपादित, क्योंकि मैंने पहले प्रश्न को गलत बताया था; आप पहले से ही जानते हैं कि पहले एकवचन मानों की गणना करने के लिए रूटीन उपलब्ध हैं।)k

यदि आप संपूर्ण एसवीडी की गणना के दृष्टिकोण को बाहर करते हैं, तो संबंधित एसवीडी एल्गोरिदम संबंधित हर्मिटियन ईजेनवेल्यू समस्या को हल करने के लिए पुनरावृत्त तरीकों का उपयोग करना कम कर देते हैं। इसलिए, एक रणनीति जिसे आप अपना सकते हैं, वह इस तरह की चीज़ को खुद-ब-खुद करना होगा, और जब तक आप शिफ्ट-एंड-इनवर्ट रणनीति जैसी किसी चीज़ का उपयोग नहीं करना चाहते, तब तक सबसे बड़ी शेष अनसुलझी विलक्षण मूल्य के लिए हल करना जारी रखेंगे। SLEPc जैसे परिष्कृत पैकेजों में इस तरह के काम करने के सुरुचिपूर्ण तरीके हो सकते हैं ।

एक और रणनीति निम्नलिखित होगी:

  • सबसे बड़ा एकवचन मान गणना करें ।s1
  • विरल SVD रूटीन की पूर्ण सहिष्णुता को , जहां आपकी दहलीज है, और यह निर्धारित करने के लिए कुछ सुरक्षा कारक है कि आप कितने संभावित विचित्र विलक्षण मान चाहते हैं हिसाब करना।τs1fτ0<f1
  • विरल SVD दिनचर्या को बुलाओ।

यदि विरल एसवीडी दिनचर्या एक पतली एसवीडी की गणना करती है (और मैं यह नहीं देख सकता कि यह क्यों नहीं होगा), तो यह रणनीति आपको उन सभी विलक्षण मूल्यों को देती है जो आप चाहते हैं (साथ ही संभवतः कुछ अतिरिक्त), क्योंकि पूर्ण सहिष्णुता से नीचे के मान होंगे शून्य मानो। उस स्थिति में, आप scipy.sparse.linalg.svds का उपयोग कर सकते हैं , यह देखते हुए कि एक वैकल्पिक पैरामीटर है, और आपको इसे प्राथमिकता निर्दिष्ट करने की आवश्यकता नहीं है ।k


यदि आप scipy.sparse.linalg.svds में 'k' निर्दिष्ट नहीं करते हैं, तो यह 'tol' पैरामीटर की परवाह किए बिना, k = 6 में डिफ़ॉल्ट होगा। यह स्पष्ट नहीं है कि यह एक बग है, या यदि 'tol' को गणना किए गए एकवचन मानों की सटीकता (बल्कि उनके आकार के) के संदर्भ में संदर्भित किया जाता है
निक अल्जर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.