2015-06-10 60 views
1

我有一個代碼,我用它運行使用sklearn.lda模塊的LDA(線性判別分析)類。現在它給出了下面的錯誤。最近我更新了sklearn軟件包,我認爲這可能是由此引起的。但是,我仍然不明白問題是什麼。你能告訴我把1和-1作爲標籤有什麼問題嗎?據我所知,問題與我的標籤有關。sklearn LDA獨特的標籤問題

Traceback (most recent call last): 

    File "<ipython-input-94-9935ca0189ad>", line 1, in <module> 
    lda.fit([atom.coords for atom in nm_1.atoms], nm_1.correlations[1][0]) 

    File "C:\Anaconda\lib\site-packages\sklearn\lda.py", line 415, in fit 
    self.classes_ = unique_labels(y) 

    File "C:\Anaconda\lib\site-packages\sklearn\utils\multiclass.py", line 106, in unique_labels 
    raise ValueError("Unknown label type: %r" % ys) 

ValueError: Unknown label type: array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., -1., 
     -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., 
     -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., 
     -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., 
     -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., 
     -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., 
     -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., 
     -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., 
     -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., 
     -1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., -1., -1., -1., -1., -1., 
     -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., 
     -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., 
     -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., 
     -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., 
     -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., 
     -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., 
     -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.]) 
+0

你傳遞了​​一個數組數組或數組列表作爲y嗎? –

+1

是的,它是一個數組,我想我解決了這個問題。我認爲這可能與float類型有關。我把它變成了一個整數數組,現在它似乎運行良好。我寫了'lda.fit(atom_coords,correlations.astype(int))',我再也沒有遇到錯誤。 – zamk

回答

0

的問題是不是1/-1的標籤,如sklearn.lda甚至串標記效果很好:

>>>import numpy as np 
>>>from sklearn.lda import LDA 
>>>X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]) 
>>>y = np.array([1, 1, 1, "y","y","y"]) 
>>>clf = LDA() 
>>>clf.fit(X, y) 
>>>(clf.predict([[-0.8, -1],[3,2]])) 
['1' 'y'] 

你可能有一個問題,標籤對象本身 - 你確定它是一個數組?

+0

@zamk如果你發現問題請更新\回答你自己的帖子 – omerbp