gpt4 book ai didi

matlab - 我应该如何在 Matlab 中实现混淆矩阵?

转载 作者:太空宇宙 更新时间:2023-11-03 20:00:44 26 4
gpt4 key购买 nike

我知道什么是混淆矩阵。

给定 N 个类,我们有一个 NxN 矩阵 M,其中- 每一行都是其中一个类- 每列都是其中一个类

M(X,Y) = 已归入 X 类且应归入 Y 类的元素数(当然,如果 X=Y,则分类正确)。

现在我有一组“复合类”和可变数量的类

  • 对于“复合”,我的意思是一个类对应于一个向量(长度可变)。例如,如果类由 2 元素向量表示,则可能的类将是:

    [0,0]

    [0,1]

    [1,0]

    [1,1]

Mi 的目标是定义一个函数:

  • INPUT:分类元素的 NxM 矩阵(其中 N=分类元素的数量,M=每个类别的元素数量),每个元素的预期类别的 NxM 矩阵。
  • 输出:输入类对应的NXN混淆矩阵

输出示例:

[1 0 0]
[0 2 0]
[0 1 0]

这个矩阵是 3x3 矩阵。

这意味着类别总数为 3,分类元素数为 4:

  • 一个元素应该被归类到第 1 类并且已经被归类到第 1 类
  • 两个元素本应归入第 2 类并已归入第 2 类
  • 一个元素本应归入第 3 类,但已归入第 2 类

(元素的组成方式无关紧要。让我们想象一下这些类可能是:

[0,0,1]
[1,0,1]
[1,1,1]

** 输入矩阵示例(预期类):**

[0,0,1]
[1,0,1]
[1,0,1]
[1,1,1]

** 输入矩阵示例(获得的类):**

[0,0,1]
[1,0,1]
[1,0,1]
[1,0,1] <-- this is the element(line) incorrectly classified

我该怎么办? (分类是由感知器或 Adaline 神经元网络进行的)

预先感谢您的任何提示!

最佳答案

关键是要用ismember采用以下形式:[Lia,Locb] = ismember(A,B,'rows') 第二个输出参数告诉您矩阵 B 的哪一行与矩阵 A 的每一行相匹配。使用此信息构建混淆矩阵(这是统计工具箱中的内置函数)。

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])

关于matlab - 我应该如何在 Matlab 中实现混淆矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11212045/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com