0

matlabでベイジアン分類器を使用する場合、過適合や不正確さを避ける最善の方法は何ですか?

現在、750 が「正常」で 250 が「異常」(1 つの特定の種類) のトレーニング データに 1000 サンプルを使用しています。

分類器をトレーニングするのに適切なパーセンテージを見つけた人はいますか、それとも各問題には特定の量のトレーニング データが必要ですか。私は後者だと思いますが、どのように精度を改善できるか、どのような方法を使用できるかを理解するのに苦労しています。どんな例でも感謝します。

以下は、私が現在使用しているものの例です。

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

1 に答える 1

2

これは古い質問ですが、Google からここに来た人は、まだ回答から恩恵を受けることができるかもしれません. 私は Naive Bayes を Matlab で使用したことはありませんが、他の環境での経験があり、ruby nbayes gemを作成しました。ここには少なくともいくつかの質問があるので、それらを展開しましょう。

過剰適合と精度。 誇大宣伝を買わないでください -- Naive Bayes は間違いなくオーバーフィッティングを起こしやすいので、分類器の有効性を測定するときは必ず相互検証を使用してください。適切な機能の選択 (たとえば、役に立たない用語/トークンの削除) は、通常、精度を高め、過剰適合を減らすのにも役立つことがわかりました。もちろん、データが増えても問題はありません (ただし、既に大量のデータがある場合は役に立たない場合があります)。

クラスの不均衡の問題。 新しいインスタンスを「正常」または「異常」に分類しようとしているようです。一般に、クラスのバランスは、現実世界に存在するもの (モデル化しているもの) と一致させる必要があります。そうしないことを選択した場合は、おそらく異常なインスタンスが少なすぎるため、クラスの事前分布を実際の値に手動で設定してください。

詳細については、スタンフォード IR ブックからの抜粋を強くお勧めします: http://nlp.stanford.edu/IR-book/html/htmledition/naive-bayes-text-classification-1.html

于 2013-06-10T18:48:54.873 に答える