在 scikit-learn 中使用交叉验证时绘制精确率-召回率曲线

2024-01-07

我正在使用交叉验证来评估分类器的性能scikit-learn我想绘制精确率-召回率曲线。我发现一个例子 http://scikit-learn.org/stable/auto_examples/plot_precision_recall.html在 scikit-learn 网站上绘制 PR 曲线,但它不使用交叉验证进行评估。

使用交叉验证时,如何在 scikit learn 中绘制精确率-召回率曲线?

我执行了以下操作,但我不确定这是否是正确的方法(伪代码):

for each k-fold:

   precision, recall, _ =  precision_recall_curve(y_test, probs)
   mean_precision += precision
   mean_recall += recall

mean_precision /= num_folds
mean_recall /= num_folds

plt.plot(recall, precision)

你怎么认为?

Edit:

它不起作用,因为大小precision and recall每次折叠后的数组都不同。

anyone?


不要在每次折叠后记录精度和召回值,而是存储预测在每次折叠后的测试样品上。下一个,collect所有测试(即袋外)预测以及计算精度和召回率。

 ## let test_samples[k] = test samples for the kth fold (list of list)
 ## let train_samples[k] = test samples for the kth fold (list of list)

 for k in range(0, k):
      model = train(parameters, train_samples[k])
      predictions_fold[k] = predict(model, test_samples[k])

 # collect predictions
 predictions_combined = [p for preds in predictions_fold for p in preds]

 ## let predictions = rearranged predictions s.t. they are in the original order

 ## use predictions and labels to compute lists of TP, FP, FN
 ## use TP, FP, FN to compute precisions and recalls for one run of k-fold cross-validation

在一次完整的 k 倍交叉验证运行中,预测器对每个样本进行一次且仅有一次的预测。给定 n 个样本,您应该有 n 个测试预测。

(注意:这些预测与训练预测不同,因为预测器对每个样本进行预测而之前没有见过它。)

除非你正在使用留一交叉验证,k 折交叉验证通常需要对数据进行随机划分。理想情况下,你会做repeated (and 分层) k 折交叉验证。然而,结合不同轮次的精确率-召回率曲线并不简单,因为你cannot与 ROC 不同,在精确回忆点之间使用简单的线性插值(参见戴维斯和戈德里奇 2006 http://pages.cs.wisc.edu/~jdavis/davisgoadrichcamera2.pdf).

我个人计算过AUC-PR使用 Davis-Goadrich 方法在 PR 空间中进行插值(随后进行数值积分),并使用来自重复分层 10 倍交叉验证的 AUC-PR 估计值来比较分类器。

为了得到一个漂亮的图,我展示了其中一轮交叉验证的代表性 PR 曲线。

当然,还有许多其他评估分类器性能的方法,具体取决于数据集的性质。

例如,如果数据集中(二进制)标签的比例没有倾斜(即大约 50-50),您可以使用更简单的 ROC 分析和交叉验证:

收集每个折叠的预测并构建 ROC 曲线(如前所述),收集所有 TPR-FPR 点(即取所有 TPR-FPR 元组的并集),然后绘制具有可能平滑的组合点集。或者,使用简单线性插值和复合梯形方法进行数值积分来计算 AUC-ROC。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 scikit-learn 中使用交叉验证时绘制精确率-召回率曲线 的相关文章

  • 查找两个字典的匹配键值对

    检查一个字典的键值对是否也存在于其他字典中的最有效方法是什么 假设我有两个字典dict1 and dict2这两个字典有一些共同的键值对 我想找到这些并打印出来 做到这一点最有效的方法是什么 请建议 一种方法是 d inter dict k
  • pandas DataFrame:获取上个月缺少交易且无法移位()的值

    有没有办法在不生成虚拟行的情况下实现这一点 这是我的数据源 Group Store Month Revenue Group1 A 201611 10 Group1 A 201612 20 Group1 A 201701 30 Group1
  • numpy:与索引数组有效求和

    假设我有 2 个矩阵 M 和 N 都有 gt 1 列 我还有一个索引矩阵 I 有 2 列 1 列代表 M 一列代表 N N 的索引是唯一的 但 M 的索引可能出现多次 我想要执行的操作是 for i j in w M i N j 除了 fo
  • SparkSession 初始化需要很长时间

    SparkSession 初始化需要很长时间才能成功 这是我的代码 import findspark findspark init import pyspark from pyspark sql import SparkSession sp
  • SQLAlchemy 在 MySQL 上使用什么列类型作为“文本”?

    我的总体用例是试图确定我是否可以编写一个与数据库无关的 至少支持 Postgres 和 MySQL 存储一些大数据作为原始文本 认为 500MB 作为粗略的理论上限 基于这个答案 https stackoverflow com a 2557
  • 使用 scikit-learn 在朴素贝叶斯分类器中混合类别数据和连续数据

    我正在使用 Python 中的 scikit learn 开发分类算法来预测某些客户的性别 除此之外 我想使用朴素贝叶斯分类器 但我的问题是我混合了分类数据 例如 在线注册 接受电子邮件通知 等 和连续数据 例如 年龄 长度 会员资格 等
  • 如何使用 matplotlib 面向对象的 API 设置轴刻度和刻度标签

    我需要一些在 Python2 7 下的 Matplotlib pyplot 中绘图的帮助 我想生成一个具有以下 x 轴的图 x 轴应该是这样 https i stack imgur com zcosX jpg 我到目前为止通过使用myaxi
  • 为什么 Numpy 创建零数组比用零替换现有数组的值要快得多?

    我有一个用于跟踪各种值的数组 数组是2500x1700尺寸上 所以不是很大 在会话结束时 我需要将该数组中的所有值重置为零 我尝试创建一个新的零数组并将数组中的所有值替换为零 并且创建一个全新的数组要快得多 代码示例 for in sess
  • 安装 Ta-lib 会产生 gcc 错误

    当我尝试在我的 mac 上将 Ta lib 作为全局包安装时 出现 gcc 错误 我收到以下错误 gcc Wno unused result Wsign compare Wunreachable code DNDEBUG g fwrapv
  • argparse add_argument 别名

    有没有办法使用 argparse 创建别名 例如 我想做这样的事情 parser add argument foo parser add argument alias bar foo 也就是说 使用 bar应该相当于使用 foo 您可以简单
  • 使用存储的密钥作为环境变量

    我有一个秘密密钥存储在 GCP 的秘密管理器中 我们的想法是使用该密钥通过云功能获取预算列表 现在 我可以从代码中访问该密钥 但我面临的问题是我需要使用该密钥设置一个环境变量 这是我添加密钥的方式 如果您的本地目录中有该文件 但是还有其他方
  • PyGTK TreeView 中的自动换行

    如何在 PyGTK TreeView 中自动换行文本 gtk TreeView 中的文本是使用 gtk CellRendererText 渲染的 文本换行归结为在单元格渲染器上设置正确的属性 为了让文本换行 您需要设置wrap width单
  • iter(fp.readline, '') 中的行而不是 fp 中的行:

    我读了内置函数iter的例子在内置函数 Python 3 7 0 文档 https docs python org 3 library functions html iter with open mydata txt as fp for l
  • matplotlib 中矩形面片之间存在不需要的空间

    以下代码绘制两个红色矩形 红色矩形应该彼此相邻 之间没有空间 在 python 图中 这是可以的 在导出的 pdf 中 矩形之间有一个细长但明显的空白 有什么方法可以解决这个问题吗 import matplotlib pyplot as p
  • 我以为 Python 通过引用传递了所有内容?

    采取以下代码 module functions py def foo input new val input new val module main py input 5 functions foo input 10 print input
  • 在IPython笔记本中自动播放声音

    我经常在 IPython 笔记本中运行长时间运行的单元 我希望笔记本在单元完成执行时自动发出蜂鸣声或播放声音 有没有办法在 iPython 笔记本中执行此操作 或者我可以在单元格末尾放置一些命令来自动播放声音 我正在使用 Chrome 如果
  • 无法使用 Python 3 编写的 gzip.open() 将压缩文件上传到云存储

    当我尝试在 Cloud Shell 实例上使用 python 脚本将压缩的 gzip 文件上传到云存储时 它总是上传一个空文件 这是重现错误的代码 import gzip from google cloud import storage s
  • 类型错误:对于仅使用浮点数的函数,返回数组必须是 ArrayType

    这个实在是难倒我了 我有一个计算单词权重的函数 我已经确认 a 和 b 局部变量都是 float 类型 def word weight term a term freq term print a type a b idf term prin
  • Python tkinter:在组合框中使用“文本变量”似乎没用

    使用textvariable在 tkinter 中创建组合框时的属性似乎完全没用 有人可以解释一下目的是什么吗 我查看了 Tcl 文档 它说textvariable用于设置默认值 但看起来在 tkinter 中您只需使用 set方法来做到这
  • 关闭 IPython Notebook 中的自动保存

    我正在寻找一种方法来关闭 iPython 笔记本中的自动保存 我已经通过 Google Stack Overflow 搜索看到了有关如何打开自动保存的参考资料 但我想要相反的内容 关闭自动保存 如果这是可以永久设置的东西而不是在每个笔记本的

随机推荐

  • 防止添加新的 csproj 将 AnyCPU 添加回解决方案文件

    我们有一个解决方案 我们只想拥有x86平台 但每次我们向解决方案添加新项目时 它都会添加AnyCPU返回解决方案中的每个项目 删除所有的内容是很乏味的AnyCPU解决方案文件中的行 因为解决方案中有 70 多个项目 他们有什么方法可以配置
  • 如何将 ViewModel 属性作为模型传递给部分视图?

    我有一个名为 Log ViewModel 的 ViewModel 其中有 3 个属性 如下所示 public class LogViewModel public IEnumerable
  • laravel 4 中数组表单字段的验证错误

    我们如何验证数组形式的表单字段 看一下下面的代码 用户手机型号 public static rules array phonenumber gt required numeric isPrimary gt in 0 1 用户控制器 vali
  • 图表对象的粘贴方法在 Excel 2016 中未按预期工作

    我有一个代码 最近更新到 Excel 2016 显示出一些奇怪的故障 经过大量调试后 我发现其中一个错误是由 Excel 未能正确处理图像引起的 下面的代码有一个简单的目的 将工作表的已使用部分复制到图像 然后将该图像作为注释插入工作表中
  • 有什么方法可以控制 AVSpeechSynthesizer 输出到哪个音频通道?

    我想使用 AVSpeechSynthesizer 在多通道环绕声设置的一个音频通道上输出声音 例如 在 5 1 系统中 我希望它仅在右环绕声道上输出 现在我有 let synthesizer AVSpeechSynthesizer let
  • 如何在 iPhone 项目中包含 FFMpeg 库

    我在用iFrameExtractor提取帧 但是当我克隆该项目时 我发现 ffmpeg 框架中的几个文件丢失了 我努力尝试包含丢失的文件 但无法做到这一点 谁能解决这个问题或者给我链接FrameExtractor包含所有lib文件的类FFM
  • 外部触发 .NET 垃圾收集

    有没有办法从另一个进程或从 WinDBG 内部触发 NET 进程中的垃圾收集 当您跨越本机 托管边界时 有一些托管调试助手会强制进行集合 并且AQTime http en wikipedia org wiki AQtime似乎有按钮表明它可
  • RequiresApi 与 TargetApi Android 注释

    有什么区别RequiresApi and TargetApi 科特林示例 RequiresApi api Build VERSION CODES M TargetApi Build VERSION CODES M class Fingerp
  • 使用 -vsync 0 选项时,从 ffmpeg 中的 mp4 提取帧到 jpg 格式会产生错误

    我正在尝试使用 ffmpeg 从 mp4 视频中提取所有帧 我使用以下命令 ffmpeg i Users raimundbuehler recordings 2022 01 24 000 exports 001 world mp4 vsyn
  • Jersey 客户端 API 中的内容 MD5

    我正在尝试在使用 Jersey Client API 创建的请求上设置 Content MD5 标头 我创建了 ClientFilter 它实现了另一个适配器 类似于 GZipFilter 的工作方式 像这样 public class Co
  • EB CLI 参数化 CI 部署的部署工件名称

    使用 EB CLI 部署预构建的应用程序包 相关的 config yml 部分如下所示 deploy artifact Website zip 然而 CI 构建会创建一个文件 其中添加了版本 Website 1 5 44 zip 是否有任何
  • unicode和丹麦语之间的utf8排序规则差异

    嗯 你好 我正在更改数据库的字符集latin1 sweedish ci to utf8 我一直用utf8 danish ci因为我认为它最接近挪威的字符风格 但是关于utf8 general ci and utf8 unicode ci 前
  • Windows 也像 Linux 一样有 Inode 编号吗?

    Windows 也像 Linux 一样有 Inode 编号吗 Windows内部如何管理文件 使用的术语与您在 Unix 世界中找到的术语有点不同 但是就拥有唯一标识文件的整数而言 NTFS 和某些 Windows API 公开了类似的 文
  • 在 foreach 循环中取消设置数组值[重复]

    这个问题在这里已经有答案了 我设置了一个 foreach 循环来遍历我的数组 检查某个链接 如果找到 则从数组中删除该链接 My code foreach images as image if image http i27 tinypic
  • 无法重新启用 Google Cloud AppEngine 应用程序

    我曾经在我的项目上运行 NodeJS 灵活环境 AppEngine 应用程序 后来禁用了它 现在我正在尝试将基于 Java 的标准环境 AppEngine 应用程序部署到同一个项目 当我尝试部署时出现以下错误 INFO GCLOUD ERR
  • Flutter 字符串插值中的不间断空格

    我有时需要在 Flutter Text 小部件中使用不间断的空格 例如 显示更多 链接或带有 50 km h 等单位的数字 下面的代码工作正常 但看起来过于复杂 const int nbsp 0x00A0 from https pub de
  • V-data-table 通过 v-slot:body 控制扩展项

    vuetify 2 0 v data tables 的文档没有指定如何通过 v slot body 控制扩展项 我有一个需要用主体 V 型槽指定的表格 并且想要使用扩展功能 预期的行为是单击表中一列中的按钮 该行将在下面展开 我使用 v s
  • Android 导入 Facebook SDK

    我已经尝试在我的应用程序中添加 Facebook 登录 共享选项近 3 4 天 但我完全无法做到这一点 我在每一步中不断遇到错误 我一直在关注很多教程 这是其中之一 https developers facebook com quickst
  • UIButton 可以同时带有图像和文本吗?

    我有一个宽度为 200 高度为 270 的按钮 我想在同一个按钮上显示文本和图像 不作为该文本的背景图像 相反 我想在同一个按钮上显示高度为 120 的文本和高度为 150 的图像 怎么做 您可以使用此代码 它将满足您的目的 h file
  • 在 scikit-learn 中使用交叉验证时绘制精确率-召回率曲线

    我正在使用交叉验证来评估分类器的性能scikit learn我想绘制精确率 召回率曲线 我发现一个例子 http scikit learn org stable auto examples plot precision recall htm