2012-07-20 88 views
0

嗨,當在matlab中使用分類器(樸素貝葉斯)有沒有一種方法,您可以在其中比較分類標籤和原始標籤?比較標籤matlab

例如拍攝下面的圖片,我手動不得不通過每一行,並檢查哪一個它正確分類,哪一個它沒有。

enter image description here

我希望像分類550藍精靈列表missclassified 50,然後將其輸出與錯誤分類的那些行的IDX另一個文件。

它可能是什麼樣子

 Corrrectly Classified | Missclassified 

Smruf  550      50 
Neptune  100      80 
and so on... 

然後誤判爲Smruf

藍精靈指數missclassified(行索引)

4896 
456 
12789 
12 
456 

Rince和完整其他錯誤分類快速表標籤。

回答

4

您在尋找confusionmat的功能。我們來生成一些示例數據。

>> y = [repmat(1,100,1); repmat(2,100,1); repmat(3,100,1)]; 

和 「分類」,它

>> yhat = randsample(y,300); # randomly shuffle the inputs to 'classify' them 

現在你罵confusionmat

>> [c order] = confusionmat(y,yhat) 
ans = 
    37 35 28 
    30 32 38 
    33 33 34 

解釋此表的方式是該行[R和列ç告訴你來自類別的數據點的數量r即c分類爲c

即,對角線元素是正確分類的那些,和非對角元素被錯誤地分類。

變量c包含此矩陣。變量order包含您的類的名稱,順序與它們在混淆矩陣中出現的順序相同(即您可以將它們解釋爲列標題)。

在我的例子中,我隨機分類點,這就是爲什麼我有這麼多的錯誤分類的例子。

+0

嘿克里斯我已經使用混淆矩陣,但它的可怕,在我的問題是更容易閱讀和理解,混淆矩陣需要一本書來學習如何解釋。 – 2012-07-20 23:25:28

+0

只需編寫一個將混淆矩陣轉換爲所需表單的實用程序函數即可。那麼你只需要解釋它一次(而解釋並不那麼困難)。如果'c'是你的混淆矩陣,那麼'N = size(c,1);對於i = 1:N;正確的(ⅰ)= C(I,I);不正確的(ⅰ)=總和(C,2)-correct(ⅰ);最終'應該做的伎倆。 – 2012-07-20 23:37:42

0

除非你正在分類非常龐大的數據集,否則一個簡單的for-loop應該沒問題。

num_correct = 0; 
num_wrong = 0; 
for i=1:length(target_class) 
    if isequal(taget_class{i}, class{i}) 
     num_correct = num_correct + 1; 
    else 
     num_wrong = num_wrong + 1; 
    end 
end 
+0

嘿艾薩克多數民衆贊成在相當優雅,但如何確定索引? – 2012-07-20 23:26:37

+0

你可以直接拋出'indices [count] = i; count = count + 1;'到您關心的if語句中。 – Isaac 2012-07-20 23:31:44