当前位置:网站首页 > Vue.js开发 > 正文

etap安装教程(etap12.6安装)



原文:NeptuneAI Blog

协议:CC BY-NC-SA 4.0

原文:https://web.archive.org/web/https://neptune.ai/blog/experiment-tracking-tools-in-project-management-setup

在机器学习中,工程师倾向于做大量的实验(至少可以这么说)。正因为如此,实验跟踪是每个 ML 项目必不可少的一部分。我们需要一个工具,它不仅可以为我们做跟踪,还可以轻松地集成到我们现有的项目管理设置中,这样其他团队成员就可以跟踪工作流。

海王星已经提出了一个实验跟踪的解决方案,我们的团队已经对其进行了相当广泛的开发。我们最近决定将 Neptune 更多地整合到我们的工作流程中,并将其扩展到日常活动,如日常会议和每周冲刺。

这使得我们的整个项目流程对整个团队来说更加透明和易于理解,而我们,ML 工程师,继续享受 Neptune 的跟踪能力。

双赢的解决方案?对我来说,绝对是!我会告诉你我们到底做了什么,有什么好处。

每个冲刺都有一个目标。我们的团队每两周召开一次会议,会上我们设定了 sprint 时间段要实现的目标。

这些目标在吉拉中成为高级任务——我们管理软件开发的工具。每个任务都有一个唯一的 ID 与之相关联,所以我们可以使用这个 ID 来引用一个特定的任务。

让我们考虑一个我最近参与的真实 ML 项目的例子。下面是在吉拉新建任务的页面外观:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unique task ID is shown for a newly created sprint task

当我们决定一个任务并在吉拉创建它时,我们接着在 Neptune 中设置一个新项目,并通过 ID 将它链接到最初的吉拉任务。我在 Neptune 中创建的项目是这样的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Project created in Neptune and linked to Jira via the unique project ID

现在,吉拉和海王星是连在一起的。我们在海王星分配了一个特定的项目,旨在解决吉拉的任务中描述的一个发展问题。

项目的开发阶段

对于开发环境,我们的 ML 团队倾向于在 Jupyter 笔记本上工作。为了跟踪整个项目工作流程,在这些笔记本中跟踪进度是非常重要的。

当 Neptune 链接到 Jupyter 时,它让我们对笔记本进行检查点操作。这些检查点被上传到 Neptune 中的项目页面,在 Neptune 的 UI 中如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Checkpoints logged and listed for a jupyter notebook. 
Screenshot from Neptune’s UI.

在每天的会议上,我们看着这些检查站。它使开发过程变得可理解和透明。查看上面的截图,了解我的模型开发工作流程是如何进行的,从针对输入数据的探索性数据分析 (EDA)开始,继续创建数据生成器,以日志包含结束。

另外,请注意日期和时间信息是如何显示在检查点旁边的。这使得时间线清晰可循。必要时,如果需要详细的进度信息,我们可以比较两个检查点(两个笔记本)。使用 Neptune 的跟踪能力使项目易于管理和预测。

如果您喜欢在 IDE 中开发,也可以完成相同的跟踪过程。您的脚本可以像我们在 Jupyter 笔记本上看到的那样进行存储和比较。

项目的假设测试阶段

当 ML 项目的开发阶段完成时,我们通常会得到一个基线模型,它显示了一些性能,但很少是最好的性能。现在是时候测试假设,并检查是否有任何其他模型配置可能会导致我们更好的性能,或更优的解决方案。

假设检验是每个 ML 项目必不可少的一部分,Neptune 以一种简单方便的方式追踪实验结果。跟踪记录可以用作日志来建立对 ML 项目的管理。让我向您展示我们如何将 Neptune 整合到我们的整体管理工作流程中。

吉拉让我们做子任务,所以每个假设检验都从为它创建的子任务开始。子任务位于原来的高级任务之下,并属于它。我的项目看起来是这样的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Subtask creation for a hypothesis testing.
Example from Jira.

如果子任务作为一个单独的页面打开,它在吉拉的样子如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Subtask page within Jira

请注意,一个假设(上面显示为吉拉的一个子任务)通过一个链接与海王星所创建的一个独特的实验相联系。我们这样做是为了方便,因为它可以帮助我们在吉拉和海王星之间导航。

另一方面,如果我们去海王星,看看实验页面,这是我们会看到的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Experiments page in Neptune

看一下红色矩形中的记录。这是我们之前看到的子任务的实验。注意,这个实验有一些与之相关的标签。如果我们阅读这些,我们会注意到一些有趣的信息:

  • 吉拉的子任务标识号
  • 冲刺数

子任务 ID 帮助我们保持特定实验和吉拉任务之间的联系,而 sprint 数字提醒我们处理这个特定假设时的 sprint 是什么。

您可能会想到对您的特定情况有用的任何其他标记。关键的一点是你可以把它放在海王星的实验旁边,它真的简化了整个跟踪过程。

顺便说一句,如果你想知道如何给实验添加标签,这是我的 jupyter 笔记本中的一个单元格,我在这里添加标签:

 

CI/CD 应用于机器学习越来越受到关注。我们需要一套实践和工具,可以用来增强项目开发和简化未来的部署。

由于它的记录能力,海王星也覆盖了我们感兴趣的这个区域。Neptune 可以记录和存储一些最重要的工件,这些工件不仅是部署阶段所需要的,也是复制我们所做的事情所需要的。此外,所有这些工件和日志都可以附加到一个特定的实验中,为它提供所需的核心信息。

让我们看一个我们团队广泛使用这些能力的例子。首先,由 Neptune 跟踪并显示为图表的损失和指标值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Metrics and loss plots displayed in Neptune for a particular experiment.
Can be tracked for both training and validation sets
.

接下来,我们可以随时提醒自己,我们使用了哪些模型参数和架构来获得这样的模型性能。Neptune 在 parameters 选项卡下为我们存储了这些信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Model architecture and parameters stored in Neptune for a particular experiment

每个机器学习工程师可能遇到的问题就是数据集版本控制。Neptune 允许我们上传特定实验的数据集信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Dataset information stored in Neptune

我个人主要处理图像数据,更喜欢记录的不是图像本身,而是包含我需要的所有必要信息的数据框(比如图像的路径和标签)。这些数据帧可以通过编程方式从 Neptune 获取,供以后使用。

作为一名计算机视觉工程师,我也喜欢尝试图像增强。我尝试了多种增强方法,并且需要跟踪我当前的增强设置。Neptune 允许我将增强信息(作为代码脚本)附加到特定的实验中,因此它不会丢失,并且可以恢复。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Augmentation information attached to the experiment

模型检查点也可以上传和存储。我通常会上传某个特定实验的最佳检查点,这样我就可以在以后需要的时候获取它。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Best checkpoint for an experiment is stored

如果我们想提醒自己模型性能能力,我们不仅可以查看损失和度量值,还可以查看我通常构建的性能图,这些图也附在实验运行中。Neptune 允许我上传这些图,并将它们保存在实验页面中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Model performance information stored for a particular experiment.
Loss value, metrics value and performance plots are included
.

在上面截图的最底部,你可能会注意到我附上的两张图:roc-auc 曲线和混淆矩阵图。图表、指标和损失值将为我提供关于特定实验运行所实现的模型的全面信息。

最后但同样重要的是,我倾向于包含完整推理调用的代码,并将其附加到最佳实验运行中。稍后,当模型部署的时候,我的队友可以获取最佳的检查点和推理代码,并使用它来设计可以部署的服务。很漂亮,对吧?

如果您的项目中有机器学习部分,您已经看到了您的项目管理设置如何受益于 Neptune 集成。

它提供了跟踪功能,不仅可以帮助您的 ML 团队进行开发,还可以帮助您进行整体项目管理,让您可以看到每天或冲刺阶段的进度。

您还看到了一个广为接受的软件开发工具吉拉是如何以一种简单方便的方式与 Nepune 连接起来的。

最后,海王星可以为你储存大量的艺术品。所有这些结合起来将使你的项目具备 CI/CD 能力,并使你的项目具有完全的可复制性。

可以帮助您进行项目管理的其他工具:

1.https://www.ganttproject.biz/

我们这里有什么:

  • 甘特图
  • 里程碑跟踪
  • 完成百分比跟踪
  • 计划图编制
  • 资源管理
  • 任务管理

2.https://www.meisterlabs.com/

我们这里有什么:

  • 任务跟踪
  • 任务规划
  • 任务调度
  • 思维导图
  • 计划图编制
  • 项目时间跟踪
  • 按项目跟踪时间
  • 工作流程管理
  • 实时报告
  • 活动仪表板
  • 标签和关键词
  • 状态跟踪
  • 项目跟踪
  • 项目工作流程
  • 协作工作空间
  • 实时通知

3.https://www.wrike.com/vj/

我们这里有什么:

  • 文件共享
  • 子任务
  • 进度报告
  • 品牌工作空间
  • 电子邮件到任务同步
  • 为假期、病假等定制日历。
  • 工作负载视图和调度
  • 日历与 Google 和 iCalendar 的集成
  • android 和 iphone 应用程序 api
  • 用户组
  • 共享工作区
  • 任务规划
  • 任务调度
  • 任务管理
  • 活动仪表板
  • 文件管理
  • 文件传输
  • 实时活动流
  • 报告和统计
  • 与任务相关的讨论
  • 自动化周期性任务和项目
  • 第三方集成
  • 时间线管理
  • 日历管理
  • 项目时间跟踪
  • 按项目跟踪时间
  • 到期日跟踪
  • 资源管理
  • 预算跟踪
  • 活动跟踪
  • 活动管理
  • 电子邮件和日历同步
  • 同步管理
  • 项目跟踪
  • 可配置工作流
  • 工作流程管理
  • 仪表板创建
  • 用户访问控制
  • 权限管理
  • 数据备份
  • 基于角色的权限
  • 密码管理
  • 数据加密
  • 安全数据存储
  • 自动备份
  • 实时报告
  • 4.https://www.orangescrum.com/

我们这里有什么:

包括托管

  • 基于网络
  • 仪表盘
  • 每日追赶
  • 任务模板
  • 电子邮件和实时支持
  • Google Drive 和 Dropbox
  • 免费试用
  • 开源版本
  • 多用户
  • 通过电子邮件回复
  • 桌面通知
  • 无限项目
  • 日历
  • 看板视图
  • 对话线索
  • 票务/工作流程
  • 时间跟踪
  • 活动
  • 电子邮件通知
  • 5.https://freedcamp.com/

我们这里有什么:

错误跟踪

  • 合作
  • 文件共享
  • 问题管理
  • 里程碑跟踪
  • 计划图编制
  • 状态跟踪
  • 任务管理
  • 时间和费用跟踪
  • Time & Expense Tracking

原文:https://web.archive.org/web/https://neptune.ai/blog/experiment-tracking-vs-ml-model-management-vs-mlops

机器学习模型从想法到生产需要相当多的步骤。这些步骤可能会变得太复杂、太快。

在本文中,我们将重点剖析模型部署的三个主要方面。

这些是:

  • 实验跟踪
  • 机器学习模型管理
  • 机器学习操作

在文章的最后,你会知道三者之间的区别,以及各自的各个部分。

让我们开始吧。

部署机器学习模型涉及一系列工具、原则和实践。它类似于 DevOps,只是它的目标是优化软件开发项目的启动方式。

在机器学习领域,这些工具和实践被称为 MLOps。一般来说,MLOps 是 DevOps 原理在机器学习中的应用。

各个 MLOps 实践可能有所不同,但在该过程中需要完成几个基本部分:

  • 开发和管理模型,
  • 部署模型,
  • 监控。

现在,我们将探讨 MLOps 的不同部分如何协同工作,以确保所有这些方面的成功。本节将重点介绍它们。

专题报道

这是一个中央存储库,提供对培训和服务功能的访问。它很重要,因为它:

  • 支持重复使用功能,而不是创建新功能,
  • 防止使用具有不同定义的相似特征,
  • 允许您提供最新的特征值,
  • 确保用于培训的功能也在模型服务期间使用。

数据版本化

当新数据可用时,机器学习模型总是可以被重新训练。当有新的培训方法时,他们也可以重新接受培训。

根据新数据重新训练模型可能会导致性能下降。在这种情况下,版本控制允许您恢复到以前的模型,并且您将知道哪个版本的数据导致了令人沮丧的性能。版本控制对于法规遵从性以及数据审计也至关重要。

ML 元数据存储

在这里,所有关于模型执行的信息都被记录下来,以帮助再现和比较。这也有助于检测异常和调试。记录的一些信息包括:

  • 用于运行管道的参数,
  • 流程的开始和结束时间,
  • 链接到管道中使用的各种工件,
  • 指向最后一个训练模型的指针,
  • 用于训练和测试集的模型评估度量,以便能够与以前的模型进行比较,
  • 谁创造了这个模型,
  • 当模型被创建时,
  • 应用的特征变换,
  • 用于创建模型的数据集。

存储模型元数据为您提供了模型搜索能力。例如,您可以根据功能、模型类型和培训日期来搜索模型。这种可搜索性支持管理、分析、实验和跟踪许多模型。

模型元数据允许您比较不同的模型,并决定将哪个模型投入生产。这对于确定团队的进展也是至关重要的,以便确定可能需要更多努力的领域。手动跟踪所有元数据会很快变成一场噩梦。幸运的是,您可以使用 ML 工具从 ML 管道中自动提取元数据,并记录下来。

这些实践和方法可以让你更快地试验和开发机器学习模型。在这一节中,我们来看看这是如何工作的。

模型服务

活动模型版本可以通过 REST API 提供给目标应用程序。其他 MLOps 系统允许您将模型下载到目标设备上。这样做的好处是,只要有新版本,模型就会在目标设备上自动更新。因此,无论何时您的模型发生变化,您都不需要发布新版本的应用程序。

你也可以为你的模型提供不同的版本,监控它们并选出最好的执行者。

模型版本控制

能够及时回到模型的某个状态是至关重要的。要做到这一点,您需要能够对模型开发的各个方面进行版本化。例如:

  • 笔记本,
  • 使用的数据集,
  • 超参数集,
  • 代码,
  • 神器。

要恢复到以前的模型,您需要能够唯一地识别每个模型实例。在生产过程中,您不能更改模型。每个模型都应该是不可变的。

在生产过程中改变模型可能会导致意想不到的行为,所以很少这样做。版本模型更常见,因为它使您能够根据需要在各种模型版本之间切换。

您可能需要新的型号版本,原因如下:

  • 模型架构变化,例如从神经网络到 Scikit-learn 线性回归的变化,
  • 超参数变化,
  • 特征添加/移除,
  • 重新训练模型。

模型监控

一旦使用了机器学习模型,就必须对其进行监控。需要监控的主要项目有两个:模型漂移生产偏斜

模型漂移是一种情况,其中被预测的项目的统计属性以无法预测的方式改变。因此,如果训练数据和预测数据的统计属性变得不可预测,模型的性能将会下降。如果你在监控,你将能够捕捉到这个问题并迅速解决它。

当离线模型的性能明显不同于服务模型的性能时,就会发生生产偏斜。这可能是由以下原因造成的:

  • 训练中的 bug,
  • 服务实现中的错误,
  • 训练数据和传递给模型的数据之间不一致。

检测模型漂移和生产偏差将确保您的模型在生产环境中按预期执行。

模型再训练

根据模型评估的信息,在需要时总是重新训练模型是很重要的。当新数据可用时,还可以重新训练该模型。

正如在最后一部分中提到的,生产模型容易产生模型漂移和生产偏差。当您在应用程序中注意到这一点时,可以用新数据重新训练模型。因此,您的生产系统应该自动检测模型漂移,并发送触发模型再训练的警报。

也就是说,一些模型可能不会改进,应该被丢弃而不是重新训练,以节省计算资源,这些资源将用于无法改进的模型。

同样,您的系统应该能够自动检测这样的场景,弃用模型,并根据新数据训练新模型。在使用这些模型的所有系统迁移到新系统之前,不推荐使用的模型应该保留在服务器上。

当重新训练模型时,应该使用规则系统。例如,只有当新模型的平均绝对误差低于前一个模型的平均绝对误差时,才应该使用新模型。在这种情况下,应该自动获取并部署新模型。还可以设置规则,以便它们检查误差和/或准确性的某个阈值。

在生产环境中实现规则之前,需要对它们进行审查。您可以在基于 Git 的系统中通过同行评审来做到这一点。这一点至关重要,因为产生错误的规则可能会导致系统停机。

开发高性能的机器学习通常需要重复几次实验。需要对这些实验进行跟踪,以确保可比性和可重复性。

为了实现这一点,需要记录实验元数据。例如代码版本、数据版本等等。正如我们之前提到的,模型管理是当模型进入生产时发生的事情。然而,并不是所有的模型都可以生产,也不是所有的模型都应该生产。

为了获得将被转移到生产中的最佳模型,跟踪所有实验是至关重要的。如果不能再现最佳性能的实验,那将是非常不幸的。记住这一点,让我们看看实验跟踪的各个部分。

模特培训

在这一阶段,你要建立一个培训渠道。管道负责:

  • 摄取数据,
  • 设计新功能,
  • 监控培训过程。

在此阶段,功能将被验证为与功能库中的功能相同。当管道用于真实世界的数据时,使用不同的特征可能会导致问题。管道还确保数据以正确的质量和格式传递给它。

训练可以通过几次实验来完成。你的实验工具会详细记录每个实验。一旦该过程完成,您就可以重现产生最佳性能的实验。此外,通过记录模型本身,您可以立即选择产生最佳性能的模型。

模型评估

在这一阶段,模型用以前从未见过的数据进行测试,为部署做好准备。测试数据特征应该类似于培训中使用的特征。否则评估将失败。如果性能很差,那么可以在调整特征和/或数据之后重新训练模型。

模型注册表

使用实验工具时,您可以将最佳模型保存到模型注册表中。一旦你得到了最好的模型,这就为服务做好了准备。这取决于您使用的实验工具,但是这种功能应该是现成的。

还需要注意的是,模型注册中心可以在模型管理的再培训阶段使用。一旦有了新模型,就需要更新模型注册中心。

模型注册中心很重要,因为它包含模型元数据。这种元数据很重要,原因有几个:

  • 管理模型,
  • 遵守您所在地区的监管框架,
  • 知道模型是否在生产中运行以及在哪个端点运行。

到目前为止,我们已经走过了很多地方。我们先花点时间,通过技术对比简单总结一下。

开发任何机器学习模型,都需要尝试大量的特征、参数和数据集。这可能会产生许多模型。

尽管大多数模型会被丢弃,但跟踪每一个实验是很重要的。因为你不知道为什么一个模型表现得好,而不能复制一个表现得好的模型,这将是非常不幸的。这个过程——运行几个实验并比较它们——就是实验跟踪的全部内容。一旦您有了想要投入生产的最佳模型,MLOps 就会介入。

MLOPs 是关于你的机器学习模型的成功部署和服务。简单地说,所有的 MLOps 步骤确保您的模型总是可用的。当您确定模型本身总是可用时,您就需要管理模型本身。

模型管理的目标是跟踪注册中心中的各种模型,并为它们服务。需要对模型进行监控,以便在性能下降时,可以采取必要的措施。

现在,模型进入模型注册的第一步是通过实验阶段。在这里,您可以对各种模型进行实验,并将表现最好的模型发送到模型注册中心。一旦它出现了,当情况需要时,你总是可以触发再训练和重塑。有鉴于此,实验跟踪和模型管理是两个相互依赖的过程。

在本文中,您已经看到 MLOps 是与将您的机器学习模型投入生产相关的整个生态系统。你也看到了 MLOps 各个方面的区别,比如模型管理和实验跟踪。具体来说,我们涵盖了:

  • 什么是 MLOps,
  • 部分 MLOps,
  • 什么是模型管理,
  • 模型管理的各个部分,
  • 什么是实验跟踪,
  • 部分实验跟踪。

我希望这些信息对你的下一个模型有所帮助。

快乐大厦!

原文:https://web.archive.org/web/https://neptune.ai/blog/explainability-auditability-ml-definitions-techniques-tools

想象一下,你必须向 SaaS 产品的技术负责人展示你新开发的面部识别功能。演示进行得相对顺利,直到首席技术官问你“那么里面到底发生了什么?”而你只能说“没人知道,是黑匣子”。

很快,其他利益相关者就会开始担心。“如果我们不知道某样东西的作用,我们怎么能相信它呢?”。

这是一个合理的担忧。很长一段时间,ML 模型被普遍视为黑箱,因为我们无法解释输入和输出之间的数据发生了什么。但是现在,我们有了解释能力。

在这篇文章中,我们将解释可解释性,探索它的必要性,并讨论简化可解释性的技术和工具。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

ML Black Box | Source: Author

机器学习中的可解释性意味着你可以从输入到输出解释你的模型中发生的事情。它使模型透明,解决了黑箱问题。

可解释的人工智能(XAI)是描述这一点的更正式的方式,适用于所有人工智能。XAI 意味着帮助人类专家理解人工智能开发的解决方案的方法。

“可解释性”和“可解释性”经常互换使用。虽然他们目标一致(‘理解模型。

Christoph Molnar 在他的著作《可解释的机器学习》中,将可解释性定义为人类能够理解决策原因的程度,或者人类能够持续预测 ML 模型结果的程度。

举个例子:你正在构建一个预测时尚行业价格趋势的模型。这个模型可能是可解释的——你可以看到你在做什么。但这还无法解释。一旦你深入挖掘生成结果背后的数据和特征,这就可以解释了。理解哪些特征有助于模型的预测,以及为什么它们会这样,这就是可解释性的全部内容。

一辆汽车需要燃料来驱动,也就是说,是燃料让引擎驱动的——可解释性。理解发动机如何和为什么消耗和使用燃料——可解释性。

本文中提到的大多数工具和技术都可以用于可解释性和可解释性,因为正如我前面提到的,这两个概念都提供了理解模型的视角。

可解释的人工智能是关于更好地理解 ML 模型。他们如何做决定,为什么。模型可解释性的三个最重要的方面是:

  1. 透明度
  2. 质疑的能力
  3. 易于理解

可解释性的方法

你可以用两种方式来解释:

  1. 全局—这是对模型行为的整体解释。它向我们展示了模型的整体视图,以及数据中的要素如何共同影响结果。
  2. Locally—这分别告诉我们数据中的每个实例和特征(有点像解释在模型中的某些点上看到的观察结果),以及各个特征如何影响结果。

为什么可解释性很重要?

当机器学习对商业利润产生负面影响时,它会获得坏名声。由于数据科学团队和业务团队之间的脱节,这种情况经常发生。

XAI 将数据科学团队和非技术高管联系起来,改善知识交流,并让所有利益相关者更好地了解产品要求和限制。所有这些都促进了更好的治理。

但是至少还有五个原因说明 ML 可解释性的重要性:

1。责任:当一个模型做出错误或流氓决策时,了解导致该决策的因素,或者谁应对该失败负责,对于避免将来出现类似问题是必要的。有了 XAI,数据科学团队可以让组织对他们的人工智能工具有更多的控制权。

2。信任:在高风险领域(如医疗保健或金融),信任至关重要。在 ML 解决方案可以被使用和信任之前,所有的利益相关者必须完全理解这个模型的作用。如果你声称你的模型做出了更好的决策,并注意到了人类看不到的模式,你需要能够用证据来支持它。领域专家自然会对任何声称比他们看得更多的技术持怀疑态度。

3。合规性:模型可解释性对于数据科学家、审计员和业务决策者等来说至关重要,以确保符合公司政策、行业标准和政府法规。根据欧洲数据保护法(GDPR)第 14 条,当公司使用自动化决策工具时,它必须提供有关所涉及的逻辑的有意义的信息,以及此类处理对数据主体的重要性和预期后果。世界各地都在实施类似的规定。

4。性能:可解释性也可以提高性能。如果你理解了你的模型为什么和如何工作,你就知道该微调和优化什么。

5。增强的控制:理解你的模型的决策过程向你展示未知的漏洞和缺陷。有了这些见解,控制就容易了。在低风险情况下快速识别和纠正错误的能力越来越强,特别是当应用于生产中的所有模型时。

可解释的模型

ML 中的一些模型具有可解释的特性,即透明性、易理解性和质疑能力。让我们来看看其中的几个。

1。线性模型:线性模型如线性回归、带线性核的支持向量机等遵循两个或两个以上变量可以相加使得它们的和也是解的线性原理。例如 y = mx + c。

因此其中一个特性的变化会影响输出。这很好理解和解释。

2。决策树算法:使用决策树的模型是通过学习从先验数据中得到的简单决策规则来训练的。因为它们遵循一套特定的规则,理解结果仅仅依赖于学习和理解导致结果的规则。使用 scikit-learn 中的 plot_tree 函数,您可以看到算法如何获得其输出的可视化。使用虹膜数据集:

 

我们得到:

3。广义可加模型(GAM)😗*GAM 是这样的模型,其中预测变量和因变量(响应)之间的通常关系被线性和非线性平滑函数取代,以模拟和捕捉数据中的非线性。gam 是具有平滑功能的广义线性模型,由于它们的可加性,每个变量都对输出有贡献。因此,我们可以通过简单地理解预测变量来解释 GAM 的输出。

大多数可解释模型的问题在于,它们大多数时候没有捕捉到一些现实世界问题的复杂性,可能是不充分的。此外,因为模型是简单的或线性的,不能保证可解释性。

神经网络或集成模型等是复杂的模型。

因此,对于复杂的模型,我们使用技术和工具使它们变得可以解释。有两种主要方法:

  1. 模型不可知方法
  2. 特定模型方法
模型不可知

模型不可知的技术/工具可以用在任何机器学习模型上,不管有多复杂。这些不可知的方法通常通过分析特征输入和输出对来工作。石灰就是一个很好的例子。

特定型号

特定于模型的技术/工具特定于单一类型的模型或一组模型。它们取决于特定模型的性质和功能,例如,树解释器。

让我们从 PDP 开始,对一些有趣的可解释性技术做一个广泛的概述。

部分相关图

在其他要素保持不变的情况下,获得一个或两个要素如何影响模型预测结果的全局可视化表示。PDP 告诉您目标和所选特征之间的关系是线性的还是复杂的。PDP 是模型不可知的。

Scikit 学习检查模块提供了一个名为 plot _ partial _ dependence 的部分相关图函数,可创建单向和双向部分相关图:

 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The figure shows two one-way and one two-way partial dependence plots for the California housing dataset | Source: scikit-learn.org

个体条件期望图(ICE)

这为您提供了模型中某个特征相对于目标特征的效果的局部可视化表示。与 PDP 不同,ICE 以每个样本一行的方式显示对特征的依赖性的单独预测。它也是模型不可知的。您可以使用 Python 和 R 用 PyCEbox 包创建一个冰图。使用 scikit-learn,您可以在您的模型上实现 ICE 绘图,它也使用 plot _ partial _ dependece 函数,并且您必须设置 kind='individual '。

 

注:查看 scikit-learn 文档了解更多细节

遗漏一列(LOCO)

这是一种非常简单的方法。它留下一列,重新训练模型,然后计算每个 LOCO 模型与原始模型预测得分的差异。如果分数变化很大,被遗漏的变量一定很重要。根据模型宽度(特征的数量),这种方法可能很耗时。

PDP、ICE 和 LOCO 都有一些缺点:

  • 它们不直接捕捉特征交互,
  • 它们可能过于近似,这对于自然语言处理中经常使用的分类数据和一次性编码来说可能是个问题。

累积局部效应

ALE 图最初是由 D. Apley(等人)在论文“可视化黑盒监督学习模型中预测变量的效果”中提出的。它与 PDP 的不同之处在于,它在特征上使用一个小窗口,并在预测之间产生差异而不是平均值。由于它不是基于比较平均值,ALE 的偏差更小,性能更好。ALE 的 python 版本可以通过以下方式安装:

 

给定一个具有某些特征的已处理数据集,ALE 图将如下实现:

 

注:点击此处了解更多 ALE 剧情

局部可解释的模型不可知解释(LIME)

LIME 由华盛顿大学的研究人员开发,旨在通过捕捉特征交互来了解算法内部发生了什么。LIME 围绕特定预测执行各种多特征扰动,并测量结果。它还处理不规则输入。

当维数很高时,保持这种模型的局部保真度变得越来越困难。LIME 解决了一个更可行的任务——找到一个与原始模型局部近似的模型。

LIME 试图通过一系列实验来复制模型的输出。创造者还引入了 SP-LIME,这是一种选择代表性和非冗余预测的方法,为用户提供了模型的全局视图。

注:你可以在这里了解更多关于石灰的知识。

这是由相同的创作者建造的石灰。锚点方法通过使用易于理解的 IF-THEN 规则来解释模型的单个预测,这些规则称为“锚点”,可以很好地支持(锚点)预测。

为了找到锚点,作者使用强化技术结合图搜索算法来探索数据周围的扰动集及其对预测的影响。这是另一种与模型无关的方法。

在最初的论文中,作者比较了石灰和锚,并可视化了它们如何处理复杂的二元分类器模型( + 或–)以得出结果。如下所示,LIME 解释通过学习最接近模型的线性决策边界来工作,具有一些局部权重,而锚点使其覆盖范围适应模型行为并使其边界清晰。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

LIME vs. Anchors — A Toy Visualization. Figure from Ribeiro, Singh, and Guestrin (2018) | Source

主播还接受了各种机器学习任务的测试,如分类、文本生成、结构化预测。

SHAP 使用沙普利值的博弈论概念来优化分配功能的重要性。

Shapley 值 SHAP(Shapley Additive exPlanations)是一个特征值对所有可能组合的平均边际贡献。

联合是用于估计特定特征的 Shapley 值的特征组合。这是一种统一的方法来解释机器学习模型的输出,如线性和逻辑回归、 NLP 、提升树模型和上瘾模型。可以通过 PyPI 或 conda-forge 安装;

 

或者:

 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

This shows how each feature is contributing to the model’s output. | Source

深度 SHAP 是深度学习的 SHAP 的变体,是一种高速近似算法,它使用背景样本而不是单个参考值,并使用 Shapely 方程来线性化 softmax,max,products 等操作。深度 SHAP 由 Tensorflow、Keras 和 Pytorch 支持。

深度学习的重要特性(DeepLIFT)

DeepLIFT 是一种深度学习的可解释方法,它使用反向传播将每个神经元的激活与“参考激活”进行比较,然后根据神经元差异记录并分配那个贡献分数。

本质上,DeepLIFT 只是深入挖掘神经网络的特征选择,并找到对输出形成有主要影响的神经元和权重。DeepLIFT 分别考虑了正面和负面的贡献。它还可以揭示其他方法所忽略的依赖性。分数可以在一次反向传递中有效地计算出来。

DeepLIFT 位于 pypi 上,因此可以使用 pip 进行安装:

 

逐层相关性传播(LRP)

逐层相关性传播类似于 DeepLIFT,它使用一组来自输出的特意设计的传播规则进行反向传播,识别神经网络中最相关的神经元,直到您返回输入。所以,你得到了所有的神经元(例如,真正对输出有贡献的像素。LRP 在 CNN 上表现很好,它可以用来解释 LSTMs 。

看看这个互动演示,看看 LRP 是如何工作的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Visual representation of how LRP does backpropagation from output node through the hidden layer neurons to input, identifying the neurons that had an impact on the model’s output. | Source

对比解释法(CEM)

对比解释是关于一个事件的事实,如果发现是真的,将构成一个具体事件的真实情况。CEM 方法提供了由模型而不是另一个决策或结果做出的决策和结果的对比解释。

CEM 基于论文《基于缺失的解释:走向带有相关否定的对比解释》。这里的开源代码实现是这里的。对于分类模型,CEM 根据相关正面(PP)和相关负面(PN)生成基于实例的解释。

PP 寻找对最初预测的结果影响最小但足够大的特征(例如,图像中的重要像素),而 PN 识别对最初预测的结果影响最小且必然不影响的特征。PN 提供了一个最小集合,使其区别于最接近的不同类。CEM 可以在 TensorFlow 中实现。要了解更多关于 CEM 的信息,请点击这里。

重量

2018 年,Amit (et al)做了一篇论文“用置信剖面改进简单模型”。提出了模型可解释性的深度加权方法。ProfWeight 将预先训练的深度神经网络的高测试精度转移到低测试精度的浅层网络。

就像老师向学生传递知识一样,ProfWeight 使用探针(根据网络的难度在样本中进行加权)来传递知识。

ProfWeight 可以总结为四个主要步骤:

  1. 在高性能神经网络的中间表示上附加和训练探针,
  2. 在原始数据集上训练一个简单模型,
  3. 学习作为简单模型和探针的函数的数据集中的例子的权重,
  4. 在最终加权数据集上重新训练简单模型。

置换特征重要性

置换特征重要性显示了当单个特征被随机打乱时,模型得分(准确度、F1、R2)的降低。它显示了一个特性对于一个特定的模型有多重要。它是一种模型检验技术,显示特征和目标之间的关系,对于非线性和不透明的估计器很有用。

它可以在 sci-kit 学习库中实现。查看这里看看是怎么做的。

我们知道一些用于 ML 可解释性的方法,那么有什么工具可以让我们的工作变得更容易呢?

人工智能可解释性 360 (AIX360)

AI Explainability 360 toolkit是 IBM 的开源库,支持数据集和机器学习模型的可解释性和可解释性。AIX360 包括一组算法,涵盖了解释的不同维度以及代理可解释性度量。它也有关于不同用例中可解释性的教程,比如信用审批。

滑冰者

Skater 是一个开源的、与模型无关的统一 Python 框架,具有模型可解释性和可解释性。数据科学家可以将可解释性构建到现实世界用例的机器学习系统中。

Skater 从全局(基于完整数据集的推理)和局部(推理单个预测)两个方面研究可解释性。它支持深度神经网络、树算法和可伸缩贝叶斯。

注:点击了解更多关于滑手的信息。

像我五岁一样解释(ELI5)

ELI5 是一个 python 包,用于理解和解释 sklearn 回归器和分类器、XGBoost、CatBoost、LightGBM Keras 等分类器的预测。它通过其统一的 API 为这些算法的这些过程提供可视化和调试。ELI5 理解文本处理,可以高亮显示文本数据。它还可以实现诸如 LIME 和排列重要性之类的技术。

ELI5 在 python 2.7 和 3.4+中工作,它需要 scikit-learn 0.18+。然后,您可以使用以下命令安装它:

 

或者:

 

注:点击了解更多信息。

解释性语言

InterpretML 是微软开发的开源工具包,旨在为数据科学家、审计员和商业领袖提高模型的可解释性。解释器是灵活和可定制的。在撰写本文时,InterpretML 支持石灰、SHAP、线性模型和决策树。它为模型提供了全局和局部的解释。主要特点:

  • 了解不同数据子集的模型性能如何变化,并比较多个模型,
  • 探索模型误差,
  • 分析数据集统计和分布,
  • 探索全球和本地的解释,
  • 过滤数据以观察全局和局部特征重要性,
  • 运行假设分析,查看编辑数据点要素时模型解释会如何变化。

激活地图集

激活图谱可视化了神经网络如何相互作用,以及它们如何随着信息和层的深度而成熟。谷歌与 OpenAI 合作推出了激活地图集。

开发这种方法是为了查看卷积视觉网络的内部工作方式,并获得隐藏网络层中的概念的人类可解释的概述。它从单个神经元的特征可视化开始,但后来发展到神经元的联合可视化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

An activation atlas of the InceptionV1 vision classification network reveals many fully realized features, such as electronics, buildings, food, animal ears, plants, and watery backgrounds. | Source: openai.com

不在场证明解释

Alibi 是一个用于模型检查和解释的开源 Python 库。它提供了解释黑盒算法所需的代码。

Alibi 解释有助于:

  • 为可解释的 ML 模型定义 restful APIs,
  • 模型监控,
  • 黑盒 ML 模型解释算法的高质量参考实现,
  • 多用途案例(表格、文本和图像数据分类、回归),
  • 实现最新的模型解释,
  • 概念漂移算法偏差检测,
  • 模型决策的模型置信度得分。

注:点击了解更多关于 Alibi 的信息。

假设工具(WIT)

WIT 由 TensorFlow 团队开发,是一个交互式、可视化、无代码的界面,用于在 TensorFlow 中可视化数据集和模型,以便更好地理解模型结果。除了 TensorFlow 模型之外,您还可以使用 XGBoost 和 Scikit-Learn 模型的假设分析工具。

一旦部署了模型,就可以在假设分析工具中的数据集上查看其性能。

此外,您可以按要素对数据集进行切片,并跨这些切片比较性能。然后,您可以确定模型表现最好或最差的数据子集。这对 ML 公平性调查非常有帮助。

该工具可通过 Tensorboard 或 collab notebook 访问。查看 WIT 网站了解更多信息。

微软 Azure

我们都知道 Azure,不需要解释它是什么。Azure 的 SDK 包中有可解释性类。

蔚蓝色。解释包含像 SHAP 树解释器,SHAP 深度解释器,SHAP 线性解释器等功能。

将“pip install azureml-interpret”用于一般用途。

Rulex 可解释人工智能

Rulex 是一家以一阶条件逻辑规则的形式创建预测模型的公司,每个人都可以立即理解和使用这些模型。

Rulex 的核心机器学习算法逻辑学习机(LLM)的工作方式与传统人工智能完全不同。该产品旨在产生预测最佳决策选择的条件逻辑规则,以便流程专业人员可以立即清楚地了解这些规则。Rulex 规则使每个预测完全不言自明。

与决策树和其他产生规则的算法不同,Rulex 规则是无状态和重叠的。

探索和解释的模型不可知语言(DALEX)

Dalex 是一套工具,它检查任何给定的模型,简单的或复杂的,并解释模型的行为。Dalex 围绕每个模型创建了一个抽象层次,使得探索和解释更加容易。它使用 Explain()方法(Python)或 Dalex::explain 函数在模型上创建一个包装器。一旦使用解释函数包装了模型,所有的功能都可以从该函数中获得

Dalex 可与 xgboost、TensorFlow、h2o 配合使用。可以通过 Python 和 r 安装。

r:

 

Python:

 

注:点击了解更多关于 Dalex 的信息。

为了安全、可靠地包含人工智能,需要人类和人工智能的无缝融合。对于允许从业者容易地评估正在使用的决策规则的质量并减少假阳性的技术,也应该考虑人为干预。

让 XAI 成为一种核心能力,成为你人工智能设计和质量保证方法的一部分。它将在未来支付股息,而且是大量的股息。

理解你的模型不仅仅是一个科学问题。这不是好奇的问题。它是关于知道你的模型在哪里失败,如何修复它们,以及如何向关键的项目涉众解释它们,以便每个人都确切地知道你的模型如何产生价值。

参考文献:

  1. https://www . PwC . co . uk/audit-assurance/assets/explable-ai . pdf
  2. https://christophm . github . io/interpretable-ml-book/
  3. https://link . springer . com/chapter/10.1007% 2f 978-3-030-28954-6 _ 10
  4. https://arxiv.org/abs/1802.07623
  5. https://towards data science . com/understanding-model-predictions-with-lime-a 582 fdff 3a 3b
  6. https://sci kit-learn . org/stable/auto _ examples/inspection/plot _ partial _ dependency . html
  7. https://www . kdnugges . com/2018/12/four-approach-ai-machine-learning . html
  8. https://link . springer . com/chapter/10.1007% 2f 978-3-030-28954-6 _ 10
  9. https://sci kit-learn . org/stable/modules/partial _ dependency . html
  10. http://www . fields . utoronto . ca/talks/Boolean-decision-rules-column-generation
  11. https://pair-code.github.io/what-if-tool
  12. http://aix360.mybluemix.net/
  13. https://github.com/slundberg/shap
  14. https://dalex.drwhy.ai/

原文:https://web.archive.org/web/https://neptune.ai/blog/explainable-and-reproducible-machine-learning-with-dalex-and-neptune

机器学习模型开发很难,尤其是在现实世界中。

通常,您需要:

  • 了解业务问题,
  • 收集数据,
  • 探索它,
  • 建立适当的验证方案,
  • 实现模型和调整参数,
  • 以对业务有意义的方式部署它们,
  • 检查模型结果只是为了找出你必须处理的新问题。

这还不是全部。

你应该有你运行的实验和你训练的模型版本版本,以防你或其他任何人将来需要检查它们或重现结果。从我的经验来看,这一时刻会在你最意想不到的时候到来,“我希望我以前就想到了”的感觉是如此的真实(和痛苦)。

但是还有更多。

随着 ML 模型服务于真实的人,错误分类的案例(这是使用 ML 的自然结果)正在影响人们的生活,有时会非常不公平地对待他们。这使得解释你的模型预测的能力成为一种需求,而不仅仅是一种美好。

那么你能做些什么呢?

幸运的是,今天有工具可以解决这两个问题。

最好的部分是你可以把它们结合起来让你的模型版本化,可复制,可解释

继续阅读了解:

  • DALEX 讲解器讲解机器学习模型
  • 使用 Neptune 让您的模型版本化,实验可重复
  • 使用 Neptune + DALEX 集成自动保存每次训练运行的模型讲解器和交互式讲解图表
  • 版本化解释器比较、调试和审计你构建的每一个模型

让我们开始吧。


请注意,由于最近的 API 更新,这篇文章也需要一些改变——我们正在努力!与此同时,请检查海王星文档,那里的一切都是最新的!🥳


亚当·赖德莱克 军情二处数据实验室的研究工程师,华沙理工大学数据科学专业的学生

przemysaw bie cekmi2 datalab 创始人,三星研发中心首席数据科学家&波兰

如今,在测试集上获得高分的模型通常是不够的。这就是为什么人们对可解释的人工智能( XAI )越来越感兴趣,这是一套让你理解模型行为的方法和技术。

在多种编程语言中有许多可用的 XAI 方法。机器学习中最常用的一些是石灰、 *SHAP、*或 PDP ,但还有更多。

人们很容易迷失在大量的技术中,这就是可解释的人工智能金字塔派上用场的地方。它将与模型探索相关的需求收集到一个可扩展的下钻图中。左边是与单个实例相关的需求,右边是与整个模型相关的需求。连续层挖掘关于模型行为(局部或全局)的越来越多的细节问题。

DALEX(在 R 和 Python 中可用)是一个工具,帮助你理解复杂模型是如何工作的。它目前只适用于表格数据(但将来会有文本和图像)。

它与大多数用于构建机器学习模型的流行框架相集成,如 keras、sklearn、xgboost、lightgbm、H2O 等等!

DALEX 中的核心对象是一个讲解者。它将训练或评估数据与已训练的模型联系起来,并提取解释这些数据所需的所有信息。

一旦有了它,您就可以创建可视化,显示模型参数,并深入了解其他与模型相关的信息。您可以与您的团队共享它,或者保存它供以后使用。

为任何模型创建一个解释器真的很容易,正如你在这个例子中看到的使用 sklearn

 

观测值的模型解释(局部解释)

当你想理解为什么你的模型做出了一个特定的预测时,本地解释是你最好的朋友。

这一切都从预测开始,沿着金字塔的左半部分往下,你可以探索和了解发生了什么。

DALEX 为您提供了一系列方法来显示每个变量的局部影响:

  • SHAP :使用经典的 Shapley 值计算特征对模型预测的贡献
  • 分解:用所谓的“贪婪解释”将预测分解成可归因于每个变量的部分
  • 分解交互:扩展“贪婪解释”来解释功能交互

沿着金字塔往下走,局部解释的下一个关键部分是理解模型对特征值变化的敏感性。

在 DALEX 中有一种简单的方法来绘制这些信息:

  • 其他条件不变:显示模型预测的变化,仅允许单个变量存在差异,同时保持所有其他变量不变

按照我们在 Titanic 数据集上创建的示例随机森林模型,我们可以很容易地创建上面提到的图。

 

模型理解(全局解释)

当你想了解哪些特性对你的模型通常是重要的,当它做决定时,你应该寻找全局的解释。

为了在全球层面上理解该模型,DALEX 为您提供了变量重要性图。变量重要性图,特别是排列特征重要性,使用户能够从整体上理解每个变量对模型的影响,并区分最重要的变量。

这种可视化可以被视为 SHAP 的全球等价物,并分解描绘单次观察的相似信息的图。

沿着金字塔向下移动,在数据集层面上,有一些技术,如部分相关性分布图和累积局部相关性,使您能够将模型的反应方式可视化为所选变量的函数。

现在让我们为我们的例子创建一些全局解释。

 

可重用和有组织的解释对象

一个干净的,结构化的,易于使用的 XAI 可视化集合是伟大的,但有更多的 DALEX。

DALEX explainers 中打包你的模型给你一个可重用的和有组织的方式来存储和版本化你用机器学习模型做的任何工作。

使用 DALEX 创建的 explainer 对象包含:

  • 要解释的模型,
  • 型号名称和类别,
  • 任务类型,
  • 将用于计算解释的数据,
  • 对这些数据进行模型预测,
  • 预测功能,
  • 模型残差,
  • 观察值的抽样权重,
  • 其他型号信息(包、版本等。)

将所有这些信息存储在一个对象中使得创建局部和全局解释变得容易(正如我们之前看到的)。

它还使得在模型开发的每个阶段审查、共享和比较模型和解释成为可能。

雅各布·查孔 资深数据科学家

在完美的世界里,你所有的机器学习模型和实验都是以和你给软件项目版本化一样的方式来版本化的。

不幸的是,要跟踪您的 ML 项目,您需要做的不仅仅是将代码提交给 Github。

简而言之,为了正确地版本化机器学习模型你应该跟踪:

  • 代码、笔记本和配置文件
  • 环境
  • 因素
  • 数据集
  • 模型文件
  • 评估指标、性能图表或预测等结果

其中一些东西可以很好地配合。git(代码、环境配置),但其他的就没那么多了。

海王星通过让你记录你觉得重要的每件事和任何事情,让你很容易跟踪所有这些。

您只需在脚本中添加几行代码:

 

您运行的每个实验或模型训练都有版本,并在 Neptune 应用程序(和数据库)中等待您🙂 ).

见海王星

您的团队可以访问所有的实验和模型,比较结果,并快速找到信息。

您可能会想:“好极了,所以我有我的模型版本,但是”:

  • 如果我想在模型被训练后几周或几个月调试模型,该怎么办?
  • 如果我想看到每次实验运行的预测解释或变量重要性,该怎么办?
  • 如果有人让我检查这个模型是否有不公平的偏见,而我没有训练它的代码或数据,该怎么办?

我听到了,这就是 DALEX 集成的用武之地!

为什么不让你的 DALEX 解释器为每个实验进行记录和版本化,并在一个漂亮的用户界面中呈现交互式解释图表,易于与你想要的任何人分享。

没错,为什么不呢!

通过 Neptune-DALEX 集成,您可以获得所有这些,只需增加 3 条线路。

此外,这也带来了一些实实在在的好处:

  • 你可以查看其他人创建的模型并轻松分享你的模型
  • 您可以比较任何已创建模型的行为
  • 你可以追踪和审计每个模型不必要的偏差和其他问题
  • 您可以调试并比较缺少训练数据、代码或参数的模型

好吧,这听起来很酷,但它实际上是如何工作的呢?

我们现在开始吧。

版本本地说明

要记录本地模型说明,您只需:

  • 创建一个观察向量
  • 创建您的 DALEX 解释器对象
  • 将它们从传递给函数
 

互动解释图表将在海王星应用程序的“文物”部分等着你:

见海王星

将创建以下地块:

  • 可变重要性
  • 部分相关(如果指定了数字特征)
  • 累积相关性(如果指定了分类特征)

版本全球解说

有了全球模型解释,就更简单了:

  • 创建您的 DALEX 解释器对象
  • 从传递给函数
  • (可选)指定要绘制的分类特征
 

就是这样。现在,您可以转到“工件”部分,找到您当地的解释图表:

见海王星

将创建以下地块:

  • 崩溃,
  • 在互动中崩溃,
  • shap,
  • 对于数值变量,其他条件不变,
  • 分类变量的其他条件不变

版本讲解器对象

但是如果你真的想要版本化你的解释,你应该版本化解释对象本身。

保存它的好处?:

  • 您可以在以后创建它的可视化表示
  • 您可以用表格的形式深入了解细节
  • 你可以随心所欲地使用它(即使你现在不知道如何使用)🙂)

这非常简单:

 

你可能会想:“我还能怎么使用解释器对象呢?”

让我在接下来的部分向您展示。

获取并分析训练模型的解释

首先,如果你把你的解释器登录到 Neptune,你可以直接把它提取到你的脚本或者笔记本中:

 

现在您已经有了模型解释,您可以调试您的模型了。

一种可能的情况是,你有一个观察结果,而你的模型悲惨地失败了。

你想找出原因。

如果保存了 DALEX 解释器对象,您可以:

  • 创建本地解释,看看发生了什么。
  • 检查更改要素对结果的影响。

见海王星

当然,你可以做得更多,特别是如果你想比较模型和解释。

让我们现在就开始吧!

比较模型和解释

如果您想:

  • 将当前的模型想法与生产中运行的模型进行比较?
  • 看看去年的实验想法是否能在新收集的数据上发挥更好的作用?

实验和模型有一个清晰的结构,并且有一个存放它们的地方,这真的很容易做到。

您可以在 Neptune UI 中基于参数、数据版本或指标来比较实验:

见海王星

可以通过两次点击看到不同之处,并可以通过一两次点击深入查看您需要的任何信息。

好吧,当涉及到比较超参数和度量时,这确实很有用,但是解释者呢?

你可以进入每个实验,并查看交互式解释图表,看看你的模型是否有可疑之处。

更好的是,Neptune 允许您访问您以编程方式记录的所有信息,包括模型解释器。
你可以获取每个实验的讲解对象并进行比较。只需使用中的函数,然后用 DALEX 可视化多个解释器:

 

见海王星

这就是 DALEX 情节的美妙之处。你可以通过多个解释者,他们会变魔术。

当然,您可以将之前训练过的模型与您当前正在研究的模型进行比较,以确定您的方向是否正确。只需将它添加到解释器列表中,并传递给方法。

好了,总结一下。

在本文中,您了解了:

  • 各种模型解释技术以及如何用 DALEX 解释器打包这些解释
  • 如何用 Neptune 对机器学习模型和实验进行版本化
  • 如何通过 Neptune + DALEX 集成为您运行的每个培训版本化模型解释器和交互式解释图表
  • 如何比较和调试你用解释器训练的模型

有了这些信息,我希望您的模型开发过程现在会更有组织性、可再现性和可解释性。

快乐训练!

雅各布·查孔

大部分是 ML 的人。构建 MLOps 工具,编写技术资料,在 Neptune 进行想法实验。


接下来的步骤

1.创建一个免费帐户

2.安装 Neptune 客户端库

Sign up

3.将日志记录添加到脚本中

2. Install Neptune client library
 
3. Add logging to your script
 

Try live notebook


原文:https://web.archive.org/web/https://neptune.ai/blog/exploratory-data-analysis-for-tabular-data

通常,在查看任何数据集时,我们会看到一堆充满数字甚至一些字母、单词或缩写的行和列。理解这些数据并试图获得尽可能多的洞察力是开始模型开发过程的明智策略。在本文中,我们将了解 EDA、其类型、技术、基础假设和工具,同时,我们将对一个样本数据集进行探索性数据分析,以了解它为什么如此重要和有用。

让我们从一个简短的介绍开始。

根据 NIST (美国国家标准与技术研究院)的说法,EDA 是一个非形式化的过程,没有确定的规则和技术;相反,这更像是一种关于如何进行数据分析的哲学或态度。再者,著名数学家和统计学家约翰·w·图基(John W. Tukey)在他的著作《探索性数据分析》中,将 EDA 描述为侦探的工作。分析师或数据科学家使用它来建立模型拟合和假设检验所需的假设,并在必要时处理缺失值和转换变量。

为了进一步简化,我们可以将 EDA 描述为一个迭代循环,其中您可以:

  • 1 对你的数据产生疑问。
  • 2 通过对数据进行可视化、转换和建模来寻找答案。
  • 3 利用你所学到的知识提炼你的问题和/或提出新的问题。

这些问题可以是:

  • 最能描述数据的典型值或中心值是什么?
  • 典型值的数据分布如何?
  • 什么是适合数据的分布?
  • 某个特征会影响目标变量吗?
  • 统计上最重要的特征/变量是什么?
  • 将目标变量与一组其他变量/特征相关联的最佳函数是什么?
  • 数据是否有异常值?

探索性数据分析与经典数据分析

除了 EDA,还有其他数据分析方法,经典数据分析是最流行的方法之一。探索性数据分析和经典数据分析都是从一个问题开始,然后收集可以用来理解问题的相关数据。它们都以产生关于数据的一些推论而结束。这就是它们的相似之处,现在让我们看看它们的不同之处:

因素探索性数据分析经典数据分析

不对数据强加确定性或概率性模型。相反,它允许数据建议最适合数据的可接受模型。

|

对数据施加确定性和概率性模型。

数据的结构,离群值,以及数据所暗示的模型。

|

模型的参数,并从模型中生成预测值。

一般为图形,例如散点图、特征图、箱线图、直方图、双直方图、概率图、残差图和均值图。

|

一般为定量,例如,方差分析、t 检验、卡方检验和 f 检验。

本质上具有暗示性、洞察力和主观性。

|

本质上严谨、正式、客观。

使用所有可用的数据,从这个意义上说,没有相应的信息损失。

|

将数据浓缩成位置、变化等重要特征。同时过滤其他一些重要因素,如偏斜度、尾长、自相关等。,导致信息丢失。

很少或不做假设,因为这些技术使用所有的数据。

|

依赖于常态等基本假设。

|

探索性数据分析和经典数据分析的参数差异

应该注意的是,在现实世界中,我们可能会在数据分析过程中同时使用这两种方法和其他方法中的元素。例如,在进行 EDA 时,使用 ANOVA 和卡方检验来理解数据集不同特征之间的关系是很常见的。

单变量分析与多变量分析

通常我们的数据集包含不止一个变量,在这种情况下,我们可以进行单变量和多变量分析来更好地理解我们的数据。

术语单变量分析是指对一个变量的分析,基本上是分析数据的最简单形式。单变量分析的目的是了解单个变量的值的分布,而不是处理整个数据集中变量之间的关系。直方图、条形图和核密度图等汇总统计数据和频率分布图是进行单变量分析的一些常用方法。

另一方面,与单变量分析相比,多变量分析可以考虑数据集中的所有变量,这使其变得复杂。这种分析的主要目的是找到变量之间的关系,以便更好地理解整体数据。通常情况下,现实世界中的任何现象都受到多重因素的影响,这使得多元分析更加现实。多变量分析中常用的一些方法有回归分析、主成分分析、聚类、相关和散点图等图表。

探索性数据分析(EDA)工具

用于探索性数据分析的一些最常用的工具有:

探索性数据分析(EDA)假设

每一个测量过程都包括一些潜在的假设,这些假设在统计上是正确的。特别是,有四个假设共同构成了所有测量程序的基础。

  • 1 数据随机抽取。
  • 2 数据属于固定分布。
  • 3 分布有固定位置。
  • 分布有固定的变化。

简而言之,我们希望数据有一些我们可以发现的底层结构。否则,试图从数据中找出任何意义完全是浪费时间,这些数据给人的感觉是随机的噪音。

如果这四个基本假设为真,我们将获得概率可预测性,这允许我们对过程的过去和未来做出概率声明。它们被称为“统计控制”过程。此外,如果这四个假设是真的,该方法可以产生可靠的结论是可重复的。

但是对于不同的问题类型,对这些假设的解释可能不同。因此,这里我们将描述最简单问题类型的这些假设,即单变量问题。在单变量系统中,响应包括确定性(常数)和随机(误差)部分,因此我们可以将上述假设改写为:

  • 1 数据点彼此不相关。
  • 2 随机分量有固定分布。
  • 确定性分量仅由一个常数组成。
  • 4 随机分量有固定的变化量。

单变量模型的普遍性和重要性在于,当确定性成分不仅是一个常数,而且是几个变量的函数时,它能够很容易地推断出更一般的问题。

在本文中,我们还将看到如何使用一些简单的 EDA 技术来测试这些假设,即直方图、滞后图、概率图和运行序列图。

现在,在阅读本文的其余部分之前,我将举一个数据集的例子——“120 年奥运历史:运动员和成绩”,这是一个包含从 1896 年雅典到 2016 年里约奥运会运动员和奖牌成绩的基本数据的数据集。

该数据集中的主要变量或属性是:

  • ID——每个运动员的唯一号码;
  • 姓名——运动员的姓名;
  • 性别——男或女;
  • 年龄–整数;
  • 高度——以厘米为单位;
  • 重量——以千克为单位;
  • 团队——团队名称;
  • NOC 国家奥林匹克委员会 3 个字母的代码;
  • 运动会——年份和季节;
  • 年份–整数;
  • 季节——夏天或冬天;
  • 城市——主办城市;
  • 运动——运动;
  • 事件–事件;
  • 奖牌——金、银、铜或钠。

将这些数据存储在 pandas 数据帧中后,我们可以看到前 5 行,如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Sorted data in pandas dataframe

如前所述,在 EDA 中,生成关于数据集的问题以理解数据是一种很好的做法。例如,关于这些数据,我想找出以下问题的答案:

  • 哪些国家培养出更多的金牌运动员?
  • 运动员的任何身体特征,比如身高,会让他比其他人更有优势吗?
  • 有没有一些高度相关的特性可以被删除?
  • 数据中是否存在某种偏差?

当然,您可以对该数据提出一组完全不同的问题,这可能与您的数据集用例更相关。在接下来的章节中,除了回顾这些概念,我们还将尝试找到上述问题的答案。

描述统计学

描述性统计对数据进行总结,使其更容易理解和分析。请记住,EDA 的目的之一是了解变量属性,如中心值、方差、偏斜度,并提出可能的建模策略。描述性统计分为两大类:

集中趋势的度量

它们被计算以给出一个“中心”,数据中的测量值围绕该中心分布。我们可以使用均值、中值或众数来寻找数据的中心值。

平均

平均值是最广泛使用的确定中心值的方法。计算方法是将所有数据值相加,然后用总数除以数据点数。

中位数

数据集正中间的值被定义为中值。按升序排列值后,找到数据中间的数字。如果中间有两个数字,则中值计算为它们的平均值。

方式

模式可能是计算数据集中中心值的最简单的方法。它等于最频繁的数字,即在数据中出现次数最多的数字。

需要注意的是,平均值最适用于没有异常值的对称分布,而中值适用于偏态分布或有异常值的数据。该模式是最少使用的集中趋势指标,仅在处理名义数据时使用。

离差的度量

离差的度量描述了“数据扩散”,即测量值离中心有多远。一些常见的措施是:

范围

特定数据集的范围是其最大值和最小值之间的差值。范围值越大,数据的分布范围就越大。

百分位数或四分位数

将数据分成四份的数字称为四分位数。通常,他们根据数字在数字线上的位置将数据分成四个部分。数据收集分为四个四分位数:

  • 第一个四分位数:最低的 25%的数字。
  • 第二个四分位数:下一个最低的 25%的数字(直到中位数)。
  • 第三个四分位数:第二高的 25%的数字(高于中位数)。
  • 第四个四分位数:最高的 25%的数字。

基于上述四分位数,我们还可以在此定义一些附加术语,例如:

  • 第 25 个百分位数是第一个四分位数末尾的值。
  • 第 50 个百分位数是第二个四分位数(或中位数)的末端值
  • 第 75 个百分位数是第三个四分位数的末尾。
  • IQR,也称为四分位距,是一种衡量数据如何围绕平均值分布的方法。

我们可以使用箱线图绘制百分位数,我们将在本文后面看到

差异

方差衡量每个点与平均值的平均差异程度。可以使用以下公式计算:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Formula for calculating the variance

其中 x [i] 是数据点,μ是对所有数据点计算的平均值。

在前面提到的例子中,以下数据点的方差为 3.95:6,8,7,10,8,4,9

标准偏差

标准偏差值告诉我们所有数据点偏离平均值的程度,但它会受到异常值的影响,因为它使用平均值进行计算。它等于方差的平方根。

歪斜

数据集中与对称钟形曲线或正态分布的偏差称为偏斜度。大于 1 或小于-1 的偏斜值表示高度偏斜的分布。介于 0.5 和 1 之间或-0.5 和-1 之间的值是适度倾斜的。介于-0.5 和 0.5 之间的值表示分布相当对称。我们可以使用 pandas 函数 skew 来找出所有数值变量的偏斜度:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Finding skewness using the pandas skew function

我们可以使用简单的 pandas 方法来查找这些统计数据中的大部分,例如数据中所有数值变量的最小值、最大值、平均值、百分位值和标准偏差:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Using a simple pandas method to find statistics

谈到探索性数据分析中使用的技术,它们可以大致分为图形和非图形技术,其中大部分是图形技术。虽然非图形方法是定量和客观的,但它们不能提供数据的完整图像。因此,图解法,这是更多的定性和涉及一些主观分析,也是必要的。

图形技术

柱状图

直方图是一种图表,它将具有连续值的数值变量(单变量)的值分布显示为一系列条形。每个条形通常跨越一个称为柱或类的数值范围,其中条形的高度显示数据点在相应柱中出现的值内的频率。

使用直方图,我们可以了解数据的中心、数据的分布、数据的偏斜度以及异常值的存在。

例如,我们可以为数据集中的数值变量(如高度)绘制直方图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Histogram for the numerical variable – height

从这个直方图中,我们可以确认运动员的平均身高在 175 cm 左右,这从最后一节中的“数据的输出中也可以明显看出。

正态概率图

通常,概率图是一种可视化工具,用于确定数据集中的变量是否具有近似的理论分布,如正态分布或伽玛分布。此图生成样本数据相对于指定理论分布(在本例中为正态分布)分位数的概率图。

例如,我们可以绘制数据集中数值变量高度的正态概率图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Normal Probability Plot for the numerical variable – height

正如我们所看到的,直方图有点倾斜,因此在正态概率图中有一条轻微的曲线。我们可以执行诸如幂变换之类的技术,这将使这个变量的概率分布更加高斯或正态。

使用直方图和概率图,我们可以测试 EDA 假设之一,即数据的固定分布。例如,如果正态概率图是线性的,则基础分布是固定的和正态的。此外,由于直方图用于表示数据的分布,钟形直方图意味着基本分布是对称的,并且可能是正态分布。

核分布估计或 KDE 图

核分布估计图描绘了连续数值变量的概率密度函数,可视为类似于直方图。我们可以将该图用于单变量和多变量数据。

例如,我们可以为数据集中的数值变量(如高度)绘制 KDE 图。因此,我们在这里为篮球和游泳项目的金牌得主绘制了 KDE 图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

KDE Plot for a numerical variable – height

y 值是对 x 轴上相应值的概率密度的估计,x 轴是身高变量,因此曲线下 175 cm 和 180 cm 之间的面积给出了奥运会运动员身高在 175 cm 和 180 cm 之间的概率。

我们可以在 KDE 图上清楚地看到,如果一个篮球运动员个子高,他/她赢得金牌的概率就更高,而在游泳比赛中,身高是一个相对较小的因素。

圆形分格统计图表

饼图是一种圆形统计图形,用于说明分类变量的分布。饼图被分成多个切片,每个切片代表数据中的每个类别。对于上述数据集,我们可以使用饼图描述前 10 个国家的金牌份额,如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A pie chart with gold medals among the top 10 countries

通过这个饼图,我们可以看到美国、俄罗斯和德国是奥运会上领先的国家。

条形图

条形图,有时也称为条形图,是一种使用矩形条显示分类变量的图表或图形,矩形条的高度与它们所代表的值成比例。条形图可以水平或垂直绘制。

对于这个数据集,我们可以将前 20 名国家获得的金牌数绘制如下。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A bar chart with the number of gold medals won by the top 20 countries

很明显,我们需要一个相当大的饼图来显示这些信息。相反,我们可以使用条形图,因为它看起来更直观,更容易理解。

堆积条形图

堆积条形图是简单条形图的扩展,我们可以用它来表示多个变量。每个条形被进一步划分为多个段,每个段代表一个类别。堆积条形图中条形图的高度由变量的组合高度决定。

我们现在可以显示前 20 个国家获得的金牌、银牌和铜牌数量如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Stacked bar chart with the number of gold, silver, and bronze won by the leading 20 countries

因此,正如我们在上面的堆叠图中看到的,美国在金牌数和奖牌总数上仍然领先。当我们比较意大利和法国时,虽然法国的奖牌总数比意大利多,但意大利的金牌数却略多。因此,这个图允许我们获得更精细的信息,否则我们很容易错过。

折线图

折线图或曲线图类似于条形图,但它不是以条形显示信息,而是以数据点的集合的形式显示信息,这些数据点以特定的模式由线条连接起来。折线图有一个优势——在折线图上比在条形图上更容易看到小的变化,并且线条非常清晰地代表了整体趋势。

如前所述,折线图是描述某些趋势的绝佳选择,例如过去几年女运动员参赛人数的增加。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Line chart with the number of women participating in the Olympics

从上面的线状图中,我们可以看到 1980 年后女性参加奥运会的人数急剧上升。

运行顺序图

如果我们在变量值和虚拟指数之间绘制一个线形图,我们会得到一个运行序列图。这很重要,因为我们可以在进行探索性数据分析时测试固定位置和固定变化假设。

如果运行序列图平坦且无漂移,则固定位置假设成立,而如果运行序列图的垂直分布在整个图上大致相同,则固定变化假设成立。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Run Sequence plot

因此,我们使用该图来检查数据集中的可变高度是否具有固定位置和固定变化,正如我们所看到的,该图看起来没有漂移且平坦,在整个图中具有均匀的垂直分布,因此这两个假设对该变量都成立。

面积图

面积图类似于折线图,只是 x 轴和线条之间的区域用颜色或阴影填充。折线图和面积图的用例几乎是相似的。

对于我们的数据集,我们可以使用面积图来比较男女运动员历年获得的金牌数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Area plot used to compare the gold medals won by men and women over the years

由于自 1980 年以来有了更多的女运动员,我们也可以看到女性赢得的金牌数量激增。这是一个重要的观察,因为基于 1980 年以前的数据,我们可以错误地得出结论,男性运动员比女性运动员有更高的夺金机会。因此,我们可以说,在这个数据集中存在一种被称为偏见的偏见。

箱形图

箱线图,也称为盒须图,显示连续变量的数据分布。它通常显示五个数字的摘要,即数据集的最小值、第一个四分位数、中值、第三个四分位数和最大值。从第一个四分位数到第三个四分位数画一个方框,数据的中位数用画过方框的垂直线表示。此外,箱线图可用作检验正态性或识别可能异常值的可视化工具。

盒状图还包含触须,触须是从盒中延伸出来的线。对于更一般的情况,如上所述,下须的边界是数据的最小值,而上须的边界是其最大值。

在我们还想发现异常值的情况下,我们使用箱线图的变体,其中晶须从箱线图的顶部和底部延伸到四分位数范围(IQR)的 1.5 倍。四分位数间距(IQR)是上四分位数(第三季度)和下四分位数(Q1)之间的距离,通过从第三季度减去 Q1 来计算。落在胡须末端之外的数据点称为异常值,用点表示。

在我们的数据集中,我们可以为数字变量(如身高、年龄和体重)绘制箱线图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Box plots for the numeric variables – height, weight, age

因此,从上面的箱线图中,我们可以很好地了解身高、体重和年龄变量的分布情况。我们还可以看到体重和年龄特征有很多异常值,主要是在较高的 en 值。

散点图

在大多数情况下,散点图用于检查数据集中两个连续变量之间的相关性。这两个变量的值由水平轴和垂直轴表示,它们的笛卡尔坐标对应于单个数据点的值。

在我们的数据集中,我们可以尝试找出身高和体重变量之间的关系,如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Scatter plot used to find the relation between height and weight

为了更进一步,我们可以增加一个分类变量,如运动员的性别,如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Scatter plot expanded to include the sex of an athlete

从上面的散点图中,我们可以得出结论,大多数男运动员在身高和体重方面比女运动员有优势。此外,我们不能忽视这样一个事实,即随着体重的增加,运动员的身高也会增加,这可能是运动员整体健康状况的一个指标。

Lag plot

滞后图是一种特殊的散点图,其中 X 轴和 Y 轴代表相同的数据点,但在指数或时间单位上有所不同。这些时间单位之间的差异称为滞后。

设 Y(i)为变量/特征在索引 I 或时间步长 I(对于时间序列数据)的假设值,则滞后图包含以下轴:

纵轴:Y(i)表示所有 I,从 0 到 n。

横轴:Y(i-k)表示所有 I,其中 k 是滞后值,默认为 1。

随机性假设是最关键的,但也是最少测试的,我们可以使用滞后图来检查它。如果数据是随机的,图表上的点将在水平和垂直方向上相当均匀地分布,表明没有模式。另一方面,具有某种形式或趋势(如线性模式)的图表显示数据并非完全随机。

我们可以绘制数据集高度变量的滞后图,如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Lag plot for a numerical variable – height

这里的数据似乎是完全随机的,似乎没有模式存在。因此,数据也满足随机性假设。

配对图

配对图是一种数据可视化,它在网格中显示数据集的各种变量之间的成对关联,以便我们可以更容易地看到它们之间的关系。网格的对角线可以表示直方图或 KDE,如下例所示,在该例中,我们比较了数据集的身高、体重和年龄变量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Pair plot for the dataset

在此图中,我们可以尝试找出任何两个特征是否相关。正如我们所看到的,年龄和身高或年龄和体重之间似乎没有明确的关系。如前所述,体重和身高之间似乎存在相关性,这一点也不奇怪。一件有趣的事情是,我们是否可以在不丢失太多信息的情况下删除这些特性。

热图

热图是数据的二维矩阵表示,其中每个单元格用一种颜色表示。通常,在 EDA 过程中,我们使用这种可视化来绘制数据集中所有数值变量之间的相关性。

让我们试着在数据集的几个变量中找到这样的关系。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Heatmap for the dataset

相关性是一个统计术语,用来衡量两个变量相互协调的程度。如果两个变量同向移动,那么这两个变量就是正相关,反之亦然。此外,如果两个变量没有关系,那么相关值接近于零,就像在我们的例子中身高和年龄之间一样。

现在我有了问题的答案,但其中一些答案会引出一系列新的问题——

  1. 我们现在知道美国在奥运会上获得了最多的奖牌,但是知道其他国家落后于美国以及为什么落后会很有趣。
  2. 我们发现,运动员的身高等一些因素在篮球比赛中可能是有利的,所以在篮球队中增加更多高个子运动员是有意义的。
  3. 我们现在还知道,我们有可能删除体重或身高特征,而不会丢失太多数据信息。
  4. 还有,很明显数据是有偏差的,如果我们用这个数据去训练任何一个模型,都可能产生一个对女运动员有偏见的模型。

要回答后续的问题,你可以用更细粒度、更细致的方式做 EDA,找到一些关于这些数据更有趣的东西。

定量技术

尽管 EDA 主要以图形技术为中心,但它也包括某些定量方法。大多数定量技术分为两大类:

  • 1 区间估计
  • 2 假设检验

在本节中,我们将简要介绍它们。如果你想深入了解这些技术,我可以指向这个资源。

区间概算

区间估计的概念是用来建立一个变量预期落入的值的范围。置信区间就是一个很好的例子。

  • 置信区间代表实际值和观察到的估计值之间的预期距离的统计显著性。
  • 某个参数 p 的 N%置信区间是具有下界(LB)和上界(UB)的区间,该区间以概率 N%包含 p,使得 LB<=p<=UB。
  • 置信区间是显示某一统计量的不确定性的一种方式。
假设检验

统计假设是一种陈述,它被认为是正确的,直到有实质性的证据证明是相反的。假设检验广泛应用于许多学科,以确定一个命题是真还是假。

拒绝一个假设意味着它是不真实的。然而,接受一个假设并不意味着它是真实的;这只能说明我们缺乏证据来证明事实并非如此。因此,假设检验是根据可接受的(零)和不可接受的(非零)结果(备选项)来定义的。

假设检验是一个多步骤的过程,包括以下内容:

  1. 零假设:这是假设为真的陈述。
  2. 替代假设:这是如果无效假设被拒绝,将被接受的陈述。
  3. 检验统计:检验确定观察到的数据是否落在零假设的期望值范围之外。数据的类型将决定使用哪种统计检验。
  4. 显著性水平:显著性水平是研究者事先指定的一个数字,作为统计显著性的阈值。得到你准备容忍的假阳性结论的风险最高。
  5. 临界值:临界区域包括那些导致拒绝零假设的检验统计值
  6. 决策:根据检验统计量和临界值之间的关系,接受或拒绝零假设。

我希望这篇文章能让您对探索性数据分析背后的一些核心概念有一个很好的了解。虽然有许多 EDA 技术,尤其是本文中描述的图形技术,但还有更多,使用哪种取决于数据集和您的个人需求。正如本文前面提到的,EDA 就像一个侦探的工作,主要是主观的,所以您可以自由地提出尽可能多的关于您的数据的问题,并使用 EDA 找到它们的答案。

参考

  1. EDA——信息技术实验室
  2. R 为数据科学
  3. 描述性统计和探索性数据分析

原文:https://web.archive.org/web/https://neptune.ai/blog/exploratory-data-analysis-natural-language-processing-tools

探索性数据分析是任何机器学习工作流中最重要的部分之一,自然语言处理也不例外。但是你应该选择哪些工具来高效地探索和可视化文本数据呢?

在这篇文章中,我们将讨论和实现几乎所有的主要技术,你可以用它们来理解你的文本数据,并给你一个完成工作的 Python 工具的完整之旅。

在本文中,我们将使用来自 Kaggle 的百万新闻标题数据集。如果您想一步一步地进行分析,您可能需要安装以下库:

 

现在,我们可以看看数据。

 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据集只包含两列,发布日期和新闻标题。

为了简单起见,我将探索这个数据集中的前 10000 行。因为标题是按发布日期排序的,所以实际上从 2003 年 2 月 19 日到 2003 年 4 月 7 日两个月。

好了,我想我们已经准备好开始我们的数据探索了!

文本统计可视化是简单但非常有洞察力的技术。

它们包括:

  • 词频分析,
  • 句子长度分析,
  • 平均字长分析,
  • 等等。

这些确实有助于探索文本数据的基本特征

为此,我们将主要使用直方图(连续数据)和条形图(分类数据)。

首先,我将看看每个句子中出现的字符数。这可以让我们大致了解新闻标题的长度。

 

Code snippet that generates this chart

直方图显示,新闻标题的长度在 10 到 70 个字符之间,通常在 25 到 55 个字符之间。

现在,我们将转到单词级别的数据探索。让我们画出每个新闻标题中出现的字数。

 

Code snippet that generates this chart

很明显,新闻标题的字数在 2 到 12 之间,大部分在 5 到 7 之间。

接下来,让我们检查一下每个句子的平均单词长度。

 

Code snippet that generates this chart

平均单词长度在 3 到 9 之间,5 是最常见的长度。这是否意味着人们在新闻标题中使用了非常短的单词?让我们找出答案。

这可能不正确的一个原因是停用词。停用词是在任何语言中最常用的词,如*、【the】、【a】、*等。由于这些单词的长度可能很小,这些单词可能会导致上图向左倾斜。

分析停用词的数量和类型可以让我们更好地了解数据。

要获得包含停用词的语料库,您可以使用 nltk 库。Nltk 包含许多语言的停用词。因为我们只处理英语新闻,所以我将从语料库中过滤掉英语停用词。

 

现在,我们将创建语料库。

 

并绘制顶部停用词。

Code snippet that generates this chart

我们可以清楚地看到,像“to”、“in”和“for”这样的停用词在新闻标题中占主导地位。

现在我们知道了哪些停用词在我们的文章中频繁出现,让我们检查一下除了这些停用词之外还有哪些词频繁出现。

我们将使用集合库中的计数器函数来计数并存储元组列表中每个单词的出现次数。这是一个非常有用的函数,当我们在自然语言处理中处理单词级分析时。

We will use the counter function from the collections library to count and store the occurrences of each word in a list of tuples. This is a very useful function when we deal with word-level analysis in natural language processing.

 

Code snippet that generates this chart

哇!“美国”、“伊拉克”和“战争”占据了过去 15 年的头条新闻。

这里的“我们”可以指美国或我们(你和我)。us 不是一个停用词,但是当我们观察图表中的其他单词时,它们都与美国有关——伊拉克战争,这里的“US”可能指的是美国。

Ngram 探索

查看最常见的 n 元语法可以让你更好地理解使用该单词的上下文。

为了实现 n 元语法,我们将使用来自 nltk.utiln 元语法函数。例如:

现在我们知道了如何创建 n 元语法,让我们把它们可视化。

 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了构建我们的词汇表,我们将使用 Countvectorizer。 Countvectorizer 是一种简单的方法,用于对语料库进行记号化、矢量化,并以适当的形式表示出来。在sk learn . feature _ engineering . text中有

有了这些,我们将分析新闻标题中的重要人物。

top _ n _ bigrams = get _ top _ ngram(news[’ headline _ text '],2)[:10] x,y=map(list,zip(* top _ n _ bigrams))SNS . bar plot(x = y,y=x)

 

top_n_bigrams=get_top_ngram(news[‘headline_text’],2)[:10] x,y=map(list,zip(*top_n_bigrams)) sns.barplot(x=y,y=x)

Code snippet that generates this chart

我们可以观察到,与战争有关的“反战”、“阵亡”等连词占据了新闻标题。

三元模型怎么样?

我们可以看到,这些三元组中有许多是由*、、【反战抗议】组合而成的。* 这意味着我们应该努力清理数据,看看我们能否将这些同义词合并成一个干净的令牌。

 

Code snippet that generates this chart

pyLDAvis 主题建模探索

主题建模是使用无监督学习技术提取文档集合中出现的主要主题的过程。

一旦我们按主题对文档进行分类,我们就可以对每个主题或主题组进行进一步的数据探索。

但是在进入主题建模之前,我们必须对数据进行一些预处理。我们将:

:将句子转换成一列标记或单词的过程。

*删除停用词

  • :将每个单词的屈折形式缩减为一个共同的基或根。
  • 转换为单词包 :单词包是一个字典,其中的键是单词(或 ngrams/tokens),值是每个单词在语料库中出现的次数。
  • 使用 NLTK,您可以轻松地进行标记化和词条化:
  • 现在,让我们使用 gensim 创建单词袋模型

我们最终可以创建 LDA 模型:

 

题目 0 表示与伊拉克战争和警察有关的东西。主题 3 显示澳大利亚卷入伊拉克战争。

 

您可以打印所有的主题并尝试理解它们,但是有一些工具可以帮助您更有效地进行数据探索。一个这样的工具是 pyLDAvis ,它交互地可视化 LDA 的结果。

 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The topic 0 indicates something related to the Iraq war and police. Topic 3 shows the involvement of Australia in the Iraq war.

在左侧,每个圆圈的区域代表主题相对于语料库的重要性。因为有四个主题,所以我们有四个圈。

 

Code snippet that generates this chart

圆心之间的距离表示主题之间的相似度。在这里,您可以看到主题 3 和主题 4 重叠,这表明主题更加相似。

  • 在右侧,每个话题的直方图显示了前 30 个相关词。例如,在主题 1 中,最相关的单词是警察、新闻、五月、战争等
  • 所以在我们的案例中,我们可以在新闻标题中看到大量与战争相关的词汇和话题。
  • Wordcloud

Wordcloud 是一种表现文本数据的好方法。出现在单词云中的每个单词的大小和颜色表明了它的频率或重要性。

Wordcloud is a great way to represent text data. The size and color of each word that appears in the wordcloud indicate it’s frequency or importance.

同样,您可以看到与战争相关的术语被突出显示,这表明这些词在新闻标题中频繁出现。

 

Code snippet that generates this chart

许多参数可以调整。一些最突出的例子是:

:被阻止在图像中出现的一组单词。

*max_words :显示最大字数。

  • max_font_size :最大字体大小。
  • 有更多的选择来创建美丽的单词云。更多详情可以参考这里。
  • 情感分析

情感分析是一项非常常见的自然语言处理任务,我们在其中确定文本是正面、负面还是中性的。这对于发现与评论相关的情感非常有用,评论可以让我们从文本数据中获得一些有价值的见解。

文本 blob

Textblob 是构建在 nltk 之上的 python 库。它已经存在了一段时间,使用起来非常简单方便。

TextBlob 的情感函数返回两个属性:

极性: 是位于 [-1,1] 范围内的浮点数,其中 1 表示正语句, -1 表示负语句。

主观性:某人的判断是如何被个人观点和感受所塑造的。主观性表示为位于[0,1]范围内的浮点值。

  • 我将在我们的新闻标题上运行这个功能。
  • TextBlob 声称文本*“100 人在伊拉克丧生”*是负面的,不是一种观点或感觉,而是一种事实陈述。我想我们可以同意 TextBlob 的观点。

既然我们知道了如何计算这些情感分数,我们就可以使用直方图来可视化它们,并进一步探索数据。

 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

TextBlob claims that the text “100 people killed in Iraq” is negative and is not an opinion or feeling but rather a factual statement. I think we can agree with TextBlob here.

可以看到极性主要在 0.00 到 0.20 之间。这表明大多数新闻标题是中性的。

 

Code snippet that generates this chart

让我们再深入一点,根据分数将新闻分为负面、正面和中性。

You can see that the polarity mainly ranges between 0.00 and 0.20. This indicates that the majority of the news headlines are neutral.

是的,70 %的新闻是中性的,只有 18%是正面的,11%是负面的。

 

Code snippet that generates this chart

让我们来看看一些正面和负面的标题。

积极的新闻标题大多是关于体育运动中的一些胜利。

是的,非常负面的新闻标题。

 

维德情感分析

 

我们要讨论的下一个图书馆是 VADER。维德在探测负面情绪方面表现更好。在社交媒体文本情感分析的情况下非常有用。

VADER 或价感知词典和情感推理机是一个基于规则/词典的开源情感分析器预建库,受麻省理工学院许可证保护。

VADER 情感分析类返回一个字典,该字典包含文本正面、负面和中性的概率。然后我们就可以筛选选择概率最大的情感。

我们将使用 VADER 做同样的分析,并检查是否有很大的差异。

VADER sentiment analysis class returns a dictionary that contains the probabilities of the text for being positive, negative and neutral. Then we can filter and choose the sentiment with most probability.

是的,在分布上有一点点不同。甚至更多的标题被归类为中性 85 %,负面新闻标题的数量有所增加(至 13 %)。

 

Code snippet that generates this chart

命名实体识别

命名实体识别是一种信息提取方法,其中文本中存在的实体被分类为预定义的实体类型,如“人”、“地点”、“组织”等。通过使用 NER,我们可以获得关于给定文本数据集中存在的实体类型的深刻见解。

在上面的新闻中,命名实体识别模型应该能够识别诸如 RBI 作为一个组织,Mumbai 和 India 作为地点等实体。

有三个标准库可以进行命名实体识别:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The Economic Times – Indian Times 2019

在本教程中,我将使用 spaCy ,这是一个用于高级自然语言处理任务的开源库。它是用 Cython 编写的,以其工业应用而闻名。除了 NER, spaCy 还提供了许多其他功能,如词性标注、词到向量转换等。

SpaCy 的命名实体识别已经在 OntoNotes 5 语料库上进行训练,它支持以下实体类型:

spaCy 的英语有三种预训练模式。我将使用 en_core_web_sm 来完成我们的任务,但您可以尝试其他模型。

要使用它,我们必须先下载它:

现在我们可以初始化语言模型了:

Spacy 的一个好处是我们只需要应用 nlp 函数一次,整个后台管道就会返回我们需要的对象。

 

我们可以看到,印度和伊朗被认为是地理位置(GPE),Chabahar 是人,星期四是日期。

 

我们也可以使用 spaCy 中的 displacy 模块来可视化输出。

 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这创建了一个非常简洁的句子的可视化,其中每个实体类型用不同的颜色标记。

现在我们知道了如何执行 NER,我们可以通过对从数据集中提取的命名实体进行各种可视化来进一步探索数据。

 

首先,我们将在新闻标题上运行命名实体识别并存储实体类型。

现在,我们可以可视化实体频率:

First, we will run the named entity recognition on our news headlines and store the entity types.

 

现在我们可以看到,GPE 和 ORG 占据了新闻标题,其次是 PERSON 实体。

 

Code snippet that generates this chart

我们还可以可视化每个实体最常见的令牌。我们来看看哪些地方在新闻标题中出现的次数最多。

Now we can see that the GPE and ORG dominate the news headlines followed by the PERSON entity.

我想我们可以确认这样一个事实,即新闻标题中的“美国”指的是美国。让我们也找出新闻标题中最常见的名字。

 

Code snippet that generates this chart

萨达姆·侯赛因和乔治·布什是战时伊拉克和美国的总统。此外,我们可以看到,该模型在将*“维克政府”“新南威尔士州政府”*归类为个人而非政府机构方面远非完美。

 

Code snippet that generates this chart

探索 Python 中的词性标注

词性(POS)标注是一种方法,将词性标签分配给句子中的单词。有八种主要的词类:

动词(VB)-读,说,跑,吃,玩,住,走,有,喜欢,是,是

  • 形容词(JJ)-美丽,快乐,悲伤,年轻,有趣,三
  • 副词(RB)-慢慢地,悄悄地,非常,总是,从来没有,太,嗯,明天
  • 介词(在)-在,在,在,从,与,近,之间,大约,在
  • 连词(CC)- and,or,but,因为,所以,然而,除非,既然,如果
  • 代词(PRP)-我,你,我们,他们,他,她,它,我,我们,他们,他,她,这个
  • 感叹词(INT)-哎哟!哇!太好了!救命啊!哦!嘿!嗨!
  • 这不是一项简单的任务,因为同一个词可能在不同的上下文中用在不同的句子中。然而,一旦你这样做了,你就可以创建许多有用的可视化工具,让你对数据集有更多的了解。
  • 我将使用 nltk 来做词性标注,但是也有其他做得很好的库(spacy,textblob)。

让我们看一个例子。

注意:

我们可以在这里观察到各种依赖标签。例如, DET 标签表示限定词“the”和名词“stories”之间的关系。

 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

 

你可以在这里查看依赖标签列表及其含义。

好了,现在我们知道了什么是词性标注,让我们用它来研究我们的标题数据集。

You can check the list of dependency tags and their meanings here.

我们可以清楚地看到,名词(NN)在新闻标题中占主导地位,其次是形容词(JJ)。这对于新闻文章来说是典型的,而对于艺术形式来说,更高的形容词(ADJ)频率可能发生得相当多。

 

Code snippet that generates this chart

你可以通过调查哪一个单数名词在新闻标题中最常见来深入了解这个问题。让我们来了解一下。

We can clearly see that the noun (NN) dominates in news headlines followed by the adjective (JJ). This is typical for news articles while for artistic forms higher adjective(ADJ) frequency could happen quite a lot.

*“战争”、“伊拉克”、“人”*等名词在新闻标题中占据主导地位。您可以使用上面的函数可视化和检查其他词类。

 

Code snippet that generates this chart

探索文本的复杂性

了解文本的可读性(难读性)以及什么类型的读者能够完全理解它是非常有益的。我们需要大学学历才能理解这个信息吗?还是一个一年级的学生就能清楚地明白重点是什么?

有许多可读性分数公式可用于英语。一些最突出的例子是:

You can actually put a number called readability index on a document or text. Readability index is a numeric value that indicates how difficult (or easy) it is to read and understand a text.

可读性测试

解释

公式

自动化可读性索引

输出是理解一篇文章所需的美国等级水平的近似表示。

Interpretation:

轻松阅读(FRE)

Formula:

更高的分数表示材料更容易阅读,
更低的数字表示更难阅读的段落:
–0-30 岁大学
–50-60 岁高中
–60 岁+四年级

Interpretation:

FleschKincaid 等级级别(FKGL)

Formula:

结果是一个与美国年级水平相对应的数字。

FKGL = 0.39 *(总字数/总句子数)

  • 11.8(总音节数/总字数)-15.59

Interpretation:

结果是一个与美国年级水平相对应的数字。

Formula:

Interpretation:

The result is a number that corresponds with a U.S grade level.

Formula:

Textstat 是一个很酷的 Python 库,它提供了所有这些文本统计计算方法的实现。让我们用 Textstat 来实现 Flesch 阅读容易指数。

现在,您可以绘制分数的直方图并可视化输出。

Textstat is a cool Python library that provides an implementation of all these text statistics calculation methods. Let’s use Textstat to implement Flesch Reading Ease index.

几乎所有的可读性分数都在 60 分以上。这意味着一个普通的 11 岁学生可以阅读和理解新闻标题。让我们检查可读性分数低于 5 分的所有新闻标题。

 

Code snippet that generates this chart

你可以在新闻标题中看到一些复杂的词汇,如*“投降”、“过渡”、“诱捕”*等。这些话可能导致分数降到了 5 分以下。

最后的想法

 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在本文中,我们讨论并实现了针对文本数据的各种探索性数据分析方法。有些很常见,有些不太为人所知,但所有这些都是对您的数据探索工具包的巨大补充。

为了使数据探索更加容易,我创建了一个“自然语言处理探索性数据分析模板”,您可以在工作中使用它。

Hopefully, you will find some of them useful in your current and future projects.

To make data exploration even easier, I have created a  “Exploratory Data Analysis for Natural Language Processing Template” that you can use for your work.

Get exploratory data analysis for Natural Language Processing template

此外,正如您可能已经看到的,对于本文中的每个图表,都有一个代码片段来创建它。只需点击图表下方的按钮。

探索愉快!

沙胡尔 ES

数据科学家,非常熟悉机器学习、NLP 和音频处理领域。他是 Kaggle 大师,也喜欢做开源。

阅读下一篇

如何构建和管理自然语言处理(NLP)项目


Dhruvil Karani |发布于 2020 年 10 月 12 日

如果说我在 ML 行业工作中学到了什么的话,那就是:机器学习项目很乱。

这并不是说人们不想把事情组织起来,只是在项目过程中有很多事情很难组织和管理。

你可以从头开始,但有些事情会阻碍你。

一些典型的原因是:

笔记本中的快速数据探索,

取自 github 上的研究报告的模型代码,

  • 当一切都已设置好时,添加新的数据集,
  • 发现了数据质量问题并且需要重新标记数据,
  • 团队中的某个人“只是快速地尝试了一些东西”,并且在没有告诉任何人的情况下改变了训练参数(通过 argparse 传递),
  • 从高层推动将原型转化为产品“仅此一次”。
  • 多年来,作为一名机器学习工程师,我学到了一堆东西,它们可以帮助你保持在事物的顶端,并检查你的 NLP 项目(就像你真的可以检查 ML 项目一样:)。
  • 在这篇文章中,我将分享我在从事各种数据科学项目时学到的关键指针、指南、技巧和诀窍。许多东西在任何 ML 项目中都是有价值的,但有些是 NLP 特有的。

Over the years working as a machine learning engineer I’ve learned a bunch of things that can help you stay on top of things and keep your NLP projects in check (as much as you can really have ML projects in check:)).

In this post I will share key pointers, guidelines, tips and tricks that I learned while working on various data science projects. Many things can be valuable in any ML project but some are specific to NLP.

Continue reading ->


到此这篇etap安装教程(etap12.6安装)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 2024越狱源一键复制(14.2越狱源地址)2025-05-10 18:45:08
  • pcie4.0x1速度(pcie4.0 速度)2025-05-10 18:45:08
  • vue.js使用教程(vue.js快速入门)2025-05-10 18:45:08
  • jsj是哪个明星(jsz是哪个明星的缩写)2025-05-10 18:45:08
  • vue.js从入门到项目实战(Vue.js从入门到项目实战(升级版)下载)2025-05-10 18:45:08
  • vue中的插槽的作用(vue三种插槽的区别)2025-05-10 18:45:08
  • 时钟的代码(时钟代码js)2025-05-10 18:45:08
  • pcie5.0电源和ATX3.0(pcie4.0供电)2025-05-10 18:45:08
  • pcie5.0速度已经超过内存速度了吗(pcie 4.0速度)2025-05-10 18:45:08
  • Redhat9.0默认的文件系统类型为(在redhatlinux9中系统默认的)2025-05-10 18:45:08
  • 全屏图片