2012-07-20 102 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