贝叶斯分类器

时间:2012-11-12 21:29:53

标签: matlab classification bayesian

在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, :)

1 个答案:

答案 0 :(得分:2)

这是一个老问题,但也许从谷歌到这里的人仍然可以从答案中受益。我没有将Naive Bayes与Matlab一起使用,但在其他环境中有经验并撰写了ruby nbayes gem。你在这里至少有几个问题,所以让我们打开它们。

过度拟合和准确性。不要购买炒作 - 朴素贝叶斯绝对容易过度拟合,因此在测量分类器的有效性时,请确保使用交叉验证。我发现良好的特征选择(例如,删除无用的术语/令牌)通常会提高准确性,也有助于减少过度拟合。而且,当然,更多的数据永远不会受到伤害(但如果你已经拥有很多数据,则可能无济于事。)

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

有关详细信息,我强烈推荐斯坦福大学IR书的摘录: http://nlp.stanford.edu/IR-book/html/htmledition/naive-bayes-text-classification-1.html