如何在scikit-learn生成的混淆矩阵单元格中添加自定义标注文本?
实现方法
不需要手动调用annotate指定坐标,scikit-learn的ConfusionMatrixDisplay实例自带text_属性,是和混淆矩阵维度一致的文本对象数组,直接修改每个位置的文本内容即可,操作非常简便。
适配你的场景的修改后代码
from sklearn import metrics import matplotlib.pyplot as plt # 此处请提前定义好你的y_true和y_pred变量 fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5)) fig.tight_layout() # 第一个混淆矩阵:benign为正例 cm_benign = metrics.ConfusionMatrixDisplay.from_predictions( y_true, y_pred, ax=ax1, labels=["benign", "malignant"], colorbar=False ) ax1.set_title("Confusion Matrix (Benign as +)") # 修改单元格标注,以下写法会保留原有的数值统计结果,不需要的话可以去掉f-string里的原有文本部分 cm_benign.text_[0,0].set_text(f"True Positive(真阳性)\n{cm_benign.text_[0,0].get_text()}") cm_benign.text_[0,1].set_text(f"False Negative(假阴性)\n{cm_benign.text_[0,1].get_text()}") cm_benign.text_[1,0].set_text(f"False Positive(假阳性)\n{cm_benign.text_[1,0].get_text()}") cm_benign.text_[1,1].set_text(f"True Negative(真阴性)\n{cm_benign.text_[1,1].get_text()}") # 第二个混淆矩阵:malignant为正例 cm_malignant = metrics.ConfusionMatrixDisplay.from_predictions( y_true, y_pred, ax=ax2, labels=["malignant", "benign"], colorbar=False ) ax2.set_title("Confusion Matrix (Malignant as +)") cm_malignant.text_[0,0].set_text(f"True Positive(真阳性)\n{cm_malignant.text_[0,0].get_text()}") cm_malignant.text_[0,1].set_text(f"False Negative(假阴性)\n{cm_malignant.text_[0,1].get_text()}") cm_malignant.text_[1,0].set_text(f"False Positive(假阳性)\n{cm_malignant.text_[1,0].get_text()}") cm_malignant.text_[1,1].set_text(f"True Negative(真阴性)\n{cm_malignant.text_[1,1].get_text()}") fig.subplots_adjust(wspace=0.8) plt.show()
注意事项
text_属性在scikit-learn 0.24及以上版本可用,如果你的版本过低,先升级scikit-learn即可- 混淆矩阵默认行对应真实标签、列对应预测标签,修改标注前注意对应你设置的正负例顺序,避免标注填错位置
内容的提问来源于stack exchange,提问作者ilovewt
相关产品推荐
相关产品推荐

