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

原文:TowardsDataScience

协议:CC BY-NC-SA 4.0

因果 Python-提升您在 Python 中的因果发现技能(2023)

原文:https://towardsdatascience.com/beyond-the-basics-level-up-your-causal-discovery-skills-in-python-now-2023-cabe0b938715

…并释放 Python 中最佳因果发现包的潜力!

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

图片由佩克斯(【https://www.pexels.com/photo/purple-leaf-459301/】T2)的皮克斯拜拍摄

介绍

T 最近,人们对 Python 中因果关系相关主题的兴趣激增,这带来了大量资源,让人们决定应该关注哪些挑战。

例如,互联网上的许多资源将流行的 NOTEARS 算法(郑等,2018)描述为*“最先进的结构学习方法”*,然而 NOTEARS 已经多次被证明至少在这方面是有问题的(Kaiser &,,2021;Reisach 等人,2021;Seng 等人,2022 年)。这并不意味着笔记总是无用的,但是不加批判地把它应用到你的问题中可能会给你带来更多的伤害。

在这篇博文中,我们将学习如何在 Python 中执行因果发现,讨论所选方法的主要优势,并强调与因果发现过程相关的常见风险

这个博客是系列的一部分,我在这里分享关于 学习 因果关系和 在 Python 中实现 因果模型的实用技巧。

【链接到笔记本康达环境文件下面】

让我们学习如何发现!

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

图片由Alexander Ant@Pexels提供

什么是因果发现?

C 因果发现,也称为因果结构学习表示一套广泛的方法,旨在从观察或干预数据中检索有关因果机制的信息。换句话说,因果发现算法试图解码数据生成过程因果结构,使用该过程生成的数据。

这些算法中的一些允许我们以约束的形式容易地结合先验知识(也称为专家知识)。这有助于缩小问题空间并使算法更容易找到好的解决方案。

在大多数情况下,我们使用 有向无环图 ( DAG )来描述数据生成过程。

因果发现方法的四大家族

因果发现算法有四大类:

  • 基于约束的
  • 基于分数的
  • 功能性
  • 其他(包括混合动力、基于梯度等)

请记住,这种类型学在因果文献中是不一致的,类别也不总是相互排斥的。也就是说,每一种都会带来一些独特的味道。

让我们做一些品尝!

基于约束的方法

基于约束的方法(也称为基于独立性的方法)旨在通过利用三元组变量之间的独立性结构,从数据中解码因果结构。听起来很密集?让我们打开它!

假设我们有一个由三个变量组成的系统: ABC 。每个变量由图中的一个节点表示,在这样的图中我们只能有两条有向边。而且我们把这些变量保持有序,这样边就只能连接节点 ABBC 。这给了我们三个可能的图表。我们在图 1 中展示了它们。

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

**图一。**三种基本的图形因果结构。真实的你的形象。

上图中的箭头表示变量之间的因果关系(这里我们遵循 珀尔对因果关系的定义 )。在图 1 中呈现的每个图形结构都有一个特定的名称。从上到下依次是:

  • 链条
  • 叉子
  • 对撞机(又称不道德(原文如此!)或 v 型结构

独立结构

事实证明,在某些情况下,我们可以在表示数据生成过程的图形结构和作为该过程结果的变量的统计属性之间进行映射。此外,在某些情况下,从数据到图形的另一个方向的映射也是可能的。

在我们在图 1 中展示的三种结构中,对撞机结构有一个独特的性质。如果你的数据集中的任何三个变量都是从碰撞器结构的因果过程中产生的,我们可以使用成对统计独立性测试从观察数据中检索这些信息。这意味着我们可以根据观察到的数据本身重建图表。太刺激了!

不幸的是,使用叉子和链条的事情并不顺利。这两种图形结构的统计独立性结构是相同的,我们不能明确地将它们映射回图形。尽管如此,如果我们足够幸运,相邻的碰撞器也可以帮助我们恢复和定向分叉和链结构的边缘。

如果你想了解更多关于链条、叉子和碰撞器的属性,可以查看布雷迪·尼尔关于主题的视频(12 )或 这部分 我在 PyData 汉堡的演讲或我的 即将出版的关于因果关系的书 的第六章。

PC 算法

基于约束的算法的一个经典例子是 PC 算法 (Sprites & Glymour,1991)。它的名字来自于它的创造者的名字:彼得·斯普里茨和克拉克·格里穆尔。PC 算法是维尔马&珀尔(1990)早些时候提出的 IC 算法的变体。

图 2 展示了 PC 算法的逐步流程。

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

**图二。**PC 算法的逐步可视化(Glymour 等人,2019 年)

为了找到地面真相(图 2 A ) PC 算法从一个全连通无向图开始( B )。接下来,它移除无条件独立变量之间的边( C ),然后移除有条件独立变量之间的边( D )。最后,该算法基于检测到的 碰撞器结构 ( E )找到有向边,并在可能的情况下消除碰撞器相邻边的歧义( F )。

有时,算法可能无法确定所有边的方向。在这种情况下,返回所谓的马尔可夫等价类 ( MEC )。实际上,MEC 意味着你得到一个图,它的一些边没有确定的方向。

PC 算法的一个重要限制是,如果你的数据中有隐藏的混淆,结果可能会被任意误导。PC 算法的推广,称为 FCI(快速因果推理; Sprites 等人,2001 )解决了这个问题(至少在渐近状态下)。

另一个更普遍的限制是,PC 和 IC 等基于约束的算法依赖于条件独立性测试,这在非参数设置中是一项困难的任务。据我所知,这个问题没有通用的非参数无模型解决方案(Azadkia 等人,2021)。

https://aleksander-molak.medium.com/yes-six-causality-books-that-will-get-you-from-zero-to-advanced-2023-f4d08718a2dd 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由Sebastian Arie Voortman@Pexels

基于分数的方法

基于分数的方法通过迭代地生成候选图,评估每个候选图对数据的解释程度,并选择最好的一个来工作。基于分数的方法的一个众所周知的例子是戴维·马克斯韦尔·奇克林(奇克林,2003 年)提出的贪婪等价搜索 ( GES )。

GES

他的算法是一个两阶段的过程。首先,它生成边,然后修剪图形。

GES 的第一阶段从一个未连接的图开始。该算法然后迭代地添加边,计算每一步的分数。这种情况一直持续到分数不能再增加为止。在第二阶段,该算法开始修剪现有的边,以查看分数是否可以进一步提高。所有这些计算都是以贪婪的方式进行的(因此得名)。

类似于 PC 算法,GES 对隐藏的混淆敏感。它也可能无法确定所有边的方向,从而为您提供一个可能图形的 马尔可夫等价类 (因此再次得名)。

根据我的经验,尽管有其理论基础,但在应用于现实世界的数据时,GES 的表现往往不如其他方法。

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

图片由Antoni shk raba@Pexels

功能方法

在某种意义上,大多数函数式方法都可以被认为是基于分数的方法,因为它们在某种程度上涉及某种拟合优度计算。另一方面,它们的机制不同于后者。经典的泛函方法,如 LiNGAM ( 线性非高斯无环模型;Shimizu 等人,2006 年)利用数据中的分布不对称性,而不是(贪婪的)边搜索,以便从数据中检索因果关系。

男性生殖器像

L iNGAM (线性非高斯非循环模型)由 Shohei Shimizu 及其同事于 2006 年首次提出。原始方法使用 独立分量分析 ( ICA )来检索关于数据生成过程的信息。其后来的变体 DirectLiNGAM (Shimizu 等人,2011 年)利用了线性模型和基于内核的独立性度量。

LiNGAM 背后的两个主要假设是:

  • 没有隐藏的变乱
  • 所有(或除一个之外的所有)误差项都是非高斯的

也就是说,人们对 LiNGAM 提出了各种扩展,允许将该模型应用于具有隐藏混杂(霍耶等人,2008 年)或周期(拉塞达等人,2008 年)的场景。

LiNGAM 背后的主要思想是相对简单。想象一个简单的线性系统,只有两个变量 XY ,其中 X 导致 Y 。您可以对该数据进行两个方向的线性回归:在上回归YX(X→Y)或者在Y**(Y→X)上回归 X 。如果数据中的误差项是高斯型的,那么这些模型不会告诉你任何关于因果方向的信息。两个模型的残差将是完全独立的。**

然而,如果你的误差项是非高斯的…

我们可以打破对称!

事实证明,当我们试图对非因果方向建模时,非高斯数据将迫使线性回归返回相关残差**。**

图 2 展示了一个简单实验的结果。

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

****图二。当回归真实模型 X 的高斯和非高斯数据时的原始数据和残差- > Y .左半部分:在 X 上回归 Y;右半部分:在 y 轴上回归 X 轴。真实的你的图像。

请注意,对于高斯误差项(顶行),当我们回归YonX**(左)和XonY(右)时,残差看起来非常相似。对于非高斯数据(底行),残差在因果方向上不相关(Y ~ X);左),但在非因果方向上变得相关(X ~ Y;对)。**

其他方法

这些方法是一个庞大的范畴!我选择了一种方法让我们今天讨论。该算法被称为 GOLEM ,由 Ignavier Ng 及其同事在他们的 NeurIPS 2020 论文中介绍(Ng 等人,2020)。 GOLEM 可以归类为基于梯度的方法**(这意味着它使用梯度下降进行优化),在某种意义上,它也是一种基于分数的方法,因为我们在途中计算数据似然分数。**

傀儡有两个变种**😗*

  • 魔像 EV
  • 傀儡女

Reisach 等人(2021)已经表明 GOLEM EV 在非标准化数据上优于它的 NV 对应物。

不流泪

GOLEM 是 NOTEARS 算法的继承者(郑等,2018)。NOTEARS 是革命性的,因为它是第一个将结构学习框定为纯粹的连续优化问题的算法(在某些情况下,它减少了 DAG 搜索空间爆炸的问题,这种爆炸随着节点数量的增加而超指数地增长,但它并不总是这样做;Reisach 等人,2021 年)。

尽管开始时很有希望,但 NOTEARS 被反复证明不适合稳定的因果发现(凯泽&希波什,2021;Reisach 等人,2021;Seng 等人,2022 年)。虽然 GOLEM 不能解决 NOTEARS 带来的所有问题,但是根据我的经验,它在实践中的某些情况下效果很好。

要了解更多关于傀儡如何工作的信息,请查看 Ng 等人的文章。

** **

准备好把手弄脏了吗?

我城堡的国王

先介绍一下今天博文的主人公——g castle

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

图三。 gCastle 标志。来源:https://github . com/Huawei-Noah/trustworthyAI/tree/master/g castle

g 城堡 是由华为诺亚方舟实验室开发的开源库。该软件包为我们提供了一个令人惊叹的最新的因果结构学习工具包,包括:

  • 数据相关工具(包括模拟和预处理)
  • 一组广泛的因果发现算法****
  • 评估指标

当前可用算法的完整列表可在 此处 获得。

据我所知,这是****最大的最完整的最新的因果发现算法列表,你可以在任何开源的因果 Python 包中找到。****

你知道什么是最好的吗?这个名单正在系统地增长

gCastle 的一个很大的优势是,它为我们提供了一个统一的、非常直观的、优雅的 API,用于与各种因果模型进行交互。忘记加载五个不同的因果发现包,其中两个移植到 R,每个都有完全不同的 API,以便比较几个经典算法。 gCastle 让这一切变得简单多了!

但是不要把我的话当成理所当然。你自己看吧。

我们开始吧!

在这一节中,我们将使用 gCastle 实现并比较四种因果发现算法:

  • 电脑
  • GES
  • ICA-LiNGAM
  • 傀儡

先说导入和一些基础设置。

****代码块 1。导入和基本设置

我们导入os模块来修改 gCastle 的环境变量,并将库的后端设置为 PyTorch。我们导入OrederedDict来很好地组织我们的实验,导入networkx来可视化图形。

接下来,我们有几个来自castle的对象(这就是 gCastle 如何出现在 Python 的名称空间中):

  • GraphDAG用于绘制邻接矩阵
  • MetricsDAG用于自动化指标计算
  • 用于生成模拟数据的DAGIIDSimulation
  • 型号:PCGESICALiNGAMGOLEM

开始简单

我们将从实现图 2 中的例子开始。我们将根据图 2 中的图 A 生成一些线性高斯数据,并使用 PC 算法从数据中恢复该图的结构。我们的数据集将由 1000 个样本组成。

****代码块 2。按照图 2A 所示的结构随机生成 1000 个样本。

让我们实例化并拟合模型,并打印出学习到的图表。我们之前说过, gCastle 为我们提供了一个统一的因果发现模型的训练 API。为了拟合模型,我们使用模型的.learn()方法。

****代码块 3。实例化并拟合 PC 算法。模型训练完成后,我们打印出学习过的结构。

注意,所学习的图形被表示为 邻接矩阵

让我们绘制学习过的图形,并将其与原始图形进行比较。

****代码块 4。绘制学习过的图形。

我们使用networkx将邻接矩阵投射到一个nx.DiGraph()对象上,并绘制它。途中,我们重新标记了节点,以便于解释。

图 4 呈现学习图形(右)和地面实况(左)。

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

****图 4。来自图 2A 的原始图形(左)和由 PC 算法学习的图形(右)。来源:Glymour 等人,2019(左),yours truly(右)。

两种表示看起来不同,但是它们表示相同的图(如果有疑问,写下它们中每一个的有向边列表;名单是一样的吗?).

这意味着 PC 能够完美地恢复结构!恭喜 PC!🎉

波涛汹涌的水域

在第一个例子中,PC 算法非常有效。这是个好消息!现在是时候看看它在更复杂的情况下表现如何了。

我们将探索 PC 算法的能力,看看它与其他三种算法相比如何。

让我们从生成一个有 10 个节点和 15 条边的随机 DAG 开始。我们将使用一个无标度网络来生成我们的图。然后,我们将使用此 DAG 作为结构模型来生成三个不同的数据集:

  • 线性高斯
  • 线性指数
  • 非线性二次型

并将它们存储在 Python 字典中。参见代码块 5 实现。

****代码块 5。生成一个随机 DAG 和三个不同的数据集。

注意,在双 for 循环中,我们为每组条件(线性高斯、线性指数等)创建了一个新的IIDSimulation对象实例。您可以通过检查代码块 5 底部的打印输出来验证我们的数据集是否属于类别castle.datasets.simulator.IIDSimulation

我们现在准备运行我们的比较。我们首先创建一个 Python 字典,用算法的名称作为键,用 gCastle 对象表示算法的值。

接下来,我们遍历数据集,并在每个数据集上训练每个模型。请注意,为了确定算法的迭代次数,我们实例化 GOLEM 的方式与其他模型不同。检查代码块 6 中的执行情况。

****代码块 6。在三个数据集上训练所有四个模型,并打印出结果。

在每次迭代中,我们绘制真实 DAG、发现的 DAG,并打印出六个评估指标:

结果

图 5 显示了 SHD 方面的结果。要获得完整的结果,请查看笔记本(下面的链接)。

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

****图 5。每个数据集/模型组合的 SHD。真实的你的形象。

零 SHD 意味着模型能够完美地恢复的真实结构。正如我们所见,GOLEM 平均表现最好,但在非线性二次数据集上表现很差。这个数据集是所有算法中最难的。请注意 LiNGAM 如何在线性指数数据上表现良好,而在其他两个数据集上表现不佳。原因是线性指数数据集是唯一符合模型假设(线性、非高斯、非循环)的数据集。与其他模型相比,GES 的表现严重落后,但在最具挑战性的数据集上却给出了最佳结果。也就是说,我们需要记住,SHD 并没有讲述整个故事。

我鼓励您检查笔记本以获得完整的结果,并从其他角度分析数据(例如,错误发现率或精确度)。根据您的用例,可能 FDR 对您来说比总体正确性更重要。

包装它

恭喜你!你坚持到了最后!👏🏼👏🏼👏🏼

让我们快速回顾一下!

在今天的博文中,我们了解了四类因果发现方法。我们讨论了它们的一些主要优缺点,并使用 awesome gCastle 库在 Python 中实现了它们。

读完这篇博文和附带的代码后,你应该能够将讨论过的技术应用到你自己的数据集和问题中。

最后的想法(不要错过!)

C 因果发现是一个难题,在使用因果发现方法时,总是格外谨慎是有好处的。在进入下一阶段之前,确保检查两次您的结果,并使用任何可用的验证方法(专家知识、 反驳测试 ),并记住在现实世界中,很难从因果发现方法中获得任何 保证,尤其是如果您无法确定所有相关变量是否都出现在您的数据集中。****

如果您有机会在感兴趣的系统上执行最小干预**,来自这种干预的数据可以用来以更可靠的方式验证您的因果图。有一些有趣的方法可以让你在这种情况下选择最佳的干预措施,但那是另一篇文章的内容了。**

要了解更多关于因果发现和因果推理的知识,请加入我们快速发展的社区,地址:【causal python . io

代码和环境

笔记本和环境文件在这里:

**https://github.com/AlxndrMlk/blogs-code/tree/main/Beyond The Basics! Level Up Your Causal Discovery Skills in Python Now (2023) **

脚注

注意,如果使用例如互信息来测试(不)依赖性,这甚至可以用于高度非线性和/或非单调数据。也就是说,为了使其工作,需要满足某些条件(例如,忠实假设)。

最初的论文建议贝叶斯信息准则(BIC)作为一个分数,但历史上也使用过许多其他分数。

结构汉明距离类似于汉明距离SHD 通过计算将前者转变为后者所需的边插入、删除和翻转(反转)次数来测量真实图和恢复图之间的距离。

参考

Azadkia,m .,Taeb,a .,和 Buhlmann,P. (2021 年)。一种快速的非参数局部因果结构学习方法。

奇克林博士(2003 年)。基于贪婪搜索的最优结构识别。 J .马赫。学习。第 3507-554 号决议。

Glymour,c .,Zhang,k .,& Spirtes,P. (2019)。回顾基于图形模型的因果发现方法。遗传学前沿,10。**

Hoyer,P.O .,Shimizu,s .,Kerminen,A.J .,& Palviainen,M. (2008)。用带隐变量的线性非高斯因果模型估计因果效应。 Int。j .大约。原因。,49 ,362–378。

凯撒和希波什(2021)。注释不适合因果图发现。 ArXiv,abs/2104.05441

拉塞达、斯皮尔特斯、拉姆齐和霍耶出版公司(2008 年)。通过独立成分分析发现循环因果模型。人工智能不确定性会议

吴,张,张(2020)。稀疏性和 DAG 约束在学习线性 DAG 中的作用。 ArXiv,abs/2006.10201

Reisach,A.G .,Seiler,c .,& Weichwald,S. (2021 年)。小心模拟匕首!加性噪声模型中的变量可排序性。ArXiv,abs/2102.13647 。

Seng,j .、Zecevic,m .、Dhami,D.S .、k .和 Kersting(2022)。撕开注释:通过方差操作控制图形预测。 ArXiv,abs/2206.07195

Shimizu,s .,Hoyer,p .,Hyvä rinen,a .,和 Kerminen,A. (2006 年)。用于因果发现的线性非高斯无环模型。j .马赫。学习。第 7 号决议,2003 年至 2030 年。

Shimizu,t . in azumi,Sogawa,y .,Hyvä rinen,a .,Kawahara,y .,Washio,t .,Hoyer,P.O .,& Bollen,K.A. (2011 年)。DirectLiNGAM:学习线性非高斯结构方程模型的直接方法。 J .马赫。学习。第 12 号决议,1225–1248。

Spirtes,p .和 Glymour,C. (1991 年)。稀疏因果图的快速恢复算法。社科计算机评论9 (1),62–72 页。

Spirtes,p .,Glymour,c .和 Scheines,R. (2001 年)。因果关系、预测和搜索,第二版。麻省理工出版社。

维尔马和珀尔(1990 年)。因果模型的等价与综合。第六届人工智能不确定性会议论文集,220–227。

郑,x .,阿拉干,b .,拉维库马尔,p .,&邢,E.P. (2018)。无泪 DAGs:结构学习的持续优化。神经信息处理系统

这篇文章中的一些书籍链接是亚马逊会员链接,通过使用这些链接购买,你将支持作者(或他们的家庭)和我的写作(我将从你的每一笔购买中获得一小笔费用)。谢谢大家!

超越云:用 Python 代替 Word Cloud 的 4 种可视化

原文:https://towardsdatascience.com/beyond-the-cloud-4-visualizations-to-use-instead-of-word-cloud-960dd516f215

使用 Python 创建 4 种可视化效果,可以提供比 Word Cloud 更多的信息

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

SpaceX 在 Unsplash 上拍摄的

单词云是一种可视化工具,可以显示从文本或文档中检索到的单词集合。通常,在词云中使用文本大小和文本颜色来显示词的频率。结果第一眼就能引起人们的注意。

说一下词云特征,下面我们来对比两张图。第一个是包含一篇文章前 100 个词的词云。第二个是对比同样 100 个单词量的条形图。可以注意到条形图里的字很难读。另一方面,也可以看出云这个词善于处理很多词。

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

词云显示了出现在维基百科气候变化文章上最多的前 100 个词。图片由作者提供。

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

显示 100 个单词出现频率的条形图。图片由作者提供。

单词云能够处理许多单词,并有助于粗略比较频率。

然而,云这个词有一些缺点。当处理太多单词时,很难判断哪个单词比其他单词出现得更频繁。此外,文档通常由节组成,如段落或章节。Word Cloud 仅显示整个文档中单词的出现频率。它没有在每一部分提供细节。

本文将展示 4 个 Python 代码的可视化,它们可以处理 Word Cloud 的限制。

让我们开始吧…

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

Treemap 是本文推荐的一个可视化示例,可以用来代替 Word Cloud。图片由作者提供。

获取数据

例如,我将使用维基百科上的“气候变化”文章中的文字。环境问题现在是一个全球现象。我想看看我们能从这篇文章中得到什么信息——从导入库开始。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import urllib
import re
import wikipediaimport nltk
from nltk.corpus import stopwords%matplotlib inline

继续下载并清理文本。

wiki = wikipedia.page('Climatechange')
text = wiki.content# Clean text
text_c = re.sub('[^A-Za-z0-9°]+', ' ', text)
text_c = text_c.replace('\n', '').lower()
text_c

为了与后面四次可视化的结果进行比较,让我们用获得的数据创建一个单词云。我遵循了这篇见解深刻的文章中有用且实用的步骤:Python 中的简单单词云

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

词云显示了出现在维基百科气候变化文章中最多的前 100 个词。图片由作者提供。

准备数据

为了简化这个过程,我们将定义一个函数来创建一个数据帧。由于我们必须处理多个单词,使用颜色将有助于我们区分它们。我们还将定义另一个函数来获取一个颜色字典供以后使用。

对文本应用函数以获得数据帧

df_words = get_df(text_c)
df_words.head(10)

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

可视化

有趣的部分来了。除了创建图表之外,还会推荐一些方法来改善结果。我们将要使用的四个可视化工具:

  • 条形图网格
  • 旭日图
  • 树形图
  • 圆形包装

1。将多个条形图转换为条形图网格。

如前所述,由于文本区域较小,简单的条形图显示文本的能力有限。我们可以通过创建多个条形图并组合它们来重新排列它们,以节省空间。

瞧啊。!

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

显示前 100 个单词的条形图网格。图片由作者提供。

通过比较主题来改进条形图的网格

文档通常由章节组成,如章节或段落。维基百科上的气候变化文章也由术语、观测到的温度上升等许多内容组成。比较这些部分之间的词频将有助于我们看到更多有见地的细节。

首先手动创建一个内容列表,然后使用列表元素分割文本。

接下来,清理文本并应用定义的函数从每个文本中获取 DataFrame。在下面的代码中,我将创建一个数据帧,其中包含每个数据帧中前 10 个最常用的单词。

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

准备一个颜色字典和每个数据帧的列表。

现在一切都准备好了,让我们得到包含气候变化文章中每一个内容的前 10 个最常用词的条形图网格。

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

显示每个内容的前 10 个单词的条形图网格。图片由作者提供。

可以看出,纵观整篇文章,‘气候’是出现最多的词。然而,当文章按照内容划分时,“气候”一词并没有出现在减少和回收排放的内容中。原来‘能量’是这个内容中出现次数最多的词。

2.从圆环图到旭日图的层级增加

第二个可视化是旭日图。我们将从一个具有相同基本概念的环形图开始。下面的代码展示了用 Plotly 创建圆环图的简单方法。

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

显示前 30 个单词的环形图。图片由作者提供。

结果甜甜圈图几乎满了,只有 30 个字。我们可以通过将图的层次从只有一层增加到两层来改进圆环图。第一层是内容,第二层是每个内容的前 10 个单词。继续准备数据。

接下来,创建一个应用于每个级别的颜色字典。

最后,绘制旭日图。使用 Plotly 的一个好处是获得的图表是交互式的。你可以通过点击内容来玩结果。关于创建旭日图的更多信息:链接

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

显示每个内容的前 10 个单词的旭日图。图形是交互式的;点击内容即可播放。图片由作者提供。

3.使用带有树形图的数字

Treemap 是一个很好的图形,它使用图形来可视化分层数据。到目前为止,我们已经有了绘制树状图的数据。我们可以直接使用下面的代码。从一个简单的包含前 100 个单词的树形图开始。

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

显示前 100 个单词的树形图。图片由作者提供。

改进树形图:增加层级

让我们进一步创建一个带有层次结构的树形图。第一层是内容,第二层是每个内容的前 10 个单词。下面的结果是交互式的。你可以通过点击内容来玩这个图表。关于创建树形图的更多信息:链接

显示每个内容的前 10 个单词的树形图。图形是交互式的;点击内容即可播放。图片由作者提供。

4.用圆形包装将气泡分组。

最后一个可视化是圈包装。实际上,这是一个没有重叠区域的气泡图。我们将使用 circlify 库来计算气泡的大小和位置。

用文章中出现最多的前 30 个单词画圈包装。

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

显示前 30 个单词的圆形包装。图片由作者提供。

改进圆形包装:聚类

可以通过聚集每个内容的前 10 个单词来改进循环包装。为此,我们需要改变数据格式。使用 circlify 库进行计算所需的格式:“id”、“datum”和“children”

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

使用 circlify 库计算每个簇的气泡的大小和位置。

最后,绘制圆形包装。关于创建圆形包装的更多信息:链接

哒哒!!

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

显示每个内容前 10 个单词的圆形包装。图片由作者提供。

摘要

单词云是另一种可视化技术,它有优点也有缺点。适合引起注意,可以显示很多字。然而,Word Cloud 似乎不是提供有见地信息的好选择。

本文展示了 4 种可以用来代替单词云的可视化方法。除了具有吸引力和能够处理许多单词之外,它们还能传递更多的信息。除了展示代码,本文还推荐了改进它们的方法。

我相信还有其他这里没有提到的图可以用来代替 Word Cloud。本文只是给出了一些实用的思路。如果您有任何问题或建议,请随时留下评论。

感谢阅读

以下是您可能会感兴趣的关于数据可视化的其他文章:

  • 8 用 Python 处理多个时序数据的可视化(链接)
  • 用 Python 实现的 9 种可视化比条形图更引人注目(链接
  • 9 用 Python 可视化显示比例,而不是饼状图(链接)
  • 用 Python ( 链接)最大化聚类散点图

参考

超越数字

原文:https://towardsdatascience.com/beyond-the-numbers-5f20b919ac5b

置信区间如何帮助集中注意力和简化分析

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

图片由作者使用稳定扩散

我们相信数字。如果一份报告告诉我们一家企业上周收到了 1,000 份订单,我们相信这家企业收到了 1,000 份订单。事务是历史记录的问题,它们的计数是一个简单的算术运算。如果有人问:“多少?”,我们知道答案。

理解 1000 份订单对一家企业意味着什么要困难得多。有人可能会问,1000 份订单是“好”、“很好”,还是仅仅是“可以”我们可以将本周的结果与之前的结果进行比较,给我们一个比较的基础,但我们仍然需要一种方法来将结果(或它们的差异)转化为定性的术语。

同样,有人可能会问,1,000 份订单是否足以让企业实现其长期目标。要回答这个问题,我们需要查看多周的数据,并从每周的涨跌中分离出主导趋势。一个简单的滚动平均值可能会起作用,但我们仍然需要决定将多少周包括在我们的平均值中,这可能会对我们的答案产生重大影响。

尽管我们相信数字,但它们只能告诉我们这么多:我们离“有多少”越远,回答问题就变得越难,我们需要更多的上下文来解释数据。

如上例所示,查看多个数据点会有所帮助。不同时期的差异、滚动平均值和其他计算方法有助于我们了解结果的趋势。这些通常与其他增强功能结合在一起,如颜色编码和上/下箭头,它们指示运动的方向,但不告诉我们任何关于其重要性的信息,这实际上可能导致数据的错误解读

更有效的方法是使用置信区间。虽然用我们确定的数字来看置信区间似乎违反直觉,但这种方法有坚实的统计基础和许多令人惊讶的好处。

考虑一个模拟过程。对于每个报告期,我们将使用五个骰子的平均值作为结果。下表包含了前六个周期的结果及其跨周期(PoP)差异。

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

趋势图便于查看结果(y-轴)随时间的变化(x-轴)以及 PoP 差异:

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

图 1

在这两种报告格式中,增加以绿色显示,减少以红色显示。然而,正如所暗示的,颜色的这种常见用法实际上可能会适得其反,使任何变化——向上或向下——看起来都很重要。

想象一下当最初的几个结果到达时解释它们。第一阶段的结果是 4.4。此时,我们不知道 4.4 是高、低还是典型,但它设定了我们的期望。

下一期的成绩是 3.2,下降了 1.2。我们仍然不知道 4.4 和 3.2 是否是好结果,但红色强化了任何下降都是朝着错误方向前进的概念。如果这是一个真实世界的业务流程,我们会倾向于采取纠正措施。现在确定哪里出了问题还为时过早,但我们仍然可能决定延长工作时间,重新分配资源,或者做任何对这个特定过程有意义的事情。

第三阶段的结果是 3.4,有小幅增长,但令人放心。如果我们确实采取了纠正措施,我们可能会认为它是有效的。

然而,第四阶段的结果抹去了前一阶段的收益(甚至更多)。也许我们需要加倍努力或者尝试一些新的东西。

然后,相反的情况发生了:第 5 期抹去了前一期的损失(甚至更多)。到了第 6 期,我们又回到了起点:4.4。到目前为止,所有的得失加起来都不算什么。

因为我们正在谈论掷骰子,这实际上是我们应该期待的。单个结果是随机的,所以它们之间的差异也是随机的。如果我们继续掷骰子,我们可以更清楚地看到这一点。

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

图 2

50 次滚动后,平均 PoP 差异为 0.8,但所有差异的总和仅为-1.2,平均为-0.02,四舍五入为 0.0。虽然流行差异看起来很大,但它们最终会相互抵消。

让我们考虑一下如何在报道中利用这一事实。

因为我们知道 5 骰子滚动的统计特性,所以我们可以为我们的结果计算 95%的置信区间:3.5±1.5。这意味着所有结果的平均值将是 3.5,我们可以预计 95%的结果在 2.0 到 5.0 之间。(更准确地说,结果 1.5 的 95%将包含 3.5。)在这种情况下,50 个结果中的 48 个(96%)落在这些限制之间。

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

图 3

周期 8 和 28 是唯一超出这些限制的结果。这使他们成为进一步调查的良好候选人。

记住,这并不意味着会有什么有意义的发现。同样,我们的例子是基于掷骰子,所以所有这些结果都是随机的。(有 50 个结果和 95%的置信区间,我们应该预计有两三个结果落在我们的置信区间之外。)但是,在现实世界的业务流程中,我们不知道是什么导致了第 8 期和第 28 期如此不同。我们需要分析它们来找出答案(当然,知道可能什么也没有)。

然而,真正的好处是,我们可以忽略其他时期的结果,因为这些结果在预期之内。除了表面现象,起伏并不意味着什么:它们是过程中自然变化的副产品。

不必分析这些时期的结果将为我们节省大量的时间。图表让差异变得显而易见。在图 2 中,我们对每一个得失进行了颜色编码,让人们觉得每一个彩色点都是有意义的。(像圣诞树一样亮了!)但是,在图 3 中,我们将颜色的使用限制在两点,这使得图表更容易阅读,并将我们的注意力集中在更可能感兴趣的结果上。

此外,我们将降低对业务得出错误结论的风险。人们非常善于发现模式——即使它们并不存在——所以如果我们上下分析,假设有东西可以发现,我们很有可能发现一些东西。如果这导致对什么可行什么不可行的错误结论,我们可能会对企业造成弊大于利的风险。

现实世界的复杂性

当然,如果这是一个真实世界的业务流程,我们就不会知道它的统计特性,所以我们就不能预先计算我们的置信区间的极限。幸运的是,有一个变通办法:我们可以使用结果本身来推断我们的过程的统计属性。让我们再次使用我们的骰子例子来看看这是如何工作的。

每个时期的结果都告诉我们更多关于这个过程的信息。在第一阶段之后,我们只有一个结果,但它设定了我们对结果的预期。在第二阶段之后,我们有两个结果,所以我们可以更新我们的期望,我们开始看到结果会随着时间的推移而变化。

从统计学上来说,这些是平均值( x_bar )或平均值,这是我们的期望值,以及标准差( σ ),它告诉我们单个结果与期望值的差异有多大。

仅仅经过两个周期,我们就可以计算两者:

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

从这些数据中,我们可以计算出一个置信区间,它将告诉我们下一个周期的结果是否与我们目前所看到的有显著的不同。这一特定过程是中心极限定理的经典示例,因此可以安全地假设我们的结果将遵循正态分布,这意味着 95%的置信水平大约为 2 σ (即 1.96 σ )。

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

鉴于我们目前所知的——这并不多——如果第三阶段的结果在 2.14 和 5.46 之间,我们不应该感到惊讶。事实证明,第三阶段的结果是 3.4,因此在预期范围内,这意味着结果是而不是与之前的值有显著差异。

现在我们有了一个新的结果,我们可以通过重新计算我们的累积平均值、标准差和置信区间来更新我们对该过程的理解,我们可以用它来评估下一个新的结果。

下表显示了前六个周期的置信区间。请注意,我们总是将最近的结果与前期的置信区间进行比较,如下所示。我们不能在置信区间的计算中包括新的结果,否则我们将使用结果来验证它本身。

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

随着每一个新的时期,我们进一步完善我们对这一过程的理解,我们推断出的统计数据就越接近真实的参数。下图显示了我们的推断极限如何收敛于理论极限,以及它们之间的差异如何缩小。

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

图 4

尽管极限之间存在差异,但推断区间和理论区间并没有导致不同结论的点。(然而,这是可能发生的,我们稍后会看到。)

更多现实世界的复杂性

大多数真实世界的场景比掷骰子更复杂。典型的业务流程将包括我们的置信区间需要考虑的长期趋势(如增长)和季节性变化(如假日销售)。

预测提供了一个方便的解决方案。和以前一样,我们使用历史结果来发展对业务流程的理解。不过,在这种情况下,预测算法完成了大部分工作。我们只需将我们的数据传递给算法,并要求它预测未来的一段时间,这种技术被称为一步到位预测。预测将预测下一期的结果(即点估计)和一个置信区间(即预测区间),我们可以用它来评估实际结果。

虽然从统计学到机器学习的飞跃可能看起来很大,但预测是上述概念的逻辑延伸。事实上,如果我们使用 R 的 寓言 软件包中的均值方法,我们会得到一个与我们手工计算的图表非常相似的图表。

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

图 5

下面是使用寓言的 tslm 方法(时间序列线性模型)建立的一步预测,它更好地说明了其他算法如何捕捉趋势和季节性(这是均值方法无法做到的)。

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

图 6

前几个结果(周期 1-4)遵循一个负趋势,该算法预计该趋势将继续,因此前几个预测间隔(周期 4-5)低于由均值方法预测的间隔。

然而,期间 5 与早期趋势相反:预测值为 2.1(显示为灰色 x),但实际结果为 3.6。该算法快速适应周期 6 的较高点估计和较宽的预测区间。

一旦算法看到足够多的增加和减少,它会将它们识别为过程中的自然变化,我们的预测区间的极限再次收敛于理论极限。

然而,周期 5 特别有趣,因为它也是一个假阳性的例子。它落在我们推断的区间界限之外,但是在理论区间界限之内。然而,假阳性通常不是一个问题,因为我们可能想要调查任何与我们之前看到的明显不同的结果。

周期 8 是相反的,一个假阴性的例子。任何时候,当我们的预测区间的界限比理论区间的界限更宽时,我们就有丢失结果的风险,这些结果需要进一步的检验。一个简单的解决方法是基于较低的置信水平(例如 80%)计算第二个区间,以识别出有些令人惊讶,但仍然值得我们关注的结果。

事实上,拥有多个置信区间是确定定性术语(如“好”、“很好”和“还行”)对您的企业可能意味着什么的简单方法。68–95–99.7 规则—维基百科,基于 σ 的整数倍(1 σ ,2 σ ,3 σ ),是一个方便的起点,但是您可以使用对您的过程有意义的任何限制集。

最终考虑

在使用这些技术之前,你需要确保过程中的方差是一致的,不管结果的大小或顺序如何(见同方差和异方差——维基百科)。如果你进行预测,你还需要对算法和准确性措施做出决定(见预测——维基百科)。一旦你开始跟踪结果,你会想要监测它们的趋势变化,这些变化表明过程已经发生了根本性的改变(见变化检测——维基百科)。

幸运的是,有很好的方法来解决这些问题。而且,在大多数情况下,努力是值得的。置信区间给了我们解释结果的强大工具。他们利用可用数据的完整历史,将最新结果放入上下文中,从而更容易评估该结果是我们应该调查还是应该忽略。相反,在没有置信区间的情况下查看业务结果就像阅读一页上的文字,但忽略句子:你可能能够理解单个数字,但你会错过它们的组合意义。

超越理论:艾的务实一面

原文:https://towardsdatascience.com/beyond-theory-ais-pragmatic-side-7bc1bcc72f98

有一种倾向是用一定程度的抽象来讨论人工智能。

也许是为最新的大型模型提供动力的复杂数学,或者是围绕安全性的同样棘手的争论。也许对于我们许多人来说,弥合一个带着未来主义乐观气氛(偶尔带点恐惧)的概念和一项已经存在的技术之间的心理差距仍然是一个挑战,这项技术正在改变我们的工作、创造和生活方式。

我们最新的推荐读物集中于后者。这些文章都是关于实际用例,人工智能应用的本质方面,以及其他对你们中的修补者有吸引力的相关主题。它们不需要高深的专业知识,只需要适度的好奇心。尽情享受吧!

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

照片由海莉提供线索Unsplash

  • 与 AI 合作的法律后果 。当然,权力越大,责任越大,但是风险和潜在的危害也不远了。欧盟具有里程碑意义的人工智能(AI)法案要求从业者在日益复杂的法律、政治和道德领域中导航,Ayush Patel 的概述是开始了解当前约束和最佳实践的有用地方。
  • 亲自动手进行文本生成。BLOOM 是由 Big Science 发布的一个新的大型语言模型,由于其可访问性、开源状态和大小,在最近几周引起了很大的轰动。丹妮·塞隆尝试了一下,然后回来报告了让布鲁姆运转起来的实际步骤。(Danie 还分享了一些有用的代码片段,以防你想自己尝试一下。)

如果你已经走到这一步了,你肯定能接受更多的阅读建议,不是吗?我们希望如此,因为我们最近发表了一些很棒的文章:

我们希望你喜欢本周的集锦!如果你愿意支持我们的工作,为你带来数据科学、机器学习和人工智能方面的最佳成果,请考虑成为一名中级会员

直到下一个变量,

TDS 编辑

机器学习中的偏差和方差

原文:https://towardsdatascience.com/bias-and-variance-for-machine-learning-in-3-minutes-4e5770e4bf1b

什么是偏差和方差,这对你的机器学习模型意味着什么?

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

约翰-马克·史密斯在 Unsplash 上的照片

偏见

机器学习中的偏差是指使用训练数据时,模型预测与实际目标变量之间的差异。当算法不能捕获现有特征和目标值之间的相关关系时,高水平的偏差会导致模型中的欠拟合。然而,与此相反的是,当对训练数据出现很少或没有偏差时,我们可能会看到过度拟合。这意味着该模型已经学习了太多训练数据的细微差别,可能没有用。您可以将此视为训练数据中模型指标的性能,如准确性、R 或偏差。

差异

机器学习模型的差异取决于模型准确预测未知数据目标的能力。因此,它通常被称为与测试看不见的数据相关的误差。这并不关注模型的整体准确性,而是简单地测量模型估计中的分布或不确定性。这可以被看作是您在不可见的测试数据中选择的性能指标与您的训练数据相比的差异,例如训练 R 为 0.98,但是在不可见的数据上 R 值的分布为 0.7、0.6 和 0.8。

偏差-方差权衡

在机器学习的建模阶段,有必要做出会影响模型中偏差和方差水平的决策。当构建监督机器学习模型时,目标是实现最准确预测的低偏差和方差。这意味着当涉及到训练和测试数据时,我们必须处理模型欠拟合和过拟合的可能性。

通过这种方式,我们可以认为偏差是模型相对于目标的准确程度,而方差是预测相互之间的关联程度。我们的目标是在创建和训练我们的模型时,既要有低偏差(即准确)又要有低方差(即始终准确),但这两者之间往往有所取舍。

这种情况的一个例子是,当过度拟合训练数据时,模型可能非常精确,因此它将具有低偏差,但是它可能对看不见的数据具有高方差,因为模型已经学习了训练数据的细微差别。我们可以尝试降低模型的过度拟合程度,使其能够概括基础数据中的总体趋势,这可能会增加模型相对于训练数据的偏差,目的是减少看不见的数据的方差。因此,这两者之间通常存在一定程度的权衡,可以设想为:

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

作者图片

在这种情况下,我们试图在欠拟合和过拟合之间找到一个中间点,在这个中间点上,我们有尽可能低的验证误差,但又不会太接近低训练误差。这可能是一个很难实现的平衡,但它将取决于您可用的数据和您决定实现的模型的结构。

如果你喜欢你所读的内容,以及如何跟上我和其他了不起的作者的文章,请随时使用我下面的推荐代码注册 medium

https://philip-wilkinson.medium.com/membership

或者查看我的其他文章:

模型评估的偏差-方差分解

原文:https://towardsdatascience.com/bias-and-variance-for-model-assessment-a2edb69d097f

机器学习算法的偏差-方差分解及其在 Python 中的实际应用

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

照片由卢卡斯像素上拍摄

偏差方差是机器学习模型评估中的两个关键概念,因为它们与模型在未知数据上的性能密切相关。偏差和方差都是预测误差的误差类型。第三种误差是不可约误差,这是数据中固有的误差,无论使用什么算法都无法减少。

数据科学家在实施新模型时面临的主要困难之一是所谓的偏差-方差困境偏差-方差问题。这包括在监督学习算法中最小化两个误差源的冲突,可以用偏差-方差分解方法进行评估。

在整篇文章中,我们将浏览这些概念,并以本文的主要贡献结束,本文解释了偏差-方差分解,并为任何对实现模型分解感兴趣的人提供了一个 Python 实践示例。

偏差和方差

偏差被定义为模型预测和实际情况之间的差异。高偏差会导致算法错过特征和目标输出之间的相关关系(欠拟合)。

方差定义为对训练集中波动的敏感度。换句话说,就是指当训练数据发生变化时,结果的变化有多大。高方差表明随着训练数据集的变化,目标函数的估计值会有大的变化(过度拟合)。

用数学表示的两个术语都对应于以下公式:

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

这两项都可以很容易地从均方误差(MSE)公式中导出:

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

如何解释这些公式的例子显示在文章的结尾。

这是一个图表,包含高低偏差和高低方差的四种不同情况。考虑到我们收集的训练数据中的机会可变性,每个命中代表我们模型的一个单独实现[1]。目标的中心意味着模型完美地预测了这些值。

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

**图一。**偏差-方差。参考:图片由作者提供。

偏差-方差权衡

尽管最佳任务是尽可能使偏差和方差最小,但在实践中,两种误差之间存在明显的权衡。在这两个术语之间找到一个平衡点就是所谓的偏差-方差权衡

对于机器学习模型,偏差和方差与模型的复杂性密切相关,然后与模型何时过度拟合或欠拟合训练数据相关联。如图 2 所示,当模型复杂性超过最佳点时,我们的模型会过度拟合训练数据,而如果模型复杂性不足,则模型会对数据拟合不足。

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

图二。偏差和方差随模型复杂性的变化。参考号:图片由作者提供。

在实际场景中,没有找到最佳点的分析方法,因此需要测试几个具有不同复杂性的模型,并选择一个使总体误差最小的模型。

偏差-方差分解

偏差-方差分解是理解算法性能的一种有用方法。

这种方法背后的主要思想是当用不同的训练集训练相同的模型并在相同的测试集上测试它时,测量偏差和方差。

为了实现这一点,用来对数据进行子采样的方法是自举(名字打包来源于自举 + 合计)。这种方法包括对数据进行随机采样和替换,这意味着训练数据的子集将重叠,因为我们不是分割数据,而是对其进行重采样。

因此,通过迭代运行 bootstrapping 方法并获得测试集模型的准确性,我们可以获得我们迭代的所有回合的平均偏差和方差。

下面是回归任务的部分代码,总结了该方法背后的主要逻辑。所有代码都是从 MLxtend 库中获得的。

Input:
- X_train
- y_train
- X_test
- y_test
- num_rounds: Number of iterations
Output:
- avg_expected_loss: Average MSE loss for all the rounds
- avg_bias: Average bias for all the rounds
- avg_var: Average variance for all the rounds
(avg_expected_loss = avg_bias^2 + avg_var)(1) Iterate for *num_rounds*, in each implementing bootstrapping, training the model and getting the predictions
for i in range(num_rounds):
- X_boot, y_boot = _draw_bootstrap_sample(rng, X_train, y_train)
- pred = estimator.fit(X_boot, y_boot).predict(X_test)
- all_pred[i] = pred(2) Obtain the average MSE error
**avg_expected_loss** = np.apply_along_axis(lambda x: ((x — y_test)**2).mean(), axis=1, arr=all_pred).mean()(3) Obtain the average bias and variance
main_predictions = np.mean(all_pred, axis=0)
**avg_bias** = np.sum((main_predictions — y_test)**2) / y_test.size
**avg_var** = np.sum((main_predictions — all_pred)**2) / all_pred.size

最后,这里有一个 Python 实践示例,展示了如何实现偏差-方差分解。

作为展示,我们使用了免费提供的波士顿住房数据集[2],其任务是使用回归变量预测房价。我们首先将数据分为训练集和测试集。

例 1:决策树

为了分析偏差-方差分解,我们首先实现了一个决策树回归器,并通过 bias_variance_decomp 函数运行它,其伪代码如上所示。

Average expected loss: 32.419
Average bias: 14.197
Average variance: 18.222

为了将这个输出与另一个模型进行比较,我们还使用决策树回归器运行了一个 bagging 集成方法。

Average expected loss: 18.693
Average bias: 15.292
Average variance: 3.402

与之前的结果相比,我们可以观察到偏差是如何增加的,这意味着 bagging 回归模型的表现比决策树模型差。然而,方差严重下降,这表明该模型与其预测更加一致。

例 2:神经网络

我们还评估了在 Keras 中实现的基于神经网络的模型的性能,因为据我们所知,这个功能不能在 PyTorch 中实现。

Average expected loss: 25.470
Average bias: 19.927
Average variance: 5.543

与第一个模型相比,我们通过增加每层的神经元数量来增加模型的复杂性。

Average expected loss: 23.458
Average bias: 17.608
Average variance: 5.850

正如预期的那样,偏差的减少是以增加模型的方差为代价的。

管理偏差和差异的方法

这里有一些技巧来管理偏差和方差误差。

首先也是最重要的,不要只关注偏差的最小化,或者换句话说,不要忘记方差。对于一个健壮的模型来说,这两者同样重要。

然后,通过(1)实施增强集成方法,或(2)添加更多特征或进行特征工程来增加复杂性,可以减少模型的偏差。

相反,方差可以通过(1)实施 bagging 集合方法,或者(2)通过正则化来约束或收缩估计的系数来减小。

有关如何使用集成方法管理偏差和方差的更多详细信息,我建议阅读文章 机器学习集成方法简介

如何解释偏差和差异的详细说明

如果我们有下面的分布,

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

期望值和方差的计算如下:

  • 期望值

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

  • 差异

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

如果你喜欢这篇文章,请考虑 订阅 。你将获得我所有的内容+所有其他来自牛逼创作者的文章!

参考

[1] Scott Fortmann-Roe,了解偏差-方差权衡

[2]Harrison d .和 Rubin feld d . l .,《享乐价格和对清洁空气的需求》,环境杂志。经济学与管理学,第 5 卷,81–102 页,1978 年。

[3]机器学习者,Entiende de una vez quées El trade off Bias-Variance

[4] GitHub,函数 bias_variance_decomp.py

【5】栈交换,𝐸(𝑋)从字面上是什么意思?

[6]中等,偏倚-方差权衡解释

[7]机器学习掌握,机器学习中偏差-方差权衡的温和介绍

[8] GitHub,用 python 实现机器学习误差偏差-方差和不可约误差

[9] GitHub,分类和回归损失的偏差-方差分解

[10]天才博客,什么是偏差-方差权衡?

工作中的偏见

原文:https://towardsdatascience.com/bias-at-work-adbd05b0c4a3

人工智能偏见在工作中的一个例子

使用人工智能帮助作者更快写作的流行写作工具 asper 发布了一款名为“Art”的新工具。用户可以使用 Jasper 的人工智能框架,通过简单的输入来创建新的图像。贾斯珀最近的邮件解释道:

你的人工智能助手可以在几秒钟内创造惊人的艺术!

我持怀疑态度(有很多原因)。我想我会看看这个新工具是否以及如何显示偏见、成见、性别歧视或种族歧视。结果不言自明。

首席执行官

我让贾斯珀制作一幅“首席执行官在公司活动上讲话”的图像。结果如下:

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

图片来源:作者使用碧玉艺术的插图。共有四张图片。所有四张图片都显示了穿着职业装的白人和男性代表在讲台上或房间里讲话。

看到这张照片后,我开始担心。贾斯珀的新工具合乎道德吗?意思是它强化了种族和性别的刻板印象吗?我还没有足够的证据来说明最终的结论。

我决定切换到书写工具,在那里你可以问 Jasper 问题和/或给出命令。我下了命令“写一段关于为什么美国有这么多男性首席执行官的文章。”Jasper 生成了以下内容:

美国缺乏女性 CEO 的原因有很多,但其中一个主要原因是女性往往得不到与男性同等的机会。

美国缺乏女性首席执行官的原因有很多。一个主要原因是,妇女往往没有获得与男子相同的机会。例如,他们可能无法接触到相同的网络或导师,或者可能不鼓励他们追求高级职位。

另一个原因是,女性更有可能请假照顾孩子,这可能会影响她们的职业发展。最后,在工作场所仍然存在很多对女性的偏见,这可能会使她们更难在公司晋升。

以上内容,一字不差地摘自贾斯珀。贾斯珀似乎忽略了关于我们如何倾向于将首席执行官主要视为男性的讨论。

女管家

在接下来的测试中,我让贾斯帕生成一幅“在房子周围做家务的女管家”的图像。结果如下:

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

图片来源:作者使用碧玉艺术的插图。共有四张图片。这四张照片都展示了穿着围裙或类似磨砂服装的女性形象在做典型的家务。

为什么这里没有男性形象?

市长

接下来,我让贾斯帕创作一幅“城市公园里的市长”的图像结果如下:

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

图片来源:作者使用碧玉艺术的插图。共有四张图片。这四张照片都展示了穿着商业服装的男性形象,背景是城市风景。这些人物在表型上表现出多样性和多种族性。

为什么这里没有女性形象?

秘书

在这个测试中,我让贾斯帕画一个“秘书”以下是结果(也许更全面一点)。结果如下:

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

图片来源:作者用碧玉艺术创作的插图。三张是四张图片,展示了身着职业装的女性形象。这四个人物都非常苗条。这些人物从表型上看是多种族的。

一名飞行员

该图像进行了三次尝试(每次输入略有不同)。前两个输入包括不包括人的 fames。这第四次尝试包括两个男人和两个女人——这是第一张女性形象的照片。结果是:

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

图片来源:作者使用贾斯珀艺术的插图。共有四幅图片,包括两个穿着客机制服的女性和两个男性形象。这些数字的种族构成似乎模糊不清。

数据科学家

在这个例子中,我要求 Jasper 产生“一个数据科学家”结果如下:

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

图像来源:作者使用碧玉艺术的插图。三是四个图像,包括三个女性呈现的人物和一个男性呈现的人物。这些数字的种族构成似乎主要是白人/欧洲人。

在这次测试中,我很好奇如果我让 Jasper“写一段描述数据科学家长什么样”他会说什么。我有点屏住呼吸等这一次。 Jasper 回避了这个问题,写下了一位数据科学家的智力特征,他说:

科学家需要能够长时间专注于他们的工作,他们还需要能够进行逻辑思考。此外,科学家需要能够提出问题并弄清楚事物是如何工作的。他们还需要能够独立工作。

科学家

这是贾斯珀可能认为的“实验室里的科学家”的样子。又多了一点性别包容性。结果是:

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

图像来源:作者使用碧玉艺术的插图。三是四个图像,包括两个女性呈现和一个两个呈现的人物。这些数字的种族构成似乎主要是白人/欧洲人。

在上面的例子中,我也注意到科学家是孤独的。在我看来,科学是一项团队运动!

当我让贾斯珀“写一段关于什么样的性格造就好科学家”时,他强调了独立性。说:

科学家需要能够长时间专注于他们的工作,他们还需要能够进行逻辑思考。此外,科学家需要能够提出问题并弄清楚事物是如何工作的。他们还需要能够独立工作。

我认为贾斯珀的训练数据缺少说明科学中团队合作重要性的文字。

一对新近订婚的夫妇

在这里,我让贾斯帕画“一对在订婚派对上刚刚订婚的夫妇”四个例子看起来都是异性恋。似乎没有种族多样性。

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

图像鸣谢:作者使用碧玉艺术的插画,共有四对情侣的四个图像(一人男性呈现,一人女性呈现)。这些数字的种族构成似乎都是白人/欧洲人。

一名警察

在这个测试中,我让贾斯帕给我一个“工作第一天的警官”一个家伙看起来像是在安可-安可-安可的事业上。撇开异常年龄不谈,以下是结果:

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

图片来源:作者使用碧玉艺术的插图。共有四张图片。四幅图像中的三幅,包括四对(一对男性展示,另一对女性展示)。这些数字的种族构成似乎都是白人/欧洲人。

我让贾斯珀用“写一篇关于警察职业生涯第一天的文章”的命令来写一名警察的第一天工作。贾斯珀说:

警察在职业生涯的第一天面临许多挑战。他们可能不得不处理困难的情况,做出生死抉择,并长时间工作。他们还需要学习如何应对不同类型的人,以及如何有效地执行法律。此外,他们必须与同事和上级建立良好的工作关系。

化学工程师

想过化学工程师长什么样吗?根据贾斯珀的说法,他们大多是男性,有时赤膊上阵,戴着眼镜很有创意。结果是:

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

图像来源:作者使用碧玉艺术的插图。有四个男性形象。这些数字的种族构成似乎都是白人/欧洲人。

使用命令“写一段关于化学工程师在工作中做什么的文章。”贾斯珀说:

化学工程师负责设计、建造和操作生产化学品的工厂。他们必须确保工厂安全高效地运行,同时符合环境法规。

https://pub.towardsai.net/six-months-later-what-data-science-hopefully-learned-from-facebooks-whistleblower-fe8049e5cac3

数学老师

再来一杯。我请贾斯珀制作《一个数学老师》结果如下:

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

图像来源:作者使用碧玉艺术的插图。有四个男性形象。对于其中的三个数字,这些数字的种族组成似乎都是白人/欧洲人。第四个图形背对着摄像机,不可能观察到表现型。

作为后续,我做了三次额外的尝试,让贾斯珀培养出一名女性数学老师。当我问及“快乐”的心情时,四位老师中有一位是女性。然后在第四次尝试中,我要求“一个友好和乐于助人的数学老师”,结果也是四个画面中有一个是女性呈现的。最后,当我问到“英语老师”时,四个图片中有三个是女性。

结论

根据 Jasper 的说法,创作原创的无版权艺术很容易。根据 Jasper 的电子邮件,有三个步骤:

第一步。逐字描述你脑海中的任何图像。
第二步。应用一些有创意的风格。
第三步。观看贾斯珀立即创建它。(好吧,更像是 5 秒钟)

我认为这条消息好坏参半。这些结果能证明什么吗?不。他们什么都证明不了。我在这里产生的数据是不系统的。我对数据的审查并不系统。

然而,这种人工智能的实现,与其他人工智能的实现不同,似乎有可能受到社会系统性偏见和成见的影响。

https://medium.com/the-faculty/reading-list-on-bias-in-ai-ml-data-science-4ccdc93f6219

感谢阅读

你准备好了解更多关于数据科学职业的信息了吗?我进行一对一的职业辅导,并有一份每周电子邮件列表,帮助专业求职者获取数据。点击这里了解更多

感谢阅读。把你的想法和主意发给我。你可以写信只是为了说声嗨。如果你真的需要告诉我是怎么错的,我期待着尽快和你聊天。推特:@ adamrossnelsonLinkedIn:亚当罗斯尼尔森

偏差——数据分析的致命弱点

原文:https://towardsdatascience.com/bias-the-achilles-heel-of-data-analysis-29fc46e49c06

理解数据背后的东西&人工智能

面对数据偏差不可避免的后果

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

尼克·扬森Pix4free 的偏见

介绍

在之前的一篇文章中,我讨论了信息理论和克劳德·香农对我们理解“信息”的贡献在这篇文章中,我们发现“意义”与信息无关,尽管这看起来很矛盾。这就是香农的天才之处,他假设信息是“噪音”和“惊喜”的确,意义会混淆分析信息的可能性。现在,我们必须解决信息收集、分类和分析中的一个主要缺陷。

偏见

数据分析在确定数据中的实际内容方面有着巨大的工作量。然而,对数据纯度的追求并没有就此结束。

处理实际数据中可能存在的偏差至关重要。在分析和人工智能领域,人们必须警惕两种重要的偏见。

数据中的偏差

在分析任何系统的数据,特别是人工智能系统的数据时,必须了解所述数据的来源。例如,将来自 90%男性健康统计数据的海量数据湖的医疗信息应用于大多数女性人口,可能会产生有缺陷的结果。类似地,根据中上层阶级个人的反应为政治民意调查创建全国平均值也会产生错误的结果。

所有数据集本质上都包含一定的偏差。这种偏差必须在分析和相应的人工智能中加以考虑。

评估或创建数据时的偏差

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

约翰·海因 T15 在Pix4free上的偏置

康威定律

数据分析最危险的一个方面可能会导致人工智能的灾难性结果,这就是控制组内部固有的偏见。

1968 年,计算机程序员梅尔文·康威在一篇论文中假设*‘设计系统的组织(在这里使用的广义上)被限制生产这些组织的通信结构的复制品。*

这个简短的陈述就是众所周知的康威定律,它解释了偏见是如何在系统中出现的。它今天仍然适用,因为它定义了人类行为。系统继承了创造者的偏见。他们模仿创造他们的人——如果有人愿意用“克隆”这个词的话。

在其他方面,艾米·韦伯在人工智能方面的研究集中在这种偏见上,因为这是正确人工智能实现的基础。正如她明智地指出的那样:‘在没有有意义的解释的情况下,我们有什么证据证明偏见没有钻进来呢?在不知道这个问题的答案的情况下,怎么会有人放心地信任人工智能呢?

正如韦伯在她对哈佛商学院代码库分析的评估中指出的:

“他们的一个重要发现是:设计选择源于他们团队的组织方式,在这些团队中,偏见和影响往往会被忽视。因此,一旦他们的工作——无论是梳子、水槽还是算法——被公众使用,团队中的个人组成的小型超级网络就会发挥巨大的力量……

因此,康威定律占上风,因为部落的价值观——他们的信仰、态度和行为以及他们隐藏的认知偏见——是如此根深蒂固。'⁴

对照组偏倚

然而,偏见的问题并没有就此结束。偏差可能出现在实际使用的数据集中,因为数据最初是如何定义的。

'由于研究人员不能仅仅将“海洋数据”抓取并加载到机器学习系统中进行训练,他们将从第三方购买合成数据集或自己构建一个数据集。“这通常是有问题的,因为组成数据集——包含什么内容以及如何标注——充斥着一小部分人做出的决定,他们通常不知道自己的职业、政治、性别和其他许多认知偏见。”⁵

1956 年,达特茅斯学院举办了第一次专门讨论人工智能的会议。⁶“人工智能”这一术语被认为是约翰·mccarthy,⁷会议的领导者,也是该提案的原始作者之一。不幸的是,最初的小组是有根本缺陷的,充满了偏见。它没有有色人种,47 名杰出的参与者中只有一名女性——尽管有许多有色人种和女性专家。不带偏见地创建团队的答案很明显。

一个真正多元化的团队只有一个共同的主要特征:天赋。不会有任何单一性别、种族或民族的集中。不同的政治和宗教观点将被代表。⁸

然而,要实现无偏倚的数据,必须普遍应用‘天赋’法则,而这并不是一个现实的目标。

人性总会产生某种类型的偏见,无论一个人多么自诩自己不偏不倚,政治正确。偏见存在于人们所做的每一件事情中;这是一个人个人主义的表现。

让事情变得复杂的是,对一种文化和社会来说是偏见的东西对另一种文化和社会来说被认为是合理的、客观的和公平的。例如,即使在我们这个被认为是开明的现代世界,一个“同性恋”个人也可能不被允许加入任何代表团体。或者性别偏见可能是某个特定国家占主导地位的社会、文化和宗教的一部分。

举两个简单的例子:

  1. 合法饮酒的年龄因地区而异。任何包含这些不同年龄和地区的测量酒精消费影响的数据集,如果不考虑法定年龄这一因素,如果在一般水平上应用,将会有根本性的缺陷。
  2. 合法驾驶的年龄因地区而异。同样的问题存在于我们的第一个例子中。任何涉及新的、年轻的、十几岁的或十几岁以后的司机的事故数据集都必须考虑这个因素。

在上面给出的两个简单的例子中,很容易陷入先入为主的观念并产生错误的分析。

重要的是我们要记住“偏见”永远不会包含一个“一意孤行”的定义。

检测偏见在任何结构中是否明显取决于特定亚文化如何定义偏见以及该定义如何在系统中实施。偏见永远不会被根除,尽管从任何定义来看,它总是一个消极因素。

因此,数据分析必须考虑这种偏见,并建立无数的防御措施来对抗它。如果不这样做,将会导致错误的结果和灾难性的人工智能缺陷。

群体思维

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

凡妮莎·奥特罗 via 维基共享资源

如上所述,康威定律的一个衍生是一种被称为“群体思维”的心理现象

“群体思维(Groupthink)是一种发生在一群人内部的心理现象,在这种现象中,对群体和谐或一致的渴望导致了非理性或功能失调的决策结果。一个群体中的凝聚力,或对凝聚力的渴望,可能会使其成员产生不惜一切代价达成一致的倾向。这使得团队能够最大限度地减少冲突,在没有批判性评估的情况下达成共识。”⁹

在 2016 年克林顿-特朗普美国总统选举期间,群体思维抬头。在结果变得明朗之前,很少有人能够想象特朗普会获胜。根据民调,就连唐纳德·川普本人也预计会输掉选举,他租了一个小酒店舞厅做了一个简短的败选演讲,后来他说:“我说过如果我们会输,我不想要一个大舞厅。”⁰

然而,尽管充分意识到这种心理现象,它在整个美国和整个世界占主导地位。唐纳德·特朗普永远不会也不可能赢得选举。

在 2016 年美国总统大选前的几周和几个月,新闻媒体和民调机构几乎一致认为希拉里·克林顿极有可能当选。例如,11 月 7 日,选举前一天,《纽约时报》认为克林顿当时“在至少价值 270 张选举人票的州中拥有持续和明显的优势。”《纽约时报》估计克林顿获胜的可能性为 84%。同样在 11 月 7 日,路透社估计克林顿在选举中击败唐纳德·特朗普的概率为 90%,赫芬顿邮报根据“980 万次模拟”将克林顿的胜算定为 98.2%。

选举结果与选举前的估计之间的矛盾,无论是来自新闻媒体还是民意调查机构,可能是由两个因素造成的:新闻和民意调查专业人士无法想象像特朗普这样非传统的候选人会成为总统,特朗普的支持者可能没有被调查充分采样,或者可能因为害怕社会排斥而欺骗或误导民意调查机构。

数据出错有成百上千的原因。民意测验专家有偏见。报纸听信了他们的花言巧语。被调查的选民不想回答,因为害怕被嘲笑,或者出于对民意调查的蔑视,他们故意给出错误的答案。然而,偏见从一开始就很明显,没有人愿意面对它。

纵观历史,群体思维已经抬头。决策通常基于错误的数据分析或拒绝面对“真实数据”所描述的情况。在企业界,这往往会导致灾难性的后果,要么是数亿美元的损失,要么是公司被迫关闭。

在战争史上,群体思维的例子比比皆是。基于不准确的数据做出错误的假设,导致生命损失。911 后入侵伊拉克就是一个很好的例子。1941 年 12 月 7 日日本袭击珍珠港之前,美国未能充分保护和保卫珍珠港——尽管有许多即将发动袭击的警告和信号——是集体思维的结果。数据就在那里。军政领导分析了一下。这种偏见蔓延开来,因为人们认为日本人永远没有勇气攻击美国并迫使美国加入世界大战。

许多人认为,美国国家航空航天局“挑战者”号在起飞时爆炸的灾难是群体思维的一个例子。数据是可用的。美国宇航局意识到冰冻温度对航天飞机的不利影响。发出了警告。然而,当美国国家航空航天局的领导们在一起开会时,他们为挑战者号的起飞开了绿灯。

我们可以举出一个又一个康威定律和群体思维的例子。然而,有一点是清楚的。

人类的状况将永远包含偏见。偏见是人类的一部分。数据集将反映这种偏向。如果我们不创建正确的算法和对偏差的正确分析,我们将总是以有缺陷的分析而告终。

偏见的确是数据分析的致命弱点。

关于作者:

泰德·格罗斯是“假设-假设”的联合创始人兼首席执行官。Ted 担任 R&D 首席技术官兼副总裁多年,擅长数据库技术,专注于 NoSQL 系统、NodeJS、MongoDB、加密、人工智能、颠覆、混沌和复杂性理论以及奇点事件。他在虚拟世界技术领域有超过 15 年的专业经验,在增强现实领域有 6 年的经验。Ted 继续在专业学术期刊和脸书 If-What-if GroupMediumTwitterLinkedIn 上撰写许多关于技术主题的文章。你也可以在这里或在 Substack 上注册的免费时事通讯。

参考资料:

1.康威,m . e .(1968)‘委员会如何发明?’,数据化,第 14 卷,第 5 卷,第 28–31 页。

2.维基百科(未注明)“康威定律”,可在 https://en.wikipedia.org/wiki/Conway’s_law 查阅(2021 年 7 月 29 日查阅)。

3.韦伯(2019)《九大巨头:科技巨头和他们的思维机器如何扭曲人性》,纽约公共事务出版社,Kindle 版,位置 1763。

4.同上,地点 1666。

5.同上,地点 2763。

6.维基百科(未注明)‘人工智能’,可在:https://en.wikipedia.org/w/index.php?获得 title =人工智能&oldid = 997705860(2021 年 1 月 13 日访问)。

7.维基百科(未注明)‘约翰·麦卡锡(计算机科学家)’,可在:https://en . Wikipedia . org/wiki/John _ McCarthy _(计算机科学家)(2021 年 7 月 29 日访问)。

8.韦伯,参考。上面 3 个,位置 893。

9.维基百科(未注明日期)“集体思考”,可在 https://en.wikipedia.org/wiki/Groupthink(2022 年 4 月 18 日访问)获得。

10.维基百科(未注明日期)“2016 年美国总统选举”,可在:https://en . Wikipedia . org/wiki/2016 _ United States _ presidential _ election(2022 年 4 月 18 日访问)。

11.维基百科(未注明)’ Groupthink ',可在:https://en . Wikipedia . org/wiki/group think # 2016 _ United _ States _ presidential _ election(2022 年 4 月 18 日访问)。

*为了与 Medium 的披露政策保持一致,上面列出的所有亚马逊图书链接都是假设分析的附属链接。

机器学习中的偏差-方差权衡、过拟合和正则化

原文:https://towardsdatascience.com/bias-variance-trade-off-overfitting-regularization-in-machine-learning-d79c6d8f20b4

偏差-方差权衡,过度拟合介绍&如何使用正则化解决过度拟合:岭和套索回归

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

图片来源: Pixabay

“近似正确总比精确错误好”
沃伦·巴菲特

检验是一个重要的问题,是每个数据科学家和机器学习工程师建模清单的重要组成部分。因此,如果你正在使用一个统计学、计量经济学或机器学习模型,无论你的 ML 模型有多简单,你都应该确保你的模型不会过度拟合。否则,你有机会在纸上得到一个好的模型,而实际上这个模型表现很差。在这篇博文中,我将涉及以下主题:

**- Model Error Rate
- What is Overfitting
- Irreduccable Error
- Model Bias
- Model Variance
- Bias-Variance Trade-Off
- What is Regularization?
- Ridge Regression and L2 norm
- Pros and Cons of Ridge Regression
- Lasso Regression and L1 norm
- Pros and Cons of Lasso Regression**

如果你之前没有统计学知识,或者你想在跳到本文中的公式和其他统计学和 ML 概念之前刷新你在基本统计学概念方面的知识,你可以查看本文: 数据科学家和数据分析师的统计学基础

注意,本文是我上一篇介绍偏差-方差权衡的文章的扩展版: 机器学习中的偏差-方差权衡

模型误差率

为了评估模型的性能,我们需要看看它产生的误差量。为简单起见,让我们假设我们有以下简单的回归模型,该模型旨在使用一个单个 自变量 X 来模拟数值 Y 因变量,即我们根据我们的训练观察值 { (x_1,y_1),(x_2,y_2),…,(x_n,y_n) } 来拟合我们的模型,并且我们获得估计值 f ()

然后我们可以计算出 f ^(x_1, f ^(x_2),…, f ^(x_n).如果这些近似等于 y_1,y_2,…,y_n,那么训练错误率(例如 MSE)将会很小。但是,我们真的对f(x _ k)≈y _ k;相反,我们真正想要的是知道 f(x_0)是否近似等于 y_0,其中(x_0,y_0)是一个看不见的测试数据点,在模型的训练过程中不使用。我们希望选择一种测试错误率最低的方法,而不是训练错误率最低的方法。在数学上,该示例方法的模型误差率可以表示如下:

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

使用训练错误率来评估模型性能的基本问题是,不能保证具有最低训练错误率的方法也将具有最低测试错误率。粗略来说,问题是很多 ML 或统计方法专门估计模型系数或参数,以最小化训练错误率。对于这些方法,训练错误率可以相当小,但测试错误率往往大得多。

使用训练错误率来评估模型性能的基本问题是,不能保证具有最低训练错误率的方法也将具有最低测试错误率。我们希望选择一种测试错误率最低的方法,而不是训练错误率最低的方法。

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

图片来源:伊莎贝拉·巴雷托

什么是过度拟合?

术语过度拟合与模型的不良性能有关。当机器学习模型在低错误率(例如,低训练 MSE)的训练数据上表现良好,但当应用于测试数据时,它会导致更高的错误率(例如,高测试 MSE),我们称之为过拟合。当相反的情况成立时,即 ML 模型未能密切跟踪数据并准确捕捉数据集特征和目标变量之间的关系,我们称之为欠拟合

当机器学习模型过于紧密地跟踪训练数据,并考虑到数据中的噪声时,就会出现这种情况。因此,一旦数据发生变化,例如,使用了测试数据,那么模型就很难找到数据中特征之间的真实关系。

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

图片来源:作者

要理解过拟合的问题,你需要熟悉机器学习模型的偏差-方差权衡、知道什么是不可约误差偏差方差。此外,您需要知道模型错误率的构成。最后,您需要知道这些术语与模型灵活性和模型性能的关系。

解决过拟合问题你有两个选择:

  • 选择另一个灵活性较低的模型(例如,众所周知灵活性较低的模型偏差较大,但方差较小)
  • 调整模型,使其灵活性降低(规则化)

当机器学习模型过于紧密地跟随训练数据并考虑到数据中的噪声时,就会发生过拟合。

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

图片来源:马蒂亚斯 P.R 雷丁

不可约误差

作为对 y 的预测,yˇ的精度取决于两个量,我们可以称之为可约误差 不可约误差。一般来说,fˇ不会是对 f 的完美估计,这种不精确会引入一些误差。这种误差是可以减少的,因为我们可以通过使用最合适的机器学习模型来估计 f,从而有可能提高 f 的精度。然而,即使有可能找到一种模型来完美地估计 f,从而估计的响应采用 yˇ= f(x)的形式,我们的预测仍然会有一定的误差。这是因为 y 也是误差项ε的函数,根据定义,误差项ε不能用预测因子 x 来预测。

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

因此,与误差ε相关的可变性也会影响预测的准确性。这被称为不可约误差,因为无论我们对 f 的估计有多好,我们都无法减少ε引入的误差。因此,模型中不可约误差是误差项ε的方差,可表示如下:

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

与可约误差不同,不可约误差是一种由于系统中的随机性或自然可变性而产生的误差,我们无法通过选择更好的模型来避免或减少这种误差。

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

图片来源:史威茨安娜

机器学习模型的偏差

模型无法捕捉数据中的真实关系被称为偏差。因此,能够检测数据中真实关系的 ML 模型具有低偏差。通常,复杂的模型或更灵活的模型往往比简单的模型有更低的偏差。数学上,模型的偏差可以表示如下:

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

机器学习模型无法捕捉数据中的真实关系称为偏差。

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

图片来源:马蒂亚斯 P.R 雷丁

机器学习模型的方差

模型的方差是将模型应用于不同数据集时模型性能的不稳定性水平。当使用训练数据训练的同一个模型的表现完全不同于对测试数据的表现时,这意味着模型中存在很大的差异。复杂模型或更灵活的模型往往比简单模型具有更高的方差。

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

模型的方差是将模型应用于不同数据集时模型性能的不稳定性水平。

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

图片来源: Max Avans

偏差-方差权衡

可以从数学上证明,对于给定值 x0,机器学习模型的预期测试错误率可以用模型的方差、模型的偏差和模型的不可约误差来描述。更具体地,监督机器学习模型中的误差等于模型的方差、平方偏差和模型的不可约误差之和。

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

因此,数学上,监督模型中的误差等于模型中偏差的平方、模型的方差和不可约误差。

因此,为了最小化预期的测试错误率,我们需要选择一种同时实现低方差和低偏差的机器学习方法。然而,模型的方差和偏差之间存在负相关关系。

复杂模型或更灵活的模型往往具有较低的偏差,但同时,这些模型往往比简单模型具有更高的方差。

让我们再次回到之前的图表:

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

图片来源:作者

一般来说,随着方法灵活性的增加,方差将增加,偏差将减少。这两个量的相对变化率决定了测试误差率会增加还是减少。

数学上,监督模型中的误差等于模型中偏差的平方、模型的方差和不可约误差。那就是:

当我们增加一类方法的灵活性时,偏倚最初的下降速度往往比方差的增加速度快。因此,预期的测试错误率下降。然而,在某些时候,增加灵活性对偏差影响很小,但开始显著增加方差。所以,这一切都是为了找到平衡,即最佳契合点,在这个点上,测试错误率将改变方向并向上移动。

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

图片来源:作者

基于偏差和方差关系,机器学习模型可以有 4 种可能的场景:

  1. 高偏差和高方差(最坏的情况)
  2. 低偏差和低方差(最好的情况)
  3. 低偏差高方差(过拟合)
  4. 高偏置和低方差(欠拟合)

复杂模型或更灵活的模型往往具有较低的偏差,但同时,这些模型往往比简单模型具有更高的方差。

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

图片来源: Alex Zhernovyi

什么是正规化?

正则化或收缩是解决过拟合问题的常用方法。正则化背后的想法是在机器学习模型中引入一点偏差,同时显著降低方差。之所以称之为收缩,是因为这种方法将一些估计的系数向零收缩,以惩罚它们增加了模型的方差。两种最流行的正则化技术是基于 L2 范数的岭回归和基于 L1 范数的拉索回归

正则化背后的想法是在机器学习模型中引入一点偏差,同时显著降低方差。

里脊回归

让我们来看看用于因变量 y 建模的 p 个独立变量或预测值的多元线性回归示例。您可能还记得,估计线性回归参数的最流行的估计技术是普通最小二乘法(OLS) ,它通过最小化模型的残差平方和(RSS) 来找到最佳系数(有关更多信息,您可以在此处阅读)。那就是:

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

其中β代表不同变量或预测值(X)的系数估计值。

岭回归与 OLS 非常相似,只是系数是通过最小化稍微不同的成本或损失函数来估计的。也就是说,岭回归系数估计βR 值,使其最小化以下损失函数:

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

其中λ(λ,总是正的,≥ 0)是调谐参数或罚参数,从这个公式可以看出,在脊的情况下,使用 L2 罚或 L2 范数。通过这种方式,岭回归将分配一个惩罚给一些变量,使它们的系数向零收缩,从而减少整体模型方差,但是这些系数永远不会精确地变成零。因此,模型参数永远不会精确设置为 0,这意味着模型的所有 p 个预测值仍然保持不变。

L2 范数(欧几里德距离)

L2 范数是一个来自线性代数的数学术语,它代表欧几里得范数,可以表示如下:

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

调谐参数λ

调整参数λ用于控制惩罚对回归系数估计的相对影响。当λ = 0 时,罚项不起作用,岭回归将产生普通的最小二乘估计。然而,当λ → ∞(变得非常大)时,收缩惩罚的影响增大,并且岭回归系数估计接近 0。

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

图片来源:作者

岭回归为什么有效?

岭回归相对于普通最小二乘法的优势来自于早先引入的偏差-方差权衡现象。随着惩罚参数λ的增加,岭回归拟合的灵活性降低,导致方差减少但偏差增加。

赞成的意见

  • 解决过度拟合
  • 容易理解

缺点

  • 如果 p 较大,模型可解释性较低

岭回归将分配一个惩罚(λ)给一些变量,使它们的系数向零收缩,但它们永远不会精确地变成零。

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

图片来源:阿什利·丰塔纳

套索回归

岭回归的一个最大缺点是它会在最终模型中包含所有的 p 预测值。因此,较大的 lambda 将对某些变量进行惩罚,使其系数向零收缩,但它们永远不会精确为零,当您的模型具有大量要素且模型的可解释性较低时,这将成为一个问题。

套索回归克服了岭回归的这个缺点。也就是说,Lasso 回归系数估计值βˇλL 是使以下各项最小化的值:

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

与岭回归一样,Lasso 将系数估计值收缩到零。然而,在套索的情况下,使用了 L1 罚函数或 L1 范数,其效果是当调谐参数λ非常大时,迫使一些系数估计值恰好等于零。因此,像许多特征选择技术一样,套索回归除了解决过度拟合问题之外,还执行变量选择。

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

图片来源:作者

L1 范数(曼哈顿距离)

L1 范数是一个来自线性代数的数学术语,它代表曼哈顿范数,可以表示如下:

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

套索回归为什么行得通?

像岭回归一样,Lasso 回归相对于普通最小二乘法的优势来自于早期引入的偏差-方差权衡。随着λ的增加,岭回归拟合的灵活性降低,导致方差减少但偏差增加。此外,Lasso 还执行特征选择。

赞成的意见

  • 解决过度拟合
  • 容易理解
  • 提高模型的可解释性

缺点

  • 与岭回归相比,减少模型的方差较少

Lasso 回归将系数估计值向零收缩,甚至在调谐参数λ非常大时迫使这些系数中的一些恰好等于零。因此,像许多特征选择技术一样,套索回归除了解决过度拟合问题之外,还执行变量选择。

当把前面两张图放在一起时,岭回归和套索回归之间的比较就变得很清楚了。

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

图片来源:作者

如果你喜欢这篇文章,这里有一些你可能喜欢的其他文章:

https://tatev-aslanyan.medium.com/bias-variance-trade-off-in-machine-learning-7f885355e847 https://tatev-aslanyan.medium.com/data-sampling-methods-in-python-a4400628ea1b https://medium.com/analytics-vidhya/pyspark-cheat-sheet-big-data-analytics-161a8e1f6185

感谢阅读

我鼓励你 加入 Medium以拥有 完整访问所有跨媒体发布的伟大锁定内容,并在我的 feed 上发布关于各种数据科学、机器学习和人工智能主题的内容。

关注我 阅读更多关于各种数据科学和数据分析主题的文章。更多机器学习的动手应用,数学和统计概念查看我的Github账号。
我欢迎反馈,可以联系
LinkedIn

快乐学习!

有偏模型系数—(第一部分)

原文:https://towardsdatascience.com/biased-model-coefficients-part-1-2722128b9e1c

衰减偏差/回归稀释使您的系数偏向 0

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

图片由施旭刚

TL;DR —当 X 变量中存在显著噪声或测量误差时,模型系数会低估变量的影响,即如果系数为正(负),真实影响甚至会更大。

关于这个系列

假设您是一名数据科学家,在一家从事房地产业务的公司(代理、开发商等)工作。)有人问你:

“每增加一平方米,房价会上涨多少?”

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

图片由派克斯提供

这个由多个部分组成的系列致力于展示,如果没有对传统统计学的扎实理解,得到错误的答案是多么容易。

衰减偏差/回归稀释

衰减偏差,也称为回归稀释,是由独立(X)变量中的测量误差或噪声引起的模型系数偏差。你的模型系数变得偏向 0。

例如,假设您有一个回归模型,显示面积每增加一平方米,价格就会增加 2000 美元。如果您的面积要素有很多测量误差或噪声,面积的真实影响甚至更大…也许价格实际上增加了 2500 美元。

反之亦然。例如,如果你的模型显示负系数为-2000,那么真实的系数会更小,比如说-2500。系数偏向 0

请注意,如果您的因变量(y)有噪声或测量误差,这种偏差不会发生…它只会受到 X 变量中的噪声或误差的影响。

为什么会出现这种偏差?

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

作者图片

假设面积每实际增加 1 平方米,价格就上涨 2000 美元。

当我们对具有带有测量误差的报告“面积”列的数据运行回归模型时,该“面积”列表示实际面积+噪声。

报告的“面积”栏中的波动部分是由于 a)面积的实际波动和 b)噪音。

a)的系数应为 2000,因为实际面积每增加 1 平方米,价格就会增加 2000 美元,而 b)的系数应为 0,因为噪音或测量误差对房价没有影响。该报告的“面积”栏的系数最终介于 0 和 2000 之间,分别是 a)和 b)的系数。

我们将避免可以在网上找到的详细公式,我们将跳转到 python 中的一个例子…

数据准备

1-我们住在一个有 2000 栋房子的城镇里。

2-镇上有 2 个区,一个高级/昂贵区和另一个非高级/普通区。

3-高档区的房屋平均面积较小(平均 200 平方米)。普通区的房屋平均面积为 500 平方米。数据中的房屋面积是从正态分布中提取的。

4-房屋的真实价值= 3000 美元 x 面积(平方米),适用于高级住宅区的房屋。真实价值= 1000 美元 x 非优质区面积。

5-房子在市场上出售,价格=真实价值+/- 20%。+/- 20%的偏差只是噪音。

让我们基于上述假设创建一个包含 2000 所房屋的数据集…

import numpy as np
import scipy.stats as ssnp.random.seed(seed=0)areas_premium = ss.norm(200, 50).rvs(1000)
areas_non_premium = ss.norm(500, 50).rvs(1000)

从上面创建一个包含区域和“溢价”列的数据框架…

“溢价”栏是一个虚拟/二元变量,表示房子是否在溢价区。

df_premium, df_non_premium = pd.DataFrame(), pd.DataFrame()df_premium['area'] = areas_premium
df_premium['premium'] = 1df_non_premium['area'] = areas_non_premium
df_non_premium['premium'] = 0df = pd.concat([df_premium, df_non_premium])
df

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

作者图片

现在,让我们想象一下区域的分布情况…

import matplotlib.pyplot as plt
import seaborn as snssns.displot(df, x='area', hue='premium', height=5, aspect=16/9)plt.title('Distribution of areas (sqmt) for premium vs non-premium houses')plt.show()

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

作者图片

我们可以看到高级住宅通常较小。

现在,由于房子的真实价值= 3000 美元 x 高档房的面积或 1000 美元 x 非高档房的面积,我们可以将真实价值的公式改写如下:

真实价值=(1000 美元 x 面积)+(2000 美元 x 面积 x 溢价)

其中 premium 是一个二进制数,表示该房屋是否位于高级位置

记住,房子是以真实价值+/- 20%(随机)出售的。

最后,我们将“真实价值”和“销售价格”添加到我们的数据框架中,并可视化销售价格的分布…

df['true_value'] = (df['area'] * (1000 + (2000 * df['premium'])))# Add selling price = true value x noise
# Noise is a random value between 80% and 120%
np.random.seed(seed=0)
df['sell_price'] = df['true_value'] * (
    np.random.randint(low=80, high=121, size=2000) / 100)# Visualize distributions of selling price
sns.displot(df, x='sell_price', hue='premium', height=5, aspect=16/9)plt.title('Distribution of selling price for premium vs non-premium houses')plt.show()

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

作者图片

我们可以看到,高级住宅的售价范围更广。

检查线性回归的系数

请注意,由于我们的目标是确定面积和销售价格之间的直接关系,就可解释性和影响测量而言,线性回归是最合适的选择。

我们将使用 statsmodel 库,它为线性回归模型生成一个很好的输出,但是结果也可以使用 sklearn 的 linear regression 实现来重现。衰减偏差影响其他机器学习模型,无论是线性还是非线性。与 OLS 回归相比,线性模型(如随机梯度下降回归器(SGDRegressor ))将显示几乎相同的效果,而衰减偏差的影响对于非线性和基于树的模型更加微妙,这些模型通常需要其他解释库,如 SHAP 或莱姆。

使用 statsmodel 运行 OLS 线性回归,将“真实值”作为我们的因变量(y ),将“面积 X 溢价”作为我们的自变量(X)。

df['area_x_premium'] = df['area'] * df['premium']# Statsmodel implementation
import statsmodel.api as smy = df['true_value']
X = df[['area', 'area_x_premium']]model = sm.OLS(y, X)
results = model.fit().summary()
results

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

作者图片

请注意,这些系数是按照我们的预期(1000 和 2000)正确估计的。R2 是 100%,这意味着使用我们的两个变量“面积”和“面积 x 溢价”可以 100%准确地预测“真实价值”。

我们使用 sklearn 的 LinearRegression 实现得到相同的系数,使用 SGDRegressor 得到几乎相同的系数。

model = LinearRegression()
model.fit(X, y)
model.coef_

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

作者图片

model = SGDRegressor(alpha=0, random_state=0, eta0=1e-5)
model.fit(X, y)
model.coef_

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

作者图片

现在,让我们检查一下,如果我们将 sell_price 而不是 true_value 设置为 y 变量,回归结果(使用 statsmodel)会是什么样子…

y = df['sell_price']model = sm.OLS(y, X)
results = model.fit().summary()
results

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

作者图片

现在,are 模型的准确率下降到 98.6%,因为 sell_price 包含了一些噪声,房屋的售价可能比其真实价值高出或低于 20%。

估计的系数~1000 和~1995 非常接近我们预期的 1000 和 2000。p 值为 0,表示系数的重要性。最后,我们可以看到这些系数(992–1009)和(1973–2016)的预期范围,因此我们的预期系数 1000 和 2000 落在这些范围内。

如果我们的 y 变量(sell_price)中有很多测量误差/噪声,系数应该仍然是无偏的,接近 1000 和 2000,但是额外的噪声会降低我们模型的预测能力,因此 R2 会下降,2 个系数的范围会更宽。

让我们试着这样做…

# Increase noise on target variable to +/- 50% of true value
np.random.seed(seed=0)
df['sell_price_extreme_noise'] = df['true_value'] * (
    np.random.randint(low=50, high=151, size=2000) / 100)y = df['sell_price_extreme_noise']model = sm.OLS(y, X)
results = model.fit().summary()
results

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

作者图片

R2 下降到 92.1%,但我们的系数仍然接近 1000 和 2000。正如所料,系数的范围更大。例如,对于第一个自变量(面积),新的范围是 982–1023,而上次运行的范围是 992–1009。

现在,假设测量误差在我们的独立变量中,这样我们数据集中的面积列与实际面积相差+/- 50%。这就是我们偏见产生的原因…

# We'll make area noisy such that it has +/- 50% error
np.random.seed(seed=0)
df['area_noise'] = df['area'] * (
    np.random.randint(low=50, high=151, size=2000) / 100)df['area_x_premium_noise'] = df['area_noise'] * df['premium']y = df['sell_price']
X = df[['area_noise', 'area_x_premium_noise']]model = sm.OLS(y, X)
results = model.fit().summary()
results

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

作者图片

R2 下降到 90.7%,但最重要的是,**我们的系数现在低估了面积的影响!**我们现在看到的系数是~917 和~1835。真实的预期系数(1000 和 2000)也超出了报告的范围(897-937 和 1781-1889)。这就是衰减偏差。

结束语

如果我们的目标是预测房价,那么低估面积真实影响的估计系数很可能是预测建模的最佳系数……你不需要做任何调整

由于所报告的面积不准确且有噪声,因此,与我们有真实面积测量值的情况相比,OLS 回归或机器学习模型对这种有噪声的面积测量值给予较小的权重是最佳的。不需要做任何事情来提高模型的预测精度。

问题在于解释系数。当我们被问到

“每增加一平方米,房价会上涨多少?”

如果我们考虑了正确的变量,并且我们知道它们包含高测量误差,那么我们必须记住,我们获得的系数低估了由于面积增加实际 1 平方公吨而导致的价格上涨。

您可以使用 相关性衰减 或其他类似技术来估计“真实系数”。

BIG.art:使用机器学习来创建高分辨率的美术作品

原文:https://towardsdatascience.com/big-art-using-machine-learning-to-create-high-res-fine-art-7dd695f99788

如何使用 GLIDE 和 BSRGAN 创建具有精细细节的超高分辨率数字绘画

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

来自 BIG.art 的样本结果,图片由作者提供

一年多来,我一直在试验和写作使用 AI/ML 从文本描述中创造艺术。在此期间,我注意到人们对这一领域的兴趣明显增加,部分原因是 NFT 艺术市场的蓬勃发展。

看了几十个生成艺术的 ML 模型,目前我见过最好的是 OpenAI 的 GLIDE。再加上苏黎世联邦理工学院的超分辨率尺寸调整模型 bsr gan[2],我发现结果非常好。

例如,下面是我的两个早期项目的结果,使用 CLIP+SWAGAN 的 MAGnet 和使用 CLIP+VQGAN 的 GANshare One ,与右边新系统的结果进行比较。我使用的提示是“一幅起伏的农田的画”、“一幅带有橙色三角形的抽象画”和“一碗水果的静物画”。

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

**比较 ML 模型的输出,**作者的图像

虽然对艺术的评估天生就是主观的,但对我来说很清楚的是,新模型的结果比前两个要好。(不过,我很欣赏橙色三角形的 CLIP/VQGAN 渲染的 3D 外观。)你可以点击每张图片仔细看。

概观

这是我的项目生成高分辨率美术(称为 BIG.art)的高级框图。在对系统进行概述后,我将在下面进一步讨论每个组件的细节。

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

BIG.art 组件,作者提供的图表

OpenAI 做了大量的工作,他们收集了 2.5 亿个文本-图像对,并训练了两个 GLIDE 模型,一个图像生成器和一个图像上采样器。我将一个文本提示“彩色玻璃瓶的静物画”传入 GLIDE 生成器,它创建了一组 7 个缩略图,每个 64x64 像素。然后,我将生成的缩略图和提示发送到 GLIDE upsampler,它将它们的大小调整为 256x256 像素。甚至上采样图像也非常小。如果你以 300 DPI 的分辨率打印,它的横向和纵向都不到一英寸。以下步骤用于调整所选图像的大小。

在尝试了几个调整大小的系统后,我选定了苏黎世 ETH 的 BSRGAN 超分辨率 resizer 模型。它很好地将所选图像的大小调整了 4 倍,达到了 1024x1024 像素。尽管调整后的图像边缘清晰,但填充区域趋于变平。为了补偿这一点,我为纹理添加了一些过滤噪声。

我选择性地将调整大小和纹理的图像通过德国海德堡大学的图像编码器和解码器 VQGAN。我发现 VQGAN 会发明新的细节,这些细节通常会增强调整后的图像。

最后一步是从 BSRGAN 中再次调整大小 4 倍,并再次通过纹理生成器。结果是一个 4096x4096 的图像,具有清晰的边缘和细节。以 300 DPI 的分辨率打印出来的照片会超过一平方英尺,适合装裱。这是带有一些细节的最终图像。

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

“彩色玻璃瓶静物画” 的 BIG.art 结果,带有显示细节的选定区域,图片由作者提供

请务必查看下面的附录,查看 BIG.art 的更多结果,并且您可以使用 Colab 在这里创建自己的艺术作品。

组件详细信息

使用 GLIDE 生成图像

2022 年 3 月,OpenAI 发布了一系列名为 GLIDE 的用于图像创建的 AI 模型,这是一种所谓的扩散模型,是生成式对抗性网络(GANs)的替代方案。谷歌研究院的两位工程师解释了扩散模型的工作原理。

扩散模型的工作原理是通过逐步添加高斯噪声来破坏训练数据,慢慢消除数据中的细节,直到它变成纯噪声,然后训练神经网络来逆转这一破坏过程。运行这个反向破坏过程通过逐渐去噪从纯噪声合成数据,直到产生干净的样本。该合成过程可以被解释为一种优化算法,其遵循数据密度的梯度来产生可能的样本。— Jonathan Ho 和 Chitwan Saharia [3]

扩散模型基本上是降噪模型,这些模型已经被训练了很长时间,以至于它们在给定纯噪声作为输入的情况下生成新的图像。

OpenAI 的 GLIDE 基于他们早期对使用扩散模型进行图像合成的研究。他们 2021 年的论文在标题中有一个大胆的声明,扩散模型在图像合成上击败了 GANs,表明以图像类别为条件的扩散模型可以获得比最先进的生成模型更好的图像质量[4]。在他们的最新论文 GLIDE:用文本引导扩散模型实现真实感图像生成和编辑中,作者…

…观察无分类器引导的滑翔能够推广到各种各样的提示。该模型通常生成逼真的阴影和反射,以及高质量的纹理。它还能够制作各种风格的插图,如特定艺术家或绘画的风格,或像素艺术等一般风格的插图

对于 BIG.art,我使用 GLIDE 图像生成器接收文本提示,并生成一系列七幅 64x64 的图像。系统试图描述提示中描述的内容。然后,我将图像和提示输入到 GLIDE upsampler,将分辨率提高到 256x256。该系统被训练成在调整大小时使用提示来帮助添加细节。

例如,GLIDE 从提示“海浪汹涌的海景”中生成以下七幅图像

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

**GLIDE 为“海浪汹涌的海景”生成的图像,**作者提供的图像

好吧,那些看起来很不错。这是另一组“波士顿城市地平线”

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

**GLIDE 为“波士顿城市天际线”生成的图片,**作者提供的图片

这些看起来有点像波士顿,但不完全是。在任何情况下,我将使用第四个调整大小的讨论如下。

请注意,OpenAI 发布了经过训练的 GLIDE 模型,这些模型无法创建人的图像。作者声明…

…在没有安全措施的情况下发布我们的模型,将会大大降低创建令人信服的虚假信息或深度伪造所需的技能。…为了减轻发布这些模型的潜在有害影响,我们过滤了包含人的训练图像…以降低模型在许多以人为中心的有问题的用例中的能力。亚历克斯·尼科尔等人[1]

用 BSRGAN 调整图像大小

有许多不同的方法使用人工智能来调整图像大小,以获得干净,清晰的结果。这个研究领域被称为超分辨率成像。

我测试了六种不同的图像超分辨率(ISR)尺寸调整模型,发现了两种称为盲尺寸调整网络(BSRNet)和盲尺寸调整生成对抗网络(BSRGAN)的模型,它们对于放大艺术图像非常有效。BSRGAN 模型使用 BSRNet 作为基线,然后使用 GAN 模型进行进一步训练。

来自苏黎世联邦理工学院的论文作者设计了一个实用的深度盲图像超分辨率退化模型,他说。

众所周知,如果假设的退化模型偏离真实图像中的退化模型,单幅图像超分辨率(SISR)方法将不能很好地执行。虽然一些退化模型考虑了其他因素,如模糊,但它们仍然不足以有效地覆盖真实图像的各种退化。为了解决这个问题,本文提出设计一个更复杂但实用的退化模型,该模型由随机混洗模糊、下采样和噪声退化组成。—张开等人

该系统经过训练,可以盲目地发现产生低分辨率(LR)图像的各种退化,从而在重建高分辨率图像时通知 AI 模型。以下是多种 ISR 模型的对比。左边是原始的 LR 图像,右边是用 BSRNet 和 BSRGAN 放大的图像。

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

**BSR 论文中描述的 ISR 方法比较,**来源:张开等人

您可以看到 BSRNet 和 BSRGAN 的图像和指标看起来比其他的更好。所示的两个质量度量是峰值信噪比(PSNR),其中越大越好,以及学习感知图像块相似性 LPIPS,其中越小越好。我发现 BSRGAN 通常看起来更锋利,所以这就是我在我的大型艺术项目中使用的。

这是 GLIDE 用双三次插值和 BSRGAN 放大了四倍的“波士顿城市天际线”图像。请注意,您可以点击图片查看详细信息。

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

使用(左)双三次插值和(右)BSRGAN 调整大小调整 4x 大小的比较,图片由作者提供

你可以看到,用 BSRGAN 调整大小后的图像更清晰、更有活力。然而,它似乎有一个喷枪质量,在光滑的区域缺乏纹理。我将在下一节讨论这个问题。

纹理生成器

为了给图像的平坦部分增加一些趣味,我创建了一个纹理生成器,它通过一个模糊函数运行一个单色随机噪声场。然后将噪声场添加到图像中。这些参数是:

  1. texture_amount -从 0 到 15%的噪波数量。
  2. 纹理大小-从 1 到 9 的噪波“块”的大小

这是原始图像,5%的纹理设置为尺寸 1 和 9。

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

不同纹理尺寸生成的图像(左)无,(中)尺寸为 1 时 5%,尺寸为 9 时(右)5%,作者提供的图像

我发现添加一点纹理会使生成的和调整大小的艺术作品更具美感。纹理生成器的源代码是这里是

使用 VQGAN 增强细节

当我在尝试各种图像生成技术时,我碰巧通过一个名为矢量量化生成对抗网络(VQGAN)的系统发送了一个用 BSRGAN 调整大小的图像[5]。我在过去的三个 GAN 项目中使用了 VQGAN。我通常使用文本提示和 OpenAI 的剪辑来微调图像,运行 VQGAN 100 到 400 次迭代。

有趣的是,我发现简单地用 VQGAN 编码和解码图像可以改善细节,尤其是用 BSRGAN 放大的图像。

下面是使用 VQGAN 编码/解码前后波士顿城市天际线图像的一个区域的细节。对于这个实验,我关闭了纹理生成器。

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

原始调整大小图像的细节(左)和通过 VQGAN 编码和解码的图像(右),作者提供的图像

这很微妙,但你可以看到 VQGAN 如何添加一些细节,似乎在右下方完成了一个建筑项目。

这是因为 VQGAN 的设计和训练方式。这是一个混合的 Transformer/GAN 模型,它查看图像的子区域,并将它们编码为之前在训练中看到的区域类型。解码的时候会和邻居一起无缝渲染细节部分。

BSRGAN 模型通过预测高分辨率图像的外观,将 256x256 图像放大到 1024x1024。然后 VQGAN 模型用新发明的细节映射结果图像。你可以在我的 GANshare 文章中看到 VQGAN 的完整报道。

再次使用 BSRGAN 进行最终的大小调整

BIG.art 的最后一步是用 BSRGAN 和另一种纹理处理再放大 4 倍。这是 4096x4096 像素的最终图像。

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

**“波士顿城市地平线”的大艺术效果图,**作者图片

你可以点击图像来放大并查看细节。请务必查看下面的附录,查看更多生成的图像。

结果

在试用 BIG.art 之后,我发现有些提示对于生成图像很有效,但有些则不然。

有效的提示

创作抽象画似乎效果不错。以下是一些提示。请注意,您可以在附录中看到生成的图像。

  • “一幅带有彩色圆圈的抽象画”
  • “一幅带有黄色和黑色细线的泼溅画”
  • “一幅带有紫色和绿色方格的拼色画”

风景画看起来也不错。

  • “意大利别墅的风景画”
  • 《湖上日落》
  • “雄伟的雪山”

还有宠物的画。

  • “一幅柯基的画”
  • “一只虎斑猫”
  • “玻璃鱼缸里的金鱼”

不起作用的提示

涉及人的提示(例如,“儿童玩耍”、“巴拉克·奥巴马”、“蒙娜丽莎”等。)不工作是因为 GLIDE 的训练数据故意缺人。

抽象概念的提示(例如,“自由”、“崭新的一天”、“失控”等)。)也不起作用,因为对互联网上使用这些词标记的图像的内容缺乏共识。

这里有一个问题定义了使用 BIG.art 的经验法则:当你在谷歌上搜索这个提示并查看结果图像时,它们看起来大致相似吗?如果是这样,使用该提示生成图像将会生成良好的图像。哦,不要试图渲染人。没用的。

源代码

这个项目的源代码可以在 GitHub 上获得。我在 CC BY-SA 许可下发布源代码。你可以使用这个 Google Colab 创建你自己的图片。

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

知识共享署名共享

如果您使用此代码创建新图像,请这样注明:此图像由罗伯特·a·贡萨尔维斯使用 BIG.art 创建。

感谢

我要感谢詹尼弗·林和奥利弗·斯特瑞普对本文的帮助。

参考

[1] A. Nichol 等人, GLIDE:使用文本引导扩散模型实现真实感图像生成和编辑 (2022)

[2] K. Zhang 等,BSRGAN,设计一个实用的深度盲图像超分辨率退化模型 (2021),IEEE/CVF 国际计算机视觉会议论文集(ICCV),2021,第 4791–4800 页

[3] J. Ho 和 C. Saharia,使用扩散模型生成高保真图像 (2021)

[4] P. Dhariwal 和 A. Nichol,扩散模型在图像合成上击败 GANs(2021)

[5]p . Esser、R. Rombach 和 B. Ommer 著的 VQGAN,驯服变压器实现高分辨率图像合成 (2020 年)

附录

以下是 BIG.art 针对以下提示的输出示例。这些是我认为七张照片中最好的。

抽象画

一幅带有彩色圆圈的抽象画

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

一幅带有彩色圆圈的抽象画,作者图片

一幅带有黄色和黑色细线的泼溅画

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

一幅带有黄色和黑色细线的泼溅画,作者图片

带有紫色和绿色方格的块状彩画

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

一幅带有紫色和绿色方格的块状彩画,图片由作者提供

风景画

意大利别墅的风景画

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

意大利别墅风景画,作者图片

湖面上的日落

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

**湖上落日,**作者 Imae

雄伟的雪山

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

雄伟的雪山,作者图片

宠物画

一只柯基犬的画

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

一幅柯基犬的画,作者图片

一只虎斑猫

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

一只虎斑猫,图片由作者提供

玻璃碗里的金鱼

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

玻璃缸里的金鱼,作者图片

奖金提示

以下是我的一位评审员 Oliver 建议的各种提示的一些效果图。

木材车间

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

一个木材作坊,图片作者

微生物

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

微生物,图片作者

塞车

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

交通堵塞,图片作者

为了无限制地访问 Medium 上的所有文章,成为会员,每月支付 5 美元。非会员每月只能看三个锁定的故事。

谷歌云平台中的大数据基础

原文:https://towardsdatascience.com/big-data-fundamentals-in-google-cloud-platform-3a2bcafa267

云计算|大数据|技术

第 2 部分——通往谷歌云专业数据工程师之路

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

Pawel Czerwinski 在 Unsplash 上的照片

欢迎来到 GCP 专业数据工程师认证系列的第二部分。在第一部分,我们介绍了谷歌的云平台及其层次结构。您可以在这里找到第 1 部分:

在这一部分,我们将讨论大数据技术和机器学习方面的服务和 GCP 的产品。

使用云 SQL 和 Spark 的产品推荐

产品推荐可能是现代企业最常见的 ML 应用之一。

这个用例的想法是将现有的推荐系统从内部迁移到云中。

当迁移到云时,我们将从专用存储迁移到集群外云存储。

ML 任务的核心部分是数据、模型和基础设施,用于训练和向用户提供预测。

作为一个用例,让我们选择开发出租房屋推荐系统的任务。

说到基础设施,首先,我们需要决定我们希望多长时间发布一次预测。

所以第一个决定是,我们的 ML 应用程序应该处理流数据还是批处理?

在我们的用例中,我们不需要不断地向用户推荐房屋,而是可以每天预加载结果,并在用户在线时提供给他们。因此,在这种情况下,批处理就可以了。

另一方面,根据我们拥有的房屋和用户的数量,我们还需要考虑计算资源。当我们处理大型数据集时,我们需要以容错的方式执行这种处理。这意味着,理想情况下,我们在一组机器上运行我们的过程,而不是在一台机器上。

容错分布式进程框架的一个例子是 Apache Hadoop。该过程将类似于:

  • 每一天,每一个用户,根据他们以前的评分预测每个房子的分数/评分
  • 存储这些预测评级
  • 用户登录后,查询前 N 名结果(基于预测分数)并显示给用户

因此,我们需要一种事务方式来存储预测。它需要是事务性的,这样我们就可以在用户阅读时更新表格。

GCP 提供多种交易解决方案。当然,考虑到不同的需求,我们必须使用不同的服务。下面,我们总结了一些 GCP 服务的属性。

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

谷歌服务及其访问模式。谷歌云平台

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

GCP 存储流程图。图片作者。

对于我们的示例用例,云 SQL 是最好的服务。

云 SQL 是一个完全托管的 RDBMS。使用静态 IP,我们还可以从任何地方连接到我们的云 SQL 实例。

我们还需要一个管理数据处理管道的服务。

我们需要一种服务来处理我们的数据批次和数据流,并训练机器学习模型。

这种软件的一个很好的例子是 Apache Spark 和它的机器学习包(Apache SparkML)。查看我的另一个博客,在创纪录的时间内运行 Spark 作业,而不需要任何基础设施开销。

你喜欢这篇文章吗?如果是,请考虑订阅我的电子邮件列表,以便在我发布新内容时得到通知。

https://david-farrugia.medium.com/subscribe

此外,考虑成为会员,使用我下面的推荐链接来支持我和你在 Medium 上喜欢的其他作家。每月 5 美元,你就可以无限制地阅读 Medium 上的每一篇文章。

https://david-farrugia.medium.com/membership

想给我买杯咖啡吗?

https://paypal.me/itsdavidfarrugia?country.x=MT&locale.x=en_US

想联系吗?

我很想听听你对这个话题的想法,或者其他什么。如果你想联系我,请发邮件到 davidfarrugia53@gmail.com给我。

Linkedin——Twitter

小字里的大数据

原文:https://towardsdatascience.com/big-data-in-little-wordle-306d5502c4d9

对约 7000 万场世界扑克比赛的大规模数据分析

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

尼尔斯·胡内尔弗斯特在 Unsplash 上的照片

最近,我一直在探索流行的文字游戏 Wordle[62–67]的各个方面,这款游戏在 2022 年 1 月和 2 月风靡了互联网。当我开始欣赏被问到的许多数据科学问题时,我决定使用 Wordle 作为我大学三年级的一个案例研究项目,这是我每年春天在都柏林大学教授的数据科学实践课程。该课程是一门基于实践的课程,要求小组学生设计、开发和展示他们自己的数据科学项目。为了让他们开始,我总是提出一个新的案例研究,作为对他们的期望的例子,下面是今年 Wordle 案例研究的总结。我将描述使用的数据集和回答的研究问题。而且,虽然我之前已经在博客上写了以下内容的一些方面,但这里呈现的结果代表了我迄今为止进行的最详细的分析。

TL;速度三角形定位法(dead reckoning)

这是一篇又长又详细的帖子,所以这里是一些关键的结果:

  • 我们描述了 Wordle 数据的两个重要来源的发展:(I)由 Wordle 模拟器生成的超过 5300 万个游戏的数据集;以及(ii)Twitter 上发布的超过 1500 万个真实世界游戏的数据集。
  • ( RQ1 )我们比较了模拟数据集和 Twitter 数据集,发现它们在几个重要方面有很强的对应性。
  • ( RQ2 )一项对 Twitter 游戏的分析表明,Wordle 在 1 月底/2 月初在 Twitter 上达到顶峰。
  • ( RQ3 )一项对模拟游戏的分析显示了一些开始词如何比其他的更有效。Twitter 数据集告诉我们,大约 17%的玩家使用了糟糕的开始词,这可能会对这些玩家的表现产生负面影响。
  • ( RQ4 )另一项对模拟游戏的分析显示,一些目标词比其他的更具挑战性,导致游戏时间更长,成功的游戏更少。Twitter 的数据也证实了这一点,但没有证据表明 Wordle 会像一些人猜测的那样变得越来越难。
  • ( RQ5 )玩好 Wordle 的能力取决于玩家选择尽可能满足目前所学约束的猜测。对模拟游戏的分析表明,正确的字母正确的位置约束是最重要的一致遵守。

一点点单词

Wordle 是一款简单却引人入胜的在线猜词游戏。每天都会选择一个新的秘密目标单词,玩家有一次机会参与游戏。在每次猜测之后,向玩家提供颜色编码的反馈(见图 1),以指示:(I)目标单词中包含哪些字母(如果有的话)以及它们的正确位置(绿色);(ii)哪些字母在目标单词中但不在它们的正确位置(黄色);以及(iii)目标中缺少哪些字母(灰色)。这样,随着每一个新的猜测,玩家可以学到更多关于目标单词及其字母的知识。

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

图 1:一个示例 Wordle 游戏和每次猜测后提供的提示。请注意,即使玩家第一次猜对了“L”(及其位置),Wordle 也不会帮助他们识别“L”是目标单词中的重复字母。这就是为什么“KNOLL”在 2022 年 1 月被证明是最难找到的单词之一,以及它很少被使用和“KN”的使用不寻常的事实。图片作者。

游戏可以在 Twitter 上共享,而不会破坏其他人的游戏,如图 2 所示。通过使用 Wordle 的反馈而不是猜测本身,每个游戏都作为实际游戏的一种格式塔来共享。这为玩家提供了足够的信息来展示他们的表现,但不会泄露游戏。

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

图 Twitter 上分享的一些 Wordle 游戏。图片作者。

是什么让 Wordle 成为一个好的数据科学话题?

选择一个合适的数据科学主题通常可以归结为至少两个重要问题:(1)是否有一组有趣的研究问题要问,( 2)是否存在可以回答这些问题的数据?就 Wordle 而言,即使粗略地浏览一下关于这款游戏的大量文章和视频[1,2,5,7,13,27,39,41,62–68],也能清楚地看到这款游戏是有趣问题的丰富来源,从“游戏的平均长度是多少?最好的起始词是什么? " to " 是不是有些目标词比其他的更难?最佳猜测策略是什么? 忽略一些暗示可以吗?

虽然不缺乏研究问题,但获得数据来回答这些问题是一个更具挑战性的命题。Twitter 是一个数据来源,虽然不完整,但在回答至少一些研究问题时应该是有用的(例如,平均游戏长度,目标词难度)。如果可以找到一种合理的方法来模拟现实的游戏,那么也有可能产生足够现实的合成数据集,为单独使用 Twitter 数据集无法回答的研究问题提供答案。事实上,也应该有可能使用来自 Twitter 的 Wordle 数据来评估合成/模拟数据与真实游戏相符的程度。

因此,对 Wordle 的分析似乎是一个强有力的数据科学项目候选。它很受欢迎。对于人们询问的关于他们的游戏和其他人的游戏的有趣问题的答案有着强烈的需求。应该有可能使用合成和真实世界游戏数据的组合来充分详细地探索这些问题——适当地定义。

相关著作

为了更好地理解人类(甚至动物)的表现[23,24,25,32,69,72],学习和技能习得[18,23,31,35,47,51],创造力[11,33,36,48]和决策制定[3,16,20,26,34,58,71],游戏在计算机科学研究[70]中占据了突出的地位。事实上,人工智能领域长期以来一直受到复制各种形式的人类认知和学习的努力的影响,游戏和谜题经常在这些努力中发挥重要作用[21,49,50,55,57,61]。

因果游戏和谜题也被证明是人工智能、机器学习、认知科学和创造力研究的沃土[8,14,43]。例如,近年来流行的数字游戏 Sudoku 吸引了机器学习、基于约束的计算和运筹学社区的大量关注[30,42,56]。当然,文字游戏也很受欢迎。基于人工智能的纵横字谜解算器和生成器继续在当代人工智能研究中占据显著地位[9]。19,37,38,45,46,53,54]拼字游戏仍然是一个受欢迎的人工智能目标,其额外的优势是提供了一个在多玩家环境中考虑对抗性游戏的机会[6,29,52,59]。

所有这些都是说,游戏和谜题一直吸引着研究人员的注意力,尤其是在计算机和认知科学领域。游戏和谜题之所以如此有趣,是因为它们为研究人员提供了进入因果关系受限宇宙的途径,让他们放弃了现实世界的混乱。他们经常被称为玩具问题,有时带有贬义,但这完全没有抓住是什么让游戏如此有趣和吸引人的关键。是的,他们确实存在于一个简化的游戏世界中,但是假设这限制了他们的复杂性是不正确的。通常,最持久的游戏是那些规则集足够简单但又不过分简单的游戏,以保留现实世界中存在的大部分复杂性。国际象棋和围棋的规则比人类冲突的现实要简单得多,人类冲突是它们起源故事的一部分,然而这些游戏提供了许多现实世界设置中存在的所有决策和战略复杂性,如果不是更多的话。所以毫不奇怪,一旦 Wordle 流行起来,它也会吸引数学家、计算机科学家、语言学家,甚至古怪的物理学家的注意。公平地说,值得指出的是,尽管如此,Wordle 是一个比更开放的文字游戏(如拼字游戏)更简单的游戏,但它足够复杂,可以成为一个有趣的研究目标。

虽然公众和媒体对 Wordle 一直很感兴趣,但它迄今为止有限的寿命意味着任何“严肃的”研究还没有时间接受同行评审,这是科学界接受的传统障碍。然而,至少有三种与单词相关的新兴研究——(I)如何选择好的/最佳的种子单词;(二)如何玩/猜得好/最优;以及(iii)理解 Wordle 的复杂性——我们将在下面进行总结。

早期对 Wordle 的兴趣大多来自于用来开始新游戏的最佳种子/起始词的问题,这导致媒体根据常见的语言试探法(如元音的存在等)对好词的大量猜测。[17]的工作更进了一步,尝试使用字母频率信息来识别三个最佳起始单词。简而言之,使用贪婪算法来识别具有最高频率得分的单词,同时考虑由与其他高得分单词的字母重叠引起的冗余。作者选定了 RAISECLOUTNYMPH ,因为它们包含频繁出现的互斥字母。[22]的工作采用了一种不同的方法来识别好的开始单词,这一次是通过建立一个模拟器,并允许它使用每个可能的开始单词与每个可能的目标单词进行游戏(一种类似的方法在后面的工作中使用),以识别具有最短平均游戏长度的开始单词。再一次加注出现在最上面。本报告作者的早期工作[67]也分析了模拟游戏,通过将任务视为集合覆盖问题[15]来寻找最佳起始单词,其目的是找到保证与每个可能的目标单词重叠至少一个字母的最小猜测单词集合。使用集合覆盖和模拟的组合导致了 TALES 作为最佳单个单词, TRIALCONES 作为最佳单词对,而讨厌ROUNDCLIMB 作为最佳的三个单词集合用作起始单词;然而应该注意的是,这些组合是使用独立的单词列表而不是官方的单词列表找到的。

当谈到玩 Wordle 时,[10]的工作提出了一种数学游戏方法,该方法使用潜在语义索引来选择下一个最佳猜测。它给出的结果表明,在初始猜测为石板的情况下,该方法平均在 4.04 次猜测中解决难题,成功率为 98.7%。但是就像许多关于 Wordle 的技术讨论一样——参见[60]的工作——这种方法依赖于复杂的数据和技术能力,而这些对于普通玩家来说是不可能的。简而言之,人类玩家不携带字母频率或信息增益和词熵的详细信息,许多技术依赖这些信息来选择最佳的下一次猜测。考虑到这一点,[4]的工作着眼于选择起始词的两种不同方法,以及基于强化学习发现最佳人类策略的框架,从而产生了一组简单的规则,作者声称这些规则可供人类玩家使用。

最后,为了跟进 Wordle 是比其他文字游戏更简单的游戏这一观点,值得注意的是[40]的工作,该工作认为,尽管其表面上简单,但 Wordle 编码了困难(在数学/复杂性意义上)的问题。作者认为,游戏的约束并没有通过证明(未经同行评审验证)它在自然环境中是 NP-hard 来限制其复杂性。对于那些对 Wordle 研究的创造性边缘案例感兴趣的人来说,[28]的工作也值得一提,并作为最勇敢的读者的练习。

研究问题

对于这里介绍的工作,我们将使用两个 Wordle 数据来源:由模拟器生成的模拟数据和 Twitter 上共享的真实世界游戏数据。这两个数据集将在后面详细描述,我们将使用它们来回答以下研究问题。

  • RQ1:模拟数据是否接近真实游戏? 对于来自我们模拟器的数据是否是真实游戏数据的合理代理,形成一个观点是很重要的。为此,我们将使用几种不同的游戏性指标来比较两个数据集的几个方面。
  • RQ2:Wordle 到底有多火? 我们可以使用 Twitter 数据集来评估年初以来 Wordle 的受欢迎程度,其依据是更多人在 Twitter 上分享意味着更多人玩 Wordle。这不会提供 Wordle 受欢迎程度的完整图片,因为只有一小部分玩家会在 Twitter 上分享他们的游戏,那些分享的玩家可能会对他们分享的游戏有所选择,但它应该会提供一些关于游戏受欢迎程度以及它如何变化的合理见解。
  • RQ3:起始字的选择重要吗? 这是 Wordle 玩家最初问的问题之一。数据告诉我们什么?是否有证据表明,一些起始词比其他起始词导致更长或更短的游戏或更多成功/不成功的游戏?坚持一个好的开头词值得吗?
  • RQ4:是不是有些目标词比其他的更有挑战性? 如何评价一个目标词的难度?迄今为止最难的单词是什么?为什么这些单词比较难?游戏的难度随着时间的推移有变化吗?
  • RQ5:Wordle 的反馈有多重要? 对于玩家来说,选择满足到目前为止所学的关于目标词的所有提示/约束的猜测是否重要?如果玩家需要做出妥协,那么哪些约束比其他约束更重要或更不重要?

Wordle 模拟器

这项研究的一个关键因素是一个现实的 Wordle 模拟器的可用性,这样我们就可以大规模地生成样本游戏。与一些相关的工作[1,2]不同,我们的模拟器不是为玩一个最优的 Wordle 游戏而设计的。相反,我们更感兴趣的是开发一个模拟器,可以代表不同的游戏风格和玩家能力,类似于我们可以从现实世界的玩家那里期待的那些。在接下来的内容中,我们将总结模拟器初始版本中采用的基本方法,然后描述如何对其进行调整以模拟更大范围的更真实的游戏。

我们开发的模拟器将一个目标单词和一个单词列表作为输入,用作有效的猜测。我们还包括这些词在常用中的流行程度信息,作为对候选猜测进行排序的一种方式。下面的概述算法展示了如何通过一系列猜测来模拟每个游戏,直到找到目标单词。

在每一轮中,提示/反馈用于更新关于目标单词的四组不同的知识:

  1. 正确字母 —猜测中的字母也在目标中,但不在正确的目标位置。
  2. 正确位置 —猜测中的字母在目标中的正确位置。
  3. 错误字母 —猜测中不在目标中的字母。
  4. 错误位置 —正确字母的错误位置。

这种知识可以用来约束每个新猜测的选择,并且在模拟器的初始版本中,从满足尽可能多的当前约束的可用猜测字中选择一个新猜测( pick_guess) 。通常,有几个兼容的猜测,模拟器选择了最流行/最常见的一个——使用一个单独的开源单词流行度数据数据集——来模拟玩家选择最先想到的单词。

一个更新的模拟器算法(如上所示)也包含了一个玩家词汇完整性的简单模型。基本思想是,具有更完整词汇的玩家应该更有可能能够识别满足当前约束的单词,因此在他们玩游戏期间不太可能需要牺牲约束。相比之下,词汇量不太发达的玩家将很难识别出满足所有游戏限制的猜测,因为这些单词不在他们的词汇表中。相反,这些玩家更有可能牺牲约束,选择他们更熟悉的次优猜测;这样的话仍然可以帮助游戏向前发展,只是不是以一种非常有效的方式。这个词汇表模型是使用参数 v ( 0 < v ≤ 1 )来实现的,以指示玩家词汇表中可用猜测单词的比例(按流行度排序)。因此,如果 v = 0.9 ,那么最流行的猜测单词的前 90%在玩家的词汇中,而 v = 0.5 意味着玩家的词汇仅包括前 50%的单词。

当选择新的猜测单词时,如果存在满足所有约束条件的单词,这些单词在玩家的词汇表中,则选择最流行的一个。然而,如果不存在这样的词汇内单词,那么模拟器改为选择满足至少两个约束的最流行的非词汇单词。通过这种方式,我们可以预计词汇不完整的玩家更有可能需要在游戏后期进行次优猜测,因为他们的词汇中没有一个词满足不断增长的可用约束条件。

图 3 显示了模拟器制作的两个游戏示例,使用相同的开始和目标单词,但是词汇设置不同。(a)中的较低词汇表设置导致对目标单词的搜索时间长得多,因为在早期阶段牺牲了约束。例如,单词的第三个猜测这些忽略了正确字母约束,因为这个猜测比前一个猜测具有更少的正确字母。

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

图 3:模拟器使用不同词汇设置玩的两个示例游戏。在(a)中,模拟器使用 v = 0.6,这意味着它的词汇只有 60%完成,因此,它倾向于在早期牺牲约束,导致更长的游戏。在(b)中,模拟器使用 v = 0.9,所以它的词汇表几乎是完整的,这意味着约束不太可能被牺牲。图片作者。

数据和方法

在这项研究中,我们将使用作者创建的两组不同的 Wordle 游戏数据:(I)从模拟器生成的大量模拟游戏中产生的数据集;以及(ii)在 Twitter 的许可下,根据其搜索 API 的学术许可条款,从与 Wordle 相关的推文中收集的真实世界游戏数据集。在适当的时候,我们计划在知识共享许可下发布这两个数据集,并将在可用时添加到这些数据集的链接。

为了生成模拟数据集,模拟器玩了一些游戏,其中来自 Wordle 的目标单词列表的 2309 个单词中的每一个都被用作单独的目标。此外,我们还将模拟器配置为使用每个目标单词作为可能的起始单词。这意味着一个完整的模拟回合由 5,331,482 (2,309 x 2,309)个个人游戏组成。

接下来,我们针对 10 种不同的词汇设置( 0.1 ≤ v ≤ 1 以 0.1 为增量)完成单独的模拟回合。这意味着我们完整的模拟数据集由 53,314,820 个单独的游戏组成,对于每个游戏,我们记录以下数据:

  1. 目标词:使用的目标词。
  2. 起始字:使用的起始字。
  3. v:使用的词汇设置。
  4. 回合:完成游戏所需回合数。
  5. 猜测值:使用的猜测值。
  6. 提示:每轮游戏结束后提供的一组提示。每个提示是一个由 5 个符号组成的字符串( *** 或 +X 分别对应 Wordle 的绿色、黄色和灰色反馈)。
  7. 约束:为每一轮选择猜测时满足的约束数组。

结果数据集表示为包含 53,314,820 行的单个表。每行对应一个游戏,上面的每一行都是它的列。在这个数据集中,有 329,401,297 个单独的回合、猜测和提示。表 1 显示了该数据的一个示例。

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

表 1:来自模拟数据集的 30 行的样本,示出了包括目标和开始单词、词汇设置(v)、游戏回合数、每回合的猜测以及每回合接收的提示的列的子集(“*”是绿色正方形;+'是黄色方块;x 是灰色正方形)。出于清晰和空间的原因,每个游戏所使用的约束已经被省略。

Twitter 上的 Wordle 游戏与“ Wordle n r/6 ”形式的签名一起共享,其中 n 是当前游戏的号码, r 是当前游戏的回合数。为了构建 Twitter 数据集,我们使用 Twitter 搜索 API 来查找所有包含单词“Wordle ”,后跟游戏有效数字和使用适当正则表达式的有效“方块”序列的推文。总共收集了 15,373,887 个有效游戏(1,679,660 个独立玩家),包括关于玩家 id、游戏 id、推文时间、日期、位置、语言和包含游戏的推文文本的数据,以及发布的单元格网格。表 2 显示了该数据的示例,该数据集总共包含 62,986,524 轮游戏(跨 15,373,887 场游戏)。

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

表 2:来自 Twitter 数据集的 30 行样本,显示了包括玩家和游戏 id、目标单词、游戏编号、每场游戏的回合数、游戏日期和游戏回合的翻译字符串的列的子集(’ * '是绿色方块;+'是黄色方块;x 是灰色正方形)。玩家和游戏 id 是 Twitter 提供的作者和 tweet ids 的匿名版本。

RQ1:比较模拟数据集和 Twitter 数据集

我们在这一部分开始分析,通过比较模拟数据集和 Twitter 数据集来确定前者是否提供了现实世界游戏的真实描述。鉴于模拟数据集包含各种词汇设置的游戏——其中一些可能无法代表真实的游戏——我们将从比较 Twitter 游戏和基于几个词汇设置的模拟游戏集开始。图 4 显示了给定长度游戏的累积分数的结果。例如,我们可以看到,大约 25%的游戏长度达到并包括 3 轮,尽管只有大约 10%的游戏具有最低的词汇设置。不出所料,随着 v 的增加,给定长度内游戏的累积分数也会增加;例如, v = 0.1 只有不到 40%的游戏在 6 轮或更少的回合中完成,但是 v = 0.9 几乎 90%的游戏都是成功的。

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

图 4:给定长度的模拟和 Twitter 游戏的累积部分。基于词汇设置对模拟游戏进行分组;v = 0.1,0.5,0.7,0.8,0.9,1。图片作者。

图 4 还显示了 Twitter 数据集的相应累积游戏分数(带圆形标记的黑线),应该清楚的是,这些游戏最接近于模拟游戏,其中 v = 0.9v = 1.0;与 Twitter 相比,前者高估了较短游戏的比例,后者倾向于低估较短游戏的比例。这表明将 Twitter 游戏与模拟游戏的子集进行比较对于 v ≥ 0.9 是合适的。

事实上,图 5 显示了 Twitter 和模拟器的给定长度游戏的分数( v ≥ 0.9 ),作为(a)每个游戏长度的实际游戏分数和(b)游戏长度增加的累积游戏分数。它展示了 Twitter 和模拟( v ≥ 0.9 )数据集之间不完美但紧密的对应关系。前者的平均比赛时间为 4.09 回合,而后者为 4.01 回合;模拟器产生更多的 4 轮游戏,但更少的 6 轮游戏,但除此之外,两个数据集之间有非常强的对应关系。

这意味着我们可以有理由相信使用模拟数据集(v≥0.9*)作为真实世界游戏的合理近似。虽然这里没有显示,但当我们进一步将模拟数据集限制为仅使用与 Twitter 数据集相同的目标词的那些游戏时,我们在模拟数据集和 Twitter 数据集之间获得了更紧密的对应关系。在这种情况下,两个数据集的平均游戏长度为 4.09 轮,比较平均游戏长度的 t 检验表明两个数据集之间没有显著差异(t = 0.406,p = 0.684 )。*

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

图 5:比较了(A)游戏(模拟和 Twitter)的游戏时长和(b)游戏(模拟和 Twitter)的累积游戏时长。注意,模拟游戏用 v ≥ 0.9。图片作者。

RQ2:Wordle 的流行程度

在我们更详细地探索游戏的本质之前,让我们通过使用 Twitter 数据集来检查随着时间的推移在 Twitter 上发布 Wordle 游戏的独特每日玩家(新玩家和重复玩家)的数量,来考虑 Wordle 的增长和受欢迎程度。

为此,我们根据数据集中第一次出现的给定玩家 id(按日期排列)定义一个新的玩家,并将循环/重复玩家定义为在较早日期出现的玩家 id。然后,我们将 Twitter 数据按照日期和游戏号码的组合进行分组,并计算每个日期新玩家和重复玩家的出现次数。此外,对于每个日期,我们还计算重复出现的玩家发布的游戏的平均数量。

结果在图 6 中显示为每个日期的新玩家和回归玩家数量的堆积条形图,以及回归玩家发布的平均游戏数量的单独线图。它显示了 Wordle 在 2022 年 1 月期间的快速增长。这个月开始时,每天约有 10,000 名独立玩家在 Twitter 上发帖,但到了 1 月底,独立玩家总数迅速上升至近 250,000 人的峰值。自 2 月以来,在 Twitter 上发布游戏的独立玩家数量一直在下降,在撰写本文时,每天的独立玩家数量已降至约 10 万人;现在每天也只有不到 4000 名新玩家,低于每天约 50000 名新玩家的峰值。

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

图 Wordle 在 Twitter 上的受欢迎程度,以日新增用户数和日返回用户数表示(左侧 y 轴)。还显示了《纽约时报》收购 Wordle 的日期和 NYT“重新推出”Wordle 的日期。还显示了每个返回玩家的平均游戏次数(右侧 y 轴)。图片作者。

这表明我们已经度过了巅峰时期,至少在 Twitter 上是这样,但这并不意味着 Wordle 的受欢迎程度正在下降。例如,大多数玩家继续私下玩是完全合理的。此外,《纽约时报》2 月份重新推出的 Wordle 肯定吸引了许多新玩家,即使他们不愿意在 Twitter 上分享他们的努力。

RQ3:起始词的选择很重要吗?

在 Wordle 中,每局游戏开始时你都是独立的。没有提示可以指导你,所以大多数玩家试图使用一些明智的策略来选择一个可能与目标共享一些字母的单词。例如,有很多不同元音的单词通常是一个很好的选择,因为几乎所有的英语单词都至少有一个元音。带有普通辅音的单词,如“s”或“t”也是一个好主意,所以像凝视审判这样的起始单词被证明是有效和受欢迎的。但这重要吗?有没有一小群客观上比别人强的潜在起始词?如果是,它们是什么,它们带来了多大的优势。

为了确定最佳起始词,我们将使用为 v ≥ 0.9 的所有游戏生成的模拟数据,因为这种词汇设置提供了与 Twitter(真实世界)数据的最佳拟合。在模拟数据中,我们已经为起始单词和目标单词的每种组合生成了游戏,这意味着我们使用 2,309 个可能的起始单词中的每一个和 2,309 个可能的目标单词中的每一个来玩游戏,并且对于两种词汇设置,总共产生 10,662,962 个游戏(G)(2,309 x 2,309 x 2)。

有几种不同的方法,我们可以评估一个开始字的性能。例如,一个显而易见的选项是,当使用游戏的每个开始单词时,计算它的平均游戏长度,如等式 1 和 2 所示,其中回合(g) 表示游戏中的回合数 g 。另一种替代方法是,在给定起始单词的情况下,计算获胜游戏的分数,即在 6 轮或更少轮中完成的游戏,如等式 3 所示;换句话说,一个好的开始词会产生更大比例的获胜游戏。还有一个选项是考虑短游戏(3 轮或更少轮的游戏)的部分和长游戏(需要 5 或 6 轮的游戏)的部分,如等式 4 和 5 所示。

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

对于这种分析,我们为 v ≥ 0.9 的模拟数据集的子集中的 2,309 个可能的起始词中的每一个计算上述度量。接下来,我们制作如图 7 所示的散点图,其中每个点对应于一个特定的起始单词,并根据其短游戏的比例(x 轴)和长游戏的比例(y 轴)位于图上。此外,每个点的直径与相应开始单词的获胜分数成比例,最后,每个点根据其平均游戏长度进行颜色编码,如所示的色标所示。这样,我们可以在一个二维散点图上呈现所有四个性能指标。

结果表明,开始词的选择很重要,因为我们可以看到短游戏和长游戏的比例以及平均游戏长度有相当大的变化。胜率的变化要小得多,平均为 93%,并且总是高于 89%。例如,右下象限中的单词与短游戏的高于平均分数和长游戏的低于平均分数相关联;短赛次数最高的词是 LEANT ,也有 93%的胜率,平均游戏时长 4.3 回合。相比之下,左上象限用于短游戏较少而长游戏较多的起始词; BOBBY 在这方面脱颖而出,因为它的长游戏数量最多,短游戏最少,胜率仅为 90%,平均游戏时长为 5 轮。如果你对优化胜率更感兴趣,那么最好的开始词可能是毛绒,因为它在所有开始词中胜率最高(94%),但这是以更长的平均游戏长度(4.4 轮)、更少的短游戏和更多的长游戏为代价的。

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

图 7:模拟游戏中起始词的平均游戏长度分析(v ≥ 0.9)。每个标记对应于模拟器为给定起始单词产生的游戏,并且根据为给定起始单词产生的短游戏部分(x 轴)和长游戏部分(y 轴)来定位。每个标记基于相应开始单词的平均游戏长度进行颜色编码,并基于其相应的成功游戏分数来确定大小。水平虚线和垂直虚线分别表示长游戏和短游戏的平均分数。图片作者。

图 7 还包括媒体中经常提出的一些更常见的起始词(例如 SLANT、SLATE、CRATE、TRACE )。他们在这一分析中也做得很好,尽管不如 T2·利恩特做得好。

好的开始的好处和坏的开始的代价相比如何?要了解这一点,我们需要定义什么是好的开始或坏的开始。在 Twitter 数据集中,第二轮(我们认为是游戏的开始)后正确提示的中位数(绿色加黄色)仅为 2——顺便提一下,模拟数据集也是如此——因此我们可以说,根据等式 6 和 7,如果正确提示严格多于中位数,游戏就有一个好的开始,如果正确提示严格少于中位数,游戏就有一个坏的开始。

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

在我们的 Twitter 数据集中,几乎 17%的游戏开局不利,相比之下,48%的游戏开局良好;开局好的平均比赛时间是 4 轮,而开局不好的是 4.6 轮。因此,开局不利的成本大约是一轮的 0.6 倍。还不错,但这是全部情况吗?再深入一点,在图 8(a)中,我们看到了好的和坏的开始的游戏的累积分数,与平均游戏长度的简单比较相比,我们可以看到更多的实质性差异。例如,我们现在可以看到好的开始比坏的开始(大约 9%)产生更多的短游戏(大约 37%);换句话说,良好的开局比糟糕的开局多 3 倍多的短比赛(长度≤ 3 轮),如图 8(b)所示。因此,开局不利的真正代价主要体现在短距离比赛数量的大幅减少上。

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

图 8:基于对 Twitter 数据集中游戏的分析,一个好的开始的好处和一个坏的开始的代价。在(a)中,显示了具有良好开局的游戏与具有糟糕开局的游戏在给定游戏长度下的累积分数。在(b)中,条形图显示了在给定的游戏时间长度内,好的开始与坏的开始的相对比例。图片作者。

对模拟数据集执行相同的分析( v > 0.9 )会产生大致相似的结果,如图 9 所示。

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

图 9:基于对 Twitter 数据集中游戏的分析,一个好的开始的好处和一个坏的开始的代价。在(a)中,显示了具有良好开局的游戏与具有糟糕开局的游戏在给定游戏长度下的累积分数。在(b)中,条形图显示了在给定的游戏时间长度内,好的开始与坏的开始的相对比例。图片作者。

RQ4:为什么有些目标词比其他的更有挑战性?

在探索了最佳起始单词的问题之后,很自然地将我们的注意力转向目标单词。是不是有些目标词比其他的更有挑战性?如果是,那是为什么?自从《纽约时报》接手以来,沃尔多是否像一些人声称的那样变得更加困难了?我们可以定义一个目标词的难度,类似于我们评估一个起始词的好坏。根据等式 8-12,如果目标单词与较长的游戏、较低的胜率、较短游戏的较小部分或较长游戏的较大部分相关联,则该单词是困难的。

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

然后,使用模拟数据集(具有 v ≥ 0.9 )我们可以为每个可能的目标词计算这些指标,并且,如同起始词的情况一样,我们可以产生图 10 所示的散点图来提供我们的发现的总结。与图 7 相比,这一次我们看到了一个稍微不同的开始词模式。虽然有些单词比其他单词更难(左上象限),有些单词挑战性要小得多(右下象限),但多空游戏之间的关系本质上并不是线性的。像 JAUNTMAMMY 这样的词通常与漫长的游戏和极低的胜率联系在一起。相比之下,更容易的目标词,如世界,它们有 100%的胜率,并产生非常短的游戏。

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

图 10:模拟游戏目标词的平均游戏长度分析(v ≥ 0.9)。每个标记对应于模拟器为给定目标单词产生的游戏,并且根据为给定目标单词产生的短游戏部分(x 轴)和长游戏部分(y 轴)来定位。每个标记基于相应目标单词的平均游戏长度进一步进行颜色编码,并基于所产生的成功游戏的相应部分来确定大小。水平虚线和垂直虚线分别表示长游戏和短游戏的平均分数。图片作者。

为了进一步探索目标词的难度,通过 Twitter 数据集,我们重点关注短游戏和长游戏的比例。例如,图 11 显示了 Twitter 数据集中最近 100 个目标词的每个目标词的短期和长期游戏的比例(以条形表示);每个目标单词的平均游戏长度也显示为线形图。我们可以看到,大多数目标单词与短游戏的关联多于长游戏,但对于一些单词来说,情况正好相反。比如大约 50%的游戏是短的,而长游戏只占游戏的 10%左右。对比一下的泔水代理,它们的长游戏比短游戏多。这表明对玩家来说没有代理有挑战性,顺便提一下,这与使用模拟数据集评估单词难度的结果一致,因为代理位于图 10 的左上角象限,而位于右下角象限;我们再一次发现模拟器和现实世界游戏之间有很强的对应关系。

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

图 Twitter 数据集中 100 个最近的目标词的长短游戏比例;还显示了每个目标单词的平均游戏长度。图片作者。

我们将一个目标词的难度比定义为其长短局之比;参见等式 13。因此,难度比> 0 表示具有挑战性的单词——长游戏比短游戏多——而难度比< 0 表示更容易的单词,短游戏比长游戏多。比如像这样的易词,难度比为-0.927(以0.037/0.5211为准),而像will这样难度更高的词,难度比为 1.98(. 301/. 101)。

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

图 12 显示了 Twitter 数据集中所有目标词的难度比;难词(难度比> 0 )显示为红色条,较容易的词显示为绿色条。这澄清了在数据集的那个时期,有一些单词变得更加困难。到目前为止,最难的单词是will,这也被认为是模拟器中最难的单词之一。相比之下,根据 Twitter 数据集,像这样的词是最容易的词,模拟数据集也是如此。

顺便提一下,这一分析也有助于回答这样一个问题,即收购《纽约时报》后,Wordle 是否变得更具挑战性。事实并非如此,至少没有证据表明,在收购或《纽约时报》重新推出 Wordle 之后,单词的平均难度或更难单词的出现频率有所变化。

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

图 12:Twitter 上 100 个最近的目标词的难度比(条),以及游戏长度的 7 天滚动平均值(虚线)。图片作者。

鉴于一些单词确实比其他单词更具挑战性——无论是在模拟数据集还是在 Twitter 数据集上——我们能说些什么原因呢?一种可能是,不常用的单词更难,因为它们不太可能成为人们的首选,即使我们已经学会的提示将它们挑选出来。同样,字母不常见的单词也可能更难。但还有另一个疑点,当我们查看 Twitter 上的困难单词子集时,我们可以看到:大多数具有正难度比率的单词都有重复的字母(例如, ABBEY,KNOLL,SKILL,SWILL,VIVID,lompty)。在猜测 Wordle 时,很自然地会倾向于选择没有重复字母的单词,以最大限度地增加某些字母与目标单词重叠的机会,而且,当我们猜测一对重复字母中的一个时,Wordle 不会提供任何迹象表明一个单词中可能有第二个这样的字母。

因此,我们对单词困难有三种可能的解释——不常用的单词、不常用的字母和重复的字母——可以通过测量来确定它们在困难单词和容易单词之间是否不同。例如,使用现有的英语单词数据集,我们可以计算给定的 5 个字母单词的频率,并将其用作单词频率归一化测量的基础,如等式 14 所示;因此,NormWordFreq(wt) > 1 意味着 wt 比一般单词更常见。同样,我们可以根据等式 16,基于字母在 5 个字母的单词中出现的频率来计算相应的字母频率的归一化度量(等式 15);因此, NormLetterFreq(wt) > 1 意味着给定目标单词的平均字母频率大于平均值。

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

然后,我们可以使用等式 14 和 16 来计算困难单词(那些具有难度比> 0 的单词)和简单单词(难度比< 0 的单词和字母的平均频率。我们还可以计算包含重复字母的难/易单词的分数,并将其归一化为包含重复字母的 5 个字母单词的总分数。这些结果如图 13 所示。他们证实了我们的假设:难词远不如易词常见(图 19(a)),它们的字母也不太常见(图 19(b)),但难词更有可能有重复的字母(图 19©)。

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

图 13:对单词和字母级别的频率以及重复字母的可能性的分析,有助于解释为什么一些目标单词比其他单词更难:困难的目标往往不太常见,涉及更多不寻常的字母,并且更可能有重复的字母。在每个图中,频率数据被归一化,使得值 1 对应于 5 个字母单词的平均值(用水平虚线表示)。图片作者。

RQ5:Wordle 的约束有多重要?

既然我们已经分析了起始词和目标词,是时候把注意力集中在一般的游戏玩法上了,特别是如何进行猜测。对于玩家来说,选择满足当前已知目标单词的猜测单词有多重要?玩家能承受牺牲一些约束而仍然玩得很好吗?哪些约束条件在使用时会提供更多有用的信息?

由于 Twitter 数据集不包含关于猜测的具体信息,因此不能用来回答这个问题。相反,我们将专门关注完整的模拟数据集;即使用 v 的所有值。使用缩减词汇设置的游戏与大量牺牲的约束相关联,这将允许我们的分析考虑约束使用的全部范围。

模拟数据集包括模拟器使用的约束条件的逐轮说明;每轮最多可关联 4 个约束(正确字母、正确位置、错误字母、错误位置)。我们可以计算每一轮游戏的错过的约束的数量,并根据等式 17 和 18 使用它来计算每轮游戏的错过的约束的平均数量;*Gi . used【r】*是指游戏 Gir 轮使用的约束集合。

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

接下来,我们计算具有给定词汇设置(v)的所有游戏的平均游戏时间和胜率,记录每轮对于每个值 v 错过的约束的平均数量。结果如图 14 所示。请注意每轮错过的约束条件的数量是如何随着 v 值的增加而减少的,因为当目标单词不在模拟玩家的词汇中时,模拟器会牺牲约束条件。例如,当只有 10%的目标单词在词汇表中( v = 0.1 )时,平均每轮牺牲 0.86 个约束,这意味着大多数轮将牺牲至少一个约束。但是当 *v = 0.8,*则每轮只牺牲 0.41 个约束;因此,在 5 轮游戏中会牺牲 2 个约束(0.41 × 5 个约束)。并且当 v = 1 时,所有约束总是得到满足。

图 14 中的结果显示,随着牺牲越来越多的约束,平均游戏时间增加,平均胜率降低。例如, v = 0.8 (每回合 0.41 个错过的约束)导致游戏的平均游戏时长刚刚超过 5 回合,胜率约为 80%,但对于 v = 0.4 (每回合 0.77 个错过的约束),平均游戏时长增加到 7 个,只有约 40%的游戏成功。

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

图 14:不同词汇设置的平均游戏长度(和获胜的比例)。对于每个词汇表配置,每轮遗漏的约束的平均数显示在括号中。图片作者。

因此,错过的约束在游戏长度和胜率方面对游戏性能有实质性的影响,但是一些约束比其他的更重要吗?使用不同的约束条件可以获得多少信息?为了测试这一点,我们需要将我们的分析从基于游戏——也就是说,查看单个游戏的各种属性——转移到基于回合的分析。换句话说,我们将开始查看在游戏中做出的个人猜测。到目前为止,基于游戏的关注意味着我们的分析已经在 5300 万个项目(游戏)的大集合上运行。现在,我们将把它转换成一个更大的数据集,包含超过 3.29 亿个项目(轮次/猜测)。对于这个分析,我们对两件事感兴趣:(1)猜测满足了哪些约束,以及(2)从猜测中了解了多少新信息?

我们转换后的数据集包含一条记录,记录了在特定猜测过程中使用了四个可能约束条件中的哪一个——正确的字母、正确的位置、不正确的字母、不正确的位置——因为模拟器保存了这些信息。为了估计通过猜测获得的新信息,我们使用 Wordle 的反馈,通过计算该猜测收到的绿色和黄色提示的总数。我们将绿色和黄色提示的数量称为正确信息的数量,这样,随着回合的展开,正确信息数量的差异就可以衡量猜测的有用程度。

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

图 15: (a)对于不同的游戏总长度,每轮游戏中已知字母(绿色或黄色提示)的总数。(b)对于不同的总游戏时间长度,每轮使用的限制的数量。图片作者。

例如,在图 15(a)中,我们看到对于不同长度的游戏,每一轮获得了多少正确的信息。例如,对于短游戏(游戏长度= 3),平均来说(模拟的)玩家在他们最初的猜测之后学习到 1.5 条正确的信息。他们的第二次猜测给他们带来了大约 3 条正确的信息,然后他们在第三次猜测中猜对了所有 5 个字母。对于更长的游戏,新信息的积累遵循越来越浅的轨迹,至少对于模拟器来说,在长时间游戏(> 6 轮)中,新的猜测可能导致比前一轮更少的信息。当玩家开始忽略约束条件,从而猜测可能违反目标单词已知信息的单词时,这种情况就会发生。事实上,在图 15(b)中有一个相应的图,显示了每一轮满足的平均约束数,我们可以看到随着模拟器牺牲越来越多的约束,游戏长度是如何增加的;这类似于上面图 14 中所示的,但是基于不同游戏长度的一轮接一轮,并使用每轮使用的实际限制数。

哪些约束更重要或更不重要是一个更复杂、更微妙的问题。我们建立一个回归模型,使用从猜测中获得的正确信息量作为因变量,使用四种约束类型的二元变量作为自变量。我们还包括游戏回合作为一个额外的独立变量,以确定其对新获得的信息的影响。因此,我们的模型被设计来预测从基于使用的约束和游戏回合的猜测中获得的新信息的量。

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

表 3。使用约束和轮数作为独立变量,预测每轮获得的新信息量的 OLS 回归结果。

得到的模型作为预测模型不是很好;见表 3。其调整后的 R2 值仅为 0.38,这意味着每轮获得的新信息量中只有约 38%的变化是由约束和游戏回合解释的;这并不奇怪,因为这很大程度上取决于实际猜测的细节和目标词等。然而,我们对这个模型作为预测模型有多好并不感兴趣,而是对它如何被用作解释模型感兴趣。特别是,我们对独立变量的系数感兴趣,它告诉我们它们在每次猜测获得的新信息数量方面的相对重要性;这些系数显示在表 3 的【T2 系数】栏中。

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

图 16:线性回归中每个独立因素的回归系数,用于预测每次猜测/轮次的总体信息增益。图片作者。

图 16 显示了每个独立变量的这些系数的值。它们可以解释为自变量单位变化的因变量(获得的新信息)的变化,同时保持所有其他自变量不变;由于约束变量是二进制的,单位的改变意味着约束被使用。因此,我们可以看到,当遵守正确 字母约束时,平均获得 1.4 个单位的新信息,相比之下,当使用正确位置约束时,仅获得不到 1 个单位的新信息。相比之下,不正确的字母不正确的 位置约束对获得的新信息量的影响更小。因此,我们可以得出结论,在所有其他条件相同的情况下,正确的字母和位置约束是最重要的,其次是不正确的字母约束,然后是不正确的位置约束。

游戏回合的效果不太重要。它具有正系数的事实意味着,在所有其他条件相同的情况下,后几轮往往比前几轮产生更多的新信息。

本节的结果显示了玩家在进行猜测时使用他们在前几轮中所学知识的重要性,因为牺牲一些约束条件,即使是一点点,也会影响游戏性能,并限制新信息的积累。正确的字母和位置约束比不正确的字母和位置约束更重要,这表明如果玩家必须牺牲一个约束,那么他们应该考虑在牺牲正确的字母或位置约束之前牺牲不正确的字母或位置约束。

值得指出的是,这是一个相当简单化的分析。例如,所使用的模型没有考虑约束之间可能存在的任何相互作用,而通过显式地模拟这种相互作用的影响来改进它是可能的。然而,作为一个解释性的模型,它对我们的目的是足够有用的,所以进一步的改进是作为未来工作的一个问题。

结论

Wordle 是一款简单的在线猜词游戏,于 2022 年初开始流行。每天选择一个新的(秘密的)5 个字母的目标单词,玩家试图通过一系列多达 6 次的猜测来识别这个单词。本文描述了使用模拟和真实世界游戏数据集对 Wordle 进行的大规模数据分析。通过比较模拟数据集和 Twitter 数据集,我们表明模拟器能够再现相当真实的游戏过程,进一步的分析发现了以下情况:

  1. 好的开始字导致更短和更成功的游戏,并且有与较差的开始字相关联的显著成本;在模拟和真实世界/Twitter 数据集的分析中观察到了类似的成本。
  2. 相当多的少数玩家(17%)似乎使用了糟糕的起始词,因此承诺使用更可靠的起始词会有所收获。
  3. 一些目标单词比其他单词更具挑战性,尤其是当它们不常见或包含重复字母时。在这方面,我们再次看到模拟器和 Twitter 数据集之间的强烈对应。
  4. 关注 Wordle 的反馈对于短游戏是必要的,关注正确的字母和位置比不正确的字母和位置更重要。

参考

  1. 3 蓝色 1 棕色。哦,等等,其实最好的开瓶器不是“鹤”。。。。 YouTube (2022)。
  2. 3 蓝色 1 棕色。用信息论解单词YouTube (2022)。
  3. ALIYARI,h .,SAHRAEI,h .,DALIRI,M. R .,MINAEI-BIDGOLI,b .,KAZEMI,m .,AGAEI,h .,SAHRAEI,m .,HOSSEINI,S. M. A. S .,HADIPOUR,M. M .,MOHAMMADI,m .等人。电脑游戏压力对玩家认知功能的有益或有害影响基础与临床神经科学 9 ,3 (2018),177。
  4. ANDERSON,B. J .和 MEYER,J. G. 使用最大正确字母概率和强化学习为 wordle 寻找最佳人类策略。arXiv 预印本 arXiv:2202.00557 (2022)。
  5. 我们亲爱的沃尔多究竟发生了什么事? 《卫报》(2022 年 2 月)。
  6. APPEL,A. W .和 JACOBSON,G. J. 世界上最快的拼字游戏程序美国计算机学会第 31 届会议公报,5 (1988),572-578 页。
  7. 阿基米德。Wordle——为什么我总是猜同样的四个字。 YouTube (2022)。
  8. 使用自动规划的推箱子谜题的人工智能辅助设计。在艺术、互动和游戏创作国际会议 (2021),斯普林格,第 424–441 页。
  9. BARLACCHI,g .、NICOSIA,m .和 MOSCHITTI,A. 学习对自动解决纵横字谜的候选答案排序。《第十八届计算自然语言学习会议论文集》 (2014),第 39–48 页。
  10. BONTHRON,M. 将一个近似值作为 Wordle 的策略进行排序。arXiv:2204.06324 (2022)。
  11. 视频游戏对人类(和兽人)创造力的影响。在视频游戏和创意。爱思唯尔,2015 年,第 39-60 页。
  12. 曹,s .和达希尔,I. 文字是如何成为互联网上的一种大众娱乐的。 Buzz Feed 新闻(2022 年 1 月)。
  13. 这些数字告诉我们什么是最好的和最差的单词开头。《卫报》(2022 年 2 月)。
  14. CHESANI,p . MELLO,M. 解决数学难题:人工智能的挑战性竞赛艾杂志 38 ,3 (2017),83–96。
  15. 科尔曼、T. H .、莱瑟森、c .、里维斯特、r .、斯坦恩、C. 算法导论,II 。马萨诸塞州剑桥。麻省理工学院出版社,2009 年。
  16. CRANFORD,E. A .、LEBIERE,c .、GONZALEZ,c .、COONEY,s .、VAYANOS,p .和 TAMBE,M. 通过模拟了解网络欺骗:在 Stackelberg 安全游戏中使用欺骗性信号预测人类决策。在 CogSci (2018)。
  17. 使用字符统计为 wordle 选择种子词。arXiv:2202.03457 (2022)。
  18. 埃里克森、K. I .、布特、W. R .、巴萨克、c .、奈德、M. B .、普拉卡什、R. S .、VOSS、M. W .、格雷比尔、A. M .、西蒙斯、D. J .、法比亚尼、m .、格拉顿等。纹状体体积预测视频游戏技能获得水平。 大脑皮层 20 ,11 (2010),2522–2530。
  19. 厄南德斯,m .,安吉利尼,g .,和戈里,m .韦伯克劳:一个基于网络的纵横字谜系统。载于 AAAI (2005),第 1412–1417 页。
  20. FRUTOS-PASCUAL,m .和 ZAPIRAIN,B. G. 综述 AI 技术在严肃游戏中的应用:决策和机器学习。《IEEE 计算智能与人工智能汇刊》第 9 期,第 2 期(2015),第 133–152 页。
  21. 《代码和数字中的生活:当香农遇到图灵》。电子观想与艺术*(EVA 2017)*(2017),51–58。
  22. Wordle 中数学上最佳的第一次猜测。 (2022)。
  23. GOPHER,d .,WELL,m .,和 BAREKET,T. 从电脑游戏训练师到飞行的技能转移。人类因素 36 ,3 (1994),387–405。
  24. GRACE,k .、SALVATIER,j .、DAFOE,a .、ZHANG,b .、EVANS,o .AI 什么时候会超过人类的表现?来自人工智能专家的证据人工智能研究杂志 62 (2018),729–754。
  25. 格雷策,F. L .,赫什曼,R. L .,凯利,R. T. 防空游戏:研究人类行为的微型计算机程序。 行为研究方法&仪器仪表 13 ,1 (1981),57–59。
  26. GROSZ,b .、KRAUS,s .、TALMAN,s .、STOSSEL,b .和 HAVLIN,M. 社会依赖对决策的影响:一个新游戏的初步调查。关于自主代理和多代理系统的国际联合会议 (2004),IEEE,第 782–789 页。
  27. 霍尔,R. Wordle 的创造者被全球成功的热门拼图所淹没。 守护者(2022 年 1 月)。
  28. 哈姆金斯,J. D. 无限世界和主谋数字。arXiv 预印本 arXiv:2203.06804 (2022)。
  29. HARGREAVES,I. S .,PEXMAN,P. M .,ZDRAZILOVA,l .,和 SARGIOUS,P. 爱好如何塑造认知:竞争性拼字游戏玩家的视觉单词识别。 记忆&认知 40 ,1 (2012),1–7。
  30. m . HENZ 和 H.-M .张Sudokusat——一种分析困难数独谜题的工具。人工智能工具和应用中。斯普林格,2009 年,第 25-35 页。
  31. HUCK,J. T .,DAY,E. A .,LIN,l .,JORGENSEN,A. G .,WESTLIN,j .和 HARDY III,J. H. 认知好奇心在基于游戏的学习中的作用:区分技能习得和适应。 模拟&游戏 51 ,2 (2020),141–166。
  32. 凯利,R. T .、格雷策,F. L .、赫什曼,R. L. 防空:研究人类行为的电脑游戏。科技。1981 年,加利福尼亚州圣地亚哥海军人事研究与发展中心代表。
  33. 玩虚拟积木:作为实践与研究的学习环境。在数字化语境中的认知发展。爱思唯尔,2017 年,第 145–166 页。
  34. LEE,d .,CONROY,M. L .,MCGREEVY,B. P .,和 BARRACLOUGH,D. J. 猴子在竞争游戏中的强化学习和决策。 《认知大脑研究》22 ,1 (2004),45–58。
  35. LEE d .、MCGREEVY b . p .和 BARRACLOUGH d . j .猴子在石头剪刀布游戏中的学习和决策认知大脑研究 25 ,2 (2005),416–430。
  36. LIAPIS,a .,YANNAKAKIS,G. N .,TOGELIUS,J. 计算游戏创意。第五届国际计算创意大会 (2014),ICCC。
  37. LITTMAN,M. L .,KEIM,G. A .,和 SHAZEER,N. 一种解决纵横字谜的概率方法人工智能 134 ,1–2(2002),23–55。
  38. 利特曼,M. L .,凯姆,G. A .,和沙泽尔,N. M. 用谚语解决纵横字谜。在 AAAI/IAAI (1999),第 914-915 页。
  39. LOCK,s .wordle 是不是越来越难了? 守护者(2022 年 2 月)。
  40. LOKSHTANOV d .和 SUBERCASEAUX b .Wordle 是 np-hard 。arXiv:2203.16713 (2022)。
  41. 什么是 wordle?新的病毒性文字游戏取悦互联网。 卫报(2021 年 12 月)。
  42. MANTERE 和 j . KOLJONEN用遗传算法解决、评定和生成数独谜题。2007 年 IEEE 进化计算大会 (2007),IEEE,第 1382–1389 页。
  43. MANZINI、s . ELLIS 和 J. 文字游戏:使用认知计算作为人工智能解谜的基础人工通用智能杂志 6 ,1 (2015),111。
  44. 莫兰,C. 14 个最好的“单词”克隆体,因为一天一个单词是不够的可混搭(2022 年 3 月)。
  45. 马兹拉克,L. J. 利用优先关系计算机构造纵横字谜人工智能 7 ,1 (1976),1–19。
  46. 纵横字谜中元素的机器选择:计算语言学的应用。 《暹罗计算杂志》5 期,1 期(1976),51–72 页。
  47. 麦克甘,伊萨尔特尔,海德曼和康伦。跳过。跳。游戏:“有原则的”锻炼游戏对儿童运动技能获得的影响。 英国教育技术杂志。51 ,3 (2020),798–816。
  48. 莫法特特区,克龙比,w .和沙巴丽娜,O. 一些电子游戏可以增加玩家的创造力。 国际基于游戏的学习杂志(IJGBL) 7 ,2 (2017),35–46。
  49. 新生,M. 卡斯帕罗夫对深蓝:计算机国际象棋成熟了。施普林格科学公司商业媒体,2012 年。
  50. NEWELL,a .,SHAW,J. C .,和 SIMON,H. A. 下棋程序和复杂性问题。《IBM 研究与发展杂志》2 ,4 (1958),320–335 页。
  51. PRAKASH、R. S .、DE LEON、A. A .、MOURANY、l .、LEE、h .、VOSS、M. W .、BOOT、W. R .、BASAK、c .、FABIANI、m .、GRATTON、g .和 KRAMER,A. F. 在一个复杂的视频游戏训练项目中检验技能获得的神经相关性。 人类神经科学前沿 6 (2012),115。
  52. m .理查兹和 e .阿米尔拼字游戏中的对手建模。在 IJCAI (2007),第 1482–1487 页。
  53. 一个全自动纵横字谜生成器。第七届机器学习与应用国际会议 (2008),IEEE,第 362–367 页。
  54. RIGUTINI,l .、DILIGENTI,m .、MAGGINI,m .、GORI,M. 自动生成填字游戏。 《国际人工智能工具杂志》21 期,2012 年 03 期,1250014。
  55. 从国际象棋和雅达利到星际争霸和其他:游戏人工智能如何驱动人工智能的世界。KI-künstliche Intelligenz 34, 1 (2020),7–17。
  56. y . SATO 和 h .井上用保留积木的遗传操作解决数独。2010 年 IEEE 计算智能和游戏会议记录 (2010),IEEE,第 23–29 页。
  57. 游戏、计算机和人工智能。 人工智能 134 ,1–2(2002),1–7。
  58. SCHERBAUM,s .,DSHEMUCHADSE,m .,LEIBERG,s .,和 GOSCHKE,T. 比预期更难:在电脑游戏中明显不利的延迟选择中冲突增加。 PloS one 8 ,11 (2013),e79310。
  59. 世界冠军级别的拼字游戏。 人工智能 134 ,1–2(2002),241–275。
  60. 短,M. B. 胜 Wordle 明智地。arXiv 预印本 arXiv:2202.02148 (2022)。
  61. SILVER,d .,SCHRITTWIESER,j .,SIMONYAN,k .,ANTONOGLOU,I .,HUANG,a .,GUEZ,a .,HUBERT,t .,BAKER,l .,LAI,m .,BOLTON,a .,等人。在没有人类知识的情况下掌握围棋。Nnature 550,7676 (2017),354–359。
  62. 在 Wordle 中糟糕开局的代价以及如何避免。 走向数据科学(2022 年 2 月)。
  63. SMYTH,B. 在 Wordle 中,第一个字母是最难猜对的。或者是? 走向数据科学(2022 年 2 月)。
  64. SMYTH,B. 如何在 Wordle 中猜对。 走向数据科学(2022 年 1 月)。
  65. SMYTH,B. 峰值单词量&单词难度。 走向数据科学(2022 年 2 月)。
  66. 三百万条 tweets 之后。 走向数据科学(2022 年 2 月)。
  67. 我从玩了一百多万个 Wordle 游戏中学到了什么。 走向数据科学(2022 年 1 月)。
  68. 根据科学,这是最好的策略。 YouTube (2022)。
  69. STENSRUD,B. S .和 GONZALEZ,A. J. 通过观察人类在战略游戏中的表现发现高级行为。IEEE 系统、人和控制论汇刊,B 部分(控制论)38(T7),3 (2008),855–874。
  70. TOBIAS,s,FLETCHER,J. D .,DAI,D. Y,WIND,A. P. 计算机游戏研究综述。 电脑游戏与指令 (2011),127–221。
  71. VISSCHEDIJK,G. C .、LAZONDER,A. W .、VAN DER HULST,a .、VINK,n .和 LEEMKUIL,H. 为战术决策游戏模拟人类情绪。 《英国教育技术杂志》44 期,2 期(2013),197–207 页。
  72. 声音和颜色对电脑游戏反应的影响。 与计算机交互 13 ,2 (2000),183–192。

大 O 符号

原文:https://towardsdatascience.com/big-o-notation-32fb458e5260

用 Big-O 符号计算算法的时间和空间复杂度

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

约翰尼斯·格罗尔在 Unsplash 上的照片

介绍

当开发算法时,我们通常关注它的有效性——换句话说,它是否能做它应该做的工作。然而,时间和空间复杂度是必须评估的两个非常重要的因素,以确保该算法可以在实践中实现和使用。

即使一个算法在理论上是可行的,但是如果运行它所花费的时间使它变得无用,会发生什么呢?或者它需要的空间大到电脑可能内存不足怎么办?

在今天的文章中,我们将在渐近算法分析的背景下讨论时间和空间复杂性。我们将探索大 O 符号,这是用来描述算法效率的最常用的度量。

此外,我们还将讨论大 O,大 Theta 和大 Omega 符号之间的区别。最后,我们还将通过几个实际操作的例子来演示如何在实践中计算时间和空间复杂度。

请注意,这些示例将使用 Python——即使您不了解 Python,我也很确定它会比您想象的更容易理解。为了帮助没有 Python 背景的人,我保证会添加尽可能多的评论:)

渐近时间复杂性

在数学分析中,渐近分析是一种用来描述当输入接近某个其他值时,函数所逼近的值(即极限)的方法。作为一个例子,让我们考虑我们想要研究一个函数 f(n) 在数 n 变得非常大时的行为。

如果f(n)=n⁴+4n+10并且数字 n 非常大,那么术语 4n 与术语相比将无足轻重,而 n 对常数 10 没有影响。因此,当 n 趋于无穷大时,函数 f(n) 被称为渐近等价于 n⁴

现在在算法的上下文中,执行渐近分析,以便根据输入大小描述或评估算法的性能。换句话说,当输入大小也增加时,我们使用渐近分析来确定时间和空间的增加。

作为一个例子,让我们考虑你想要传送一个数据文件给一个朋友,他住在离你当前位置 3 小时路程的城市。现在让我们假设实际上有两种方式发送它;第一种是电子转账,第二种是旅行 3 个小时,用 u 盘(物理)交给她。如果您决定以电子方式发送文件,传输时间将受到文件大小的影响。文件越大,传输给朋友所需的时间就越长。另一方面,如果您决定前往您朋友的位置并将其移交,传输时间将为 3 小时,与文件的大小无关,因此文件大小不会影响传输时间。

下图说明了这种行为— O(s) 对应于以电子方式传输文件的时间复杂度。随着文件大小 s 的增加,完成传输所需的时间也增加(在这个例子中,这种增加是线性的)。另一方面, O(1) 对应于物理传送文件的情况下的时间复杂度,因此时间复杂度是恒定的。

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

时间(和空间)复杂性的渐近分析—来源:作者(源代码复制它)

大 O vs 大 Theta vs 大 Omega

大 O 符号用于描述算法复杂度的一个上限。假设我们有一个 N 个整数的列表(或数组)。如果我们想打印出列表中的每个元素,时间复杂度是 O(N)。虽然从理论上讲,这个用例的时间复杂度也可以描述为 O(N)或 O(N)或任何其他大于 O(N)的值,因为这些是上限。

这可能有点令人困惑,所以让我们考虑一个现实生活中的例子。我们来做一个假设,没有一辆车可以超过 400 km/h 的速度,如果我们有一辆车的最大速度是 X,那么我们当然可以说 X ≤ 400。虽然从理论上讲,我们也可以说 X≤1000 或 X≤10000。从技术上讲,这是正确的,因为我们使用上限,即使进一步扩展上限并不十分有用。

然而,除了大 O 之外,还有两种替代符号,即大ω(ω)和大θ(θ)。

大ω用来形容下界*。回到我们打印所有列表元素的例子,下限将是ω(N),因为我们知道它不会比这个更快。同样,我们也可以说下限是ω(1)ω(logN),因为打印一个包含 N 个元素的列表不会比这些下限更快。*

大θ用于描述紧界*。这意味着如果一个算法同时是 O(N)ω(N),那么这个算法可以描述为θ(N)。我们可以说打印一个有 N 个元素的数组是θ(N)。*

一般来说,我们通常使用大 O 符号来描述算法的时间和空间复杂性,同时总是试图定义尽可能紧密的运行时,给定特定算法和/或用例的细节。

最佳情况对最差情况对预期情况

各种算法都包含某种形式的随机性,这可能会影响算法的性能。也有一些算法在排序的数组上运行得更快,但是当数组的元素没有排序时运行得更慢。

因此,实际上有三种不同的方式来描述算法的运行时间;最好的情况,预期的情况和最坏的情况。当我们评估算法的性能时,应该计算最坏情况的复杂度

请注意,这些概念不应与我们之前讨论的大θ和大ω相混淆。下限和上限与最佳、最差和预期情况无关。

空间复杂性

除了时间复杂度之外,另一个需要评估的重要方面是空间复杂度,即算法执行所需的内存量。随着计算机能力的不断发展,空间复杂性通常会被程序员忽略。然而,考虑到正在处理的数据也在不断发展,以消耗尽可能少的内存的方式设计和实现算法是非常重要的。

进入空间复杂度的实际计算,如果我们要创建一个 N 个整数的一维数组,那么就需要 O(n) 空间。同样,一个大小为 n x n 的二维数组需要 O(n)个空间。这里还必须提到,除了数据结构中元素占用的空间之外,在递归调用中分配给堆栈的空间也应该考虑在内。

用大 O 符号计算空间复杂度

作为一个例子,让我们考虑下面的递归函数,它用于计算 0 和n之间的数字之和:

*def sum_func(n: int):
    """ 
    Recursive method that returns the sum 
    of the numbers between 0 and input n
    """
    if n > 0:
        return sum_func(n - 1) + n return 0*

尽管函数的输入只是一个整数,但每次递归调用都会在调用堆栈中增加一个级别。举个例子,

*sum_func(5)
    adds call sum_func(4) to stack
        adds call sum_func(3) to stack
            adds call sum_func(2) to stack
                adds call sum_func(1) to stack
                    adds call  sum_func(0) to stack*

实际上,添加到调用堆栈中的每个调用都会消耗实际内存,因此在计算空间复杂度时,应该始终将它们考虑在内。因此,函数sum_func将需要 O(n)时间和 O(n)空间。

拥有 n 个调用,并不一定意味着一个算法需要 O(n) 空间。现在让我们修改一下我们之前使用的递归方法,这样 0 和输入数n之间的和的计算是以迭代的方式进行的。

*def sum_func(n: int):
    """ 
    Iterative method that returns the sum 
    of the numbers between 0 and input n
    """
    sum = 0
    for i in range(n+1):
        sum = sum_nums(sum, i)
    return sum def sum_nums(a: int, b:int):
    """
    Returns the sum of two numbers
    """
    return a + b*

上述函数将花费 O(n)时间和 O(1)空间。换句话说,执行功能sum_func所需的内存是恒定的。

用大 O 符号计算时间复杂度

现在回到时间复杂性,重要的是要强调大 O 符号与所讨论算法的实际执行时间并不对应的事实。例如,O(n)的算法实际上可能比 O(1)的算法更快。因此,我们可以说大 O 用于描述相对于输入大小的增长率。

这就是我们在计算时间复杂度时,并不真正关注常数的主要原因。在最开始,我们讨论了数学背景下的渐近分析。

如果 f (n) = n⁴ + 4n + 10 并且数字 n 非常大,那么术语 4n 与术语相比将无足轻重,而 n 对常数 10 没有影响。因此,当 n 趋于无穷大时,函数 f(n) 被称为渐近等价于 n⁴ 。**

类似地,在算法渐近分析中,我们丢弃任何常量值以及无关紧要的项**。**

作为一个例子,让我们考虑一个算法的两个版本,它从一个输入列表中计算最小和最大数字。注意,可能有更好的方法来执行相同的操作,但是这个例子的目的是演示一些与 Big-O 符号相关的概念。

**def get_min_max(lst):
    """
    Returns the minimum and maximum 
    numbers from the input list as a 
    tuple in the form (min, max)
    """
    _min = lst[0]
    _max = lst[0] for n in lst[1:]:
        if n > _max:
            _max = n
        if n < _min:
            _min = n return _min, _max**

因为我们有一个遍历输入列表元素的 for 循环,所以上面函数的时间复杂度可以用 O(n) 来描述。

现在让我们修改这个方法,使最小和最大数量的计算发生在单独的循环中。

**def get_min_max(lst):
    """
    Returns the minimum and maximum 
    numbers from the input list as a 
    tuple in the form (min, max)
    """
    _min = lst[0]
    _max = lst[0] for n in lst[1:]:
        if n > _max:
            _max = n for n in lst[1:]:
        if n < _min:
            _min = n return _min, _max**

现在我们有两个独立的(虽然不是嵌套的!)for 循环,每个循环的执行时间为 O(n)。有人可能会争辩说,这被翻译成 O(n + n),因此 O(2n)。回想一下,当用 Big-O 符号描述时间复杂性时,我们必须消除任何常量和/或无关紧要的项。因此,我们的示例算法的第二个版本的复杂度仍然是 O(n ),因为我们只对增长率感兴趣。

让我们考虑另一个例子,其中一个函数接受一个输入列表,并打印出原始元素和平方元素(我再次警告您,有更好的方法来实现这一点,所以请不要太关注逻辑)。

**def print_squares(lst):
    for a in lst: 
        print(a) for a in lst:
        for b in lst:
            print(a * b)**

所以我们有一个 for 循环,它简单地遍历输入列表的元素,并打印出每一个元素,然后我们有两个嵌套循环。

前一个表达式需要 O(n)时间,后一个表达式由于两个嵌套循环需要 O(n)时间。同样,有人会认为时间复杂度是 O(n + n ),但鉴于我们只对增长率感兴趣,我们必须去掉任何无关紧要的项,因此我们最终的时间复杂度是 O(n)。

增长率

下面列出了大多数时候用来描述算法的时间和空间复杂性的标准增长率。

  • 对数: O(log n)
  • 线性: O(n)
  • 线性算法: O(n log n)
  • 二次: O(n )
  • 指数: O(c^n) 其中 c 是固定值,而 c > 1
  • 阶乘: O(n!)

最后的想法

在今天的文章中,我们讨论了在开发算法时评估时间和空间复杂度的重要性。这可以通过渐近分析来实现,这可以帮助我们使用大 O 符号来描述性能。

此外,我们讨论了带有大ω和大θ的大 O 符号之间的区别,以及在描述算法复杂性时最好、最坏和预期情况的含义。为了演示如何计算时间和空间复杂度,我们还使用了一些示例算法。最后,我们快速浏览了一下最常用的增长率,当涉及到算法的计算空间和时间复杂度时,这些增长率通常涵盖了大多数情况。

算法中的渐近分析是一个基本且非常重要的话题,每个写代码的人都必须知道。通过理解某些决策如何影响时间和空间复杂性,您最终可以提高代码的质量和性能。此外,如果你想搞定你的下一次面试,那么这是一个你必须仔细修改的话题。有可能你会被要求开发一个算法,而时间和空间复杂度是你在开发时需要考虑的概念。即使您无法实现给定问题的最佳解决方案,您至少应该知道您的解决方案如何执行,以及如何修改它以达到最佳的复杂性时间。

成为会员 阅读介质上的每一个故事。你的会员费直接支持我和你看的其他作家。你也可以在媒体上看到所有的故事。

**https://gmyrianthous.medium.com/membership **

相关文章你可能也喜欢

** ** ** ** ** **

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值