PR曲线以及ROC曲线的绘制

本文介绍了机器学习中的PR曲线和ROC曲线,包括它们的基本概念、作用和计算方式。PR曲线以查全率为横轴,查准率为纵轴,用于评估分类器性能,而ROC曲线通过TPR和FPR展示了学习器的性能。同时,文章提供了PR曲线和ROC曲线的代码实现,并使用乳腺癌数据集进行示例,帮助读者深入理解这两种评价标准。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

机器学习基本参数的学习以及PR曲线以及ROC曲线的绘制

基本参数

**过拟合:**学习器把训练样本训练的太好了,把训练样本自身一些特点当成所有潜在样本都具有的一些性质。(用于评估模型的泛化能力)

造成的原因:

​ 算法学习能力比较强

怎么解决呢?

​ 增加训练种类、增加训练集(训练集多了,总不可能全学会了吧)

**欠拟合:**学习器训练的不太好,一般性质都没训练出来。(用于评估模型的泛化能力)

造成的原因:

​ 算法学习能力低下

怎么解决呢?

​ 优化算法、增大训练次数(我算法好一点学多一点、或者我不搞算法,我多两次总会好点)

直观比较如下图:
在这里插入图片描述

**性能度量:**衡量模型泛化能力的评价标准。

错误率: 分类错误的样本数量占样本总数的比例。

精度: 预测正确的样本数量占样本总数的比例。


​ **查准率:**正确预测的样本数量占预测正确的样本的比例 (单位1:预测正确的样本数量)

​ **查全率:**正确预测的样本数量占正确样本的比例 (单位1:正确的样本)

对于这两个度量,一般来说一个高了另一个就低了。


在这里插入图片描述

误差: 学习器的实际预测输出与样本的真实输出之间的差异。

​ 训练误差:学习器在训练集上的误差。

​ 泛化误差:新样本的误差。

几种曲线的介绍

PR曲线

定义:以查全率为横轴,查准率为纵轴的二维坐标轴

作用:直观显示学习器在样本总体上的查全率、查准率,在进行比较是可以比较两个曲线与两个坐标轴之间的面积来判断哪一个学习器比较好(面积大的好)。

例图如下:
在这里插入图片描述

ROC曲线(受试者工作特征)

根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为整理进行预测,每次计算TPR和FPR作为横纵坐标从而绘制得到的二维坐标图。(TPR和FPR计算公式如下)

在这里插入图片描述

AUC:ROC曲线与横纵坐标轴的面积,进行判断两个曲线的优劣情况。

PR曲线以及ROC曲线代码实现

PR曲线

这里借鉴一篇博客中PR曲线的实现;

博客地址

关于数据集:乳腺癌数据集的原型是一组病灶造影图片,该数据集的提供者在收集到这些图片的初期,首先对图片进行了分析,从每张图片中提取主要的特征,然后编写图片处理程序,从图片中抽取这些特征。本数据集只关注了10个原始特征,然后又求得每个原始特征的标准差和最大值作为两个衍生特征,这样,最终数据集呈现出的效果便是30个特征。是一个典型的二分类问题!(数据集描述来源:https://blog.youkuaiyun.com/m0_54510474/article/details/124581706)

# 乳腺癌数据集
from sklearn.metrics import precision_recall_curve
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_breast_cancer
import matplotlib.pyplot as plt
data = load_breast_cancer()    # load_breast_cancer()是sklearn的数据集,下面的X&
计算AUC值和绘制ROC曲线通常需要先将混淆矩阵转化为真正例率(TPR)和假正例率(FPR)数据,然后使用一些库如Scikit-learn(Python)来完成。以下是一个简单的例子: 假设我们有一个二分类任务,混淆矩阵如下: | | 实际正类 | 实际负类 | |----------|---------|---------| | 预测正类 | TP | FP | | 预测负类 | FN | TN | 首先,我们需要计算TPR(召回率)和FPR: ```python true_positives = cm[1, 1] false_positives = cm[0, 1] true_negatives = cm[0, 0] false_negatives = cm[1, 0] # TPR = TP / (TP + FN) recall = true_positives / (true_positives + false_negatives) # FPR = FP / (FP + TN) fallout = false_positives / (false_positives + true_negatives) ``` 然后可以使用`sklearn.metrics.roc_curve`生成FPR和TPR的数组,接着用`sklearn.metrics.auc`计算AUC: ```python fpr, tpr, _ = sklearn.metrics.roc_curve(y_true, y_score) # y_true是实际类别,y_score是预测概率 auc = sklearn.metrics.auc(fpr, tpr) ``` 最后,可以使用`matplotlib`或其他绘图库ROC曲线: ```python import matplotlib.pyplot as plt plt.plot(fpr, tpr, label=f'AUC = {auc:.2f}') plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver Operating Characteristic (ROC) curve') plt.legend() plt.show() ``` 注意这里`y_true`和`y_score`分别是真实的标签和模型预测的概率。如果你已经有这些数据,就可以直接应用以上代码。如果混淆矩阵来自于某个分类器的输出,你需要先将其转换为这种形式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值