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矩阵。你能告诉我这个错误是什么意思,即为什么出现,以及如何解决它? 感谢
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矩阵。你能告诉我这个错误是什么意思,即为什么出现,以及如何解决它? 感谢
说明:当您运行功能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上类似问题的答案。
谢谢!刚开始学习分类和'直线'解决了我的问题,非常赞赏的解释! – Austin 2014-09-16 18:32:38
尝试在Matlab中使用cvshrink函数规则化数据
也提及其他变量的维数。 X_testing,X_training需要有相同的列数,X_training,Y_training需要有相同的行数。 – 2011-05-07 22:48:49
分类根据您提供的值创建协方差矩阵。关键是X_training和Y_training,并且必须正确设置。 X_training构建协方差矩阵,因此在担心X_testing之前确保它是正确的。 – Rasman 2011-05-08 19:39:28
如果您的培训数据矩阵中有NaN值,它可能会产生肯定的错误 – BGreene 2012-10-19 09:07:08