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))
顺便问一下,我想知道在这种情况下您为什么要使用元胞数组?为什么不是数值数组?
我有以下单元格矩阵,将用作混淆矩阵:
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))
顺便问一下,我想知道在这种情况下您为什么要使用元胞数组?为什么不是数值数组?