当尝试适应天真的贝耶斯时:

    training_data = sample; %
    target_class = K8;
 # train model
 nb = NaiveBayes.fit(training_data, target_class);

 # prediction
 y = nb.predict(cluster3);

我得到一个错误:
??? Error using ==> NaiveBayes.fit>gaussianFit at 535
The within-class variance in each feature of TRAINING
must be positive. The within-class variance in feature
2 5 6 in class normal. are not positive.

Error in ==> NaiveBayes.fit at 498
            obj = gaussianFit(obj, training, gindex);

有人能解释一下这件事以及如何解决它吗注意,我也读过类似的帖子,但我不知道该怎么办似乎它试图根据列而不是行进行拟合,类方差应该基于属于特定类的每一行的概率如果我删除这些列,那么它就可以工作,但显然这不是我想做的。

最佳答案

假设代码中的任何地方都没有bug(或者mathworks的NaiveBayes代码),再次假设您的训练数据是NxD形式的,其中有N个观察和D个特性,那么列2、5和6对于至少一个类是完全零的如果你有相对较小的训练数据和大量的课程,其中一个课程可以用一些观察来表示,那么这种情况就可能发生由于默认情况下NaiveBayes将所有特性视为正态分布的一部分,因此它不能处理与单个类相关的所有特性的方差为零的列换言之,NaiveBayes无法通过将正态分布拟合到特定类的特征来找到概率分布的参数(注意:分布的默认值是normal)。
看看你的特点如果它们在每个类中似乎不遵循正态分布,那么normal不是您想要使用的选项也许你的数据更接近多项式模型:

nb = NaiveBayes.fit(training_data, target_class, 'Distribution', 'mn');

08-03 14:37