我跑
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矩阵.你能告诉我这个错误意味着什么,即为什么会出现,以及如何解决它?谢谢
说明:当您运行函数classify而未指定判别函数的类型时(如您所做),Matlab使用线性判别分析(LDA).在没有深入了解LDA的情况下,算法需要计算协方差矩阵X_testing以求解优化问题,并且该矩阵必须是正定的(参见维基百科:正定矩阵).基本假设是您的数据由多变量概率分布表示,除非一个或多个变量是其他变量的精确线性组合,否则它总是具有正定的协方差矩阵.
解决您的问题:您的某个变量可能是其他变量的线性组合.您可以尝试选择变量的合理子集,或对训练数据执行主成分分析(PCA),然后使用前几个主要成分进行分类.或者,您可以指定判别函数的类型,并选择两个朴素贝叶斯分类器中的一个,例如:
Y_testing_obtained = classify(X_testing, X_training, Y_training, 'diaglinear');
作为旁注,你还需要有更多的观察(行)而不是变量(列),但在你的情况下,这不是问题,因为你似乎有1550个观察值和5个变量.
最后,您还可以在Matlab论坛上查看发布到类似问题的答案.
| 归档时间: | 
 | 
| 查看次数: | 3440 次 | 
| 最近记录: |