【问题标题】:compare labels matlab比较标签matlab
【发布时间】:2012-07-20 00:13:05
【问题描述】:

您好,在 matlab(朴素贝叶斯)中使用分类器时,有没有一种方法可以将分类标签与原始标签进行比较?

例如下面的图像,我必须手动检查每一行并检查哪个分类正确,哪个没有分类。

我希望有一个像 Classified 550 smurf misclassified 50 这样的列表,然后它输出另一个文件,其中这些行的 idx 被错误分类。

它可能是什么样子的快速表格

       Corrrectly Classified  |  Missclassified

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

然后索引被错误分类为 Smruf

Smurf 错误分类(行索引)

4896 
456
12789
12
456

对其他分类错误的标签进行完善。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    您正在寻找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 和列 c 告诉你分类 r 类的数据点的数量作为类c

    diagonal元素分类正确,nondiagonal元素分类错误。

    变量c 包含这个矩阵。变量 order 包含您的类的名称,其顺序与它们在混淆矩阵中出现的顺序相同(即您可以将它们解释为列标题)。

    在我的示例中,我对点进行了随机分类,这就是为什么我有这么多错误分类的示例。

    【讨论】:

    • 嘿,克里斯,我已经使用了混淆矩阵,但它很可怕,在我的问题中它更容易阅读和理解,混淆矩阵需要一本书来学习如何解释。
    • 只需编写一个实用函数,将混淆矩阵转换为您想要的形式。然后你只需要解释一次(而且解释并不难)。如果c 是您的混淆矩阵,那么像N=size(c,1); for i=1:N; correct(i)=c(i,i); incorrect(i)=sum(c,2)-correct(i); end 这样的东西应该可以解决问题。
    【解决方案2】:

    除非您要对非常庞大的数据集进行分类,否则简单的 for 循环应该没问题。

    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
    

    【讨论】:

    • 嘿 Isaac,这很优雅,但是确定索引呢?
    • 您可以将indices[count] = i; count = count + 1; 放入您关心的if 语句中。
    猜你喜欢
    • 2020-07-21
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多