叠加百分比标签
Matlabpython绘制混淆矩阵求解绘图带百分比的混淆矩阵颜色多变风格多样。最近在模型评估的时候发现带百分比的混淆矩阵比纯数字版本直观太多了。今天直接上代码聊聊Matlab和Python两种实现方案顺便分享几个配色魔改小技巧。先说Matlab党怎么玩官方自带的confusionchart函数其实藏了不少彩蛋。先看基础操作% 生成混淆矩阵 C confusionmat(actual,predicted); % 画图 figure; cm confusionchart(C, class_names); cm.Title Confusion Matrix (Counts);这时候出来的图只有原始数值。想要百分比手动给每个格子加上标签% 转换为百分比 C_percent C ./ sum(C,2) * 100; % 按行归一化 % 绘制双标签混淆矩阵 figure; cm confusionchart(C, class_names, ... Title,Confusion Matrix with Percentage,... Colormap, parula); % 换色秘籍在这 % 魔改标签内容 textObjs cm.NodeChildren; for i 1:numel(textObjs) if strcmp(textObjs(i).Type, text) original str2double(textObjs(i).String); percent C_percent(textObjs(i).UserData1); textObjs(i).String sprintf(%.0f\n(%.1f%%), original, percent); end end这里有个骚操作通过NodeChildren属性挖出底层Text对象把数值和百分比拼接显示。配色方案推荐试jet、hsv这类彩虹色系注意别用默认的淡色系对比度太低打印容易翻车。Python选手这边更简单sklearnseaborn组合拳直接搞定import seaborn as sns from sklearn.metrics import confusion_matrix cm confusion_matrix(y_true, y_pred) cm_percent cm.astype(float) / cm.sum(axis1)[:, np.newaxis] * 100 plt.figure(figsize(10,8)) ax sns.heatmap(cm, annotTrue, fmtd, cmapRdYlGn, # 红黄绿经典配色 linewidths0.5, cbar_kws{shrink: 0.8}) for i in range(cm.shape[0]): for j in range(cm.shape[1]): ax.text(j0.5, i0.5, f{cm[i,j]}\n({cm_percent[i,j]:.1f}%), hacenter, vacenter, colorblack if cm[i,j] cm.max()/2 else white) # 自动反色重点是这个颜色判断逻辑——当格子底色太深时自动切换文字为白色避免看不清。想玩点新配色可以试试cubehelix调色板或者自定义渐变色from matplotlib.colors import LinearSegmentedColormap custom_cmap LinearSegmentedColormap.from_list( diy, [#FFEEEE, #FF9999, #FF4444] # 粉红渐变 )最后提醒混淆矩阵的归一化方向按行/按列直接影响百分比计算医疗领域常用敏感度特异度得按行归一化分类任务可能用总量归一化别搞混了。可视化只是工具背后的统计逻辑才是核心。代码测试环境Matlab R2021a / Python 3.8 sklearn 1.0.2Matlabpython绘制混淆矩阵求解绘图带百分比的混淆矩阵颜色多变风格多样。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2445336.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!