机器学习——性能度量(PR曲线和ROC曲线)

今天由我来向大家介绍何为PR曲线和ROC曲线,以及如何绘制。那么在我介绍之前,我们先来了解何为性能度量。

简介

性能度量:衡量模型泛化能力的评价标准(反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果。模型的好坏,不仅取决于算法和数据,还决定于任务需求。)

一、PR曲线

在介绍如何绘制PR曲线之前,我们先来介绍什么是PR曲线以及PR曲线的作用以及什么是查准率和查全率。

1.1PR曲线的定义

P为precision即精准率(查准率),R为recall即召回率,所以P-R曲线是反映了准确率与召回率之间的关系。一般横坐标为recall,纵坐标为precision。

1.2PR曲线的作用

PR曲线常被用在信息提取领域,同时当我们的数据集中类别分布不均衡时我们可以用PR曲线代替。是数据挖掘中常见的评价指标。

1.3如何计算P值和R值

介绍之前我们先来了解何为混淆矩阵。

结合老师上课所讲的好瓜坏瓜的例子,如下图所示,我们能知道如何计算P值和R值

按照官方一点的说法,我们要先了解真正例 (true positive)、假正例 (false positive)、真反倒 (true negative) 、假反例 (false negative),如下图所示

真实情况                              预测结果
                  正例                   反例
    正例                 TP(真正例)                  FN(假反例)
    反例                 FP(反正例)                  TN(真反例)

查准率P和查全率R由图可得

P=TP/(TP+FP)

R=TP/(TP+FN)

P和R的定义如下:

查准率: 预测正例中真正例所占的比例。
查全率: 预测真正例占正例的比例。

1.4如何理解PR曲线

由图可知如何比较PR曲线的优劣性:

1、曲线越靠近右上方,性能越好。(例如上图黑色曲线)

2、当一个曲线被另一个曲线完全包含了,则后者性能优于前者。(例如橘蓝曲线,橘色优于蓝   色)

3、如果曲线发生交叉(黑橘曲线),判断依据:

        3.1:根据曲线下方面积大小判断,面积更大的更优于面积小的。

        3.2:根据平衡点F判断:平衡点是查准率与查重率相等时的点。F计算公式为         F=2*P*R/(P+R),F值越大,性能越好。

1.5绘制PR曲线

导入需要的包

import matplotlib
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import precision_recall_curve

加载数据集,进行训练

y_true = np.array([1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0])
y_scores = np.array([0.9, 0.75, 0.86, 0.47, 0.55, 0.56, 0.74, 0.62, 0.5, 0.86, 0.8, 0.47, 0.44, 0.67, 0.43, 0.4, 0.52, 0.4, 0.35, 0.1])
precision, recall, thresholds = precision_recall_curve(y_true, y_scores)

PR曲线的绘制

plt.figure("P-R Curve")
plt.title('Precision/Recall Curve')
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.plot(recall,precision)
plt.show()

运行结果

二、ROC曲线

在介绍如何绘制ROC曲线之前,我们先来介绍什么是ROC曲线以及ROC曲线的作用以及什么是真正利率和假正利率。

2.1ROC曲线的定义

ROC全称Receiver Operating Characteristic,即受试者工作特征,坐标图式的分析工具。ROC 曲线的纵轴是"真正例率" (True Positive Rate,简称 TPR),横轴是"假正例率" (False PositiveRate, FPR)。

2.2ROC曲线的作用

在机器学习和数据挖掘领域同样是对学习器的泛化性能进行评估。

2.3如何计算TPR和FPR

真正率TPR

TPR=TP/(TP+FN)

假正率FPR

FPR=FP/(TN+FP)

2.4如何理解ROC曲线

当ROC曲线接近于(1,0)点,表明模型泛化性能越好,接近对角线时,说明模型的预测结果为           随机预测结果。

由图可知如何比较ROC曲线的优劣性:

1、当一个曲线被另一个曲线完全包含了,则后者性能优于前者。

2、ROC曲线下方的面积(AUC)可以用来作为评估模型模型性能的指标。如当两个模型的ROC曲线发生交叉,则很难说哪一个模型更好,这时候可以用AUC来作为一个比较合理的判据。ROC曲线一般都处于y=x这条直线的上方,所以取值范围在0.5和1之间,使用AUC作为评价指标是因为ROC曲线在很多时候并不能清晰地说明哪个分类器的效果更好,而AUC作为一个数值,其值越大代表分类器效果更好。

2.5绘制ROC曲线

导入需要的包

import matplotlib
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve

加载数据集,进行训练

# y: 样本标签
# scores: 模型对样本属于正例的概率输出
y = np.array([1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0])
scores = np.array([0.9, 0.75, 0.86, 0.47, 0.55, 0.56, 0.74, 0.62, 0.5, 0.86, 0.8, 0.47, 0.44, 0.67, 0.43, 0.4, 0.52, 0.4, 0.35, 0.1])
fpr,tpr, thresholds = metrics.roc_curve(y,scores)

ROC曲线的绘制

plt.figure("ROC Curve")
plt.title('TPR/FPR Curve')
plt.xlabel('FPR')
plt.ylabel('TPR')
plt.plot(fpr,tpr)
plt.show()

运行结果

三、对比PR曲线和ROC曲线

1、PR曲线因为涉及到精确率precision计算,容易受到样本分布的影响。而ROC曲线本质上是正样本或者负样本召回率计算,不收样本分布的影响。

2、ROC曲线主要应用于测试集中的样本分布的较为均匀的情况,且当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。

3、实际问题中,正负样本数量往往很不均衡,PR曲线的变化就会非常大,而ROC曲线则能够更加稳定地反映模型本身的好坏。

4、当正负样本比例失调时,ROC曲线变化不大,此时用PR曲线更加能反映出分类器性能的好坏。

问题及总结

问题及解决过程

运行代码后显示没有matplotlib库,原因是电脑的python安装了matplotlib库,但运行的python环境未安装matplotlib库,在运行的python环镜中安装matplotlib库后运行成功。

总结

这次实验我学习了PR曲线和ROC曲线,包括它们的定义、作用,并学会了如何绘制他们,这两种曲线与我们的生活息息相关,我们可以运用它们解决如挑西瓜之类的问题。虽然实现了PR曲线和ROC曲线的绘制,但仍有很多不足,还不能熟练的运用这两种曲线,仍要加强对python的使用,总的来说是一次收获满满的实验。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值