उच्च-आयामी डेटा के लिए सबसे तेज़ पीसीए एल्गोरिदम


11

मैं लगभग ४० ००० नमूनों से बना एक डेटासेट पर एक पीसीए प्रदर्शन करना चाहूंगा, प्रत्येक नमूने में लगभग १० ००० विशेषताएं प्रदर्शित होंगी।

Matlab princomp फंक्शन का उपयोग करने में लगातार आधे घंटे से अधिक समय लगता है जिस बिंदु पर मैं इस प्रक्रिया को मार देता हूं। मैं एक कार्यान्वयन / एल्गोरिथ्म ढूंढना चाहता हूं जो 10 मिनट से कम समय में चलता हो। सबसे तेज़ एल्गोरिथम क्या होगा? एक i7 दोहरे कोर / 4 जीबी रैम पर कितना समय लगेगा?


हां, आप सही हैं, मुझे अधिक सटीक होना चाहिए। इसमें आधे घंटे से अधिक समय लगता है, फिर मैंने इस प्रक्रिया को मारने का फैसला किया। मुझे ऐसा कम से कम दस बार करना है, क्या ऐसा करना अच्छा होगा जो 10 मिनट से कम समय में काम करे
मध्याह्न

आपका मैट्रिक्स कितना विरल है?
अर्नोल्ड न्यूमैयर

मैट्रिक्स में शून्य का प्रतिशत 80% से ऊपर है
मध्

कर्नेल-पीसीए भी देखें।
19

जवाबों:


11

सबसे पहले, आपको यह निर्दिष्ट करना चाहिए कि क्या आप सभी घटक या सबसे महत्वपूर्ण चाहते हैं?

अपने मैट्रिक्स निरूपित के साथ एन नमूने और की संख्या में किया जा रहा एम आयामी स्वरूप।आरएन×एन

मामले में आप चाहते हैं सभी घटकों को जाने के लिए शास्त्रीय तरीका है गणना सहप्रसरण मैट्रिक्स (जिनमें से समय जटिलता है हे ( एन एम 2 ) ) और फिर इसे करने के लिए SVD लागू (अतिरिक्त हे ( एम 3 ) )। स्मृति के संदर्भ में यह O ( 2 M 2 ) (सहसंयोजक मैट्रिक्स + विलक्षण वैक्टर और ऑर्थोगोनल आधार बनाने वाले मान) या onal 1.5 GB आपके विशेष A के लिए दोहरी परिशुद्धता में होगा ।सीआर×हे(एन2)हे(3)हे(22)1.5

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

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


2

मुझे लगता है कि आपको केवल कुछ (या कुछ सौ) प्रमुख विलक्षण मूल्य / वेक्टर जोड़े की आवश्यकता है। फिर एक पुनरावृत्त विधि का उपयोग करना सबसे अच्छा है, जो बहुत तेज़ होगा और स्मृति को बहुत कम खपत करेगा।

मतलाब में, देखें

मदद svds


हाँ, ऐसा लगता है कि पुनरावृत्ति के तरीके तेज़ हैं यदि मुझे केवल पहले सौ घटकों की आवश्यकता है।
मध्

जहाँ तक svds का संबंध है, मैंने अपने मैट्रिक्स को एक विरल प्रारूप में रखने की कोशिश की और svd के बजाय svds को डालने के लिए प्रिंट फ़ंक्शन को संशोधित किया, और मेरे आश्चर्य को 2000 के 4000 मैट्रिक्स (15 के बजाय 180 s) पर अधिक समय लगा। )। विचित्र ...
मध्

1
विरल प्रारूप पर स्विच करने की कोई आवश्यकता नहीं है। इसके अलावा, आपको उन विलक्षण वैक्टरों की संख्या कम करने की आवश्यकता है जिन्हें आप गणना करना चाहते हैं। Fiull svd की गणना के लिए, svds उपयुक्त नहीं है।
अर्नोल्ड न्यूमैयर

2
इसके अलावा प्रमुख मोड के लिए नोट नए यादृच्छिक बेतरतीब तरीके हैं, जैसे कि stanford.edu/group/mmds/slides2010/Martinsson.pdf
Nick Alger

2

आप क्रास वैलिडेट पर मेरे उत्तर की जांच कर सकते हैं । मैं इसे यहाँ कॉपी नहीं करना चाहता था। मूल रूप से, आप पीसीए आधार और गुणांक की गणना करने के लिए तेज, यादृच्छिक एसवीडी का उपयोग कर सकते हैं।


1

आप फास्ट पीसीए एल्गोरिथ्म की कोशिश कर सकते हैं जो कुछ ईजेनवेक्टरों की गणना के एक पुनरावृत्त तरीके पर आधारित है। देखें, ए.शर्मा और केके पालीवाल, फिक्स्ड पॉइंट विश्लेषण, पैटर्न रिकॉग्निशन लेटर्स, 28, 1151-1155, 2007 का उपयोग करते हुए फास्ट प्रिंसिपल कंपोनेंट विश्लेषण

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