当尝试拟合朴素贝叶斯时:
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);
谁能阐明这个问题以及如何解决它?请注意,我读过类似的帖子here http://www.mathworks.co.uk/matlabcentral/answers/40289但我不知道该怎么办?似乎它试图基于列而不是行进行拟合,类方差应该基于每行属于特定类的概率。如果我删除这些列,那么它会起作用,但显然这不是我想要做的。
假设您的代码(或来自 mathworks 的 NaiveBayes 代码)中没有任何错误,并再次假设您的训练数据采用 NxD 形式,其中有 N 个观察值和 D 个特征,则第 2、5 和 6 列完全为零至少一个班级。如果您的训练数据相对较小且类数量较多,其中单个类可能由一些观察值表示,则可能会发生这种情况。由于 NaiveBayes 默认将所有特征视为正态分布的一部分,因此它无法使用与单个类相关的所有特征的方差为零的列。换句话说,NaiveBayes 无法通过将正态分布拟合到特定类的特征来找到概率分布的参数(注意:分布的默认值是normal
).
看看你的特征的本质。如果它们在每个类中似乎不遵循正态分布,那么normal
不是您想要使用的选项。也许您的数据更接近多项式模型mn
:
nb = NaiveBayes.fit(training_data, target_class, 'Distribution', 'mn');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)