步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)

新闻资讯2026-04-21 16:10:02

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

原文:https://towardsdatascience.com/technologies-for-applied-data-science-f806f88d4b61?source=collection_archive---------23-----------------------

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第1张

来源:https://unsplash.com/photos/Rfflri94rs8

构建和部署使用机器学习来个性化产品的数据产品通常涉及多种学科,包括数据科学、产品管理和工程。我曾在一些组织中工作过,在这些组织中,数据科学和工程团队有些孤立,以下方法用于将模型投入生产:

  • **笔记本:**让数据科学家将模型投入生产的一种方法是使用 Databricks 等供应商,使数据科学家能够编写 PySpark 笔记本,这些笔记本可以执行功能工程和模型推理,以便在大型数据集上批量应用。
  • **模型移交:**另一种方法是为数据科学家定义一个接口来存储模型,其中单独的基础设施用于模型推断。这可以通过专有基础设施或云产品(如 AWS SageMaker)来实现。

这两种方法都使数据科学家能够将模型投入生产,但在构建需要处理实时数据集的数据产品时会有很大的限制,在这种情况下,应将最近的用户行为纳入模型预测。

我遇到过两个需要实时执行特征工程和模型推理的用例,它们比使用小批量更适合。第一个应用是在广告技术中,当系统接收到广告印象时,价格可以实时更新。我探索的第二个应用是移动游戏的倾向模型,当系统接收到新玩家数据时,该模型会实时更新。这只是两个示例应用程序,还有很多应用程序可以受益于实时特征工程和模型推理,例如使用会话数据来改进推荐的推荐系统。

克服这一限制的方法之一是让一些数据科学家更多地接触用于服务模型的基础设施。拥有这一专业的数据科学家通常被称为“应用科学家”,这个头衔现在正在几家大型科技公司使用。该角色位于数据科学和机器学习工程的交叉点,在团队由数据科学家和工程师组成的组织中变得越来越常见,这些学科之间存在直接协作而不是孤岛。

如果你是一名数据科学家,正在寻找一个应用科学家的角色,为了精通这个新角色,你需要学习大量的工具和技术。这篇博客文章的目的是简要介绍一些最相关的工具,供这个新兴角色学习。以下是我推荐的技术,通过学习可以变得熟练:

  • Web 端点:使用 HTTP 提供 ML 预测是很常见的。
  • Docker & Kubernetes: 你需要能够自动化部署。
  • NoSQL: 这些数据库提供低延迟的数据检索。
  • **消息流:**您需要在组件之间传递数据。
  • **日志记录:**您需要能够监控部署和跟踪事件。
  • Golang: 与工程师合作开发代码库。

每个主题都有很多书籍,所以我在这里只简单介绍一下,并指出需要重点学习的领域。

提供数据产品的最常见方式之一是通过 HTTP(S)。当使用微服务架构时,可以使用 gRPC 之类的协议在服务之间进行通信,但是最终的输出通常是使用 HTTP 通过 web 提供的。因为它是服务于 ML 预测的通用协议,所以熟悉构建 web 端点和理解一些基础知识是很有用的。

用于构建 web 端点的库将根据您用于模型推断的编程语言而有所不同。我建议创建一个设置 REST 服务的示例应用程序,其中端点监听预测请求并返回模型预测作为结果。这可以通过在 HTTP 请求体中以 JSON 格式传递特征向量,并在响应体中以 JSON 有效负载的形式传递预测来实现。对于 Python 来说,Flask 是一个用于构建端点的方便的包,如这里的所述。如果你用的是 Java,有各种各样的库,而 Undertow 是我的首选。对于围棋,我用过 Goji 和 fasthttp。

不管使用哪种编程语言来服务 ML 模型,HTTP 中都有一些概念需要熟悉。其中包括:

  • **HTTP 响应代码:**提供有关 web 请求是否成功、发生错误或请求无效的详细信息。
  • **HTTP 请求头:**向端点提供关于请求的信息,比如请求体是否被压缩。
  • **HTTP 响应头:**从端点向请求者提供关于 web 响应的细节,比如内容类型。
  • **内容类型:**描述在 web 请求和 web 响应的主体中传递的数据类型。ML 服务的常见类型是 JSON 和 binary,其中 binary 用于压缩或图像/视频数据。

为了构建可以与组织内的系统交互的服务,以及为了构建可以为来自外部系统(如广告交换)的请求提供服务的系统,学习这些概念是很有用的。

Docker 是数据科学家学习的一个很好的工具,因为容器能够为运行 ML 模型创建可再现的环境。它也非常适合打包您想要在生产环境中提供的 web 服务。Docker 和容器化非常适合数据科学家学习,即使您不打算部署数据产品。

如果您想要构建一个可伸缩的 web 应用程序来服务于 ML 模型,Kubernetes 正在成为首选的方法。Kubernetes 是一个自动化部署容器化应用程序的系统,提供自动扩展和集群管理功能。使用 Kubernetes,您可以为部署容器提供一个配置,系统会处理关于启动基础设施的大部分细节。使用 Kubernetes 可以大大简化构建需要扩展到大工作负载的数据产品的过程,因为单个服务器(节点)的大部分管理都被抽象掉了。Kubernetes 的托管云产品,如谷歌的 GKE,大大降低了部署 web 应用程序的复杂性,这些应用程序可以扩展到大量的请求。

对于学习 Kubernetes,我的建议是在 AWS 或 GCP 上创建一个个人帐户,并使用托管的 Kubernetes 产品来练习部署一个示例应用程序,比如上一节中讨论的预测端点。谷歌的 GKE 通过 web 控制台提供了比 AWS EKS 更多的功能,并且可能更容易学习 Kubernetes 的基础知识。

Kubernetes 探索了几个领域来获得这种技术的经验,包括:

  • **资源限制:**为部署中的每个 pod 定义资源约束,这会影响集群调整大小的时间和方式。
  • **公开服务:**公开服务有多种方式,比如使用节点端口和第七层负载均衡器。
  • **滚动更新:**这种部署方法在避免任何服务中断的同时,将流量提升到新的 pod。
  • **健康 ping:**使集群能够确定服务是否关闭。

Kubernetes 是一个广泛的主题,因为它有各种各样的特性。学习这个框架很有用,因为它有助于将应用程序容器化和应用程序部署分开。

许多实时数据产品使用 NoSQL 数据库对传入请求提供低延迟响应。例如,当在会话期间接收到新事件时,系统可能需要更新用户配置文件,或者从 NoSQL 数据库中检索预先计算的值,以执行不同产品功能的 A/B 测试。数据科学家通常使用关系数据库,关系数据库通过 SQL 语言提供了广泛的功能。然而,SQL 的表达能力通常会导致查询运行缓慢。NoSQL 数据库提供了一种解决方案,其代价是一组表达性较差的操作,通常返回结果的速度比关系数据库快几个数量级。

NoSQL 有基于内存和基于磁盘的产品,具有不同的性能特征。基于内存的产品(如 Redis 或 Memcached)将所有数据存储在内存中,通常具有最低的延迟,而基于磁盘的产品(如 DynamoDB 或 CouchBase)将项目存储到磁盘,其中一些产品提供基于内存的缓存以提高性能。考虑到硬盘与 RAM 的大小,基于磁盘的产品通常每 GB 更便宜,但在响应查询时确实有更高的延迟。这两种类型的数据库都使用键值存储提供数据检索,其中键可以是用户标识符,值是可以在几毫秒内读取和写入的用户信息,并且通常提供亚毫秒级的性能。

NoSQL 数据库是一项非常值得学习的技术,因为它让数据科学家更接近工程团队用于生产系统的一些工具。熟悉这些类型的数据库意味着数据科学家可以直接与工程团队合作开发实时数据产品。以下是学习 NoSQL 工具时需要考虑的一些主题:

  • **延迟要求:**应用是否需要亚毫秒级延迟,或者更高的延迟是否可以接受?
  • **模式:**数据结构是固定的模式,还是可以随着时间的推移而发展?
  • **成本考虑:**您需要存储多少数据,基于磁盘的存储适合您的使用情形吗?
  • 接口:NoSQL 数据库与您现有的技术平台接口良好吗?

Redis 是一个很好的数据库,值得作为第一个 NoSQL 技术来学习,因为它很容易作为容器运行,并且大多数云平台都提供了托管解决方案,它提供了直接的设置和获取操作,并且它有限的模式选项提供了与关系数据库的明显区别,这表明该数据库需要不同的数据存储思维。要开始使用 NoSQL,我的建议是更新前面讨论的预测端点,以检索传入请求的用户级数据,补充预测请求中传递的特性。

许多数据产品被设计为微服务,它们执行特定的任务,并依赖其他服务来响应请求。实时数据产品中消息流的两个常见用例是支持组织内不同微服务之间的通信,以及将事件转发到端点,端点将保存数据以用于下游分析和模型构建。第一种情况的例子是用户可以通过网络浏览器改变参数,并且数据产品应该使用新的配置。对于第二种情况,考虑一个模型推理端点,它进行预测,然后将输出传递给一个服务,该服务将预测存储到关系数据库中。

云中有各种各样的消息传递解决方案,包括 Apache Kafka 等开源解决方案,以及 AWS Kinesis 和 GCP PubSub 等云产品。这些消息传递产品使部署中的不同服务能够通信和共享数据。以下是学习这些技术时要探讨的一些主题:

  • **重试逻辑:**该工具是否只提供一次交付,或者您是否需要在端点显式处理重复或缺失的消息?
  • **一对多:**一个消息生产者可以将同一事件发送给多个消息消费者吗?

对于数据科学家来说,学习消息服务是很有用的,因为它们经常被用来定义驱动数据产品的服务之间的接口。

如果您要在生产环境中部署一个 ML 模型,那么您需要能够监控系统,以确保系统按预期工作,检测何时出现问题,并快速响应任何事件。如果您正在与工程团队合作,那么可能已经有了完成这些任务的标准化方法,例如使用 Datadog 或 Splunk 等供应商解决方案。如果您是从零开始,我的建议是在 GCP 上构建一个示例应用程序,并使用 StackDriver 熟悉监视运行在 Kubernetes 上的实时应用程序。

系统监控的目标是确保模型部署按照预期实时运行。本主题独立于模型监控任务,后者的目标是测量已部署模型的准确性。系统监控可以包括关于资源消耗、服务的请求量、模型输出的分布的度量,以及潜在的大量定制应用度量。

学习日志记录和监控系统时,获得以下类型任务的经验很有用:

  • **控制台日志记录:**编写一个将消息记录到日志服务的应用程序,比如使用云日志 API。
  • **度量日志记录:**使用云监控 API 向日志记录服务写入一个连续变量,比如每秒请求数。
  • **警报条件:**设置当每秒请求阈值超过指定值时触发的警报。

响应警报的流程因平台和团队结构而异。一些组织的开发运维团队负责处理共享基础设施上的故障,而负责部署服务的团队还负责管理服务故障也很常见。日志属于 ML Ops 的广泛话题,是机器学习产品的 DevOps。

如果您希望着手构建服务于 ML 模型的 web 端点,那么 Go 编程语言为构建可伸缩服务提供了一个很好的选择。此外,如果你的工程组织已经使用 Go,学习这种语言可以直接与这些团队合作。精通一门新的编程语言是一项艰巨的任务,所以最好专注于这门语言对构建数据产品最有用的方面。Go 是一种用于构建 ML 服务的优雅语言,因为 struct 数据类型通过注释为不同类型的数据存储提供了方便的接口,对大多数数据存储和消息传递系统都有很好的库支持,并且它是为并发性而构建的,可以扩展到大型工作负载。

我建议通过编写执行以下任务的小应用程序来开始使用 Go 编程语言:

  • **Rest 端点:**使用内置的net/http模块构建一个 web 服务,接受 JSON 请求并返回 JSON 响应。
  • Rest 消费者:编写一个应用程序,该应用程序对您刚刚创建的端点进行读写操作。
  • Json to Struct: 使用struct type定义一个数据结构,并更新端点将传入的 Json 转换为 Struct 数据类型。
  • struct to Json: 使用 Struct 注释将 Struct 对象写入文件。读入 Json 文件并将其转换为 struct 类型。
  • struct to data store: 使用 Struct 注释将 Struct 对象写入数据存储,如 Redis 或 Dynamo。
  • **简单的 Logit 模型:**更新 rest 端点,将硬编码的逻辑回归模型应用于 Json 中传递的。

如果您能够在 Go 中完成这些任务,那么您就拥有了开始构建实时数据产品基础所需的许多要素。当然,基于您需要应用的 ML 模型的类型,以及您需要处理的数据源,事情会变得更加复杂。快速启动并运行 Go 模型推理服务的一个方法是使用在 GO 和 Python 中都可以工作的库,例如 LightGBM 或 tfgo 。

虽然有很多学习 Go 语言的书籍,但是标准文档是一个很好的起点,我的建议是着手使用您最感兴趣的特性来引导学习过程。一旦你对这门语言有了一些熟悉,最好更详细地重温一下这门语言的基础,以确保你能创作出高效且可维护的 Go 代码。

应用科学是一个广泛的主题,因为它涉及学习机器学习工程学科的一个大子集。这篇文章介绍了一些核心技术和主题领域,在从数据到应用科学家的转变过程中,这些都是很有用的。

要学习的东西很多,但是学习更多工程堆栈的好处是可以着手构建数据产品,并且更可靠地将数据产品从原型部署到生产部署。

本·韦伯是 Zynga 应用科学总监。我们正在招聘!

原文:https://towardsdatascience.com/telco-customer-churnrate-analysis-d412f208cbbf?source=collection_archive---------6-----------------------

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第2张

随机森林图片,作者图片

在这篇博客中,我们将描述我们如何建立基本但有用的模型来解释基于 Kaggle Telco 客户数据集的流失率。具体过程包括(1)背景和问题,(2)数据总结和探索性分析,(3)数据分析,(4)策略建议,局限性和未来研究。

该项目由**马书恒、**承建。要查看使用的完整代码,请找到我们的 GitHub 。

1.1 背景

随着使用电话服务的客户数量大幅增加,电信公司的营销部门希望吸引更多新客户,并避免现有客户终止合同(流失率)。为了扩大客户群,电信公司的增长率(新客户数量)必须超过流失率(现有客户数量)。导致现有客户离开其电信公司的一些因素是其他公司提供的更好的价格、更快的互联网服务和更安全的在线体验。

高流失率会对公司的利润产生不利影响,并阻碍增长。我们的客户流失预测将能够向电信公司提供清晰的信息,使其了解如何留住现有客户,并了解导致现有客户终止合同的潜在原因(高流失率)。

电信公司可以使用我们的分析来衡量它提供的产品与其竞争对手提供的产品相比是否有用。由于获得新客户的成本远高于保留现有客户的成本,公司可以使用流失率分析来提供折扣、特别优惠和优质产品,以保留现有客户。

1.2 数据来源

电信公司的数据集在 Kaggle 上可用 ,它来自 IBM 样本集集合。该公司为加州的 7043 名客户提供家庭和互联网服务。我们的挑战是帮助公司预测留住客户的行为,并分析所有相关的客户数据,以开发有针对性的客户保留计划。

所提供的数据集包含以下信息:

  1. 客户的人口统计信息,包括性别、年龄、婚姻状况
  2. 客户账户信息,包括在公司的月数、无纸化账单、付款方式、每月费用和总费用
  3. 客户使用行为,如流媒体电视、流媒体电影
  4. 客户注册的服务:电话服务、多重服务、互联网服务、在线安全、在线备份、设备保护和技术支持
  5. 客户流失,客户在上个月离开的地方

1.3 研究目标

  1. 哪一个是促成高保留率的最重要因素?
  2. 哪种分析模型可以准确预测客户的流失率?
  3. 使用不同的分析模型有什么好处和坏处?
  4. 电信公司如何利用我们的分析来制定有针对性的保留计划?

1.4 研究的合理性

我们的客户流失分析对于电信公司了解客户停止使用其产品或服务的原因非常重要。除非公司了解客户取消导致的总收入损失,哪些客户取消,以及他们取消的原因,否则电信公司很难改进其产品和服务。

由于流失率分析是监督学习领域中的典型分类问题,我们将使用简单线性回归、二项式 Logit 回归、二项式 Probit 回归和随机森林回归来分析客户的流失行为。

我们的研究将帮助该公司提供关于如何通过针对特定客户的人口统计信息、账户信息、使用行为和注册服务来减少客户流失的见解。

我们用来分析的数据是 Kaggle 上的二手数据,Kaggle 是一个开源的数据聚合平台。一部分数据附在图 1 中。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第3张

图 1:数据源表,按作者分类的图片

2.1 数据介绍:

在 Python 中使用 Pandas 读取数据后,我们发现原始数据集中没有缺失数据,并且大多数特征(如性别、电话服务、支付方式等)都是分类数据。

每月费用和总费用都是数字数据。每月费用的汇总统计如下:

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第4张

图 2:每月费用,按作者分类的图片

平均来说,人们为这些服务支付 64.76 美元,最贵的每月收费是 118.75 美元。最便宜的月费是 18.25 美元。

2.2 相关性:

使用标签编码和编码器转换所有分类数据后,我们对所有特征进行了成对关联:

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第5张

图 3:热图:功能的相关性,按作者分类的图片

从热图中,我们可以看到“合同”和“任期”这两个特征有很高的相关性。这是有意义的,因为这些特征衡量了客户的忠诚度。

“流媒体电视”、“流媒体电影”、“多线”和“月费”彼此具有高度相关性。我们认为这是因为观看电影的客户更有可能观看电视。由于他们在观看电影或电视节目时使用大量数据,他们的月费往往会上涨。对于账户上有多个账户的客户来说,他们比只有一个账户的客户更有可能支付更多的费用。

2.31 分类数据分析:

  • 如图 4:老年公民,老年公民客户更有可能为电信服务流失。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第6张

图 4:老年公民,作者图片

  • 如图 5:合作伙伴,没有合作伙伴的客户更有可能为电信服务流失。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第7张

图 5:合作伙伴,作者图片

  • 如图 6:依赖,没有依赖的客户更有可能为电信服务流失。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第8张

图 6:依赖者,按作者分类的图像

  • 如图 7:互联网服务,看起来大多数人都在使用光纤互联网,订购光纤互联网的客户更有可能流失。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第9张

图 7:互联网服务,作者图片

  • 如图 7:流电视和图 8:流电影,有趣的是看到流电视和流电影的人更容易流失。这可能意味着流媒体电视和电影的客户对电信公司的流媒体服务不满意。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第10张

图 7:流媒体电视,作者图片

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第11张

图 8:流媒体电影,作者图片

2.32 数值数据分析:

  • 如图 9:每月收费,在宁滨之后,为了更好的可视化,将数据分成 6 个箱,每个箱中的客户数量相等。与支付较少费用的人相比,每月支付 70.35 美元至 118.75 美元的客户更有可能流失。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第12张

图 9:每月费用,按作者分类的图片

如图 10:每月收费,在宁滨之后,为了更好的可视化,将数据分成 5 个箱,每个箱中的客户数量相等。与每月支付超过 18.799 美元至 267.07 美元的人相比,每月支付 18.799 美元至 267.07 美元的客户最有可能流失。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第13张

图 10:总费用,按作者分类的图像

我们为数据选择的四种方法是(1)简单线性回归;(2)二项式 Logit 回归;(3)二项式概率单位回归;(4)随机森林回归。

3.1 车型介绍

下面开始解释我们的首选的模型:简单线性回归。线性回归模型将目标预测为特征输入的加权和。线性回归的优点和缺点主要是由于它的简单性和易用性作为我们的基准精度和参考。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第14张

图 11:简单的线性模型,作者的图片

我们第二个选择的模型:二项式 logit 回归与模型 1 不同。二项式逻辑回归是一个 sigmoid 函数,其中输出是概率,输入可以是从-无穷大到+无穷大。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第15张

图 12:二项式 Logit 回归,作者图片

对于我们的特定数据集, pro side 包括(1)它对二项式输出数据集极其有用。(2)与先进的机器学习模型相比,它仍然相当容易解释。(3)将来可以方便地扩展到多个类。(4)它可以将模型系数解释为特征重要性的指标。

包括(1)它假设因变量和自变量之间的线性关系。(2)输出仅限于离散数据格式。

我们的第三个选择模型:二项式概率单位回归与我们的第二个概率单位模型有很多相似之处。然而,它们确实有一些不同之处。在相似性方面,它们在二项式数据集上都表现得相当好。对于差异,在概率单位模型中,它表示累积的正态 pdf。因为逻辑模型的尾部略平,所以概率单位曲线比逻辑曲线更快地接近轴。尽管我们不得不承认逻辑回归模型比概率单位模型更容易解释,因为逻辑回归可以被解释为建模对数优势,但尝试这两种模型并在之后进行检查仍然是一个不错的主意。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第16张

图 13:二项式概率单位回归,作者图片

我们的第四个也是最后一个模型是一个相当常用的机器学习模型:随机森林。随机森林模型由大量单独的决策树组成,这些决策树作为一个整体运行。随机森林中的每棵树都有一个类别预测,得票最多的类别成为我们模型的预测。

在我们的例子中,有利的一面包括(1)它通常提供高精度并很好地平衡偏差-方差权衡。(2)可以作为特征重要性可视化。(3)它在相当程度上不受离群值的影响。(4)既能处理线性关系,又能处理非线性关系。缺点是(1)与以前的模型相比,它更难解释。(2)如果数据集很大,则需要更长的时间。

3.2 数据分析的细节

在我们将数据集应用到所选模型之前,第一步总是转换和清理我们的数据。在我们的案例中,为了充分展示数据的威力,我们需要采取几个步骤。

3.21:删除 NA

作者删除 NA、图像的代码

我们的数据来自现实情况,其中极有可能包含空的数据单元格。的确如此。在删除之前,总共有 7043 条意见。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第17张

图 14:删除前,作者的图片

删除后,它有 7032 个观察值。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第18张

图 15:删除后,作者的图片

因此,它只删除了 9 个空观测值,这对我们的数据集应该只有一个可忽略的影响。

3.22:将“否”转换为 0,将“是”转换为 1

我们的许多数据列的默认值都是二进制的:它们要么是“是”,要么是“否”。

转换二进制代码,作者的图像

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第19张

图 16:默认值,作者图片

为了更好地操作数据,我们最好将它们转换为 0 和 1。

3.23:因子转换

因子转换代码,图片作者

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第20张

图 17:转换后,作者的图像

有三列特征应被编码成因子:

  1. 互联网服务,包括 DSL、光纤和
  2. 合同包括逐月、一年和两年。
  3. 付款方式包括银行转账、信用卡、电子支票和邮寄支票。

完成这三个步骤后,我们现在可以将数据放入我们选择的模型中。

3.3 主要结果、发现和解释

作者创建模型、图像的代码

3.31 简单回归模型

让我们逐一运行上面选择的四个模型。第一个是简单的线性回归模型。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第21张

图 18:简单线性回归结果,作者图片

根据图 18 中的结果:简单线性回归,在仔细检查每个变量的显著性并只保留那些 p 值小于 0.05 的变量后,我们得到的方程是:

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第22张

图 19:带系数的简单线性回归,作者图片

这个等式告诉我们,如果客户是老年人,使用多条线路,使用无纸化结算,使用电子支票作为支付方式,他或她更有可能流失。

然而,如果客户在公司呆的时间更长(任期),选择一年或两年的合同,而不是按月选择,并且公司提供更便宜的价格,他或她就不太可能流失。

3.32 Logit 回归模型

我们的第二个模型是二项式逻辑回归模型。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第23张

图 20:二项式逻辑回归结果,作者图片

根据图 20 中的结果:逻辑回归模型,在仔细检查每个变量的显著性并仅保留 p 值小于 0.05 的变量后,我们得出的方程为:

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第24张

图 21:带系数的二项式逻辑回归,作者图片

这个等式告诉我们,如果客户是老年人,使用多条线路,使用光纤互联网服务,使用无纸化计费,使用电子支票作为支付方式,他或她更有可能流失。

然而,如果客户在公司呆的时间更长(任期),根本不选择互联网服务,选择一年或两年的合同而不是按月选择,并且公司提供更便宜的价格,他或她就不太可能流失。

3.33 概率单位回归模型

我们的第三个模型是二项式概率单位回归模型。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第25张

图 22:二项式概率单位回归结果,作者图片

根据图 22 中的结果:概率单位回归模型,在仔细检查每个变量的显著性并只保留那些 p 值小于 0.05 的变量后,我们得到的等式是:

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第26张

图 23:带系数的二项式概率单位回归,作者图片

这个等式告诉我们,如果客户是老年人,使用多条线路,使用光纤互联网服务,使用流媒体电影,使用无纸化结算,并使用电子支票作为支付方式,他或她更有可能流失。

然而,如果客户在公司呆的时间更长(任期),根本不选择互联网服务,选择一年或两年的合同而不是按月选择,并且公司提供更便宜的价格,他或她就不太可能流失。

3.34 随机森林模型

我们的第四个模型是随机森林。下面列出了随机森林的具体代码。

随机森林代码,作者图片

森林中的一棵样本树具有以下形状:

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第27张

图 25:样本树,作者的图片

这确实是一个非常拥挤的树,因为我们有很多特征来进行分割。每个节点代表由树做出的决定或标准,每个分支代表父节点和子节点之间的关系。最终,所有结果将被分配到节点的最后一级。

并且从随机森林的特殊特性中,我们还可以选择检查特性的重要性:

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第28张

图 25:按作者排序的随机森林特征重要性图片

图 25:附录中的随机森林要素重要性,重要性通过平均降低精度计算得出:如果我们删除该变量,模型精度会降低多少。在右侧,该表使用平均下降基尼系数来衡量:基于基尼系数杂质指数的可变重要性衡量,用于计算树中的分裂。

对于这两个表,最上面的是任期,总费用,每月费用,合同,互联网服务。这个结果与我们以前的“模型”的显著结果相一致。

代码的准确性比较,图片由作者

3.4 精度对比与探索

至于比较不同模型的准确性,我们首先将数据集分成 70%作为训练,30%作为测试。然后,我们改装模型,并在下面的 AIC/BIC 表中总结了结果。请注意,AIC 和 BIC 不适合随机森林,我们稍后将使用选定的高精度模型对它们进行比较。

3.41 AIC/BIC 表

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第29张

图 26: AIC/BIC 表格,作者图片

根据上面的 AIC/BIC 表,由于 AIC/BIC 越低,模型越好,我们的最佳模型是二项式逻辑回归模型。让我们通过计算预测精度来继续将其与随机森林模型进行比较。

3.42 精度表

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第30张

图 27:准确度表,作者图片

从上面的准确度表中,我们可以看到,尽管它们的准确度相似,但二项式逻辑回归模型的性能略好。

由于二项式逻辑回归模型是最好的一种,让我们来探讨一下它的准确性的细节。我们可以使用 ROC 曲线和混淆矩阵来考察它的更多性能。

3.43 大鹏

ROC 曲线代码,作者图片

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第31张

图 28: ROC 图,作者提供的图像

在图 28: ROC 图中,ROC 确定了在用户定义的阈值下分类模型的准确性。它使用曲线下面积(AUC)来确定模型的准确性。面积越高,模型越好。ROC 绘制在真阳性率(Y 轴)和假阳性率(X 轴)之间。

从结果图中,我们可以观察到,与 TPR 相比,我们的模型具有稍高的 FPR。我们将在后面的章节中通过详细的计算进行更仔细的分析。

3.44 混淆矩阵

混淆矩阵代码,作者图片

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第32张

图 29:混淆矩阵,作者图片

我们还可以使用聚合混淆矩阵提取大量有用的信息。

  1. 在每个瓷砖的中间,我们有计数的总百分比。实际的计数在它下面。
  2. 在底部,我们有列百分比。在 Target 为 1 的所有观察值中,34.7%被预测为 1,65.3%被预测为 0。
  3. 在每个图块的右侧,我们有行百分比。在所有预测值为 1 的观测值中,4.1%的观测值实际上为 1,而 95.9%的观测值为 0。
  4. 颜色强度基于计数。计数越多,颜色越深。

3.45 混淆矩阵的重要计算

从聚集的混淆矩阵,我们可以计算大量的矩阵。

  • 准确性-它决定了模型的整体预测准确性。

准确度=(真阳性+真阴性)/(真阳性+真阴性+假阳性+假阴性)

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第33张

  • 真阳性率(TPR)-它表示所有正值中有多少个被正确预测。也代表了敏感。

TPR = (TP/TP + FN)

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第34张

  • 误报率(FPR)-它指示所有正值中有多少负值被错误预测。

FPR = (FP/FP + TN)

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第35张

  • 真负率(True 它指示所有负值中有多少负值被正确预测。它还具有特异性。

TNR = (TN/TN + FP)

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第36张

  • 精度:它表示在所有预测的正值中,有多少值实际上是正的。

精度= (TP / TP + FP)

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第37张

4.1 建议

根据我们在第 3 节中提供的所有可视化和分析,我们可以为决策者提出以下建议:

  1. 对于类似的问题,最好选择二项式逻辑回归,因为 logit 模型具有最高的准确性,并且表明了特征的重要性。它也很容易解释和应用。
  2. 就我们目前的情况而言,最佳模型 logit 模型表明,如果企业想留住顾客,它可以采取以下措施:
  • 更多地瞄准年轻和中年客户,因为他们更有可能采用现代技术,并且有预算来享受。
  • 为决定选择一年期或两年期合同的客户提供更多的折扣,这样更多的客户将受到该合同的约束。
  • 考虑整体折扣,因为价格总是客户在现有客户中选择的主要因素之一。

4.2 限制

对于研究的局限性,我们应该提到我们的模型和数据集的以下局限性。

  1. 观察的数量还不错,但是如果我们能有更多列的特征,比如客户的地理位置、竞争对手的信息和其他重要因素,我们就能从结果中获得更多的洞察力。
  2. 由于我们选择的模型不仅取决于复杂性和预测能力,更重要的是取决于解释的容易程度,因此在我们的范围之外还有更强大的模型。例如,神经网络或极端梯度提升可能会表现得更好,并导致精度提高。
  3. 我们的数据集本质上是一个横截面数据集。这意味着它里面没有时间序列因素。由于我们的目标是预测流失率,我们可以选择从每月,一年到两年的合同。我们最好能找到一个包含所有客户长达两年的信息的时间序列数据集,以获得更好的结果来预测未来市场并做出决策。

4.3 下一步

  1. 我们可以潜在地考虑拟合神经网络或极端梯度提升以获得更好的精度。然而,我们确实需要考虑解释的困难,因为这两种方法更像一个黑箱,而不是传统的清晰回归。
  2. 尝试找到一个包含长达两年的所有客户信息的时间序列数据集,这样我们不仅可以应用上述模型,还可以应用时间序列域模型,如 ARIMA 模型。

原文:https://towardsdatascience.com/telling-your-data-story-with-funnel-visualizations-1bea6d0f64df?source=collection_archive---------17-----------------------

产品经理知道个人用户数据提供了对产品优势和劣势的巨大洞察力,但是解释原始数据提出了一个挑战。即使是最好的数据分析师也不能通过盯着数据表来传达太多关于每个客户旅程的信息。当浏览数据进行分析时,您希望立即得到问题的答案,而不需要复杂的 SQL 查询。

进入漏斗可视化。客户转化漏斗跟踪用户从第一次点击到最近互动的过程。随着产品进入大众市场,谷歌分析已经让许多人熟悉了转换漏斗的概念,但当转换漏斗显示每个用户采取的行动时,它可以提供更深入的见解。

根据数据和查询,您的客户旅程可以以多种方式细分和可视化。以下是三种不同的客户漏斗可视化方式,可帮助您从数据中获得洞察力:

甜甜圈漏斗

虽然圆环图是最基本的数据可视化之一,但它有助于在整体的几个细分或切片之间进行简单的比较。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第38张

图 1(作者图片)

在上面的图 1 中,圆环图是多路径漏斗的一部分,切片代表客户用来访问网站的设备类型。在第一个甜甜圈中,Android 用户(黄色部分)占网站访客的四分之一以上,但随着用户在漏斗中移动,Android 用户的流失远远超过其他设备上的用户。当漏斗到达最终的甜甜圈图——通过购买实现的客户转化——时,Android 用户只占一小部分。这向产品经理和开发人员表明,他们的网站设计不适合 Android 用户。

在漏斗可视化中使用圆环图(或饼图)的一个缺点是,切片数量越多,图表越难解读。人类很难判断多个相似角度之间的差异,因此尽管整体的 17%和 11%之间存在显著差异,但你可能不容易在环形图中发现它。因此,它们最适用于比较两到三个群体行为的漏斗。

条形图漏斗

相反,放在漏斗顶部的条形图非常适合表示许多组之间的比例差异。这种可视化也很容易定制;您可以上下移动条形图的每个部分,以更好地显示数据所讲述的故事。

条形图漏斗在识别客户旅程中的关键摩擦点时特别有用,因为旅程中的每一步都用一个新的条形图表示。当客户完成转换漏斗中的一个步骤时,他们可以继续进行下一个步骤(他们将出现在下一个条形图上),或者离开图表。

在下面的图 2 中,一家公司推出了名为“PetCam”的功能,旨在吸引动物爱好者更多地关注他们的网站。然而,柱形图漏斗显示,尽管新用户和现有客户都会连接并打开“PetCam”,但该功能并没有对博客流量或新订阅量产生太大影响。它本身可能是一个有趣的功能,但数据显示它没有产生预期的影响。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第39张

图 2(作者图片)

桑基图

毫无疑问,散点图比饼状图和条形图更难理解,但你可能熟悉它们在化学和物理中的用途。他们绘制了一个过程中几个不同阶段的能量或物质流,记录了损失和低效。当你的漏斗需要跨区间的更大规模时,桑基图比饼图和棒线更好。

随着你的产品变得越来越复杂,你的客户的旅程变得不那么线性。客户通过你的网站或应用程序的途径不太可能是单一的。桑基图可以确定许多不同的途径,导致成功的客户转换。以图 3 中的例子为例。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第40张

图 3(作者图片)

使用“PetCam”的同一家公司将其客户转化漏斗显示为 Sankey 图。考虑到目标是让用户购买产品,似乎最重要的目标是增加拥有账户的用户数量。然后,产品经理可以重新设置图表,专注于用户在创建帐户之前所做的事情,并挖掘那些成功的客户旅程以获得更多见解。

结论

漏斗可视化通过数据更深入地直观表达用户决策。用文本或数据表成功地导航客户之旅需要机器般的处理数字和跟踪线索的能力。我们都是人。产品经理、营销人员和数据分析师等可以使用漏斗可视化来更好地理解用户做出的非线性人类决策。数据为您的团队设计个性化的用户体验铺平了道路,以提高销售额和客户转化率。即使是一个基本的饼图也能指明方向。

原文:https://towardsdatascience.com/temporal-coils-intro-to-temporal-convolutional-networks-for-time-series-forecasting-in-python-5907c04febc6?source=collection_archive---------3-----------------------

昨天的文章提供了一个关于*递归神经网络(RNNs)的教程:*它们的 LSTM,GRU,香草变种。今天我们来补充一下**时态卷积网络(TCNs),**作为这个关于时间序列预测器的小编第四篇文章的第十种方法。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第41张

螺旋弹簧,数字艺术家,皮特·林弗斯 Pixabay 上的免费图片

  • 时间循环:Python 中用于时间序列预测的递归神经网络简介|走向数据科学
  • 预测者群体的智慧。面向数据科学的 Python |时间序列集合预测
  • 飞镖的时间序列预测瑞士刀|走向数据科学

RNN 教程通过描述神经网络的核心特征和术语,提供了一般神经网络和递归神经网络的快速运行。今天的文章将从这个基础开始,然后强调时态卷积网络不同于 RNNs 的方面。

我们将通过使用 Darts 库构建一个 TCN,它包装了 PyTorch 包中可用的神经网络;然后在一个小型锦标赛中运行我们的 TCN,对抗三个 RNN 变体和我们昨天遇到的 Theta 方法。

卷积神经网络(CNN)通常应用于计算机视觉任务:图像或视频识别和分类。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第42张

Alexander Lesnitsky 的投影仪电影《The》——pix abay 上的免费图像

Sumit Saha 在 2018 年发表的一篇文章对 CNN 在图像处理中的应用进行了出色的概述(卷积神经网络综合指南 ELI5 way |作者 Sumit Saha |迈向数据科学)。

受视觉皮层早期研究的启发,卷积神经网络的基本架构于 1979 年首次提出。由此产生的“neocognitron”被应用于手写日文字符的识别。

CNN 的核心架构由输入层、隐藏层(其中包括卷积层)和输出层组成。隐藏层执行卷积。汇集层收集整理中间成果。完全连接的层试图导出描述输入值到输出的映射的非线性函数。类似于 RNNs,TCN 也有一个成本损失函数,它试图将其最小化以减少预测误差。

一个卷积是积分学中的一个运算。卷积采用两个函数,其中一个被反转和移位,并计算它们乘积的积分。卷积函数表示一个函数的形状如何被另一个函数修改。卷积类似于互相关,因为它反映了两个系列或序列的相似性。

根据计算机视觉术语,给定节点监管的输入被称为感受野小块。每个节点接收来自网络前一层的有限区域的输入,即节点的感受域。

CNN 将过滤器应用于输入,以检测特征的存在。它的节点或神经元充当这些过滤器。

在图像中,形状或颜色可以代表一个特征。一个过滤器可以专门用于例如垂直线的检测。其他过滤器会将自己与其他特征挂钩,例如水平线。在时间序列中,趋势或季节性是需要隔离的特征。滤波器的值是 CNN 将在训练期间校准的权重,以最小化损失函数中表达的预测误差。当在搜索拍照宠物时对图像进行分类时,CNN 将学习分离狗或猫的特征,从而在它训练的过滤器的帮助下建立一个狗或猫的分类器。在处理时间序列时,它可以学习识别它们的趋势和季节性模式。

节点创建一个特征图,映射出特征的存在。过滤器穿过其输入面片,并检查其是否存在该特征。结果收集在要素地图中。内核或特征检测器是一个二维权重数组。内核穿过图像的感受野来检测特征。滤波器在输入端移动的距离称为步幅

完全连接的层接收提取的特征作为输入,并应用激活函数。这一层之所以得名,是因为它将一层中的每个节点与另一层中的每个节点连接起来:全连接层中节点的感受野是整个前一层。完全连接的层构建了一个通常非线性的函数,该函数将它从前一层接收的特征联系在一起。

CNN 通过一系列的训练时期——前馈接着反向传播——学习从本质特征中挑选出不重要的特征。

时间卷积网络——最近的发展(一种用于序列建模的通用卷积和递归网络的经验评估(arxiv.org))——将递归神经网络的某些属性添加到经典的 CNN 设计中。

TCN 确保因果卷积。输出值必须只依赖于在输入序列中位于前面的值。

TCN 中的扩张将一个节点的感受野扩大到包含更多的历史时期。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第43张

线圈高压技术电源,由 analog us-pix abay 上的免费照片

在 Darts 模型中,我们现在还在第 8 行中导入了 TCNModel 子类。

我们对昨天与 RNN 相关的脚本做了一个小小的改动,对三个 rnn 和 TCN 进行了不同于 0.1 的漏失水平的实验。 Dropout level 表示打开或关闭网络中节点的选项。这是为了防止过度拟合。节点不容易越来越深地陷入连接节点的特定配置中。卷积网络具有更高的过拟合倾向,因此我们不会关闭压差。

Darts 集成了一些经典的数据源,其中包括 Box & Jenkins 的 airline passenger 数据集,我们可以从库中加载该数据集,而无需导入文件。

在航空公司乘客的例子中,我选择 1958 年 8 月 1 日作为测试周期的开始,用常量 FC_START 表示。我们将预测 12 个月,输入常量 FC_N。

Darts 的 load() 函数允许我们将时间序列读入一个 timeseries 对象*。*

函数 pd_dataframe() 可以将 timeseries 对象转换为“正常”序列和 dataframe,使其与 pandas 提供的数据争论方法兼容。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第44张

作者图片

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第45张

作者图片

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第46张

作者图片

该图表揭示了一个非常类似于一个日历年中 12 个月的季节性。为了证实这一点,我们应用了 Darts 的*check _ seasonity()*检验,该检验评估自相关函数 ACF。测试证实时间序列的周期正好是 12.0 个月。就像图表一样,这表明时间序列具有相对简单的模式。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第47张

作者图片

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第48张

作者图片

接下来,我们将时间序列拆分为一个训练数据集和一个验证数据集,时间段 FC_START 是我们在 dependencies 单元格中选择的常量:19580801。

在将源数据输入神经网络之前,我们需要通过应用一个 Scaler() 函数来规范化它们。归一化抵消了前一篇文章提到的爆炸梯度问题。缩放还将使神经网络更容易运行梯度下降来搜索最小预测误差。

目前,时间序列的日期是用字符串编码的。为了使 TCN 能够识别时间步长,我们从这些字符串中提取月份,并通过应用 Darts '*datetime _ attribute _ time series()*函数将它们定义为第二列—协变量或外生回归变量。然后我们用一个定标器将协变量标准化。

列表模型排列了我们想要在时间序列上释放的四个神经网络:我们今天介绍的 TCN 模型;以及我们在昨天的教程中设计的三种类型的递归神经网络:LSTM、GRU 和香草 RNN。

在第 5 行,我们准备了一个条件列表理解,它将一个接一个地读取四个模型,并将它们传递给我们将在下面编写的设置函数。

注意列表理解中的’ if — else’ 条件。TCN 和 RNN 的参数设置不同,因此 list comprehension 为它们调用了不同的函数——*run _ TCN()*和 run_RNN() 。它将在变量 res_models 中收集它们的结果——预测准确性指标。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第49张

作者图片

RNN 模型的训练函数, run_RNN() ,基本上与我们在昨天的文章中讨论的相同。我将跳过 RNNs 的部分,重点放在 TCN。

函数 run_TCN() 具有类似的形状,但是在某些方面与 RNNs 不同。

我们将 input_chunk_length — 用于预测的过去时间段的数量—设置为 13 个月,比check _ 季节性测试返回的周期多 1 个月。RNN 将回顾过去 13 个月,一个完整的季节周期,来计算预测。

我们选择的 output_chunk_length 包含一个完整的季节周期的 12 个月。它必须严格小于 input_chunk_length,因此输入为 13 个月。预测范围受限于输出长度。

为了进行实验,我们将辍学水平设置为 0.1,而不是我们之前使用的零比率。下降水平将有助于模拟不同的网络架构。在每个时期,网络会选择一组不同的神经元,并暂时移除。不同的神经元组合然后做出预测。这些重组将防止 TCN 过度适应同一组神经元。

过滤器的数量应该反映时间序列中固有模式的假定复杂性。我们从折线图中获得的视觉线索表明了一个相对简单的时间序列,具有趋势和季节性的单一顺序。因此,三到五个过滤器应该足以反映其复杂性。

布尔参数 weight_norm 确定 TCN 是否将使用权重归一化。归一化具有权重向量的长度与其方向解耦的效果,这将加速朝向最小误差的梯度下降(权重归一化:加速深度神经网络训练的简单重新参数化(neurips.cc) )。然而,一项研究发现,一种替代方法,批量归一化,可能会导致更好的测试准确性(【1709.08145】大规模图像分类的批量归一化和权重归一化算法的比较(arxiv.org))。因此,重量定额是一个用户可以选择调整的超参数。

膨胀基数因子使 TCN 延伸到时间上更早的节点。这扩展了一个节点的感受域以包含更多的历史时期。它为 TCN 提供了记忆。内核大小应设置为至少与选择的膨胀因子一样大。

在第 6 行到第 18 行建立模型之后,我们将它与第 23 行到第 28 行的训练数据相匹配。拟合器参考训练和验证数据集,并使用它们的时间序列值和我们定义为协变量的月份系列。

第 35 到 37 行得出 12 个月的预测值。

在第 40 行,我们调用了与 RNN 模型相同的绘图仪函数 plot_fitted()

第 43 行将预测值和实际值提供给 accuracy_metrics() 函数,该函数将计算平均绝对百分比误差和一些其他预测质量指标。

当脚本拟合四个模型时,它会显示其进度,然后报告结果准确性指标:

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第50张

作者图片

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第51张

作者图片

绘图仪功能绘制实际观测值和 12 个月的预测值。蓝色预测值的线条与黑色实际曲线相对接近。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第52张

作者图片

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第53张

作者图片

递归神经网络的 LSTM 变体拥有最低的 MAPE,为 5.38%,其次是香草味,为 5.95%。在本例中,TCN 无法发挥其优势,报告的 MAPE 明显高于三个 rnn,为 7.99%。

正如我们昨天所做的,我们通过应用非神经网络预测器(Theta 方法)准备了一个快速基准预测,它将在几秒钟内运行,并将该基准与 TCN 和 RNNs 进行比较。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第54张

作者图片

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第55张

作者图片

Theta 预测的预测误差排在所有三种 RNN 风味之后,尽管它的 MAPE 和均方根百分比误差 RMSPE 低于 TCN。

在本例中,TCN 的绝对 RMSE 和 R 平方(预测中的运动份额与实际观测中的运动一致)优于θ。但是三个 rnn 仍然胜过 TCN 和西塔。

这个特殊的例子不太适合 TCN,但对更复杂模式的时间序列问题的研究——例如厄尔尼诺-南方涛动的预测,太平洋表面的周期性、非季节性变暖——发现 TCN 的准确性优于递归神经网络(【times 提前预测的时间卷积网络|(nature.com) )。

Jupyter 笔记本可在 GitHub 下载:h3ik0th/Darts _ TCN _ RNN:Darts(github.com)中用 TCN 和 RNN 神经网络进行时间序列预测

原文:https://towardsdatascience.com/temporal-fusion-transformer-a-primer-on-deep-forecasting-in-python-4eb37f3f3594?source=collection_archive---------2-----------------------

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第56张

tommyvideo 的 Pixabay 上的原子分子化学-自由图像

两个月前,我写了两篇文章,解释了使用递归和时态卷积神经网络进行时间序列预测。两篇文章都继续吸引着读者。

由于深度预测的初级读本显然有很多读者,我认为神经网络预测者中的最新竞争者也会有类似的兴趣。让我们在书架上增加第三个深度预测者。

  • 在今天的文章中,我们将实现一个**时间融合转换器(TFT)。**我们将使用 Darts 库,正如我们在 RNN 和 TCN 的例子中所做的那样,并将 TFT 与两种基线预测方法进行比较。
  • 虽然之前的文章准备了确定性预测,我们将通过研究概率预测来扩展我们的范围。概率预测是一种输出类型,TFT 和其他神经网络在对它们的损失函数进行一些调整后,已经很好地装备了这种输出。

对于神经网络的一般入门,以及它们在时间序列预测中的应用,我建议从我上面列出的两篇文章中的第一篇开始,“时间循环”。如果你已经知道递归或卷积网络的元素,让我们直接跳到时间融合转换器。

TFT 提供了一种神经网络架构,它集成了其他几种神经架构的机制,例如 LSTM 层和变压器中使用的注意力头。

最近的一篇谷歌人工智能博客文章——“时间序列预测的可解释深度学习”(2021 年 12 月)——提供了时间融合转换器的概述。作者测试了 TFT 的替代方法,如 DeepAR,ARIMA 和 LSTM Seq2Sep。他们在四个数据集上运行它们,并将它们的性能制成表格。TFT 的表现优于其他模型——包括经典方法和不同类型的神经网络。其 50%和 90%的分位数损失比第二好的模型,LSTM Seq2Seq 网络的至少低 7%。

arxiv 在 2020 年末的一篇文章“用于可解释的多时域时间序列预测的时间融合转换器”(arxiv.org))中介绍了 TFT 的概念。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第57张

布莱恩·林等人,2020 年,【912.09363.pdf】1(arxiv.org)

基本构件专门寻找时间序列中的不同方面或模式,其中包括:

  • 时间多头关注块,识别时间序列可能持有的长期模式,并优先考虑最相关的模式;每个注意力头可以聚焦于不同的时间模式;
  • LSTM 序列到序列编码器/解码器,用于总结更短的模式;LSTM 块用于确定时间步长与其周围值的关系(而长期关系则留给注意力集中的人);
  • 门控残差网络块,grn,用于剔除不重要的、未使用的输入。他们还可以随机删除节点,以防止过度拟合。

时间融合解码器之所以得名,是因为它结合了这些专门的层来学习沿时间轴的关系。

TFT 最小化分位数损失函数,这使得它能够生成概率预测。

确定性预测生成展望期内时间段的点估计值。它们没有揭示与点估计相关的不确定性——预测误差的分布。我们想要估计预测值可能与真实值不同的范围。哪个最小值和最大值将包含真实值?

一个概率预测器超出了每个时间步的点估计,并能画出高于和低于平均预测值的可能预测误差带。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第58张

作者图片

任何神经网络都是根据评估预测误差的损失函数来训练的。为了从点估计转移到概率预测,损失函数需要修改,以便分位数回归可以应用于它。

维基百科解释说“分位数回归的实用性的关键在于分位数可以表示为最小化问题的解决方案。”✅check——我们希望最小化神经网络的损失函数。

Darts 包包装了 PyTorch 预测包中内置的功能。PyTorch 实现了分位数损失函数,Wen 等人在他们的 2017 论文(arxiv.org)中对此进行了描述。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第59张

QuantileLoss — pytorch 预测文档

为了理解分位数损失函数的行为,我在旧 Excel 中准备了一个包含一些玩具值的表格。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第60张

作者图片

  • 在最左边的一列,我列出了实际的观察值 y ,我把它们都设置为 0.5。除了列 y_pred 中的一个预测值之外,所有的预测值都超过或低于它们对应的实际值 y
  • 红色列包含分位数损失函数,QL。在它的顶部,用蓝色表示,我们可以看到相应的损失列用来衡量预测误差的百分比值。
  • 当我们研究 90%列时,我们看到 QL 函数用 10%来衡量高估(第一行:高估 0.40,分位数损失 0.04)和低估 90%(最后一行:低估-0.50,分位数损失 0.45)。
  • 10%分位数列返回 90%分位数列的镜像。
  • Excel 的百分位函数计算相应 QL 列的损失百分位。例如,90%百分位得出的加权损失为 0.37:该列中 10 个损失中有 9 个不超过 0.37 的阈值。
  • 顶行十字只是通过将百分点转换回百分比值来检查结果。
  • 50%百分位等于绝对预测误差(y_pred — y)的一半,如第三列(黑色列)的选定行所示。如果使用这种“减半”损失在预测值上下加一个括号,该括号加起来就是完全绝对预测误差(y _ pred-y)。
  • 其他互补损失对的总和也产生相同的完全绝对预测误差:90%/10%、80%/20%或 50%/50%。例如,在第一行中,每一对加起来都是预测误差的绝对值:y_pred — y = 0.40。
  • 因此,预测误差为我们提供了每个观察点的分位数损失范围。从该范围中选取的对可用于围绕预测线绘制百分位带,以指示预测误差的分布。

Alexandrov 等人的一篇 2019 论文描述了亚马逊的 GluonTS 包,还引用了 Wen 等人在第 10 页的论文,提到了“神经分位数回归模型”。它指出 GluonTS 开发者“在 GluonTS 中实现了这种分位数解码器模型的变体,产生了被称为 RNN QR 和 CNN CR 的模型。”解码器为每个时间步长生成分位数值。

在 Juypter 笔记本顶部的单元格中,我预设了一些常数。

前七行列出了 TFT 模型的初始超参数。没有确定它们的硬性规则——否则,它们就不是用户需要选择的超参数。

  • 时期表示训练周期的数量:一次向前传递,随后是整个训练集的一次向后传递。通常,模型将不得不经历数百个历元来校准自身并达到可接受的精度。
  • INLEN 设置输入层的 input_chunk_length 或大小(节点数)。它不应该小于季节性的顺序,否则模型可能会在识别季节性模式时出错。理想情况下,将节点数设置为 2 的幂。要在一个月频率的时间序列中分析两年期间的季节性模式,24 个节点就足够了,但是我将这个数字向上舍入到它的下一个二进制上限值 32。这也是网格搜索为我们在本教程中使用的源数据集找到的数字。
  • 隐藏设置隐藏层的大小。如果源数据不包含复杂的模式,过多的隐藏节点会导致过度拟合。节点太少会过于简化:模型无法捕捉复杂时间序列中的所有重要模式。一些经验法则提供了如下建议:
  • —将隐藏节点的数量保持在输入层和输出层的大小之间;
  • —输入节点与隐藏节点的比例应为 2:1;
  • —隐藏节点=输出节点+ 2/3 *输入节点。
  • LSTMLAYERS =长短期记忆编码器/解码器的层数。Darts API 参考建议将单层作为一个好的缺省值。
  • ATTHEADS 表示注意头的数量。对于预计会呈现长期模式的大型模型,最多可以选择四个头。对于小而相对简单的数据集,如我们的例子,不超过两个注意头应该是必要的。
  • 为了防止模型过度拟合,通过越来越深入地挖掘单个配置,模型应该在每次训练过程中随机选择并关闭一部分节点。我把这个辍学率设置为 0.1。
  • 批量大小是模型在更新其权重之前处理的训练观察的数量。它的上限由可用内存和观察次数决定。2 的幂是更可取的,因为它们使批处理与 CPU/GPU 内存的组织方式一致。通常,批量过大会削弱模型在训练数据集之外进行归纳的能力。较小的批次会受到更多噪音的困扰,梯度下降会更频繁地改变方向。但是较粗糙的小批量可以帮助模型跳出次优的局部最小值。然而,辍学率可能是一个更好的替代工具。小批量可能产生不太精确的梯度下降。通常,32 是初始批量的推荐值。

第二部分,第 9 行和第 12 行之间,也包含超参数,但是这些值不在诸如网格搜索之类的调优工作的范围内。

  • N_FC 表示我们选择的默认预测周期数, 36 个月。
  • RAND 将系统的随机状态设置为一个固定的、可重复的初始值。
  • N_SAMPLES 建议概率预测模型在进行分位数回归和计算预测区间时对预测值进行采样。
  • FIGSIZE 为绘图设置一个默认尺寸。

第三部分,在第 22 行和第 26 行之间,定义了预测曲线的百分位带的下限和上限。我选择 1% / 99%、5% / 95%和 10% / 90%百分点作为带宽。

  • 第四部分设置了时间戳,TRAIN,,在这个时间点上,我们希望在训练和测试数据集之间分割时间序列。
  • MSEAS 为我们将要运行的季节性测试绘制了一个上限。我们预计季节性不会超过 60 个月;很可能,只需要 12 个月。
  • 阿尔法值表示假设检验的显著性水平。在这个脚本中,我们将应用季节性测试。
  • N_JOBS 告诉脚本它可以使用多少处理器。如果设置为-1,您机器上的所有处理器都将对它可用。

接下来,我们导入将要使用的包。除了我们通常的由 pandas、numpy 和 matplotlib 组成的工作台之外,我们还将接触到几个 Darts 类:TFT 模型类本身和两个可选的基线预测器;以及用于预处理、评估和绘图的类。

要安装 Darts 库,您可以遵循我之前的文章 Python RNN:用于时间序列预测的递归神经网络中的指导。和往常一样,在安装有多个依赖项的沉重包之前,创建一个新的虚拟环境。三个可选组件可以与省道核心包装分开存放。除了核心库,您还需要 darts[torch]组件来处理神经网络,但是您可以选择跳过可选的 pmdarima 和 prophet 组件。

Darts 库附带了一个由几个公共域数据集组成的数据集类。我们可以加载它们,而不是从外部源文件导入它们。在我们的练习中,我们导入并加载 Box & Jenkins 的经典航班乘客数据集。

为了解决不同月份天数不相等的问题——这可能是造成数据失真的原因之一——我们通过报告每月平均乘客数量来重新衡量每月乘客的绝对数量。Darts 提供了属性 time_index。使这个操作成为一个简单的一行程序。

第 8 行将时间序列对象 ts 转换为 pandas 数据帧,以获得更好的可视性。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第61张

作者图片

该时间序列包含 144 个月的日均乘客人数。

源不包含缺失值。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第62张

作者图片

如果我们导入了一个外部数据源,并将其填充到 pandas 数据帧中,我们将使用 Darts 的一个实用函数将其转换为一个时间序列对象(下面的第 2 行):from_series、from_dataframe 或 from_json 等。为了演示语法,下面的第 2 行重新创建了时间序列,现在是从数据帧开始。

让我们先看一下时间序列,并使用 plot() 函数画出它的曲线。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第63张

作者图片

我们发现了一个明显的上升趋势和一个稳定的年度季节性。季节性峰值的幅度随着时间的推移而增加,因此它必须表现出乘法而不是加法季节性。

Darts 提供了一个函数*check _ seasonity()*来计算自相关函数 ACF。它使我们能够通过确认 12 个月的季节性来验证我们的视觉线索。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第64张

作者图片

接下来,我们使用 ETS 方法(误差—趋势—季节性)来分离趋势和季节性成分。Darts 包装了 statsmodels 包的 ETS 方法。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第65张

作者图片

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第66张

作者图片

为了准备用于预测的数据,我们在训练集和测试集之间拆分时间序列。

  • 如果常量 TRAIN 的类型是 string,那么第 3 行将其转换为 pandas 时间戳。
  • 而介于 0 和 1 之间的浮点值将被解释为脚本应该为训练保留的时间序列的百分比。
  • 如果 TRAIN 是一个整数, split() 函数会将其解释为训练数据集应该结束的索引。

神经网络对数量的变化很敏感。因此,我们需要衡量每天的乘客数量。第 10 行使缩放器适合训练数据集。为了防止泄漏,我们没有将定标器安装到测试设备上。在训练集上专门训练了定标器之后,我们将其应用于测试数据。

产生的时间序列被标记为:

  • ts_ttrain = “时间序列-转换的训练数据”
  • ts_ttest = “时间序列—转换后的测试数据”
  • ts_t = “时间序列—转换(完整)数据”

协变量在回归术语中被称为回归变量或独立变量。我们的示例数据集没有提供影响 20 世纪 50 年代乘客数量的外生协变量。当然,增加更多目的地的航线或降低票价将对乘客数量产生重大影响。我们手头没有这样的源数据。

相反,我们将从我们在源中找到的时间戳中导出两个协变量,这将使任何类型的神经网络更容易在时间轴上分离模式。在下面的第 2 行中,我们使用 Darts 的datetime _ at ribute _ time series()函数来隔离年份。在第 3 行中,我们将月份作为另一个协变量,并将其与年份相结合(叠加)。第 4 行添加了一个连续的整数索引。这三个变量共同构成了协变量时间序列, cov

我们在第 11 行中拆分了训练集和测试集之间的协变量。再次需要应用于训练部分的缩放器,以使神经网络可消化协变量。

任何预测方法,如时间融合变换,如果比简单的基线预测模型提供更好的准确性,就可以说是有技巧的。如果我们选择的准确性度量——我们的练习中的平均绝对百分比误差——比基线模型实现的要差,那么更复杂的模型将被认为是无用的。

一个天真的季节性预测简单地假设时间序列值将每 K 个时间步重复一次。我们在上面评估的*check _ seasonity()*函数证实了 mseas = 12 个月的季节性,我们将其输入到预测器中。

但我们也观察到了强劲的上升趋势。因此,预测应该反映出季节性高峰不会保持不变,而是逐年上升。na ve drift在第一次和最后一次观察之间画一条直线,以反映该趋势线。

天真的漂移和季节性的总和产生了一条预测曲线,该曲线与测试集中的实际观察值相对接近,尽管它没有完全预测到在测试集的最后时刻,即 1960 年,乘客数量的峰值。

测试集的 MAPE 低至 5.71%,这意味着时间序列表现良好,具有稳健的规则模式。这是更复杂的预测模型必须与之竞争的基准。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第67张

作者图片

为了准备第二个基线预测,我们将应用一种经典的预测方法,即指数平滑法。它的两个超参数是

  • 季节性顺序,mseas =12 个月;
  • 季节性类型:年度峰值幅度的增加意味着一种倍增而非累加的季节性模式。

函数 predict() 的参数为:

  • 预测范围 n ,在我们的例子中是测试集中的月数;
  • 可选参数 num_samples —如果 num_samples 设置为大于 1,模型将返回概率预测。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第68张

作者图片

指数平滑预测器与天真的预测相差无几,显示出最低的平均绝对百分比误差:5.65%对 5.71%。天真的预测不容易被击败的事实再次证实了我们的时间序列呈现出一种非常有规律的、重复的模式。

TFT 模型是用我们在笔记本顶部单元格中列出的超参数设置的。

由于我们想要获得概率预测,我们建议预测者应用分位数回归,使用常数列表分位数作为其参数,将频率从 0.01 排列到 0.99。对于确定性预测,我们将使用传统的损失函数 loss_fn (此处注释掉)。

第 15 行使模型符合训练数据集。它的参数future _ co variables由年、月和我们从时间戳得到的整数索引组成。

完成训练后,我们预测测试数据集中的每日乘客数量。

如果 num_samples 设置为大于 1 的整数值,我们得到一个概率预测,Darts 时间序列属性确认:is _ probabilical?

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第69张

作者图片

接下来,我们将编写一个助手方法 plot_predict,,它将使用 Darts 的 plot() 函数来绘制预测曲线。它将中值预测曲线的百分位带的选定下限和上限作为其参数。请记住,我们在 Jupyter notebok 的顶部定义了三个这样的百分位数:1%/99%,5%/95%,10%/90%。

第 9 行到第 11 行使用第一对和第三对。第二对,5%/95%,会使图表过于拥挤,因此我把它的代码行注释掉了。

第 12 行画出了平均预测曲线。或者,我们可以通过将参数 central_quantile 设置为 0.5 来选择中间值。

第 21 行调用了助手方法 plot_predict ,在运行融合转换器之前,我们已经对源数据应用了缩放转换。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第70张

作者图片

预测值与测试窗口中的实际乘客人数非常一致。TFT 的 MAPE 低于任一基线预测器的误差。

让我们放大测试集,以便我们可以辨别百分位数。训练期间的预测误差很小,因此百分位带相对于平均值来说比较紧密。1960 年,乘客数量的激增超过了前几年的趋势。这就是 TFT 低估峰值的原因,就像天真的预测和指数平滑一样。这是训练数据集没有揭示的模式变化。因为它接近测试数据集的末尾,所以训练期必须覆盖整个时间序列的 90%以上才能有机会捕捉到它。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第71张

作者图片

为了将预测百分位数制成表格,

  • 我们在第 2 行创建一个新的数据帧 dfY,
  • 在第 13 行填入实际观察值;
  • 并在第 16 行选择我们想要列表的百分点。
  • 第 17 行的 list comprehension 为这七个百分点中的每一个调用辅助函数 predQ()
  • Darts 函数 quantile_timeseries() 计算测试集中每个月的预测百分比/分位数,在第 6 行。
  • 第 7 行和第 8 行将这个分位数时间序列对象转换为传统的 pandas 序列,并将其作为分位数列插入到 dataframe dfY 中。
  • “Q50”表示确定性预测中的点估计值。然后其他分位数在每个月将这个中心预测点 Q50 括起来。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第72张

作者图片

函数historic _ forecasts使我们能够沿着源时间序列的完整时间轴计算预测,而不仅仅是针对测试集。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第73张

作者图片

我们观察到,从 1950 年到 1960 年的回测数据集的平均绝对百分比误差低至 2.83%。正如可以预期的那样,与测试集相比,该模型对其训练数据的拟合程度更高。5.3%到 2.8%的准确性差异主要是由于最后一年,即 1960 年,当时乘客人数超过了其长期趋势。

除了 1960 年的最后一年,我们如何产生样本外预测?

首先,我们需要创建超出我们在源数据中发现的协变量。

  • 使用 Darts 函数datetime _ attribute _ time series(),我们在第 8 行定义了一个 pandas date_range ,其频率为“ MS (月初)”,然后提取其年份。
  • 我们对几个月做同样的事情,然后把它们叠加到几年。
  • 在第 17 到 20 行,使用函数 from_times_and_values ,我们获得一个连续的整数索引,然后将它附加到另外两个协变量上,即年和月。

像往常一样,我们需要缩放协变量,在第 23 行。

协变量跨越了 1958 年 1 月到 1963 年 12 月之间的几个月,即培训期结束后的六年。

在 72 个月的时间范围内,我们在第 29 行调用函数 predict() 。然后,第 31 行反转比例变换,第 33 至 44 行绘制预测曲线及其百分位带。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第74张

作者图片

为了在数据帧 dfY 中列出预测及其分位数,我们再次调用我们之前编写的帮助函数 predQ() ,使用第 4 行中的列表理解。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第75张

作者图片

我们获得当前工作目录的路径,定义一个文件名,并将模型保存为一个 .pth.tar 文件。

函数 load_model() 将 tar 文件取回到 RAM 中。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第76张

作者图片

Darts 库使我们能够对 TFT 模型的超参数进行网格搜索。该搜索可以包含整个搜索空间,或者可以建议该方法抽取随机样本,并且仅评估所有可能的参数元组的某个百分比。

目前,Darts 中的网格搜索适用于确定性模型,但不评估概率预测器。我们将寻找 TFT 模型的最佳确定性参数化。

我们首先在第 2 行定义一个字典参数。其密钥必须由 TFT 控制参数的名称组成。它的值由我们想要测试的可选参数值的列表组成。

在下面的例子中,你可以看到我定义了一个相对狭窄的搜索空间来限制评估每个可能的元组所花费的时间。对于大多数参数,我只列出两个(甚至一个)值供网格搜索研究。

  • 最佳模型将通过在测试集上计算的度量 mape *、*来识别。
  • n_jobs 通知搜索算法它可以声明的最大处理器数量。
  • 可以将 n_random_samples 设置为 0 到 1 之间的一个分数。如果小于 1,该方法将不会评估搜索空间中的每个单个参数元组,而只是给定的分数。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第77张

作者图片

网格搜索返回一个元组 res ,由报告最佳度量的模型(在我们的例子中,是最低的 MAPE)组成;和它的参数字典。参数也可以从模型对象本身的属性 _model_params 中获得。

接下来,我们需要训练这个调优的 bestmodel,然后才能从中检索预测值。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第78张

作者图片

网格搜索返回一个 MAPE 仅略低于初始 TFT 模型的模型。我们可以通过在更宽的参数空间中运行搜索,用更多的可选值来测试,从而提高精确度。但是在测试集上 5.2%的 MAPE 必须已经接近可达到的峰值性能。如果我们在训练集中包括 1960 年,当乘客数量超过其趋势时,我们可以期待更好的准确性。但是这会将测试数据集缩减到几个月。

我们已经实现了另一个用于深度预测的神经网络,**时间融合转换器,**它是我们在前两篇文章中讨论的 RNN 和 TCN 方法中最年轻的兄弟。

这三个神经网络都能生成概率预测。概率模型为我们提供了对预测不确定性的洞察。

Jupyter 笔记本可以在 GitHub 上下载: h3ik0th/TFT_darts:用时间融合变换器进行概率预测(github.com)

https://medium.com/subscribe/@h3ik0.th https://medium.com/@h3ik0.th/temporal-fusion-transformer-unleashed-deep-forecasting-of-multivariate-time-series-in-python-674fa393821b

原文:https://towardsdatascience.com/temporal-fusion-transformer-googles-model-for-interpretable-time-series-forecasting-5aa17beb621?source=collection_archive---------1-----------------------

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第79张

照片由 JJ 英在 Unsplash

首先,让我们明确一点:为单个时间序列(无论是单变量还是多变量)定制模型的时代已经一去不复返了。

如今大数据时代,新数据点的创造极其廉价。想象一下,一家大型电气公司拥有数千个传感器来测量不同实体(例如家庭、工厂)的功耗,或者拥有大量股票、共同基金、债券等的投资组合。换句话说,时间序列可能是多元的,具有不同的分布,并可能伴随着额外的探索性变量。当然,不要忘记通常的疑点:缺失数据、趋势、季节性、波动性、漂移和罕见事件!为了在预测能力方面创建一个有竞争力的模型,除了历史数据之外,所有变量都应该考虑在内。

让我们后退一步,重新思考一个最新的时间序列模型应该考虑哪些规格:

  1. 显然,该模型应适用于单维或多维序列。
  2. 该模型应该考虑多个时间序列,最好是数千个。不要将此与多元时间序列混淆。它意味着具有不同分布的时间序列,在单一模型上训练。
  3. 除了时间数据之外,模型应该能够使用未来未知的历史信息。例如,如果我们要创建一个预测空气污染水平的模型,我们希望能够使用湿度作为外部时间序列,这是到目前为止才知道的。例如,所有的自回归方法(如 ARIMA 模型)包括亚马逊的 DeepAR [1]都受到这个限制。
  4. 非时间性的外部静态变量也应考虑在内。比如不同城市的天气预报(城市是静态变量)。
  5. 该模型应该具有极强的适应性。时间序列可能相当复杂或嘈杂,而其他时间序列可以简单地用季节性朴素预测器建模。理想情况下,模型应该能够区分这些情况。
  6. 多步预测功能也是必须的。递归提供预测的先行一步预测模型也可以工作。然而,请记住,对于长期预测,误差开始累积。
  7. 在许多情况下,仅仅预测目标变量是不够的。该算法还应该能够输出反映预测不确定性的预测区间。
  8. 理想模型易于使用,并且可以在生产环境中无缝部署。
  9. 最后但同样重要的是,过去几年的“黑箱模型”已经开始不受欢迎。可解释性现在已经成为头等大事,尤其是在生产方面。在某些情况下,可解释性比准确性更受青睐。

**注:**关于时间融合变压器的动手项目,查看这篇文章。另外,查看我的最佳深度学习预测模型列表。

什么是时间融合转换器时间融合转换器 (TFT)是一个基于注意力的深度神经网络,针对出色的性能和可解释性进行了优化。在深入研究这种酷炫架构的细节之前,我们先简要描述一下它的优势和新颖之处:

  1. 丰富的特性 : TFT 支持 3 种类型的特性:I)输入到未来的已知时态数据 ii)目前已知的时态数据 iii)外生分类/静态变量,也称为时不变特性。
  2. **异构时间序列:**支持来自不同分布的多个时间序列的训练。为了实现这一点,TFT 架构将处理分为两个部分:局部处理,侧重于特定事件的特征;全局处理,捕捉所有时间序列的集体特征。
  3. 多时段预测:支持多步预测。除了实际预测,TFT 还通过使用分位数损失函数输出预测区间。
  4. **可解释性:**TFT 的核心是基于变压器的架构。通过利用自我注意,该模型提出了一种新的多头注意机制,当对其进行分析时,可以提供关于特征重要性的额外见解。例如,多时域分位数递归预测器(MQRNN) [3]是另一个 DNN 实现,具有良好的性能,但不提供任何关于特征可解释性的见解。
  5. **高性能:**在基准测试期间,TFT 的表现超过了传统的统计模型(ARIMA)以及基于 DNN 的模型,如 DeepARMQRNN深空状态模型(DSSM)【4】。
  6. **文档:**虽然这是一个相对较新的模型,但是在 Tensorflow 和 Python 中都已经有 TFT 的开源实现。

图 1 显示了时间融合变换器的顶层架构:

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第80张

图 TFT 的顶层架构及其主要组件(来源)

虽然这张图片看起来有点吓人,但这个模型实际上很容易理解。

对于给定的时间步长t、回顾窗口k和前一步窗口τmax,其中t[t-k..t+τmax],模型将以下作为输入:I)在时间段[t-k..t]内观察到的过去输入x、在时间段[t+1..t+τmax]内的未来已知输入x和一组静态变量s(如果存在)。目标变量y也跨越时间窗口[t+1..t+τmax]

接下来,我们将一步一步地描述所有单个组件以及它们如何协同工作。

门控剩余网络(GRN)

图 2 显示了论文提出的一个组件,称为门控残差网络(GRN) ,它在整个 TFT 中被多次用作基本块。该网络的要点如下:

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第81张

图 2:门控剩余网络(来源)

  • 它有两个致密层和两种类型的激活函数,称为 **ELU(指数线性单位)**和 GLU(门控线性单位)。GLU 首先用于门控卷积网络【5】架构,用于选择预测下一个单词的最重要特征。事实上,这两个激活函数都有助于网络理解哪些输入转换是简单的,哪些需要更复杂的建模。
  • 最终输出通过标准图层标准化。GRN 还包含一个剩余连接,这意味着如果有必要,网络可以学习完全跳过输入。在某些情况下,根据 GRN 的位置,网络也可以利用静态变量。

变量选择网络(VSN)

该组件如图 3 所示。顾名思义,它的功能是一种特征选择机制。记住我们之前说过的:不是所有的时间序列都是复杂的。该模型应该能够区分有洞察力的特征和有噪声的特征。此外,由于有 3 种类型的输入,TFT 使用变量选择网络的 3 个实例。因此,每个实例具有不同的权重(注意图 1 中每个 VSN 单元的不同颜色)。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第82张

图 3:变量选择网络(来源)

自然地, VSN 利用发动机罩下的 GRN 实现其过滤功能。它是这样工作的:

  • 在时间t处,相应回看周期的所有过去输入(称为Ξ_t)的展平向量通过 GRN 单元(蓝色)和 softmax 函数馈送,产生权重u的归一化向量。
  • 此外,每个特性都通过自己的 GRN,这导致创建一个名为ξ_t的处理过的向量,每个变量一个。
  • 最后,输出被计算为ξ_tu的线性组合。
  • 请注意,每个特征都有其自己的 GRN,但在同一回望周期内,每个特征的 GRN 在所有时间步长上都是相同的。
  • 静态变量的 VSN 不考虑上下文向量c

LSTM 编码器解码层

LSTM 编码器解码器层是许多实现的一部分,尤其是在 NLP 中。显示在图 1中。这个部件有两个用途:

到目前为止,输入已经通过了 VSN ,并且已经对特征进行了适当的编码和加权。然而,由于我们的输入是时间序列数据,该模型还应该理解时间/序列排序。因此,LSTM 编码器/解码器模块的第一个目标是产生上下文感知嵌入,称为φ。这类似于经典变压器中使用的位置编码,我们将正弦和余弦信号相加。但是为什么作者选择 LSTM 编码器而不是解码器呢?

因为模型应该考虑所有类型的输入。已知的过去输入被馈送到编码器,而已知的未来输入被馈送到解码器。静态信息呢?是否有可能将 LSTM 编码器解码器产生的上下文感知嵌入与静态变量的上下文向量c合并?

不幸的是,这是不准确的,因为我们将时间信息与静态信息混合在一起。正确的做法是应用[6]使用的方法,根据外部数据正确调节输入:具体来说,不是将 LSTM 的初始h_0隐藏状态和单元状态c_0设置为 0,而是分别用c_hc_c向量(由 TFT 的静态协变编码器产生)进行初始化。因此,最终的上下文感知嵌入φ将适当地以外部信息为条件,而不改变时间动态。

可解读的多头注意力

这是 TFT 架构的最后一部分。在这个步骤中,应用了熟悉的自我注意机制[7],这有助于模型学习跨不同时间步骤的长期依赖性。

所有基于变压器的架构都利用注意力来学习输入数据之间的复杂依赖关系。如果您不熟悉基于注意力的实现,请查看这个资源[8](这是理解 Transformer 模型的最佳在线资源)。

时间融合转换器提出了一种新颖的可解释 多头注意力机制,与标准实现相反,它提供了特征可解释性。在原始架构中,有不同的“头”(查询/关键字/值权重矩阵),以便将输入投射到不同的表示子空间。这种方法的缺点是权重矩阵没有共同点,因此无法解释。TFT 的多头注意力增加了一个新的矩阵/分组,使得不同的头共享一些权重,然后可以根据季节性分析进行解释。

分位数回归

在许多涉及时间序列预测的应用中,仅仅预测目标变量是不够的。同样重要的是估计预测的不确定性。通常,这以预测间隔的形式出现。如果我们决定在输出中包含预测区间,线性回归和均方误差将不再适用。

标准线性回归使用普通最小二乘法(OLS)来计算不同特征值的目标变量的条件均值。OLS 解的预测区间基于残差具有恒定方差的假设,但事实并非总是如此。另一方面,**分位数回归,**是标准线性回归的扩展,估计目标变量的条件中值,可在不满足线性回归假设时使用。除了中位数之外,分位数回归还可以计算 0.25 和 0.75 分位数(或任何百分点),这意味着模型能够输出实际预测值周围的预测区间。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第83张

图 4:分位数回归来源:维基百科

给定分别为实际值和预测值,并且q 为 0 和 1 之间的分位数值,分位数损失函数定义为:

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第84张

随着q值的增加,与低估相比,高估会受到更大的惩罚。例如,对于等于 0.75 的q,高估将被罚因子 0.75,低估将被罚因子 0.25。这就是预测区间的创建方式。

通过最小化在q ⋹ [0.1,0.5,0.9]上求和的分位数损失来训练时间融合变换器的实现。这样做是为了进行基准测试,以便与其他流行型号使用的实验配置相匹配。此外,不言而喻,分位数损失的使用不是排他性的-可以使用其他类型的损失函数,如 MSE,MAPE 等。**

在原始论文中,时间融合转换器模型与其他流行的时间序列模型如 DeepAR、ARIMA 等进行了比较。作者用于基准测试的一些数据集是:

  • 电力负荷图表数据集(UCI)【9】
  • PEM-SF 交通数据集(UCI)【9】
  • Favorita 杂货店销售(ka ggle)【10】

有关每个数据集使用哪些配置/超参数的更多信息,请查看原始论文[2]。

在基准测试中,TFT 的表现优于传统的统计模型(ARIMA)以及基于 DNN 的模型,如 DeepAR、MQRNN 和深空状态模型(DSSM)

此外,作者善意地提供了 Tensorflow 1.x 中 TFT 的开源实现,以及关于每个数据集的相应超参数配置,用于再现性目的。而且,你还可以在这里找到 Tensorflow 2.x 的修改版本。

让我们使用电力负荷图表数据集创建一个最小工作示例,我们将简称为电力。该数据集包含 370 个消费者的电力消耗(单位为千瓦)。数据点每 15 分钟采样一次。在进行预测之前,首先对数据集进行预处理:**

  1. 时间粒度变成每小时。
  2. 使用日期信息,我们创建以下(数字)特征:hourday of weekhours from start
  3. categorical_id是每个消费者的 id。
  4. 目标变量是power_usage.
  5. 数据集被分成训练集、验证集和测试集。
  6. 训练数据集被归一化。具体来说,数值变量(包括目标变量)被标准化(z-归一化),并且单个分类特征被标签编码。必须理解,标准化是针对每个时间序列/消费者分别进行的,因为时间序列具有不同的特征(均值和方差)。定标器也用于将预测值恢复到原始值。

目标是通过使用上周(724 小时)来预测第二天(124 小时)的用电量。**

对于此示例,我们将使用 Tensorflow 2.x 的 TFT 更新版本。您可以在 Conda 中快速设置一个最小工作示例:

***# Download TFT. Kudos to greatwhiz for making TFT compatible to TF # 2.x!
!git clone [https://github.com/greatwhiz/tft_tf2.git](https://github.com/greatwhiz/tft_tf2.git)# Install any missing libraries in Conda environment
!pip install pyunpack
!pip install wget***

该实现还包含用于下载和预处理上述数据集的脚本:对于电力数据集,执行:

***# The structure of the command is:
# python3 -m script_download_data $EXPT $OUTPUT_FOLDER!python3 tft_tf2/script_download_data.py electricity electricity_dataset***

其中electricity_dataset是存储预处理数据的文件夹。预处理数据集如下所示:

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第85张

然而,并非所有这些变量都被考虑用于训练。该模型将利用我们上面讨论的变量。

最后,执行培训脚本:

***# The structure of the command is:
# python3 -m script_train_fixed_params $EXPT $OUTPUT_FOLDER $USE_GPU!python3 tft_tf2/script_train_fixed_params.py electricity electricity_dataset ‘yes’***

默认情况下,该脚本在测试模式下运行,这意味着模型将只训练 1 个时期,并且分别只使用 100 和 10 个训练和验证实例。在script_train_fixed_params.py集合use_testing_mode=True中,使用原始文件中找到的最佳超参数启动完整的训练。对于完整的培训,该模型将在启用 GPU 的情况下在 Colab 上花费大约 7-8 个小时。

时间融合变压器在 PyTorch 中也有。查看本综合教程了解更多信息。

关于时间融合转换器最强的一点是可解释性。在时间序列问题的背景下,可解释性在许多情况下是有意义的。**

功能方面的

首先,时间融合变换器试图通过考虑预测的鲁棒性来计算每个特征的影响。可以通过分析整个测试集中所有变量选择网络模块的权重u来测量特征重要性。对于表 1* 中的电力数据集,我们有:***

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第86张

表 1:电力数据集的特征重要性(来源

所有特征分数的值都在 0 到 1 之间。ID变量起着重要作用,因为它将一个时间序列与另一个时间序列区分开来。接下来是Hour of Day,这是意料之中的,因为功耗在一天中遵循特定的模式。

季节性

使用可解释的多头注意力层,我们可以更进一步,计算“持续时间模式”。更具体地说,来自该层的注意力权重可以揭示回望期间哪个时间步长是最重要的。因此,这些重量的可视化揭示了最突出的季节性。例如,在图 5* 中,我们有 :***

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第87张

图 5:电力数据集的时间模式(来源

其中a(t,n,1)是地平线等于 1(与领先一步相同)和n[-(7*24)..0]的关注度得分。换句话说,该图清楚地显示了数据集呈现出每日的季节性模式。

综上所述,时间融合变压器是一款高性能的通用机型。Temporal Fusion Transformer的架构融合了深度学习领域的众多关键进步,同时提出了一些自己的创新。然而,其最基本的特性是能够在预测方面提供可解释的见解。此外,根据 Gartner 的说法,这是深度学习未来的发展方向之一。

  • 订阅我的简讯!
  • 在 Linkedin 上关注我!

[1] D. Salinas 等人, DeepAR:用自回归递归网络进行概率预测,国际预测杂志(2019)。

[2] Bryan Lim 等人,用于可解释多时间范围时间序列预测的时间融合变换器,2020 年 9 月

[3] R. Wen 等,一个多地平线分位数循环预测器,NIPS,2017

[4] S. S. Rangapuram 等,时间序列预测的深态空间模型,NIPS,2018。

[5] Y. Dauphin 等,用门控卷积网络进行语言建模,ICML,2017

[6]安德烈·卡帕西,李菲菲,用于生成图像描述的深度视觉语义对齐

[7] A .瓦斯瓦尼等人关注是你所需要的全部,2017 年 6 月

[8] J .阿拉玛,《图解变压器》

[9]杜瓦和格拉夫(2019 年)。UCI 机器学习知识库。加州欧文:加州大学信息与计算机科学学院。

[10] Favorita 杂货销售预测, Kaggle ,license
CC0:公共领域

原文:https://towardsdatascience.com/temporal-loops-intro-to-recurrent-neural-networks-for-time-series-forecasting-in-python-b0398963dc1f?source=collection_archive---------0-----------------------

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第88张

People Collective Group,由 geralt-pix abay 上的免费图片

今天的文章将继续讨论,超越我在 10 月早些时候写的两篇关于时间序列预测的文章。早期的教程介绍了飞镖多方法预测库,在飞镖游戏中的五个预测者之间进行比赛:

  • 天真的漂移+季节性预测
  • 指数平滑法
  • θ方法
  • 萨里玛
  • 脸书先知。

第二篇文章将这五个组合成一个集合场景,形成了第六个预测者。

  • 飞镖的时间序列预测瑞士刀|走向数据科学
  • 预测者群体的智慧。面向数据科学的 Python |时间序列集合预测

今天的教程将提供如何将递归神经网络(RNNs) 应用于时间序列的实践介绍:三个 RNN 变量将成为本系列文章中展示 Python 中时间序列分析的方法# 7–9。

Darts 包装了 PyTorch 库(由来自谷歌、Twitter 和脸书等公司的数据科学家维护——其他用于神经网络的开源“OEM”包包括谷歌开发的 TensorFlow 和 Keras,后者基于 TensorFlow 和 Theano 构建)。

Darts 提供三种类型的 RNNs:

  • LSTM,
  • GRU,
  • 香草。

包装将使我们能够将 RNNs 与飞镖中可用的其他预测方法并行使用,然后举办一场他们可以竞争的锦标赛。

递归神经网络(RNNs) 是深度学习模型,通常用于解决时序等顺序输入数据的问题。它们是什么,我们如何在时间序列预测中使用它们?

RNNs 是一种神经网络,它保留了已经处理过的内容的记忆,因此可以在训练期间从以前的迭代中学习。

当我们第一次听到任何技术术语时,你可能会做我们大多数人都会做的事情。你试图通过点击顶部列出的非广告谷歌搜索结果来理解什么是递归神经网络。然后你会发现维基百科的文章展现了高度的抽象性。当我们试图理解 RNN 是什么以及它们的用途时,它的用处是有限的:“一个递归神经网络 ( RNN )是一类人工神经网络,其中节点之间的连接沿着时间序列形成一个有向图。这允许它展示时间动态行为。从前馈神经网络衍生而来,RNNs 可以使用它们的内部状态(记忆)来处理可变长度的输入序列。递归神经网络理论上是图灵完全的,可以运行任意程序来处理任意输入序列。说什么?

Michael Phi 在他的前一篇《走向数据科学》文章中提供了一个关于 RNNs 的优秀的、非数学的指南:“回归神经网络图解指南|作者 Michael Phi |走向数据科学”。Will Koehrsen 在“Python 中的递归神经网络示例| Will Koehrsen |迈向数据科学”中也是如此

让我用非数学术语总结一下我们应该了解的关于 RNNs 的基础知识(然后我会向你推荐迈克尔和威尔在 2018 年写的两篇文章中的额外解释和插图)。

一个神经网络——递归神经网络是其中的一种,还有其他类型,如卷积神经网络——由三个基本组件组成:输入层、隐藏层和输出层。每层由所谓的节点(又名神经元)组成。

我读过以下对三种主要类型的神经网络的类比,据说它们以特定的方式模仿人类大脑的功能。下面的比较过于简单,所以最好持保留态度。

  • 我们大脑的颞叶=> 人工神经网络= >主要用于分类和回归问题= >颞叶的功能之一是长期记忆
  • 枕叶=> 卷积神经网络= >主要用于计算机视觉问题(虽然时态卷积网络,TCNs,可以应用于时间序列)
  • 额叶=> 递归神经网络 RNN = >主要用于时间序列分析、序列和列表——例如,在语言处理中,它处理按语法排序的字符、单词和句子的序列;或者时间序列,由观察的时间序列组成= >额叶的功能之一是短期记忆

前馈神经网络(ffnn)——如神经网络中的祖父,最初的单层感知器,于 1958 年开发——出现在递归神经网络之前。在 FFNNs 中,信息只在一个方向上流动:从输入层,通过隐藏层,到输出层,但在反馈回路中不会反向。FFNN 常用于模式识别。FFNN 将加权因子矩阵与输入相乘,并从这些加权输入产生输出。前馈神经网络不会保留它们处理过的输入的记忆。他们患有顺行性健忘症,无法形成新的记忆(类似于克里斯托弗·诺兰电影Memento—Wikipedia【这似乎是一个在数据科学文章中提及顺行性健忘症和 Memento 的难得机会】)。

相比之下,递归神经网络保留了它在最近先前步骤中处理的内容的记忆(我们一会儿将回到“最近”限定词)。它通过时间反馈循环进行循环连接:前一步骤的输出用作当前过程步骤的输入。与失忆症 FFNNs 不同,这种记忆使 RNNs 能够处理输入序列而不会丢失轨迹。这些环路使它成为一个循环网络。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第89张

葡萄藤卷须攀缘植物,由 stevepb 拍摄 Pixabay 上的免费照片

隐藏层位于输入层和输出层之间。在 RNN 中,它们不仅产生输出,而且还反馈它(“反向传播”)作为下一次观察时训练隐藏层的输入。他们通过调整整个神经网络的突触权重来进行训练。网络重新校准当前和先前输入的权重,将输入值的向量与新权重的向量相乘(从而相对于降低预测误差的训练目标提高或降低它们的重要性),并将结果的向量作为输入传递给下一层。通过调整权重,隐藏层递增地导出一种函数,该函数将输入值转换成近似训练数据集中的实际观察值的输出值。但是,将输入映射到输出的函数并没有以封闭形式的方程来表达——它仍然是隐藏的。

为了建立我们在神经网络描述中遇到的技术术语的词汇表,让我们浏览一些其他构建模块的列表。

例如,分析图像的神经网络对于图像中的每个像素都有一个输入节点;节点保存它的颜色值。如果 RNN 处理时间序列,每个周期将由一个节点表示,保存该周期的观测值。

当输入值从一层的节点传递到另一层的节点时,它沿着节点之间的(连接线)传播。边缘相当于大脑的突触。

接收节点将其接收的所有输入相加成为一个总净输入

它将这个净输入输入到一个激活函数(又名转移函数)来计算输出:该节点将对下一层贡献多少。在经常使用的激活函数类型中,你会发现逻辑函数或 sigmoid 函数;step 或 heaviside 函数(相当于布尔或二进制是/否决策);双曲正切函数(tanh);以及 ReLU 函数(整流线性单位,max(0,x))。当将输入映射到训练输出时,像逻辑或双曲正切函数这样的非线性激活函数有助于网络使自己适应非线性问题。

当激活函数的输出值沿着一条边被发送到另一层中的一个节点,或者通过多条边被发送到一个以上的接收节点时,激活函数的输出值被乘以一个权重因子。

递归神经网络应用的校准机制由两个术语描述,这两个术语在大多数 RNN 描述中都会遇到:

  • 穿越时间的反向传播(BPTT) 又名时间循环
  • 梯度下降

当网络生成预测值时,它还会计算预测误差,即与训练数据集的偏差。网络试图通过在训练期间调整其内部权重来最小化误差。反向传播计算误差相对于权重的偏导数。然后,RNN 会根据偏导数向上或向下重新校准砝码。

术语梯度下降是指通过计算偏导数来搜索全局最小值(梯度下降——维基百科)。权重的重复调整,沿着朝向最小误差的下降,将使模型朝向逐渐减小的预测误差移动。

RNN 工艺步骤的简化顺序如下:

  • 它向前传递并计算预测误差,以获得训练数据集和验证集的损失值。
  • 它计算每一层的梯度,并通过 t 个时间步长反向传播误差。然后它更新权重;并且循环到另一个向前传球。

RNN 的拟合过程被称为映射,以使其输出与训练数据集中的实际观测值的偏差最小化。

*成本函数(又名损失、误差或目标函数)*将网络的预测误差度量为一个数字,一个标量。RNN 的目标是最小化成本函数。预测精度指标,如均方差 MSE 或均方根误差 r MSE,我们从其他时间序列方法中知道,可以作为成本函数;你会看到提到的替代方法包括海灵格距离或库尔贝克-莱布勒散度。

网络计算输出节点的值与其对应的实际观测值之间的差异。它将个体差异——这些局部的、节点特定的误差——浓缩在成本函数中,以获得网络的总误差或*全局误差,*成本函数的结果。

然后,RNN 研究总误差是如何在网络中的所有权重上分布的。它通过计算偏导数,也就是梯度(【斜率】)来找出它们各自对总误差的贡献。损失函数包括多个权重。相对于某一重量的偏导数揭示了该特定重量如何影响总误差。网络改变单个权重,记录其对总误差的影响,从而获得其梯度。这听起来计算量很大,因此神经网络通常需要很长的训练阶段。梯度下降表示搜索全局最小值,该组权重将最小化总误差。

梯度分解了总误差,因此 RNN 可以将块重新分配回贡献块的每个权重。这是反向传播

然后,RNN 通过从旧权重中减去它们各自梯度的一部分来更新旧权重。分数代表学习率,一个大于 0 且最大为 1 的值。

  • 新权重=旧权重-梯度*学习率

更高的学习率(接近 1.0)可以加快 RNN 的训练过程,但也可能导致超调,使网络无法确定最小的总误差。

一个时期包含整个训练数据集通过网络的过程,包括一次向前和一次向后。历元的数量将决定训练 RNN 所需的时间与其准确性之间的权衡。

批量训练是一种梯度下降的形式,在完成一次训练后更新权重,然后启动另一个训练周期。小批量训练在处理了一定数量的训练值(少于完整集)后更新权重。随机(又名在线)培训是另一种选择。我建议将批量大小设置得高于确认的或假设的季节性,这样批量就不会错过完整的季节性序列。

Dropout level 表示打开或关闭网络中节点的选项。这是为了防止过度拟合。节点不容易越来越深地陷入连接节点的特定配置中。

一个深度神经网络有不止一个隐藏层。不同的隐藏层可以专注于识别输入数据中的不同模式,例如季节性或趋势。

自 20 世纪 90 年代末以来,出现了几种递归神经网络的变体:

LSTM 代表**“长短期记忆”**,于 1997 年作为增强的 RNN 算法首次推出。LSTMs 是早期 RNNs 的扩展,能够保持长期记忆,并使用它来学习较长序列源数据中的模式。在 LSTMs 之前,rnn 是健忘的。他们可以保留一段记忆,但仅仅是关于他们刚刚过去的过程步骤。相比之下,LSTM 引入了可以生成长时间渐变的循环。它可以在经历循环时坚持自己发现的长期模式。在每个时间步,它可以将三条信息联系在一起:当前的输入数据,它从前一个细胞接收的短期记忆(所谓的隐藏状态,以及来自更远细胞的长期记忆(所谓的细胞状态),RNN 细胞从中产生一个新的隐藏状态。

长持续时间梯度解决了一个称为消失梯度下降的问题,当模型停止学习时,因为梯度的斜率变得太浅,搜索无法进一步提高权重。当重复梯度计算中涉及的许多值小于 1 时,会发生这种情况。相反的问题,爆炸梯度,在 RNN 执行的重复矩阵乘法中,当许多值超过 1 时出现。过大的梯度最终会导致 RNN 不稳定。消失梯度问题将 RNN 的记忆限制在短期相关性,而 LSTM 的公式保持梯度足够陡,这样搜索就不会陷入死胡同。如果模型必须处理跨越数百个周期的长时间序列,就会出现消失梯度问题。每个周期都必须由一个网络层来反映;但是具有许多层的深层网络涉及一长串矩阵乘法。

LSTM 的一个牢房据说是“有门的”。信息通过门有选择地添加或删除。细胞就像一个筛子,决定了有多少信息被捕获,有多少信息被保留。该模型可以决定它是否打开一个输入门来存储信息,拒绝并从长期记忆中删除它(忘记门),或者将信息传递到下一层(输出门)。当 RNN 试图最小化错误并在时间循环中踱步时,它根据学习分配给信息的重要性权重来做出这些决定。这些门在它们从短期或长期记忆中作为当前输入接收的信息值之间执行矩阵乘法。随着时间的推移,LSTM 学会了哪些信息在减少预测误差方面是有效的;它将通过向信息值分配 0 到 1 之间的更高或更低的权重来相应地打开和关闭门。通过它的循环,它会让权重较高的有用值通过输出门,形成新的短期记忆,但会丢弃权重较低的值。

2014 年推出的门控循环单元(GRU )可以被视为 LSTM 的变体,内部架构略有不同,简化了原 LSTM 的某些方面。GRUs 组合构建模块,例如将输入忘记门合并成单个更新门。

普通的 RNN 使用基本的反向传播算法,该算法在 1980 年代中期设计,早于 1997 年的 LSTM 创新。“香草”指的是这样一个事实,即它不包含后来的“更奇特”的数学成分,如一种细胞状态来保留一种记忆的长期模式。与 LSTM 及其衍生品相比,普通 rnn 更难学会长期依赖关系。香草 RNN 可能会被消失梯度问题绊倒。

注意,普通神经网络(与普通 RNN 相对)是一个前馈神经网络 FFNN 的标签;这和香草 RNN 不一样。

其他 RNN 变体——甚至其他 LSTM 风味——也存在;例如,深度门控 RNN 或 RNN 时钟工程。研究发现,RNN 口味并不总是胜过其他口味(实证研究;以及 1503.04069 )。似乎没有最好的 RNN 变体。

对我们来说,这意味着当我们想解决一个具体的时间序列问题时,我们应该测试不止一种类型的递归神经网络。Darts 包提供了三种选择,我们可以通过改变模型设置中的单个参数来替换它们。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第90张

chan wity 拍摄的男子渔网湖 Pixabay 上的免费照片

和往常一样,您应该在尝试安装一个庞大的 Python 包之前创建一个新的虚拟环境,这个包有许多依赖项,比如 Darts 的。您希望避免基础环境中的现有软件包因新安装而降级或升级。

例如,在 Anaconda: 中创建虚拟环境

  • 康达创建——名称<your_chosen_env_name></your_chosen_env_name>

省道包裹所需的神经网络方法 PyTorch 。PyTorch 具有非 Python 依赖性,因此如果试图安装完整的库时出现错误消息,安装可以在一个 Darts 核心包和某些附加包之间进行。

关于安装的附加信息:一个 python 库,用于时间序列的简单操作和预测。| PythonRepo

安装飞镖及其所有延伸部分FB prophet;pmdarima (针对 SARIMAX);和 PyTorch (用于神经网络)——使用命令:

  • pip 安装’ u8darts[all]’

如果你遇到问题,你可以先安装飞镖而不需要额外的东西:

  • pip 安装 u8 飞镖

然后尝试逐步添加额外内容:

  • pip 安装 ‘u8darts[fbprophet]’
  • pip 安装 ‘u8darts[pmdarima]’
  • pip 安装*’ u8 飞镖【火炬】'*

我们从 PyTorch 和 Darts 库中导入了一些子类。

您想要设置的最重要的常数之一是神经网络配置中的历元的数量。出于调试或测试的目的,将其设置为一个较低的值,如 3。要获得真实的预测,将其设置为 300。请注意,如果您将纪元常数设置为 300,Jupyter 笔记本及其三个 RNN 变体将需要大约 12-15 分钟来训练一个模型,当您想要获得较低个位数的良好平均绝对百分比误差时,请考虑绕街区走一圈。当 epoch 值为 3 时,它将在几秒钟内遍历代码,但当然平均绝对百分比误差会高得离谱。

在本教程中,我们将重点关注 Box & Jenkins 的经典月度航空乘客数据集,该数据集随 Darts 安装一起提供,因此无需读取外部文件即可加载。

在航空公司乘客的例子中,我选择 1959 年 1 月 1 日作为测试周期的开始,用常量 FC_START 表示。我们将预测 36 个月,输入常量 FC_N。

Darts 的 load() 函数允许我们将时间序列读入一个 timeseries 对象*,ts。*

函数 pd_dataframe() 可以将 timeseries 对象转换为 dataframe,以便于在我们想要使用 pandas 提供的数据争论方法时进行处理。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第91张

作者图片

单变量时间序列由从 1949 年到 1960 年的 144 个月组成。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第92张

作者图片

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第93张

作者图片

时间序列似乎表现出 12 个月后重复的季节性。我们可以通过更精确的测试来确认视觉线索。darts '*check _ 季节性()*函数计算自相关函数 ACF,并返回 12.0 个月的季节性顺序。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第94张

作者图片

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第95张

作者图片

我们将时间序列分为训练数据集和验证数据集。

在 dependencies 单元格中,我们选择 FC _ START = 1959/01/01——时间序列结束前的两年——作为我们要进行切割的点。

在将源数据输入神经网络之前,我们需要通过应用 Scaler() 函数对它们进行规范化。缩放将使神经网络更容易应用其秘方:重新校准它应用于输入值的权重。

最后,为了使神经网络能够检测时间序列的属性,我们从编码日期的字符串中派生出。我们将把年序列月序列作为协变量提供给 RNN 模型(“回归变量”),就像当我们拟合 SARIMAX 模型时可以包含两个(或更多)外生变量的列数组 X 一样。

我命名为口味的列表(下面的第 2 行)包含了我们想要在时间序列上释放的三个 RNN 变体。

第 5 行中的 list comprehension 一个接一个地调用这三种口味,并将它们馈送到 RNN 预测器 run_RNN 。除了三种变体的名称之外,它们在所需的参数化方面没有区别。只是他们内部的算法会导致不同的结果。预测器 run_RNN 将接受它要应用的算法的名称作为它的输入参数;以及经过重新调整或变换的时间序列及其训练和验证数据集。

接下来, run_RNN() 函数配置神经网络。

rnn 附带了一组用户需要设置的超参数(或者在搜索递增的更好的参数元组时让调整算法多次评估模型),其中包括:

  • 输入节点、隐藏层及其节点、输出节点的数量;它们越多,RNN 能处理的模式就越复杂;太多的话,RNN 就有被卡住或过度适应的风险
  • 权重值及其变化率(学习率)
  • 辍学率,如果有的话(见下文)

它们的最佳设置不是先验已知的,它们是针对 RNN 要攻击的具体问题的。PyTorch 和 Darts 有默认值。超参数调整算法可用于微调它们,作为手动实验的替代方法,但寻找更好的超参数需要时间进行重复评估。我将这个练习限制在几个不同的历元数(训练循环)值上;以及学习率(各遍之间权重的调整量)。

  • 它的模型参数接受我们想要应用到源数据的三个拟合过程中的每一个的“味道”:首先是 LSTM,然后是 GRU,最后是香草(简单地标记为“RNN”作为默认变量)。
  • 神经网络的 epoch 参数设置训练期间的通过次数。一个时期包括一次向前和一次向后通过整个训练数据集。
  • 我们将 input_chunk_length — 用于预测的过去周期数— 设置为周期性 12.0,这是check _ 季节性测试返回的结果。RNN 将回顾过去 12 个月,一个完整的季节周期,来计算预测。我们可以增加这个值,从而迫使 RNN 更加依赖它的长期记忆。这将发挥 LSTM 或 GRU 相对于香草味的短期记忆的优势,但不一定会导致更高的准确性。
  • training_length —训练期间使用的周期数。不应低于它将用于预测的 input_chunk_length。
  • random_state 可以使用给定的种子号来初始化权重,以提高模型结果的可重复性。
  • 丢失 —在训练过程中,如果设置大于 0,RNN 可以随机将一些输入清零,丢失概率等于参数值,模拟不同的网络架构。在每个时期,RNN 都会选择一组不同的神经元,并将其暂时移除。不同的神经元组合然后做出预测。这种所谓的网络细化的目的是通过不断训练其全套神经元来防止 RNN 过度拟合。
  • optimizer_kwargs 及其参数“lr”设置了一个*学习率。*RNN 试图通过调整权重来最小化预测误差。权重在循环中更新的量被称为学习率。RNN 估计节点导致错误的程度。然后,每次更新权重时,将估计误差乘以学习率。更高的速率将使 RNN 能够更快地学习,但它可能会因超调而导致不稳定,并使其面临在训练时段之间振荡的风险,甚至会在正反馈循环中结束,从而导致爆炸梯度。然而,在我们当前的例子中,替代的学习率——0.1 或 0.001——并没有显著改变每个模型 10 — 15 分钟的处理时间(尽管时期的数量改变了)。较大的值 0.1 确实会导致 MAPE 增加三倍的不良影响,相比之下,我们将在乘客示例中使用 0.001 的比率来实现更好的预测精度。
  • hidden_dim 控制隐藏状态的大小,模型的深度。隐藏状态越大,它从源数据中推断出的模式就越复杂。
  • force_reset 放弃任何同名的先前模型,重新开始训练。

在模型建立之后,我们将它与训练和验证数据集一起传递给拟合函数, fit_it(),

装配或训练过程是耗时的。根据您计算机的处理器性能,预计三个 RNN 版本的每一个都将运行 10-14 分钟。

在 dependencies 单元格的顶部,如果您只想在一分钟内运行脚本进行代码测试,而对准确的预测结果不感兴趣,您可以将 EPOCH 参数降低到远小于 300,例如一个小至 3 的 EPOCH 数。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第96张

作者图片

当辅助函数 fit_it()返回拟合的模型时,主函数 run_RNN()将接受它并使用它来计算预测(第 26 行)。

run_RNN()中的第 29 行调用绘图仪函数 plot_fitted() 来绘制预测和实际观测的图表。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第97张

作者图片

绘制完预测图表后,run_RNN()调用下一个帮助函数*【accuracy _ metrics()*,计算预测准确度指标。这将比我们从图表中获得的视觉线索更精确地确定预测值和实际值之间的差异。

在 accuracy_metrics()的顶部,我使用 Darts 的’ slice_intersect() 函数来确保我们想要比较的两个序列(预测和实际)具有相同的长度,只包括它们的重叠周期。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第98张

作者图片

该函数计算 Darts 在其工具类中提供的三个度量:MAPE、RMSE 和 R 平方。

r 平方表示实际观测值的变化在多大程度上可以用预测值的相应变化来解释。值 1.0 表示预测完全反映了实际情况。如果你想知道为什么 R 平方显示负值:虽然 R 平方本身是一个介于 0 和 1 之间的非负数,但我反转了它的符号,以使它的方向指引与其他度量一致。对于所有其他误差测量指标,较低的值是首选。R 平方前面的负号使其成为一个“越低越好”的指标,就像其他指标一样,这将有助于在下面进一步显示的数据框架中可视化它们。

该函数还计算 RMSPE,即均方根百分比误差;以及预测的标准误差。

第 20–22 行收集字典中的指标及其名称,该函数将这些信息传递回主函数 run_RNN()。

事实证明,简单的 RNN 香草口味生成的预测具有最低的平均绝对百分比误差,为 3.93%,领先于这个特定示例的三个 RNN 变体之间的一根头发的宽度。LSTM 风味紧随其后,为 4.11%。实际上,它们是无法区分的。GRU 风味的 MAPE,5.01%,远远落后于这两个领先者。

在 RNN 模型的设置中,我们对学习率(0.001)和纪元(300)进行了相对精细的梳理。我们还可以使用 dropout 参数(让 RNN 在训练期间尝试各种节点子集);以及隐藏状态的大小(较高的隐藏维度值增加了 RNN 在较长时间范围内处理更复杂模式的能力)。调整算法可以在重新运行拟合过程时调整它们,以尝试实现更低的 MAPE。但是这个特殊的时间序列并不复杂。耗时的调整工作似乎不太可能将 MAPE 从 4%降低到 1%。然而,在现实世界的项目中,我们可以考虑一个更长的通宵调优过程,以尝试逐步消除 MAPE。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第99张

作者图片

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第100张

作者图片

为了将 RNN 方法与基线预测进行比较,我们转向我们在早期文章中回顾过的方法之一( Darts 的时间序列预测瑞士刀| 2021 年 10 月|走向数据科学):Theta 方法,一种简单而快速的方法。

我们通过在第 4-18 行中搜索 100 个可选值来调整它的 theta 参数。然后,我们将这个最佳θ参数传递给第 22–23 行中的装配工,并计算第 24 行中的预测。

第 24 行下面的部分绘制了预测曲线,并计算了准确性指标。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第101张

作者图片

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第102张

作者图片

θ返回的 MAPE 只有 3.11%

为了便于比较这些方法,让我们将三个 RNN 变量和 Theta 预测的准确性指标收集到一个字典中(第 3-4 行),我们在第 5 行将其转换为数据帧。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第103张

作者图片

  • 我们观察到,相对于 MAPE 标准,θ方法领先于该领域:预测误差仅为 3.112%。
  • 普通 RNN 在均方根百分比误差 RMSE 方面保持其竞争优势,
  • 而 LSTM 提供了最低的绝对 RMSE,以及最佳的 R 平方值和最小的预测标准误差。

没有整合 LSTM 算法的“长”方面的普通 RNN 的良好性能意味着时间序列遵循一种不需要太多长期记忆的模式。

RMSE 对预测误差进行平方,对较大误差的惩罚力度比 MAPE 更大。当残差的分布是左偏或右偏时,就会出现偏差。平均值将高于或低于中间值。最小化 RMSE 的预测将显示出较小的偏差。

在我们当前的例子中,LSTM 在预测的 RMSE、R 平方和标准误差方面具有竞争优势。综上所述,我认为这三个标准足以证明 LSTM 是这场赛马的赢家。

  • Jupyter 笔记本可以在 GitHub 上下载:h3ik0th/Darts _ RNN:Python Darts 中的递归神经网络(github.com)
  • 标题图片:人民集体组,作者 geralt——Pixabay 上的免费图片
  • 葡萄藤图片:葡萄藤卷须攀缘植物,由 stevepb 拍摄 Pixabay 上的免费照片
  • 渔夫图片:chan wity 拍摄的渔网湖 Pixabay 上的免费照片
  • 所有其他图片:作者

原文:https://towardsdatascience.com/temporal-semantic-network-analysis-bd8869c10f10?source=collection_archive---------20-----------------------

研究知识一直是基于文档的(研究论文、评论),许多实体,如语义学者Arxiv 试图将这些文本知识聚集在一个大的语料库中,在那里您可以使用关键字或 id(DOI 代码)来访问特定的论文或获得关于特定领域状态的查询,从而给研究人员一个真实的来源来检查文献并将其用作他们研究的构建基础。

然而,致力于语料库的新论文的快速发展使得跟踪研究趋势或简单地停留在上下文中的任务变得非常困难。特别是对于一个初级研究人员,他希望了解他的领域的状况,以便在此基础上有所发展。

为了解决这个问题,许多研究人员和科学实体自愿通过撰写文献综述来填补这一空白,文献综述总结了特定主题的研究现状。虽然这些综述的数量有限,而且不能与科学文集的数量成比例。

为了解决上述问题,我们的研究目标是构建一个文本网络,该网络对给定的文本语料库(科学论文列表)进行编码,并使用图论工具和技术来推断研究背景,提取语料库状态,并将语料库视为一个时间动态网络,以揭示时间趋势和模式。

在这第一篇科学文章中,我们将尝试回答上述问题:

  • 如何将文本语料库编码成文本网络?
  • 如何利用图论工具提取研究社区?
  • 我们如何描述和推断一个给定研究团体的内部动态?

科学文集包含一组具有标准格式的论文(标题、摘要、简介、方法论、结果和讨论)。有了这个简单统一的结构,我们将论文实体定义为包含摘要的对象,因为它通常是论文内容的摘要、主要关键字的列表和出版日期。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第104张

纸质实体解剖(图片由作者提供)

选择这些元素有两个主要原因:

  • 出于计算原因,限制处理和编码文本的数量
  • 选择给定论文中信息最丰富的部分

在定义了我们的 paper 实体之后,是时候将它编码为一个 graph 对象了。为此,我们构建了将原始文本转换为文本图的现有管道。

一字钢

首先通过将原始文本分割成单词列表来对抽象文本进行标记化。然后,通过保留单词的词根来蒸化标记化的单词,以减少冗余。例如,模型化、模型化和模型化都是为了模型。

2-停止字删除

我们管道的下一步是删除起连接作用并且没有任何科学意义的停用词,例如:和,或…

3-构建抽象文本图

下一步是将处理后的抽象文本转换成一个无向图,其中单词是图节点,它们的同现是边。

我们通过执行 4 个单词的窗口扫描来构建图的边;换句话说,如果两个单词出现在同一个窗口中,我们构建一条连接它们的边,并根据它们之间的距离分配一个权重。如果两个单词在另一个时间出现,我们将新的权重与前一个相加。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第105张

作者图片

4-提取关键词图

如果我们回忆一下我们的 paper 对象,我们已经挖掘出了在论文中出现的关键字列表。我们现在的目标是从只包含作为节点的关键字列表的抽象图中提取一个子图。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第106张

作者图片

至于新的边及其相对权重,我们将使用每对提取的节点之间的最短路径来构建它们。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第107张

作者图片

最后,我们有一个功能完整的管道,它将一篇论文作为输入,并输出一个相关的文本图及其出版日期,这将在接下来的步骤中使用。

如前所述,研究语料库包含一个论文列表。因此,为了能够在文本图中对文本格式语料库进行编码,我们应该将纸质图合并成一个大的无向图。

但我们应该注意到,研究语料库不是静态的,随着新论文的增加而不断发展变化。这就是为什么我们选择构建一个时间网络来保持这种动态性。

为了实现我们的目标,我们选择一组时间戳来创建我们的时态图的快照,以便我们可以存储我们的图,并且还能够在这些快照上使用静态图论工具以供将来分析。

每个时间间隔将由一批论文来表征,这些论文的发表时间包含在该时间间隔中。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第108张

作者图片

因此,我们**获取在给定时间间隔发表的论文集合,创建它们的相关文本图,然后将它们合并到我们的图中,以便更新其状态,从而创建我们的时态图的新快照。**这一更新是通过从我们的图批次向时态图添加新节点和/或加强现有节点的边权重来完成的。

这个迭代过程为我们的时态图提供了一组快照,向我们展示了它是如何在知识创造(新添加的节点)或差距实现(新边)方面随着时间的推移而演变的。

在最后一部分中,我们成功地准备了将文本语料库转换为时态文本图的管道。现在是时候将它应用到一个真实的研究语料库中进行测试,同时也做一些数据分析,并尝试回答我们引言中的主要问题。

为了做到这一点,我们使用了 UM6P 研究语料库,UM6P 或穆罕默德六世理工大学是一所摩洛哥大学,位于未来绿色城市本盖里尔的中心。他们的研究部门主要关注可持续发展、采矿和农业科学。

UM6P 的研究语料库包含了从 2014 年到 2020 年之间发表的科学网站260 篇研究论文

为了给我们的图形管道准备文本语料库,我们构建了一个数据集,其中包含我们定义的论文实体的元素(论文摘要、关键词列表和发表日期)。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第109张

来自 UM6P 研究数据集的样本

使用前面介绍的管道架构,我们使用 Networks(一个流行的图形库)和 Numpy 在 Python 中实现了它。代码可以在我的个人 GitHub 上找到。

至于可视化,我们使用用 Javascript 语言编写的 D3 包,它使用一个 Force 算法来使图形在视觉上更具吸引力。

我们通过定义 3 个月的时间间隔,使我们的文本语料库通过我们的时态图构建管道,因此我们已经提取了我们的图的 20 个快照,准备进行分析和处理。

下面是我们的时态图表的最后一张快照。它是一个静态网络,包含 1195 个节点(UM6P 论文中的关键词)和 3753 条边(它们之间的链接)。有了这种可视化,很容易在一个镜头中看到完全进化的 UM6P 研究语料库。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第110张

2020 年 12 月 UM6P 研究图表快照

但是,巨大的节点数量并不能帮助我们提取关于我们的研究语料库的有用信息,我们需要一个过滤的网络视图,它只包含主要和重要节点。为此,我们选择了“节点度”,这是一种节点中心性度量,它将使我们能够对我们的节点进行评分。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第111张

过滤图形快照(图片由作者提供)

如您所见,并非所有节点都具有相同的重要性。我们现在可以提取高度连接的节点(具有高节点度分数的节点),它指的是我们的研究语料库中的中心关键词。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第112张

作者图片

这种高层次的分析帮助我们发现了主要节点,这些节点可能是我们文本网络中的潜在枢纽。如果我们将这些结果投射到我们的案例研究中,我们检测到的节点可能指的是主要的研究主题,而我们的网络中有许多枢纽可以用 UM6P 的研究多样性来解释。

自然地,这第一个观察驱使我们询问语料库中的研究社区。一旦被检测到,这些社区不仅会在我们的图中向我们显示密切相关的关键词,而且还会帮助我们提取与每个社区相关的动态。

图社区可以定义为一组内部连接紧密,与其他组连接较稀疏的节点。此外,我们已经确定了潜在中枢节点的存在,它们可能是每个社区的相对心脏。

问题定义

鉴于这种观察,我们将我们的社区提取问题公式化为 K 均值聚类问题,其中我们的质心是我们的图中的主要中心关键词,并且具有科学意义,我们的距离度量将使用节点之间的最短路径来计算。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第113张

作者图片

主要关键词提取

如前所述,静态图论为我们提供了一组中心性度量,以相对于节点在网络中的重要性来加权节点,这允许我们通过计算每个节点的分数来精确定位文本图中的中心节点。为此,我们选择了 4 个中心性度量:程度中心性、中间中心性、特征中心性和接近中心性(你可以参考我以前关于中心性度量的文章**)。**

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第114张

中心性测量分布

然后,我们计算 4 个指标之间的相关矩阵,以选择哪个中心性度量将与我们的中心节点评分兼容。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第115张

corr 矩阵

我们的三个中心性度量具有高的正相关系数,另一方面,接近中心性具有小的正相关系数,这是合乎逻辑的,因为例如高度节点往往是中枢节点,因此通常接近节点的子集(在我们的情况下,最高节点度是 122,相比于我们的图中的 1500 个节点),因此它将远离大多数图节点,然后它将具有小的节点接近中心性。

因为我们的目标是提取图中可能是潜在中心节点的主要节点,所以我们将我们的评分限制在前 3 个相关度量上。这导致提取了构成我们主题节点的 6 个主要节点:土壤、植物、废物、磷酸盐、材料和纤维素。为了验证我们的节点排名,我们使用了 Voterank 算法,该算法输出网络中最有影响力的节点,它输出相同的节点列表在顶部。

距离测量公式

现在,我们需要定义一个距离度量,以便根据网络节点与我们预定义的质心(主题关键字)的接近程度对它们进行聚类。为此,我们选择每条最短路径的总距离作为我们的距离。我们应该注意,两个节点之间的距离被构造为它们的边权重的倒数。例如,我们想计算图中的关键字“Funghi”和土壤主题之间的距离。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第116张

作者图片

**使用 **Dijkstra 的算法,我们可以计算两个节点之间的路径,并获得距离值。我们对图中的所有节点执行相同的过程,然后根据它们与每个主题节点的接近程度(最小距离)对它们进行分类。

这给了我们 6 个社区,给了我们 6 个研究课题。这种社区分离将有助于我们通过推断每个社区的动态或探索他们如何互动来对我们的图表进行更个性化的分析。下图展示了我们在向每个节点添加社区注释后的图表。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第117张

图形社区

所有前面的部分都可以看作是工具,可以帮助我们对一个给定的研究课题进行分析。事实上,我们已经成功地构建了我们的时态图,提取了我们的研究主题,并最终将我们的大网络划分为小而独特的社区或子图。由此,很容易获得每个研究主题的时间演变。现在,我们将能够定义一组指标,以便根据知识创造**、其连通性以及其活动来表征我们社区的动态。**

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第118张

作者图片

社区知识创造

我们通过量化随时间推移的知识创造来开始我们的图表跟踪。为此,我们定义了 new_k: 一个标量值,它计算添加到给定社区子图的新节点与图节点总数的比率:

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第119张

我们为给定网络的每个快照计算这个度量,下图可视化了每个社区的子图的演变。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第120张

我们观察到,每个社区在早期时间戳中显示出相同的模式,这是一个高比率的新知识,例如,对于土壤的情况达到 90%,对于废物主题的情况达到 50 %。这可以通过以下事实来证明:我们的图处于其第一次迭代中,并且不包含大量的节点,这给了新节点添加的动作更多的权重。

至于其他时间戳,我们看到该比率呈指数下降,这可以通过每个图的节点总数的增加来解释,伴随着新节点到图中的伪常数增加,这使得计算的比率随时间下降,直到它在最后记录的时间戳处停滞,因为节点的数量已经很高,并且比率稳定在其固定值。

我们可能会观察到一些社区的比值有很大的变化,如磷酸盐废物。这可以通过以下事实来解释,即与其他社区相比,这些社区平均包含少量节点,这使得该比率具有相对较高的方差。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第121张

社区连通性进化

社区连接性被定义为知识(在我们的例子中是关键字)在每个社区内相互连接的方式。不用说,这些信息已经编码在我们的图边中,因为每两个可能链接的关键字都有一条连接它们的加权边。

我们首先根据边的数量来探索这些连接是如何演变的,并最终根据它们的作用对它们进行分类:边是为了连接新节点而创建的,还是为了加强现有连接而创建的。

下图说明了按研究主题划分的边数的演变。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第122张

我们观察到纤维素土壤植物和物质群落具有大量的边,至于其他群落,与第一个主题相比,边的数量仍然很少。这与我们之前的观察完全相关,当时我们看到这些最后的主题具有少量的节点,因此它们将需要少量的边来相互连接。至于演变,我们可以清楚地看到土壤群落中的拐点,在这里边数线斜率增加。

这种边数的普遍增加可以用两个原因来解释:

  • 添加边以将新节点链接到图形。
  • 为加强现有连接或连接现有节点而添加的边。

我们的下一个任务将是强调这种边缘角色,以理解社区的连通性如何在质量上演变。下图显示了工厂研究主题的角色划分。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第123张

按边缘角色(工厂)的边缘计数演变

我们可以看到,这两种类型的边缘没有相同的进化水平。事实上,更有可能出现强化边,而不是连接边,尤其是在图中已经包含许多节点的最后时间戳中。但是为什么呢?

事实上,随着时间的推移,研究人员倾向于使用与我们所说的相同的语义词汇或行话,因此在较高的时间戳中,较少的新节点被添加到我们的图中。例如,2020 年发表的一篇论文可能会包含在以前的论文中已经使用过的关键词。新节点或关键字的减少将导致更少的连接边和更多的加固边。

在我们的所有主题中都观察到了这种模式,除了废物研究社区,在那里我们看到在我们的实验时间范围的中间连接边激增。这可能是因为该领域的新发现或他们研究议程的新支点。这种观点在定量证明之前是主观的。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第124张

按边缘角色划分的边缘计数演变(浪费)

提取研究活动中的注意力转移

我们已经看到了每个社区在知识创造和连通性方面如何随着时间的推移而发展,在最后一部分,我们看到了我们社区的时间动态可能会有所不同。例如,在其他社区中没有观察到浪费研究主题中的连接边计数激增。在这一部分中,我们将通过分析研究活动来更深入地挖掘每个社区的动态,例如,看看一个研究社区是否倾向于通过创建子领域或坚持主要主题来专注于一个领域,从而填补其科学空白或通过新方法或评论来更新现有作品。

这个任务在一个镜头中可能有点复杂,所以我们将坚持它的一边。事实上,在这一部分,我们将尝试跟踪研究活动,并尝试量化给定研究社区的专业化水平。

  • 定义:

量化专业化水平可能很难做到,所以我们假设这个简单的定义:当新创建的知识与给定主题的主要主题没有直接联系时,可能会出现高专业化水平,例如,人工智能社区是高度专业化的,因为新论文不会直接对 AI 做出贡献,而是对其子领域做出贡献,如深度学习或强化学习,或更专业的一些特定网络架构(CNN,语言模型……)。

在这个例子的基础上,如果我们想象有一个编码人工智能研究文集的图,从关于 GANs 的论文中挖掘的新节点将不会直接链接到 AI 节点,而是会靠近深度学习节点,因此我们可以使用这个距离差异来量化给定社区中的专业化水平。

  • 方法:

使用最后一个例子,我们试图构建一个简单的管道来跟踪专门化的级别。我们首先从大图中提取每个社区的子图,并通过时间戳存储其快照。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第125张

作者图片

下一步是从每两个图表快照中计算差异图,这将帮助我们识别图表中发生更改或活动的部分。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第126张

作者图片

****对于每个差异图,我们使用中心性度量给每个节点分配一个分数,并且还使用最短路径计算它与主题主节点的距离。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第127张

作者图片

  • 结果:

我们对每个时间戳进行这种转换,并在一个时间图中对其进行总结,该时间图跟踪相对于社区中心节点的图形活动。我们以工厂社区为例。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第128张

作者图片

我们观察到研究注意力随着时间而变化。例如,我们可以在几个时间戳中看到遥远的活动,这意味着研究活动转移到工厂研究的子领域。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第129张

例如,我们放大时间戳 3,其中我们可以识别出大部分活动集中在细胞外节点和光合节点上,这与植物中光能转化的研究的相关。至于其他时间戳,注意力聚集在主节点植物*附近,正如我们在时间戳 6 中看到的。*****

我们还观察到,大多数时候,在工厂节点附近有一个活动是合理的,因为研究人员倾向于利用它来建立它。**

从这个图表中,很容易看出研究人员的注意力是如何随着时间的推移而转移的,并将其作为一个衡量标准来跟踪特定研究领域的专业化水平。为了更加明确,我们使用与主节点的距离结合节点得分(图中的节点大小)作为权重来计算每个时间戳的重心节点。这有助于我们画一条线,我们称之为注意力线。这条注意力线的变化可以帮助描述研究人员活动的变化,并给出专业化水平的想法,因为远离主节点的重心表明在给定的时间戳中专业化水平高。****

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第130张

我们再来看另一个例子:在废物研究领域,他们研究磷酸盐 废物或污泥的价值化;****

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第131张

我们可以在中心节点附近看到一个研究活动,然后在最后的时间戳中看到一个移动,这可以通过专门化移动来证明。上几个时间戳的主题主要是纸(石头纸)和路。

为了帮助验证我们对关注线的解释,我们添加了最后一个图表,该图表跟踪与中心节点(直接边)直接连接的新节点的比率。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第132张

我们很容易观察到注意力线和比率图之间的这种依赖关系。事实上,早期时间戳的特征是高比率的新节点直接连接到中心节点。另一方面,我们看到注意力线被拖向中心节点()。至于最后的时间戳,我们看到一个比率的强烈下降,相当于注意力图中的移动,其中注意力线从中心节点向上摆动。我们可以给这种行为一个简单的解释。事实上,磷酸盐的 废物再利用在 UM6P 是一个新的研究领域,因此第一篇论文试图在此基础上建立一个基础知识,然后后续论文开始专门探索其应用。例如,创造石头纸,这是一种可以用磷酸盐 废料制成的纸。**

在这里,我们已经介绍了从非结构化研究语料库计算文本图以将其可视化的基本步骤,对其研究社区的动态进行了深入分析,并且必须通过跟踪研究人员的注意力来量化给定主题的专业化水平。

这些步骤的目的是自动从文本语料库中提取模式和趋势,而不需要人工专家。事实上,这些构件有助于对某个领域进行深刻的评论。

我们的下一篇文章将讨论根据社区之间的联系推断外部动态的可能性,以查看哪些社区彼此接近,哪些社区不接近,以便让研究人员了解需要填补的知识缺口。

原文:https://towardsdatascience.com/ten-artificial-intelligence-innovations-in-healthcare-3f5b30ea75b5?source=collection_archive---------37-----------------------

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第133张

Enric Moreu 在 Unsplash 上的照片

过去的一年让世界为之震惊,但也迎来了几项重要的医疗创新。由于疫情的限制,远程保健和远程护理变得更加普及。

我们卫生系统的压力意味着最具前瞻性的医疗机构必须发展新的能力,如语音助手,能够在通常的补充之外服务数百个电话。为了加快处理速度,人工智能(AI)在各种医疗保健应用中蓬勃发展,大数据在预测分析领域发挥了重要作用。

这些创新都令人印象深刻,还有更多正在酝酿中。然而,他们中的大多数都来自世界各地的顶级研究中心,如梅奥诊所或一些秘密隐藏在硅谷的小型初创企业。事实是,它们中的许多需要很长时间才能在商业上可行,我们可能需要数年才能开始收获它们的好处。然而,并非所有的创新都发生在世界的另一端,本文将重点介绍发生在我们后院的几个项目。

马耳他大学的研究人员目前正在与 Mater Dei 医院等其他实体合作开展这些研究。他们的创新方面与国外的其他项目不相上下。研究人员用他们获得的微薄资金创造了奇迹,其中许多资金来自大学,但也有来自国家、欧洲甚至私人的资助。然而,他们的共同点是很少有人知道他们,大多数时候,缺乏后续融资扼杀了项目。以下是这类项目的精选。

有各种各样的项目与假肢的创造有关。其中一个使用 Open Hand 项目
来创建 3D 打印手,并使用智能组件来增强它。该项目的想法是为假手提供额外的功能,例如通过远距离移动假肢来改变电视音量。集成在手中的语音识别功能允许人们发出更复杂的命令,并将其发送回家中的任何智能设备。本质上,它融合了智能手机和假肢。

该项目旨在从零开始制造一种商业假手。它旨在解决商业假肢中通常遇到的简单性、灵活性和可用性之间的权衡。该项目将在保证其可用性的简单架构的基础上,对手的最佳灵巧性进行研究。然后,它将根据人工智能系统提出的参数创建一只假手。

自闭症虚拟现实(VR)应用程序,已经在以前的文章中讨论过,让人们体验自闭症儿童在典型的一天中所经历的事情。当用户戴上 VR 头戴式耳机时,他发现自己处于一个学校环境中,在那里他通过一个自闭症儿童的眼睛来看、听和感知世界。该项目旨在促进共情,从而帮助教育工作者、职业和人们更彻底地与自闭症儿童互动。

SMARTCLAP 项目帮助脑瘫儿童;影响运动和姿势的儿童最常见的身体残疾。该项目将用户置于设计过程的中心,通过创造一种智能设备来增加儿童的动力。在不同的疗程中,孩子们有时会发现完成治疗师建议的任务很有挑战性。通过将治疗变成一个有趣的游戏,研究人员希望从他们那里获得更好的反馈。这个概念被称为游戏化,一个典型的(有时是乏味的)任务被变成了一个游戏。各种实验表明,游戏化在不同的环境中非常有用。通过这个项目,鼓励儿童发展积极的行为,改善其社会交往。

环境辅助生活(AAL)服务在人们的日常生活中使用技术来帮助他们独立生活。基于传感器、麦克风和视觉系统,已经设计和开发了几种 AAL 设备,结果非常有希望。然而,为了使该领域达到成熟,需要应对许多挑战,包括在现实世界中开发易于使用并被社会、用户和护理者接受的强大流程。正因为如此,研究人员正试图使用一个标准的摄像系统来检测罕见的不规则事件。姿态估计模型用于检测图像中的人并提取身体关键点。这个过程通常被称为骨骼检测,通过这个过程,人的骨骼位置就可以从照片中确定。这些信息对于检测异常情况(如有人躺在地上失去知觉)至关重要。初步研究显示,该系统能够检测出大多数异常情况,取得了一些令人印象深刻的结果。这些结果还表明,这些方法与其他基于传感器的商业解决方案相比非常好,这些解决方案要昂贵得多,并且对于大多数人来说是难以获得的。

步态分析是对行走模式的系统研究,通常涉及昂贵且侵入性的基于标记的方法,结合多个红外摄像机。

当它们结合在一起时,会产生精确测量一个人行走行为的运动学数据。一旦收集了数据,专家们就可以从运动学数据中解读出结论来进行诊断。另一方面,该项目使用标准相机和人工智能开发了基于标记的步态分析方法的自动化替代方法。该系统获得运动学数据,包括臀部或膝盖的不同左右关节角度。两个摄像机对准行走对象的侧视图和前视图,捕捉这些信息。然后,它使用姿势估计作为一种无标记的运动捕捉形式,输入到计算和处理运动学的算法管道中。自动化方法非常有前途,因为它获得的结果几乎与昂贵的基于标记的系统的结果相同。因此,它减少了步态分析所需的努力和资金投入,从而在卫生保健界得到更广泛的推广。此外,由于这种系统理论上可以仅与两个移动设备一起工作,因此它将使其非常适用于世界范围内不可能提供昂贵设置的偏远地区。

心理健康促进(MEHAP)项目试图帮助有心理健康问题的青少年,这些问题导致自残、抑郁和自杀风险增加。该项目将推出一款与自残过的年轻人共同制作的手机 app。它包括许多功能,如情绪监测日记、提升情绪活动的个性化自助菜单、录音放松和正念练习。每次使用后,年轻人被要求重新评估他们的情绪,如果他们仍然有自残的冲动,就会被转到紧急号码。

向医护人员讲授精神分裂症的一个挑战是,他们很难理解患者的感受。这个项目在虚拟现实模拟中使用人工智能,让用户沉浸在虚拟世界中,帮助他们体验这种患者可能会感觉到的症状。该模拟以几个简单的任务为特色,用户在面对与精神分裂症相关的挑战时,以视觉和听觉幻觉的形式进行尝试。人工智能被应用到交互式叙事中,以允许故事情节适应用户的行为,从而增加体验的沉浸感。各种心理健康护理学生尝试了这种体验,并得到了好评。它设法提高了他们的意识,并培养了对精神分裂症患者的同情心。这个项目的下一阶段是将它作为真实病人的治疗手段,这样病人就可以在一个安全的虚拟环境中面对他们的幻觉。

如果大脑分心,即使刺激仍然存在,对疼痛的感知也会减弱。分散注意力作为疼痛管理技术的想法并不新颖,有几个案例研究证明这可以减少多达 50%的疼痛感知。VR 头戴设备会在例行的痛苦程序和治疗过程中分散儿童的注意力。

在 UoM 的 Morpheus 项目中,研究人员使用智能手表等生物传感器来读取生物信息。这些数据将使虚拟现实体验根据患者的感受实时改变和适应。如果病人感到无聊,游戏就会变得令人兴奋。如果他焦虑,它会慢下来,变得更平静。最初的结果表明,虚拟现实体验更加有效,并且无需借助任何药物就能减轻疼痛。

几年前开始的另一个项目使用人工智能来检测 x 光照片中的异常。这个想法是分析成像数据,并在潜在的异常点放射科医生。这个项目将大大加快他们的工作速度,提高他们的准确性,因为即使是训练有素的眼睛也很容易漏掉一些癌症。与此一致,2020 年发表在 Nature 上的一篇关于人工智能在乳腺癌筛查中的应用的文章报告称,与标准放射科医生筛查相比,假阳性和假阴性都有所减少。这个结果并不意味着人工智能将很快取代医生。然而,对于任何医生来说,这是一个机会,可以立即以低廉的成本获得对其诊断的第二种意见,从而进一步降低人为错误率。这个项目是 Aaron Casha 教授的创意,他是一位杰出的外科医生和梦想家,去年不幸去世。不幸的是,这个项目也随他而去了。

可以看出,正在进行的项目多种多样,涉及卫生的所有领域。可能有许多其他项目,我们没有在这里列出!这个列表只是为了庆祝研究人员的参与和展示他们的新颖性而选择的。这些研究人员不遗余力地争取资金,寻找合作伙伴,进行项目,并在资金枯竭后继续进行。然而,医学和技术世界仍然相距甚远。因此,当一个想法酝酿出来时,迈出第一步,接触各种各样的研究人员,并把它变成现实。毕竟,这些创新对于改善人们的生活至关重要。

本文原载于【The Synapse】。请在下面留下你的想法评论。如果你喜欢这篇文章,请跟我来🐦推特,🔗 LinkedIn ,📷 Instagram 或者😊脸书

*https://medium.com/dataseries/managing-pain-through-distraction-c51e73d49205 https://medium.com/dataseries/call-for-chapters-ethical-implications-of-reshaping-healthcare-with-emerging-technologies-1be92d73145f

Alexei DingliProf 是马耳他大学的 AI 教授。二十多年来,他一直在人工智能领域进行研究和工作,协助不同的公司实施人工智能解决方案。他的工作被国际专家评为世界级,并赢得了几个当地和国际奖项(如欧洲航天局、世界知识产权组织和联合国等)。他出版了几本同行评审的出版物,并成为马耳他的一员。由马耳他政府成立的人工智能特别工作组,旨在使马耳他成为世界上人工智能水平最高的国家之一。*

原文:https://towardsdatascience.com/ten-awesome-recent-developments-in-r-6bfad46299a0?source=collection_archive---------7-----------------------

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第134张

从卡尔·海尔达尔途经 unsplash.com

在过去一年左右的时间里,R 生态系统的发展一直在稳步前进。基础 R 语言、关键 R 包和 RStudio IDE 中的新功能使得像我这样的原生 R 程序员更容易完成他们的日常工作。这些发展中的大部分也使得用 R 编写代码变得更加令人愉快,并且在许多情况下消除了以前令人头疼的问题,或者引入了与其他编程语言更好地结合的功能。

如果你没有跟上时代,这里有十个在过去一年左右的时间里让我兴奋的发展——排名不分先后。如果已经有一段时间了,希望这能鼓励你尝试或重新接触这门语言。

我从最近的新进展开始。任何对 R 有过短暂介绍的人都会知道管道操作符%>%,它是 R 独有的,引入它是为了使代码更具逻辑性和可读性。对于大多数 R 用户来说,管道已经变得如此自然,以至于许多人试图立即使用它,却没有意识到它不是 base R 的一部分。很多次,我会在安装dplyrmagrittr之前尝试使用它,由此产生的错误变得令人沮丧和讨厌。

一段时间以来,已经认识到管道需要在 base R 中可用,并且从 R 版本 4.1.0 开始,该操作符是可用的,并被标记为|>。Native pipe 将把它前面的表达式作为第一个参数放入后面的函数中。例如:

mtcars |>
  subset(subset = cyl == 4)

将子集mtcars降低到仅用cyl == 4观察。注意,与使用%>%不同,您不能使用.直接进入函数的其他参数——例如:

row.names(mtcars) |> 
  grepl("Mazda", .)

不会起作用。为此,我们需要使用一个函数调用(见第 2 条)。

预计从长远来看,原生管道将取代“旧”管道。然而,这将需要在使用旧管道的关键包中进行一些进一步的开发,所以您需要准备好使用两者一段时间。如果您确实想立即开始使用本机管道,您可以切换到前面的 Cmd/Ctrl-Shift-M 快捷键,通过单击全局选项> RStudio 中的代码下的框来编码新管道:

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第135张

将 Cmd/Ctrl-Shift-M 交换到 RStudio 中新的原生管道(作者生成的图像)

R 4.1.0 中的另一个并行开发是一个新的语法,用于编写一次性使用的匿名函数,类似于 Python 中的 Lambdas。一般来说,R 之前已经设置好了,鼓励所有函数都在内存中命名。例如:

check_mazda <- function(x) {
  grepl("Mazda", x)
}

然后,我们将通过管道进入该函数,如下所示:

mtcars |>
  row.names() |> 
  check_mazda()

虽然总是有办法解决这个问题,但最新的版本将匿名函数的简写正式化如下:

mtcars |>
  row.names() |>
  {(x) grepl("Mazda", x)}()

这为跨数据结构映射匿名函数做好了准备。例如:

mtcars |>
  lapply((x) mean(x) > 20)

将跨mtcars的所有列测试该列的平均值是否大于 20。

在 RStudio 中,作业可以让您更有效地进行多任务处理。以前,如果您想运行冗长的 R 代码,同时处理代码,您必须启动两个不同的 RStudio 实例,这有点烦人。现在,您可以将代码作为一个作业来运行,它将在 RStudio 中的一个单独的 R 会话中运行,允许您在处理其他事情的同时对其进行监控。

如果您在 RStudio 1.2+中工作,可以使用下拉源菜单将脚本作为作业运行。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第136张

您需要确保您的工作目录设置正确,并且您需要选择要将结果复制到哪里。如果您的脚本没有将结果写到某个地方,并且您选择不将它们复制到某个地方,那么流程将执行而没有结果,这可能不是您想要的。您还可以使用脚本中的部分注释来跟踪作业的进度——您可以在这里了解更多信息。

R Markdown 非常棒,也是我最喜欢的发布数据文档的方式。现在,从 RStudio 1.4 开始,R Markdown 有了一个可视化编辑器,对于那些不完全熟悉 R Markdown 语法的人来说,这是一个很好的工具。

要使用可视化编辑器编辑您的Rmd文档,请查找

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第137张

“文档”窗口右上角的符号。这将在源代码编辑器和可视化编辑器之间切换。以下是可视化编辑器的一个示例:

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第138张

从 RStudio 1.4 开始,无论何时使用 R 和 Python,都可以很容易地在两个环境之间切换,并查看每个环境中的对象。假设您已经安装并加载了reticulate包,您可以通过在环境窗格中点击 Python 和 R 环境来查看它们:

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第139张

如果你有兴趣了解更多关于在 R Studio 中一起使用 R 和 Python 的知识,那么请看我的另一篇文章这里。

这个更具装饰性,但是给嵌套括号着色可以帮助您更容易地解决代码问题,尤其是当您有许多嵌套的普通、方形或花括号时。现在可以在全局选项>代码>显示下启用此功能:

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第140张

虽然列表列不是全新的,但自从去年 tidyverse 包dplyrtidyr的重大更新以来,列表列更加引人注目。现在,数据帧的列可以是列表,而不仅仅是向量,这允许我们灵活地在数据帧中放置任何东西,包括模型、图形、其他数据帧等等。这创造了巨大的灵活性,并为像dplyr这样的包打开了更大的权力。例如,现在可以在数据帧中嵌套子集数据帧:

library(dplyr)
library(ggplot2)mtcars |> 
  nest_by(cyl)# A tibble: 3 x 2
# Rowwise:  cyl
    cyl                data
  *<dbl>* *<list<tibble[,10]>>*
1     4           [11 × 10]
2     6            [7 × 10]
3     8           [14 × 10]

然后,您可以进一步改变包含每个子集的图的列:

plotframe <- mtcars |> 
  nest_by(cyl) |> 
  mutate(plot = list(ggplot(data = data, aes(x = wt, y = mpg)) +
           geom_point() +
           geom_smooth()))# A tibble: 3 x 3
# Rowwise:  cyl
    cyl                data plot  
  *<dbl>* *<list<tibble[,10]>>* *<list>*
1     4           [11 × 10] <gg>  
2     6            [7 × 10] <gg>  
3     8           [14 × 10] <gg>

现在我们有了一个包含数据帧的列表列和一个包含绘图的列表列。要查看特定的绘图,您只需调用列表列中的一个元素:

plotframe$plot[1]

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第141张

这可以扩展到使用数据帧来支持大批量任务——在我的文章中的批量参数化 powerpoint 文档的生产中可以看到这样的例子。

新开发的targets包提供了一个工具包,用于自动化和生产 R 中的数据科学过程。这特别旨在克服这些过程建立在相互依赖的 R 脚本上的情况,这些脚本按顺序单独执行。这个模型并不理想,targets鼓励程序员在抽象的 R 函数管道中建立他们的流程,而不是使用脚本。targets 包将智能地执行这些函数的流水线,并存储中间和最终输出以供检查。

当参数改变时,targets知道这会影响到管道的哪些部分,并且只执行管道中受影响的部分,使用先前为未受影响的部分生成的输出。这可以节省大量的时间,并有助于大量的错误修复。targets还包含像tar_glimpse()这样有用的功能,可以即时创建管道的可视化。更多关于targets 这里。

dplyr是 R 生态系统中一个非常重要的包,从去年 1.0.0 版本发布时起,它的力量已经大大增强了。特别是,许多常用的函数已经被抽象为一次跨多个列工作,节省了大量的编码工作。结合允许您通过编程选择列的tidyselect,现在使用summarise中的across这样的函数可以大大缩短代码。例如,以前我们可能会写:

mtcars |>
  group_by(cyl) |>
  summarise(mean_disp = mean(disp),
            sd_disp = sd(disp),
            mean_drat = mean(drat),
            sd_drat = sd(drat))

我们现在可以简单地写:

mtcars |>
  group_by(cyl) |>
  summarise(across(starts_with("d"), list(mean = mean, sd = sd)))

我已经在这里详细地写了一些令人惊奇的新的抽象功能。

如果您希望同时打开和查看多个源文件,并且希望在不牺牲其他窗格的情况下获得更多空间,那么从 RStudio 1.4 开始,您可以通过简单地添加源列来实现这一点。你可以通过全局选项>窗格布局,然后选择新的“添加列”选项。这将在现有窗格的左侧创建一个全新的源窗格。如果你愿意,你甚至可以添加更多。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第142张

在这里,我在左侧添加了一个额外的源列

这些只是我充分利用的 R 的最新发展。如果你有其他人可以随意添加到评论中,这样其他读者也可以受益。

最初我是一名纯粹的数学家,后来我成为了一名心理计量学家和数据科学家。我热衷于将所有这些学科的严谨性应用到复杂的人的问题上。我也是一个编码极客和日本 RPG 的超级粉丝。在LinkedInTwitter上找我。也可以看看我在 drkeithmcnulty.com上的博客 或者我即将发布的 关于人物分析的教科书

原文:https://towardsdatascience.com/ten-random-but-useful-things-to-know-about-ggplot2-197dc4439d10?source=collection_archive---------17-----------------------

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第143张

本文中的所有图片都是作者生成的

上周,我在ggplot2中做了一些图表,向一些分析师同事说明一些事情。这些图表立即引起了共鸣,并完全符合我的目的。不久之后,我收到了分析师发来的一条信息——“我如何在 Excel 中做到这一点?”。

我解释说,他们不太可能在 Excel 中创建这个图表——不是以任何直接的方式——我将此作为鼓励分析师调查和学习数据科学语言的机会。对我来说,像ggplot2这样的软件包是学习编程的最有说服力的理由之一。在几行简单的代码中,你可以创建几乎任何统计现象的惊人的、定制的图形。您可以将它们设计得非常漂亮,您可以将它们集成到任何文档中,并且您可以共享代码,以便其他人可以轻松、即时地复制它们。

也就是说,ggplot2有一个特殊的语法,需要一些时间来适应,所以它不是可以立即掌握的东西。对ggplot2变得自信需要实践、尝试和错误,但是一旦你到了那里,统计图表的世界就是你的了。

我想用这篇文章来展示我在ggplot2中经常做的一些事情。我希望它有助于鼓励你更多地使用这个包,你甚至可以学到一些你不知道的技巧。

ggplot2图表是通过审美传承来发挥作用的。美学实际上是图形和数据之间的映射。您使用美学来告诉ggplot2哪些数据元素用于图表的哪些特性。例如,要为mtcars数据集创建一个显示mpgwt的简单散点图,并根据cyl为点着色,您需要将三个美学传递给ggplot():

library(ggplot2)g1 <- ggplot(data = mtcars, 
             aes(x = wt, y = mpg, color = as.factor(cyl))) +
  geom_point()

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第144张

你在第一个ggplot()语句中加入的任何美学将会传递给所有后续的图形命令,除非你特别指出。因此,如果我们想为每个cyl组分别绘制拟合线,我们只需添加geom_smooth():

g1 + geom_smooth()

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第145张

也许你不想这样,只是想要一个适合整个样本的线?然后,只需从原始ggplot()语句中取出您不希望继承的美学元素,并将其放入您希望使用它们的特定 geom 函数中:

g2 <- ggplot(data = mtcars, aes(x = wt, y = mpg)) +
  geom_point(aes(color = as.factor(cyl)))

这将创建一个相同的散点图,但现在当您添加geom_smooth()时,颜色分组将不再被继承,一个更一般的拟合将被绘制:

g2 + geom_smooth()

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第146张

geom_function()ggplot2的一个相对较新的补充,允许你对你定义的任何函数进行模拟绘图。这可以是一个内置的通用统计函数:

ggplot() +
  xlim(-5, 5) +
  geom_function(fun = dnorm)

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第147张

或者它可以是用户定义的函数。例如,一个有趣的函数是 sin(1/x ),很久以前,我在本科数学项目的一次面试中被要求画出这个函数。您可以使用n参数来指定要模拟多少个点——在本例中,我将使用 100,000 个点:

ggplot() +
  xlim(-1, 1) +
  geom_function(fun = function(x) sin(1/x), n = 1e5)

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第148张

当绘制分布图时,最好同时看到直方图和密度曲线。您可能想通过简单地添加geom_histogram()然后添加geom_density()来做到这一点,但问题是默认情况下geom_histogram()使用计数而不是密度。因此,将密度定义为 y 美学非常重要,这样两种几何图形才能很好地协同工作。还要注意使用像fillalpha这样的图形元素来定制颜色和不透明度。

# get some data on sat scores for 100 students
sat_data <- read.csv("[https://www.openintro.org/data/csv/satgpa.csv](https://www.openintro.org/data/csv/satgpa.csv)")g3 <- ggplot(data = sat_data, aes(x = sat_sum, y = ..density..)) +
  geom_histogram(fill = "lightblue") +
  geom_density(fill = "pink", alpha = 0.4)

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第149张

有时,您可能希望通过叠加一个没有继承先前图形美感的图形来说明一个理论模型或比较模型。这就是论点inherit.aes真正有用的地方。默认情况下,大多数 geom 函数都将该参数设为TRUE,但是将其设为FALSE可以让您在图表上覆盖一些不相关的内容。例如,假设我想要叠加一个理论上的完美正态分布:

sat_mean <- mean(sat_data$sat_sum)
sat_sd <- sd(sat_data$sat_sum)g3 +
  geom_function(
    fun = function(x) dnorm(x, mean = sat_mean, sd = sat_sd), 
    linetype = "dashed",
    inherit.aes = FALSE
  )

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第150张

在我看来,geom_ribbon()gglot2中使用最少的 geoms 之一。你可能已经在使用中见过它,因为它是geom_smooth()中阴影置信区间背后的引擎,但是我在很多情况下都使用过它。假设我们建立了一个模型,根据之前数据集中的高中 GPA 预测 SAT。我们可以使用geom_smooth()来很好地显示均值的置信区间,但是我们可以在其上叠加geom_ribbon()来很好地显示一个更宽的预测区间。

model <- lm(sat_sum ~ hs_gpa, data = sat_data)
predictions <- predict(model, data.frame(hs_gpa = sat_data$hs_gpa), 
                       interval = "prediction")ggplot(data = sat_data, aes(x = hs_gpa)) +
  geom_point(aes(y = sat_sum), color = "lightblue") +
  geom_smooth(aes(y = sat_sum), color = "red") +
  geom_ribbon(aes(ymin = predictions[,'lwr'], 
                  ymax = predictions[,'upr']), 
                  fill = "pink",
                  alpha = 0.3)

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第151张

许多数据由于其固有的规模而被“聚集”。例如,在上面的图表中,你可以看到hs_gpa似乎有点结块,迫使散点图变成线条。这可能导致数据点隐藏在其他数据点后面,并且可能意味着您的样本大小看起来比散点图中的要小。geom_jitter()是一个非常有用的便利功能,它可以对你的点进行随机抖动,以帮助解决这个问题。只需将geom_point()替换为geom_jitter(),并尝试使用width参数来获得您想要的抖动量:

g4 <- ggplot(data = sat_data, aes(x = hs_gpa)) +
  geom_jitter(aes(y = sat_sum), color = "lightblue", width = 0.05) +
  geom_smooth(aes(y = sat_sum), color = "red") +
  geom_ribbon(aes(ymin = predictions[,'lwr'], 
                  ymax = predictions[,'upr']), 
                  fill = "pink",
                  alpha = 0.3)

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第152张

geom_text()允许您向图表添加有用的文本,以帮助理解。假设我们想要用相似颜色的文本在 x-y 刻度上的适当点标注预测间隔:

g5 <- g4 +
  geom_text(x = 4.3, y = 100, 
            label = "Prediction 
Interval", 
            color = "pink")

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第153张

内置主题对于在一个简单的命令中改变图表的外观非常有用。我喜欢干净漂亮的外观,所以我是theme_minimal()的忠实用户。结合漂亮的标签,这可以很快让你得到你想要的外观。这里有一个例子:

g5 + 
  theme_minimal() +
  labs(x = "High School GPA", 
       y = "SAT",
       title = "Relationship between GPA and SAT")

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第154张

除了ggplot2的内置主题,您还可以尝试ggthemes包中的主题,其中包括一些流行数据出版物的主题:

library(ggthemes)g6 <- g5 + 
  theme_economist_white() +
  labs(x = "High School GPA", 
       y = "SAT",
       title = "Relationship between GPA and SAT")

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第155张

当您为高风险的演示文稿设计样式,并且想要了解轴、文本、记号等复杂细节时,您可以编辑元素以获得正确的细节。比方说,我想在上面的图表中使用粗体轴标题和更大的标题字体。

g6 +
  theme(axis.title = element_text(face = "bold"),
        plot.title = element_text(size = 20))

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第156张

如果你已经创建了多个 ggplots,你想以某种方式组合它们,我发现patchwork包是一个非常简单的方法,比gridExtra::grid.arrange()更直观。要使用它,你必须在 R Markdown 中工作,但一旦你编织了你的文档,你可以随时将拼凑的图像保存为一个单独的文件。假设我想将上面的图像g4g5g6g4g5并排修补在第一行,而g6横跨第二行,我可以在 R Markdown 文档中使用 patchwork 来完成此操作,如下所示:

library(patchwork)(g4 | g5) / 
  g6

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第157张

显然,这十条建议并不全面,但我希望它们能说明我喜欢在ggplot2工作的一些原因,并激励你尝试一些新事物,更好地了解这个包。

最初我是一名纯粹的数学家,后来我成为了一名心理计量学家和数据科学家。我热衷于将所有这些学科的严谨性应用到复杂的人的问题上。我也是一个编码极客和日本 RPG 的超级粉丝。在LinkedInTwitter上找我。也可以看看我关于drkeithmcnulty.com的博客或者我即将发布的 关于人的分析的教科书

原文:https://towardsdatascience.com/tensorboard-in-5-minutes-71c5715a10d3?source=collection_archive---------10-----------------------

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第158张

TensorBoard(图片由作者提供)

机器学习是复杂的。有数不清的选项可供选择,也有很多要跟踪。幸运的是,有 TensorBoard,这使得过程很容易。

在开发机器学习模型时,有许多因素:多少个时期用于训练,损失度量,甚至模型结构。这些决策中的每一个都可以传播,并在无效模型和成功模型之间产生差异。

本文将讨论 TensorBoard 中的一些功能,以及如何为您的下一个机器学习项目设置 TensorBoard。特别是,重点将放在与 TensorFlow 和基于 Keras 的模型一起使用 TensorBoard。

要确定模型的最佳配置,您需要进行实验。任何数据科学家都知道,你需要有效地跟踪和评估这些实验。

幸运的是,TensorBoard 有许多内置功能,您可以利用这些功能快速了解模型中正在发生的事情。

设置 TensorBoard 是一个简单的过程。只需几行代码,您就可以从您的机器学习模型中跟踪关键指标。

第一步是将扩展加载到您的笔记本中。

加载 TensorBoard 扩展(代码由作者编写)

接下来,您需要一些数据。这里我使用的是 TensorFlow 内置的 MNIST 数据集。数据被整形以允许使用 2D 卷积层。

从 TensorFlow 加载 MNIST 数据集(代码由作者编写)

准备好数据后,您需要构建您的模型。在这里,我做得有点过火,对每个变量都进行了参数化。

这种选择是为了在没有太多问题的情况下快速更改模型的不同方面。这种结构也避免了不清楚值在变化的情况。

结构简单。但是这个基本结构显示了各种不同的层,你可以在 TensorBoard 中进行分析。该模型包含一个 2D 卷积层,随后是汇集层、分离层、输出展平层和密集层。

学习率也有调整。与设置固定的学习速率相反,调度器使学习速率变得灵活并有助于收敛。

模型创建和参数定义(由作者编写代码)

要将 TensorBoard 功能添加到您现有的基于 Keras 的 TensorBoard 模型中,您需要在培训的模型拟合阶段添加一个回调。

应该启用直方图计算来有效地跟踪进度,这是通过将 historgram_freq 参数设置为 1 来实现的。

回调函数需要一个日志目录来存储训练模型的结果。因此,在您的日志中包含一些结构化排序以供将来参考是有益的。这里使用的是当前时间。

编译和拟合模型,设置 TensorBoard 回调(代码由作者编写)

一旦模型被创建、编译和拟合,日志就应该被打包。在训练中你的模型的所有细节。准备好让你分析了。

要在 TensorBoard 中查看训练过程结果,剩下的工作就是运行扩展。

运行 TensorBoard(由作者编写代码)

TensorBoard 被分解成几个部分。这些组件允许您跟踪不同的指标,如准确性、均方根误差或对数损失。它们还允许将模型可视化为图形等等。

在这篇文章中,我将展示标量、图形、分布、直方图和时间序列标签。但是在非活动下拉列表中可以找到其他可用视图的列表。

TensorBoard 也有一些造型选项。我在这里的一些图片中使用了黑暗模式。

标量是打开 TensorBoard 时看到的第一个标签。这里的重点是模型在多个时期的性能。

这里显示了模型的损失函数和您跟踪的任何指标。

该选项卡的一个重要功能是平滑功能。当处理多个时代或一个不稳定的模型时,整体趋势可能会丢失。因此,你要确保你的模型在训练中不断进步,而不是停滞不前。

通过增加平滑度,您可以在训练过程中查看模型的总体趋势。

标量选项卡对于识别模型何时过度拟合至关重要。例如,当您的训练指标不断提高,但验证图没有增加时,您可能对验证集过度拟合。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第159张

张量板标量选项卡(图片由作者提供)

graphs 选项卡允许您查看您创建的模型的结构。本质上,它展示了幕后发生的事情。

当您需要与他人共享图形结构时,这些细节很有帮助。此外,还可以上传或下载图表。

除了基本模型结构,该图还揭示了如何使用不同的指标和优化器。

在这里,我选择了图中的顺序节点。一旦选中,模型的结构就会显示出来。细节可以在下图的红框中看到。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第160张

TensorBoard Graphs 选项卡(图片由作者提供)

分布和直方图选项卡非常相似。但是,它们允许您通过不同的可视化方式查看相同的信息。

“分布”选项卡为您提供了模型权重随时间变化的良好概览。这个视角作为一个初始的标尺,用来判断是否有什么地方出了问题。

直方图视图对您的模型学习到的确切值进行了更详细的细分。

这两种可视化用于确定模型何时过度依赖一小组权重。或者权重是否在许多时期内收敛。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第161张

TensorBoard 分布选项卡(图片由作者提供)

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第162张

TensorBoard 直方图选项卡(图片由作者提供)

TensorBoard 中显示的最后一个选项卡是时间序列选项卡。

这个视图非常类似于标量视图。然而,一个区别是您的目标度量的观察值是针对训练的每次迭代,而不是每个时期。

以这种方式观察模型训练要细致得多。这种类型的分析最好是在模型没有收敛,并且跨时代的进展没有揭示任何答案的时候。

步态分析上曲线怎么解读TowardsDataScience 博客中文翻译 2021(六百三十二)_https://www.jmylbn.com_新闻资讯_第163张

TensorBoard 时间序列选项卡(图片由作者提供)

TensorBoard 是一个强大的工具。通过几个不同的组件和视图,你可以快速分析你的机器学习和深度学习模型。

该工具易于设置,并为如何更好地训练模型提供了宝贵的见解。

这里我只展示了 TensorBoard 的一个例子。您可以随意复制代码并亲自探索这个工具。

如果你有兴趣阅读关于新颖的数据科学工具和理解机器学习算法的文章,可以考虑在 medium 上关注我。我总是在我的文章中包含代码,您可以将其应用到您的工作中!

如果你对我的写作感兴趣,并想直接支持我,请通过以下链接订阅。这个链接确保我会收到你的会员费的一部分。

https://zjwarnes.medium.com/membership