2014-11-16 14 views
7

जब मैं झील प्राधिकरण के साथ काम करने से Scikit-जानें, यह केवल मुझे, एक घटक देने रहता है, भले ही मैं और अधिक के लिए पूछ रहा हूँ कोशिश कर रहा हूँ:एलडीए n_components को अनदेखा कर रहा है?

>>> from sklearn.lda import LDA 
>>> x = np.random.randn(5,5) 
>>> y = [True, False, True, False, True] 
>>> for i in range(1,6): 
...  lda = LDA(n_components=i) 
...  model = lda.fit(x,y) 
...  model.transform(x) 

देता

/Users/orthogonal/virtualenvs/osxml/lib/python2.7/site-packages/sklearn/lda.py:161: UserWarning: Variables are collinear 
    warnings.warn("Variables are collinear") 
array([[-0.12635305], 
     [-1.09293574], 
     [ 1.83978459], 
     [-0.37521856], 
     [-0.24527725]]) 
array([[-0.12635305], 
     [-1.09293574], 
     [ 1.83978459], 
     [-0.37521856], 
     [-0.24527725]]) 
array([[-0.12635305], 
     [-1.09293574], 
     [ 1.83978459], 
     [-0.37521856], 
     [-0.24527725]]) 
array([[-0.12635305], 
     [-1.09293574], 
     [ 1.83978459], 
     [-0.37521856], 
     [-0.24527725]]) 
array([[-0.12635305], 
     [-1.09293574], 
     [ 1.83978459], 
     [-0.37521856], 
     [-0.24527725]]) 

आप देख सकते हैं , यह केवल हर बार एक आयाम छाप रहा है। ऐसा क्यों है? क्या कॉललाइनर के चर के साथ इसका कोई संबंध नहीं है?

इसके अतिरिक्त, जब मैं साइकिट-लर्न के पीसीए के साथ ऐसा करता हूं, तो यह मुझे वह देता है जो मैं चाहता हूं।

>>> from sklearn.decomposition import PCA 
>>> for i in range(1,6): 
...  pca = PCA(n_components=i) 
...  model = pca.fit(x) 
...  model.transform(x) 
... 
array([[ 0.83688322], 
     [ 0.79565477], 
     [-2.4373344 ], 
     [ 0.72500848], 
     [ 0.07978792]]) 
array([[ 0.83688322, -1.56459039], 
     [ 0.79565477, 0.84710518], 
     [-2.4373344 , -0.35548589], 
     [ 0.72500848, -0.49079647], 
     [ 0.07978792, 1.56376757]]) 
array([[ 0.83688322, -1.56459039, -0.3353066 ], 
     [ 0.79565477, 0.84710518, -1.21454498], 
     [-2.4373344 , -0.35548589, -0.16684946], 
     [ 0.72500848, -0.49079647, 1.09006296], 
     [ 0.07978792, 1.56376757, 0.62663807]]) 
array([[ 0.83688322, -1.56459039, -0.3353066 , 0.22196922], 
     [ 0.79565477, 0.84710518, -1.21454498, -0.15961993], 
     [-2.4373344 , -0.35548589, -0.16684946, -0.04114339], 
     [ 0.72500848, -0.49079647, 1.09006296, -0.2438673 ], 
     [ 0.07978792, 1.56376757, 0.62663807, 0.2226614 ]]) 
array([[ 8.36883220e-01, -1.56459039e+00, -3.35306597e-01, 
      2.21969223e-01, -1.66533454e-16], 
     [ 7.95654771e-01, 8.47105182e-01, -1.21454498e+00, 
     -1.59619933e-01, 3.33066907e-16], 
     [ -2.43733440e+00, -3.55485895e-01, -1.66849458e-01, 
     -4.11433949e-02, 0.00000000e+00], 
     [ 7.25008484e-01, -4.90796471e-01, 1.09006296e+00, 
     -2.43867297e-01, -1.38777878e-16], 
     [ 7.97879229e-02, 1.56376757e+00, 6.26638070e-01, 
      2.22661402e-01, 2.22044605e-16]]) 
+0

क्या आप पोस्ट कर सकते हैं कि आपका प्रिंटिंग सब कुछ कैसे? – pyCthon

+1

यह सिर्फ पायथन दुभाषिया में है, इसलिए model.transform (x) जो आप देखते हैं उसे आउटपुट करेगा। –

+0

आह ठीक है तो – pyCthon

उत्तर

10

ThisLDA.transform के संगत, आयाम को कम करने लाइन, यह scalings_ का उपयोग करता है। जैसा कि docstring में वर्णित है, scalings_ में अधिकतम n_classes - 1 कॉलम हैं। यह तब अधिकतम स्तंभों की संख्या है जिन्हें आप transform का उपयोग करके प्राप्त करने की उम्मीद कर सकते हैं। आपके मामले में, 2 वर्ग (True, False), अधिकतम 1 कॉलम पैदा करता है।

+0

मुझे समझ में नहीं आता है। मैं 5 से 4 आयामों से अपने डेटा को कम करने के लिए एलडीए कैसे प्राप्त कर सकता हूं? –

+1

आप (कम से कम सामान्य वेनिला एलडीए के साथ नहीं) कर सकते हैं। [मल्टीक्लास lda पर विकिपीडिया प्रविष्टि] देखें (http://en.wikipedia.org/wiki/Linear_discriminant_analysis#Multiclass_LDA)। क्लास वेरिएंस के बीच/कैप्चर करने के लिए बनाया गया मैट्रिक्स अधिकांश 'n_classes - 1' पर रैंक का है, इस प्रकार केवल 'n_classes - 1' दिशानिर्देशों को प्राप्त करता है जो किसी भिन्नता को कैप्चर करते हैं। 2 वर्गों के लिए यह वास्तव में 1 भेदभाव वाले वेक्टर तक कम हो जाता है। – eickenberg

+0

हमम, ठीक है ... कहीं भी जहां मैं विशेष रूप से वर्णन कर रहा हूं, इसके बारे में और जान सकता हूं, यानी यह वास्तव में स्पष्ट रूप से और विस्तार से बताता है? –

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