2016-11-25 3 views
6

मैं गणना करने के लिए Classical Multidimensional Scaling कोड लिख रहा हूँ की eigenvectors का अनुमान करने के लिए तेजी से तरीकों एक बहुत बड़ी n द्वारा n मैट्रिक्स, मेरे उदाहरण में n = 500,000 की (एमडीएस को संक्षिप्त)।उच्चतम 3 eigenvalues ​​और एक बड़े सममित मैट्रिक्स

एमडीएस के एक चरण में, मुझे n के n मैट्रिक्स द्वारा उच्चतम तीन eigenvalues and their corresponding eigenvectors की गणना करने की आवश्यकता है। इस मैट्रिक्स को B मैट्रिक्स कहा जाता है। मुझे केवल इन तीन eigenvectors और eigenvalues ​​की जरूरत है। एक बड़े मैट्रिक्स के eigenvectors और eigenvalues ​​की गणना के सामान्य तरीकों में एक लंबा समय लगता है, और मुझे एक बहुत ही सटीक उत्तर की आवश्यकता नहीं है, इसलिए मैं eigenvectors और eigenvalues ​​का अनुमान लगाने की मांग कर रहा हूँ।

कुछ पैरामीटर:

  1. B मैट्रिक्स symmetric है, real, और काफी dense
  2. सिद्धांत में B की eigenvalue अपघटन हमेशा वास्तविक संख्या का उत्पादन करना चाहिए।
  3. मुझे पूरी तरह सटीक अनुमान की आवश्यकता नहीं है, बस एक तेज़। मुझे इसे कई घंटों में पूरा करने की आवश्यकता होगी।
  4. मैं अजगर में लिख सकते हैं और सी ++

मेरा प्रश्न: तीन उच्चतम eigenvectors और इतनी बड़ी B मैट्रिक्स eigenvalues ​​के आकलन के वहाँ तेजी से तरीकों हैं?

मेरी प्रगति: मुझे method of approximating the highest eigenvalue of a matrix मिला है, लेकिन मुझे नहीं पता कि मैं इसे उच्चतम तीन में सामान्यीकृत कर सकता हूं या नहीं। मुझे this paper written in 1996 भी मिला है, लेकिन यह मेरे लिए पढ़ने के लिए बेहद तकनीकी और कठिन है।

+0

एक मैट्रिक्स जो आकार 64-बिट फ्लोटिंग-पॉइंट प्रविष्टियों को दिए गए स्टोरेज के टेराबाइट से अधिक की आवश्यकता होगी। Eigenvectors भूल जाओ - यहां तक ​​कि एक एकल मैट्रिक्स-वेक्टर गुणा कर दर्दनाक लग रहा है। –

+0

लेकिन मूल मैट्रिक्स को स्टोर करने की कोई आवश्यकता नहीं है! यह अप्रत्यक्ष रूप से एमडीएस एल्गोरिदम में दिया गया है और आप इसे मैट्रिक्स की गणना करने के बिना मैट्रिक्स-वेक्टर गुणा करने के लिए उपयोग कर सकते हैं। –

+0

क्या आपने बड़े डेटा के लिए अनुमानित एमडीएस देखा है? जैसे http://pike.cs.ucla.edu/~weiwang/paper/CIMCV06.pdf देखें – Gene

उत्तर

8

जी गोलब और CF वान ऋण मैट्रिक्स संगणना अध्याय 9 राज्य में 2 कि Lanczos एल्गोरिदम इस के लिए एक पसंद कर रहे हैं (सिवाय इसके कि मैट्रिक्स आदर्श विरल होना चाहिए - यह स्पष्ट रूप से गैर विरल लोगों के लिए भी काम करता है)

https://en.wikipedia.org/wiki/Lanczos_algorithm

2

आप B के उच्चतम आइजन्वेक्टर और फिर, कि आइजन्वेक्टर का उपयोग कर B' में डेटा बदल सकता है। फिर B' के पहले कॉलम को पॉप करें और B'' प्राप्त करें ताकि आप B'' का उच्चतम ईजिनवेक्टर प्राप्त कर सकें: B के लिए एक व्यावहारिक दूसरा उच्चतम ईजिनवेक्टर लिखने के लिए पर्याप्त जानकारी है। और फिर तीसरे के लिए।

गति के बारे में: आप यादृच्छिक रूप से उस विशाल डेटासेट को N आइटमों का डेटासेट होने का नमूना दे सकते हैं। यदि आपको केवल तीन आयाम मिल रहे हैं, तो मुझे उम्मीद है कि आप ईजिनवेक्टरों का अवलोकन पाने के लिए अधिकांश डेटा से छुटकारा पा सकते हैं। आप इसे कॉल कर सकते हैं: 'चुनावी मतदान'। मैं त्रुटि दर को मापने में आपकी सहायता नहीं कर सकता, लेकिन मैं 1k आइटम, कई बार नमूना करने का प्रयास करूंगा, और देख सकता हूं कि परिणाम कम या कम हैं।

अब आप 'भविष्यवाणी' बनाने के लिए कई 'चुनाव' का अर्थ प्राप्त कर सकते हैं।

0

इस सूत्र

Largest eigenvalues (and corresponding eigenvectors) in C++

के रूप में वहाँ सुझाव आप ARPACK पैकेज है जो एक सी ++ इंटरफ़ेस है का उपयोग कर सकते में दिए गए सुझावों पर एक नज़र डालें।

संबंधित मुद्दे