最近在做一个四分类的医学图像分类,记录下到处凑来的分类效果评价指标吧:

y_true,y_pred,outProb 都是列表

发现了一个问题:metrics.classification_report不会打出多分类的特异度,需要自己写个函数

    def cal_metrics(confusion_matrix):n_classes = confusion_matrix.shape[0]metrics_result = []for i in range(n_classes):# 逐步获取 真阳,假阳,真阴,假阴四个指标,并计算三个参数ALL = np.sum(confusion_matrix)# 对角线上是正确预测的TP = confusion_matrix[i, i]# 列加和减去正确预测是该类的假阳FP = np.sum(confusion_matrix[:, i]) - TP# 行加和减去正确预测是该类的假阴FN = np.sum(confusion_matrix[i, :]) - TP# 全部减去前面三个就是真阴TN = ALL - TP - FP - FNmetrics_result.append([TP / (TP + FP), TP / (TP + FN), TN / (TN + FP)])return metrics_resultresult = cal_metrics(confusion_matrix)print('cal_metrics: ',result)

评价指标完整版:包括metrics.classification_report,acc,confusion_matrix,auc曲线等

# Recall & Precisiontarget_names = ['class 0', 'class 1','class 2', 'class 3']print(metrics.classification_report(y_true, y_pred,digits=3))# 混淆矩阵confusion_matrix = metrics.confusion_matrix(y_true, y_pred)print("confusion_matrix=", confusion_matrix)accuracy = metrics.accuracy_score(y_true, y_pred)print("accuracy=", accuracy)def cal_metrics(confusion_matrix):n_classes = confusion_matrix.shape[0]metrics_result = []for i in range(n_classes):# 逐步获取 真阳,假阳,真阴,假阴四个指标,并计算三个参数ALL = np.sum(confusion_matrix)# 对角线上是正确预测的TP = confusion_matrix[i, i]# 列加和减去正确预测是该类的假阳FP = np.sum(confusion_matrix[:, i]) - TP# 行加和减去正确预测是该类的假阴FN = np.sum(confusion_matrix[i, :]) - TP# 全部减去前面三个就是真阴TN = ALL - TP - FP - FNmetrics_result.append([TP / (TP + FP), TP / (TP + FN), TN / (TN + FP)])return metrics_resultresult = cal_metrics(confusion_matrix)print('cal_metrics: ',result)# 显示混淆矩阵classes = range(0, 4)plt.imshow(confusion_matrix, cmap=plt.cm.Blues)# ticks 坐标轴的坐标点# label 坐标轴标签说明indices = range(len(confusion_matrix))# 第一个是迭代对象,表示坐标的显示顺序,第二个参数是坐标轴显示列表plt.xticks(indices, classes)plt.yticks(indices, classes)plt.colorbar()plt.xlabel('Predicted label')plt.ylabel('True label')plt.title("Confusion matrix",fontdict={'weight': '0'})# plt.title("Confusion matrix", fontdict={'weight': '0', 'size': 18})# 显示数据for first_index in range(len(confusion_matrix)):  # 第几行for second_index in range(len(confusion_matrix[first_index])):  # 第几列plt.text(first_index, second_index, confusion_matrix[second_index][first_index])# 显示plt.show()# 多分类Roc & Aucy_true = label_binarize(y_true, classes=[0, 1, 2, 3])fpr = dict()tpr = dict()roc_auc = dict()for i in range(4):fpr[i], tpr[i], _ = metrics.roc_curve(y_true[:,i], outProb[:, i])roc_auc[i] = metrics.auc(fpr[i], tpr[i])print(i,' auc:',roc_auc[i])colors = cycle(['aqua', 'darkorange', 'cornflowerblue','green'])for i, color in zip(range(4), colors):plt.plot(fpr[i], tpr[i], color=color, lw=2,label='ROC curve of class {0} (area = {1:0.3f})'''.format(i, roc_auc[i]))plt.plot([0, 1], [0, 1], 'k--', lw=2)plt.xlim([0.0, 1.0])plt.ylim([0.0, 1.05])plt.xlabel('False Positive Rate')plt.ylabel('True Positive Rate')plt.title('ROC Curve')plt.legend(loc="lower right")plt.show()

结果如图:

————————————————————————————————————————

看到有的多分类文章里也有医生预测效果roc曲线:其实就是对医生预测值进行label_binarize

因为医生预测结果只有类型而非深度学习能预测概率,所以医生的roc曲线是一条折线

补下代码

data_table = pd.read_csv(r'C:\Users\admin\Desktop\给医生的数据\四分类统计数据.csv', encoding='GB18030', delimiter=',')
data_table_arr = np.array(data_table)
Y_true = data_table_arr[:, 3]
lsy = data_table_arr[:, 1]
y_true = list(Y_true)
lsy = list(lsy)# 多分类Roc & Auc
y_true = label_binarize(y_true, classes=[0, 1, 2, 3])
# 医生预测结果二值化
lsy_pred = label_binarize(lsy,classes=[0, 1, 2, 3])
wzm_pred = label_binarize(wzm,classes=[0, 1, 2, 3])fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range(4):fpr[i], tpr[i], _ = metrics.roc_curve(y_true[:,i], lsy_pred[:, i])roc_auc[i] = metrics.auc(fpr[i], tpr[i])print(i,' auc:',roc_auc[i])colors = cycle(['aqua', 'darkorange', 'cornflowerblue','green'])
for i, color in zip(range(4), colors):plt.plot(fpr[i], tpr[i], color=color, lw=2,label='ROC curve of class {0} (area = {1:0.3f})'''.format(i, roc_auc[i]))plt.plot([0, 1], [0, 1], 'k--', lw=2)
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.legend(loc="lower right")
plt.show()

代码里lsy指是csv里lsy医生预测的结果

四分类结果如图:

医学图像多分类的评价指标(包括混淆矩阵,metrics.classification_report等)相关推荐

  1. 决策树及分类模型评价指标(混淆矩阵,LIFT曲线 重要)

    决策树评价指标:ROC lift(提升度):类似提纯:按照decile从高到低排列,之后计算每个decile里响应数与该decile里行数的比值得到一个response rate,另外,单独计算所有行 ...

  2. 混淆矩阵评价指标_分类效果评价指标一混淆矩阵

    1.混淆矩阵:判断分类模型好坏 (摘自:版权声明:本文为CSDN博主「Orange_Spotty_Cat」的原创文章.原文链接:https://blog.csdn.net/Orange_Spotty_ ...

  3. 详细讲解分类模型评价指标(混淆矩阵)python示例

    前言 1.回归模型(regression): 对于回归模型的评估方法,通常会采用平均绝对误差(MAE).均方误差(MSE).平均绝对百分比误差(MAPE)等方法. 2.聚类模型(clustering) ...

  4. ML:分类预测问题中评价指标(ER/混淆矩阵P-R-F1/ROC-AUC/RP/mAP)简介、使用方法、代码实现、案例应用之详细攻略

    ML:分类预测问题中评价指标(ER/混淆矩阵P-R-F1/ROC-AUC/RP/mAP)简介.使用方法.代码实现.案例应用之详细攻略 目录 分类预测的简介 分类预测问题中评价指标(ER/ROC-AUC ...

  5. R语言glmnet拟合lasso回归模型实战:lasso回归模型的模型系数及可视化、lasso回归模型分类评估计算(混淆矩阵、accuracy、Deviance)

    R语言glmnet拟合lasso回归模型实战:lasso回归模型的模型系数(lasso regression coefficients)及可视化.lasso回归模型分类评估计算(混淆矩阵.accura ...

  6. R语言glmnet拟合岭回归模型实战:岭回归模型的模型系数(ridge regression coefficients)及可视化、岭回归模型分类评估计算(混淆矩阵、accuracy、Deviance)

    R语言glmnet拟合岭回归模型(ridge regression)实战:岭回归模型的模型系数(ridge regression coefficients)及可视化.岭回归模型分类评估计算(混淆矩阵. ...

  7. Python机器学习:评价分类结果008多分类问题中的混淆矩阵

    多分类问题中的混淆矩阵 #十分类问题 import matplotlib.pyplot as plt import numpy as np 数据 from sklearn import dataset ...

  8. 决策树分类评估指标之混淆矩阵

    问题的提出 如果决策树的目标是尽量捕获少数类,则准确率模型评估的意义不大,需要新的模型评估指标.简单来看,只需要查看模型在少数类上的准确率就好,只要能够将少数类尽量捕捉出来,就能够达到目的. 但是,新 ...

  9. 分类模型性能评价指标:混淆矩阵、F Score、ROC曲线与AUC面积、PR曲线

    以二分类模型为例:二分类模型最终需要判断样本的结果是1还是0,或者说是positive还是negative. 评价分类模型性能的场景: 采集一个称之为测试集的数据集: 测试集的每一个样本由特征数据及其 ...

最新文章

  1. 基于RESTful API 怎么设计用户权限控制?
  2. GCC 警告选项 -Werror
  3. JavaScript内置函数及API
  4. python 人工智能课程大纲_《人工智能》教学大纲
  5. JMP指令转换公式推导
  6. “Zhuang.Data”轻型数据库访问框架(一)开篇介绍
  7. MVC中validateRequest=false不起作用
  8. 工业串口服务器如何使用
  9. linux忘记mysql密码_Linux下忘记Mysql密码的找回方法(图)
  10. 信息学奥赛一本通 1229:电池的寿命 | OpenJudge NOI 4.6 2469:电池的寿命
  11. 微擎微信公众号小程序框架v2.7.3去sq一键安装纯净商业版
  12. win10 + bazel-0.20.0 + tensorflow-1.13.1 编译tensorflow GPU版本的C++库
  13. 电池电堆及发动机的测试软件,燃料电池发动机测试系统的开发
  14. java8 lambda 处理分类和子分类的技巧
  15. linux用户态切换到内核态方法
  16. Windows应用程序安装向导制作
  17. 竹笋的营养价值及使用方法
  18. Squid+MRTG实现完善的缓存代理和http服务加速代理
  19. ☆ C++ 继承与派生(包括虚继承)
  20. JVM之jstat命令

热门文章

  1. oppo手机永久打开USB调试模式
  2. 重量级开发环境:Homestead
  3. Linux 中 sudo、su命令
  4. python气象数据处理与绘图_Python气象数据处理与绘图(15):两种波作用通量计算的python实现及对比(Plumb T-N) (已更正)...
  5. 微信分享JS代码 WeixinApi.js
  6. zabbix系列(1)zabbix5.0搭建之环境准备
  7. python爬取链家房价消息_Python的scrapy之爬取链家网房价信息并保存到本地
  8. 微票务v15.8.4演唱会 票务 现场活动
  9. Kafka是什么?为什么拥有异步、削峰、解耦?有哪些角色?
  10. 盛元广通病原微生物实验室生物安全管理信息系统