我跑
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矩阵。你能告诉我这个错误意味着什么,即它出现的原因,以及如何解决它? 感谢
答案 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函数来规范化数据