比较标签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的主要内容,如果未能解决你的问题,请参考以下文章