Matlab - 线性判别分析的bug

时间:2011-05-07 20:11:24

标签: matlab classification

我跑

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 x 5矩阵。你能告诉我这个错误意味着什么,即它出现的原因,以及如何解决它? 感谢

2 个答案:

答案 0 :(得分:5)

说明:当您运行函数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上发布到类似问题的答案。

答案 1 :(得分:0)

尝试使用Matlab中的cvshrink函数来规范化数据