TowardsDataScience 博客中文翻译 2022(四十一)

原文:TowardsDataScience

协议:CC BY-NC-SA 4.0

PyTorch 图像检索简介

原文:https://towardsdatascience.com/a-hands-on-introduction-to-image-retrieval-in-deep-learning-with-pytorch-651cd6dba61e

用 PyTorch 的完整代码简单而彻底地介绍了图像检索的世界

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

马库斯·温克勒在 Unsplash 上的照片

随着电子商务和在线网站的出现,图像检索应用一直在我们的日常生活中不断增加。亚马逊、阿里巴巴、Myntra 等。一直在大量利用图像检索,根据我们刚才看到的内容,提出他们认为最合适的产品。当然,只有当通常的信息检索技术失效时,图像检索才会被调用。例如,尽管基于元数据的方法会失败,但我们的人眼会很容易地将右边的所有衬衫聚集在一起作为相似的。

文章底部列出了不同的资源。

一点背景

图像检索的基本本质是根据查询图像的特征从集合或数据库中找出一幅图像的问题。大多数时候,这种特征是图像之间简单的视觉相似性。在一个复杂的问题中,特征可以是两个图像的风格相似性,甚至是互补的性质。由于原始形式的图像在其基于像素的数据中不反映这些特征,我们需要将该像素数据转换到潜在空间中,在该空间中图像的表示将反映这些特征。

一般来说,任何两个相似的图像在潜在空间中会彼此靠得更近,而不同的图像会离得更远。这是我们用来训练模型的基本管理规则。一旦我们这样做了,检索部分简单地搜索潜在空间,以在给定查询图像的表示的潜在空间中挑选最接近的图像。大多数时候,它是在最近邻搜索的帮助下完成的。

因此,我们可以将我们的方法分为两部分:

  1. 图像表示
  2. 搜索

我们将在牛津 102 朵花数据集上整体解决这两个部分。你可以在这里下载并阅读数据集。

形象再现

我们将使用一种叫做连体模型(来自连体双胞胎)的东西,它本身并不是一个全新的模型,而是一种训练我们模型的新技术。大多数情况下,这与所谓的三重态损失一起使用。这个想法的基本组成部分是三胞胎。

现在,三胞胎到底是什么?三元组是 3 个独立的数据样本,假设 A(锚)、B(正)和 C(负);其中 A 和 B 相似或具有相似的特征(可能是同一个类),而 C 与 A 和 B 都不相似。这 3 个样本一起形成训练数据的一个单元——三元组。

:任何图像检索任务的 90%都体现在连体网络、三元组丢失和生成真三元组上。如果你成功地完成了这些,整个努力的成功或多或少是有保证的。

首先,我们将创建管道的这个组件——数据。下面我们将在 PyTorch 中创建一个自定义数据集和数据加载器,它从数据集生成三个一组的图像。

现在我们有了数据,让我们继续到暹罗网络。暹罗网络本身是一个单一模型,我们将其应用于一对或三个输入。它给人一种 2 或 3 个模型的明显印象,但中心思想是所有这些模型必须共享权重,即只有一个模型。

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

暹罗网络。这里的 ConvNet 实际上是一个单一的模型。

如前所述,维系整个架构的关键是三重态损耗。三重损失创建了一个目标函数,该目标函数强制相似输入对(锚定&正)之间的距离比相异输入对(锚定&负)之间的距离小某个定义的余量。下面我们将看看三重损失以及培训管道。

到目前为止,我们的模型已经被训练成将图像转换到嵌入空间,该嵌入空间反映了我们想要实现的相似感。接下来,我们进入搜索部分。

搜索

我们可以很容易地使用 Scikit-Learn 提供的最近邻搜索。我们将探索新的更好的东西,而不是走那条简单的路线。

我们将使用脸书研究公司的 Faiss。这比最近邻法要快得多,如果我们有大量的图像,这种速度上的差异会变得更加突出。

下面我们将演示如何在给定一个查询图像的情况下,在存储的图像表示中搜索最接近的图像。

这涵盖了基于现代深度学习的图像检索,而不会使它变得太复杂。大多数检索问题都可以用这个基本管道来解决。根据问题陈述的创新主要在于根据需要修改的基础模型。

资源

  1. 包含本文所有代码的样板笔记本可以在这里找到:https://www . ka ggle . com/mayukh 18/Oxford-flowers-image-retrieval-py torch
  2. 这里列出了图像检索界流行的基准数据集:https://paperswithcode.com/task/image-retrieval

一个隐藏的小宝石,可以拯救你的生命

原文:https://towardsdatascience.com/a-hidden-little-gem-that-can-save-your-power-bi-life-f73f9e8c75af

改变隐藏在表格模型中的属性的默认值可以让你成为一个真正的 BI 英雄

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

pix abay 在 Pexels 上拍摄的照片

有时候,事情的发生是有原因的。

几周前,我参加了本尼·德·贾格尔在 Data Grillen 举办的关于 Power BI 性能调整的会议。这是一次很棒的会议,本尼分享的技巧之一与表格模型中的 IsAvailableInMDX 属性有关。我记得有时在某个地方听说过它,但老实说很少有机会在现实世界中应用它。但是,正如我一开始所说的,事情的发生是有原因的…

上周,我在为一个客户优化 Power BI 解决方案。我确保将所有的王牌都拿出来,以使数据模型更加高效— 删除了不必要的数据尽可能地减少基数,调整列数据类型,并应用了一些额外的推荐实践…然后,我想起了本尼的提示,决定试一试,看看如果禁用 IsAvailableInMDX 属性会发生什么…

但是,让我们从解释什么是 IsAvailableInMDX 属性开始…

如果你去微软文档,你可能会失望,因为这里有一个模糊的财产定义。然而, Chris Webb 不久前写了一篇很棒的博文(许多博文中的一篇),解释了这种房产及其运作方式。如果您出于某种原因不想阅读 Chris 的原始帖子(尽管我鼓励您阅读它),简单地说,IsAvailableInMDX 属性值(TRUE 或 FALSE) 决定了是否构建列上的属性层次结构

现在,公平的问题应该是:

什么是属性层次结构?

[Date].[Fiscal Year].&[2022]
,[Product].[Category].[Bikes]
,[Sales Territory].[Sales Territory Group].&[Europe]
,[Measures].[Internet Sales Amount]

所有认识老好人 MDX 的人请举手!用于查询 SSAS 多维模型的语言…正如您可能(也可能没有)看到的,每一列都属于特定的层次结构:财政年度属于日期层次结构,自行车是类别层次结构的一部分,其中父级别是产品…此外,度量也是层次结构的一部分!理解这一点很重要,你很快就会发现。这些都是用户定义的层次结构。

然而,SSAS 多维还创建了属性层次,其中每个常规属性都成为 2 级层次的一部分,以“全部”作为顶级:

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

作者插图

属性层次结构的主要特征是,作为层次结构一部分的列既可以用作 MDX 查询中的行,也可以用作列。好了,现在你(希望)知道什么是属性层次结构,但是…嘿,Nikola,我们在这里谈论的是 Power BI,表格模型…SSAS 多维是一项传统技术,对吗?我们可以争论这个问题,但这显然超出了本文的范围:)

然而,这仍然是一个有效的问题:

MDX 和 Power BI 到底有什么共同点?!

测验问题:Excel 在连接到 Analysis Services 表格 模型时使用哪种语言(在表格上用粗体和斜体表示)?我来帮你一点:这不是达克斯…

是的,Excel 在连接到表格模型时会生成 MDX 查询!这给我们带来了一个关键的收获:由于 Excel 依赖于 MDX,它也依赖于多维模型中的数据结构。这意味着除非将 IsAvailableInMDX 属性显式设置为 FALSE,否则属性层次结构将成为数据模型的一部分。

现在,下一个问题是:为什么这个属性没有默认设置为 FALSE?在许多实际情况下,Excel 是许多数据分析师的首选工具。他们应该能够连接到 Power BI 后面的 Analysis Services 表格式模型(不要忘记, Power BI 将数据存储在 Analysis Services 表格式的实例中),因此如果该属性在默认情况下被禁用,他们应该不能执行他们的分析。

更有意思的是,大部分 Power BI 开发者根本没有意识到这个属性!他们为什么要这么做?它不能从 Power BI 桌面访问,在 Power BI 桌面上根本看不到属性层次结构,而在 Power BI 本身中,您不会注意到视觉效果中显示的数字有任何差异。那么,既然 Power BI 中的一切都完美地工作,而您的 Excel 分析师也乐于使用 Power BI 数据集的数据创建他们的数据透视表,为什么还要为此烦恼呢?

现在,我们来了解一下这个问题……这个问题帮助我对客户的 Power BI 解决方案做出了惊人的改进。

在显示存储在表格模型中的数据时,我不会浪费时间来演示 Excel 和 Power BI 之间的区别(同样,去阅读 Chris Webb 的博客文章,在那里一切都有解释),而是专注于启用或禁用该属性时数据模型性能的差异。

数据模型起点

在本文中,出于演示的目的,我将使用一个 Contoso 示例数据库,该版本在事实表中包含 1 亿条记录(承蒙 SQLBI.com 的帮助,您可以在这里下载和定制不同版本的 Contoso 数据库。它在麻省理工学院许可下可用)。

因此,让我们将数据导入 Power BI,并检查数据模型背后的数字。像往常一样,我将在 DAX Studio 中使用 VertiPaq 分析器工具:

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

作者图片

如您所见,我的数据集的总大小几乎是 6.3 GBs!现在,如果您决定使用 IsAvailableInMDX 属性,有两种可能的选择:

  • 将数据模型中所有列的的属性值设置为 FALSE 这意味着根本没有 Excel 分析。因此,这里的主要问题是:您想完全限制从 Excel 连接到数据模型吗?
  • 将数据模型中某些列的属性值设置为 FALSE 即非属性列,如事实(度量)和键。这仍将启用 Excel 连接,但禁用的列将不能作为层次结构的一部分

我将向您展示这两个选项对数据模型大小和处理时间的影响。

将所有列的 IsAvailableInMDX 设置为 FALSE

让我们从整体方法开始,禁用数据模型中所有列的属性层次结构。因此,我们将测量两个指标:数据模型大小和完整的数据处理持续时间。我们最初的基准是 6.27 GBs143 秒。显然,数据处理的持续时间取决于多个不同的方面,但是我将尝试在我的(相当强大的)本地机器上隔离这一点。

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

作者图片

当然,您可以手动更改每一列的属性值,但是这将花费很长时间,尤其是在大型模型中。因此,下面是一个简单的脚本,您可以从表格编辑器的高级编辑器窗口中执行该脚本,它会将数据模型中所有列的 IsAvailableInMDX 属性设置为 FALSE:

foreach(var column in Model.AllColumns)
    column.IsAvailableInMDX = false;

一旦我将更改保存回我的模型,让我们刷新数据集并检查是否有更改:

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

作者图片

哦,哇哦!仅仅通过改变一个“隐藏”财产的价值就可以节省 15%。在数据处理方面,时间缩短到了 118 秒,比以前快了 25 秒。

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

作者图片

**备注:**在实际案例中,事实表有大约 5 亿行,以及更多的维度(其中一些包含 200 万到 300 万条记录),因此性能提升更加显著。

这很好,但是客户的要求是让 Excel 用户满意,并使他们能够继续使用他们最喜欢的工具。

因此,让我们将 IsAvailableInMDX 属性设置为 FALSE,仅用于事实(用于创建度量的列)和键列(根据推荐的实践,无论如何都应该对最终用户隐藏)。

处理“某些”列的 IsAvailableInMDX 属性的两种方法

现在,是讨论另一点的时候了,当您只想禁用 MDX 查询的某些列时,这一点很有用。有两种可能的方法来处理 IsAvailableInMDX 属性,我将向您展示这两种方法。让我们从一个简单的开始,但是需要大量手工操作的。

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

作者图片

另一个更方便的,我敢说也是推荐的方法来实现完全相同的结果,就是利用表格编辑器中的最佳实践分析器扩展来为您完成繁琐的工作! Best Practice Analyzer 是 Michael Kowalsky 创造的神奇工具,它可以极大地帮助你优化你的数据模型。简而言之,它扫描整个数据模型,并根据结果列出所有未遵循的规则。然后,您可以决定是自己应用推荐的实践,还是让 Best Practice Analyzer 为您做这件事。

现在,在这个特定的场景中有一个小问题:BPA 有一个规则,只为隐藏列或表被隐藏的列将 IsAvailableInMDX 属性设置为 FALSE,如 Michael Kovalsky 的文章中所解释的:

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

作者图片

简而言之,如果您没有按照建议的做法首先隐藏非属性列(事实表列和键),那么将 IsAvailableInMDX 属性设置为 FALSE 的规则将不起作用。这就是迈克尔在他的文章中所说的“规则协同”…

无论如何,让我们对 MDX 查询禁用非属性列的基准进行最后一次检查:

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

作者图片

这一更改增加了 100 MBs 的整体数据模型大小,但我们仍然比起点低 750 MBs!而且,不要忘记,在这种情况下,这是一个双赢的局面——我们减少了数据模型的大小,同时让我们的 Excel 用户满意。处理时间略微增加到 124 秒,因此下面是第二个用例之后的概述:

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

作者图片

结论

Power BI(和表格模型)充满了隐藏的宝石。有时候,这些宝石真的很难找到(或者很难理解它们可能的影响),但是一旦你设法做到了,你就可以对你的 Power BI 解决方案做出重大改进。

正如您所看到的,通过简单地更改深深隐藏在表格模型中的属性的默认值,我能够提高 Power BI 解决方案的效率,而不牺牲整体用户体验和核心功能(即,使用 Excel 查询 Power BI 数据集)。

感谢本尼的提示,感谢克里斯精彩的博文。

感谢阅读!

成为会员,阅读 Medium 上的每一个故事!

备受期待的时间序列交叉验证器终于来了

原文:https://towardsdatascience.com/a-highly-anticipated-time-series-cross-validator-is-finally-here-7dc99f672736

不均匀分布的时间序列数据不再是交叉验证的问题

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

Unsplash 上的Max bhme拍摄的照片

交叉验证是训练机器学习模型的数据科学家经常使用的方法。探究使用交叉验证的原因超出了本文的范围,但是可以找到许多关于它的好文章,例如这篇文章

下面是用kfold=4进行简单交叉验证划分的图示。

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

[作者插图]

在时间序列问题中,我们不能使用这种标准的交叉验证划分。在大多数时间序列问题中,您希望训练数据在测试数据之前,否则,您将使用未来数据来预测过去。因此,为每次迭代划分训练和测试折叠的常用技术如下:

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

[作者插图]

Scikit-learn 的TimeSeriesSplit正在拆分数据,如上图所示。

你可能已经注意到,现在数据被分成了五份,而不是四份,尽管 kfold 仍然是四份。这是因为我们不能使用第一个折叠作为测试折叠,因为在它之前没有火车折叠。然而,这里出现了更多。训练数据的大小随着每次迭代而增加。这并不总是理想的,因为在时间序列问题中,您可能希望您的模型只学习根据最近的数据进行预测。因此,我们也可以选择创建这样的折叠:

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

[作者插图]

这接近于 sktime 的 T2 所做的。

到目前为止还不错,但是如果你的数据集不包含均匀分布的数据呢?

Scikit-learn 的TimeSeriesSplit 和 sktime 的SlidingWindowSplitter 都没有对此进行调整。你可能会像这样结束分裂:

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

[作者插图]

到目前为止,您必须编写自己的交叉验证器来解决时间序列问题中数据分布不均匀的问题,这不是一件小事。随着 Scikit-lego 发布GroupTimeSeriesSplit,我们终于可以利用开源代码来实现这一点了!

让我们通过一个例子来说明时间序列数据分布不均匀的问题以及GroupTimeSeriesSplit如何缓解这个问题:

狼的崛起

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

照片由雷·轩尼诗Unsplash 拍摄

狼在欧洲又开始抬头了。它正从东欧稳步蔓延到整个欧洲大陆。让我们考虑下面的假设情况:

1980 年,一个组织开始联系公园管理员,打电话问他们那天是否在公园里看到了狼。他们记录每年公布的数据。随着技术的进步,该组织开始使用更现代的技术来联系更多的公园管理员,从短信到 2010 年以来完全开发的应用程序。因此,他们收集的数据量会随着时间的推移而增加。此外,随着狼在欧洲的扩张,看到狼的机会也在增加。

这为我们提供了以下数据集:

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

[作者提供的图表]

这个数据集跨越了 40 年。从 1980 年到 2019 年。假设我们想使用 kfold 与k=4交叉验证来训练一个模型,该模型可以预测公园管理员是否会在特定的一天看到狼。现在,我们不能简单地把 40 年分成 8 年的 5 倍,因为那会导致这些倍:

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

当每列火车或测试装置有 8 年时折叠。[作者插图]

除此之外,每个折叠都有非常不同的大小,我们总是有一个比训练集大得多的测试集,这对于训练和测试模型来说几乎从来都不是首选的。计算如何在每个折叠中划分年份以获得尽可能相等大小的折叠可能需要我们检查所有选项(所谓的蛮力方法)。对于 40 年和 5 个折叠(当kfold=4时是必要的)已经有 658.008 种不同的可能性来在折叠上划分年份,同时保持时间顺序。不同组合的金额可以用 *n 计算!/(n-r)!®!*其中 n =组数量(在本例中为唯一年份数量),而 r =折叠数量。

Scikit-Lego’ssGroupTimeSeriesSplit正在使用一个智能版本的*蛮力,*它可以避免检查所有可能的选项。在这种特殊情况下,GroupTimeSeriesSplit没有检查 658.008 个组合,而是只检查 20.349 个组合(减少了近 97%!)同时仍然得出与检查所有 658.008 个组合时相同的最佳答案。

下面你可以看到如何用 Scikit-learn 的GridSearchCV使用GroupTimeSeriesSplit进行网格搜索:

[作者要点]

GroupTimeSeriesSplit对褶皱的划分如下:

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

[图片由作者提供]

图形看起来是这样的:

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

使用 sklego 的 GroupTimeSeriesSplit 后折叠。[作者插图]

数据现在几乎是均匀分布的,或者说,实际上是尽可能均匀分布的,限制条件是在训练集和测试集中没有相同的年份。因此,我们现在终于可以在组大小不均匀的时间序列问题中使用滑动窗口了。

结论

Scitkit-learn 和 sktime 有很好的交叉验证器来解决时间序列问题。然而,当每单位时间的观察数量波动很大时,你可能会以非常不平衡的训练和测试折叠结束。随着 scikit-lego 发布GroupTimeSeriesSplit,我们现在有了一个针对这些情况的开箱即用的交叉验证器。

本文使用的数据和代码可以在这里找到。

点击这里查看我关于数据科学、机器学习和 Python 的其他文章,或者关注我以获得更多关于这些主题的文章!

人工智能数学家?DeepMind 的 AlphaTensor 的简化视图

原文:https://towardsdatascience.com/a-i-mathematician-a-simplified-look-at-deepminds-alphatensor-feeeac90c9f3

谷歌 DeepMind 的 AlphaTensor 是 AI 驱动的数学创新的开始。

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

图像来源

谷歌的 DeepMind 研究小组最近开发了“AlphaTensor”。第一个人工智能系统,用于发现执行矩阵乘法等基本任务的新算法。这一应用为 50 年来寻找两个矩阵相乘的最快方法的数学挑战带来了创新。我们来分解一下这个发现的意义。

什么是矩阵乘法?

我们大多数人第一次接触矩阵乘法是在初中或高中。它由一系列按预定义顺序的乘法和加法组成,用于计算两个 n 次张量的乘积。两个矩阵相乘最著名的机制是使用行和列的点积(图 1)。

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

图一。矩阵点积—(图片由作者提供)

在 K-12 教育之外,这种数学运算影响了现代计算,并且是数字系统的基石。几乎任何可以标记或编码成数字的多维表示的数据类型都需要一些矩阵乘法。图像处理和计算机视觉应用极大地受益于高效的矩阵运算。

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

图二。卷积神经网络运算— 来源

在卷积神经网络中(图 2),离散卷积相当于在滤波器权重和滤波器下的值之间取点积,简而言之,这是另一种矩阵乘法应用。

数百年来,数学家们认为标准点积是矩阵相乘的最佳和最有效的方法。直到 Colker Strassen 介绍了 Strassen 的算法(图 3),并通过证明存在更有效的算法而震惊了世界。Strassen 的算法比传统方法少用了一个标量乘法。

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

图 3。与 Strassen 算法相比的标准算法,Strassen 算法使用少一个标量乘法(7 而不是 8)来乘以 2x2 矩阵。对于整体效率来说,乘法比加法重要得多。(图片由作者提供)

尽管 Strassen 的算法包含更少的算术运算,但必须考虑到,对于当前一代的 CPU,乘法器可以在每个机器周期产生一个结果,但加法器也可以。乘法器需要更多的门和更长的等待时间来获得第一个结果,但它们在吞吐量方面的速度相同。乘法比加法具有更高的“大 O”复杂度(图 4)。总之,Strassen 效率更高,因为他少执行了一个乘法步骤。

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

图 4。数学运算的计算复杂度— 来源

AlphaTensor 进一步利用人工智能技术,通过自我游戏和强化学习进行优化,发现新的矩阵乘法算法。

什么是深度强化学习?

深度强化学习(Deep RL)利用深度神经网络的能力来优化特定问题的解决方案。我们采用代理人、环境和报酬的概念作为现实世界系统的模型,其目标是代理人在特定环境中最大化其报酬。

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

图 5。棋盘— 图片来源

假设您考虑国际象棋游戏(图 5),其中的目标是捕获对手的棋子并将死他们的国王。在这种情况下,棋盘上每一个可能的场景都有一套最佳的走法,可以最大化成功的几率。对于这种情况,RL 模式可以定义如下:

  • 代理人就是棋手。
  • 环境就是棋盘和所有的棋子。
  • 奖励框架:
    —靠近对方棋盘一侧加 2 分
    —俘获一个棋子加 5 分
    —俘获一个骑士或主教加 10 分
    —俘获一个女王加 50 分
    —失去任何棋子减 10 分
    —失去你的女王减 50 分

我们会对每一步给予适当的奖励,直到任何一个玩家被对弈或者出现和棋(图 6)。这个过程将反复执行,直到我们的模型分数始终高到足以满足我们的需求。

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

图 6。强化学习培训周期—来自 Microsoft Powerpoint 2022 的个别图片(图片由作者提供)

AlphaTensor 做了一些非常类似的事情,以发现数学运算的最佳组合,从而以一种新颖有效的方式执行矩阵乘法。

AlphaTensor 如何实现算法发现的自动化?

利用自我游戏的概念,DeepMind 的团队建立了他们的强化学习模式,用于优化矩阵乘法问题。

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

图像来源

正如他们在的论文中所描述的,他们的模式看起来像这样:

  • AlphaTensor 代理在不了解现有矩阵乘法算法的情况下启动,并负责编译一组操作,以最小化矩阵乘法的正确值与其结果之间的误差。
  • 环境是被操作的矩阵的实际定义。在这种情况下,DeepMind 使用 3D 张量。
  • 奖励被定义为新算法结果中的误差测量值和使张量归零所采取的步骤数的组合(处理所涉及的矩阵的所有分量)。

这种模式产生了一个搜索空间,其中可能的算法大大超过了宇宙中的原子。作为参考,DeepMind 多年前解决的围棋(图 7)游戏中每一步可能的走法比 AlphaTensor 遇到的复杂度少 30 个数量级。

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

图 7。围棋棋盘游戏— 图片来源

为了增加这一努力的可行性,AlphaTensor 采用了“一种新的神经网络架构,它结合了特定问题的归纳偏差、生成有用合成数据的程序以及利用问题对称性的方法。”

随着时间的推移,DeepMind 团队观察到 AlphaTensor 重新发现 Strassen 等可行算法的能力有所提高,并最终超过人类定义的方法,以比任何探索都更快的速度支持算法。

在使用 Strassen 算法和 AlphaTensor 对 5x5 和 5x5(图 8)矩阵进行乘法运算的测试中,我们发现 AlphaTensor 可以在 76 次乘法中完成运算,而 Strassen 的乘法是 80 次!

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

图 8。5x5 矩阵乘法示例(图片由作者提供)

为什么这是一件大事?

AlphaTensor 帮助揭示了矩阵乘法算法的丰富性。这些知识无疑将塑造多维数据处理速度和效率的未来。

AlphaTensor 还证明了机器学习技术可以用来发现超越人类创造力的数学创新。这种深度强化学习的味道还处于早期,AlphaTensor 的工作更多地是作为可行性的证明,而不是立即的解决方案。这是计算优化和自优化 AGI 向前迈出的激动人心的一步。

DeepMind 的 GitHub 包括 AlphaTensor 发现的一些算法和一个 jupyter 笔记本,上面有加载和测试这些算法的说明。我在下面的源代码中链接了它。

别忘了关注 我的简介更多文章 这样!

来源:

人工智能和动物交谈

原文:https://towardsdatascience.com/a-i-talks-with-animals-3f0a266acc79

机器学习算法能窃听动物语言吗?

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

像这些在乌干达的黑猩猩,可以学习理解人类的语言,就像理解人类的 2-year-old⁹.一样照片美国国际开发署非洲局拍摄

被圈养的黑猩猩理解英语的能力和一个 2 岁的人类一样,并且使用人类手语 languages⁵.海豚共同协调他们的行动,打开集装箱⁴和履行新的 tricks⁹.一只鹦鹉能可靠地报告⁰.物品的数量或颜色土拨鼠发出警报,一个穿着白色衣服的高大人类正在快速靠近!

动物会使用语言吗?如果是这样,我们能用人工智能和他们交流吗?

人类语言

人类使用语言交流。动物也可以通过视觉和语言交流各种话题,从哪里可以找到食物,到交配的欲望,或者危险的警告。

但是人类语言不仅仅是交流。人类语言有效地组合了一系列独立的、几乎任意的声音单位,每个单位都有各自固定的含义,共同传达新奇的信息。语言可以描述当下、遥远的时间或空间,甚至是假设的事物,而复杂的规则支配着我们组合这些单位的方式。单词分为几类:名词、动词、介词。一些类别,比如动词,需要其他词来充当从属的语义角色:动词 give 需要几个参数:给予者、给予物和接受者。你不能说**莎拉给了约翰*,否则听者会问“莎拉给了什么

但也许人类语言最与众不同的方面是它使用递归结构来编码意义。在"看见了开爆了轮胎的卡车的男人的女孩已经走了"中,每个" that "引入一个有助于整个句子的意思的递归子句。

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

人类语言使用递归来表达意思。在这里,“女孩”、“男人”和“卡车”都是由嵌套的、递归的从属从句修饰的。作者图解。

人工智能讲座涵盖了人类试图教会人工系统使用语言进行交流的内容。理解人类语言和动物交流系统之间的微妙差异和惊人的相似之处,可以帮助我们专注于人工语言系统到底需要完成什么。

动物交流

乍一看,与人类语言相比,大多数动物的交流似乎过于简单,但实际上,各种动物几乎具备了语言的所有特性!

许多动物都有一套带有固定含义的离散发声法。举个例子,

  • 一只地位较低的恒河猴在面对社会群体中地位较高的成员时会发出“嘈杂的尖叫声”,而地位较高的成员会发出“拱形尖叫声”——一种独立的截然不同的声音。
  • 许多鸣禽会发出高音调的纯音“seet”叫声,警告捕食者正在靠近,还会发出另一种更刺耳的“mobbing”叫声,召集附近的鸟类向捕食者聚拢。

动物可以交流非即时发生的事件。蜜蜂跳舞是为了告诉蜂巢的其他成员在远处哪里可以找到食物。草原土拨鼠的报警声已经被证明是对人类正在靠近的信息进行编码,这个人在过去的某个时候开过枪。当被要求一起表演一个新奇的戏法时,被训练的海豚会发出不同的指令“表演一个新奇的杂技戏法”和“和另一只海豚表演一个戏法”,以某种方式协调它们未来的动作来表演 so⁹!

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

恒河猴、鸣禽(如这只黄知更鸟)、蜜蜂、草原犬鼠和海豚在交流中都表现出人类语言的一些特征。图片鸣谢:左上恒河猴作者:蒂莫西·贡萨尔维斯右上 ) 黄知更鸟作者:JJ·哈里逊左下 ) 蜜蜂作者:马切伊泽夫斯基,中下 ) 草原土拨鼠作者:

动物产生的某些信号的物理形式肯定会影响这些信号的含义。例如,鸣禽的警告“seet”可能是高且纯音的,因为更难定位高音调声音的来源。但是动物用来交流的许多信号都有任意的含义。Con Slobodchikoff 已经证明,土拨鼠通过以特定但任意的方式调制它们短促的鸣叫报警声的频率来编码大量的信息。

一些动物,如斯洛博奇科夫的草原土拨鼠,似乎能够富有成效地描述新颖的想法。在一次实验中,Slobodchikoff 使用晾衣绳滑轮系统将真人大小的胶合板剪切件发送到草原犬鼠群体的中间。一个剪影是郊狼的轮廓,而另一个是同样大小的抽象椭圆形。每一个侧影都引起草原土拨鼠不同的叫声。郊狼切口收到的叫声类似于土拨鼠对真正的郊狼发出的叫声,但作为对椭圆形的回应,土拨鼠发出了一种全新的叫声。同样,当一只名叫瓦肖的年轻圈养黑猩猩不知道她便盆椅的标志时,她有效地组合了一系列她知道的新颖标志: ⁵.

更深入到人类语言领域,黑猩猩和海豚已经被证明至少理解有限形式的语义论元结构。一只名为 Ally 的圈养黑猩猩理解介词短语,如“毯子上的牙刷”,它需要两个参数:一个项目和该项目的位置。在对他的理解能力的正式测试中,尽管极度活跃的黑猩猩个性经常导致他在完成任务前失去兴趣,但 Ally 在 60%的时间里都会将正确的项目放在正确的目标上😬。

在另一组实验中,研究人员还使用两种非常不同的命令结构,向两只圈养海豚 Ake 和 Phoenix 教授介词短语。阿克学会了一种基于手势的语言,而菲尼克斯则被给予口头命令;与此同时,就像不同的人类语言使用不同的词序一样,菲尼克斯被给予“objectA on objectB”形式的命令,而阿克的指令则是“objectA objectB on”。即使命令的形式不同,Ake 和 Phoenix 将物体放置在其他物体上的正确率都高于 time⁶—的 60%,远远高于随机猜测的 4%!

在人类语言所有被提出的属性中,唯一没有在动物交流系统中被最终证明的是递归结构。即使在这里,人们仍在争论一些鸣禽是否使用递归语法将不同含义的叫声结合在一起。

那么,由于与人类语言有许多相似之处,动物交流系统有资格成为成熟的语言吗?

动物语言?

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

人类和动物用时尚来表示许多东西,而不借助语言。作者和他的女儿穿着典型的服装。在其他事物中,人类的着装标志着年龄、性别、交配状态和社会阶层。作者照片。(一只孔雀灿烂的皇冠显示了他的性健康。图片Wilfredor 拍摄

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

人类和动物都使用非语言的交流系统来指挥交通。()作者照片。( ) 图片作者迪安·比勒

包括 Slobodchikoff 在内的一些科学家将动物交流称为“动物语言”,正是因为正如人类使用语言进行交流一样,动物的口头和手势信号是动物交流的方式。如果人类的语言是从我们遥远祖先的交流系统进化而来的,那么动物的交流难道不应该被视为语言吗?如果我们系统地将人类语言与动物交流分开,我们就有可能在我们崇高的人类和我们所在的自然世界之间设置一道屏障。毕竟,动物的交流系统在它们的环境中为它们服务,就像人类的语言在我们的环境中为我们服务一样。仅仅因为动物可能不会像我们一样交流,就把它们驱逐出语言俱乐部,这似乎非常不公平。

但是动物和人类都使用明显不是语言的交流系统。路标使用非任意符号传达信息,这些符号指示周围环境的各个方面,但很少能以任何可理解的方式组合。动物也不借助语言来标记领域和路径。人类和动物都用外表来表示年龄、性别和社会地位。但是我们的时尚宣言并不遵循自然语言的语法规则。

我们能和动物说话吗?

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

抹香鲸的大脑是所有动物中最大的,它们使用被称为尾音的短促咔哒声进行交流。加布里埃尔·巴拉蒂乌拍摄的照片。

然而,虽然目前没有压倒性的证据表明任何动物的交流系统表现出人类语言的所有特征,但这并不保证我们可能还没有发现这样的系统!这就是为什么我对目前的项目如此兴奋,这些项目使用人工智能和机器学习的技术来分析和破译地球上最聪明和最大大脑的非人类物种——鲸鱼的发声。

由伦敦帝国理工学院的迈克尔·布朗斯坦领导的 CETI 项目正在分析抹香鲸用于远距离交流的卡嗒声,而由野生海豚项目的研究主任丹尼斯·赫津和佐治亚理工学院的萨德·斯塔默领导的另一个小组正在分析 dolphins⁷.发出的声音这两个小组使用的技术都直接来自现代自然语言处理。具体来说,他们使用深度神经网络来建立动物发声的语言模型。

语言模型是一个计算系统,给定一个序列的前几个项目,预测接下来会发生什么。在过去几年中,大预算科技公司已经训练了巨大的神经网络来预测英语(或其他自然语言)句子的下一个单词。而 10 年前,最好的语言模型甚至不能生成一个连贯的句子;现在,像 GPT-3⁴这样的深度语言模型可以生成完整的段落,这些段落基本上是连在一起的。

要将深度语言模型应用于鲸鱼发声,必须克服许多挑战:如何找到鲸鱼对应的单词?如何扩大鲸鱼发声记录的数量?目前成功的深度学习算法是在比我们目前拥有的抹香鲸记录数量多几个数量级的数据上训练的。

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

CETI 的目标是收集抹香鲸尾音的语料库,其规模接近最近流行的深度语言模型,如 BERT 和 GPT-2,训练的语料库规模。虽然与用于建造 GPT 3 号的数据相比相形见绌,但 CETI 本身将使目前存在的最大的抹香鲸标本 DSWP 相形见绌。作者图片,灵感来自布朗斯坦(2020 )

但也许最大的挑战将是,即使我们能够建立一个鲸鱼发声的语言模型,该模型可能产生的输出,虽然对抹香鲸来说听起来自然而正确,但对我们人类来说只是另一个难以理解的点击序列!

艾米丽·本德和亚历山大·柯勒最近发表的一篇论文认为,像 GPT-3 这样只在文本上训练的现代语言模型天生无法将它们产生的单词与现实世界中的物体和实体联系起来。这些模型既不“理解”输入文本也不“理解”输出文本。它们只是产生人类能够理解的点击序列!

为了解决这个问题,将音频记录与关于环境的上下文信息联系起来是至关重要的。例如,在他对草原土拨鼠的研究中,康·斯洛博奇科夫仔细记录了每只草原土拨鼠发出警报时哪个捕食者正在靠近。

我个人希望这些挑战能够被克服。我们发现鲸鱼确实能用成熟的语言交流。鲸鱼已经清楚地操纵和利用它们的环境,通过以复杂的甚至是递归的方式组合任意的符号来交流意义。我希望我们不仅能发现对鲸鱼发声的正确反应,还能用人类理解的语言来解释这种发声。

就我个人而言,我期待着有一天我们能与鲸鱼进行有意义的对话——当人工智能说话的时候!

这个帖子也有视频!

文献学

约翰·博尔胡伊斯、加布里埃尔·贝克尔斯、马里努斯·胡布雷格茨、罗伯特·贝里克、马丁·埃弗雷特。2018.鸣禽发声中有意义的句法结构?PLoS Biol 16(6): e2005157。https://doi.org/10.1371/journal.pbio.2005157

艾米莉·本德和亚历山大·柯勒。2020.向 NLU 攀登:论数据时代的意义、形式和理解。计算语言学协会第 58 届年会会议录。https://aclanthology.org/2020.acl-main.463.pdf

迈克尔·布朗斯坦。2020.CETI 项目下一步:工业规模的鲸鱼生物声学数据收集和分析。非人类物种解码交流研讨会。https://www.youtube.com/watch?v=6B8Fg2kZrxA&ab _ channel = SimonsInstitute

tom 布朗、本杰明·曼、尼克·赖德、梅勒妮·苏比亚、贾里德·卡普兰、普拉富拉·达里瓦尔、阿尔温德·尼拉坎坦、普拉纳夫·希亚姆、吉里什·萨斯特里、阿曼达·阿斯克尔、桑迪尼·阿加瓦尔、阿里尔·赫伯特-沃斯、格雷琴·克鲁格、汤姆·海尼汉、雷文·蔡尔德、阿迪蒂亚·拉梅什、丹尼尔·齐格勒、杰弗里·吴、克莱门斯·温特、克里斯托弗·黑塞、马克·陈、埃里克·西格勒、马特乌斯·利特温、斯科特·格雷、本杰明·切斯、杰克·克拉克、克里斯托弗·伯纳、萨姆·麦卡德里什 2020.语言模型是一次性学习者。NeurIPS 2020。https://papers.nips.cc/paper/2020/file/ 1457c0d6bfcb4967418bfb8ac142f64a-Paper.pdf

⁵roger·福茨。1997.近亲:我与黑猩猩的对话。纽约哈珀柯林斯。

⁶louis·赫尔曼。1986.宽吻海豚的认知和语言能力。海豚的认知和行为:比较方法,221–252。

⁷denise·赫尔津。2017.破解海豚通讯密码。在谷歌的演讲。https://www.youtube.com/watch?v=Mfb6zoB_yII&ab _ channel = talksat Google

⁸edward·卡科。1999.三种受过语言训练的动物系统中的句法成分。动物学习与行为,27 (1),1–14。

⁹Nova 科学新闻。2011.海豚有多聪明?第五季第四集。https://www . PBS . org/video/nova-science now-how-smart-are-dolphins/

⁰irene·m·佩珀堡。2002.寻找所罗门王的戒指:灰鹦鹉的认知和交际研究。大脑、行为和进化,59(1–2),54–67。

E.苏·萨凡格-伦堡、珍妮·墨菲、罗斯·塞夫奇克、卡伦·布雷克、雪莉·威廉斯和杜安·伦堡。1993.猿和儿童的语言理解,儿童发展研究学会专论,58(第 3-4 号)。

Con Slobodchikoff。2012.追逐杜立德医生:学习动物的语言。纽约圣马丁出版社。

铃木,大卫·惠特克罗夫特,迈克尔·格里斯。2018.鸟类的叫声组合和合成句法的进化。PLoS Biol 16(8): e2006532。【https://doi.org/10.1371/journal.pbio.2006532

⁴Yamamoto,柏木信行,大冢,酒井麻衣和友永正树。2019.宽吻海豚的合作:拉绳任务中的双向协调。PeerJ 7:e 7826http://doi.org/10.7717/peerj.7826

深度强化学习之旅

原文:https://towardsdatascience.com/a-journey-into-deep-reinforcement-learning-41b6ee5e860e

深 Q 网解释

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

必须抓住所有的概念💫

深度强化学习 (DRL)在过去几年里一直是人工智能领域的焦点。在游戏世界中,几个机器人(在本文的其余部分也称为代理人或模型)如围棋游戏的 AlphaGo 或星际争霸的 AlphaStar 和 Dota 视频游戏的 Open AI Five ,仅举几个著名的例子,它们表明,通过将深度神经网络代表性力量强化学习框架巧妙结合,有可能主宰职业游戏玩家联盟。

DRL 不仅限于游戏,它还在更实际的问题上表现出强大的能力,如物流、生物、电子设计,甚至在聚变反应堆中指导等离子体操纵,这表明以前难以解决的问题可以由“超人”代理来解决。

知道了这一点,我非常好奇,想知道这样的结果是如何得到的。一如既往,从学科的最底层开始帮助我掌握了基本概念,并在挖掘更复杂的架构之前建立了对 DRL 的理解。因此,这篇帖子的目的是专注于理论,并解释 DRL 基金会算法之一的深度 Q-网络 (DQN)的一些主要概念,以了解深度学习&强化学习(RL)如何联合起来构建这样的超人代理。

在继续这篇文章之前,我假设读者已经熟悉 RL 的基本概念和词汇。如果没有,你可以先看看 RL 上的这个很棒的 UCL 课程,或者看看你真实的介绍:

👾 🎮太空入侵者 (S-I)是一款来自著名的雅达利 2600 主机的视频游戏(图 1)。这款视频游戏被广泛用于 DRL 模型的基准测试。在《星际迷航》中,你驾驶一艘小飞船,在外星人摧毁你之前,你必须通过射击摧毁尽可能多的外星人飞船。我们将使用 S-I 游戏作为一个玩具环境来说明我们在这篇文章中涉及的 RL 概念。

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

图一。扮演太空入侵者的随机特工

正如我们已经提到的,球员经纪人将由 DRL 砖块制成。它将通过观看游戏的原始图像从所有可能的动作中选择一个动作做出相应的反应来直接学习玩 S-I(就像人类会做的那样)。

为了理解代理背后的 DRL 砖块,我们剖析了 DeepMind 的三篇主要论文(按出版时间顺序排列如下),它们是许多现代 DRL 方法的核心:

让我们从直接查看狮穴开始我们的旅程(下面的算法 1👇).

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

算法 1 。下面我们来解开那些伪代码 步骤

天啊😱!乍一看,这看起来很可怕…但是不要担心,我们将一行一行地检查它,并解开每个概念。

⛰️ Q 学习

首先,在深度 Q 网络中我们有一个 Q 。并且,在一开始萨顿&巴尔托创造了 Q 函数。Q 函数(也称为状态-动作值函数)将几个<状态、动作>映射到一个值(或预期回报)。

简单地说,Q 函数告诉你,在你所处的特定状态下,你想采取的行动有多好。下面的图 2 用 S-I 环境中的一个具体例子说明了这个定义。

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

图二。S-I 中给定情况下 4 种潜在行动的 4 Q 函数输出图

一旦与环境相关的 Q 函数已知,代理总是可以选择导致最大期望回报的行动,因此在该环境中遵循所谓的最优策略**。正是对最优策略的了解,使得智能体达到了超人的性能。**

S-I 博弈类似于一个马尔可夫决策过程 (MDP)环境。RL 研究人员提出了在这种环境下寻找最优策略的几种方法。在 DQN 代理中, Q 学习方法用于寻找最佳 Q 函数。因此,让我们深入研究一下这种方法背后的数学原理,分解将我们引向算法 1 核心部分的不同步骤。

根据定义,Q 函数方程已经被贝尔曼提出为一个递归(动态规划)问题:

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

Eq 1 。定义 Q 函数的贝尔曼方程

贝尔曼方程表明,处于状态的动作的 Q 函数可以分解成两部分:**

  • 一份立即的奖励
  • 一个贴现的未来的预期报酬

通过将期望函数发展为所有可能的下一个状态上的状态转移概率的加权平均值,以及遵循我们的当前策略在特定状态中选择任何可能动作的概率的加权平均值,可以在下面的等式(2)中导出第一个等式。

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

****Eq 2。Q 函数的扩展定义

实际上,我们的 S-I 环境可以看作是一个确定性环境。的确,按下左键时向左移动是肯定的。因此,它使我们能够摆脱状态转移的概率。

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

****情商 3。Q 函数的确定性方程

现在我们已经推导出了 Q 函数方程,让我们记住我们要寻找的是最优 Q 函数(具有最高值)。这意味着我们不想再考虑所有可能的行动,而只考虑最大化预期回报的行动。一个自然的替代是查看最大预期回报,因此是下面的(4):

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

****Eq 4。最优 Q-函数方程

从数学上来说,最佳 Q 函数应该遵守(4)中的等式。

从理论上的最佳 Q-函数定义(4),Q-learning 使用以下更新步骤推导出收敛到最佳 Q-函数的估计值的迭代算法:

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

****情商 5。Q-学习步骤

  • 红色的TD-误差 :是两个时间上不同的估计值之间的差距。越接近 0,越接近最优,因此更新越小;越大越接近最优,因此更新越大。
  • 绿色部分显示的是学习速率 λ ,表示我们希望更新多少旧的估计 Q 值。
  • 蓝色表示更新后的旧估计 Q 值。

用简单的英语总结最后一个等式(5): Q 学习迭代地朝着最优方向更新估计的 Q 值。在这个迭代过程结束时,它收敛到最优 Q 函数

💧深度 Q 学习

****你看到它来到这里(或者深度 Q 网络不够明确🙃).这确实是深度神经网络(DNN)的用途,以 通用函数逼近器 而闻名。最重要的是,DNN 在处理图像等非结构化数据时特别有效(与更传统的 ML 方法相比)。请注意,在这篇文章的其余部分,我们交替使用 DQN 和 DNN 术语来指代代理的模型(假设 DQN 是一个 DNN)。

让我们记住,我们直接使用 S-I 视频游戏的图像流,让代理学习最优 Q 函数。所以问题如下:

为什么不用 DNN 作为 Q 函数的近似值呢?

让我们看看如何在 Q 函数近似任务中利用 DNN 的代表性力量。因为一张图片胜过千言万语,所以下面是(如图 3 所示👇2)DNN 如何处理 S-I 游戏图像以输出与可能的游戏动作相关的值(准确地说是 Q 值)的方法。

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

图 3 。DQN 向前传球,从 S-I 真实游戏画面流中学习(详细图例如下)

  • 跳过帧:非常接近的状态(或转换)不会携带太多信息,我们更喜欢探索更多不同的模式,而不是收集高度相关的转换,这将输出非常接近的 Q 值。此外,运行更少帧的游戏引擎比计算所有这些高度相关的转换的 Q 值更便宜。因此,使用这种技术可以运行更多不同的剧集。
  • 向下采样,灰度调整&归一化:在 ML 中,为了减少从图像中学习所需的计算量,并保持像素表示在可比的尺度上,遵循这些预处理步骤是一种常见的做法。
  • DQN 输入:来自 S-I 的 4 帧作为 DNN 输入,它们被称为一个状态或转换。
  • 卷积层:从原始图像中学习信息特征恰恰属于神经网络的范畴,更具体地说是控制计算机视觉领域的 c 卷积神经网络 (CNN)。
  • 输出层:DNN 的最后一层给出与每 4 个潜在动作相关的 4 个分数(分数越高,动作越好)。

这是如何处理图像的一个很好的可视化,但要让 DNN 学会最后一个要素是一个损失函数。这里没有什么特别的,所用的损失是一个自适应的均方误差(TD-MSE,见下面图 4 中的等式(6 )),它使用估计的最佳 Q 函数。最后,经典的随机梯度下降被用于向等式(7)上的损失最小值更新 DNN 网络权重。

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

图 4 。深度 Q 网络随机梯度下降步长

到目前为止一切顺利。现在让我们看看为什么在梯度下降更新步骤中区分损失时,红色参数(图 4 ⬆️上)保持冻结。

⚡在线与目标网络

如果我们正确理解了等式(6),我们在损失中使用的目标/标签来自我们更新的同一模型。换句话说,模型正在从自己的预测中学习…这难道不像蛇咬尾巴一样奇怪吗?♾️

乍听起来确实很奇怪。但是如果我们想到它,它就像使用我们对估计的最优 Q 函数的最佳猜测(到目前为止)。并且假设 Q 学习迭代地收敛到最优 Q 函数,我们可以期望我们的噪声估计在开始时变得越来越一致,一次又一次迭代。
理论上,当且仅当模型在训练时给出越来越相关的目标时,这才会起作用
****

不幸的是,实际上它并不那么有效。事实上,在每个学习步骤中,模型的权重都会更新,这可能会导致两个相似状态的目标预测发生巨大变化,从而阻止 DNN 有效学习。
例如,对于两个连续的学习步骤,给定一个非常相似的输入状态,DNN 可能会选择不同的最优行动……这意味着我们的目标不一致。😢

这种不一致性被称为移动目标问题,导致学习不稳定。这就是使用 2 网络的想法的来源:

  • 在线网络:每步更新的学习网络
  • 目标网络:在线网络的副本,在几个步骤中保持冻结,以确保目标保持稳定

该在线/目标网络工作流在⬇️下面的图 5 中解释

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

图 5 。目标网络产生目标,而在线网络向它学习。在线网络的权重被不时地复制到目标网络。

  • 步骤 1 :目标网络产生给定过渡的目标
  • 步骤 2 :在线模型从目标网络产生的目标中学习

遵循在线/目标网络方法保证了 DNN 学习的稳定目标。

我们开始看到这一点,要将深度学习和强化学习结合起来,我们必须确保 DNN 有一个高效的学习机制。所以,让我们看看释放全部 DNN 能量所必需的其他工程技巧吧!💥

🍃双(深度)Q 学习

再一次,另一个障碍落在 DQN 学习和收敛的路上。

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

方程式(4)

回顾 Q-学习最优(上面的等式(4)),我们可以看到对的 Q 值取决于下一状态的所有可能动作的最大 Q 值(等式(4)上的红色项)。这意味着,在 Q 学习中,所有可能动作的最大值是估计状态值的相关代理。

如此确信最大值是对一个状态值的正确估计被认为是偏向最大值。这就是下图 6 中的玩具例子所展示的👇

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

图六。盲目相信嘈杂的 Q 值估计,与隐藏的现实不同,使智能体探索错误的方向:选择动作 A 而不是动作 B

简而言之,偏向最大值会使代理选择不感兴趣的动作并探索错误的方向,这可能会导致模型收敛更慢,并恶化其学习机制。

注意:那些噪声估计不是随机的,因为它们来自单一模型,该模型总是高估给定相似状态的相同动作。否则就不会产生这种偏见。****

Hado van Hasselt 纠正这种偏差的想法是并行使用 2 个函数逼近器(因此得名 Q-learning):

  • 一个用于给定状态下的最大动作选择
  • 另一个用于与所选最大动作相关的 Q 值计算

事实上,使用两个智能体给我们嘈杂的估计带来了渴望已久的随机性。让我解释一下🤓
两个模型不会高估给定相似状态的相同动作,因为它们被不同地训练,所以使用一个选择动作,另一个计算关联的<状态,选择的动作>值以随机方式混合两个模型的噪声,因此
去偏置值估计
****

为了避免有太多的网络和混淆整个培训架构(我们已经有了在线和目标网络😅!),已经表明使用在线网络作为 Q 值计算机和目标网络作为最大动作选择器对于代理学习能力来说工作良好。

🌀体验回放

到目前为止,人们理所当然地认为 DQN 正在从一系列连续的转变中学习…我们再想想。

如果我们采取一系列连续的转变,大多数情况下,它们看起来是一样的。在 ML 中,我们可以说连续转换是高度相关的……向 DNN 输入相关输入会使 DNN 连续过度拟合少数相关样本,从而降低其学习速度。事实上,我们都知道改组数据集对模型收敛更好🙏****

因此,经验重放程序(在下面的图 7 中解释)来解除输入到 DNN 的输入转换的相关性。

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

****图 7。不是直接从连续的过渡流中学习,而是将图像存储在一个缓冲区中,并从中随机采样以提供给代理。

注意:重放记忆是一种真正的神经科学现象,发生在海马体(至少对啮齿动物来说是这样的🐭)。

🔥优先体验重放(PER)

对于这一个,一切都在名字里。事实上,不是从重放缓冲区统一采样,而是根据对代理的转换有多感兴趣,以优先级采样转换。简而言之,更多的有趣的跃迁被采样的概率更高。******

一、有趣的对代理来说意味着什么?有时,对于某些转换,代理的表现要比其他的差得多。这意味着代理的 TD 误差对于这些转换来说更高。因此,PER 背后的想法是关注那些预测不佳的转换(也称为有趣的转换),以提高代理的学习。**

永远针对你的弱点进行训练🦾#保护

下面的图 8 显示了如何计算转换的优先级分数。一旦一个转换被采样,它的 TD 误差(以及它的优先级分数)立即被学习代理更新。

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

****图 8。优先级分数计算

然而,采样策略中的这种优先化也导致了对代理学习机制的干扰。事实上,一遍又一遍地重复具有高 TD 误差的转换使得代理由于缺乏多样性而过度适应那些预测不佳的例子。除此之外,优先化使输入跃迁分布偏离真实跃迁分布,因此引入了干扰 DNN 收敛的偏差。

但是不用担心,像往常一样一些聪明的咒语被发现来对付这些诅咒🧙‍♂️

  • 随机优先级通过平滑原始优先级分数分布,允许对一些低 TD 误差的转换进行采样,从而避免了缺乏多样性的问题(参见下图 9)****

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

****图九。α越接近 1,采样优先级越高,越接近 0,越均匀。

  • 重要性-采样进入环中重新权衡在深度 Q 学习中代理的参数更新了多少,以补偿由优先采样引起的分布偏移。 β 越接近 1,补偿越多。****

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

****图 10。给定一个特定的 α(本例中α=0.5),β补偿优先采样引入的偏差(当β → 1 时完全补偿)。

能够在训练期间调整两个参数 αβ增强了代理的学习能力和其更快地收敛到最优策略**

NB :重复优先级化采样和更新那些优先级具有线性复杂度 O(n)。然而,在 DRL,代理的学习必须探索大量的转换,因此这种线性采样的复杂性在整个训练过程中产生了瓶颈。因此,为了克服这一工程问题,一种特定的数据结构被用于优先化缓冲器: SumTree ,这将采样复杂度从 O(n)提高到 O(log(n))。

结论

干得好!我们已经完成了一件很好的工作,🥵.

现在我们有足够的徽章来理解 DQN 的初始算法 1。让我们快速回顾一下不同的关键思想,并将它们映射到算法 1 伪代码的行中:

⛰️ Q-learning:第 11 行
💧深度 q-learning:11 线、13 线& 15 线
⚡在线 vs 目标网:11 线& 16 线
🍃双(深度)Q 学习:第 11 行
🌀体验回放:第 6 行&第 9 行
🔥优先体验回放:6、9、10 线& 12

正如我们所见,需要无数数学/工程/计算技巧来成功混合强化学习框架和深度学习,以达到超人的性能。
DQN 可能是一个旧模型(2015 年在 ML 时间尺度上就像一个永恒),但其核心概念是更复杂和最近的深度 RL 架构的构建块。
****

我希望这篇文章澄清了你可能有的一些疑问,并让你对深度学习和强化学习如何结合起来构建超人代理有更多的直觉和理解。

瞧啊!👌

除特别注明外,所有图片均为作者所有

参考文献

******论文:

******博客&帖子:

Au plus gentil des gars,我的朋友阿德里安。

制度化教育的缺乏加剧了数据工程的短缺

原文:https://towardsdatascience.com/a-lack-of-institutionalized-education-fuels-the-data-engineering-shortage-d2d7c5ac7a81

意见

很少有数据工程学位项目存在,使得无资格和“不合格”候选人的恶性循环永久化。

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

长期的数据工程短缺

随着数据行业的蓬勃发展,我们正处于广为人知的数据工程师短缺之中。据估计,我们陷入人才供给和雇主需求之间的巨大差距已经超过 5 年了。

我认为,原因不仅仅是数据科学完全符合《哈佛商业评论》十年前首次预测的的宣传。

这不像没有任何工作机会

这甚至不是缺乏来自专业认证机构如谷歌或微软的支持的事实(这两家公司都提供多种云工程认证途径)。

事实是,不管在哪个行业,为雇主定义合格候选人的证书是某种机构学位,很少有大学项目致力于培训学生并使他们完全具备数据工程技能。

换句话说,除了一些松散关联的专业认证,很少有文件明确宣布一个人是合格的数据工程师。

攻读数据工程学位

在思考了引起广泛讨论的数据工程短缺的潜在原因后,出于好奇,我决定搜索任何可能提供数据工程学位课程的学校。

我的搜索产生了很多听起来像数据工程的学位项目,但没有那些确切的词。

所以,我扩大了搜索范围,把“数据科学”也包括了进去。

当我在由 Keystone Education Group 管理的 masterstudies.com 网站上搜索“数据科学”一词时,我找到了 386 个学位项目的结果。

相比之下,搜索“数据工程”,只得到 19 个结果

只有一个结果实际上包含单词:“数据工程硕士。”

因此,如果你在寻找一个机构认可的数据工程师,也许可以看看德国不来梅雅各布大学的候选人。

其他学校提供高级学位,建议开设与数据工程相关的课程,如奥本大学,该校拥有数据科学与工程硕士项目。此外,位于加州圣克拉拉的全球工程大学提供数据中心工程硕士学位。

现在,这一点研究不是任何官方文献综述的一部分,甚至不是一个全面的练习;这些结果是“最佳”名单的一部分,表明还有其他项目存在,但不那么显著。例如,西北大学的专业研究学院提供数据工程证书,但是该大学没有正式的数据工程学位项目。

自学还是自学

然而,缺乏可搜索的学位课程确实揭示了这两个学科在学习上的差异:数据科学被广泛教授,而数据工程被广泛自学。

以前,我曾经写过一篇关于数据工程师最有价值(也最有市场)的技能之一,SQL,如何没有在大学广泛教授(或者至少没有教授高级 SQL)。

大学和雇主似乎认为,数据科学或数据分析专业的毕业生可以无缝转换到数据工程岗位。

尽管数据角色之间存在共性,但有些数据工程技能是数据科学专业无法教授的,求职者需要在工作中学习,这可能会阻碍职业发展,并使职业过渡更加艰难。

例如,在我的数据科学硕士项目中,我从未在云中工作过。

我使用了 SQL,但只是为了分析目的,而不是架构目的。

我不知道数据仓库和数据湖之间的区别是什么,也不知道为什么 E-T-L 和 E-L-T 都是非常不同的过程,而不仅仅是拼写错误。

幸运的是,我获得了学习和成长为数据工程师的资源和支持;然而,我意识到大多数候选人没有那么幸运。

事实上,大学似乎非常满足于将云计算概念和技能等其他数据工程技能的教学外包给制造数据工程师工作中使用的技术的组织(谷歌、微软和亚马逊)。

然而,由于许多数据工程的希望者正在从类似于数据分析的学科过渡到其他角色,因此与其他数据角色相比,那些希望过渡到数据工程的人面临着不成比例的高准入门槛。

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

卢克·切瑟Unsplash 上拍摄的照片

认证数据工程师

由于几乎没有认可的制度化选择,有抱负的数据工程师正在拼凑在线课程(edX、Coursera 和 Udemy 都提供 D.E .内容)、媒体文章和 YouTube 视频。

挑战不一定是学习。

面临的挑战将是,以一种将个人描绘成有资格从事入门级数据工程工作的方式来构建学习,并让候选人能够说服招聘经理,自学等同于机构教育。

责任的重担不仅仅落在高等教育机构身上。

由于雇主正在寻求快速雇用数据工程师,他们需要接受这样一个事实,即由于缺乏大学渠道来培养数据工程毕业生担任专业角色,因此需要理解候选人将需要指导和支持来有效地过渡到该角色。

幸运的是,由于对合格或接近合格的技术候选人的竞争,现在雇主们比以往任何时候都更加投资于持续的教育努力。一些公司甚至支付整个学位的费用。

十年前,数据科学面临类似的身份危机。雇主知道他们想要数据驱动,但不知道如何将数据科学纳入他们的技术议程。学校不知道如何将数据科学作为一门学术和专业学科来教授。

这种需求导致了对数据科学家(特别是在 2020–2021 年与 COVID 一起)的大量需求,以及全球大学中数据科学教育的可用性和采用率的增加。

今天,数据科学不仅仅是博士生和无聊的统计学家过渡到的研究生级别的学科。

现在也有大学在本科阶段提供数据科学课程,确保向学士学位持有者灌输数据和人工智能基础知识,降低进入数据科学的门槛(同时创造了更多的就业竞争)。

鉴于数据科学从鲜为人知的学术领域到“最性感的工作”的轨迹,我不得不怀疑,十年后,我们是否会有大量数据工程学位持有者涌入。

我还想知道它们是否仍然有很高的需求量。

如果你愿意支持我的出版物 Pipeline:A Data Engineering Resource 和我的 Medium 写作,请随时使用我的 推荐链接 【我从每个加入的个人那里获得一小笔佣金】 成为 Medium 会员。

纯 Javascript 语言检测模型

原文:https://towardsdatascience.com/a-language-detection-model-in-pure-javascript-b3296ad15e0

如何创建不太耗费 CPU 的 Node.js 或客户端模型——同时仍然充分利用 Python 的库

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

照片由 雷奥纳多大久保

模型是在几个 web 应用程序中使用的非常强大的工具。一般的方法是通过使用 REST APIs 使它们可访问。在本文中,我将讨论一个可以用 Python 创建,然后用纯 Javascript 部署的模型。

为什么是 Javascript?

机器学习模型往往是用 Python 或者 R 创建的,那么为什么要用 Javascript 呢?因为 Javascript 在我们用户的浏览器上运行,所以用这种语言部署模型允许我们分散计算工作。使用 Javascript,我们将不再需要 REST APIs 来使用我们的模型,这是一件非常有用的事情,因为它简化了我们的应用程序的架构。如果我们仍然想让我们的模型在服务器端工作(例如,如果我们不想让用户访问它),我们可以在 Node.js 上运行它,以便从 Javascript 的使用中受益。所以,这些就是使用 Javascript 部署模型的优势。

框架

那么,我们应该用 Javascript 创建我们的模型吗?这个想法是我们仍然需要 Python 来创建我们的模型,但是我们可以在以后把它翻译成 Javascript。这样,我们将受益于 Python 编程语言及其库的所有功能。然后,我们将只在 Javascript 中部署最终结果。

模型

在本文中,我将用 Python 创建一个简单的语言检测模型,然后用 Javascript 部署它,创建一个简单的 web 应用程序,在用户编写文本时检测文本的语言。我之前已经谈过使用朴素贝叶斯模型的语言检测模型。在本文中,我将使用相同的数据集,但使用不同的模型(逻辑回归)。

你可以在我的 GitHub repo 上找到整个笔记本。

数据集是我的意大利短篇小说《L’isola del male》及其英译本。对于德语,我会用弗里德里希·尼采的《查拉图斯特拉如是说》。因此,这个模型中使用的语言是意大利语、英语和德语。

首先,让我们使用一个定制函数来清理数据集,该函数接受一个 txt 文件并返回一个句子列表。

def file2sentences(filename):
  txt = ""with open(filename,"r",encoding="utf-8") as f:
    txt = f.read()txt = txt.replace("?",".")
  txt = txt.replace("!",".")
  txt = txt.replace("»","")
  txt = txt.replace("«","")
  txt = txt.replace(":","")
  txt = txt.replace(";","")
  txt = txt.replace("...",".")
  txt = txt.replace("…",".")
  txt = txt.replace("\n",".")
  txt = txt.replace("  "," ")
  txt = txt.replace("“","")
  txt = txt.replace("„","")

  sentences = txt.split(".")for i in range(len(sentences)):
    sentences[i] = sentences[i].strip()sentences = [x for x in sentences if x != ""]return sentences

然后,让我们加载文件并贴上正确的标签。

italian = file2sentences("isola del male.txt")
english = file2sentences("island of evil.txt")
german = file2sentences("also sprach zarathustra.txt")

因此, X 包含句子, y 包含语言标签。

现在,我们可以将数据集分为训练和测试两部分。

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

我最初的文章的核心是使用人物二元模型作为特征。对于这个例子,我将计算它们并创建一个二元特征,如果二元模型出现在句子中,它等于 1,如果没有,它等于 0。

cnt = CountVectorizer(analyzer = 'char',ngram_range=(2,2), binary=True) cnt.fit(X_train)

现在模型来了。对于这个例子,我将使用逻辑回归

model = LogisticRegression() model.fit(cnt.transform(X_train),y_train) 
y_pred = model.predict(cnt.transform(X_test))

让我们看看分类报告。

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

对于像我们这样的简单模型来说,结果是相当令人印象深刻的。高召回值告诉我们,该模型能够有效地检测语言。

现在,我们必须将这个 Python 模型翻译成 Javascript。

从 Python 到 Javascript 的模型转换

为了将 sklearn 模型翻译成 Javascript,我使用了 m2cgen 库,它允许从 Python 到不同语言的这种转换。Javascript 就是其中之一。

我们先安装一下:

!pip install m2cgen

现在我们可以导入它了。

import m2cgen as m2c

为了转换我们的模型,我们必须增加递归极限。这是因为我们有 800 多种功能。

import sys 
sys.setrecursionlimit(10000)

最后,这里是我们模型的 Javascript 代码:

print(m2cgen.export_to_javascript(model))

该函数返回一个数组,其中包含每个类的分数。被选中的班级将是得分最高的班级。

现在我们必须实现预处理部分。我们必须首先将二元模型保存到一个 Javascript 数组中。姑且称之为二元模型

cnt.get_feature_names_out()

我们现在必须根据这些二元模型创建二元变量。在 Javascript 中,我们可以使用这些代码来根据给定的模型选择语言。

languages = ['de', 'en', 'it'];function getLanguage(text) {
  vect = [];
  for (i = 0; i < bigrams.length; i++) {
    vect.push(text.toLowerCase().indexOf(bigrams[i]) > 0 ? 1 : 0);
  }
  scores = score(vect);
  return languages[scores.indexOf(Math.max(...scores))];
}

我们现在可以将一切嵌入到一个简单的 HTML 应用程序中。

最终应用

我们可以用 Bootstrap 构建一个简单的 web 页面来管理图形,用 JQuery 来更新一个语言检测字段,当用户写一些文本时,这个字段会自动更新检测到的语言。

下面是 JSFiddle 应用程序。只需点击“结果”标签,开始用 3 种语言输入一些句子。例如,意大利语为“questaèuna applicazione per riconoscere il linguaggio”,英语为“这是一个识别语言的应用程序”,德语为“Dies is eine Anwendung zur Spracherkennung”。

这是相当令人印象深刻的,即使因为不是所有这些句子的单词都在原始语料库中使用。

结论

在本文中,我展示了如何从 Python 强大的 sklearn 库开始,用 Javascript 实现一个简单的机器学习模型。例如,这个概念可以用来创建 Node.js 中的服务器端模型或不太耗费 CPU 的客户端模型。我们仍然受益于 Python 的库,但是我们现在能够将我们的模型翻译成客户端语言,这可以用于多种目的。

原载于 2022 年 4 月 13 日【https://www.yourdatateacher.com】

是不是大样本危机?流行的差异表达方法对人类群体 RNA-seq 样品的夸大假阳性

原文:https://towardsdatascience.com/a-large-sample-crisis-or-not-640224020757

应对大样本进行排列完整性检查

作者:李玉妹博士(加州大学欧文分校)和李静怡杰西卡(加州大学洛杉矶分校)

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

图片来自 https://unsplash.com/photos/I23WeOTsA8M

在生物学研究中,识别在不同实验条件或疾病状态下显著不同的生物学特征对于理解表型背后的生物学机制是重要的。在这些特征中,基因表达是最常被研究的一个。RNA-seq 技术的发展使得在全基因组水平上识别差异表达基因(deg)变得更加容易和快速。然而,RNA-seq 数据的样本量通常较小(通常每个条件下只有 2-4 个生物重复),这使得准确鉴定 DEGs 变得困难。以前的研究人员开发了基于参数分布假设和经验贝叶斯方法的统计方法,以提高小样本的统计功效,如两种流行的方法 DESeq2 [1]和 edgeR [2]。随着测序成本的下降,RNA-seq 数据的样本量逐渐增加,在一些群体水平的研究中达到数百甚至数千。这提出了一个自然的问题,即像 DESeq2 和 edgeR 这样为小样本数据设计的方法是否仍然适用于群体水平的 RNA-seq 数据集。

为了回答这个问题,最近,来自加州大学洛杉矶分校和 UCI 的研究人员在基因组生物学上发表了一篇题为“在分析人类群体样本时,流行的差异表达方法夸大了假阳性”的论文。通过排列分析,研究人员发现 DESeq2 和 edgeR 具有极高的错误发现率(FDR),远远超过目标 FDR 阈值。通过进一步评估多种 DEG 分析方法,包括另一种流行的方法 limma-voom,GTEx 财团采用的非参数方法 NOISeq,最近的非参数方法 dearseq,以及经典的非参数 Wilcoxon 秩和检验(也称为 Mann-Whitney 检验),他们发现只有 Wilcoxon 秩和检验才能控制 FDR 并获得良好的功效。因此,对于群体水平的 RNA-seq 研究,研究人员推荐 Wilcoxon 秩和检验。

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

图片来自https://genomebiology . biomed central . com/articles/10.1186/s 13059-022-02648-4

在这项研究中,研究人员首先通过随机置换所有样本的双条件标签来生成阴性对照数据集,并发现 DESeq2 和 edgeR 具有出乎意料的高 FDR。令人惊讶的是,当分析来自免疫治疗研究的 RNA-seq 数据集[3]时,他们发现 DESeq2 和 edgeR 甚至从置换数据中识别出了比原始数据更多的 deg。特别是一些基因在多个置换数据集中被错误地识别为 deg,并在免疫相关的生物途径中被富集,这很容易误导研究人员。此外,研究人员通过半合成数据分析,在更多数据集(GTEx [4]和 TCGA [5])上对 DESeq2 和 edgeR 以及其他四种 DEG 识别方法进行了基准测试。结果显示经典的非参数 Wilcoxon 秩和检验始终控制着 FDR。

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

基于免疫治疗研究的 RNA-seq 数据的排列分析结果。图片来自https://genomebiology . biomed central . com/articles/10.1186/s 13059-022-02648-4

通过更深入的分析,作者发现基于参数分布假设的方法(例如,DESeq2 和 edgeR)不能控制 FDR 的一个原因是这些方法违反了所假设的参数分布。当样本量足够大时,参数假设就不再必要了。这就是为什么非参数 Wilcoxon 秩和检验在评估中表现最好。因此,研究人员得出结论,对于大样本人群水平的研究,经典的非参数统计方法应被视为数据分析和新方法基准的基线。

加州大学洛杉矶分校统计系的 Jingyi Jessica Li 教授和 UCI 生物化学系的教授是本文的通讯作者。这项工作主要由博士(来自实验室的博士后)和葛新洲博士(来自 Jingyi Jessica Li 实验室的博士后)完成。

原文链接:https://doi.org/10.1186/s13059-022-02648-4

对于小样本数据,如果用户希望有效的 FDR 控制,但发现很难获得高分辨率的 p 值,Jingyi Jessica Li 的实验室开发了统计方法 Clipper [6】,新洲葛博士也是该方法的主要作者:【https://www . physical sciences . UCLA . edu/new-statistical-framework-to-increase-of-data-driven-biomedical-research-on-biomolecules/

参考文献

1.Love MI,Huber W,Anders S: 使用 DESeq2 对 RNA-seq 数据的倍数变化和离散度进行适度估计。 Genome Biol 2014, 15: 550。

**2.Robinson MD,McCarthy DJ,Smyth GK: edgeR:一个用于数字基因表达数据差异表达分析的生物导体包。 生物信息学 2010,**26:139–140。

**3.里亚兹·N、哈维尔·JJ、马卡罗夫·V、德斯里查德·A、乌尔巴·WJ、西姆斯·JS、霍迪·FS、马丁-阿尔加拉·S、曼达尔·R、沙夫曼·WH 等人:使用尼伐单抗进行免疫治疗期间的肿瘤和微环境演变。 单元格 2017,**171:934–949 e916。

**4.跨人类组织遗传调控效应 GTEx 联盟图谱。 理科 2020,**369:1318–1330。

**5.癌症基因组图谱研究 N,Weinstein JN,Collisson EA,Mills GB,Shaw KR,Ozenberger BA,Ellrott K,Shmulevich I,Sander C,Stuart JM: 癌症基因组图谱泛癌分析项目。 Nat Genet 2013,**45:1113–1120。

6.葛 X,,宋 D,McDermott M,Woyshner K,Manousopoulou A,王 N,李 W,王 LD,李: Clipper:两种情况下对高通量数据的无 p 值 FDR 控制。 基因组生物学 2021, 22: 288。

机器翻译的大规模自动评估

原文:https://towardsdatascience.com/a-large-scale-automatic-evaluation-of-machine-translation-b700df93d4c0

在 WMT22 的 21 个翻译方向上评估了 185 个系统

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

WMT22 语言对—作者图片

像 2006 年以来的每一年一样,机器翻译大会(WMT)组织了广泛的机器翻译共享任务。来自世界各地的众多参与者提交了他们的机器翻译(MT)成果,以展示他们在该领域的最新进展。WMT 通常被认为是观察和评估 MT 最新技术水平的参照事件。

2022 年的版本用一个“通用”翻译任务取代了原来的新闻翻译任务,涵盖了各个领域,包括新闻、社交、会话和电子商务等。仅这项任务就收到了主办方准备的 21 个翻译方向的 185 份投稿:Czech↔English (cs-en)、Czech↔Ukrainian (cs-uk)、German↔English (de-en)、French↔German (fr-de)、英语→克罗地亚语(en-hr)、English↔Japanese (en-ja)、English↔Livonian (en-liv)、English↔Russian (en-ru)、Russian↔Yakut (ru-sah)、英语≤乌克兰语(en-uk)、英语≤中文(en-zh)。这些翻译方向涵盖了广泛的场景。根据语言的相关性和可用于训练机器翻译系统的资源数量,组织者将它们分类如下:

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

图片由作者提供—数据来源:https://statmt.org/wmt22/translation-task.html

有了这种多种多样的语言对与多种多样的领域相结合,我们可以准确地描绘出机器翻译的现状。

在本文中,我报告了对 185 份提交材料的自动评估,包括组织者添加的在线系统。我的主要观察如下:

  • 低资源远距离语言对的机器翻译仍然是一项极其困难的任务。
  • 对于某些翻译方向(例如 de→fr),提交的最佳输出与在线系统交付的翻译质量相差甚远。
  • 在这项任务中,两个 MT 系统之间高于 0.9 的 BLEU 得分差异在统计上总是显著的。
  • 对于几乎所有翻译方向的翻译质量评估,BLEU 与 COMET 的相关性很差,但作为诊断和分析工具仍然很有用。
  • 绝对彗星分数毫无意义。

在这项研究中,我使用了由 WMT22 的组织者公开发布的参考译文和系统输出,并且由于Tom KOC mi发布的初步报告,我可以交叉检查我的一些结果。

这不是 WMT22 的官方评价。WMT22 正在进行一项人体评估,该评估将在 2022 年 12 月 7 日至 8 日的会议上详细介绍,该会议与 2022 年 EMNLP 在阿布扎比共同举办。

请注意,这篇文章是我最近报告的一个更容易理解和更简短的版本,你可以在 arXiv: 上找到 WMT22 通用机器翻译任务的自动评估

使用指标进行评分和排名

在这次评估中,我使用了三种不同的自动指标:

chrF ( 波波维奇,2015 ):一种在字符级操作的独立于标记化的度量,与人类判断的相关性高于 BLEU。这是我通常推荐的评估翻译质量的标准,因为它计算起来非常便宜,可重复,并且适用于任何语言。

蓝色(帕皮尼尼等人,2002 年):标准蓝色。

COMET ( Rei 等人,2020 ):基于预训练语言模型的最先进的度量标准。我们使用默认模型“wmt20-comet-da”

请注意,在这个特定的研究中,chrF 和 BLEU 仅用于诊断目的,并用于回答这个问题:我们离达到特定的参考译文还有多远?我不会用它们来对翻译质量下结论。为此,我使用 COMET 对系统进行排序,以便更好地与人类评估相关联。

我根据分数对每个翻译方向的系统进行了排名,但我只对那些被作者声明为“受限”的系统进行了排名,即只使用组织者提供的数据的系统。在下表中,等级为“不适用”的系统是不受约束的系统。

使用两个参考翻译进行评估,我们获得了机器翻译研究文献中罕见的绝对 BLEU 分数,例如,JDExploreAcademy for cs→en 的 60.9 BLEU 分,如下所示:

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

图片由作者提供。

对于 en→zh,观察到甚至更高的 BLEU 分数,这是由于使用了更小的标记,这使得 4-gram 匹配成为更容易的任务:

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

图片由作者提供。

绝对 BLEU 分数并不能告诉我们翻译质量本身,即使分数超过 60 也不一定意味着翻译是好的,因为 BLEU 取决于许多参数。然而,BLEU 确实告诉我们,这些系统在参考译文中产生了大量的 4-gram。

虽然 chrF 和 BLEU 直接指示翻译与分数在 0 到 100 分之间的参考文献的匹配程度,但是 COMET 分数没有限制。例如,在极端情况下,对于 uk→cs,AMU 获得 104.9 个彗星点,而对于 liv→en,AIST 获得-152.7 个彗星点。实际上,我对这个幅度感到惊讶,并不得不在验证这些分数之前重新检查 COMET 是如何计算的(更多细节在下面的“关于 COMET 的说明”一节)。

对于 21 个语言对中的 11 个,COMET 找到了一个最佳系统,该系统不是 BLEU 和 chrF 找到的最佳系统。令人惊讶的是,对于某些翻译方向,受约束的系统优于不受约束的系统。按照彗星的说法,cs→uk,uk→cs,de→en,ja→en,en→ja 都是这种情况。对于其他一些方向,在线系统似乎要好得多。例如,对于 de→fr,Online-W 比最佳约束系统好 18.3 BLEU 点。

我从这些排名中得到的主要收获是,使用 WMT22 没有提供的数据是获得最佳系统的关键。当然这并不奇怪,但我希望参与者能够充分描述和分析他们的数据集,以更好地理解为什么它们如此重要。

统计显著性检验

现在我们已经有了每个系统的分数,我们想根据一些度量标准来衡量一个系统比另一个系统好的结论的可靠性。换句话说,我们想要测试系统的度量分数之间的差异在统计上是否显著。有几种工具和技术可以执行统计显著性测试。对于这个评估,我选择了最常用的:配对自举重采样,最初由 Koehn (2004) 提出。

第一个有趣的观察结果是,高于 0.9 点的 BLEU 差异(cs→uk)总是显著的,p 值< 0.05。鉴于我用于 p 值的相对较高且有争议的阈值,我发现 0.9 相当高,因为大多数 MT 研究论文会声称他们的系统在 BLEU 差异高于 0.5 时明显更好。

在 chrF 中,不显著的最大差异是 0.6 分(en→zh),而对于 COMET 则达到 2.6 分(liv→en)。请注意,这将因 COMET 所用的模型而有很大差异。

这三个指标仅在 21 个翻译方向中的 5 个方向上一致认为系统明显优于所有其他系统:cs→en (Online-W)、fr→de (Online-W)、en→liv (TAL-SJTU)、sah→ru (Online-G)和 en→uk (Online-B)。

我从这个统计显著性测试中得到的主要收获是,它很有见地。这是机器翻译研究社区经常讨论的问题,但我真的认为这是一个必要的工具。对于众所周知的指标,如 BLEU,研究人员通常应用经验法则,例如,1.0 或以上的差异在统计上是显著的。这可能是正确的,尽管在测试之前没有科学可信度。尽管如此,我们不太了解的新指标呢?1.0 彗星点差异显著吗?显然,这取决于任务和 COMET 模型(正如我们将在下面看到的)。这就是为什么在宣称一个系统优于另一个系统之前,必须进行统计显著性测试。两个系统得分之间的差异幅度应该被认为是无意义的。

标准化影响

我还试验了标准化的翻译输出,以观察 BLEU 和 COMET 对标点符号和编码问题的变化是如何敏感的。它还可以突出显示系统是否依赖一些特殊的后处理来增加度量分数。为了标准化,我使用了以下顺序的摩西手稿:

tokenizer/replace-unicode-punctuation.perl | tokenizer/normalize-punctuation.perl -l <target_language> | /tokenizer/remove-non-printing-char.perl

不出所料,我发现 COMET 对这种规范化几乎不敏感。另一方面,它对 BLEU 分数有更强的影响,但是它可以从一个系统到另一个系统有很大的不同。比如 en→cs,对 JDExploreAcademy 没有影响,而 Online-Y 的分数下降了 1.4 BLEU 分。对于 de→fr,归一化将 Online-A 的 BLEU 分数增加了 4.9 分,并且变得比 Online-W 更好,对于 Online-W,归一化对 BLEU 没有影响。尽管如此,Online-W 仍然比 Online-A 好大约 10 个彗星点。

这里没有什么出乎意料的,但是提醒了我们为什么 BLEU 作为翻译质量的评估标准是非常不准确的。

彗星的奇特之处

BLEU 和 chrF 绝对分数可用于诊断目的并回答基本问题:对于给定的表征化,我们离参照有多近?系统有可能生成目标语言的文本吗?等等。COMET 不能,但是对于排名系统来说要可靠得多,正如前面的工作所展示的。

因为我观察到彗星得分之间的振幅很大,所以我用了几个彗星模型来观察它们之间的得分差异。

我可以观察到 wmt20-comet-da(默认模型)的分数实际上与所有其他模型都很不同。虽然具有 wmt20-comet-da 的系统获得的最高分数是 104.9 (uk→cs),但是对于所有平移方向,使用其他 4 个模型获得的分数从未超过 15.9。更具体地说,对于 wmt21-comet-da,对于 ja→en,最佳系统得分为 1.1,如下表所示。

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

图片由作者提供。

更奇怪的是,对于 zh→en,wmt21-comet-da 分数对所有系统都是负的:

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

图片由作者提供。

有了 wmt21-comet-mqm,这些系统的分数四舍五入后看起来非常接近。

我的结论是,无论我们使用什么模型,绝对彗星分数都不能提供信息。负的 COMET 分数可以分配给优秀的机器翻译系统。

下一步是什么?

这个评价清楚地表明,有些翻译方向比其他方向更容易。然而,在运行所有这些实验后,我发现最有趣的是,我不知道这些系统有多好!BLEU 和 chrF 只会告诉我们离一个特定的参考译文有多近,但是给定所使用的标记化,绝对分数会有很大的不同。COMET 只对排名系统有用。据我所知,到 2022 年,我们仍然没有针对机器翻译的自动评估指标,即:

  • 关于翻译质量的信息,即不仅对于排名系统是准确的;
  • 这将产生跨不同设置(如域、语言对、标记化等)的可比较分数。

感谢 BLEU 和 chrF,我们可以观察到,对于一些翻译方向,如 cs→en 和 en→zh,我们的参考译文有些接近,但对于其他方向,如 en↔liv 和 ru↔sah.,我们的参考译文仍然很远另一方面,COMET 显示 WMT22 系统在 19 个翻译方向中只有 5 个明显优于在线系统(我省略了 en↔liv): cs→英国(AMU)、英国→cs (AMU)、de→en (JDExploreAcademy)、en→ja (JDExploreAcademy、NT5、LanguageX)和 en→zh (LanguageX)。

观察这些发现是否与 WMT22 进行的人类评估相关将是有趣的。

我只强调了我的评估的主要结果。在我提交给 arXiv 的文件中,还有更多,特别是试图将所有提交的系统结合起来。

感谢

我要感谢 WMT 会议组织者提供的译文,感谢 Tom Kocmi 提供的初步结果以及对我的 arXiv 报告初稿的深刻评论和建议。

如果你想支持这项工作,请在 Medium 上跟随我。

领导者的数据帝国心态

原文:https://towardsdatascience.com/a-leaders-data-empire-state-of-mind-36b11fcdabf0

引导正确的心态,开启贵公司的数据驱动文化

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

DALL-E 生成的数据中的帝国精神状态

对医疗保健来说,将复杂、分散的数据转化为有意义的决策洞察既是机遇也是挑战。在我多年的医疗保健经验中,我在临床和战略角色的第一线工作,目睹了公司试图利用数据作为竞争优势的成功和失败。医疗保健高管需要注意的是,要成为数据驱动型企业,除了投资技术和数据,还有更多事情要做,心态很重要。

关键要点

  • 医疗保健组织的高层领导心态是利用数据力量的关键。
  • 将变革管理作为数字化转型的一部分。
  • 医疗保健高管以身作则,展示使用数据的能力。
  • 让职能和部门领导达到更高的数据素养标准。
  • 接受不完美的数据——将结果质量与决策质量分开。

B 数据驱动是一项不可否认的竞争优势。领导者和落后者的区别是什么?为什么一些医疗保健公司率先采用神经网络看起来毫不费力?相比之下,为什么其他人会纠结于幻灯片中条形图的细节,并在数据投资 ROI 上争论和犹豫呢?我认为这要从组织的高层领导心态开始。当我阅读大卫·沃勒的 HBR 文章 【创建数据驱动文化的 10 个步骤】时,根据我的观察,高级领导者必须具备四种关键心态,才能将数据的力量作为组织的竞争优势。

****一切都与变革管理有关。成为数据驱动的文化是组织数字化转型的一部分。医疗保健企业必须克服这样一种观念,即学习数据技能太复杂,无法在行业中保持相关性和现代化。

****文化从上层开始。让您的医疗保健组织的高层领导接受数据驱动的文化转型对于成功至关重要。执行领导团队必须展示出利用数据为决策提供信息的熟练程度和舒适度,而不仅仅是用数据来验证直觉,并在直觉未被验证时质疑数据的真实性。

****不要接受无知。促进数据科学和业务之间的沟通和交流是双向的期望。职能和部门领导需要在数据素养方面达到更高的标准;他们必须更擅长数据科学的语言。我们需要将数据素养视为财务素养。每个人都应该知道基础知识,比如预算和如何阅读资产负债表。我们不应该妥协或原谅职能领导对数据、分析和统计有所了解。

我们在一个模棱两可、不确定的环境中运营。医疗保健领导者需要将结果质量决策质量分开。我们必须权衡不同的因素和决策的可能性。在回顾中,我们需要关注决策过程而不仅仅是结果,因为这将帮助我们关注数据。****

结束语…拥有一个数据帝国的心态

“大数据”就像纽约市。对许多领导人来说,这可能太令人望而生畏了,但对于具有帝国心态的领导人来说,这是一片充满机遇的土地。就像 JAY-Z 的 2009 帝国心态,“梦想构成的混凝土丛林,没有什么是你做不到的。”如果您利用您组织的数据驱动规程,它可以成为您的竞争优势。

你有什么看法?

在数据驱动的文化中,高层领导应该具备哪些必备的心态?

一个在混乱的字符串列中统一名称的库

原文:https://towardsdatascience.com/a-library-to-unify-names-in-a-messy-string-column-d77e0ef521b2

一种统一熊猫字符串列中名字的方法。

介绍

当处理 pandas 数据帧中的字符串列时,经常会遇到输入错误,同一名称有许多变体。我在查看 SP IPTU 房地产数据集的邻里专栏时遇到了这个问题(要了解如何下载这些数据的更多信息,请单击此处)。下面是一个名称变体类型的示例:

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

作者图片

这是有问题的,因为我们只需要一种方法来书写每个实体的邻域名称。让我们看看如何解决这个问题。

方法学

由于我们有许多以非常不同的方式书写的名字,第一步将是减少只有最可能的名字的名字列表。为此,我们可以查看每个唯一名称的出现次数,只保留出现频率最高的名称。对于我的情况,我的数据集有超过 2000 万条线,每个街区可能包含数千套公寓。我过滤了最有可能出现超过 5000 次的街区名称。如果数据集较小或每个唯一实体出现的次数较少,则应调整此过滤。这个过滤部分不是强制性的,但它有助于减少真实姓名候选人的数量。

从这个唯一名称列表中,我使用 fuzzywuzzy 包基于 Levenshtein 距离对相似名称执行重复数据删除:

在这里,名为 unique_bairro 的列表现在没有任何重复的名称。

在那之后,我们获得一个减少的邻居名称列表,这将是我们的候选,作为每个邻居的最终名称。我们称之为邻居列表

然后,对于字符串列中所有唯一的名字,我们使用 fuzzywuzzy 包在邻居列表中获得一个匹配及其分数(其中 100 表示完全匹配)。

下面是一个单词匹配过程的示例:

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

作者图片

我们可以看到它成功的找到了 96 分的好配“圣埃菲格尼亚”。100 分意味着完全匹配,通常 80 分以上是很好的候选人。

让我们再解释一下匹配过程如何与 fuzzywuzzy 包一起工作:

  • 比率函数计算两个序列之间的标准 Levenshtein 距离相似性比率。
  • 使用“最优部分”逻辑:如果短字符串的长度为 k,而较长的字符串的长度为 m,则算法会寻找最佳匹配长度为 k 的子字符串的得分。
  • 字符串被标记化,并通过将它们转换成小写和去掉标点符号进行预处理。
  • 字符串标记按字母顺序排序,然后连接在一起。之后,应用比率函数来获得相似性百分比。

现在我们已经看到了一个单词的过程,我们将在字符串列’ bairros '中获得所有唯一名称的匹配。由此,我们创建了一个表,其中包含所有唯一名称的最佳匹配及其得分。以下是结果的一个示例:

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

作者图片

然后,我们过滤 80 分以上的分数,以确定所有唯一名称的匹配对应关系。
当分数低于 80 分时,我们不承认任何比赛。

我们可以对所有唯一的名称使用这种表对应来合并回原始的邻居表。我们现在有了具有统一名称的邻居列(列“最佳匹配”)。

一个应用整个过程的库

在混乱的字符串列中统一名称非常有用,可以应用于许多类型的字符串列。出于这个原因,我们决定将这个过程转换成一个简单的库,让每个人都可以使用。
图书馆的知识库可以在这里找到

要使用该库,只需在终端中键入:

pip 安装统一名称

以下是我们如何在玩具数据集中应用该库的示例:

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

作者图片

点击此处可获得演示笔记本。

图书馆成功地将名字统一为“圣埃菲金尼亚”

正如我们所看到的,处理一个具有许多不同名称的字符串列是很有挑战性的。我们提出了解决这个问题的方法。我们制作了一个易于使用的库,这样你就可以用一行代码申请你自己的数据集。为您自己的项目尝试一下吧!

一点点代码优化大有帮助

原文:https://towardsdatascience.com/a-little-code-optimisation-goes-a-long-way-91f92ff9f468

即使是原型代码,微小的优化也是有益的

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

照片由 Unsplash 上画

原型代码通常有可能导致严重的头痛或噩梦。这样会造成不同团队之间的摩擦,容易积累技术债。如果在每个阶段都注意一点代码优化和简化,就不会出现这种情况。

需要为客户快速构建模型原型。然后,炸弹被投入生产。在生产过程中的某个地方,新的炸弹被扔了过来,循环继续,我们都快乐地生活着(不是)。

我们总是匆忙地快速开发代码以满足最后期限,这通常意味着草率/复杂的代码,转化为技术债务(因此术语“炸弹”,或者有些人可能使用术语“雪球”)。虽然很容易认为“这只是一点债务”,或者“我们可以以后再解决这个问题”,但可怕的是,每一点都很重要,越积越多。债务就是债务,如果不偿还,“利息”或罚款是巨大的,当所有这些小事被忽视并积累到为时已晚时,这很容易引起摩擦并淹没团队。

虽然只有在接近(甚至在之后)生产时才考虑优化代码是很常见的,但如果在原型构建的早期阶段对代码进行优化(即运行更有效或使用更少的资源)和简化,也不会有什么坏处。澄清一下,我并不是说原型模型需要完全优化。我提倡的是,任何开发代码的人都应该:

详细说明一下第二点,使用一个包的方法是非常低效的(例如pandas)。但是稍加调整,这可以显著地改善您的代码。

下面是一些虚构的场景,展示了一些非常愚蠢的代码来说明这一点。

虚构的场景

假设我们有一些 2000 万件商品的销售数据,用“列”selling_pricescosts_per_unitunit_sold_counts,例如:

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

创建虚拟数据(来源:作者)

这给了我们类似于:

selling_prices = [142, 52, 94, 72, 47, 86, ...] 
costs_per_unit = [21, 14, 26, 18, 27, 38, ...] 
units_sold_counts = [9090, 70, 300, 930, 204, 650, ...]

可能有比列表更好的方法来存储/处理这种大小的数据,但是为了便于讨论,让我们坚持使用 3 个单独的列表作为起点,如上所示。然后,我们要计算total_profit,即对每个水果的(selling_price - cost_per_unit ) x units求和。

探测

出于演示的目的,让我们做一些夸张的傻事(即匆忙和草率的代码):

  1. 创造一个空的pandas.DataFrame()
  2. 逐一插入信息栏
  3. df.apply + a lambda函数计算total_profit,并对结果求和
  4. 任务完成。(真的吗?)

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

计算总利润的仓促草率的代码(来源:作者)

优化/简化

如果您正在使用pandas,有一个简单的变化来优化我们想要实现的目标:

  1. 一步创建完整的pandas.DataFrame
  2. 使用广播操作计算所需输出
  3. (断言输出只是为了检查结果是否与原来的total_profit一致)

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

计算总利润的优化代码(来源:作者)

为了进一步简化(和优化),我们可以直接计算输出,而不需要pandas

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

计算没有熊猫的总利润(来源:作者)

在这种规模下(2000 万行),也许使用numpy可以加快速度,但仍然保持代码简单,就像这样:

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

进一步加快 numpy 计算利润的速度(来源:作者)

计时!

现在,让我们用 IPython/jupyter notebook 的 %timeit 神奇命令来计时每种方法运行我们的 2000 万个数据集需要多长时间。结果如下:

  • (夸张地哑)原方法:280 秒
  • 方法同pandas(改进):17.7 秒
  • pandas的方法:4.48 秒
  • 使用numpy的方法:3.82 秒

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

计算总利润的每种方法的计时运行(来源:作者)

思想

结果非常清楚。只需对如何使用pandas进行计算进行简单的调整,就可以使计算速度提高 10 倍以上!想象一下,为了各种各样的探索性数据分析(EDA) 项目,你不得不一次又一次地使用pandas,难道你不想通过更有效地使用这个包来自动加速吗?

如果你真的不需要使用pandas,另一个额外的调整(即直接计算结果)会给你更好的性能(>快 50 倍),只是因为你不需要创建整个数据帧(即使重构,这也是一个很大的开销!)过程中。该方法仍然比使用numpy的方法慢,但性能不会相差太远。这是 KISS 经常被忽视和低估的优点,通过剥离不需要的东西,代码在某种程度上自然得到了优化,而没有使用任何“专门的”加速库。

这些都是微小的细节,但每一个小细节都很重要!你越了解如何更有效地使用你的工具,你就能更自然地优化和简化你的代码。这可能会有很长的路要走,因为团队会随着时间积累更少的技术债务,代码通常会运行得更快更好!

“就这些!”(引用团队成员的话,每当他觉得自己说了一些合理的话时)

承认

非常感谢 Yaqub AlwanGal LelloucheSaed Hussain 富有洞察力的讨论和这篇文章的校对。

注意事项:

对 SQL 执行顺序的研究

原文:https://towardsdatascience.com/a-look-into-sqls-order-of-execution-d0b81e361c66

这就是执行选择查询的方式

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

Bradyn Trollip 在 Unsplash 上拍摄的照片

在编写了大量的 SQL 脚本之后,您可能会在性能方面达到某种形式的平稳状态。你用同样的策略提取洞察力,并遇到同样类型的错误。

幸运的是,通过花时间了解 SQL 中的子句是如何计算的,您可以改善编写查询的体验。

在这里,我们讨论 SQL 中的执行顺序,并解释为什么它很重要。

执行顺序

SQL 查询在计算子句时遵循特定的顺序,类似于数学运算遵循 PEMDAS 或比德马斯的方式。

从用户的角度来看,查询从第一个子句开始,到最后一个子句结束。然而,在执行时,查询实际上并不是从上到下读取的。

查询中子句的执行顺序如下:

1。FROM/JOIN: 首先执行 FROM 和/或 JOIN 子句来确定感兴趣的数据。

2。WHERE: 执行 WHERE 子句来过滤掉不符合约束的记录。

3。GROUP BY: 执行 GROUP BY 子句,根据一列或多列中的值对数据进行分组。

4。HAVING: 执行 HAVING 子句来删除不满足约束条件的已创建的分组记录。

5。SELECT: 执行 SELECT 子句来导出所有需要的列和表达式。

6。ORDER BY: 执行 ORDER BY 子句,以升序或降序对派生值进行排序。

7。LIMIT/OFFSET: 最后,执行 LIMIT 和/或 OFFSET 子句来保持或跳过指定的行数。

个案研究

为了说明 SQL 的执行顺序,最好使用一个例子。

我们有两个名为 Orders 和 Products 的表,其中详细列出了购买文具的情况。

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

订单表(由作者创建)

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

产品表(由作者创建)

使用这些表格,我们想要找出:

谁在钢笔上花了第二多的钱?

我们可以通过下面的查询获得答案。

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

代码输出(由作者创建)

答案成功输出,但最初是如何导出的?

如前所述,用户可能会从 SELECT 子句开始读取查询,并以 OFFSET 子句结束,但是 SQL 不会从上到下读取子句。

相反,它通过以下步骤得出答案:

1.FROM 和 JOIN 子句合并 Products 和 Orders 表以获得感兴趣的总数据。

2.WHERE 子句删除未购买钢笔的记录。

3.GROUP BY 子句按名称将记录分组在一起。

4.HAVING 子句删除在钢笔上花费超过 2000 英镑的群体。

5.SELECT 子句派生出购买者和他们在钢笔上花费的相应金额。

6.ORDER BY 子句根据在笔上花费的总金额以降序对结果进行排序。

7.LIMIT 和 OFFSET 子句跳过第一行,只保留下一条记录,其中包含在钢笔上花费第二多的人。

为什么这很重要

初看起来,SQL 的执行顺序似乎并不重要。毕竟,如果查询提供了想要的输出,谁会关心子句是如何计算的呢?

不幸的是,不熟悉执行顺序的用户将难以编写更复杂的查询,因为出现的任何问题都将更难调试。那些希望更轻松地排除错误的人将受益于理解 SQL 中子句的读取顺序。

例如,SQL 中的一个常见错误是错误地引用列别名。

我们可以通过使用“订单”和“产品”表来回答另一个问题,从而突出这个错误:

在那些花费不到 50 英镑的人中,谁在一份订单上花了最多的钱?

我们可以通过将 Products 表中的 price 变量乘以 Orders 表中的 quantity 变量,并用别名“total_spent”来命名该表达式,从而计算出在一个订单上花费的总金额。

让我们看看以下查询输出的答案。

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

代码输出(由作者创建)

一个错误?这是怎么回事?

不熟悉执行顺序的用户可能看不到在 WHERE 子句中使用列别名“total _ spent”的问题,因此从表面上看,该查询似乎是有效的。

但是,知道了 SQL 中的执行顺序,很明显,由于列别名是在 SELECT 子句中创建的,在 WHERE 子句之后的对其进行评估,所以 SQL 在评估 WHERE 子句时不会包含该别名,因此会出现错误。

既然我们可以识别错误的来源,我们可以通过在 WHERE 子句的表达式中不使用列别名来修复它。

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

代码输出预览(由作者创建)

查询现在成功运行。

请注意,ORDER BY 子句仍然使用列别名“total _ spent ”,这很好,因为该子句是在 SELECT 子句的之后计算的*。*

一般来说,对于理解 SQL 执行顺序的人来说,这样的问题很容易解决。然而,那些对它视而不见的人将很难修复表面上看似良性的错误。

结论

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

照片由 Unsplash 上的 Prateek Katyal 拍摄

总而言之,了解查询是如何被读取的将有助于用户改进他们的脚本,并在排除任何错误时获得更轻松的体验。

起初,记住这个顺序可能会令人生畏,但只要有一点经验,执行的顺序就会很容易记住(就像 PEMDAS 或比德马斯)。

我祝你在数据科学的努力中好运!

机器学习的内幕

原文:https://towardsdatascience.com/a-low-down-on-machine-learning-9cc56ded0ea

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

Unsplash 上的 Pietro Jeng 拍摄

第一部分

机器学习和人工智能是如何产生的

机器学习、模型、人工智能——我们在 IT 界经常会遇到所有这些词。根据你问的是谁,他们中的每一个似乎都意味着完全不同的事情。这主要是由于围绕这些技术的商业驱动的炒作。

所有这一切可能会有点混乱,特别是对于那些刚刚开始在该地区。人们很容易迷失在所有复杂的术语、技术和解决看似相同问题的不同方法之间。

虽然商业中的机器学习仍处于“弄清楚事情”的过程中,但无论是通过实际应用还是理论知识,都已经奠定了足够的基础,为我们提供了一个很好的起点。

人工智能简史

在所有与人工智能相关的词汇中,人工智能本身可能是定义最不严格的。一般来说,人们通常认为,任何能够以任何形状或形式复制人类认知或智能的机器都可以被视为人工智能。

什么构成了“复制人类认知或智力”,在许多领域仍然是一个激烈辩论的话题,包括哲学等较少被提及的领域。

图灵在 1950 年提出了他的著名测试,表明将会有一段时间(据推测,大约在 2000 年左右)机器可以很好地模仿反应,以至于人类法官在某种程度上无法有效地决定它是人还是计算机。

继图灵之后,哲学领域出现了一些质疑他的方法的发展,其中最著名的是塞尔的中文房间论证。简而言之,塞尔认为模仿能力(可以用 if-then 语句来表达)和理解能力之间有着重要的区别。

如果有足够的计算能力,一台机器完全有能力用中文回答任何问题,但这不会让它理解,因此我们不会认为它在思考。

无论情况如何,尽管塞尔的论点在哲学话语中掀起了波澜,但它对其他学科对人工智能的理解并没有太大的影响。令塞尔可能感到沮丧的是,人工智能的早期方法围绕着所谓的符号人工智能。

符号 AI 大致可以定义为类似图灵理解的东西。这种想法过去是(从某种意义上说,现在仍然是)人工智能可以通过创建规则、符号和逻辑来发展。如果你曾经看过流程图,那是对符号人工智能的合理估计。

这种方法在很大程度上围绕着 if-then 语句,这被称为规则。整套规则被称为知识库。一些数学,一些逻辑,整个事情变成了人工智能,有时被称为基于规则的方法。

虽然它们对于一些解决方案来说很棒,但人工智能研究人员很快就遇到了一个千年的哲学问题——这个世界并不那么容易翻译成语言。例如,假设你想创建一个机器,通过一个基于规则的系统来识别猫和非猫。你会遇到一个困扰古希腊哲学家的问题——猫的一些本质特征可以用规则来表达吗?

不管你往哪个方向转,每个规则都会有可能的例外。有些猫可能只有一只耳朵,有些猫可能没有尾巴,当然还有一些猫没有皮毛。

很快就会有太多的规则,它们会开始互相矛盾。一直以来,人类对猫有一些看似直觉的了解。然而,还不清楚我们用什么规则来做这些评估。

此外,基于规则的系统还会遇到其他问题,比如知识库难以更改和维护。最后,他们不擅长处理部分信息和不确定性——这两件事在实际情况中比看起来更常见。

需要注意的是,我不想贬低基于规则的系统的价值和重要性。它们有许多好处,例如透明(而机器学习是不透明的),它们可以更有效地解决确定性问题,并且从商业角度来说,维护起来更便宜。

然而,有两组不同的问题是显而易见的。符号人工智能在处理概率挑战方面存在问题。碰巧的是,许多现实世界的应用程序更接近于扑克而不是象棋——只有一些模糊的参与规则的部分信息是可用的。

进入机器学习

机器学习(ML)是作为符号人工智能系统的替代物出现的。没有使用规则和知识库,而是采用了经验驱动的方法。简而言之,机器学习模型被输入训练数据(“经验”),建立数学模型,并提供输出。

虽然 ML 在早期(70 年代和 80 年代初)并不流行,但它在接下来的几十年里迅速崛起。它的主要好处之一是从规则创建(将知识转化为 if-then 语句的复杂而具有挑战性的任务)转变为数据收集和标记,这是一项相对容易得多的任务。

此外,机器学习允许研究人员处理一组完全不同的问题,即随机问题。由于 ML 模型基于一组数据和参数创建数学预测,它们必然会进行概率评估。

换句话说,想象你有一个数学函数 f(x) = y 。它陈述了两个变量之间的关系。你可以取任何一个 x 值,并得到它在 y 轴上的位置。最终,你可以画一条线来代表这个函数,并在上面画尽可能多的点。

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

作者图片

从某种意义上来说,机器学习模型的工作方式正好相反。我们有一批点(或数据点),它们之间的关系不清楚。如果你有和上面例子中相同的点,你最终可以得到 f(x) = y

然而,有一个重要的警告。其中之一是,与现有的真实世界数据量相比,数据集总是有限的。换句话说,每个数据集都是所有可能性的一个小子集。因此,任何绘制在线条之间的曲线都是一个预测,如果有足够的数据,它可能会与从初始设置中得出的曲线不同。

第二部分

分类和回归

模型可以分为两种主要类型—分类和回归。两者都是依靠数学建模来进行预测。但是,分类仅限于两个值:1 或 0。换句话说,这些算法寻找数据之间的相关性,并分配两个值中的一个。

简单地说,分类预测给定的数据点是否属于特定的类别。假设你想做一个算法来预测一个名字是属于一个人还是一个城市。这样一个模型,给定足够的数据,将能够分配给定的名字是属于一个人还是一个城市。此外,输出将是概率性的,并且,大多数模型,将在其准确性方面提供信心

起初,分类似乎只有极其狭窄的应用可能性。然而,它们已经在许多实际应用中使用。语音识别就是一个很好的例子。这是一个分类问题,因为每种语言都有一组有限的单词。模型所要做的就是将语音与其中一个匹配。

另一方面,回归模型有连续的值。他们可以指定介于 1 和 0 之间的任何值,例如[0;1].虽然这两种类型解决的问题基本相似,但它们为我们提供了更好的解决方案。

例如,我们可能希望预测一辆汽车一年的平均运营成本。我们需要几个变量,如马力、平均重量、年龄、燃料类型和已经行驶的距离。所有这些变量都会对汽车运营成本产生影响(由于燃料消耗、预计的维修频率等。)

这样的问题没有办法通过分类来解决。最好的情况是,我们可以定义某个汽车不再经济的任意时间点,并根据这些时间点对我们的产品进行分类。然而,回归会给我们带来一套比 T2 更节省 T3 或比 T4 更节省 T5 的汽车。

监督和非监督学习

人们可能会注意到,一个问题是向模型显示哪些数据是相关的,哪些是不相关的。毕竟,汽车有更多的特征——它们有品牌、型号、体型等。这些数据很可能与我们声明的目的完全不相关或不太相关。

监督学习是这种情况下的解决方案。将收集关于车辆的数据,并标记(或注释)相关的信息片段,以便为模型提供必要的焦点。在监督学习中,输入和输出都很容易理解。

输入几乎可以是任何东西,从图像到任何类型的文本。然而,输出受到更多的限制。有三种通用的输出类型——数字、标签(例如“猫”、“不是猫”)或向量(例如“大橙猫”的[“形容词”、“形容词”、“名词”])。

图像识别是监督学习最著名的应用之一。回到我们的猫的例子,在某种意义上,动物是由社会和语言定义的。换句话说,只有我们自己告诉机器猫是什么,它们才知道。因此,监督学习是我们的首选解决方案。

因此,在建立图像识别模型时,将收集数据,并且所有的猫都将被如此标记。只要有足够的数据,模型就能够预测提供给它的图片是否显示一只猫。

然而,监督学习确实有一个缺点。在某种意义上,它类似于基于规则的方法,因为其中有必要的人为因素。必须有人提供基于一组内部规则的数据标签,这通常是耗时且昂贵的。

然而,无监督学习的用例稍微复杂一些。当我们不太确定输出应该是什么样子时,就使用它们。顺便提一下,它有时被称为聚类,因为这种数据收集的目标是收集相关数据点的聚类,以获得输出。

真正的无监督学习在机器学习中仍然是一个公开的问题,因为它是两者中更复杂的版本。然而,它更接近于我们在介绍性段落中谈到的人工智能,因为它更类似于人类如何学习和思考。

使用无监督学习的一个最常见的例子是离群点检测。可以为模型提供一定量的数据,然后对这些数据进行分析,找出点之间的任何关系。这种模型的输出是新数据点的数学表达的差异。

这种机器学习模型在趋势和报告生成等方面非常有用,在这些方面,大量数据可能存在较大差异。极端的异常值可能会扭曲报告,从而降低这些报告的适用性。

由于手动删除异常值可能令人望而生畏,并且容易出现人为错误,因此机器学习模型可以毫无问题地做到这一点。

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

故事至此为止。图片作者。

最后,还有半监督学习,它使用了两者的一部分。有时标记所有数据可能成本过高,或者资源过于密集。因此,小块数据将被标记,而数据集的其余部分则未被标记。

第三部分

强化学习

我不会深究强化学习(RL ),因为它在商业中并不常用。然而,它在公众意识中掀起了如此大的波澜,以至于回避谈论它几乎是不体面的。

你可能听说过强化学习的惊人成就。通过 RL 训练的模型已经在国际象棋、扑克、、星际争霸、Dota 2 和许多其他难以置信的复杂游戏中击败了世界级的玩家。从所有的标题来看,强化学习似乎让我们更接近真正的人工智能。

与其他两种学习类型不同,RL 改变了监督的性质。没有标记数据本身,模型只接收正的或负的奖励。在国际象棋比赛中,失去一枚棋子是消极的奖励,而得到一枚则是积极的奖励。这样一个模型的目标是创建一个政策(一组行动),最大化预期平均回报

根据问题的复杂程度,人工干预通常发生在整个过程的几个步骤中。然而,在开始的时候,奖励是明确的——赢得一场比赛,拿走一件东西,等等。然后,模型被释放出来,与自己对打。最终,纯粹通过试错,它达到了可以打败人类的技能水平。

虽然 RL 可以实现真正令人印象深刻的壮举,但它也有一些致命的缺陷,正如 Andrey Kurenkov 在 Gradient 中恰当地指出的那样。其中之一是,这些模型的计算成本非常高。

对于 Dota 2 ,公认的迄今为止最令人印象深刻的壮举, OpenAI Five 需要 256 个 GPU 和 128 000 个 CPU 核心。相比之下,世界上最强大的超级计算机之一 Pleiades 运行在 241 324 个内核和 83 个 GPU 上。此外,大多数相当复杂的监督模型可以在单个企业级服务器上运行。

OpenAI Five 同时打了上千场比赛,训练了一年多。本质上,该模型拥有数千小时的游戏时间,而其最有经验的人类竞争对手约翰“N0Tail”桑德森当时还没有达到 20 000 小时。

最后,这些模型非常擅长基于反射的游戏,但不擅长推理和记忆。在 Dota 2 的例子中,开发者不得不设置一个人为的反应时间限制,以在玩家和模型之间产生公平的竞争。另一方面,在一些复杂思维是主要竞争力量的游戏中,它无法击败经验丰富的玩家。

最后,RL 是一种惊人的,但极其昂贵的机器学习方式。虽然这些壮举确实证明了人工智能的能力,但它仍然不是完美的。强化学习是我们解决基于规则或监督模型难以解决的问题的第三种方式。

简单和复杂模型

让我们回到我们的非 RL 模型。正如你所想象的,并不是所有的数据都能符合简洁的 x^n 函数。大多数真实世界的应用程序都有分散的数据点,这就需要创建更复杂的数学模型。

构建工作模型的一部分是选择正确的复杂函数来预测我们的数据。机器学习中经常使用的奥卡姆剃刀指出,能够解决问题的最简单的解决方案就是恰当的解决方案。换句话说,每个机器学习模型理论上都可以使用 10+阶多项式函数,但这不是一个合适的解决方案。

从某种意义上说,机器学习是一个数学曲线拟合问题。我们收集了大量的数据,这些数据之间有一些关联。该模型的预测能力部分取决于我们事先选择函数的好坏。

从最简单的线性模型开始,我们可以通过f(x)= a+a’x 来表示。假设 a 不为 0,它会产生一条始于某点的直线,其中 x 为 0。

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

可怕的契合!图片作者。

在上面的例子中,我们有一个看似随机数据点的散点图。红线是我们之前概述的功能。显然,这样的契合是可怕的。它勉强抓住了边缘的两点,完全错过了其余的点。

简单线性模型最适用于两个主要变量以某种方式相关的模型。例如,假设我们想要创建一个机器学习模型,仅根据年龄来预测全因死亡率。这两个变量密切相关,虽然还有其他混淆因素,但线性回归或许能够为我们提供合理的预测。

当预测依赖于大量相互关联的因素时,复杂的回归模型(曲线和凹槽多于上图)更适合。回到我们的汽车例子,这样一个模型将需要一个更复杂的函数,它将是某个 n 次的顺序,其中 n > 2

最后,问题是预先预测正确的回归模型。然后可以根据它是否合适、是否合适或是否合适来调整它。

欠拟合和过拟合

与纯数学不同,机器学习模型没有完美的拟合解。在继续之前,重要的是要理解所有的训练数据都是模型试图解决的问题的所有数据的一个很小的子集,有时非常小。

换句话说,所有的训练数据集都是整个画面的不完整部分。它们只是揭示了变量之间的一般趋势,而不是某种不可改变的数据分布规律。因此,一个模型应该足够好地揭示总体趋势,而不是捕捉其他一切。

上图的前一个例子显示了拟合不足的问题。显然,它没有捕捉到足够的趋势,这将导致模型在训练数据和测试中表现不佳。

过度拟合是一个稍微复杂一点的问题。似乎最好的方法是对模型进行大量训练,使其在训练过程中始终提供完美的结果。然而,由于训练数据是一个很小的子集,真实世界的应用程序通常会有不同的数据点分布,这些数据点只会趋向于相似性。

在这种情况下,过度拟合模型将开始做出大量错误的预测,因为它试图拟合分布略有不同的数据。此外,我们应该假设所有数据都有一些不应该被捕获的噪声(例如,异常值)。

试图将数据拟合得太好的模型可能会开始看到不相关信息之间的相关性,从而导致假阳性错误。在我们的汽车示例中,它可能会发现车门数量和总成本之间的相关性(尽管可能存在一些微弱的相关性,因为跑车通常马力更大,车门更少)。

这两个事件导致两种主要类型的误差——偏差和方差。当模型太弱,无法发现数据点之间的一些重要关系时,就会出现偏差。当模型对不规则性过于敏感,并开始捕捉数据中的噪声时,就会出现方差。这两个错误都偏离了预期的结果。

结论

我害怕在这里结束这篇文章,因为我还没有触及机器学习的表面,而只是画出了第一个轮廓。然而,机器学习现在应该通过它的历史和它解决的问题来阐明。

请注意,上述方法没有一个比另一个更好。基于规则的系统,机器学习,无论是有监督的,无监督的,还是强化的,都只是简单的工具。他们能比其他人更好地解决一些问题。选择适合这项工作的人。

互信息的低方差样本估计量

原文:https://towardsdatascience.com/a-low-variance-sample-estimator-for-mutual-information-c4aa479003aa

与相关性竞争

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

JESHOOTS.COMUnsplash 上拍照

这是我那篇关于 逼近 KL 发散 e 的文章的续篇,遵循相同的思路。我想这应该有它自己的一部分,因为我还没有在互联网上的其他地方看到过这个具体的想法。

什么是互信息?

首先快速回顾一下,互信息描述了在一个数字中两个随机变量是如何相互依赖的。如果互信息为 0,则变量是独立的,否则存在一定的依赖性。你可能会认为这听起来很像相关性,但关键区别在于相关性衡量的是线性相关性,而互信息也考虑了非线性相关性。例如,给定随机变量 X 假设 Y=X 。很明显 XY 是相关的,但是相关性可能不会注意到它,因为关系是非线性的,而互信息会。

那么它到底是如何工作的呢?从概率论中我们知道,如果两个随机变量的单个概率密度函数的乘积等于联合概率密度函数,则这两个随机变量是独立的(因此也是不相关的):

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

作者图片:X 和 Y 独立的情况。

所以为了测量独立性,我们真的需要找到一种方法来测量联合概率密度函数和个体密度函数的乘积之间的相似性。幸运的是,我们有信息论的工具,KL 散度!为了简洁起见,我不会在这里深入研究 KL 散度,但如果你想知道更多,请在这里 查看我关于主题 的文章。因此,完整的互信息定义如下:

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

作者图片

为什么首先要估计?

  1. 无解析解:互信息的完整形式解析解可能未知。例如,高斯混合分布就是这种情况。
  2. 高计算复杂度:计算完整的互信息通常需要对整个分布空间求和。使用不需要这样做的近似是有用的,因为它可以更快。

估计量的标准

直觉上,一个估计量应该具有与被估计的原始度量相似的行为。我们可以用两种方法来衡量这种相似性:

  1. 偏差:理想情况下,估计量应该是无偏的;也就是说,估计量的期望值应该等于原始度量。
  2. 方差:方差为 0 的无偏估计量(确定性的)将完全等于原始度量!当然,这是不现实的,但理想情况下,方差应该尽可能低,从而增加获得更接近原始度量的值的可能性。

估计互信息

首先,我们需要计算出在我们的估计量中,我们的样本是来自哪个分布。假设我们有随机变量 XY ,在每个时间步,我们将同时采样一个 xy 。因此,样本是从联合分布中生成的。这在处理估计量的第一个标准时是很重要的,即无偏性,知道在哪个分布上计算期望。让我们从目前使用的标准解决方案开始:

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

作者图片

这很好,但它有很高的方差,因为它可以取负值,而实际的互信息不能:

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

图片作者:当比值 f_{XY}(x,y)/f_X(x)f_Y(y)小于 1 时,上面给出的样本互信息估计量为负😞

改善这种情况的一种方法是添加一个期望值为 0 的项,该项与上面的原始近似值负相关。我们提出以下解决方案:

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

作者图片

假设 f_X(x)f_Y(y) 是有效的概率函数(质量总和为 1),这是可行的。然后,我们可以将估计值更新为:

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

作者图片

其中我们可以求解 λ 以找到最小方差。不幸的是,这取决于具体情况,很难分析计算。但是,通过选择值 1,我们仍然可以找到一个很好的折衷方案。这导致无论如何都是一个半正定的近似!如果我们把比值 f_X(x)f_Y(y)/f_{XY}(x,y) 作为自己的变量,并把它与近似值 λ=1 相对照,我们得到下面的正定图:

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

作者图片

这产生了最终的估计量:

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

作者图片

下一次你发现自己需要使用一个样本来近似交互信息时,请记住这个技巧!

如果您觉得这篇文章有用,请考虑:

推广的方式,我真的希望你觉得这篇文章有趣,让我知道你的想法!!

多亏了 SHAP,机器学习模型不再是黑匣子

原文:https://towardsdatascience.com/a-machine-learning-model-is-no-longer-a-black-box-thanks-to-shap-9f6ae3adaedc

机器学习

多亏了 SHAP,机器学习模型不再是黑匣子

Python 中的一步一步教程,揭示了机器学习模型的内部工作原理

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

萨姆·穆卡达姆在 Unsplash 上拍摄的照片

数据科学家在构建表示数据的模型时可能犯的第一个错误是将算法视为黑盒。在实践中,数据科学家可以更多地关注数据清理,然后尝试一种或多种机器学习算法,而无需了解该算法到底做什么。

事实上,在选择这个或那个机器学习模型之前,数据科学家应该问自己的第一个问题是问是否真的有必要使用机器学习

因此,我的建议是,机器学习是最后的手段,如果没有替代解决方案,就使用它。

一旦你确定机器学习是必要的,重要的是打开黑盒了解算法做什么,如何工作。

有各种各样的技术来解释模型,并使没有机器学习专业知识的人更容易理解为什么模型做出某些预测。

在本文中,我将介绍 SHAP 值,这是最流行的模型解释技术之一。我还将通过一个例子来展示如何使用 SHAP 价值观来获得洞察力。

文章组织如下:

  • SHAP 概况
  • Python 中的一个实际例子

1 SHAP 概述

SHAP 代表“沙普利附加解释”。“沙普利值是合作博弈理论中一种广泛使用的方法。

在机器学习中,Shapley 值分别测量所有输入特征中每个特征对结果的贡献。实际上,Shapely 值有助于理解如何根据输入要素构建预测值。

2017 年,Lundberg 和 Lee 在一篇题为解读模型预测的统一方法的文章中首次发表了 SHAP 算法(鉴于其重要性,该文章有近 5500 条引用)。

关于 SHAP 价值如何运作的更多细节,你可以阅读萨缪尔·马赞蒂的两篇有趣的文章,标题分别是:SHAP 价值准确地解释了你希望别人如何向你解释;黑箱模型实际上比逻辑回归更容易解释。

要在 Python 中处理 SHAP 值,可以安装shap包:

pip3 install shap

可以为各种 Python 库计算 SHAP 值,包括 Scikit-learn、XGBoost、LightGBM、CatBoost 和 Pyspark。shap包的完整文档可在此链接获得。

2 Python 中的一个实际例子

作为一个实际的例子,我利用了由scikit-learn软件包提供的著名的糖尿病数据集。数据集的描述可在此链接获得。我测试了以下算法:

  • DummyRegressor
  • LinearRegressor
  • SGDRegressor

对于每个测试过的模型,我创建模型,训练它,并预测由测试集给出的新值。然后,我计算均方差(MSE)来检查它的性能。最后,我计算并绘制 SHAP 值。

2.1 加载数据集

首先,我加载糖尿病数据集:

from sklearn.datasets import load_diabetesdata = **load_diabetes**(as_frame=True)
X = data.data
y = data.target

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

作者图片

我把它分成训练集和测试集:

from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = **train_test_split**(X, y, test_size=0.33, random_state=42)

此场景的目标是根据一些输入特征计算血糖值(y 值),包括体重指数(身体质量指数)、体压(bp)和其他类似参数。输入要素已经被规范化。这是典型的回归问题。

2.2 虚拟回归量

在应用真实的机器学习模型之前,我建立了一个基线模型,即虚拟回归器,它将输出值计算为训练集中输出的平均值。

虚拟回归器可用于比较,即检查机器学习模型是否相对于它提高了性能。

from sklearn.dummy import DummyRegressor
model = **DummyRegressor**()
model.fit(X_train, y_train)

我计算了模型的 MSE:

y_pred = model.predict(X_test)
print("Mean squared error: %.2f" % mean_squared_error(y_test, y_pred))

输出为 5755.47。

现在,我可以计算这个基本模型的 SHAP 值。我用模型和训练集构建了一个通用的Explainer,然后计算数据集上的 SHAP 值,这个数据集可能与训练集不同。在我的例子中,我计算了训练集的 SHAP 值。

import shapexplainer = shap.**Explainer**(model.predict, X_train)
shap_values = explainer(X_train)

注意Explainer可能接收模型本身或model.predict函数作为输入,这取决于模型类型。

shap库提供不同的函数来绘制 SHAP 值,包括以下几个:

  • summary_plot() —显示每个特征对 SHAP 值的贡献;
  • scatter() —显示 SHAP 值与每个输入特征的散点图;
  • plots.force() —所有数据集的交互式绘图;
  • plots.waterfall() —显示如何为单个数据构建 SHAP 值。

在调用前面的函数之前,必须运行以下命令:

shap.initjs()

首先,我画了散点图:

shap.plots.scatter(shap_values, color=shap_values)

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

作者图片

上图显示了预期的情况:在虚拟模型中,每个特征对 SHAP 值的贡献是恒定的。

现在,我画总结图:

shap.summary_plot(shap_values, X_train, plot_type='bar')

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

作者图片

有趣的是,在一个虚拟模型中,最有影响的因素是年龄。

最后,我画出了force()图。下图是静态的,但如果您在笔记本中绘图,它是交互式的:

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

作者图片

显然,对于数据集中的每个样本(x 轴),每个特征对预测值(y 轴)的贡献是相同的。

2.3 线性回归器

虚拟回归似乎不是最好的模型,因为它达到了 MSE = 5755.47。我尝试线性回归,希望它能取得更好的表现。

from sklearn.linear_model import LinearRegression
model = **LinearRegression**()model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print("Mean squared error: %.2f" % mean_squared_error(y_test, y_pred))

线性回归器的 MSE = 2817.80,优于虚拟模型。

我构建了Explainer,它接收模型作为输入:

import shap
explainer = shap.**Explainer**(model, X_train)
shap_values = explainer(X_train)

现在,我绘制总结图:

shap.summary_plot(shap_values, X_train, plot_type='bar')

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

作者图片

在这种情况下,最有影响的特征是 s1(在虚拟模型中,最有影响的特征是年龄)。不指定plot_type参数也可以绘制汇总图:

shap.summary_plot(shap_values, X_train)

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

作者图片

上图显示了每个输入要素对 SHAP 值的贡献。注意,小于-75 的 SHAP 值仅由 s1 决定。

我为训练集中的样本 0 绘制了瀑布图:

shap.plots.waterfall(shap_values[2])

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

作者图片

上图显示了如何从基线值E[f(x)]建立最终预测f(x)。红色条表示正贡献,蓝色条表示负贡献。

我可以通过force()图表显示所有样本的先前图表:

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

作者图片

对于为虚拟回归元(即平面回归元)构建的同一图表,对于线性回归元,每个特征对最终结果的贡献取决于单个样本。

最后,我绘制了散点图:

shap.plots.scatter(shap_values, color=shap_values)

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

作者图片

2.4 新币回归元

最后,我实现了随机梯度下降回归器。我利用交叉验证网格搜索来调整模型:

from sklearn.model_selection import GridSearchCV
parameters = {
    'penalty' : ('l2', 'l1', 'elasticnet')
}
model = SGDRegressor(max_iter=100000)
clf = GridSearchCV(model, parameters)
clf.fit(X_train, y_train)

我计算 MSE:

model = clf.best_estimator_y_pred = model.predict(X_test)
print("Mean squared error: %.2f" % mean_squared_error(y_test, y_pred))

该模型达到了一个 MSE = 2784.27,优于以前的模型。

下图显示了汇总图:

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

作者图片

上图显示 bmi 特征是 SGD 分类器最有影响力的参数。

摘要

恭喜你!您刚刚学习了如何通过 SHAP 值来反转机器学习模型!SHAP 值指定了每个要素对最终预测值的影响。

如果你已经走了这么远来阅读,对我来说今天已经很多了。谢谢!你可以在这篇文章里读到更多关于我的内容。

参考

相关文章

</4-different-approaches-for-time-series-analysis-7e2364fadcb9> [## 4 种不同的时间序列分析方法

towardsdatascience.com](/4-different-approaches-for-time-series-analysis-7e2364fadcb9)

简单线性回归封闭方程的数学分解

原文:https://towardsdatascience.com/a-mathematical-breakdown-of-the-closed-form-equation-of-simple-linear-regression-8f8306127900

快速浏览,加强您的机器学习基础

线性回归被商业、科学、工程等领域的专业人士广泛使用,但没有太多人理解(或关心)幕后的数学。这篇文章将引导读者进入数学领域,并希望在此过程中获得一些数学欣赏。

一.导言和问题陈述

线性回归是一种统计模型,假设输入 x 和输出 y 之间的线性关系。目标是观察和预测。

假设我们有 n 个观测值 x_i,y_i 其中 i = 1,…,n,我们想得出一个可以根据 x_i 预测 y_i 的线性函数。

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

在哪里

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

每对β_0 和β_1 产生不同的谱线,但我们只对最好的谱线感兴趣。“最佳”线的定义是什么?我们如何找到最好的“β_0”和“β_1”?

二。剩余平方和

衡量线性回归性能的一种方法是找出它产生的误差。通过将预测值和实际值之间的所有差异(残差)相加,我们可以掌握什么是“坏的”,并从中尝试找到最佳模型。

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

估计回归线的残差(Huy Bui)

换句话说,如果 y_i 是实际值,ŷ_i 是预测值,那么成本函数的平方和 ( RSS )的残差被定义为

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

我们希望我们的预测是准确的,这意味着误差应该很小。因此,目标是找到β_0 和β_1,使得 RSS 函数 G(β_0,β_1)最小。

事实上,β_0 和β_1 有一个封闭的公式,

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

让我们发现这个公式从何而来,从零开始推导!

三。求系数

记得在微积分中,要求局部/全局极值,需要求导数,求临界点。

类似地,我们可以使用偏导数找到成本函数 G 的临界点。这个临界点保证是全局最小值,因为 G 是凸函数。这里不讨论凸性的细节。然而,你可以把成本函数想象成一个溜冰场,全局最小值就是重力最终把你拉下来的地方。

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

滑板公园(资料来源:Unsplash)

现在回到数学上来。如上所述,成本函数 G 定义如下:

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

G 对β_0 的偏导数为:

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

设置 ∂G/∂β_0 = 0 以获得

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

β_0 = ȳ− β_1 x̄ 代入我们得到的 G(β_0,β_1),

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

类似地,对 G 相对于β_1 求导得到,

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

设置 ∂G/∂β_0 = 0 获得,

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

四。进一步讨论

我们用微积分推导出了 2D 线性回归的公式。理论上,我们可以对 3D 或 4D 应用同样的程序。随着维数的增加,公式的复杂性呈指数增长,因此计算更高维的公式是不切实际的。

已经开发了不同的优化技术来解决这个问题。其中一种叫做梯度下降。但这将是另一个不同的话题!

感谢您的阅读。

HDBSCAN 生成的集群的度量

原文:https://towardsdatascience.com/a-metric-for-hdbscan-generated-clusters-dd8d1da7ed62

如何确定 HDBSCAN 生成的团簇的等效 DBSCAN ε参数?

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

上图描绘了 HDBSCAN 生成的集群中的最小距离生成树。图片由作者用叶子包和 OpenStreetMap 图像制作。

HDBSCAN 是一种基于密度的分层聚类算法,在简单的假设下工作。至少,它只需要聚类的数据点和每个聚类的最小数量的观察值。如果数据具有不明显的关联距离度量,则该算法接受距离矩阵。

和它的前身 DBSCAN 一样,它会自动检测星团的数量和周围的噪音。与 DBSCAN 不同,生成的聚类可能包含异常值,需要在后处理过程中进行特殊处理。此外,HDBSCAN 不需要ε参数,对于 DBSCAN,它是点之间最大的 密度可达距离

如果没有这样一个参数,HDBSCAN 可以自由地增加或减少集群的密度可达距离,因此它具有层次性。这个特性对用户来说很方便,因为它将用户从看似随意的参数值选择中解放出来。另一方面,知道使用什么距离有时有利于后期处理。

一个这样的实例是为地理空间应用在检测到的聚类周围生成地理围栏。在计算出哪些点属于一个聚类之后,我们可能需要设计一种方法来用图形表示聚类的边界,或者推断新获取的位置是否属于这个聚类。通常,我们需要这两者,而 HDBSCAN 算法只提供第二种情况的近似值。对每个输入位置重新运行该算法通常是不可行的。

将识别的聚类点转换为地理空间形状有许多选项,因此让我们描述几个。

凹形船体

凹壳算法允许我们选择一组点,并以尊重其感知形状的方式在它们周围绘制一条拟合线。

一旦算法运行,我们得到一个与最外面的聚类点相交的多边形包络,紧密地拟合形状。如果我们想用这个多边形作为地理围栏,我们会遇到一个概念性的问题:我们是否应该在其周围添加一个缓冲区?我在上面的文章中阐述了这个问题。在面周围添加缓冲区有助于反映位置测量和内在聚类维度的不确定性。但是这些维度是什么呢?用 DBSCAN 工作的时候,我们可以用 ε ,但是用 h DBSCAN 可以用什么呢?

起泡点

很久以前我使用了起泡点技术来生成一个地理围栏的形状。这个想法很简单,因为它涉及到用一个圆代替每个点,然后将它们全部合并,同时保留外部的多边形。下图说明了这个过程。

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

冒泡过程从单个聚类点开始,并在每个聚类点周围放置一个圆圈。然后,该方法合并圆并产生最终形状。(图片来源:作者)

在使用 DBSCAN 的时候,我们可以用 ε 来推导圆半径,但是在使用 HDBSCAN 的时候应该怎么做呢?

H3 六边形

其他文章所示,我们可以使用优步的 H3 六边形从一组聚类点生成地理围栏。选择六边形尺寸是一项要求,因为我们需要确定一个合理的详细程度,以覆盖所有位置而不留间隙。下图显示了这样一种情况,其中有一个断开的六边形。

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

上图显示了 H3 生成的带有间隙的聚类地理围栏。图片由作者用叶子包和 OpenStreetMap 图片制作。

同样,我们可以使用 DBSCAN 的 ε 来获得适当的分辨率,但 HDBSCAN 则不然。

问题定式化

我们可以从 HDBSCAN 生成的集群中提取什么指标来帮助我们完成这些工作?我们希望基于适合基于外壳的地理围栏上的缓冲半径的簇形状、基于气泡的圆的合理半径或单个 H3 六边形的适当边长来计算测量值。

可惜这个问题提法有点模糊。没有明确的线索,我们应该在哪里寻找适当的措施。然而,我们可以说这个度量不是。我们不寻求聚类点之间的最大距离,也不希望最短距离。如果我们想在集群点周围创建一个缓冲区,这些不是要使用的度量。第一项措施对于这个目的来说太大了,而第二项措施可能小到几乎为零。

问题解决方案

我在这里提出的解决方案包括计算从任何一个给定的集群位置到所有其他集群位置的最短距离,并从中得出一个度量。虽然有人可能会认为等价的 ε 应该是这些最小距离中的最大值,这是一个合理的论点,但我在这里提出的解决方案使用统计数据来推导度量。我将在下面解释原因。

然后,我们探索这些距离如何表现,以确定适当的度量。更具体地说,我们将确定这些最小距离的统计分布,作为我们决策的基础。

在这篇文章中,我使用了汽车能源数据集我已经探索很长一段时间的数据。可以在 GitHub 库上跟随文章的代码,重点关注笔记本 1112

最小距离分布

我们从研究每个节点的最小距离分布开始。这种计算意味着循环遍历所有位置,并计算到群集中所有其他位置的距离。考虑到对称距离,我们可以避免冗余计算并提高计算性能。请注意,如果我们使用道路距离,我们将不得不使用更复杂的方法,因为它们缺乏对称性。由于最终的道路限制,从 A 点到 B 点的道路距离不一定与从 B 点到 A 点的距离相同。

有两种略有不同的方法来计算最小距离。第一种方法仅使用平方逐点距离矩阵,而第二种方法使用网络理论。这些方法在大多数情况下是一致的,但在某些情况下会呈现不同的结果。虽然矩阵方法更直接、更快速,但它可能会考虑重复距离,而网络理论方法则不会。当这些方法呈现不同的结果时,前者将小于后者。

距离矩阵方法

我们可以使用对称距离矩阵轻松计算最小距离向量。计算完矩阵后,我们只需要找到最小的列值,忽略对角线,对角线为零。

下面的函数使用两个数组作为输入来计算距离的对称方阵,一个用于纬度,另一个用于经度。注意它是如何通过沿对角线填充矩阵来避免冗余计算的。每一步都需要较小的距离向量,从而提高性能。

上述函数为所提供的位置生成对称的平方距离矩阵。(图片来源:作者)

上面的函数使用了矢量化版本的哈弗辛距离计算,如下所示。

这个函数计算成对的哈弗线距离。平方函数生成器将初始位置广播到具有目标位置的精确尺寸的向量。(图片来源:作者)

一旦我们有了方阵,就很容易得到最小值列表。下面的两个函数说明了这个过程。

为了计算所需的度量,我们必须首先计算距离矩阵。接下来,我们检索列最小值列表(不包括对角线上的零)。输入是一个包含所有集群位置的 Nx2 矩阵,第一列是纬度,第二列是经度。(图片来源:作者)

这个函数的优点是速度快,但是既不能帮助我们直观,也不能排除重复。我们可以使用网络理论的替代解决方案来更好地了解幕后发生的事情,并获得唯一的距离。

网络理论方法

我们可以将平方距离矩阵计算视为所有聚类位置之间距离的网络表示。每个节点是一个位置,而它们之间的边以对称距离作为它们的权重。

现在,我们为每个节点选择最短的边,并删除所有其他的边(简单地说)。由此产生的网络是一棵树,因为它连接所有的节点,没有循环。如果边的权重(位置之间的地理距离)最短,我们称之为最小生成树

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

上图代表了由 NetworkX 包绘制的最小生成树。(图片来源:作者)

我们可以通过使用 NetworkX 包来计算这棵树。下面的代码演示了计算过程。

上面的函数通过计算与距离网络相关联的最小生成树来计算最小距离。(图片来源:作者)

不幸的是,这种方法比基于矩阵的方法慢一个数量级,但排除了重复距离,并提供了最小生成树的图形表示。我们可以将树覆盖在地图上,并连接点,如本文的主图所示。

什么分布?

我们现在有两种方法来计算最小距离列表。接下来的讨论使用最小生成树方法。

为了推断距离的典型分布,我们使用了钳工包,如笔记本 12 所示。在本笔记本中,我们遍历所有集群,计算它们的最小生成树距离,并确定最可能的分布。下表显示了我们的数据集的结果。

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

上表显示了集群距离网络的最小生成树距离的最可能统计分布的频率。最常见的分布是对数正态分布。(图片来源:作者)

如上表所示,大多数集群遵循对数正态分布。第二常见的分布是与对数正态分布相似的伽马分布

提议的衡量标准

利用这些发现,我决定将度量基于对数正态参数: ms (根据 Brilliant 公布的公式计算)。

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

上面的公式定义了对数正态分布的平均值。(图片来源:作者)

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

以上是对数正态分布的标准差公式。(图片来源:作者)

我们计算𝝁和 𝜎 的值作为采样数据的平均值和标准偏差。作为度量,我决定使用以下数量。

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

HDBSCAN 的ε参数的 DBSCAN 当量估计值类似于正态分布的公式,对应于大约 97%的数据。(图片来源:作者)

从最小距离列表中计算集群度量的函数非常简单。

假设对数正态分布,上面的函数根据最小距离计算集群度量。(图片来源:作者)

我们现在可以通过在地图上绘制使用该度量和聚类位置创建的地理围栏来测试这种方法。

解决方案验证

现在我们来看看在绘制 HDBSCAN 生成的集群边界时,这一指标是如何表现的。我们从下图中膨胀的凹形船体开始。

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

上图显示了计算集群的凹面外壳形状,然后使用集群度量对其进行膨胀的结果。您可以看到红色的簇位置,凹形的外壳形状是一条细的蓝线,而膨胀的形状是一条粗线。外部多边形包含 194 个点。(图片来源:作者)

气泡形地理围栏使用相同的聚类度量作为合并圆的半径,以每个聚类位置为中心。如下图所示,生成的形状夸大了点周围的缓冲区。请注意,这源自方法,而非指标。

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

上图显示了合并所有半径等于计算的聚类度量的以点为中心的圆的结果。多边形包含 279 个点。(图片来源:作者)

最后,我们测试了基于 H3 的方法,使用聚类度量来导出六边形细节层次。由于 H3 六边形的固定地理空间性质,缓冲区可能不会按预期工作,因此您可能需要使用乘法因子来调整计算。下面的地理围栏使用的乘法因子为 2。

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

上图显示了 H3 生成的使用紧配合的地理围栏。有 29 个六边形,多边形只包含 45 个点。(图片来源:作者)

下图显示了使用较大乘数(本例中为 3)计算的具有较大 geofence 的同一个聚类。

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

上图显示了一个 H3 生成的地理围栏,使用的是松配合。有八个六边形,多边形只包含 21 个点。(图片来源:作者)

结论

在本文中,我试图推导一个度量来模拟 DBSCAN 的 ε 参数对 HDBSCAN 生成的集群的影响。我对此指标的建议是推断集群集的最小生成树距离的典型统计分布,然后使用平均值和标准偏差的简单函数。我打算找到一个稳健的度量标准,应用于我过去在 DBSCAN 中成功使用的一些地理围栏生成算法。缺少预先为 DBSCAN 定义的 ε 参数意味着没有对度量的明显支持。该解决方案既不是唯一的,也不一定是最好的,但似乎适合手头的任务,特别是当使用膨胀凹面船体和 H3 方法。

参考

【github.com

hdb scan 集群库— hdbscan 0.8.1 文档

H3:优步的六边形层次空间索引|优步博客

网络 X —网络 x 文档

钳工文档—钳工 1.4.1 文档

joo Paulo Figueira 在葡萄牙里斯本的TB . LX by Daimler Trucks and bus担任数据科学家。

数据可视化的奇迹

原文:https://towardsdatascience.com/a-miracle-of-data-visualization-5e966c2e1aa0

意见

提高商业分析质量的正确方法

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

图片来源:https://unsplash.com/photos/JKUTrJ4vK00?utm_source=unsplash&UTM _ medium = referral&UTM _ content = creditShareLink

选择正确的分析工作结果直接影响管理和决策的质量。A17 技术公司的创始人兼首席执行官**https://a17.company/Andrew Bush 在本文中揭示了为什么数据可视化错误会让您的公司损失惨重,以及如何避免重大损失。**

无论你公司的分析团队有多熟练,或者他们的数据和算法有多完整,结果都可能不令人满意。通常,这是由于对工作的不正确的视觉化,而这正是董事、投资者和股东们决策的基础。

可视化的意义是什么?

可视化是数据分析的一个阶段,有助于以信息丰富和互动的方式展示指标的主要趋势、相关性和偏差。为此,使用了各种图形元素。例如,选项卡、图表、信息面板(仪表板)等。

重要的是要理解,可视化不仅仅是一个花哨的报告,而是一个主要的可理解的业务逻辑,有助于做出正确的管理决策。事实是,那些刚开始实施和经常使用 BI 工具的人可能会混淆这些想法。由于向您的高级领导团队提交的数据质量不佳,整个分析值可能会在几分钟内消失。在花了大量时间研究摘要选项卡后,决策者可能会因为不完善或不方便的呈现格式而没有注意到依赖关系。

让我们考虑这样一种情况,将你的分析结果呈现给你的主管,以便对公司做出改变。如果你的数据展示得不好,你的老板就无法在最初的三秒钟内理解信息。他们没有时间研究它,因此只做了粗略的回顾。整个工作证明是无效的。这就是为什么你需要学习如何可视化数据。

商业分析师不仅拥有技能,而且知道呈现数据发现和见解的正确方法,加上为客户需求提供令人满意的解决方案,这些人在就业市场上总是很受重视……也很受欢迎。对数据可视化专家的需求也相当强烈。

专家应该记住什么?

有几件重要的事情应该考虑进去。首先考虑一下受众——那些会审核数据的人。最常见的是公司董事、部门主管、利益相关者、投资者等等。好的视觉效果和公司活动的演示一样。例如,根据出席会议的目标受众,演示看起来会有所不同。****

一个可视化的方法也取决于它的目的。当你必须准备一份关于季度绩效统计动态的报告,让你的主管快速浏览是一回事。在这种情况下,你需要一个简单的图表,它可以在 1-2 秒内被理解,没有进一步的解释,并立即得到解释。然而,当需要可视化来消化复杂的企业流程以实现业务转型时,情况就完全不同了。在这种情况下,它应该非常详细,以便决策者有机会看到手头的整个流程。然后,解释可能需要几个小时,几天,甚至几个月。

此外,当需要呈现业务的利润状况时,例如在季度报表中,可视化可能是一个一次性需求。或者当准备不断更新的仪表板需要可视化时。这是完全不同的情况,它们需要不同的方法。例如,仪表板可视化适合于快速理解,因此,它应该具有最少的信息,以便主管可以快速理解数据。

此外,不管可视化的类型如何,都应该遵循几个基本规则。所有这些都与可理解性有关,代表了数据的正确含义。

最低纲领

首先,谨记少即是多的原则。也就是过多的细节越少越好。例如,避免在同一轴上放置不同的指标,使用 3D 图、阴影和其他花哨的东西。如果不需要,也可以删除图表网格。图表中的线条越多,正确阅读信息就越困难。例如,如果我们有一个图表,其中有几条线显示盈利能力、可用库存等,那么它们应该被分解成单独的图表。一个明显的例外是当我们需要比较数据的时候。当您根据地区或联邦辖区比较公司分支机构的盈利能力时,可能会出现这种情况。

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

在这里你可以找到更多有史以来最差图表的例子。

不管怎样,所有的可视化都是建立在比较的基础上的:用零水平,用过去时期的相似数字,用彩色。如果你的图表有几行,你必须提供一个清晰的描述:哪些值意味着什么。悬疑传说在这种情况下是必须的。此外,不要使用几个 Y 轴:这可能会导致读者混淆,并妨碍更好地解释数据。

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

轴缩放

分析初学者经常犯的另一个错误是轴缩放 (从非零点开始)。这导致不正确的数据解释。因此,整个分析工作的质量受到严重影响。在使用自动化工具时,这种情况经常发生。例如,如果你用百分比来表示一家公司生产线一年的工作量,它可能只从 80%变化到 100%。同时,这些数字本身的范围是从 0%到 100%。默认情况下,一些自动化可视化工具可以通过只显示从 80%到 100%的数字来隐藏从 0 到 80%的值。因此,该图的读者会有这样的印象,即这些值变化很大,而实际上并没有。

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

一个类似的问题是对数图。最好不要使用对数标尺,因为它是非线性的。如果由于某种原因使用了这种表示格式,那么应该明确指出:读者应该理解这是一个对数标度的事实,以及为什么使用它。你绝不应该在下面用小字体的星号来表明这一点。那是一面红旗。

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

使用直方图时也要特别小心。**直方图值应始终按照度量 排序,而不是像通常那样按照字母顺序或随机分布。这种可视化的结果应该是三角形的,从最小到最大显示数字,反之亦然。这种表示格式允许您轻松识别最大值和最小值。有了对情况的清晰了解,将来处理这些数据会更容易。****

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

代表性格式

将公司风格和身份融入你的形象是重要的这意味着包括公司的配色方案和字体等。利用公司品牌手册中的颜色图案是一种很好的做法。因此,分析师应该询问公司品牌手册中是否有单独的数据可视化指南。在较大的公司中,它肯定应该存在,并且还可能包含某种字体、线宽和文本布局。

你还应该考虑颜色和想法之间的心理联系。例如,默认情况下,红色意味着“停止、危险或小心”;绿色表示“去,安全,OK”;蓝色通常是冷的东西;黄色经常标记不重要的东西。这些颜色也相互影响。请考虑前面各地区分支机构盈利能力对比图中的数字示例。如果颜色不同,红色和绿色不得用于区分一个区域的数据和另一个区域的数据。由于心理偏见,数据值可能会被错误地解释。红色的图形可能被消极地感知,而绿色的图形可能被积极地感知。最好是将所有的值都着色成一种中性色,并调整其饱和度(亮度)或使用相近颜色的阴影。

最常用的 BI 工具已经有了默认设置,这有助于以统一的风格准备图表。分析师只需要制作正确的图例并调整颜色。但有时需要为年度股东大会定制可视化效果。在业务分析师完成准备好的数据和完成的仪表板的工作后,这些数据和仪表板应被转发给设计师,设计师以相同的比例重新绘制它们,但使用正确的缩进、排版、颜色、字体和线条粗细。

航行

高质量可视化的另一个原则是了解其用例,即用户将如何利用图表、仪表板和报告集。为此,有必要提供从一般事物到特殊事物的简单导航

导航是图表中某些元素的范围,它有助于切换到各种类型的图表(页面)并执行诸如按年、季度、月、分支等对值进行排序的操作。一般来说,广泛使用的 BI 工具通常都有内置的导航设置,比如按钮过滤器,或者与其他页面的超链接兼容性。但是开发者必须计算公司员工将如何使用特定的信息图表。仅仅依靠自己的观点是不够的。分析师必须观察主管目前如何使用分析。这是通过追踪他们在 Excel 文件之间的点击流、通过通信或信使等评估功能性问题序列来实现的。

交互性和兼容性

****在进行可视化工作时,理解 它是如何交互的是很重要的。静态可视化的一个例子是来自企业 BI 系统的截屏,基于该截屏创建图形、图表或图片。最终,它们都被用于演示文稿或 PDF 文件。它们不能随着时间而改变。

交互式可视化需要不同的方法。例如,大多数分析工具允许创建支持进一步分析的仪表板或报告。它们提供了各种横截面报告和过滤器的选项。其目的是用户可以继续使用所有数据,并根据个人的判断更改图表及其内容。在这种情况下,重要的是尽可能将图表分成单独的报告和报告页面,按照目的、横截面或详细程度进行分类。这里“少即是多”的原则也是相关的。

除此之外,在准备可视化时,值得记住的是将它用于各种类型的设备:个人电脑、笔记本电脑、平板电脑、智能手机等。解决方案可以是准备好的 PDF 文件和仪表板。在准备阶段,考虑到您的内容在大小屏幕上可视化的所有特性是至关重要的,这样开发人员就不必在将来每次数据刷新后检查格式。唉,不幸的是,许多 BI 系统不适合在移动设备上工作。通常,这方面的兼容性是通过利用公司的编程专家来实现的。

此外,必须为可视化正确准备数据,以便加载到报告中的数据量最少。这个问题通常由系统分析师来解决。如果数据太多,加载报告将花费大量时间。如果几秒钟之内没有写好报告,没有人会愿意去做。

总而言之,事实上,负责商业分析数据可视化的专家们处理的是为决策者改善用户体验。他们的任务是确保用户与分析报告或仪表板的最佳交互。可视化系统本身倾向于解决与 UI 相关的问题。

除非另有说明,所有图片均由作者创作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值