2011-05-07 31 views
0

我跑Matlab的 - 錯誤與線性判別分析

Y_testing_obtained = classify(X_testing, X_training, Y_training); 

,我得到的錯誤是

Error using ==> classify at 246 
The pooled covariance matrix of TRAINING must be positive definite. 

X_training爲1550×5矩陣。你能告訴我這個錯誤是什麼意思,即爲什麼出現,以及如何解決它? 感謝

+0

也提及其他變量的維數。 X_testing,X_training需要有相同的列數,X_training,Y_training需要有相同的行數。 – 2011-05-07 22:48:49

+0

分類根據您提供的值創建協方差矩陣。關鍵是X_training和Y_training,並且必須正確設置。 X_training構建協方差矩陣,因此在擔心X_testing之前確保它是正確的。 – Rasman 2011-05-08 19:39:28

+0

如果您的培訓數據矩陣中有NaN值,它可能會產生肯定的錯誤 – BGreene 2012-10-19 09:07:08

回答

4

說明:當您運行功能classify不指定判別函數的類型(像你一樣),MATLAB的使用線性判別分析(LDA)。在不涉及LDA的太多細節的情況下,算法需要計算X_testing的協方差矩陣以解決優化問題,並且該矩陣必須是正定的(參見Wikipedia: Positive-definite matrix)。潛在的假設是您的數據由多變量概率分佈表示,它總是具有正定協方差矩陣,除非一個或多個變量是其他變量的精確線性組合。

要解決您的問題:您的一個變量可能是其他變量的線性組合。您可以嘗試選擇一個合理的變量子集,或對訓練數據執行主成分分析(PCA),然後使用前幾個主成分進行分類。或者,你可以指定判別函數的類型,並選擇兩個樸素貝葉斯分類器之一,例如:

Y_testing_obtained = classify(X_testing, X_training, Y_training, 'diaglinear'); 

作爲一個側面說明,你還需要有比變量(列)更多的觀測(行) ,但在你的情況下,這不是問題,因爲你似乎有1550個觀察值和5個變量。

最後,您還可以看看發佈到Matlab forum上類似問題的答案。

+0

謝謝!剛開始學習分類和'直線'解決了我的問題,非常讚賞的解釋! – Austin 2014-09-16 18:32:38

0

嘗試在Matlab中使用cvshrink函數規則化數據