一、概述

在机器学习模型搭建好之后,需要对模型进行评估,针对不同的算法模型有不同的评估方法,比如:分类算法、回归算法、聚类算法等,本文主要是针对分类算法的模型评估方法进行总结整理,便于自己对评估方法的进一步理解和随时查阅。

二、详细说明

在介绍分类评估方法之前,首先介绍一个比较重要的概念:混淆矩阵,后续的评估方法都是在此基础之上定义的,对于分类模型而言(这里仅以最简单的二分类为例,假设只有0和1两类),其结果主要有以下四种:

  • 实际为正、结果为正,预测正确
  • 实际为正、结果为负,预测错误
  • 实际为负、结果为正,预测错误
  • 实际为负、结果为负,预测正确

混淆矩阵的形式,具体如下图所示:

P表示Positive、N表示Negative

其中:T、F表示预测结果是否正确、而后面跟的P、N主要是对应预测的结果,这下记住上面的图了吧!

介绍完混淆矩阵,接下来我们介绍常用的评价标准,主要包括:准确率、精确率、召回率、F1值、ROC曲线、AUC、P-R、KS曲线等

准确率

准确率很好理解,就是预测正确的占比,其公式为:

精确率

也称为查准率,在真实值为正的样本中,预测正确的样本占比,其计算公式表示为:

召回率

也称为查全率,在预测值为正的样本中,预测为正的样本占比,其计算公式表示为:

F1-Score

F1分数(F1 Score),是统计学中用来衡量二分类模型精确度的一种指标。它同时兼顾了分类模型的准确率和召回率。F1分数可以看作是模型准确率和召回率的一种加权平均,它的最大值是1,最小值是0,其公式为:

ROC曲线

对于ROC曲线,其横、纵坐标分别为:伪正率(FPR)、真正率(TPR)。其中:

真正率为实际为正的样本中,被判断为正的比例,公式如下:

可以看到真正率的计算公式和召回率的计算公式是一样的

假正率为实际为负,被错误判断为正的比例,公式如下:

ROC曲线的绘制主要我们根据多个阈值来计算出多组FPR和TPR(比如在逻辑回归中我们可以调整阈值如0.25、0.5、0.75等,这样我们就可以绘制出多组值绘制出ROC曲线,如下图所示:

图片来自网络,侵删!

ROC的计算方法同时考虑了学习器对于正例和负例的分类能力,在样本不平衡的情况下,依然能够对分类器做出合理的评价。ROC对样本类别是否均衡并不敏感,这也是不均衡样本通常用ROC评价学习器性能的一个原因,其中ROC曲线越往上靠近模型性能越好(为啥越考上越好,纵坐标为真正率越大越好),

AUC

AUC是一个模型评价指标,只能用于二分类模型的评价,对于AUC我们记住,其就是ROC曲线下面的面积,AUC=1.0时表示模型最好,随机猜测的为0.5,其值越高,模型性能越好。

PR曲线

PR曲线是以召回率为横轴、以精确率为纵轴绘制的曲线,如下:

其中:曲线下的面积越大,或者说曲线更接近右上角(precision=1, recall=1),那么模型就越理想,越好。

KS曲线

K-S曲线的数据来源以及本质和ROC曲线是一致的,只是ROC曲线是把真正率(

)和假正率(
)当作横纵轴,而

K-S曲线是把真正率(

)和假正率(
)都当作是纵轴,横轴则由选定的阈值来充当。如图:

KS值

K-S 曲线就能衍生出

值,
,即是两条曲线之间的最大间隔距离。KS值越大表示模型 的区分能力越强。

三、Sklearn实战

Python的第三方库sklearn为我们提供了上述模型评估计算的接口,具体演示如下代码:

from sklearn import metrics
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
# Matplotlib中设置字体-黑体,解决Matplotlib中文乱码问题
plt.rcParams['axes.unicode_minus'] = False
# 解决Matplotlib坐标轴负号'-'显示为方块的问题y_true=[1,1,0,1,1]
y_pred=[0,0,0,1,0]# 混淆矩阵
C = metrics.confusion_matrix(y_true, y_pred)
print("混淆矩阵为:n",C)
# 计算准确率(accuracy)
accuracy = metrics.accuracy_score(y_true,y_pred)
print("准确度为:n",accuracy)
# 计算精确率(precision)
precision = metrics.precision_score(y_true,y_pred)
print("精确率为:n",precision)
# 计算召回率(recall)
recall = metrics.recall_score(y_true,y_pred)
print("召回率为:n",recall)
# 计算F1-score(F1-score)
F1_score = metrics.f1_score(y_true,y_pred)
print("精确率为:n",F1_score)# 绘制PR曲线
y_pred = [0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1]
y_true = [0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0]precision,recall,thresholds = metrics.precision_recall_curve(y_true, y_pred)
plt.plot(precision, recall)
plt.title("PR曲线")
plt.xlabel("recall")
plt.ylabel("precision")
plt.show()# 绘制ROC曲线
y_pred = [0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1]
y_true = [0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0]FPR,TPR,thresholds = metrics.roc_curve(y_true,y_pred)
plt.plot(FPR, TPR)
plt.title("ROC曲线")
plt.xlabel("recall")
plt.ylabel("precision")
plt.plot([0,1],[0,1],'r--')
plt.show()# 计算AUC值
y_true = [0, 0, 1, 1, 0]
y_scores = [0.1, 0.4, 0.35, 0.8, 0.2]
print('AUC socre:',metrics.roc_auc_score(y_true, y_scores))# 计算ks值
y_pred = [0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1]
y_true = [0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0]
FPR,TPR,thresholds = metrics.roc_curve(y_true,y_pred)# 绘制KS曲线
plt.plot(thresholds, FPR)
plt.plot(thresholds, TPR)
plt.show()KS=abs(FPR-TPR).max()
print('KS值:',KS)

四、总结

本文主要总结了分类模型的常用评估方法,需要了解各个名词的含义及对应的计算公式,同时需要了解各个评估方法适合的应用场景,在第三部分介绍了sklearn库中对于评估方法的实现,只需要记住metrics,各个计算函数与其名字对应,在jupyter中可以使用tab键和shift+table键的使用,你会发现更多.......

多分类f1分数_机器学习之分类模型评估总结相关推荐

  1. 多分类f1分数_所以多分类情况下sklearn的f1值到底是怎么计算的

    已经很久没有更新新的文章啦,最近在弄GCN,很多东西的理解都还没有很透彻,所以也不太好发,不过就在今天"南归"的时候刷知乎,刷到了这么一个朋友( @苏小胖与喵 )的疑问: 这... ...

  2. 多分类f1分数_如何计算多标签分类中的F1测度?

    我正在研究句子类别检测问题.其中每个句子可以属于多个类别,例如:"It has great sushi and even better service." True Label: ...

  3. 多分类f1分数_多分类的评价指标PRF(Macro-F1/MicroF1/weighted)详解

    也许是由于上学的时候一直搞序列标注任务,多分类任务又可以简化为简单的二分类任务,所以一直认为PRF值很简单,没啥好看的.然鹅,细看下来竟有点晦涩难懂,马篇博留个念咯~ 前言 PRF值分别表示准确率(P ...

  4. 多分类f1分数_分类模型的F1-score、Precision和Recall 计算过程

    分类模型的F1分值.Precision和Recall 计算过程 引入 通常,我们在评价classifier的性能时使用的是accuracy 考虑在多类分类的背景下 accuracy = (分类正确的样 ...

  5. 分类决策树考虑了经验风险吗_数据挖掘导论 第4章 分类:基本概念、决策树与模型评估...

    第4章 分类:基本概念.决策树与模型评估 分类(classification):分类任务就是通过学习得到一个目标函数(target function)f,把每个属性集x映射到一个余弦定义的类标号y.目 ...

  6. ML之ME/LF:机器学习中的模型评估指标/损失函数(连续型/离散型)的简介、损失函数/代价函数/目标函数之间区别、案例应用之详细攻略

    ML之ME/LF:机器学习中的模型评估指标/损失函数(连续型/离散型)的简介.损失函数/代价函数/目标函数之间区别.案例应用之详细攻略 目录 损失函数的简介 损失函数/代价函数/目标函数之间区别 损失 ...

  7. 周志华 《机器学习初步》模型评估与选择

    周志华 <机器学习初步>模型评估与选择 Datawhale2022年12月组队学习 ✌ 文章目录 周志华 <机器学习初步>模型评估与选择 一.泛化能力 二.过拟合和欠拟合 泛化 ...

  8. 机器学习基础:模型评估(下)

    目录 1. 引言 2. 进一步评估 3. 机器学习中的偏差和方差种类 3.1 过拟合 3.2 欠拟合 3.3 训练曲线观察泛化性 3.4 模型偏差和方差(bias and variance) 3.4. ...

  9. ML之ME/LF:机器学习中常见模型评估指标/损失函数(LiR损失、L1损失、L2损失、Logistic损失)求梯度/求导、案例应用之详细攻略

    ML之ME/LF:机器学习中常见模型评估指标/损失函数(LiR损失.L1损失.L2损失.Logistic损失)求梯度/求导.案例应用之详细攻略 目录 常见损失函数求梯度案例 1.线性回归求梯度 2.L ...

最新文章

  1. DLT(DeepLearningTracker)学习与代码理解 (1)
  2. python测试开发自学教程-Web开发哪家强?看我用 Python 写一个颜值测试小工具
  3. python数据库操作批量sql执行_使用Python批量修改数据库执行Sql文件
  4. 计算机将成为学生们的老师英语,七年级英语(牛津版)第一学期7A完成句子练习题...
  5. Transformer模型总结
  6. [转载红鱼儿]kbmmw 开发点滴:Authorization failed.
  7. java 1.6 ubuntu_ubuntu配置 Java SE 1.6
  8. mysql解压缩版配置_MySQL 5.6 for Windows 解压缩版配置安装
  9. 20172313 2018-2019-1 《程序设计与数据结构》第六周学习总结
  10. 第一次带姐姐和弟弟去看海
  11. 52 - 算法 - 数据结构 vector
  12. 磁盘格式 mac android,MacDroid for mac(安卓手机数据传输助手)
  13. plsql保持长连接_知乎千万级高性能长连接网关是如何搭建的
  14. 吉林省谷歌高清卫星地图下载
  15. 解决Wireshark安装Npcap组件失败
  16. python 函数进阶_python之函数进阶
  17. 哈希函数(hash函数)
  18. python用什么软件编程?
  19. jasper 引入字体_MAC下JasperStudio创建及引用字体
  20. 【LorMe云讲堂】徐凌:利用全基因组促进可持续农业

热门文章

  1. Linux负载均衡Linux Virtual Server (lvs) 内核自带的负载均衡器
  2. 在Linux上进行动态注入 | LD_PRELOAD
  3. VPP命令行:启动配置,HTTP服务,DPDK配置
  4. 数据字典模板_巧用单元格保护功能+字典技术,制作高大上的人员信息录入表...
  5. 发动机性能测试软件,发动机的性能测试方法
  6. 红外遥控c语言,NEC协议红外遥控器
  7. unity 的Cinemachine组件运用
  8. 连接Android与ASP.NET Core Web API的完整教程
  9. 在IIS上部署ASP.NET Core Web API
  10. VSCode 6 月 Java 更新,编辑器就该有编辑器的样子