MATLAB中绘制混淆矩阵

这个混淆矩阵的代码我也是copy的,超级好用!

%imdsTest是测试集,predict_label是预测标签
function [confusion_matrix]=Draw_confusion_matrix(imdsTest,predict_label)

%% 绘制混淆矩阵
predict_label=predict_label';
tabletest=countEachLabel(imdsTest);%这是个结构体,点开工作区的变量见名知意
num_in_class=tabletest.Count';%这个num_in_class 和祖传代码等价,但这次是用程序自动完成的
classnames=cellstr(tabletest.Label);
name_class=classnames';%是一个1xn的cell向量,绘制混淆矩阵需要用到
[confusion_matrix]=compute_confusion_matrix(predict_label,num_in_class,name_class);%绘制混淆矩阵,所以混淆矩阵的3个函数要放在同一个文件夹内

end



% 预测标签,每一类的数目,类别数目
function [confusion_matrix]=compute_confusion_matrix(predict_label,num_in_class,name_class)
% predict_label为一维行向量
% num_in_class代表每一类的个数
% name_class代表类名
num_class=length(num_in_class);
num_in_class=[0 num_in_class];

confusion_matrix=size(num_class,num_class);

for ci=1:num_class
    for cj=1:num_class
        summer=0;%统计对应标签个数  
        c_start=sum(num_in_class(1:ci))+1;
        c_end=sum(num_in_class(1:ci+1));
        summer=size(find(predict_label(c_start:c_end)==cj),2);  % 统计对应标签个数,注意此处的predict_label可能是数值组成的向量,不是字符串组成的向量
        confusion_matrix(ci,cj)=summer/num_in_class(ci+1);%这个是显示正确率,
%         confusion_matrix(ci,cj)=summer;%这个是显示图片有多少张,
    end
end
draw_cm(confusion_matrix,name_class,num_class);
end



function draw_cm(mat,tick,num_class)
%%
%  Matlab code for visualization of confusion matrix;
%  Parameters:mat: confusion matrix;
%              tick: name of each class, e.g. 'class_1' 'class_2'...
%              num_class: number of class
%

%%
imagesc(1:num_class,1:num_class,mat);            %# in color
colormap(flipud(gray));  %# for gray; black for large value.
textStrings = num2str(mat(:),'%0.2f');  
textStrings = strtrim(cellstr(textStrings)); 
[x,y] = meshgrid(1:num_class); 
hStrings = text(x(:),y(:),textStrings(:), 'HorizontalAlignment','center','FontSize',14);
midValue = mean(get(gca,'CLim')); 
textColors = repmat(mat(:) > midValue,1,3); 
set(hStrings,{'Color'},num2cell(textColors,2));  %# Change the text colors

set(gca,'xticklabel',tick,'XAxisLocation','top');
set(gca, 'XTick', 1:num_class, 'YTick', 1:num_class);
set(gca,'yticklabel',tick);
set(gca,'FontSize',14,'Fontname', 'Helvetica');
rotateXLabels(gca, 315 );% rotate the x tick

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值