पाइथन का स्किट-लर्न एलडीए सही ढंग से काम क्यों नहीं कर रहा है और यह एसवीडी के माध्यम से एलडीए की गणना कैसे करता है?


26

मैं scikit-learnमशीन लर्निंग लाइब्रेरी (Python) से रैखिक डिस्क्रिमिनेटर एनालिसिस (LDA) का उपयोग आयामी कमी के लिए कर रहा था और परिणामों के बारे में थोड़ा उत्सुक था। मैं अब सोच रहा हूं कि एलडीए क्या scikit-learnकर रहा है ताकि परिणाम अलग दिखें, उदाहरण के लिए, आर में किया गया एक मैनुअल अप्रोच या एलडीए। अगर कोई मुझे यहां कुछ जानकारी दे सके तो बहुत अच्छा होगा।

मूल रूप से जो सबसे अधिक चिंतित है वह यह है कि scikit-plotदो चर के बीच एक संबंध दर्शाता है जहां एक सहसंबंध होना चाहिए 0।

एक परीक्षण के लिए, मैंने आइरिस डेटासेट का उपयोग किया और पहले 2 रेखीय विभेदकों को इस तरह देखा:

आईएमजी-1। LDA scikit-learn के माध्यम से

यहाँ छवि विवरण दर्ज करें

यह मूल रूप से मैं scikit-learn प्रलेखन में पाए गए परिणामों के अनुरूप है।

अब, मैं कदम से एलडीए कदम के माध्यम से चला गया और एक अलग प्रक्षेपण मिला। मैंने यह जानने के लिए विभिन्न तरीकों की कोशिश की कि क्या हो रहा था:

आईएमजी-2। कच्चे डेटा पर एलडीए (कोई केंद्र नहीं, कोई मानकीकरण नहीं)

यहाँ छवि विवरण दर्ज करें

और अगर मैं पहले मानकीकृत (z- स्कोर सामान्यीकरण; इकाई विचरण) डेटा पहले चरण-दर-चरण दृष्टिकोण होगा। मैंने केवल मीन-सेंटरिंग के साथ एक ही काम किया, जो एक ही सापेक्ष प्रक्षेपण छवि (और जो वास्तव में किया था) के लिए नेतृत्व करना चाहिए।

आईएमजी-3। मीन-सेंटरिंग, या मानकीकरण के बाद चरण-दर-चरण LDA

यहाँ छवि विवरण दर्ज करें

आईएमजी-4। LDA R में (डिफ़ॉल्ट सेटिंग्स)

IMG-3 में LDA, जहां मैं डेटा केंद्रित करता हूं (जो कि पसंदीदा तरीका होगा) ठीक उसी तरह दिखता है, जैसा कि मैंने पोस्ट में किसी ऐसे व्यक्ति से पाया था जिसने एल में आर किया था। यहाँ छवि विवरण दर्ज करें


संदर्भ के लिए कोड

मैं यहां सभी कोड पेस्ट नहीं करना चाहता था, लेकिन मैंने इसे IPython नोटबुक के रूप में अपलोड किया है, जो कि एलडीए प्रोजेक्शन के लिए मेरे द्वारा उपयोग किए गए (नीचे देखें) कई चरणों में टूट गया है।

  1. चरण 1: डी-डायमेंशनल वैक्टर m i = 1 की गणना करना
    mi=1nixDinxk
  2. चरण 2: स्कैटर मैट्रिसेस का कम्प्यूटिंग

    2.1 भीतर स्तरीय बिखराव मैट्रिक्स निम्नलिखित समीकरण द्वारा गणना की जाती है: एस डब्ल्यू = Σ मैं = 1 एस मैं = Σ मैं = 1 n Σ एक्सडी मैंSW

    SW=i=1cSi=i=1cxDin(xmi)(xmi)T

    2.2 के बीच स्तरीय बिखराव मैट्रिक्स निम्नलिखित समीकरण द्वारा गणना की जाती है: एस बी = सी Σ मैं = 1 n मैं ( मीटर मैं - मीटर ) ( मीटर मैं -SB

    SB=i=1cni(mim)(mim)T
    m
  3. चरण 3. मैट्रिक्स लिए सामान्यीकृत आइगेनवेल्यू समस्या का समाधान करनाSW1SB

    3.1। आईजेनवैक्टरों को सॉर्ट करके ईजेनवेल्यूज घटाना

    3.2। सबसे बड़े eigenvalues ​​के साथ k eigenvectors चुनना । दो eigenvectors को उच्चतम digenvalues ​​के साथ जोड़कर हमारे का निर्माण करते हैंd×kW

  4. y=WT×x.

मैं मतभेदों को देखने के लिए नहीं गया हूं, लेकिन आप वास्तव में देख सकते हैं कि स्रोत में क्या सीखा जा रहा है
डगल

ऐसा लगता है कि वे भी मानकीकरण कर रहे हैं (केंद्र और फिर मानक विचलन द्वारा विभाजन के माध्यम से स्केलिंग)। यह, मैं अपने 3rd प्लॉट (और R) प्लॉट में एक के समान परिणाम की उम्मीद करूंगा ... hmm

अजीब: जो भूखंड आपको प्राप्त हुआ है (और जो वे अपने दस्तावेज में दिखाते हैं) से कोई मतलब नहीं है। LDA हमेशा ऐसे अनुमान लगाता है जिनमें सहसंबंध शून्य होता है, लेकिन जाहिर है कि भेदभावपूर्ण कुल्हाड़ियों 1 और 2 पर scikit के अनुमानों के बीच बहुत मजबूत संबंध है। कुछ स्पष्ट रूप से वहां गलत है।
अमीबा का कहना है कि

@ योबा हां, मुझे भी ऐसा लगता है। यह भी अजीब है कि मैं जिस भूखंड को दिखा रहा हूं, वह उदाहरण दस्तावेजीकरण में है: scikit-learn.org/stable/auto_examples/decomposition/… इससे मुझे लगता है कि मेरे द्वारा उपयोग किए गए स्कोर सही हैं, लेकिन यह कुछ अजीब है LDA फंक्शन के बारे में

@ सेबेस्टियनरास्का: हाँ, मैंने देखा। यह वास्तव में अजीब है। हालांकि, ध्यान दें कि आपके स्वयं के (गैर-गैर-कानूनी) एलडीए भूखंडों में से पहला भी गैर-शून्य सहसंबंध दिखाता है और इसलिए इसके साथ भी कुछ गलत होना चाहिए। क्या आपने डेटा को केंद्र में रखा? दूसरी धुरी पर प्रोजेक्शन का शून्य मतलब नहीं लगता है।
अमीबा का कहना है कि मोनिका

जवाबों:


20

अद्यतन: इस चर्चा के लिए धन्यवाद, scikit-learnअद्यतन किया गया था और अब ठीक से काम करता है। इसका एलडीए स्रोत कोड यहां पाया जा सकता है । मूल मुद्दा एक मामूली बग के कारण था ( यह गीथब चर्चा देखें ) और मेरा जवाब वास्तव में इसे सही ढंग से इंगित नहीं कर रहा था (किसी भी भ्रम के कारण माफी)। चूंकि यह सब अब कोई मायने नहीं रखता (बग तय हो गया है), मैंने अपना उत्तर इस बात पर केंद्रित करने के लिए संपादित किया कि कैसे एसवीडी के माध्यम से एलडीए को हल किया जा सकता है, जो कि डिफ़ॉल्ट एल्गोरिथ्म है scikit-learn


ΣWΣBΣW1ΣB के रूप में विभेदक कुल्हाड़ियों ( यहाँ उदाहरण देखने )। हालांकि, एक ही कुल्हाड़ियों की गणना कुछ अलग तरीके से की जा सकती है, एक सफेद मैट्रिक्स का शोषण:

  1. ΣW1/2 । यह वर्ग-वर्ग सह-प्रसार के संबंध में एक श्वेत परिवर्तन है (विवरण के लिए मेरा जुड़ा हुआ उत्तर देखें)।

    ΣW=USUΣW1/2=US1/2UXW=ULVΣW1/2=UL1U

  2. ΣW1/2ΣBΣW1/2A

    XBΣW1/2 , यानी के बीच श्रेणी के डेटा के भीतर स्तरीय सहप्रसरण के संबंध में सफेद।

  3. AΣW1/2A तब्दील डेटा के प्रमुख कुल्हाड़ियों, द्वारा, यानी फिर से बदल दिया

    a

    ΣW1/2ΣBΣW1/2a=λa,
    ΣW1/2a=ΣW1/2a
    ΣW1ΣBa=λa.

सारांश में, LDA वर्ग के मैट्रिक्स को सफेद करने के बराबर है, जो कक्षा के भीतर के सह-संबंध के संबंध में है, वर्ग के साधनों पर PCA कर रहा है, और परिणामी मूल अक्षों को मूल (unwhitened) स्थान में परिवर्तित कर रहा है।

यह बताया गया है जैसे कि सांख्यिकीय तत्वों के तत्व , खंड 4.3.3। इसमें scikit-learnLDA की गणना करने का डिफ़ॉल्ट तरीका है क्योंकि एक डेटा मैट्रिक्स का SVD संख्यात्मक रूप से अपने सहसंयोजक मैट्रिक्स के ईजन-अपघटन की तुलना में अधिक स्थिर है।

ΣW1/2scikit-learn L1UUL1U


1
इस अच्छे उत्तर के लिए धन्यवाद। मैं इसकी सराहना करता हूं कि आपने इसे अच्छी तरह से लिखने के लिए समय लिया। शायद आप GitHub पर चर्चा में इसका उल्लेख कर सकते हैं; मुझे यकीन है कि विज्ञान किट के अगले संस्करण में एलडीए को ठीक करने के लिए मदद मिलेगी

@ सेबैस्टियनरास्का: मेरा गीथहब पर खाता नहीं है। लेकिन अगर आप चाहें, तो आप इस धागे का लिंक दे सकते हैं।
अमीबा का कहना है कि

ΣW1ΣBΣW1

संदर्भ के लिए, यहां उन कार्यान्वयनों के बारे में बात कर रहा हूं जिनके बारे में मैं बात कर रहा था: sourceforge.net/p/mlpy/code/ci/default/tree/mlpy/da.py#l24 github.com/sccn/BCILAB/blob-master/code/machine_learning / ... mathworks.com/matlabcentral/fileexchange/...
kazemakase

2
ΣबीΣडब्ल्यू-1Σबी द्वारा दिया गया है Σडब्ल्यू-1(μ1-μ2), कहा पे μमैंकक्षा के साधन हैं। मुझे लगता है कि आप पहले क्या मतलब है? यह बिशप की एमएल पाठ्यपुस्तक, अनुभाग 4.1.4 में उदाहरण के लिए अच्छी तरह से कवर किया गया है। लेकिन अधिक वर्गों के सामान्यीकरण के लिए ईजन-विश्लेषण (आईबिड।, 4.1.6) की आवश्यकता होती है। इसके अलावा, scikit का कोड (जो हम यहां चर्चा कर रहे हैं!) Svd का उपयोग करता है , दो बार वास्तव में।
अमीबा का कहना है कि मोनिका

3

बस इस प्रश्न को बंद करने के लिए, एलडीए के साथ चर्चा की गई समस्या को scikit-learn 0.15.2 में तय किया गया है ।

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