Matlab 贝叶斯分类器

Matlab 贝叶斯分类器,matlab,classification,bayesian,Matlab,Classification,Bayesian,在matlab中使用贝叶斯分类器时,避免过度拟合和不准确的最佳方法是什么 目前,我正在使用1000个样本来获取训练数据,其中750个样本为“正常”,250个样本为“异常”(一种特定类型) 是否有人找到了一个很好的百分比来训练分类器,或者每个问题都需要特定数量的训练数据。我会假设后者,但我正在努力找出如何提高准确性,我可以使用什么方法。任何例子都将不胜感激 下面是我目前使用的示例: training_data = data; target_class = Book2(indX,:) class

在matlab中使用贝叶斯分类器时,避免过度拟合和不准确的最佳方法是什么

目前,我正在使用1000个样本来获取训练数据,其中750个样本为“正常”,250个样本为“异常”(一种特定类型)

是否有人找到了一个很好的百分比来训练分类器,或者每个问题都需要特定数量的训练数据。我会假设后者,但我正在努力找出如何提高准确性,我可以使用什么方法。任何例子都将不胜感激

下面是我目前使用的示例:

training_data = data;
target_class = Book2(indX,:)

class  = classify(test_data,training_data, target_class, 'diaglinear')
confusionmat(target_class,class)


% Display Results of Naive Bayes Classification
input = target_class;
% find the unique elements in the input
uniqueNames=unique(input)';
% use string comparison ignoring the case
occurrences=strcmpi(input(:,ones(1,length(uniqueNames))),uniqueNames(ones(length(input),1),:));
% count the occurences
counts=sum(occurrences,1);
%pretty printing
for i=1:length(counts)
disp([uniqueNames{i} ': ' num2str(counts(i))])
end

% output matching data
dataSample = fulldata(indX, :)

这是一个老生常谈的问题,但也许从谷歌来到这里的人仍然可以从答案中获益。我没有在Matlab中使用NaiveBayes,但有在其他环境中的经验并编写了。这里至少有几个问题,让我们把它们解开

过度拟合和准确度。不要相信炒作——朴素贝叶斯绝对容易过度拟合,因此在测量分类器的有效性时,请确保使用交叉验证。我发现,良好的功能选择(例如,删除无用的术语/标记)通常会提高准确性,并有助于减少过度拟合。当然,更多的数据不会有什么坏处(但如果你已经有了很多数据,可能也没什么帮助)

类不平衡问题。看起来您试图将新实例分类为“正常”或“异常”。通常,您希望类的平衡与现实世界中存在的(您正在建模的)相匹配。如果您选择不这样做,可能是因为异常实例太少,那么请确保手动将类上的先验分布设置为它们的实际值

要获得更详细的信息,我强烈推荐斯坦福IR图书的摘录:

嗯,是BC过度装配吗?我建议您选择合适的先验知识,BCs的一个优势是他们对过度装配的抵抗力。我建议您在增加用于培训的样本百分比时,绘制验证错误。根据经验,该函数的最小值应能为您提供一个合理准确的估计值,即您开始拟合噪声的点。我不确定您如何使用标准分类器在matlab中选择先验值。当您说“绘制验证错误”时,确切地说,这是如何完成的?嗯,我现在不在我的matlab机器附近,但看看这是否有帮助-其中一个“重载”允许您指定先前的: