使用Python进行多个机器学习模型、多个评价指标表格绘制(AUC、敏感度、特异度、F1值、约登指数、MCC、Kappa等)
一.常见模型评价指标简要说明
1.混淆矩阵
混淆矩阵是真实值和预测值的交叉表通过混淆矩阵可以构建出其他多个模型评价指标。
Class | Positive Prediction | Negative Prediction |
---|---|---|
Positive Class | True Positive(TP) | False Negative(FN) |
Negative Class | False Positive(FP) | True Negative(TN) |
2.AUC(Area Under Curve)
AUC(Area Under Curve), ROC曲线下面积,反映了模型整体的预测性能。越接近1,代表模型预测性能更好。
3.敏感度
敏感度(Sensitivity,Sen)敏感度与少数样本类别有关,它表示了阳性类样本的分类正确率。
Sen=TPTP+FNSen = \frac {TP} {TP+FN} Sen=TP+FNTP
4.特异度
特异度(Specificity,Spe)与多数样本类别有关,表示了阴性类样本的分类正确率。
Spe=TNFP+TNSpe = \frac {TN}{FP+TN} Spe=FP+TNTN
5.PPV
阳性预测值(positive predict,PPV)指预测出的全部阳性样本中,真阳性所占的比例。表示判定为阳性类样本中,有多大概率预测是正确的。
PPV=TPTP+FPPPV = \frac {TP}{TP+FP} PPV=TP+FPTP
6.NPV
阴性预测值(negative predict,NPV)指预测出的全部阴性样本中,真阴性所占的比例。它表示判定为阴性类样本中,有多大概率预测是正确的。
NPV=TNTN+FNNPV = \frac {TN}{TN+FN} NPV=TN+FNTN
7.PLR
阳性似然比(positive likelihood ratio, PLR)是预测的真阳性率与假阳性率之比,代表预测正确判断阳性的可能性是错误判断阳性可能性的倍数。比值越大,预测结果阳性时为真阳性的概率越大。
8.NLR
阴性似然比(negative likelihood ratio, NLR)是预测的假阴性率与真阴性率之比。代表错误判断阴性的可能性是正确判断阴性可能性的倍数。其比值越小,预测结果阴性时为真阴性的可能性越大。
9.F1
F1值(F1 score)是统计学中用来衡量二分类模型精确度的一种指标,可以看作是模型精确率和召回率的一种调和平均,它的最大值是1,最小值是0。
10.约登指数
约登指数(Youden Index),是评价预测真实性的方法,假设其假阴性和假阳性的危害性同等意义时,即可应用约登指数。 约登指数是敏感度与特异度之和减去1,表示预测发现真正的阳性与阴性样本的总能力。 指数越大说明预测的效果越好,真实性越大。
Youden′sIndex=Sen+Spe−1Youden's \ Index = Sen + Spe -1 Youden′s Index=Sen+Spe−1
11.MCC
MCC(Matthews correlation coefficient)是应用在机器学习中,用以测量二分类的分类性能的指标,该指标考虑了真阳性,真阴性,假阳性和假阴性,通常认为该指标是一个比较均衡的指标,即使是在两类别的样本不均衡时,也可以应用它。它的取值范围为[-1,1],取值为1时表示对受试对象的完美预测,取值为0时表示预测的结果还不如随机预测的结果,-1是指预测分类和实际分类完全不一致。
MCC=TP×TN−FP×FN(TP+FP)(TP+FN)(TN+FP)(TN+FN)MCC = \frac {TP\times TN - FP\times FN }{\sqrt {(TP+FP)(TP+FN)(TN+FP)(TN+FN)}} MCC=(TP+FP)(TP+FN)(TN+FP)(TN+FN)TP×TN−FP×FN
12.Kappa
Kappa是一种基于混淆矩阵计算的衡量分类精度的指标,通常kappa落在 [0-1] 间,可分为五组来表示不同级别的一致性:0-0.2为极低的一致性(slight)、0.21-0.4为一般的一致性(fair)、0.41-0.6为 中等的一致性(moderate)、0.61-0.8 为高度的一致性(substantial)和0.81-1几乎完全一致(almost perfect)
二. 模型评价表格绘制代码
建立模型后,将不同模型的评价指标进行计算,然后绘制成为一张表格,可以方便地进行保存。
1.函数所需加载的包
import pandas as pd
import numpy as np
from sklearn.metrics import roc_auc_score,roc_curve,auc
from sklearn import metrics
from matplotlib import pyplot
from numpy import argmax
from functools import reduce
2.模型评价函数
(1)找到最佳cutoff
为了同时最大化敏感度和特异度,我们需要先找到最优的阈值。
def find_optimal_cutoff(tpr,fpr,threshold):optimal_idx = np.argmax(tpr - fpr)optimal_threshold = threshold[optimal_idx]return optimal_threshold
该函数会在best_confusion_matrix函数中调用。
(2)根据最佳cutoff值计算混淆矩阵
def best_confusion_matrix(y_test, y_test_predprob):"""根据真实值和预测值(预测概率)的向量来计算混淆矩阵和最优的划分阈值Args:y_test:真实值y_test_predprob:预测值Returns:返回最佳划分阈值和混淆矩阵"""fpr, tpr, thresholds = roc_curve(y_test, y_test_predprob, pos_label=1)cutoff = find_optimal_cutoff(tpr,fpr,thresholds)y_pred = list(map(lambda x:1 if x>=cutoff else 0,y_test_predprob))TN,FP,FN,TP = confusion_matrix(y_test,y_pred).ravel()return cutoff,TN,FN,FP,TP
(3)单个模型评价指标计算和表格绘制
def evaluation(clf,X_train,y_train,X_test,y_test,modelname,digits):"""计算各个模型评价指标Args:clf:已经fit好的模型X_train,y_train,X_test,y_test: 训练和测试数据集modelname:模型名称,为了表格的绘制digits:各个评价指标需要保留的位数Returns:返回单个模型评价指标表格"""y_train_predprob = clf.predict_proba(X_train)[:, 1]train_auc = round(roc_auc_score(y_train, y_train_predprob),digits)y_test_predprob = clf.predict_proba(X_test)[:, 1]test_auc = round(roc_auc_score(y_test, y_test_predprob),digits)train_cutoff, TN1,FN1,FP1,TP1 = best_confusion_matrix(y_train,y_train_predprob)test_cutoff, TN2,FN2,FP2,TP2 = best_confusion_matrix(y_test,y_test_predprob)#Sen Spebest_recall,best_prec = round(TP2/(TP2+FN2),digits), round(TN2/(FP2+TN2),digits)#PPV NPVnpv,ppv = round(TN2/(FN2+TN2),digits),round(TP2/(TP2+FP2),digits)#PLR NLRplr,nlr = round((TP2/(TP2+FN2))/(FP2/(FP2+TN2)),digits),round((FN2/(TP2+FN2))/(TN2/(FP2+TN2)),digits)#F1值y_test_pred=list(map(lambda x:1 if x>=test_cutoff else 0,y_test_predprob))f1 = round(f1_score(y_test, y_test_pred),digits)#Youden Indexyouden = round(TP2/(TP2+FN2)+TN2/(FP2+TN2)-1,digits)#MCCmcc = round(sklearn.metrics.matthews_corrcoef(y_test, y_test_pred),digits)#Kappakappa =round(sklearn.metrics.cohen_kappa_score(y_test_pred, y_test),digits)eval_df = {'Model': ['train_auc','test_auc','specificity','sensitivity','F1','Youden Index','MCC','Kappa','npv','ppv','plr','nlr'], Name: [train_auc, test_auc, best_prec,best_recall,f1,youden,mcc,kappa,npv,ppv,plr,nlr]}eval_df = pd.DataFrame(data=eval_df)return eval_df
3.函数调用和多个模型评价表格绘制
根据使用需要,有时需要训练多个模型并对比他们的表现。这个时候就需要多次调用evaluation函数并将这些表格进行合并绘制。
res_lr=evaluation(clf_lr,X_train,y_train,X_test,y_test,"LR",3)
res_rf=evaluation(clf_rf,X_train,y_train,X_test,y_test,"RF",3)
res_xgb=evaluation(clf_xgb,X_train,y_train,X_test,y_test,"XGBoost",3)frames = [res_lr, res_rf,res_xgb]
res_df = reduce(lambda df1,df2: pd.merge(df1,df2,on='Model'), frames)
#将表格保存为csv格式文件
res_df.to_csv('model_evaluation.csv',encoding = 'utf_8_sig')
注意
评价表格中,除train_auc之外,其余评价指标都是基于测试集进行计算,如需计算训练集的评价(一般情况下应该都不需要哈哈),可以补充修改一下代码哦。
使用Python进行多个机器学习模型、多个评价指标表格绘制(AUC、敏感度、特异度、F1值、约登指数、MCC、Kappa等)相关推荐
- python可视化多个机器学习模型在独立测试集(test data set)上面的AUC值、可视化模型效能
python可视化多个机器学习模型在独立测试集(test data set)上面的AUC值.可视化模型效能 # x_lables为模型名称列表,包括,逻辑回归.朴素贝叶斯.支持向量机.随机森林.xgb ...
- python可视化多个机器学习模型在训练集(train set)上交叉验证(cross validation)的AUC值、可视化模型效能
python可视化多个机器学习模型在训练集(train set)上交叉验证(cross validation)的AUC值.可视化模型效能 # 所有的模型中填写的参数都是通过randomsearchcv ...
- 【机器学习系列】【模型评价】【ROC曲线、约登指数最佳阈值】一个函数中实现约登指数计算并集成到ROC图中,给出默认阈值及最佳阈值下的混淆矩阵
输入实际标签.预测的概率值.预测标签,计算最佳阈值,输出ROC曲线,输出默认阈值下的混淆矩阵和最佳阈值下的混淆矩阵 目录 使用约登指数计算最佳阈值 result_evaluation()函数实现约登指 ...
- python编写自定义函数计算约登值(约登指数、Youden Index)、寻找最佳阈值(threshold、cutoff)、可视化ROC曲线并在曲线中标记最佳阈值及其数值标签
python编写自定义函数计算约登值(约登指数.Youden Index).寻找最佳阈值(threshold.cutoff).可视化ROC曲线并在曲线中标记最佳阈值及其数值标签 目录
- python计算均方根误差_如何在Python中创建线性回归机器学习模型?「入门篇」
线性回归和逻辑回归是当今很受欢迎的两种机器学习模型. 本文将教你如何使用 scikit-learn 库在Python中创建.训练和测试你的第一个线性.逻辑回归机器学习模型,本文适合大部分的新人小白. ...
- 机器学习模型中的评价指标
1.回归模型 1.1 MSE(均方误差) MSE是Mean Square Error的缩写,其计算公式如下: m s e = 1 m ∑ i = 1 m ( y i − y i ^ ) 2 mse=\ ...
- 机器学习中的准确率,精确率,召回率以及F1值
T:真,F:假,P:阳性,N:阴性 然后组合: TP:真阳性 TN:真阴性 FP:假阳性 FN:假阴性 1.准确率: 首先给出准确率(Accuracy)的定义,即预测正确的结果占总样本的百分比,表达式 ...
- 机器学习 模型评估指标 - ROC曲线和AUC值
机器学习算法-随机森林初探(1) 随机森林拖了这么久,终于到实战了.先分享很多套用于机器学习的多种癌症表达数据集 https://file.biolab.si/biolab/supp/bi-cance ...
- Python中完整的机器学习数据科学课程
学习每个机器学习模型背后的数学,然后用Python实现它 你会学到: 开发机器学习模型 创建机器学习模型的模板 学习每个机器学习模型背后的数学 要求: Python或任何编程语言的基础 时长:8h 1 ...
- 独家 | 机器学习模型应用方法综述
作者:Julien Kervizic 翻译:陈之炎 校对:李海明 本文约5700字,建议阅读10+分钟. 本文整理比较模型部署到生产中使用的不同部署模型方式.生命周期管理方法及数据存储格式. Mant ...
最新文章
- PPT中视频投影问题
- 《研磨设计模式》chap21 解释器模式Interpreter(2)parse模型
- 【自己动手写神经网络】小白入门连载(二)--机器人时代必须得有人工神经(不是神经病)...
- 简述MVC思想与PHP如何实现MVC
- mysql正则替换字符串_mysql中替换字符串(正则) 模糊
- Apaceh配置httpd-vhosts虚拟主机
- 今晚直播丨全新MySQL OLAP实时分析解决方案HeatWave详解
- 番外篇:根据学习程度划分程序员的级别
- 优化element ui中的弹框样式
- linux yum换源(国内阿里源)
- 一张图了解大数据概念,大数据应用场景总结
- 硬盘不能进PE的问题与解决
- 关于iPhone手机如何导入本地音乐
- 如何在VSCode配置PHP开发环境(详细版)
- 有关信息论和 error-control coding 的简单介绍
- oppoK9Pro游戏性能怎么样
- 千牛挂“虹(Rainbow)”,域和角色不胜数
- 【iOS】用RGB颜色模型实现彩虹渐变
- 奥比3D相机及SDK功能介绍
- 任务管理器无法结束进程
热门文章
- setw()函数使用
- Windows许可证过期(‘slmgr.vbs‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件)
- 三菱服务器显示003C,FX3U/FX3G系列PLC内置定位功能的当前值寄存器是什么?
- 06.第七章、成本管理
- 电脑数据误删除了怎么恢复?误删除数据恢复操作教程
- 微信更换绑定手机人工服务器,微信更换已绑定手机号码的操作方法
- MCS9865串口卡并口卡驱动
- IDEA插件(BindED)——查看class文件的十六进制
- 从turtlesim到贪吃蛇……(补充)
- 思岚A1激光雷达hector_mapping建图与定位