बड़े डेटा के साथ SVD और PCA कैसे करें?


29

मेरे पास डेटा (लगभग 8GB) का एक बड़ा सेट है। मैं इसका विश्लेषण करने के लिए मशीन लर्निंग का उपयोग करना चाहूंगा। इसलिए, मुझे लगता है कि दक्षता के लिए डेटा की गतिशीलता को कम करने के लिए मुझे SVD तो PCA का उपयोग करना चाहिए। हालाँकि, MATLAB और ऑक्टेव इतने बड़े डेटासेट को लोड नहीं कर सकते हैं।

इतनी बड़ी मात्रा में डेटा के साथ एसवीडी करने के लिए मैं कौन से टूल का उपयोग कर सकता हूं?


नमस्ते, और डीएस में आपका स्वागत है! शायद आप अपने डेटासेट पर थोड़ा विस्तार कर सकते हैं। आपके पास कितनी पंक्तियाँ और स्तंभ हैं? इससे संभावित समाधानों पर असर पड़ सकता है।
एस। कोलासा -

23711341 पंक्तियाँ, और 8 कॉलम। मैं 1-2 कॉलम हटाने की कोशिश कर सकता था। वे मेरी समस्या से संबंधित नहीं लगते हैं।
डेविड एस।

आपको यहां कॉलम से पहले पंक्तियों का नमूना लेना चाहिए। क्या कोई कारण है कि आप डेटा आकार को कम करने के लिए यादृच्छिक रूप से नमूना पंक्तियों को कैंट नहीं कर सकते हैं? मैं यहाँ पंक्तियों को उपयोगकर्ताओं या किसी चीज़ से संबंधित मान रहा हूँ
cwharland

क्षमा करें यदि मैंने खुद को स्पष्ट नहीं किया। मेरा लक्ष्य पीसीए करना है। मुझे लगता है कि नमूना डेटा पर एसवीडी मुझे पीसीए करने में मदद नहीं कर सकता है, है ना?
डेविड एस।

पीसीए आमतौर पर covariance मैट्रिक्स पर SVD की गणना करके कार्यान्वित किया जाता है। कोवरियन मैट्रिक्स की गणना करना एक शर्मनाक समानांतर कार्य है, इसलिए इसे रिकॉर्ड की संख्या के साथ आसानी से स्केल करना चाहिए।
ऐनी-मौसे

जवाबों:


41

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

लेकिन क्या होगा अगर आप वास्तव में पीसीए जैसी आयामी कमी तकनीक को एक डेटासेट में लागू करना चाहते हैं जो एक मेमोरी में फिट नहीं होता है? आम तौर पर एक डेटासेट X का आकार n x m के डेटासेट एक्स के रूप में दर्शाया जाता है , जहाँ n टिप्पणियों (पंक्तियों) की संख्या होती है और m कई चर (कॉलम) होते हैं। आमतौर पर मेमोरी के साथ समस्याएं इन दो संख्याओं में से केवल एक से आती हैं।

बहुत अधिक अवलोकन (n >> m)

जब आपके पास बहुत अधिक अवलोकन होते हैं , लेकिन चर की संख्या छोटे से मध्यम तक होती है, तो आप संवेदी मैट्रिक्स का निर्माण कर सकते हैं । वास्तव में, विशिष्ट PCA में आकार m x m के सहसंयोजक मैट्रिक्स का निर्माण और इसके लिए एकवचन मान अपघटन लागू होता है। प्रकार के फ्लोट64 के m = 1000 चर के साथ , एक सहसंयोजक मैट्रिक्स का आकार 1000 * 1000 * 8 ~ 8Mb है, जो आसानी से स्मृति में फिट बैठता है और इसका उपयोग SVD के साथ किया जा सकता है। तो आपको केवल पूरे डेटासेट को मेमोरी में लोड किए बिना कोविरेस मैट्रिक्स का निर्माण करने की आवश्यकता है - सुंदर ट्रैकेबल कार्य

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

बहुत सारे चर (n << m)

दूसरी ओर, कभी-कभी, जब आपके पास बहुत अधिक चर होते हैं , तो कोवरियन मैट्रिक्स स्वयं मेमोरी में फिट नहीं होगा। उदाहरण के लिए, यदि आप 640x480 छवियों के साथ काम करते हैं, तो हर अवलोकन में 640 * 480 = 307200 चर होते हैं, जिसके परिणामस्वरूप 703Gb सहसंयोजक मैट्रिक्स होता है! यह निश्चित रूप से नहीं है जो आप अपने कंप्यूटर की स्मृति में रखना चाहेंगे, या यहां तक ​​कि अपने क्लस्टर की स्मृति में भी। तो हम सभी में एक covariance मैट्रिक्स का निर्माण किए बिना आयामों को कम करने की आवश्यकता है।

यह करने के लिए मेरी पसंदीदा विधि यादृच्छिक प्रोजेक्शन है । संक्षेप में, आप डाटासेट अगर एक्स आकार के एन एक्स मीटर , आप इसे कुछ विरल यादृच्छिक मैट्रिक्स से गुणा कर सकते हैं आर आकार के मीटर x कश्मीर (के साथ कश्मीर << मीटर और) प्राप्त नए मैट्रिक्स एक्स ' एक बहुत छोटे आकार के एन एक्स कश्मीर साथ लगभग एक ही गुण मूल एक के रूप में। यह काम क्यों करता है? ठीक है, आपको पता होना चाहिए (जो कि मुख्य घटक) ओर्थोगोनल कुल्हाड़ियों का सेट लगता है कि पीसीए लक्ष्य और पहले पर अपना डेटा परियोजना कश्मीरउनमें से। यह पता चला है कि विरल यादृच्छिक वैक्टर लगभग ऑर्थोगोनल हैं और इस प्रकार इसका उपयोग नए आधार के रूप में भी किया जा सकता है।

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

वहाँ भी कुछ इसी तरह के एल्गोरिथ्म रैंडम SVD कहा जाता है । मुझे इसके साथ कोई वास्तविक अनुभव नहीं है, लेकिन आप यहां स्पष्टीकरण के साथ उदाहरण कोड पा सकते हैं ।


नीचे की रेखा के रूप में, बड़े डेटासेट की आयामीता में कमी के लिए यहां एक छोटी जांच सूची है:

  1. यदि आपके पास कई आयाम (चर) नहीं हैं, तो बस ऑनलाइन लर्निंग एल्गोरिदम का उपयोग करें।
  2. यदि कई अवलोकन हैं, लेकिन एक मध्यम संख्या में चर (सहसंयोजक मैट्रिक्स स्मृति में फिट बैठता है), मैट्रिक्स को आकस्मिक रूप से निर्माण करते हैं और सामान्य एसवीडी का उपयोग करते हैं।
  3. यदि चर की संख्या बहुत अधिक है, तो वृद्धिशील एल्गोरिदम का उपयोग करें।

3
कुल मिलाकर, मुझे आपका जवाब पसंद है लेकिन शुरुआती वाक्य बिल्कुल सही नहीं है। पीसीए कम विचरण के साथ कई आयामों के लिए अनुकूल नहीं है; बल्कि, यह सहसंबंधित विचरण के साथ कई आयामों के लिए अनुकूल है । किसी दिए गए डेटा सेट के लिए, विचरण सभी आयामों में उच्च हो सकता है लेकिन जब तक उच्च सहसंयोजक होता है, तब पीसीए अभी भी महत्वपूर्ण आयामी कमी ला सकता है ।
बोगट्रॉन

1
@bogatron: अच्छी पकड़, धन्यवाद। वास्तव में, मैं कुछ आयामों में उच्च / निम्न विचरण का उल्लेख कर रहा था , संभवतः मूल नहीं। उदाहरण के लिए इस चित्र में इन आयामों को 2 तीरों द्वारा परिभाषित किया गया है, मूल x / y कुल्हाड़ियों को नहीं। पीसीए इन नई कुल्हाड़ियों को ढूंढना चाहता है और प्रत्येक अक्ष पर विचरण के मूल्य के आधार पर उन्हें क्रमबद्ध करता है। वैसे भी, जैसा कि आपने बताया, यह एक बुरा शब्द था, इसलिए मैंने अपने विचार को सुधारने की कोशिश की। उम्मीद है, अब यह अधिक स्पष्ट है।
मित्र

मेरे लिए उसका मतलब बनता है। +1।
बोगट्रॉन

7

परेशान मत करो।

प्रोग्रामिंग का पहला नियम- जो डेटा साइंस पर भी लागू होता है: एक छोटी परीक्षण समस्या पर काम करने वाला सब कुछ प्राप्त करें।

इसलिए 100,000 पंक्तियों के अपने डेटा का एक यादृच्छिक नमूना लें। एक बार अलग-अलग एल्गोरिदम आदि आज़माएं, जब आपको अपनी संतुष्टि के लिए सब कुछ मिल गया है, तो आप बड़े (और बड़े) डेटा सेट आज़मा सकते हैं - और देखें कि जब आप अधिक डेटा जोड़ते हैं तो परीक्षण त्रुटि कैसे कम हो जाती है।

इसके अलावा आप svd को केवल 8 कॉलम पर लागू नहीं करना चाहते हैं: आप इसे तब लागू करते हैं जब आपके पास बहुत सारे कॉलम होते हैं।


1
+1 के लिए आप svd को केवल 8 कॉलम पर लागू नहीं करना चाहते हैं: आप इसे तब लागू करते हैं जब आपके पास बहुत सारे कॉलम होते हैं।
एस। कोलासा - मोनिका

6

पीसीए आमतौर पर covariance मैट्रिक्स पर SVD की गणना करके कार्यान्वित किया जाता है।

कोवरियन मैट्रिक्स की गणना करना एक शर्मनाक समानांतर कार्य है, इसलिए यह रिकॉर्ड की संख्या के साथ रैखिक को मापता है , और कई मशीनों पर वितरित करने के लिए तुच्छ है!

साधनों की गणना करने के लिए बस अपने डेटा पर एक पास करें। फिर सहसंयोजक मैट्रिक्स की गणना करने के लिए एक दूसरा पास। यह आसानी से मानचित्र को कम करने के साथ किया जा सकता है - अनिवार्य रूप से यह फिर से साधनों की गणना करने के समान है। सहसंयोजक के रूप में सम शब्दों को समानांतर करने के लिए तुच्छ हैं! जब आप समान परिमाण के बहुत सारे मूल्यों को जोड़ते हैं तो आपको केवल संख्या विज्ञान पर ध्यान देने की आवश्यकता हो सकती है।

जब आपके पास बड़ी संख्या में चर होते हैं तो चीजें अलग हो जाती हैं । लेकिन 8 जीबी सिस्टम पर, आपको BLAS पुस्तकालयों के साथ मेमोरी में 20.000 तक के पीसीए को चलाने में सक्षम होना चाहिए। लेकिन तब आप इस समस्या में दौड़ सकते हैं कि पीसीए अब बिल्कुल भी विश्वसनीय नहीं है, क्योंकि इसमें बहुत अधिक स्वतंत्रता है। दूसरे शब्दों में: यह आसानी से ओवरफिट हो जाता है। मैंने कम से कम 10 * d * d रिकॉर्ड रखने की सिफारिश देखी है (या यह d ^ 3 था)। तो 10000 आयामों के लिए, आपके पास कम से कम एक अरब रिकॉर्ड होना चाहिए (10000 आयामों का ... जो कि बहुत कुछ है!) परिणाम के लिए सांख्यिकीय विश्वसनीय होना चाहिए।


1

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


1

हमने SVD को PySpark के उपयोग से बड़े डेटा सेट पर लागू किया। हमने विभिन्न पैकेजों में निरंतरता की तुलना भी की। यहाँ लिंक है।


0

यदि आप आलसी फ़ाइल का मूल्यांकन करते हैं तो आपके पास एक मिनीस्कूल मेमोरी फ़ुटप्रिंट होगा, और जब आप ऑक्टेव / मैटलैब के सभी उपकरणों तक पहुँच प्राप्त करेंगे, तब आप अजगर का मूल्यांकन करेंगे।

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