我知道什么是混淆矩阵。
给定N个类,我们有一个NxN矩阵M,其中 - 每一行都是其中一个类 - 每列都是其中一个类
M(X,Y)=已在X类中分类并应在Y类中分类的元素数(当然,如果X = Y,则分类正确)。
现在我有一组“复合类”和一个变量类的数量
带有“COMPOUND”我的意思是一个类对应一个向量(变量长度)。 例如,如果类由2个元素向量表示,则可能的类将为:
[0,0]
[0,1]
[1,0]
[1,1]
Mi的目标是定义一个函数:
OUTPUT示例:
[1 0 0]
[0 2 0]
[0 1 0]
此矩阵为3x3矩阵。
这意味着类的总数为3,分类元素的数量为4:
(元素是如何组成的并不重要。 让我们的图像类可能是:
[0,0,1]
[1,0,1]
[1,1,1]
**输入矩阵示例(EXPECTEDclasses):**
[0,0,1]
[1,0,1]
[1,0,1]
[1,1,1]
**输入矩阵(OBTAINED类)的示例:**
[0,0,1]
[1,0,1]
[1,0,1]
[1,0,1] <-- this is the element(line) incorrectly classified
我该怎么办? (分类由Perceptron或Adaline神经网络进行)
提前感谢您的任何提示!
答案 0 :(得分:4)
关键是以下列形式使用ismember:[Lia,Locb] = ismember(A,B,'rows')
第二个输出参数告诉您矩阵A的每一行匹配的矩阵B的哪一行。使用此信息构造混淆矩阵(这是统计工具箱中的内置函数)。
classes = [0 0 1;
1 0 1;
1 1 1];
expected = [0 0 1;
1 0 1;
1 0 1;
1 1 1];
obtained = [0 0 1;
1 0 1;
1 0 1;
1 0 1];
>> [~, ex] = ismember(expected, classes,'rows')
ex =
1
2
2
3
>> [~, ob] = ismember(obtained, classes,'rows')
ob =
1
2
2
2
>> confusionmat(ex,ob,'order',[1 2 3])
ans =
1 0 0
0 2 0
0 1 0
如果您无法访问confusionmat
,则可以使用accummarray
自行执行此操作。
num_observations = length(ex);
num_classes = size(classes,1);
accumarray([ex,ob],ones(num_observations,1),[num_classes,num_classes])