比较标签matlab

Posted

技术标签:

【中文标题】比较标签matlab【英文标题】:compare labels 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

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

【问题讨论】:

【参考方案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_classi, classi)
        num_correct = num_correct + 1;
    else
        num_wrong = num_wrong + 1;
    end
end

【讨论】:

嘿 Isaac,这很优雅,但是确定索引呢? 您可以将indices[count] = i; count = count + 1; 放入您关心的if 语句中。

以上是关于比较标签matlab的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB从入门到精通-MATLAB2021版类似excel的坐标轴标签自动缩放布局

MATLAB图中轴标签和轴之间的距离

如何将集群标签与 Matlab 中的“基本事实”标签匹配

matlab - 在原点设置刻度标签

Matlab:减少图例中符号和标签之间的间距

如何在 Matlab 中为 XTicks 的不完整标签设置非零符号?