前言

前面的推文中介绍了几种常用的机器学习算法,每个算法都有各自的优劣势,我们应该选择根据每个算法的优劣势去合理的选择适合我们需求的算法,以此达到效果最优,那么什么样的效果才是最优的,用什么来衡量这个效果。这一篇就针对机器学习算法的效果评估指标进行介绍。

  • 准确率

  • 精确率

  • 召回率

  • F1-score

  • 交叉报告

  • 混淆矩阵

  • ROC/AUC

在介绍具体每个指标的概念以前,我们先看一个故事:

一位女神被安排了10位男性相亲对象,目前只有这10位男性的照片,女神需要根据照片情况来判断要不要去见面,其中影响见与不见的一个重要指标就是这位男性是否是土豪,该女神就通过每位男性的照片(具体一点就是通过男性穿的什么牌子的衣服、鞋、皮带,戴的什么眼镜、手表哈)来判断哪位是土豪。表中的结果就是女神判断的结果和实际情况对应表。女神的眼力怎么样呢(把女神的眼力当作一个算法看待)?先看一下下图这张表:

实际是土豪 实际是非土豪
被判断为土豪 5人 2人
被判断为非土豪 2人 1人

这张表表示,这10位男士中有7位是真正的土豪,在这7位土豪中有5位被判别出来了,有2位被误判为非土豪(可能穿着比较低调,被误判了哈哈哈);有3位男士是非土豪,在这3位中有2位被误判为土豪(穿着打扮能力很强),只有1位非土豪被判断成非土豪。

这是上面图表直观上传达的意思,我们接下来用不同的量化指标去评判女神的判断效果,并用sklearn库实现。

准确率

准确率(accuracy)是指所有被正确划分类别(实际是土豪被判断为土豪人数+实际是非土豪被判断为非土豪的人数)的人数占总人数(所有被判断对象)的比值(5+1)/10=0.6

#导入sklearn库
from sklearn.metrics import accuracy_score
#打印出准确率
print(accuracy_score(y_true,y_pred)
#打印出分类正确的个数
print(accuracy_score(y_true,y_pred,normalize=False))

精确率

在说精确率(precision)以前,我们需要重申一下女神做判断的目的,就是找出真正的土豪。精确率就是女神找出的真土豪人数(被判断为土豪实际也是土豪的人数)占女神找出所有土豪人数(被判断为土豪的总人数=实际是土豪+实际是非土豪)的比值5/(5+2)=0.71

#导入sklearn库
from sklearn.metrics import precision_score
#打印出精确率
print(precision_score(y_true, y_pred, average='macro'))

召回率

召回率(recall)是指被找出的真土豪人数(被判断为土豪实际也是土豪)占实际土豪总人数的比值5/(5+2)=0.71

#导入sklearn库
from sklearn.metrics import recall_score
#打印出召回率
print(recall_score(y_true, y_pred, average='macro'))

F1-score

F1-score是精确率和召回率的调和平均值,之所以是调和平均是我们可以对精确率和召回率给予不同的权重,默认情况下两者的权重是一样的。计算公式如下:

#导入sklearn库
from sklearn.metrics import f1_score
#打印出召回率
print(f1_score(y_true, y_pred, average='macro'))

交叉报告

交叉报告(classfication_report)是上面几个指标(精确率、召回率、f1-score)的一个汇总情况。

#导入sklearn库
from sklearn.metrics import classification_report
y_true = [0, 1, 2, 2, 2]
y_pred = [0, 0, 2, 2, 1]
#分类标签名
target_names = ['class 0', 'class 1', 'class 2']
#打印出交叉报告
print(classification_report(y_true, y_pred, target_names=target_names))

混淆矩阵

混淆矩阵(confusion_matrix)是用矩阵的形式来表示分类情况,对角线元素表示预测标签等于真实标签的点的数量,是分类结果的一个绝对量,而不是比值,而非对角线元素是分类器误标记的那些元素。混淆矩阵的对角线值越高越好,表明被正确预测的量越多。

#导入sklearn库
from sklearn.metrics import confusion_matrix
y_true = [2, 0, 2, 2, 0, 2]
y_pred = [0, 0, 2, 2, 0, 2]
#打印出矩阵
print(confusion_matrix(y_true, y_pred))

混淆矩阵的结果也经常被用来可视化成热力图的形式,横坐标表示预测的类别,纵坐标表示实际的类别,对角线依次表示实际是A、B、C类且被预测为A、B、C类的量,颜色越深表示被预测正确的量越多,效果越好。

ROC/AUC

在说ROC/AUC之前,我们先说一下分类器的输出结果,可以是直接输出具体的类别clf.predict()方法,也可以输出属于某个类别的概率clf.predict_proba()方法,对于输出类别的方法,算法会先设定一个默认的阈值,将大于阈值的划分为1类,小于阈值的划分为0类;我们也可以自定义阈值的大小,且阈值是可调整的,不同调整的不同的阈值,使分类准确率达到最大,而ROC曲线就是不同阈值下对应的准确率绘制的一条曲线。ROC曲线越向上,表示模型效果越好。

绘制ROC曲线需要计算两个值,tpr和fpr,tpr是模型在正样本上的预测准确率,是将真土豪分为土豪的概率(被判断为土豪的人数/实际土豪人数),即召回率;fpr是模型在负样本上的预测准确率,表示将非土豪误判为土豪的人数占所有实际非土豪人数的比值(1-被判断为非土豪且实际也是非土豪人数/实际非土豪人数)。

#导入库
from sklearn.metrics import roc_curve, auc#计算tpr,fpr,auc
fpr, tpr, threshold = roc_curve(y_test, y_proba)
roc_auc = auc(fpr, tpr)#plot roc_curve
%matplotlib inline
plt.figure()
lw = 2
plt.plot(fpr, tpr, color='darkorange',lw=lw, label='ROC curve (area = %0.2f)' % roc_auc[2])
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()

ROC是一个定性指标,无法对模型效果进行量化,所以有了AUC,AUC是ROC曲线下方的面积,通常AUC值在0.5-1.0之间,值越大模型效果越好。

说说几种指标的一个区别

准确率容易受到不平衡数据的影响,比如有在100个测试集中,有99个负样本,1个正样本,模型会把这100个测试集全部划分为负样本,得到的结果如下:

实际是正样本 实际是负样本
预测为正样本 0 0
预测为负样本 1 99

这个模型的的准确率可以高达99%,但是我们的目标是找出正样本,而该模型一个正样本都找不出来,这个准确率是虚高,是带有欺骗性的。所以当正负样本不平衡的时候,准确率是没有评价意义的。

精确率和召回率是相互制约的,一般精确率低的召回率高,精确率搞得召回率低,根据不同的业务场景选择不同的重点。比如公司要通过运营活动(奖励活动)对即将要流失的用户进行挽留,于是针对用户做了两个流失预警模型,一个模型的精确率较高,另一个模型的召回率高,如果选择精确率较高的模型,会漏掉更多的流失用户,降低了挽回用户量;但是如果选择召回率高的,就会把更多的非流失用户判断为流失用户,产生了更多的不必要成本,那么我们应该如何选择这两个模型呢?

这个时候就要具体情况具体分析,如果是运营经费比较宽裕,且挽留回一个用户所带来的价值是非必要支出的很多倍,那么就选择召回率高的模型;如果是运营经费有限,且挽回用户的价值不那么高,那么就选择精确率较高的模型。

F1-score是精确率和召回率两指标的一个综合。

前面说过的所有指标都是针对一个阈值的结果进行计算的,ROC是将模型依次取不同的阈值,并将该阈值对应的tpr和fpr绘制成一条曲线。

AUC是ROC的量化指标,AUC/ROC是最常用的一种评价方式,因为其不受正负样本比例的影响(影响其的两个指标主要是tpr和fpr,这两个指标表示模型分别在正样本和负样本上的表现情况,和两者的比值无关,所以凭借结果也无关)。

机器学习第十篇:如何评价模型效果评估相关推荐

  1. 【Pytorch-从一团乱麻到入门】:3、模型效果评估指标:ROC、AUC、precision、recall

    在构建模型中,我们经常会用到AUC.ROC等指标来进行模型效果评估 ROC全称是"受试者工作特征"(Receiver Operating Characteristic).ROC曲线 ...

  2. 机器学习模型效果评估

    总第96篇 前言 前面的推文中介绍了几种常用的机器学习算法,每个算法都有各自的优劣势,我们应该选择根据每个算法的优劣势去合理的选择适合我们需求的算法,以此达到效果最优,那么什么样的效果才是最优的,用什 ...

  3. GIS在地质灾害危险性评估与灾后重建中的实践技术应用及python机器学习灾害易发性评价模型建立与优化

    地质灾害是指全球地壳自然地质演化过程中,由于地球内动力.外动力或者人为地质动力作用下导致的自然地质和人类的自然灾害突发事件.由于降水.地震等自然作用下,地质灾害在世界范围内频繁发生.我国除滑坡灾害外, ...

  4. 信贷产品额度定价场景下的回归模型效果评估

    在信贷风控的决策流程中,我们必然会在某些节点放入模型来使用,例如A卡(申请).B卡(行为).C卡(催收).F卡(反欺诈)等.当我们线下建立好一个模型之后,只有通过样本内外的多次测试,以及模型性能指标达 ...

  5. 数据挖掘 NO.2 模型效果评估

    1.logistic regression Regression是做回归的,一般带了Regression的目标值都是连续性的变量.但是Logistic是唯一的做二分类的 logistic regres ...

  6. 模型效果评估指标(ROC、AUC/KS、Lift、PSI)

    以二分类问题为例 混淆矩阵(Confusion Matrix) 对测试集数据进行预测,得到下列混淆矩阵中的数据 注:TP.FN.FP.TN以预测的结果是否准确来命名. 预测模型评估指标的本质是从模型预 ...

  7. 【周志华机器学习】十四、概率图模型

    文章目录 参考资料 1. 基本概念 2. 隐马尔可夫模型(HMM) 2.1 隐马尔可夫三大问题 1. 第一个问题解法 2. 第二个问题解法 3. 第三个问题解法 3. 马尔可夫随机场(MRF) 3.1 ...

  8. 【Pytorch-从一团乱麻到入门】:4、模型效果评估指标:ROC-AUC、PR-AUC及可能遇到的问题(1)

    1.ROC-AUC 和PR-AUC定义 AUC: 随机抽出一对样本(一个正样本,一个负样本),然后用训练得到的分类器来对这两个样本进行预测,预测得到正样本的概率大于负样本概率的概率. ROC-AUC ...

  9. 【Pytorch-从一团乱麻到入门】:5、模型效果评估指标:ROC-AUC、PR-AUC及可能遇到的问题(2)

    AUC的计算属实隐藏着无数的坑,一旦遇到就得吭哧吭哧排查很久,在次进行记录,给走过路过的小伙伴们提个醒. 1.Bug如下: 如果遇到ROC-AUC数值出现多个0.5,那么极有可能是数据本身的问题,例如 ...

最新文章

  1. android x86 vulkan,【图片】预告贴,准备同步AndroidIA源码,貌似支持Vulkan【androidx86吧】_百度贴吧...
  2. 爬虫:通过滑动或者点触验证码的方法及实现(点触+滑动)
  3. java图片转成字符串_JAVA将图片(本地或者网络资源)转为Base64字符串,将base64字符串存储为本地图片...
  4. vue做混合式app_Vue+原生App混合开发手记#1
  5. OpenCV图像或视频显示在VC对话框中的方法
  6. Android系统(133)---Google Play Store无法搜索应用或提示应用不兼容,此类问题该如何定位及分析
  7. 使用docker安装设置oracle
  8. linux的虚拟内存是4G,而每个进程都有自己独立的4G内存空间,怎么理解?
  9. Ubuntu下TP5隐藏入口文件
  10. linux vim删除单个字符串,LINUX vim替换字符串指令
  11. cad字体安装_1.1.2 CAD篇之字体库设置
  12. 《AutoCAD全套园林图纸绘制自学手册》一2.4 文件管理
  13. ofo押金未退仍在自动续费上热搜,曾经的明星公司是怎么黄的?
  14. 股票学习-量柱和k线-第六天
  15. NPOI设置Excel下拉选项
  16. 各类文件的文件头尾总结
  17. 【卡顿检测】深入理解
  18. Angular2 网站 SEO 攻略
  19. Python入门到放弃系列一
  20. 特殊监管区解决方案,高等学历继续教育及高职扩招综合管理平台服务技术功能详解

热门文章

  1. oracle expdp ora39070,expdp时出错:ORA-39070: Unable to open the log file.
  2. kubernetes in action - Replication Controller
  3. Pyhton 单行、多行注释方法
  4. redis服务器防止入侵,加ip,密码限制
  5. 数据分析平台搭建案例
  6. Robot Framework 使用1-环境配置及简单网站兼容性测试(转)
  7. servlet会话技术
  8. 编程题:带参数的宏定义来实现,求圆的周长和面积。
  9. 数学笔记--初等数学
  10. 全国计算机技术与软件专业技术资格(水平)考试徽标