Matlab-创建细胞混淆矩阵

Matlab- Create cell confusion matrix

我有以下单元格矩阵,将用作混淆矩阵:

confusion=cell(25,25);

然后,我有另外两个元胞数组,每行包含预测标签(数组输出)和另一个包含真实标签的元胞矩阵(数组真值)。

whos output 

 Name             Size               Bytes  Class    Attributes

 output      702250x1             80943902  cell               

whos groundtruth                       
  Name                  Size               Bytes  Class    Attributes

  groundtruth      702250x1             84270000  cell               

然后,我创建了以下脚本来创建混淆矩阵

function confusion=write_confusion_matrix(predict, groundtruth)

   confusion=cell(25,25);

   for i=1:size(predict,1)
        confusion{groundtruth{i},predict{i}}=confusion{groundtruth{i}, predict{i}}+1;
   end
end

但是当我在 matlab 中 运行 它时,我有以下错误:

Index exceeds matrix dimensions.

Error in write_confusion_matrix (line 4)
confusion{groundtruth{i},predict{i}}=confusion{groundtruth{i}, predict{i}}+1;

我很好奇打印输出值和真实值以查看发生了什么

 output{1}                                                                                                              

 ans =

 2

 groundtruth{1}                                                                                                         

 ans =

 1

那么,价值观似乎没有什么问题,那么这里有什么问题呢?混淆矩阵的索引在代码中正确吗?

错误发生在 for 循环中。在这种情况下检查循环的第一次迭代是不够的。 Index exceeds matrix dimensions表示在1:size(output,1)范围内存在一个i,其中groundtruth{i}output{i}大于25。

你可以找出哪一个至少有一个元素大于范围:

% 0 means no, there is none above 25. 1 means yes, there exists at least one:
hasoutlier = any(cellfun(@(x) x > 25, groundtruth)) % similar for 'output'

或者你可以数一数:

outliercount = sum(cellfun(@(x) x > 25, groundtruth))

也许您还想找到这些元素:

outlierindex = find(cellfun(@(x) x > 25, groundtruth))

顺便问一下,我想知道在这种情况下您为什么要使用元胞数组?为什么不是数值数组?