2012-11-12 59 views
0

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

嗯,一個BC過度擬合?我建議尋找正確的選擇前,BCs的力量是他們對過度配合的抵抗 –

+0

http://metaoptimize.com/qa/questions/7479/overfitting-by-bayesian-methods –

+0

我會給你一個建議當您增加用於訓練的樣本的百分比時,繪製您的驗證錯誤。該函數的最小值應該憑經驗爲您提供一個合理準確的估計值,以便開始擬合噪聲。 –

回答

2

這是一個老問題,但也許有人從谷歌抵達這裏仍然可以從答案中受益。我沒有用Matlab的樸素貝葉斯,但有其他環境的經驗,並撰寫了ruby nbayes gem。你在這裏至少有幾個問題,所以讓我們解開它們。

過度擬合和準確性。不要購買炒作 - 樸素貝葉斯絕對容易出現過度擬合,因此請確保在衡量分類器的有效性時使用交叉驗證。我發現,很好的功能選擇(例如,刪除無用的術語/標記)通常會提高準確性,並且還有助於減少過度配合。而且,當然,更多的數據永遠不會受到傷害(但是如果你已經有很多數據可能無法幫助)。

類別不平衡問題。它看起來像你試圖將新實例分類爲「正常」或「異常」。一般來說,你希望類的平衡匹配現實世界中存在的東西(你正在建模的東西)。如果您選擇不這樣做,也許是因爲異常實例太少,那麼請確保您手動將類上的先前分佈設置爲其實際值。

有關更詳細的信息,我強烈建議從斯坦福IR圖書摘錄: http://nlp.stanford.edu/IR-book/html/htmledition/naive-bayes-text-classification-1.html