मैं बीजगणितीय / सटीक स्तर पर प्रधान घटक विश्लेषण और एकवचन मूल्य अपघटन के बीच के संबंध को समझता हूं। मेरा प्रश्न स्कोर-लर्न कार्यान्वयन के बारे में है ।
प्रलेखन कहता है: " [ट्रंचकेटेडएसवीडी] पीसीए के समान है, लेकिन एक कोवरियन मैट्रिक्स के बजाय सीधे नमूना वैक्टर पर संचालित होता है। ", जो दोनों दृष्टिकोणों के बीच बीजीय अंतर को दर्शाएगा। हालाँकि, यह बाद में कहता है: " यह अनुमानक [TruncatedSVD] दो एल्गोरिथ्म का समर्थन करता है: एक तेज यादृच्छिक एसवीडी सॉल्वर, और एक" भोला "एल्गोरिथ्म जो ARPACK का उपयोग आइगेंसोल्वर (X * XT) या (XT * X) के रूप में करता है, जो भी अधिक हो कुशल। ”। पीसीए के बारे में, यह कहता है: "यह प्रोजेक्ट करने के लिए डेटा के एकवचन मूल्य अपघटन का उपयोग करके रैखिक गतिशीलता में कमी ..."। और PCA कार्यान्वयन समान दो एल्गोरिदम (रैंडमाइज्ड और ARPACK) सॉल्वरों को एक और एक, LAPACK का समर्थन करता है। कोड में देखकर मैं देख सकता हूं कि दोनों PCA और TruncatedSVD दोनों में ARPACK और LAPACK नमूना डेटा X पर svd करते हैं, ARPACK विरल मैट्रिसेस (svds का उपयोग करके) से निपटने में सक्षम है।
इसलिए, अलग-अलग विशेषताओं और विधियों से और पीसीए इसके अलावा LAPACK, PCA और TruncatedSVD scikit-learn कार्यान्वयन का उपयोग करके सटीक पूर्ण विलक्षण मूल्य अपघटन कर सकता है जो बिल्कुल एक ही एल्गोरिथ्म लगता है। पहला सवाल: क्या यह सही है?
दूसरा सवाल: भले ही LAPACK और ARPACK उपयोग scipy.linalg.svd (एक्स) और scipy.linalg.svds (एक्स), किया जा रहा है एक्स नमूना मैट्रिक्स, वे विलक्षण मूल्य अपघटन या की eigen-अपघटन गणना या आंतरिक रूप से। जबकि "यादृच्छिक" सॉल्वर को उत्पाद की गणना करने की आवश्यकता नहीं है। (यह संख्यात्मक स्थिरता के संबंध में प्रासंगिक है, देखें कि डेटा के एसवीडी के माध्यम से डेटा का पीसीए क्यों? )। क्या ये सही है?
Xtimes()
Xt_times()