0

嗨,当在 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

对其他错误分类的标签进行整理并完成。

4

2 回答 2

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和列c告诉您来自类r被归类为类c的数据点的数量。

也就是说,对元素是正确分类的元素,而非对元素是错误分类的元素。

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

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

于 2012-07-20T17:23:33.713 回答
0

除非您要对非常庞大的数据集进行分类,否则一个简单的 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
于 2012-07-20T17:24:44.697 回答