TowardsDataScience 博客中文翻译 2020(八百七十一)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

数据科学的问题是

原文:https://towardsdatascience.com/the-problem-with-data-science-438b36eabe47?source=collection_archive---------50-----------------------

可能不正确的问题有太多的答案

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

数据科学项目多久会失败一次?如果我们从表面价值来看待流行的互联网媒体,尽管成功得到了广泛宣传,但失败项目的墓地肯定确实堆满了那些“不知道更好”的人的尸体。

许多探讨这些失败的文章广泛触及了相同的问题——缺乏明确的目标、太多的孤岛、缺少专业知识、非数据驱动的文化……有时归咎于业务,有时归咎于技术,但通常巧妙地指责两者。

声称的失败率,一个足够吸引读者注意力的高得惊人的数字,最终导致了观众的分裂。

愤世嫉俗者可能会说,有一两个顾问躲在角落里,等着扑向不知情的企业!

当事情不顺利时会发生什么

预算压力……沉没成本……失望……也许是耻辱……以及可能的商业或职业影响。

尽管如此,看似未被注意到的是不断出现的建议 …以及大量的建议。

搜索“为什么数据科学项目失败”,结果链接很可能指向标题为项目成功的 7 个步骤分析失败的 5 个原因的文章。

我们最近遇到的两个例子是 Doug Gray 的数据科学和分析失败Ganes Kesari 关于数据科学采用挑战的文章。它们引起了共鸣,因为我们经历了提出的许多观点…我们认为它们表达得很好。

所以你读了这些文章,这些信息被反复强调,你发誓下次一定要解决这些缺点。如果你很勤奋,更多的相关点会成为每个项目开始时的经验教训清单。

最终,你可能会开始相信你的公式、系统或解决方案足够强大,足以应对大多数不测事件。

直到现实咬

几年前,一家客户希望通过数据驱动的分析来确定一家关键托管服务供应商的潜在节约。并非巧合的是,当时已经接近续约时间。

由于该供应商在 Citrix 虚拟化环境中工作,借助 Splunk 的一点魔力,我们能够提取生产力数据并可视化价值 10%的低挂果实,以便在续订时轻松剪掉。

我们相当有信心。毕竟所有的工作都是客户要求的,而且数据证明供应商人浮于事。

那么,为什么不在续订时删除不需要的服务呢?或者如果担心供应商的范围缩小,增加新的范围?

想象一下,当我们因为出色的工作而受到有礼貌的表扬和“我们会在 6 个月内考虑”的点头时,我们有多惊讶。

隐藏的握手

几个月后,我们的一个利益相关者提到了我们只能称之为“共生采购关系”的东西。

这种明显的低生产率实际上是供应商的利润,他们会非常不高兴看到这种情况发生。作为回报,企业可以根据需要寻求帮助。

最终,一些根深蒂固的粘性关系意味着,无论是最引人注目的商业案例还是最巧妙的演示,都不会像往常一样改变业务。

一大堆问题

这是我们可以提前预料到的吗?

毕竟,在道格的列表中,我们面临的最终挑战排在了第六位“变化是破坏性的,而且处理不好”。此外,在 Ganes 的 #5“缺乏高管认同”-我们认为我们有!

我们能在同时发生的其他事情中为它做好计划吗?

人类有可能如此密切地参与到一个项目的各个方面…以至于能够在一个十大问题的第一个迹象出现时就抓住它吗?

是不是只有我们觉得数据科学的建议总是在事后很有意义,但在事实发生之前却势不可挡?

最终,严峻的经济现实迫使我们对自己诚实。

我们之前无懈可击的商业案例忽略了隐性影响,不是因为我们不想考虑…而是因为我们没有关系去了解。

初步结论

这促使人们开始从不同的角度看待数据科学的失败和成功。

探索我们一直试图回避的问题。

在数据科学这样一个技术性很强的领域,人员、关系和背景对成功有多重要?

害怕答案,也许是不可思议的,会告诉我们它和数据印章、批判性思维和 A+解决方案一样重要。

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

(2019 年 10 月)深夜美食,槟榔屿乔治敦

数据科学竞赛平台的问题

原文:https://towardsdatascience.com/the-problem-with-data-science-competition-platforms-like-kaggle-a77bbca4a7c5?source=collection_archive---------42-----------------------

数据科学竞赛是否违反开源?—开放式思想传递和协作的案例

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

freebiesupply.com

正如任何数据科学家可能都熟悉的那样,互联网上存在一个广阔的预测建模竞赛世界。这些竞赛中有些是经济上的激励,有些只是出于好奇。几乎所有经济激励的竞赛的基本结构是,所有参与者(或参与者团队)在训练数据集上训练和开发模型,并提交他们的提交作为测试数据集上的预测,其标签对竞争者是隐藏的。随后,“最佳”模型会根据一些预先确定的准确性标准获得相应的奖金。关于这些预测建模竞赛的大多数观点是,基于财务激励的竞争创造了对聪明人发现难题解决方案的需求。虽然我最初同意这一观点,并且不反对他们的目标是正确的,但我已经注意到这些项目的内在问题,这些问题以一种非常可解决的方式阻碍了进展。毕竟,当一个组织为比赛中表现最好的模特提供 10,000 美元时,他们只是在众包他们问题的最佳解决方案,对吗?在本文中,让我讨论以下内容:数据科学竞赛的固有问题及其对开源伦理的违反,这些竞赛的重组建议,以及为什么这解决了当前结构的固有问题的案例。

固有问题:

1.大多数竞争者并不是为了赢而比赛

尽管这些比赛提供了丰厚的奖励作为激励,但从我的经验来看,我知道大多数参赛者并不是因为奖金才参加的。首先,如果这个观察是真的,那么它是一种与最初提供经济奖励的目的相违背的论点。如果许多竞争者不把奖金当作激励,那么奖金的价值,因为它关系到为提供组织生产的模型的质量,就会大大降低。让我解释一下。

也许你们中的一些人在阅读这篇文章之前已经接近数据科学竞赛的顶端,或者也许你们中的一些人接近中间。我鼓励你回忆一下这些立场是如何改变你为解决问题所付出的努力的。从我参与竞争和看到其他人参与竞争的经验来看,知道自己处于中游水平,又缺乏进一步改进的想法,往往会导致对财务激励的忽视,而且在大多数情况下,会变成类似于“好吧,至少我学到了一些东西”的想法。另一方面,那些看到自己的名字出现在排行榜顶端的人已经开始考虑他们会如何处理自己的那份奖金;结果会怎样呢?这些人全力以赴,坚持不懈地工作,以确保他们不会让自己的辛勤工作从指缝中溜走。这很棒,对吧?由于经济上的激励,我们有几十个聪明人不知疲倦地竞争,想出解决难题的办法。没错。但是,如果有一种方法,我们可以用同样的钱来激励所有的参与者,数百名数据科学家,这样会怎么样?

2。反开源——每个人都花时间解决相同(或相似)的问题

对于那些不熟悉的人来说,使用开源框架就是决定将一个项目的所有源代码都提供给任何想看一眼或进一步改进想法的人。在我看来,走向开源是历史上加速技术发展的最伟大的运动之一,特别是当它涉及到一个有如此多善意和恶意用例的领域时,进入深度学习和人工智能。这些竞赛中的规定,比如取消团队之间共享代码的资格,导致了一个反开源的环境。基于经典数据科学竞赛的当前奖励结构,不存在任何人分享想法的激励。事实上,在内部储存好的想法,以防止其他人利用它们来击败你,这要有利得多。由于这种反开源的性质,当存在要解决的常见问题(如数据预处理或实验以找到正确的神经网络结构)时,基于每个人都必须自己解决相同问题的简单事实,无数的时间被浪费了。例如,我目前正在参加与失速捕捉者项目老年痴呆症研究竞赛,其中的数据集是大脑内血流的视频集合。由于这个数据集的性质,每个参赛者都必须编写一个脚本,将视频预处理成帧图像,随后在有问题的船只周围进行裁剪。我花了大约 3 个小时来创建一个函数,使视频的 Numpy 切片可以正常工作,并且通用于每个视频的每一帧。

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

DrivenData 竞赛数据预处理示例——感谢 DrivenData人类计算研究所提供数据和使用权限。

让我们在这里处理一些数字。我们看到有 623 人参加了这场比赛,由于缺乏更多的信息,让我们假设我的 n=1 的观察值接近平均值。由于我们都必须以相同(或非常相似)的方式对数据进行预处理,我们总共花费了 1869 个小时进行预处理,如果只有少数人担任这一角色并与班上的其他人分享他们的工作,这些时间本可以被重新分配。如果是这样的话,这些时间可以用来建立网络,研究疾病,优化网络等。记住,这只是比赛的第一步。

3。付钱赢

这一切都归结为一个简单的事实,即如果没有高端 GPU 和 TPU 这样的计算资源,即使是世界上最好的数据科学家也无法在足够短的时间内针对足够复杂的问题优化网络。此外,计算能力的每一次增加都会导致优化时间的减少,而优化时间可以用来追求更进一步的想法。我的主张并不是说这些竞争都是由对计算资源的访问决定的;事实上,对我来说很明显,问题的知识和解决问题的有效方法是比计算资源更重要的资产。我只是在陈述这样一个事实,即存在一个处理速度障碍,如果不满足这个障碍,一个缺乏资源的杰出数据科学家就不可能获得某个奖金池。

对我的论点的潜在反驳可能会声称,通过提及经常实施的计算限制,例如利用 TPU 的非法 GPU 运行时间限制或其他处理速度限制,一些竞争实际上是公平的。再次从经济的角度来看,如果一个组织“支付”(或提供奖励)一群人去寻找一个难题的最佳解决方案,我们为什么要限制这个群体已经拥有的计算资源池呢?出于这个原因,如果最终目标是达成可能的最佳解决方案,这些限制对我来说似乎是不可行的。此外,如果我们选择不使用现有的处理速度,这是对那些能够突破极限并构建出我们今天可以使用的尖端处理器这一惊人技术的工程师的诋毁。

重组——支链回报和自发修剪:

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

简化的支链奖励树示例(使用 app.diagrams.net 网络工具创建)

支链奖励结构

支链奖励结构背后的想法是,与其每个人都独自工作并发现他们手头问题的最佳模型,不如我们有一个存放当前最佳工作模型的存储库。因此,贡献者可以专注于改进已经被证明是最佳解决方案的潜在线索的现有想法,而不是做其他人可能已经做的所有探索性建模。在这种结构下,竞争对手将筛选当前的模型和想法树,并根据他们对问题的了解,决定以两种方式之一做出贡献:

  1. 他们扫描树以寻找最有希望的分支,并决定在树的任何级别创建他们自己的路径,其中他们希望分支到不同的、更好的方向。
  2. 他们想要追求的想法并不存在于树上;从而让他们决定开创一个全新的分支,让其他人看到并为之做出贡献。

以这种方式,奖金可以不分配给单个团队或个人,而是平均分配给树的获胜分支的所有贡献者(第二名、第三名等也是如此。).

自发修剪

一个潜在的问题可能产生于一个基于先前想法的改进树,这个树的复杂性可能会变得如此之大,以至于几乎不可能辨认出哪个模型有潜力,哪个模型根本就不能工作。您可以想象一个场景,其中竞争对手必须测试数百个不同的分支模型变体,仅仅是为了确定他们最终将致力于哪个模型,或者他们可能会在层次结构的更基础的级别分支到他们自己的模型。为了简化这种潜在的复杂性,我建议在每个分支的每个节点上显示某种模型评估度量。这将使竞争对手清楚地看到哪些型号表现良好,以及每个型号的改进速度。通过这种方式,竞争者将被激励去忽略那些没有什么希望去竞争奖项的模特;因此,导致这些分支被自动从树上剪掉,因为它们被大多数竞争者忽略了。也就是说,除非竞争对手有突破性的想法为某个表现不佳的分支做出贡献。最终,这将导致最好的想法激增,而次等的想法被留下并最终消亡。

好处:

  1. 工作时间分配的效率——“让您的钱花得更划算”

向开源架构的转变允许人们考虑、学习和建立在彼此的想法之上,这将重新引导无数个小时的竞争者通过简单地允许他们作为一个集体使用彼此的工作并从彼此的错误中学习来解决相同的琐碎任务。这将提高解决问题的速度,允许竞争者在未解决的问题上花费更多的时间,并最终产生对由奖励提供组织提出的问题的更好的解决方案。

2。大量积极、热情的贡献者

如前所述,我相信在任何标准的数据科学竞赛中,都有一大群参赛者致力于解决问题,因为他们喜欢这样做,也许是因为他们想建立一个投资组合,但看不到任何闯入奖池的可能性。因此,有一小部分竞争者热情而不知疲倦地追求他们的想法,因为他们在排行榜上有足够高的地位,使他们的时间值得。在我看来,在奖励结构中,任何贡献者在通往获奖模式的道路上的任何一步都因其出色的想法贡献而获得奖励,这将把竞争对手从以前的随意学习者群体转移到后者充满激情和不知疲倦的工作群体中。此外,这种结构将激励积极的贡献,而不是拖延。也就是说,如果一个贡献者在想法层次结构的早期对模型的一个分支进行了更新,并为其他人奠定了基础,则该贡献成为多个优秀模型的基础的可能性会增加,从而允许竞争者获得多个奖项的一部分。这将使竞争对手迫不及待地开发新的想法,而不是在最后一刻构建并提交他们的模型。

3。平等进入奖池(或至少更平等一点)

目前有一种设备门槛,如果没有达到,就会将竞争对手排除在获奖提交的竞争之外(特别是在需要深度学习的比赛中)。显然,对于竞争对手来说,获得一台拥有最新、最棒的 TPU 的高端数据科学机器,或者有足够的钱购买类似的云计算产品,仍将是一个巨大的优势。不过,在这种拟议的结构下,只有一台 Macbook Pro、买不起更强大机器的大学生至少可以贡献一些想法,如创新的预处理方法或引入其他人可能忽略的神经网络结构。这将扩大解决问题的集体思维,再次产生更好的解决方案。

潜在缺点:

我相信有很多,但我想到了这种结构的一些潜在挑战:

  1. 什么被认为是“新想法”?

例如,我们目前在树的一个分支上建立了一个模型,有人做了一个非常简单的调整,导致预测准确性的轻微增加。这是否被视为“新想法”并添加到树中?我认为要解决这个问题,我们必须定义一个“改进”,这个“改进”是由问题的相应评估标准量化的。如果我们创建一些规则,比如“如果得到的模型被改进了个百分点,那么一个分支只能被扩展为对先前模型的‘改进’”,请填写空白的个百分点。这样,我们对添加到树中的内容施加了某种限制,以确保琐碎的更改不会被考虑多次。

2。使用不同的编程语言

如果我们说不同的(编程)语言,我们如何相互协作?对于这个问题,我能想到的最好的解决方案是要么从一开始就宣布比赛的语言,要么可能将奖项分成几个不同的比赛,为最适合手头任务的少数几种语言中的每一种语言设立一个奖项。从好的方面来看,也许这可以帮助人们适应更多的编程语言,迫使他们探索其他语言,而不是让他们总是默认自己的偏好。

结论:

我希望作为这篇文章的结果,我不会被误导,不会被认为对数据科学竞赛有负面的看法;我一直很喜欢在线提供如此广泛的数据科学竞赛。我认为它们在解决问题和让研究人员从事他们感兴趣的项目方面都带来了巨大的好处。我最近在从事一项乏味的数据预处理工作时才想到,我目前花费数小时完成的任务已经或将被数百名其他竞争对手完成;但是由于比赛的性质,我们不允许互相帮助。我想,“我理解为什么我们不能为了竞争而分享想法,但是如果有一种方法可以让竞争完全开源,同时保持竞争方面的活力呢?这样,我们可以最大限度地提高效率,同时仍然允许金钱奖励来激励竞争对手解决问题,这也是奖励的目的。

这种结构可能存在一些我没有想到的问题,还有一些问题只有在实践中才会显现出来。但随着我们周围的一切越来越倾向于开源,并且在许多情况下产生了革命性的解决问题的效率,我不禁认为它在在线数据科学竞赛的世界中有一席之地。任何人在概念化这个想法后都可能有想法,请随意回应和分享,因为我知道有许多不同的途径可以探索。我很乐意听取社区的其他意见。

数据科学面试的问题是

原文:https://towardsdatascience.com/the-problem-with-data-science-interviews-b22875d3f4c9?source=collection_archive---------46-----------------------

为什么找工作这么难,该怎么办

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

照片由马太·亨利发自突发

21 世纪最混乱的工作

面试过程可能是数据科学家职业生涯中面临的最艰巨的任务。获得数据科学工作的压力和竞争非常激烈。除此之外,围绕数据科学的大肆宣传导致了围绕数据科学面试过程的大规模混乱。

近十年来,数据科学家一直是科技行业的宠儿。2012 年,《哈佛商业评论》(Harvard Business Review)将数据科学家称为“21 世纪最性感的工作”,这引发了一个尚未见顶的炒作周期。

求职者和雇主蜂拥而至,争相利用这种炒作,混淆了数据科学人才库。

成千上万的工程师、统计学家和分析师正在寻求向这一令人兴奋的新职业过渡,他们正在将自己重新定位为数据科学家。数百个新兵训练营和证书项目正在涌现,以帮助他们寻找答案。数十名招聘经理正努力从蜂拥而至的求职者中挑选最有前途的候选人。

数据科学面试的问题是

这种数据科学淘金热对面试过程有下游影响。困惑的招聘经理让数据科学家接受与数据科学技能不一致的面试。出于困惑或为了吸引人才,一些招聘经理将数据分析师和数据工程职位更名为数据科学。危险信号包括面试更多地关注计算机科学算法而不是机器学习算法,以及面试在 SQL 上花费更多时间而不是 scikit-learn。

像这样一两次糟糕的面试会让一个数据科学家花费数小时研究错误的主题。因此,候选人最终会被他们期望证明专业知识的大量科目淹没。

雪上加霜的是,对数据科学家的需求增长速度超过了高质量面试准备的供给。面试问题(有时还有答案)在网上很多地方都很容易找到。然而,还不清楚它们有多可信。

数据科学面试的解决方案

幸运的是,顶级公司正在向标准的数据科学面试流程靠拢。候选人的解决方案是对以下主题的问题做好充分准备:

  • 机器学习
  • Python 编程
  • 数据争论
  • 分析解决问题
  • 统计数字
  • 文化契合度

对于大多数公司来说,机器学习和统计部分是交易的破坏者,因为这些学科构成了机器学习的理论基础。python 和 SQL 等技术技能更容易学习,但如果数据科学家在统计学或机器学习方面很弱,这将是灾难性的。

对于统计学,考生应侧重于初级概念,如:

  • 可能性
  • 贝叶斯定理
  • 正态分布
  • 中心极限定理
  • 假设检验

对于机器学习,考生应该了解一系列具有实际应用的主题,例如:

  • 偏差-方差权衡
  • 维度的诅咒
  • 交叉验证
  • 常见损失函数
  • 适当的模型评估指标

大公司几乎总是在雇佣数据科学家。所以,候选人控制面试时间表。可能需要长达六个月的准备时间。

也就是说,拖着它没有意义。因此,准备数据科学面试需要多长时间取决于几个因素。

1)这是候选人的第一次数据科学面试吗?数据科学面试涵盖了很多领域。它们就像是工程和分析面试合二为一,还加入了一些机器学习。

2)面试的是大的科技公司吗?他们往往会有特别严格的面试,成功的门槛也很高。

3)复习练习题时,回答难度如何?候选人不仅要熟悉材料,还必须能够回忆起精确的定义并给出简明的答案。

尽管很难找到可靠的高质量面试准备来源,但一些资源已经开始出现。数据科学家可以通过像 Decode Data Science 这样的网站加速他们的面试,这个网站将数百次面试浓缩成典型的问题和答案,是由我这个拥有 8 年技术经验的招聘经理创建的。

GPT-3 报告的问题

原文:https://towardsdatascience.com/the-problem-with-gpt-3-reporting-93c7b5b58400?source=collection_archive---------48-----------------------

双重选择偏差过滤了我们对 GPT-3 的看法

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

马克斯·兰格洛特在 Unsplash 上拍摄的照片

我最近在媒体和其他地方看到了大量关于 GPT-3 的文章。我甚至写了一首。语言模型是人工智能的一个重大发展,所以作家想与世界分享他们的兴奋是很自然的。

问题就在这里:GPT 3 的能力——即其写作质量——经常被公布的样本夸大。事实上,不是有一个,而是两个过滤器保持 AI 的最差结果不被广泛传播。

如果任何感兴趣的读者都可以访问 GPT-3 API 并对其能力进行自己的观察,那么选择偏差就不是问题了。然而,目前准入受到严重限制。( AI Dungeon 经常被我们这些没有完整版本的人用来测试 GPT 3,但它的创造者最近概述了防止后门进入 GPT 3 的方法。)

当报道——我用这个词最广义的解释来指任何关于 GPT-3 的文章——是公共信息的唯一来源时,在我们对产品的理解中应该考虑选择偏差。在这里,我概述了明显的偏见,以及加剧这一问题的不太明显的偏见。

1.写作样本是为了质量而选择的

假设我正在写一篇关于 GPT 3 号的信息性文章。我想证明它可以把连贯的句子串放在一起,所以我给它一个提示并检查输出。

如果我不喜欢我所看到的,我可能会用稍微不同的(也许更长的)提示再试一次。即使我没有主动选择适合我文章目的的特定句子,篡改输出会产生一个有偏见的写作样本,不能代表 GPT-3 的整体质量。

在创造一个关于人工智能的故事的背景下,展示它最好的作品比公平地展示它的局限性更有意义。这是第一个问题。

2.文章越酷,浏览量越多

考虑一下做的事情被写到 GPT-3 不能执行的功能的情况。它可能是一个写失败的列表,或者是不能编译的代码。

对我来说,这不会是一个有趣的作品,我怀疑它也不会引起其他人的兴趣。我确信推特、Reddit 帖子和详细描述 GPT 3 号意外失败的长篇文章就在那里,但事实是它们没有被阅读。

表面上看,这似乎不是问题。绝对没有必要去阅读所有 GPT-3 做不到的事情。真正的问题是,对于同样的任务,积极的结果比消极的结果更受青睐。例如,如果有人报告了让 GPT-3 编写法律文档的积极结果,这无疑会比人工智能无法生成连贯文档的情况受到更多的关注。

本质上,GPT-3 报告目前的工作方式类似于在没有预注册的情况下进行科学试验。发表偏倚,即统计上无关紧要的结果不被发表,会导致荒谬的发现被接受为可靠的研究。

要明确的是,我不认为作家有必要发表更多来自 GPT-3 的负面结果。然而,有义务将样本与它们产生的方式以及在这个过程中获得了多少负面结果联系起来。

毕竟,人类对人工智能输出的选择——在单个作品或更大的作品如何被消耗的层面上——是我们的智能和计算机程序的智能的结合,这是一件美好的事情。

数据科学中的编程

原文:https://towardsdatascience.com/the-programming-in-data-science-cfc0ca8787e6?source=collection_archive---------61-----------------------

这也是关于编码的

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

桑德·德韦尔特在 Unsplash 上的照片

如果我们将数据科学(DS)分解为三个部分,我们将得到算法编程领域知识。这三个部分的重要性可能不相等;以领域知识为例,虽然它是构建有用的东西的基础,但它也与正在使用的数据紧密相关,因此与公司紧密相关,所以在开始处理特定数据之前,很难拥有领域知识。当然,拥有相同领域的经验会有很大帮助,但你仍需要了解该公司的数据文化。编程或算法就不一样了,但是让我们把重点放在本文的编程部分。

编程不是新事物,也不是公司特有的;迄今为止,有 245 种著名的编程语言。作为个人,选择一种编程语言来学习可能会令人生畏,因为有许多可能性,但选择该领域中最常用的语言可能会有所帮助。相反,作为一家公司,选择使用编程语言可能要复杂得多,尤其是对于那些已经存在多年并且已经建立了许多系统的公司来说:这取决于公司文化、安全性、应用程序的复杂性、可伸缩性、与公司内部使用的工具的集成等等。在 DS 的特定情况下,除了所有其他方面,如库/包覆盖的内容、这些包的最新程度、数据存储的位置、与部署工具的兼容性(如果有的话)等等。然而,尽管可能性很大,但 DS 领域中最常用的编程语言还是有一个列表,其中三种我有经验的语言是 Python、Java 和 r。

计算机编程语言

Python 可能是最简单和最直观的编程语言。然而,这并不意味着它需要被低估或过于简化。到今天为止,它是 DS 社区中使用最多的编程语言。

Python 是一种面向对象的编程语言(OOPL ),它的内存分配和回收(垃圾收集器)方法是自动的。它还是一种运行时编程语言,这意味着源代码被翻译成字节码,而不是机器码,这使得它与平台无关。它也是一种动态类型语言,这意味着我们在编码时不需要声明变量的类型。然而,这也有不利的一面,它使得代码有风险,难以调试,有时还很慢。然而,对于 Python 超级极客(不幸的是,不是我)来说,存在着 Python 的 Cython, C 扩展,它旨在给出类似 C 的性能代码,这些代码大部分是用 Python 编写的,带有 C 附加语法。如果做得好,它可以大大加速你的代码。然而,如果代码写得不好,它会对执行速度造成很大的损害。我在这方面的知识不多,所以我只限于提一下。

Python 的最大优势在于,它使得寻找适用于您的数据的正确算法的实验部分变得非常容易和快速。根据没有免费的午餐定理,我们不知道对我们的数据使用的最佳模型,因此在短时间内尝试一种以上算法的可能性可以产生差异。考虑到现在这是 DS 社区中使用最多的语言,这也意味着它有许多实现了各种算法的库,这些库与最近的发展保持同步。作为最常用的编程语言也意味着它被大多数数据工程工具支持,用于商业问题解决方案的部署过程。Python 的另一个优势是可视化库,如 ggplotmatplotlibplotlyseaborn ,这些库也使数据可视化成为一个优势。

Python 的另一个优势是 Jupyter Notebooks,这是一个基于 web 的交互式计算环境,用于开发和创建 Jupyter notebook 文档。这些笔记本易于使用,并且由于已经运行的代码单元的输出被存储,它们也可以用于呈现已经完成的工作。虽然笔记本电脑有利于原型开发,但它并没有考虑到可维护性或代码版本。使用笔记本时,代码的可重用性也很棘手。Python 语言的另一个麻烦是不同库的安装。我是说,谁没有遇到过 pip/conda 安装问题?

Java 语言(一种计算机语言,尤用于创建网站)

Java 不是闹着玩的。在开始用 Java 编程之前,您应该学习许多最佳实践和惯例,以理解事情是如何完成的,并正确地编码。代码需要非常结构化:有由类组成的包,每个类中都有变量和方法。有很多标准的命名约定是最好遵循的,类继承和设计模式都存在。就像 Python 一样是 OOPL。Java 的语法与 C 和 C++非常相似,它是一种静态类型语言,这意味着它要求你在使用变量之前声明变量的数据类型,如果代码包含错误,它将无法编译。它具有一次编写,随处运行的特性,这意味着编译后的 Java 代码可以在所有支持 Java 的平台上运行,而无需重新编译。它还具有自动内存管理功能,因此有一个自动垃圾收集器来处理使用中的内存。

至于对数据科学的关注,当在项目的初始阶段快速尝试不同的方法时,Java 的使用会受到限制。静态类型和良好结构意味着您必须从一开始就以指定的良好结构方式编写代码,这种方式失去了 Python 所允许的灵活性。然而,从长远来看,这是一个额外的收获,因为如果你从一开始就写好代码,你就不需要对你的代码做太多的重构。Java 的一个非常重要的特征是它有很高的执行速度,这在处理大量数据和应用计算量大的算法时是至关重要的。Java 的另一个巨大优势是,它在许多组织中用于创建后端系统和应用程序,并且它是 Oracle 支持的独特计算系统,这意味着易于集成和最小化兼容性问题。Fink、Hadoop、Hive 和 Spark 等著名工具也是用 Java 编写的。DS 的库的种类没有 Python 的多,但是它确实有像 Weka 3 这样的库。

稀有

如果我说 R 是我最不喜欢的语言,有数学学位的人会生气吗?你可能会,但没关系,因为你们可能是唯一使用它的人。好吧,我知道这不完全正确,因为 R 可能是 DS 社区中仅次于 Python 的第二大使用语言,但是统计学家和数学家似乎是唯一的 R 爱好者。

作为一种编程语言,r 对于从事数据分析和统计计算的统计学家来说是非常独特的。经常与 Python 相提并论,因为它的开源特性,它支持大多数操作系统的设计以及它的解释特性。以包的形式构建,这些包也可以由用户创建,并且有一个很大的社区来考虑这些包的有效性,该社区由超过 8,000 个网络贡献包组成。它提供了各种数据类型,如向量、矩阵、列表、数据框和因子,以及许多对它们进行巧妙转换的函数。

作为一种为统计模型和计算而设计的语言思想,它提供了许多数据操作,如分类和生成数据、修改、合并和精确分布数据集。R 提供了许多统计模型,许多分析师用 R 编写了他们的应用程序。R 中最常用的编码图形界面是 RStudio,它非常用户友好。正如我之前提到的,有很多包,也有相当多的包用于 DS 应用程序。R 的另一个优点是它也为数据可视化进行了优化。有些包,如 ggplot 和 plotly,与 Python 中的相同,但除此之外,使用 Shiny 和 Markdowns 这样的包,可以产生可视化效果,可以进行交互,这与 Power BI 或 Tableau 等其他复杂的可视化工具产生的仪表板非常相似。然而,这种语言的一个缺点是它不是很直观(向量索引从 1…开始)并且有一个很难理解的语法。这种编程语言的其他负面因素包括安全性差、占用大量内存、比其他编程语言慢以及算法分散在许多不同的包中。

很久以前,我曾经认为我只需要看 Cesaroni 或者其他在 Canale 5 或 Italia 1 播出的意大利语电视剧就能懂意大利语,但是后来我来到了意大利,我很难用意大利语交谈,因为我从来没有练习过。同样的原理也适用于任何编程语言。我对提到的三种编程语言的体验非常不同: Python 我从大学项目、硕士论文开始自学,然后在工作环境中,边学边学习最佳实践, Java 我从大学的一门结构良好的课程中学习,然后是一个实践项目,而 R 相反,我是在我的第一次工作经历中学习的,从对语言的简短介绍开始,然后是修改已经实现的包这就是说,学习编程语言几乎没有绝对正确或错误的方法,但我在学习计算机科学和工作经验 5 年后意识到两件事:

  • 实践经验是关键。印刷品(“Hello”)的例子只是一个开始,但遗憾的是,要想说一口流利的编程语言,你需要的远不止这些
  • 理解引擎盖下发生的事情也很重要。在某些时候,您将需要了解代码中的瓶颈在哪里,了解一些编程语言的工作原理会有很大帮助

困难时期的数据承诺

原文:https://towardsdatascience.com/the-promise-of-data-in-difficult-times-428d9619714d?source=collection_archive---------72-----------------------

编者按: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里

其他几个更有权威的作者也写过名为“新冠肺炎”的黑天鹅事件及其影响。当我写这篇文章的时候,全世界大约有 290 万病例,20 万人死亡。199 个国家的人民受到了影响。

近年来,技术和商业界非常重视人工智能——它是一只神奇的独角兽,将改变人类生活的方方面面。那么在目前的情况下,人工智能到底帮了多大的忙呢?

**早期赢家:**加拿大健康监测初创公司蓝点是世界上首批准确识别新冠肺炎病毒传播及其风险的公司之一,据美国消费者新闻与商业频道报道。12 月下旬,这家初创公司的人工智能软件在中国武汉发现了一系列不寻常的肺炎病例,并预测了病毒下一步可能的去向。也许这些预测应该得到更多的关注。

数据科学拯救世界:

新冠肺炎开放研究数据集 (CORD-19),一项基于西雅图艾伦人工智能研究所(AI2) 语义学者项目的倡议,使用自然语言处理以前所未有的速度分析数万篇科学研究论文。该数据集为世界各地的数据科学家提供了展示其自然语言处理和文本挖掘能力的机会。

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

新冠肺炎开放研究数据集。来源:Kaggle

理?医学研究人员和科学家必须从所有这些研究中迅速收集共同点,以找出病毒的解决方案。

在该数据集于 3 月 16 日发布的四天内,它收到了超过 594,000 次浏览和 183 次分析。

然后是 COVID global forecasting —一个用于预测分析和数据可视化的数据分析巨头。“在这个挑战中,你将预测在未来天,世界各地的累计确诊新冠肺炎病例数,以及由此导致的死亡人数。”

这又是一个数据专家应用所有奇妙的预测和预报技术的真实舞台。让我们看一个例子:

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

使用 Matplotlib 创建的新冠肺炎一段时间内全球确诊病例和死亡病例图。信用:https://www . ka ggle . com/corochann/新冠肺炎-EDA-with-recent-update-on-April

我,机器人

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

一台 InTouch 宋含远程保健机器,就像在华盛顿州埃弗雷特治疗病人的机器。(InTouch 照片)

人们可以通过 Alexa 订购杂货,而无需踏进商店。机器人正在取代医院的临床医生,帮助消毒房间,提供远程医疗服务,以及处理和分析新冠肺炎测试样本。医生们甚至使用机器人来治疗华盛顿州埃弗雷特市第一个被诊断患有新冠肺炎的人。,据守护

撇开机器人不谈:面对人员短缺和不堪重负的病人数量,越来越多的医院转向自动化工具来帮助他们管理疫情。

例如,基于人工智能视觉的工具可以快速将 x 射线分为新冠肺炎阳性或阴性,可以节省专家的工作时间,并节省患者更多的等待时间。具有元数据管理的端到端人工智能工作流可以更进一步,轻松地对已经推理的数据进行分类。查看本次网络研讨会,内容是关于在中断时使用计算机视觉和元数据管理存储。

科技巨头

许多科技巨头已经提供了他们的数据产品和专业知识来帮助减轻危机的影响。例如:

**IBM 将免费提供沃森助手 90 天:**为了帮助解决新冠肺炎周围的情况,IBM 将免费提供沃森助手(用于构建虚拟助手的对话式人工智能平台)至少 90 天。它经过培训,能够直接利用美国疾病预防控制中心的指导,理解并回答常见的新冠肺炎问题,并且可以轻松集成到现有的网络或电话渠道中。

微软正在动员他们的人工智能促进健康计划,专注于帮助那些在新冠肺炎研究第一线的人。这是一项慈善倡议,旨在加速医学研究,提供全球健康见解,并改善得不到充分服务的人群获得健康的机会。

谷歌最近推出了一个人工智能聊天机器人,名为快速反应虚拟代理程序,它将提供信息与新冠肺炎疫情战斗,正如谷歌博客中宣布的那样。谷歌还与苹果合作开发了新冠肺炎联系人追踪技术。

脸书·艾与纽约大学的库兰特数学科学研究所合作,创建了新冠肺炎病毒传播的本地化预测模型。这些本地预测可以帮助特定县的医疗服务提供者和紧急响应者决定如何最好地分配他们的资源(例如,决定何时调整诊所的人员安排以应对预期的患者增加)。

在我们面临的最大的全球危机之一中,人工智能如何被用来帮助人类的例子还有很多。

*赢家——卫生纸?😗

不要问数据科学能为你做什么,要问你能为数据科学做什么?

想想看:纸巾产品制造商金佰利公司的股价最近上涨了 2%,相比之下,道琼斯工业平均指数和标准普尔 500 指数分别下跌了两位数。这是因为危机期间卫生纸需求激增。

这场危机的一个影响或许更值得关注,那就是对预测模型的影响。新冠肺炎导致了对旅行和旅游、购物中心和餐馆/酒吧的需求出现大规模异常的负峰值。另一方面,对卫生纸、消毒剂、方便面和杂货等商品的需求出现了异常增长。问题是:如果公司一直使用历史数据来预测销售、库存需求和人员配备,这些峰值会如何影响预测?

我将在以后的博客中探讨这个话题。

现在,让我们恭敬地得出结论,数据正在实现其帮助人类应对异常困难时期的承诺。

在 Kubernetes 上运行 Apache Spark 的利与弊

原文:https://towardsdatascience.com/the-pros-and-cons-of-running-apache-spark-on-kubernetes-13b0e1b17093?source=collection_archive---------12-----------------------

Kubernetes 对 Spark 的支持是最近才添加的。它与其他部署模式相比如何,是否值得?

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

传统软件工程正在向 k8s 转移。Spark 会跟进吗?(照片由法比奥昂斯佩什拍摄)

Apache Spark 是一个开源的分布式计算框架。在几行代码(Scala、Python、SQL 或 R)中,数据科学家或工程师定义了可以处理大量数据的应用程序,引发了在一个机器集群上并行化工作的关注。

Spark 本身并不管理这些机器。它需要一个集群管理器(有时也称为调度器)。主要的集群管理器有:

  • 独立:简单的集群管理器,功能有限,内置 Spark。
  • Apache Mesos:一个开源集群管理器,曾经流行于大数据工作负载(不仅仅是 Spark ),但在过去几年中逐渐衰落。
  • Hadoop YARN:基于 JVM 的 Hadoop 集群管理器,于 2012 年发布,是迄今为止最常用的集群管理器,用于内部部署(例如 Cloudera、MapR)和云部署(例如 EMR、Dataproc、HDInsight)。
  • Kubernetes:从 Spark 2.3 (2018)版本开始,Spark 就在 Kubernetes 上原生运行。这种部署模式正迅速获得企业的支持(谷歌、Palantir、红帽、彭博、Lyft)。Spark-on-k8s 被标记为实验性的(从 Spark 3.0 开始),但将在 Spark 3.1 中宣布量产就绪(将于 2020 年 12 月发布)!

作为这个街区的新成员,Kubernetes 有很多宣传。在本文中,我们将解释 Spark-on-k8s 的核心概念,并评估这种新部署模型的优点和缺点。

核心概念

你可以使用 spark-submit 或者使用 spark-operator 提交 Spark 应用程序——后者是我们的首选,但是我们将在未来的教程帖子中讨论它。该请求包含您的完整应用程序配置,包括要运行的代码和依赖项(打包为 docker 映像或通过 URIs 指定)、基础设施参数(例如分配给每个 Spark 执行器的内存、CPU 和存储卷规格)以及 Spark 配置。

Kubernetes 接受这个请求,并在一个 Kubernetes pod 中启动 Spark 驱动程序(一个 k8s 抽象,在本例中只是一个 docker 容器)。然后,Spark 驱动程序可以直接与 Kubernetes master 对话,请求 executor pods,如果启用了动态分配,就可以根据负载在运行时放大和缩小它们。Kubernetes 负责将 pod 打包到 Kubernetes 节点(物理虚拟机)上,并将动态扩展各种节点池以满足需求。

再深入一点,Kubernetes 对 Spark 的支持主要依赖于位于 Spark 驱动程序中的KubernetesClusterSchedulerBackend

这个类跟踪当前注册的执行器数量,以及期望的执行器总数(从固定大小的配置或从动态分配)。每隔一段时间(由spark . kubernetes . allocation . batch . delay配置),它将请求创建或删除 executor pods,并在发出其他请求之前等待该请求完成。因此,这个类实现了 Kubernetes 爱好者所珍视的“期望状态原则”,更喜欢声明性语句而不是命令性语句。

Spark 对 Kubernetes 的利弊

1.集装箱化

向容器(Docker containers)的转移是 Kubernetes 最初如此受欢迎的原因。软件工程世界中容器化的好处同样适用于大数据世界和 Spark。它们使您的应用程序更具可移植性,它们简化了依赖项的打包,它们支持可重复且可靠的构建工作流。

为 Spark 使用 Docker 容器的三大好处:
1)一次构建依赖项,随处运行(本地或大规模)
2)使 Spark 更加可靠和经济。
3)将您的迭代周期加快 10 倍(在 Data Mechanics,我们的用户定期报告将他们的 Spark 开发工作流程从 5 分钟或更长时间缩短到不到 30 秒)

我最喜欢的好处是依赖管理,因为众所周知,Spark 非常痛苦。您可以选择为每个应用程序构建一个新的 docker 映像,或者使用一个较小的 docker 映像集来打包您所需的大多数库,并在上面动态添加您特定于应用程序的代码。告别每次应用程序启动时编译 C-library 的冗长的 init 脚本。

更新(2021 年 4 月):我们已经公开了优化的 Docker 图像,供任何人使用。它们包含最常用数据源的连接器——我们希望它们开箱即用!查看我们的博客文章和我们的 Dockerhub 页面了解更多详情?

2.高效的资源共享带来巨大的成本节约

在其他集群管理器(YARN、Standalone、Mesos)上,如果您想为并发 Spark 应用程序重用同一个集群(出于成本原因),您必须在隔离性上做出妥协:

  • 依赖隔离。您的应用程序将拥有一个全球 Spark 和 python 版本,共享库和环境。
  • 性能隔离。如果其他人开始一项大工作,我的工作可能会运行得更慢。

因此,许多平台(Databricks、EMR、Dataproc 等)都推荐为生产作业运行瞬态集群。启动群集,运行作业,终止群集。这种方法的问题是,您需要支付安装/拆卸成本(通常大约 10 分钟,因为正确安装 YARN 需要很多时间),并且您没有获得任何资源共享。使用这种方法很容易出错并浪费大量计算资源。

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

Spark-on-Kubernetes 为您提供了两个世界的精华:完全隔离和强大的资源共享。

Kubernetes 上的 Spark 为您提供了两个世界的精华。您可以在一个 Kubernetes 集群上运行所有应用程序,每个应用程序都可以选择自己的 Spark 版本、python 版本和依赖关系——您可以控制 Docker 映像。在 10 秒钟内,Kubernetes 可以拆除一个应用程序的容器,并将资源重新分配给另一个应用程序。这非常高效——在 Data Mechanics,当客户从其他平台迁移时,我们通常可以为他们节省 50%到 75%的成本。

也很方便。有了集群自动扩展(完全在 Data Mechanics 平台上为您管理),您可以不必再考虑集群和虚拟机,只需以无服务器的方式使用 Spark。告别复杂的集群管理、队列和 YARN 部署的多租户权衡!

3.丰富生态系统中的集成

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

Spotinst 建造的丰富的 Kubernetes 生态系统的代表

在 Kubernetes 上部署 Spark 可以免费为您提供强大的功能,例如使用名称空间和配额进行多租户控制,以及基于角色的访问控制(可以选择与您的云提供商 IAM 集成)来实现细粒度的安全性和数据访问。

如果您有 k8s 范围之外的需求,该社区非常活跃,您很可能会找到满足这一需求的工具。如果您已经将 Kubernetes 用于堆栈的其余部分,这一点尤为重要,因为您可能会重用现有的工具,例如用于基本日志记录和管理的 k8s dashboard,以及用于监控的 Prometheus + Grafana。

中性火花性能是相同的

我们运行了基准测试,证明在 Kubernetes 上运行 Spark 和在 YARN 上运行 Spark 之间没有性能差异。

在我们的博客帖子— 中,Apache Spark 性能基准测试显示 Kubernetes 已经赶上了 YARN —我们回顾了基准测试的设置、结果以及在 Kubernetes 上运行 Spark 时最大化 shuffle 性能的关键技巧。

尽管 Spark 的原始性能是相同的,但正如我们前面提到的,通过迁移到 Kubernetes 上的 Spark,您可以节省大量成本。阅读一位客户的故事,他通过从 YARN (EMR)迁移到 Spark-on-Kubernetes(数据力学)降低了 65%的成本。Kubernetes 上 Spark 的缺点

1.让 Spark-on-k8s 大规模可靠需要时间和专业知识

如果你是 Kubernetes 的新手,它引入的新语言、抽象和工具可能会让你感到害怕,并让你偏离你的核心任务。即使你已经有了 Kubernetes 的专业知识,还有很多东西需要建立:

  • 创建和配置 Kubernetes 集群及其节点池
  • 设置 spark-operator 和 k8s 自动定标器(可选,但推荐)
  • 设置 docker 注册表,并创建一个过程来打包您的依赖项
  • 建立一个 Spark 历史服务器(在一个应用完成后查看 Spark UI,尽管 Data Mechanics Delight 可以避免这个麻烦)
  • 设置您的日志记录、监控和安全工具
  • 为 Kubernetes 优化应用配置和 I/O
  • 在集群上启用定点/可抢占节点(可选,但推荐)
  • 构建与您的笔记本电脑和/或日程安排程序的集成

这就是我们建立数据机制的原因——负责所有的设置,并使 Kubernetes 上的 Spark 易于使用且具有成本效益。查看Kubernetes 开源平台上的数据机制如何改进 Spark以了解我们的平台在开源基础上提供了什么。

2.您应该运行最新的 Spark 版本

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

库伯内特斯星火项目的改进时间表

Kubernetes 上对 Spark 的最初支持始于 2018 年 2 月的 Spark 2.3,但该版本缺乏关键功能。在 Data Mechanics,我们只支持 Spark 2.4 及以上版本。我们强烈建议使用:

  • Spark 3.0 及以上版本:受益于动态分配——每个 Spark 应用程序能够根据负载动态添加和删除 Spark 执行器。如果你打算以交互方式(从笔记本)使用 Spark,这个特性非常重要。这是使它们具有成本效益的唯一方法。
  • Spark 3.1 及更高版本:Spark-on-Kubernetes 已正式宣布正式上市,并准备好投入生产——阅读我们的文章深入了解 Spark 3.1 版本。除了强大的功能之外,它还带来了关键的稳定性和性能改进,如 Spark 能够预测定点清除,并在执行器被中断之前优雅地关闭执行器(不会丢失它们的 shuffle 和缓存数据)。

结论——你应该开始吗?

过去几年,传统软件工程已经转向云原生容器化,不可否认的是,大数据工作负载也在发生类似的转变。事实上,随着即将到来的 Spark 版本(3.1,将于 2020 年 12 月发布),Kubernetes 上的 Spark 将在官方文件中标记为正式可用和生产就绪。

是否意味着每个数据团队都应该成为 Kubernetes 专家?不,这是我们建立数据机制的原因,这是一个托管的 Spark 平台,部署在我们客户云账户(AWS、GCP 和 Azure)内的 Kubernetes 上。

我们已经帮助许多客户在 Kubernetes 上运行 Spark,无论是为新的 Spark 项目,还是作为从基于 YARN 的基础设施迁移的一部分。我们负责所有的设置和维护,我们的平台在开源版本的基础上添加了直观的用户界面、笔记本和调度程序集成以及动态优化,使 Kubernetes 上的 Spark 更易于使用,更具成本效益。

好奇想了解更多?访问我们的网站与我们一起预订一个演示来开始吧。

更喜欢用开源的方式自己构建这个?查看我们关于如何在 Kubernetes 上设置、管理&监视器 Spark 的高级指南。

修剪基数 Trie——类固醇上的基数 Trie

原文:https://towardsdatascience.com/the-pruning-radix-trie-a-radix-trie-on-steroids-412807f77abc?source=collection_archive---------42-----------------------

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

照片由 niko photos

修剪基数三叉树是一种新的数据结构,从基数三叉树派生而来,但是速度快了 3 个数量级。

在我发表了 SymSpell (一种非常快速的拼写纠正算法)之后,我经常被问到它是否也可以用于自动补全。不幸的是,尽管速度很快,SymSpell 并不是自动完成的好选择。基数 Trie 似乎是自动完成的自然选择。但是在大字典中查找一个小前缀——导致大量的候选字——速度不够快。因此,我设计了修剪基数 Trie -一个自动完成的解决方案的速度与 SymSpell。

一个基数 Trie 或 Patricia Trie 是一个空间优化的 Trie(前缀树)。运行基数 trie 的 P
算法是一种新的基数 trie 算法,它允许修剪基数 trie 的提前终止查找的**。**

在基数 Trie 中,查找是 O(k) ,其中 k 是密钥的长度。虽然这非常快,但不幸的是,这仅适用于单个术语查找。查找给定前缀的所有术语(或最相关的前 k 个)是更昂贵的——这是自动完成所需的操作。

特别是对于短前缀,我们必须遍历整个树的重要部分,以便找到所有的识别前 k 个最相关的候选。

包含数百万条短前缀建议的完整结果集对自动补全毫无帮助。这就是为什么在大多数情况下,我们对给定前缀的所有子词的完整集合不感兴趣,而只对最相关的前 k 个词感兴趣。我们可以利用这一事实来实现 top-k 结果的查找时间的大幅减少。通过用关于所有其子节点的最大等级的附加信息来扩充 trie 节点数据结构,我们可以实现 trie 遍历的修剪和提前终止。

通过在每个节点中存储其所有子节点的最大等级来实现查找加速。通过将该最大子等级与迄今检索到的结果的最低等级进行比较,我们可以大量修剪 trie 并对具有低子等级的无希望分支进行提前终止查找

更新:在一个 Reddit 评论 有一种误解,认为对于前 10 条建议,人们只需要在字典中查找 10 次。小心,没那么简单!为了获得前 10 个最相关的自动完成建议,仅仅在 600 万条目字典中进行 10 次查找是不够的。在 trie 的默认教科书实现中,对于作为输入的单字符前缀“m ”,我们必须遍历整个树的重要部分,并且 评估以“m”开头的所有 459,735 个候选项 ,因为 我们不想要仅仅 10 个随机建议而是那些具有最高等级的(T24)这就是修剪基数 trie 的改进之处。通过存储和利用一个节点的所有子节点的最大等级,我们可以大规模地修剪 trie 并进行提前终止。这使我们可以减少我们必须遍历的节点数,我们可以减少候选节点数,从 459,735,T34,T36 到 T37,T38,T39,110,T40,T41,T42!**

词典

Terms.txt 包含 600 万个来源于英文维基百科标题的单字母词双字母词,使用术语频率计数进行排名。但是你可以为你选择的任何语言和领域使用任何频率字典。

表演

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

修剪基数 Trie 比普通基数 Trie快 1000 倍*。*

应用:

PruningRadixTrie 非常适合自动完成或查询完成。

虽然对于一个单用户来说,37 毫秒的自动完成时间似乎足够快了,但如果我们必须并行地为数以千计的用户提供服务,例如在搜索引擎和搜索 API 中,情况就完全不同了。那么大型字典中的自动完成查找只有在比普通的基数 trie 快得多的情况下才变得可行。

自动完成与拼写纠正

这两个概念是相关的,而且有些相似。这就是为什么有时很容易使用一种旨在解决拼写纠正的数据结构来实现自动完成,反之亦然。但这不是个好主意。

滥用拼写纠正来实现自动完成

通常,我们期望从自动完成的中为任何给定的前缀找到最可能的单词,即使前缀是短的,而完成的单词是长的。然后输入和输出之间的编辑距离变大——当试图使用自动完成的拼写校正算法时,这会导致两个问题:

  1. 查找时间变得不可行巨大,因为用 Levenshtein 算法计算大编辑距离非常耗时。即使是像 SymSpell 这样速度极快的拼写纠正算法,也很难在合理的时间内返回“Microsoft Windows”作为“mi”前缀,并且不会用数千个无意义的候选项稀释返回的建议。
  2. 对于一个大的最大编辑距离,返回的候选人数量压倒性违背了提供帮助的目的。由于最大编辑距离将大于给定输入前缀的长度,大多数返回的候选项甚至没有一个与输入前缀相同的字母。

滥用自动完成功能进行拼写纠正

另一方面,从拼写纠正,我们期望纠正所有错误,直到最大编辑距离,甚至如果错误出现在第一个字母中。则根本没有公共前缀,使得使用 trie(前缀树)进行拼写纠正变得不可能。

拼写纠正自动完成的组合

最终,我们可以将两种算法结合起来,例如在 SeekStorm 这样的搜索引擎的查询领域。但如何有效地做到这一点,那是另一回事。

其他选项

除了使用修剪基数 Trie 之外,还有其他方法可以加速自动建议:

  • 仅在前缀长度阈值(例如≥3)以上时启用自动完成,因为在 trie 中查找短前缀的时间特别长,并且候选建议的精度很低。
  • 对低于前缀长度阈值(例如≤3)的每个前缀使用具有预先计算的 top-k 建议的哈希映射,因为短前缀的查找时间特别长,并且前缀的数量有限,并且哈希映射中的存储器消耗是可管理的

源代码

在 GithubGithub的 MIT 许可下,C#代码已经作为开源代码发布

水泵和人工智能:人工智能会扼杀还是创造就业机会?

原文:https://towardsdatascience.com/the-pump-and-ai-will-ai-kill-or-create-jobs-97f42485bcd2?source=collection_archive---------23-----------------------

关注工业革命可以帮助我们理解人工智能的前景和下个世纪的就业市场。

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

如何调和人工智能创新和有史以来最低的失业率?

美国失业率创历史新低,甚至包括不包括在官方失业率中的兼职和沮丧的工人。经济学家称这种情况为充分就业——每个愿意工作的人实际上都在工作。但是随着人工智能的出现,这种情况可持续吗?

为了分析未来,我们需要回顾过去。整整 322 年前的 1698 年,第一台自动化机器被制造出来。它彻底改变了世界,标志着工业革命的开始。发明者是英国工程师托马斯·萨弗里,他申请了专利并制造了一台蒸汽泵。萨弗里称之为“矿工的朋友”。名字设计得很好。

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

萨维里写给国王的书,书中他回答了对他发明的反对意见。

随着地下采矿过程的进行,这种泵被用来将水从矿井中抽出。以前,水是由数百名工人用水桶运出去的。挑战在于如何让工人和政府相信新机器不会扼杀就业机会。萨维里给英格兰国王写了一本书,他在书中写道:“我的设计不是……通过这项发明来歧视工匠或……任何种类的人;相反,是为了全人类的利益和好处,特别是我自己国家的人民;”【1】

萨弗里的机器不成功也不实用。但他的继任者,如托马斯·纽科门,在 1712 年改进了,这是蒸汽动力和后来的内燃机新时代的开始。

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

矿工的朋友:萨弗里的蒸汽泵

因此,回顾三个世纪前,我们可以问自己这样一个问题:萨弗里是对的吗——他的发明对他的国家有帮助吗?此外,它没有伤害工人吗?

有很多方法可以解决这些问题,但不可否认的是,没有泵或发动机,现代世界是不可能的,对吗?这些机器是最重要的工具,广泛用于帮助工人和家庭旅行、建造房屋和摩天大楼,甚至帮助治疗疾病。

工业革命无疑改变了工作类型、贸易关系、社会组织,并引入了城市生活。然而,工业革命期间的失业率大多很低,包括臭名昭著的童工。蒸汽泵创造了一个环境,它被用作解决现实世界问题的工具。

艾是我们今天矿工的朋友。人工智能将改变一切,引入自主革命,就像工业革命中创造的蒸汽泵一样。在我看来,失业问题已经解决——人工智能将改变就业市场,但不会扼杀就业。当然,在过渡期和周期性阶段,失业率将会上升(这是必须的,因为它不可能进一步下降)。

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

人工智能图表趋势。从各方面来看,人工智能都在上升。

人工智能发表的论文创历史新高,人工智能工作岗位创历史新高,人工智能课程注册人数飙升,开发人工智能的初创公司呈指数增长。尽管如此,失业率仍处于历史最低水平。

AI 不能承担失业的责任,但缺乏忽视技术教育重要性的政策和创造人与企业之间流动关系的法规。重要的问题不是人工智能是否会扼杀就业,而是我们如何确保人工智能将被用于社会进步,以及如何创造这些条件。

【1】托马斯·萨弗里。(1702). 矿工的朋友 :或者是一台以火升水的发动机。伦敦:为 s .克劳奇印刷,在康希尔教皇头巷的拐角处;再版,1827 年。

受限人工神经网络对幸福的追求

原文:https://towardsdatascience.com/the-pursuit-of-happiness-for-the-confined-artificial-neural-network-bd39f04c6313?source=collection_archive---------37-----------------------

学会在茶、书和网络中快乐。反思我们对幸福的追求。PyTorch、NumPy、Scikit-learn 和 TensorBoard 的有趣项目。

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

我的桌子。一个宁静的时刻。

动机

灰尘总是会找到它的路,来到被遗弃的地方,被遗忘已久的书架,旧书,以及这个世界已经离开的所有被忽视的空间。在硬盘的虚拟世界中,这肯定没有什么不同。被遗忘的文件夹里的旧文件肯定有一层层看不见的灰尘覆盖着。

当我终于再次拿起这个项目时,感觉好像灰尘已经积满了它。不是因为疏忽,我只是走了很多弯路才最终回到我离开的地方。

它最初完全在 NumPy 中实现,并打算成为我的从头开始的神经网络项目的一部分。但是那个项目的范围已经够大了。在那个项目结束后,我经历了一场我认为是自己造成的信任危机。我有什么资格宣称可以教任何人任何东西?这驱使我在我的白板上走上了一条狂热的分化之路,几天来,我在雅各宾派的行列之间理清我的道路,几天来,让 PyTorch 签名作证,因为我向自己证明了我的价值。

最重要的是,我最终向自己证明,我的努力一定有更高的目标。这让我重新开始写作。不是因为我觉得我值得教书。而是因为我看到了我想改变的东西。我看到来自不同背景的人渴望学习人工智能,但对涉及的数学感到害怕。一般来说,人们很乐意学习,只要这些材料是可访问的。所以我写了这篇文章,试图让神经网络的数学读者友好和容易理解。我写了在这个项目中我们将在神经网络内部使用的所有函数。我解释了如何区分它们,它们的输入和输出看起来像什么和意味着什么,以及如何从头开始实现它们或使用 PyTorch。

在完成了这个项目所需要的基础知识之后,我觉得回到这个项目上来才是正确的。这是我让学习变得有趣的持续旅程。因为生活已经够艰难了,你不需要为了学习而承受更多的痛苦。

我们将创建自己的数据集,并建立一个神经网络,根据幸福所拥有的东西对幸福进行分类。这也将是一种深刻的内省,反思追求幸福对我们意味着什么。我所有的欢呼和希望,你喜欢这个旅程。

创建“坐月子的快乐”数据集

“我多年来一直在寻找理想的地方。我得出的结论是,我能找到它的唯一方法就是成为它。”——【艾伦瓦

通常情况下,感到幸福是一个人做出的选择。当我们既不快乐也不悲伤时,定义快乐的任务就落在了我们身上。这些术语因人而异。虽然我们中的一些人认为真正的幸福是无条件的,但许多人在追求幸福的过程中还需要满足一长串条件。

对于我们项目的神经网络来说,生活简单得足以让以下条件成为通往快乐的唯一垫脚石:

  • 茶的理想温度区间。
  • 快速互联网连接。
  • 有趣的书。

如果这三项中至少有两项得到满足,神经网络应该会输出一个快乐的状态。更具体地说,我们将理想的茶温度定义为大于或等于 30℃且低于 60℃

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

30°C 的阈值是任意选择的。相比之下,这项研究支持 60 摄氏度的阈值,该研究发现偏好高于 60 摄氏度的热饮与消化系统疾病有关。

我们将网速定义为大于或等于 20 Mbps。再次任意选择,欢迎你选择不同的门槛。

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

关于书籍,我们会说有两类。神经网络喜欢的书会被标为 1。而它不喜欢的书将被标记为 0。

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

表达我们的感受不是一件容易的事情。许多感觉每时每刻都交织在一起。每种感觉都有自己的子感觉谱。看着尝试将感情的连续空间离散化,确实令人着迷。然而,为了简单起见,我们将假设我们的神经网络将快乐视为二进制。不是开心就是不开心。我们给不快乐贴上 0 的标签。我们用 1 来标记幸福。

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

记住这些原则,我们可以实现生成数据集的代码。以下代码随机生成 2000 个冷、热、烧茶温度。然后 3000 慢和快网速措施。其次是另外 3000 本不喜欢和喜欢的书。最后是 500 个不开心和开心的标签。

创建数据集时的一个主要关注点是使其平衡。我们必须确保每种特征的组合都被同等地表现出来。一个茶温,一个网速,一种书,有 12 种可能的组合。我们将为每个组合创建 500 个实例。然后,根据一个实例是否具有多数理想属性,我们将分配相应的幸福标签。因此,我们的数据集将有 4 列要素和 6000 行实例。

下面的代码可以分为两个主要部分:列的垂直连接,后面是行的水平连接。在第一部分中,创建了 12 个特征组合,每个组合有 500 行。在第二部分中,所有行的最终连接为我们提供了一个包含 6000 行的完整数据集。这里可以找到详细的实现

分割数据集

我们现在将数据集分成训练集、验证集和测试集。Scikit-learn 的方法 train_test_split() 将为我们的数据行提供额外的好处。

使标准化

为了标准化我们的数据集,我们将使用 Scikit-learn 中的类 StandardScaler 。我们必须小心,仅在训练集上安装标准缩放器。我们也不想标准化一次性编码的分类列。因此,下面的代码标准化了前两列(茶水温度和互联网速度)。然后将标准化输出与最后两列(书籍和快乐)连接起来。

将 NumPy 转换为 PyTorch 数据加载器

在我们认为我们的数据已经完全准备好之前,只剩下几个步骤:

  • 我们必须使我们的数据集与我们的神经网络可以接受的输入兼容。
  • 我们必须能够从用于训练的训练集,以及用于评估的验证和测试集中加载小批量的神经网络。

我们首先将数据从 NumPy 数组转换为 PyTorch 张量。之后,我们将使用每个张量创建一个 TensorDataset。最后,我们将把每个 TensorDataset 转换成一个具有特定小批量大小的数据加载器

坐月子的快乐数据集已经准备好了。我们已经准备好最终见到受限的神经网络。

受限神经网络

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

架构:3 个输入,带 ReLU 激活的线性层,带 Softmax 激活的线性层,2 个输出。

受限神经网络将具有输入层,接着是线性层和 ReLU 激活,接着是另一个线性层和 Softmax 激活。第一个输出神经元将存储输入描述不愉快状态的概率。第二个神经元将存储快乐状态的等效概率。

以下代码将该架构实现为一个名为 Network 的类:

**注意:**你可能已经注意到了网络类不包括任何 Softmax 激活。原因是在 PyTorch 中, CrossEntropyLoss 在计算其负 log loss 之前先计算 Softmax。我们将在下一节讨论这个问题。

培养

在我们继续训练神经网络之前,我们必须选择一个学习速率和若干个时期。我们还必须定义一个优化算法和一个损失函数。损失函数将是交叉熵损失。现在,我们从随机梯度下降优化器开始。

也许这里最令人兴奋的部分是,我们将使用 TensorBoard 来可视化我们的神经网络的训练。作为 PyTorch 的狂热用户,得知我仍然可以利用 TensorBoard 进行可视化对我来说是个好消息。更让我兴奋的是,我得知 TensorBoard 的一个扩展将它集成到了 Colab 笔记本中。

如果你有兴趣学习如何在 Colab 笔记本中设置 TensorBoard,我强烈建议你查看我的笔记本中标题为 TensorBoard 的部分。以下代码训练我们的神经网络,并可视化训练和验证损失的进度:

你会注意到在上面的代码中,我们使用一个名为 summary 的对象来调用方法 scalar 。使用 TensorBoard 的基本思想是首先指定一些日志目录。在这些目录中,我们创建了将被 TensorBoard 读取的文件。这些文件被称为摘要文件编写者。在上面的代码中, train_summary_writervalid_summary_writer 都是摘要文件编写器。通过调用方法 scalar ,我们在适当的摘要文件中写入每个时期的损失值。然后,TensorBoard 读取该文件,并通过交互式界面方便地显示出来。

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

TensorBoard:训练和验证损失。

一些可以尝试的改进:

  • 增加纪元的数量。
  • 增加隐藏层的大小。
  • 用 Adam 优化替换 SGD。

你可以在这里找到这些改进的详细实现

估价

在本节中,我们将重点关注使用不同的指标来评估我们的模型。

  • 我们首先对测试集中的一小批进行预测,以检查我们的模型的性能。
  • 接下来,我们对整个测试集进行预测,并聚合输出概率和预测。
  • 然后我们使用 TensorBoard 为我们的类绘制精确召回曲线。
  • 我们实现了自己的混淆矩阵方法,不仅返回通常的矩阵,还返回模型出错的实例的索引。
  • 我们计算模型的精确度、召回率和准确度。
  • 最后,我们使用从我们的混淆矩阵方法返回的指标来检查不正确的情况,并了解神经网络的弱点。

做预测

除了对测试集进行预测之外,我们还对检查我们模型的输出和理解幕后发生的事情感兴趣。为了实现这两个目标,我们实施了以下步骤:

  1. 我们为测试集创建一个批量大小为 3 的数据加载器。我们将批量限制为 3 个,这样我们就可以检查而不会感到不知所措。
  2. 我们将 3 个实例前馈到我们的网络,并将结果存储在一个名为 linout 的变量中,表示模型的第二个线性输出。
  3. 我们使用 PyTorch 方法 softmax 计算每个实例的概率。softmax 的输出存储在名为 prob 的变量中。
  4. 我们希望我们的模型预测概率最高的类别。方法 max 可以返回最高概率及其指标。我们只对索引感兴趣,它存储在变量 pred 中。

我们的结果看起来很有希望。前三个预测是正确的,softmax 概率表明该模型对正确的输出非常有信心。

与其说是实际需要,不如说是为了学习,让我们为我们的类绘制精确召回曲线。我们对测试集的其余部分应用上述步骤,然后我们连接每批的所有概率和所有预测。有了这些概率和预测,我们可以很容易地用方法 add_pr_curve 为我们的类绘制精确召回曲线。我依靠这个官方 PyTorch 教程来完成以下剧情的实现:

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

每一类的精确召回曲线。

我们的结果再一次非常理想。我们得到了一个完美分类器的精确召回曲线。善意的提醒,这是一个有趣且感觉良好的项目,这里的目的是在娱乐的同时学习和实践。

混淆矩阵

计算混淆矩阵已经很有见地了,但是我们还要更进一步。我们的方法将返回带有真阳性、假阳性、真阴性和假阴性的常见混淆矩阵。此外,它还将返回错误案例的索引,以供以后检查。

为了避免代码过多,这里有一个链接到混淆矩阵方法的实现。该方法的输出是:

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

神经网络的混淆矩阵。

精确度、召回率和准确度

根据混淆矩阵方法的结果,我们可以很容易地计算出我们的神经网络的精确度、召回率和准确度。

  • 我们模型的精度是 0.9877
  • 我们车型的召回率是 0.9678
  • 我们模型的精度是 0.9817

错误案例

只有当我们反思自己的缺点时,我们才能进步。所以观察模型出错的例子是很有趣的。我们已经有了错误案例的索引。然而,如果我们在测试集上使用它们,我们将得到标准化的值,并且我们不能从标准化的数据中得出任何结论。

我们首先需要将实例转换回它们的初始比例。值得庆幸的是,Scikit-learn 为其【standard scaler】*提供了一个名为 的逆 _ 变换 的方法。*我们将使用这种方法将缩放比例恢复正常。

当我们检查假阳性和假阴性时,很快就会发现它们是边缘情况。在每个实例中,至少有一个属性值接近定义的阈值。

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

有些病例接近其定义的阈值。

在其他情况下,神经网络的决策会受到茶温度极值的影响。刚刚超过好阈值的互联网速度、一本好书、但是非常高或非常低的茶水温度的组合导致了一些不愉快的预测。

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

在某些情况下,极端的茶水温度淹没了恰到好处的网速和一本好书。

我们可以争辩说,这些都是小错误,我们已经达到了优秀的评估分数。但这将是一个错误和无力的论点,因为我们在这里的旅程中积累了疲惫。最终,一个模型的价值只有在边缘情况下才能得到真正的评估。为了改进我们的模型,我们可以使用更多的边缘案例来训练它。然而,这只是我们已经做的重复。所以我把它留给你作为一个练习,如果你想复制和改进我的工作:加入快乐游乐场

至于我,我就此打住。因为尽管神经网络仍然有缺陷,但这些缺陷是值得反思的。我们可以从中获得关于自己的宝贵见解的缺陷,以及我们如何认为我们所拥有的是理所当然的。

结论

“以一种对生命的稳定的优越感活着——不要害怕不幸,也不要渴望幸福;毕竟,都是一样的:苦不会永远持续,甜也不会把杯子装满。”——亚历山大·索尔仁尼琴

你上一次意识到自己不快乐是什么时候?你有没有意识到,尽管你几乎没有你需要的东西,但你还是拥有一些东西,这比一无所有要多得多。你不会想陷入错误的悲观主义者的可悲困境。就像你不想不知不觉地被无知的幸福带走一样。

生活不仅仅是快乐。我们意识到我们的死亡,容易生病,容易衰老,暴露于我们环境的任意变化。追求的是意义而不是幸福。这意味着在我们艰难的时候支持我们。因为我们也是足够强大的生物,能够承受我们悲惨的生存环境。

参考

米(meter 的缩写))胺。 禁闭中的幸福 Colab 笔记本。 (2020)。

米(meter 的缩写))安德鲁。 如何在 Google Colab 中配合 PyTorch 使用 Tensorboard。(2019).

T.斋藤和 m .雷姆斯迈尔。 精准召回剧情简介 (2017)。

NumPy 文档: 数组操作例程。 (2020)。

PyTorch 教程和文档:

Scikit-learn 文档: 数据集转换 (2020)

冲浪板教程: 冲浪板入门 (2020)。

Python Lambda 函数已经变成了魔鬼

原文:https://towardsdatascience.com/the-python-lambda-function-has-become-a-devil-d0340404abcb?source=collection_archive---------26-----------------------

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

Clker-Free-Vector-ImagesPixabay 上拍摄的照片

讨论从一个测验问题开始…

如果你不是 Python 新手,我打赌你一定知道 Lambda 函数。我不得不说,我喜欢在某些情况下使用 Lambda 函数。比如熊猫数据帧apply()函数、map()filter()函数,它们天然兼容 Lambda 函数,让我们的生活变得更轻松。我们不需要逐字声明一个显式函数。相反,只需定义一个内嵌的逻辑。

然而,在今天的这篇文章中,我将说一些关于 Lambda 函数的负面的东西。我不是说停止使用它,但肯定的是,这是一个问题。这种担心源于我从一个年轻朋友那里看到的一个问题,他正在世界排名前 20 的大学学习。

f =(λx:x((λx:x(λx:x))(x)))(λx:x)

给定这个函数*f*,请说出*f(1)*的输出是什么。

顺便说一下,你不允许使用 Python 解释器,只需通过阅读和思考来获得答案,因为这是一个有时间限制的在线测验:)

前。一些背景

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

照片由 geralt 在 Pixabay 上拍摄

我相信有人可能知道在某些特定场景下如何使用 Lambda 函数,但可能不了解其中的机制。让我简单解释一下,lambda 函数是由什么组成的。

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

如果很混乱也不用担心。事实上,我们可以将 lambda 函数重写为我们熟悉的格式。

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

正如我们所见,lambda 函数和普通 Python 函数有两个主要区别:

  1. Lambda 函数是匿名的,我们不必用函数名来定义它。
  2. Lambda 函数只能有一个表达式,而普通函数可以有无限个表达式来定义一系列复杂得多的过程。

我们喜欢 lambda 函数,因为有时它简单明了。作为一名数据科学家,我使用 lambda 函数最频繁的场景可能是与 Pandas data frames apply()函数结合使用,因为它需要一个“函数”作为参数,而 lambda 函数可以只是作为参数的“函数”。

df['col'].apply(lambda x: x+1)

这相当于下面使用一个普通的函数。

def plus_one(x):
    return x+1df['col'].apply(plus_one)

1.理解函数的结构

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

Pixabay 上的自由照片拍摄的照片

嗯,不要忘记我在本文开始时提出的一个问题。在我们批评这样一个荒谬的函数之前,让我们先一起推导出它的输出。

由于这个函数非常混乱,为了更容易理解,让我们添加一些缩进并重新格式化它。

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

现在,它变得更清晰了。至少,从上面的图解中,我们可以看到有 4 个 lambda 函数,以及它们的边界。

最重要的是,我们需要知道这些λ函数中的x是孤立的。换句话说,虽然都叫x,但它们不是一回事。

为了减少混乱,我们用abcd来代替这些x。此外,我们知道 lambda 函数是匿名的,但是让我们为下一步给它们指定一个名称。我只想让命名约定尽可能简单。我们把这样的函数lambda d: d称为_d(d)

这是一幅精致的插图。

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

请注意,整个复杂的东西是一个函数,这是已知的,我们知道它被称为f(x),可以接受一个数字作为参数。

2.重写所有 Lambda 函数

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

图片由 picjumbo_comPixabay 上拍摄

好了,现在我们已经知道了整个函数的结构,但是仍然不清楚如何求解这个函数。这是因为 lambda 函数有时可读性不是很好,在这种情况下,简直不可读。

你还记得我们可以把任何 lambda 函数改写成普通 Python 函数的形式吗?让我们现在就做吧。

对于函数_c(c)_d(d)来说非常简单,因为它们只是简单地返回它们参数的值。

def _c(c):
    return cdef _d(d):
    return d

然后,我们再来看函数_b(b)。这个开始有点棘手,但是不要忘记冒号之前的所有内容都是参数,而冒号之后的所有内容都是函数体。不管参数以什么形式出现,它就是参数,即使它可以是一个函数。

换句话说,参数可以是一个函数。

def _b(b):
    return b(_c)

是的,函数_b(b)相当于说:“嘿!给我一个函数b(x),我将_c作为参数x传递。

同样,虽然更复杂,但我们可以重新编写函数_a(a),最后是f(x)

def _a(a):
    return a(_b)(a)def f(x):
    return _a(_d)(x)

在进行最后一步之前,让我们把所有的东西放在一起。

3.导出 f(x)的输出

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

照片由 stevepbPixabay 上拍摄

通过在没有实际运行的情况下导出输出,我们可以说我们完全理解了它(我相信创建这个问题的讲师会这样说)。

现在,我们有了上面所有的函数,所以我们现在可以开始推导了。既然要求它派生f(1),那么函数f(x)就会有它的x = 1

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

不要在这个阶段开始处理_d。很明显_a(_d)会是一个函数,数字1就是它的参数。所以,我们需要遵循“从左到右”的原则。

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

在这一步,我们扩展了函数_a(a),参数a被函数_d替换。所以,我们最终得到了一个新的函数。现在,我们需要插入函数_d(d)的参数_b

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

表达式_d(_b)就是简单的_b,因为函数_d已经被定义为无论传入什么都返回原始参数。下一步就是展开_b

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

函数_b将一个函数b作为它的参数,这里传入的参数是_d。作为参数传入的函数将把_c作为参数。下一步很容易,因为我们又拿到了_d

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

同样,_d将返回传入的任何内容,不做任何更改。最后我们得到了表达式_c(1)。如下所示的函数_c(c)也将简单地返回任何传入的内容,就像函数_d(d)一样。

def _c(c):
    return c

所以,很明显,_c(1) = 1

因此f(1) = 1

一些想法

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

照片由 josealbafotosPixabay 上拍摄

如果你一直读到这里,非常感谢你。现在让我们深呼吸一下。我知道阅读答案甚至很困难,那么解决问题怎么样?还有,这个问题是针对一个大学生而不是一个非常有经验的开发者?也许,即使像我这样有经验的 Python 开发者也需要花一些时间来弄清楚。

现在,我知道吉多·范·罗苏姆(Python 的创始人)为什么要去掉 lambda 函数了[1]。当它用单行函数表达式解决问题时,确实是一件令人惊叹的事情。同时,如果一个人混淆使用它,它也可能是邪恶的。本文中展示的例子只是一个极端的例子,但是我们可以想象在实践中或多或少会发生一些没有经验的程序员想要炫耀他们的“技能”的情况。

最后,我明白大学科目的考试一定有一些难题,因为我曾经是其中的一部分,正如我在这篇文章中所说的:

[## 考试成绩不呈正态分布怎么办?

数据转换-使用 Python Scikit 实现标准化和规范化-学习

towardsdatascience.com](/what-if-the-exam-marks-are-not-normally-distributed-67e2d2d56286)

然而,我不得不说,这篇文章中论证的这样一个问题,对学生来说几乎没有任何价值。此外,它可能会对学生产生负面影响。例如,我提到的那种家伙,过去常常用这种“技能”来“炫耀”并编写这种令人困惑的代码,可能通过这种问题从大学获得这种“技能”。

[## 通过我的推荐链接加入 Medium 克里斯托弗·陶

作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…

medium.com](https://medium.com/@qiuyujx/membership)

如果你觉得我的文章有帮助,请考虑加入 Medium 会员来支持我和成千上万的其他作者!(点击上面的链接)

参考

[1] G,罗森公司。Python 3000 中 reduce()的命运。万物蟒。2020 年 10 月 4 日检索到https://www.artima.com/weblogs/viewpost.jsp?thread=98196

Python 标准库——作为数据科学家应该知道的模块

原文:https://towardsdatascience.com/the-python-standard-library-modules-you-should-know-as-a-data-scientist-47e1117ca6c8?source=collection_archive---------15-----------------------

带有用法示例

Python 标准库包含大量处理日常编程的模块,并且包含在 Python 的标准版本中,这意味着不需要额外安装。它为与操作系统交互、读写 CSV 文件、生成随机数以及处理日期和时间等任务提供了模块。本文描述了 Python 标准库的 8 个模块,我相信你在用 Python 编程时会遇到这些模块。我们开始吧!🙌

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

克里斯里德在 Unsplash 上的照片

1.Zipfile

zipfile 库提供了轻松处理 zip 文件的工具。它允许你直接在 Python 中创建、读取和写入 zip 文件,而不需要使用外部程序。

阅读压缩文件

要在 Python 中打开一个 zip 文件,我们使用 zipfile。ZipFile 类 ,提供文件路径和打开模式作为输入。由于我们想以阅读模式打开文件,所以我们提供了 mode=‘r’

ZipFile 构造函数返回一个 ZipFile 对象,我们将它赋给变量 myzip 。然后,我们使用**。extractall(path=None,members=None,pwd=None)** 方法将所有成员从 zip 文件提取到当前工作目录。为了提取 zip 文件的部分成员,而不是全部,我们可以将他们的名字提供给参数成员

运行上面的代码后,我们可以打开当前目录来检查文件是否被正确提取。或者,我们可以使用 os.listdir() 函数(在 os 模块中定义)来获取工作目录中包含的条目列表。

最后,我们使用**关闭 zip 文件。**方法关闭()。当我们不再需要文件时,记住关闭所有文件以避免用完文件句柄是很重要的。

由于在 Python 中工作时很容易忘记关闭文件,所以我们可以使用带有语句的**,该语句在嵌套代码块执行后自动关闭 zip 文件。**

如果我们想获得 zip 文件中包含的成员列表而不提取它们,我们可以使用**。namelist()** 方法如下。

写一个 zip 文件

我们使用 zipfile 在 Python 中创建和打开一个新的 zip 文件。ZipFile 类处于写模式 mode=‘w’ 。创建 zip 文件后,我们调用**。write()方法**添加一个文件如下。

上面的代码在当前工作目录下创建一个新的 zip 文件 (new_file.zip),包含两个。txt 文件(file_1.txt 和 file_2.txt)。

2.随意

随机数在人工智能和数据科学中扮演着重要的角色。我们使用随机数在每个时期之前打乱训练数据,在神经网络中设置初始权重,分离训练和测试数据,或者进行 A/B 测试。

Python 标准库提供了大量用于生成随机数的函数。让我们看看其中的一些!

随机. randint

random.randint(a,b) 函数返回一个在 ab 之间的随机整数(两者都包含在内)。

Numpy 还提供了生成随机整数的函数( numpy.random.randint )。但与 random.randint 不同的是,不包含上界。

随机选择

random.choices(population,weights=None,*,cum_weights=None,k=1) 函数返回从人口中随机选择的 k 个元素的列表,替换为**。我们可以使用权重**参数来衡量每个值被选中的可能性。

random.shuffle

random.shuffle(x[,random]) 函数将序列 x 就地打乱,返回 None 。因此,函数的输入必须是可变对象。如果我们提供一个不可变的序列作为输入(例如一个字符串),就会出现一个异常( TypeError )。

为了混洗不可变的对象,我们可以使用 random.sample(population,k) 函数。该函数返回从群体中随机选择的 k 个元素的列表,没有替换。通过设置函数 k=len(population) 的第二个参数,我们获得了一个所有元素都被随机打乱的新列表。

如上图所示,我们可以使用内置函数 tuple()混洗列表转换为元组

3.操作系统(Operating System)

os 模块提供与操作系统交互的功能。它包含许多用于处理目录路径文件的工具。在本文中,我们将只讨论由 os 提供的一些功能。

获取当前工作目录

函数的作用是:返回当前工作目录的路径。

如上所示,该函数没有参数,返回一个字符串数据类型。

更改当前工作目录

os.chdir() 函数将当前工作目录修改为给定路径,返回 None

更改目录后,我们可以使用 os.getcwd() 函数来验证修改。

文件和目录列表

os.listdir(path) 函数返回指定路径中所有文件和目录的列表。如果路径被省略, os.list() 函数返回当前工作目录中的条目列表。

我们可以结合使用 os.listdir() 函数和其他函数来过滤返回的列表。如下图,我们用的是字符串方法**。endswith()** 获取当前工作目录中的文本文件列表。

将文件重命名为 o 目录

Python 允许您使用 os.rename(src,dst) 函数以编程方式重命名文件或目录。该函数将文件或目录 src 重命名为 dst 并返回 None 。如果你试图重命名一个不存在的文件或目录**,Python** 会抛出 OSError 异常。

下面的块代码将文件 file_1.txt 重命名为 file_new_name.txt

如上所示,我们使用 os.listdir() 函数来检查修改是否正确执行。

创建一个新目录

函数 os.mkdir(path[,mode]) 允许您创建一个名为 path 的目录,其模式为数字**。模式使用八进制数表示文件的权限(谁可以读、写或执行目录)。如果省略参数 mode,则使用默认值 0o777,使所有三个用户组都能够读取、写入和执行目录。**

在下面的代码块中,我们在当前工作目录中创建了一个名为 new_dir 的新目录。

函数 os.mkdir() 在现有目录中创建一个目录。如果您试图在一个不存在的地方创建一个目录,就会引发异常。或者,您可以使用函数 os.mkdirs() (带 s)来创建中间文件夹,如果它们不存在的话。

启动一个文件

os.startfile(path[,operation]) 用相关应用程序启动一个文件。默认的操作‘打开’,就像你双击一个文件,在你的电脑上打开它。

下面的代码将打开。txt 文件( file_2 )及其相关程序(在我的例子中是 Windows 编辑器)。

这些只是操作系统模块中可用的几个功能。阅读文档以了解更多信息!

4.时间

测量执行时间

我们可以使用 time.time() 函数来测量一段代码的执行时间。该函数返回自纪元以来经过的秒数。epoch 是时间开始的点( time.time() 将返回 0),它依赖于平台,在 Windows 系统上是 1970 年 1 月 1 日 00:00:00 (UTC)。

我们计算执行时间(挂钟时间),用下面的方式减去代码块前后的时间。

如果我们想计算 CPU 时间而不是运行时间**,我们使用 time.clock() 函数。经过的时间通常比 CPU 时间长,因为 CPU 也可以在代码块运行时执行其他指令。**

暂停执行

time.sleep(secs) 暂停程序执行给定的秒数 secs 。在用 Python 抓取网页时,这个函数就派上用场了。

大多数时候,我们希望尽可能快地执行代码。但是在网页抓取中,建议在请求之间暂停程序的执行,以免服务器不堪重负。

如上所示,在两次请求之间,执行会暂停 2 秒钟。

5.日期时间

datetime 库提供了许多在 Python 中处理日期和时间的工具。使用日期时间模块,我们可以很容易地获得当前时间,减去两个日期,或者将日期转换成定制格式的字符串。

导入库之后,我们用 datetime.datetime() 函数创建一个 datetime 对象。该函数需要三个参数:(1)年,(2)月,和(3)日,是小时、分钟、秒、微秒和时区可选参数。

如上所示,该函数返回一个日期时间对象。该对象具有以下属性:年、月、日、小时、分钟、秒、微秒和 tzinfo。我们可以使用点符号来访问它们,或者使用 getattr() 函数。

接下来,我们详细说明如何获取当前日期,减去两个日期,将一个 datetime 对象转换成一个 string ,反之亦然。

当前本地日期和时间

我们可以使用datetime . datetime . now(tz = None)函数轻松获得当前的本地日期和时间。

正如您所看到的,该函数返回一个具有以下格式的日期时间对象: YYYY-MM-DD HH:MM:SS:MS

减去两个日期

我们可以用 Python 减去两个 datetime 对象,结果得到一个 timedelta 对象。该对象表示两个日期之间的时间跨度。

如下图,我们通过减去乔治·奥威尔的死亡日期和出生日期来计算他活了多久。

将日期时间对象转换为字符串

。strftime(format) 方法将 datetime 对象转换为字符串,接受单个字符串参数( format )作为输入该参数指定了我们要返回的日期时间对象的哪一部分,以及以何种格式返回。

下表包含 Python 中可用的一些指令。

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

接下来,我们使用上面列出的指令创建不同格式的字符串来表示乔治·奥威尔的生日。

将字符串转换为日期时间对象

datetime . strptime(date _ string,format) 函数从字符串创建一个 datetime 对象,与相反。strftime() 方法。为了正确工作,作为输入传递的日期字符串需要匹配指定的格式。否则,会引发一个异常(值错误)。

在下面的例子中,我们从代表乔治·奥威尔的出生日期的字符串中获得一个 datetime 对象。

6.战斗支援车

逗号分隔值 (CSV)文件是用于传输信息的常用格式。信息的结构是一个,其中每个包含一个记录,每个包含一个字段,即由逗号分隔的字段。尽管逗号是最常见的分隔符,但我们也可以使用其他分隔符,如空格或制表符。

下图显示了一个包含学生信息的 CSV 文件。如下所示,文件的第一行包含字段名称(列标题)。

由于 CSV 文件纯文本文件**,我们可以像微软记事本一样使用文本编辑器创建并打开它。**

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

****Python 标准库提供了一个内置模块,包含读取、处理和写入 CSV 文件的类。尽管该模块对于简单的操作很有帮助,但建议使用 Pandas 进行更复杂的数值分析。

读取 CSV 文件—阅读器功能

导入库后,我们用内置函数打开打开 CSV 文件。接下来,我们将 file 对象传递给 csv.reader() 函数,将函数的输出存储在一个名为 reader 的变量中。然后,我们可以通过使用循环的迭代阅读器对象来访问文件的每一行。****

如上所示, reader 对象返回的每一行都是一个字符串列表。

或者,我们可以在每次想要访问下一行时使用 next() 函数。这个函数通过调用它的 next() 方法从迭代器阅读器返回下一个元素。

默认情况下,分隔符是逗号。然而,如果使用另一个分隔符,我们必须用分隔符参数指定它,如下所示。

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

读取 CSV 文件— DictReader 函数

csv。DictReader() 函数将 CSV 文件的行作为字典对象(具体地说是作为有序字典)而不是作为列表对象返回。字典字段名参数中指定。如果省略 fieldnames,则第一行中包含的值将用作键。

****有序字典由记住其内容添加顺序的字典组成。在 Python 3.6+中,字典也是插入排序的,意味着它们记住了插入条目的顺序。

编写一个 csv 文件—编写器功能

要将数据写入 CSV 文件,首先,我们使用内置函数 open写入模式下打开 CSV 文件。然后,我们将由打开函数返回的打开文件对象**作为输入提供给 **csv.writer()函数,获得一个 writer 对象。

writer 对象支持两种将数据写入 CSV 文件的方法。

  • ****CSV writer . writerow(row)→该方法将一行数据写入 CSV 文件。
  • ****CSV writer . writerows(rows)→该方法将所有给定的行(行对象的一个 iterable)写入 CSV 文件。

接下来,我们使用 writerows 方法编写一个包含艺术作品信息的 CSV 文件。正如您所观察到的,这个方法接受一个嵌套列表作为输入。

运行上面的代码后,在当前工作目录下创建一个 CSV 文件( works_of_art.csv )。

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

写一个 csv 文件— Dictwriter 函数

csv。DictWriter() 函数返回一个支持上述方法(writerow 和 writerows)的对象,用于将数据写入 CSV 文件。该函数需要输入标题信息(参数字段名)以及打开的文件对象。

在这种情况下, writerows 方法将字典列表而不是嵌套列表作为输入。

运行上面的代码后,在当前工作目录下创建一个 CSV 文件( works_of_art_2.csv )。

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

7.一团

glob 模块允许您通过使用通配符符号来查找匹配给定模式的文件和路径列表。一个通配符是一个特殊字符,我们可以用它来选择多个相似的名字。

下表显示了您可以在 glob 中使用的最常见通配符。

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

接下来,我们使用这个符号和 glob.glob() 函数从当前工作目录中获取匹配文件和路径的列表(如下所示)。

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

  • 所有 CSV 文件列表

  • 以单词学生开头的文件和目录。

  • Txt 文件: file_2.txtfile_3.txt ,以及 file_4.txt

正如您所观察到的, glob 函数比 listdir 函数(在 os 模块中定义)更灵活地列出目录中的文件。

8.Difflib

difflib 模块包含各种用于比较序列的函数和类,对于计算文本和字符串之间的差异尤其有用。

diff lib . get _ close _ matches(word,probabilities,n=3,cutoff=0.6) 函数可以方便地检测拼写错误和打字错误,将一个单词与一组可能性进行匹配。该函数采用两个可选参数 n截止值N 是返回的匹配数,默认为 3。截止值的范围从 0 到 1,表示可能性列表中返回一个元素的最小相似度,意味着元素单词足够相似。

接下来,我们使用这个函数获取用户介绍的一个国家的人口。首先,我们使用库 RequestPandas 从下面的网页获取数据。

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

然后,我们要求用户介绍一个国家,以访问其人口。如下图所示,如果你打错了,程序会建议一个相似的国家名称。

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

这个模块提供了更多的功能来识别文本之间的异同。如前所述,请参考文档,了解如何使用该模块的更多详细信息!😃

有趣的网站

除了官方的 Python 文档,你还可以在多个网页上找到关于如何使用 Python 标准库中可用模块的详细解释。

在本文中,我们解释了有限数量的模块,因为 Python 标准库包含超过 200 个模块!这意味着我们将在以后的文章中再次讨论 Python 标准库。💪

阿曼达💜

对人工智能的探索

原文:https://towardsdatascience.com/the-quest-for-artificial-general-intelligence-34ecf9e7e88e?source=collection_archive---------51-----------------------

我们在哪里,我们要去哪里

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

"人工智能始于一个古老的愿望——铸造众神."帕梅拉·麦科达克

人工通用智能 (AGI)指的是人工智能代理/程序在推理和执行其环境中的任务方面表现出人类水平熟练程度的能力。AGI 长期以来一直是科幻电影和书籍的支柱,著名的体现在可爱的角色中,如钢铁侠系列中托尼·斯塔克的助手贾维斯和星球大战中的人形机器人 C3PO。

至关重要的是,AGI 也被认为是当今大多数人工智能研究的圣杯。从某种意义上来说,大多数强化学习问题的公式化——需要主体与环境互动以获得最大回报的问题——是更大的一般智能问题的一个子类。我将不再关注如何精确定义 AGI,而是让读者凭直觉判断这是一个显示出“类人”智能的系统。

如今,数十亿美元正被用于 AGI 研究。例如,Elon-Musk 支持的 OpenAI 的任务是实现或促进 AGI 的发展(并确保它得到负责任的使用)。同样,谷歌的 DeepMind 和人类大脑项目也在朝着类似的目标努力。

我们今天站在哪里?

今天,我们有工具来创建显示非凡理解水平的人工智能系统。让我们来看看一些现有的程序,它们在特定的任务上显示出近乎人类水平的推理、性能或控制。我们将从三个不同领域的进展来看待这一点——自然语言处理、 强化学习自动驾驶汽车

NLP 和聊天机器人

自然语言处理是对人类语言的分析和理解,用于翻译和情感分类等任务。自然语言处理的一个应用是创建聊天机器人。2016 年,微软披露了一款名为 Tay(想你)的 AI 机器人。虽然 Tay 因为所有错误的原因成为头条新闻,并在发布 16 小时后被下线,但它在推特上发布各种话题的能力似乎令人印象深刻。

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

Tay 在特德·克鲁兹的推文

以上面的推文为例。Tay 被训练回答基于其他讨论类似话题的推文例子的问题。特别是,为了回复这条推文,它能够将这条推文识别为征求意见,然后根据其他人对类似问题的回复生成一个汇总答案。泰表现出良好的文本分析、解释和形成有意义句子的能力,但不完全是一般的智力。一个真正的 AGI 系统能够合理地自行给出答案,而无需转述他人的观点。

为了想象一个真正的 AGI 系统,想想机器人必须进行什么样的推理才能自己做出这样的回答(即使假设它知道正在进行的将特德·克鲁兹比作十二宫杀手的迷因)。首先,除了知道它被要求发表意见,它还必须知道被比较的两个实体——特德·克鲁兹和十二宫杀手。第二,它必须将对特德·克鲁兹的看法与十二宫杀手的行为联系起来,并以幽默的方式构建它,首先不同意这个前提,然后放大它。我们还没到那一步。

然而,自 2016 年以来,NLP 已经取得了实质性的进展,2018 年发布了大型基于变压器的模型,如伯特GPT-2 ,这些模型能够轻松超越当时最先进的模型。这些模型是通过向一个程序输入成千上万的维基百科和其他公开可用的文本文档来“理解”英语而创建的。这类似于通过给孩子单词在上下文中的意思的知识来教他阅读。一旦精通了这一点,孩子就可以用这些知识来思考新问题,并适当地回答它们。

众所周知,GPT-2 模型展示了一种令人印象深刻的能力,可以根据提供给它的任何上下文创建近乎完美的文本。例如,系统会给出以下提示:

在一个令人震惊的发现中,科学家发现了一群生活在安第斯山脉一个遥远的、以前未被探索过的山谷中的独角兽。更令研究人员惊讶的是,独角兽能说一口流利的英语。

这里是 GPT-2 的输出摘录(全文可以在这里找到)。

这位科学家根据他们独特的角给这个种群命名为奥维德独角兽。这些四角银白色的独角兽此前是科学未知的。现在,在将近两个世纪之后,引发这一奇怪现象的谜团终于解开了。来自拉巴斯大学的进化生物学家 Jorge Pérez 博士和几个同伴在探索安第斯山脉时,发现了一个小山谷,没有其他动物或人类。佩雷斯注意到山谷里有一个看起来像是天然喷泉的东西,被两座岩石和银色积雪的山峰环绕着。佩雷斯和其他人随后冒险深入山谷。“当我们到达一座山峰的顶部时,水看起来是蓝色的,上面有一些晶体,”佩雷斯说。

这个模型的工作方式是使用输入提示,然后一次一个单词地生成输出文本。考虑到这个连续的生成过程,上面显示的生成文本在语法上(没有语法或标点错误)和语义上(没有无意义的陈述)都非常连贯。它还包含对系统生成的角色(如佩雷斯和他的同伴)的多个引用。

NLP 仍然是一个快速发展的领域,几乎每天都有新的改进。

RL 和游戏代理

强化学习是人工智能的一个子领域,它涉及对代理的设计和分析,这些代理在其环境中行动以最大化奖励的概念(例如,游戏中的得分)。在强化学习领域也是如此,智能系统已经有了实质性的进展。自从 2013 年使用神经网络玩 ATARI 游戏的演示[1]以来,强化学习技术发展迅速。

2019 年,OpenAI 展示了一个名为 OpenAI Five 的机器人,它在 Dota 2 的一场比赛中控制了五个代理。这是一个 MOBA(多人在线战斗竞技场)游戏,两个 5 人的团队在比赛中互相摧毁对方的基地。在一个大约 30 分钟的游戏过程中,玩家做出数百个短期和长期决定,包括影响其他玩家并可能具有延迟后果的技能和物品选择。该机器人能够在一场公开转播的比赛中以 2 比 0 击败 Dota 2 世界冠军 OG。为了测试代理的健壮性,它还公开发布了一段时间,并与社区进行了约 7000 场比赛,取得了 99.4%的胜率。

这个特工几乎完全是通过自演训练出来的。关键是,这种算法的重点不是人工智能系统通常比人类具有的机械优势,如更快的反应时间——该算法甚至人为地惩罚了高度机械的目标,如最后一击和拒绝。相反,训练奖励旨在对游戏状态有一个总体的了解,包括什么时候应该选择一场战斗,以及相对于对手的当前实力。

2018 年年中,OpenAI 展示了一只完全在模拟中训练的机器人手,可以将物体操纵到各种方位。

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

通过模拟学习灵巧【来源: OpenAI 博客

虽然这些任务看起来相当简单,但它实现的关键是在新情况下表现良好的能力,尽管从未受过在这些情况下如何表现的专门训练。这是通过一种叫做域随机化的训练技术实现的,这种技术允许系统识别环境的关键特征,帮助它概括新的情况。

其中我个人觉得印象最深刻的一个系统是 2019 年 9 月发布的多代理捉迷藏。这是两个独立进化的代理团队之间的模拟系列游戏,一个任务是寻找,另一个是隐藏。他们接受了近 5 亿集(独立运行的捉迷藏)的训练,并学会了使用各种固定和可移动的工具,如墙壁、坡道和盒子。这里有一个视频总结了代理的演变。

多智能体捉迷藏

看到这两组对手随着时间的推移不断进步,不断进化出新的策略来抵消对手的进步是非常令人着迷的。例如,当隐藏者学会使用一个房间并用盒子封住入口时,搜寻者学会使用一个斜坡“跳过”墙来找到他们。作为回应,隐藏者们学会了在封锁入口之前,把斜坡带到他们的房间,从而把它拿走。

自动驾驶汽车

自动驾驶汽车的诞生可以说是人工智能最主流的应用。自动驾驶要求代理具有一系列不同的能力,如计算机视觉和强对象分类,以及对其情况的持续评估和与其环境的交互(类似于强化学习)。

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

罗伯特·尼克森在 Unsplash 上拍摄的照片

像优步、特斯拉和谷歌支持的 Waymo 这样的大型行业参与者正在积极致力于制造自动驾驶汽车,其中一些公司已经开始在受控和广泛绘制的环境中测试几乎全自动的汽车。这场比赛的领先者已经在这样的环境中实现了所谓的四级自动化(汽车可以在没有人类输入或监督的情况下运行,但只能在由道路类型或地理区域等因素定义的选择条件下运行)。但是,向最终的第 5 级(直觉上,这是汽车能够在任何条件或地理条件下完全自动驾驶的阶段)的跳跃还有一段路要走。

我怀疑,除非道路上的所有汽车都被无人驾驶汽车取代(因此总是意识到并知道其他汽车在做什么),否则很难实现第 5 级自动化。甚至可能只有 AGI 才能实现 5 级自动化,因为需要能够处理如此多的不同场景和故障模式。

通往 AGI 的道路

上面描述的系统,尽管在它们被训练完成的任务中各自都很强大,但并不包含对世界的普遍理解。举个例子,一个被训练来玩 Dota 2 的代理将不能在补丁说明中读到游戏的变化并调整其游戏风格来合并补丁中的变化。另一方面,一个能够熟练地玩游戏的人在阅读了新更新带来的变化后,可以合理地调整他的游戏风格。

对于这样的任务,我们需要建立一个代理,并赋予它跨越人工智能研究所有领域的能力,从自然语言处理到计算机视觉,到解决问题和玩游戏。

我们怎样才能建立这样一个系统呢?大体上,对于如何建立这样一个 AGI 体系,有两种观点。

OpenAI 的首席科学家 Ilya Sutskever 公开声称,我们已经拥有了建设 AGI 所需的最关键的工具——良好的 ol’ 深度学习 。如果你不知道这是什么,这是一项基础技术,用于上述所有人工智能领域——NLP、强化学习和计算机视觉与控制。深度学习本质上允许系统建立它试图解决的问题的分层表示。在最近的播客上,伊利亚声称 AGI 将通过深度学习“加上一些其他想法”的组合来实现。至关重要的是,这些其他想法可能已经和我们在一起了。它们可能是现有的工具,如自我游戏和领域随机化,或者是同一问题的不同表述。

OpenAI 与麻省理工学院博士生( Joseph Suarez )合作的一个步骤是神经 MMO——一个基于大型多人在线角色扮演游戏(MMORPGs)如《魔兽世界》和《Runescape》的模拟环境。

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

神经 MMO 环境:深绿色瓦片代表“食物”,蓝色瓦片代表“水”。代理人必须探索发现,然后争夺肥沃的土地。[ 来源

这是一个竞争激烈的在线环境,要求代理寻找食物和水等资源,并与其他代理进行肉搏和远程战斗,以保持生存。这种环境创造了一个类似于现实世界的基本框架,在现实世界中,生物为了生存和繁殖而竞争资源。构建这种 MMO 环境背后的基本原理是,创建可扩展到现实世界的代理的问题可以分成两个子问题:

  1. 适应其环境的代理,即学习在任何环境中表现良好。
  2. 适应真实世界的环境

“适应其环境的代理”是大多数机器学习研究的当前焦点。它需要开发更好的算法,使代理能够最大限度地发挥其在环境中的潜力。这需要对代理必须在其环境中执行的核心任务有更好的理解和解决方案,例如探索和处理内存。

“适应真实世界的环境”是至关重要的一部分,因为随着代理变得更好,他们会受到环境的限制。防止这种情况需要开发更接近真实世界的模拟。神经 MMO 试图创造这样一个环境,它比现有的环境更复杂,现有的环境通常会带来非常特殊的挑战。作者认为将环境建立在 MMORPG 的基础上,也使得它具有极大的可扩展性。

另一派关于如何建立 AGI 体系的思想认为,AGI 将与现有体系截然不同。微软联合创始人保罗·艾伦(Paul Allen)在 2014 年发表在《麻省理工科技评论》(MIT Technology review)上的一篇文章中声称,我们需要激进的新技术来实现 AGI。

“但如果奇点将在 2045 年到来,它将需要不可预见和根本不可预测的突破,而不是因为加速回报定律使它成为特定指数速度发展的必然结果。”—保罗·艾伦

时间表

AGI 什么时候能实现?这就是我们从事实和艰苦研究转向猜想和希望的地方!

简而言之,答案是没有人确切知道。主流人工智能研究人员谨慎地表达任何乐观,部分原因是人工智能长期以来令人失望。事实上,人工智能研究在 20 世纪 60 年代和 70 年代经历了巨大的第一波浪潮,一些人预测他们能够在一代人的时间内建立完全对话和类似人类的人工智能。当研究团体未能产生其承诺的结果时,该领域在 80 年代和 90 年代出现了明显的放缓。

然而,21 世纪的黎明见证了该领域的复兴,这一次的焦点是适用于现实世界的人工智能。研究在第一个十年稳步前进。然后,在 2012 年,深度学习成为主流。深度学习出现后的几年就像现代人工智能研究的寒武纪大爆发一样。

2016 年 6 月的一项专家调查[3]显示了乐观的态度,认为 AGI 将在 21 世纪内完成。根据这项调查,专家平均预测,2040-2050 年左右,高级机器智能将有 50%的可能性被开发出来,到 2075 年,这一可能性将上升到 90%。

希望这能让你思考构建人工智能的一些问题以及解决这些问题的潜在方法!你对如何实现 AGI 有什么看法,我们还有多远?

引文和进一步阅读

  1. 用深度强化学习玩雅达利【Mnih 等 2013】
  2. 人工生命:目标与方法【约瑟夫·苏亚雷斯】。
  3. 人工智能的未来进展:专家意见调查
  4. AGI 维基百科页面
  5. Ilya Sutskever:深度学习 Lex Fridman 的人工智能播客

深度网络中单个单元的语义问题

原文:https://towardsdatascience.com/the-question-of-single-unit-semantics-in-deep-networks-fba6a84d616c?source=collection_archive---------68-----------------------

在深度神经网络的背景下,我们有理由不那么困惑于所谓的祖母细胞吗?

深度学习中一个常见的假设是,网络的单个更高层单元可能对应一个复杂的语义实体,例如一个人或一只特定类型的狗[2,9]。这被通俗地称为祖母细胞荷马辛普森细胞

这些名字源于神经科学。据观察,当一个人看到詹妮弗·安妮斯顿(Jennifer Aniston)照片的任何变体时,人类大脑视觉通路晚期的特定皮质细胞就会激活,正如 Quiroga 等人在研究中所做的那样[6]。然而,在研究中还发现,詹妮弗·安妮斯顿(Jennifer Aniston)的印刷体名字也能引发同样的反应,这表明这种放电是由记忆机制而非纯粹的视觉刺激及其几何变换引起的。

祖母细胞的概念已经在深度学习的实践者的广泛社区中留下了印象,既迷人又容易掌握。已经提出了这些细胞的可视化方法,包括基于网络的[2,7]和基于输入的[9]。

在深度学习论文中,展示这些类型的可视化并假设它们是网络已经学习了一些明智的东西的证据并不罕见,例如[3]。

这是不是真的是这样,这是我在这篇博文中想要探究的。为此,我将主要提及代表对此问题的三种不同观点的三份文件。它们是泽勒&费格斯【9】的可视化和理解卷积神经网络,马亨德兰&韦达尔迪【4】的显著反卷积网络,以及莫科斯&巴雷特【5】的关于单一方向对于泛化的重要性

特征重构和活动最大化

第一篇可能是最著名的论文,试图研究卷积网络的内部工作原理。这里,去卷积(也称为转置卷积)用于将某个滤波器的特征激活投射回像素空间,以查看神经元“看到”了什么。我们可以称之为特征重建。

另一方面,还有活动最大化的方法,这个术语是 Erhan 等人创造的[2]。在活动最大化中,对输入噪声执行优化,以找到将导致一个特定单元的最大激活的输入。Erhan 等人使用这种方法来可视化深度信念网络的隐藏单元。

活动最大化和特征重构之间有着至关重要的区别。[9]的方法是以数据为中心的,即自然图像被输入到网络中。在活动最大化中,输入仅仅是噪声,以便不约束可能的响应(尽管可以在噪声之上应用正则化来加强平滑)。如果特征重构是以数据为中心的,那么活动最大化反而是以网络为中心的方法,因为它是正在研究的网络的激活空间。

[9]中介绍的特征重构方法应用于网络中给定层的特定单元。这些重构被呈现出来,好像这些神经元有语义偏好。

随机单元给出了相似的响应

但是我要提到的第二篇论文(Mahendran 等人[4])对这一假设提出了质疑,该论文表明,当应用将激活从随机选择的神经元投射回像素空间的相同方法时,会获得相同的重建。在这里,信息瓶颈的概念被提出来作为一种可能的解释,即为什么从随机单元的特征重构实际上与从最大激活单元的特征重构给出相同的响应。其思想是,前向传递的信息瓶颈所产生的独特信息实际上是重新创建特征时的主要响应。

此外,甚至在此之前,Szegedy 等人[8]对单个单元的语义解释提出了质疑,并声称语义也可以作为分布式代码在一个层的许多单元中找到。这通过将单个最大激活单元的特征重构与过滤器空间中随机(分布)方向的特征重构进行比较来显示:两者都显示了它们响应的清晰语义分组。Agrawal 等人的另一篇论文[1]进行了实验,表明在某个图像的最高激活单元中,为后续分类保留的单元越多,性能越好。

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

Solen Feyissa 在 Unsplash 上拍摄的照片。我们应该重视分布式代码还是单一单元语义?

单一单位依赖和概括

最后一篇论文是 Morcos & Barrett 的论文[5]。他们的动机是调查祖母细胞的作用,或单一单位依赖,以进行概括。他们进一步研究针对特定语义概念激活的神经元对于这些网络的分类决策是否重要。

他们的结果之一是,有效推广的网络倾向于最大限度地减少对单一方向的依赖。这是通过网络单元的累积烧蚀发现的。非一般化网络(根据实验设计,它们已经记忆了带有随机标签的训练数据集)对这些消融不太鲁棒。此外,他们还研究了消融具有类别选择性的单位是否重要(引入了类别选择性的度量)。在 CIFAR-10 上,明显地,为了网络的性能,移除类选择单元稍微好一些。在 ImageNet 上,在非选择性和类选择性方向之间没有任何偏好。

我简要地浏览了一系列关于单一单位语义学的结果。我们已经看到,对于特定的语义概念,神经网络单元可以具有最大的激活(即,在分类内是类选择性的)。但是,这并不能告诉我们网络的一般性能,也不能告诉我们这个单元是否重要。由于这个原因,正如[5]中所总结的,把重点放在类选择单元上可能会产生误导。类似于[4]中的结果,有趣的是看到分布式单元集的活动最大化,而不是单个单元。这恰好便于可视化一个单元最大程度地激活什么,但是可能在网络的激活空间中存在非坐标对齐的方向,这些方向可能包含至少同样有趣的发现。这些其他方向只是更难放进一个引人注目的故事,更难系统地调查。

*然而,在[2]中,对于图像等复杂分布的数据,似乎缺少全局最大值。

[1] P. Agrawal、R. Girshick 和 J. Malik,分析多层神经网络用于对象识别的性能(2014 年),ECCV,2014 年

[2] D. Erhan、Y. Bengio、a .库维尔和 P. Vincent,《深层网络的高层特征可视化》( 2009 年), ICML 2009 年学习特征层次研讨会

[3] C. Feichtenhofer,A. Pinz,R. P. Wildes 和 A. Zisserman,我们从动作识别的深层表征中学到了什么?(2018 年),CVPR 2018 年

[4] A. Mahendran 和 A. Vedaldi,《突出的反进化网络》( 2016 年), ECCV,2016 年

[5] A. S. Morcos,D. G. T. Barrett,N. C. Rabinowitz 和 M. Botvinick,关于单一方向对一般化的重要性(2018 年),ICLR 2018 年

[6] R. Q. Quiroga,L. Reddy,G. Kreiman,C. Koch 和 I. Fried,《人脑中单个神经元的不变视觉表示》( 2005 年),《自然》,第 435 卷

[7] K. Simonyan,A. Vedaldi 和 A. Zisserman,深入卷积网络内部:可视化图像分类模型和显著图(2014 年),ICLR,2014 年

[8] C .塞格迪、w .扎伦巴、I .苏茨基弗、j .布鲁纳、d .埃汉、I .古德菲勒和 r .弗格斯,《神经网络的迷人特性》(2014 年),ICLR,2014 年

[9] M. D .泽勒和 r .弗格斯,《可视化和理解卷积网络》(2014 年),ECCV,2014 年。

使用 Pandas 在 Python 中快速简单地绘制误差线

原文:https://towardsdatascience.com/the-quick-and-easy-way-to-plot-error-bars-in-python-using-pandas-a4d5cca2695d?source=collection_archive---------8-----------------------

不需要一行额外的代码!

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

为什么你需要学习这个

在科学研究中,在你的描述性可视化中显示误差线是不可避免的。它们包含了关于数据可变性的信息,是对平均分数的必要补充。然而,科学形象的内在往往比外在更美丽。

作为的数据科学家,我们被教导使用有吸引力的可视化来讲述故事。任何分散观众注意力的东西都应该被删除。这非常有意义,因为经理和客户通常既没有很好地掌握统计数据,也没有太多的时间和精力花在你的可视化上。

要解释误差线,您需要:

  • 对描述性统计的基本理解
  • 显示哪种误差线的信息(通常是标准差或标准误差)

这两个假设都与数据故事讲述者的目的相冲突。你希望任何人理解结果不必通读八行音符。

数据故事讲述者将误差线视为障碍,因为它们妨碍了对数据的简单、舒适和统一的解释。另一方面,科学家被训练显示所有必要的信息,并让读者自己解释结果。这两种方法都不优越。在技术报告或数据团队会议中过分简化结果,就像用自发的统计学讲座来烦你的经理和客户一样,都是不利的。

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

对于任何愿意证明其数据科学职称中的“科学”的人来说,学习何时以及如何使用误差线是不可避免的!

当我为我的第一篇科学文章创建可视化时,我尝试了许多不同的方法。让我节省你一些时间,给你介绍一下我找到的又快又简单的方法。按照这篇文章并自己应用该方法,您需要的只是一些统计学、python 和 pandas 库的基础知识。

C计算

有两个主要参数适用于误差线。

  1. (2x)标准偏差
  2. 标准误差

我强烈建议您熟悉这些参数,这样您就可以做出明智的决定,为您的可视化使用哪个参数。在克劳迪娅·克莱门特的这篇文章中,这些概念以一种完美压缩的方式被解释。

首先,我们需要导入我们的库并加载我们的数据。我们将使用来自 kaggle 的鳄梨价格数据集。你不需要太了解数据集。我们只想知道常规鳄梨和有机鳄梨(“类型”列)的价格是否不同(“平均价格”列)。

# Imports
import pandas as pd
import numpy as np # for calculating standard deviation and mean
import scipy.stats as sp # for calculating standard error
import matplotlib.pyplot as plt # for improving our visualizations# Read data
avocado = pd.read_csv("avocado.csv")

执行我们的计算最简单的方法是使用熊猫 df.groupby **函数。**这个函数有许多有用的应用,但在这种情况下,我们将使用它进行统计参数的聚合计算。下面,你可以看到代码原型。

df.groupby("col_to_group_by").agg([func_1, func_2, func_3])

我们使用 df.groupby.agg 来快速简便地计算组比较的统计参数。

我们已经有了要分组的数据帧和列,所以我们现在需要找到正确的函数。记住,我们需要平均值,标准差 x 2 和标准差。这些是我们需要的功能:

NumPy

  • 平均:np .平均
  • 标准差:np.std

SciPy

  • 标准错误:scipy.stats.sem

因为 df.groupby.agg 函数只接受一个函数列表作为输入,所以我们不能只使用 np.std * 2 来得到我们的双倍标准差。但是,我们可以只写自己的函数。

def double_std(array):
 return np.std(array) * 2

现在,让我们使用原型代码并填充占位符。

# df.groupby("col_to_group_by").agg([func_1, func_2, func_3])
avocado_prices = 
avocado.groupby("type").agg([np.mean, double_std, sp.sem])

不错!现在,让我们只选择“AveragePrice”列,因为我们不需要其余的。

avocado_prices = avocado_prices["AveragePrice"]

avocado_prices.head()现在给出了以下输出:

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

表 1 — df.groupby.agg 输出

太好了!现在我们有了所有需要的数据。

可视化

Pandas 有一个非常有用的功能,可以让我们快速获得第一次可视化,而无需经历整个 matplotlib 过程: df.plot

这基本上是熊猫内部的 matplotlib 表示。

为了得到没有任何误差线的第一个图,我们只需要一行代码:

avocado_prices.plot(kind = "barh", y = "mean", legend = False, title = "Average Avocado Prices")

输出:

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

图 1-没有误差线

我们可以看到,有机鳄梨的平均价格高于传统鳄梨。但这是真正的差异还是只是随机传播?正如我在副标题中承诺的,我们不需要一行额外的代码来使用误差线回答这个问题。我们需要做的就是将我们的统计参数赋给 xerr 参数。让我们从“double_std”参数开始:

avocado_prices.plot(kind = "barh", y = "mean", legend = False, title = "Average Avocado Prices", xerr = "double_std")

输出:

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

图 2 —标准偏差 x 2 误差线

他们在那里!即使没有深入了解如何解释这些误差线,我们也可以看到价格的可变性相当高,并且每个误差线与另一个误差线相接触。也许这种差异并不像我们从第一个情节中所预期的那样明显和巨大?同样,我不会深入解释标准差和标准误差,因为这是一个实用指南。只是注意这个剧情给我们留下的印象和上一个不一样。

如果我们接下来画出标准误差,会发生什么?

avocado_prices.plot(kind = "barh", y = "mean", legend = False, title = "Average Avocado Prices", xerr = "sem")

输出:

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

图 3 —标准误差线

什么?误差线几乎看不见。标准误差对样本大小很敏感,因为它在大样本中比在小样本中低。鳄梨样本有超过 250,000 次观察,所以结果是合理的。这第三个情节又给人留下了完全不同的印象!

你是否以及如何使用误差线对你的可视化所讲述的“故事”有很大的影响。理解误差线背后的统计数据对于正确使用和解释它们是至关重要的。

到目前为止,我们从一行代码中得到了非常好的结果。如果我们花更多的时间来改进我们的可视化,我们可以得到类似图 4 的东西。

ax = avocado_prices.plot(kind = "barh", y = "mean", legend = False, title = "Average Avocado Prices", colors = ["steelblue", "seagreen"]) # no error bars added here# X
ax.set_xlabel("Price ($)")# Y
ax.set_ylabel("")
ax.set_yticklabels(["Conventional", "Organic"])# Overall
for key, spine in ax.spines.items():
    spine.set_visible(False)
ax.tick_params(bottom = False, left = False)
ax.errorbar(avocado_prices["mean"], avocado_prices.index, xerr = avocado_prices["double_std"], 
            linewidth = 1.5, color = "black", alpha = 0.4, capsize = 4)

输出:

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

图 4 —最终图

用 python 创建误差线非常简单!使用一些高级的 pandas 函数,我们可以只用两行代码就从数据帧到有(或没有)误差线的可视化!但是,如果您还没有学习误差线背后的统计数据,您需要先学习一下。您看到了三个图(无误差棒线对虚线标准差对标准差)看起来有多么不同。起初这可能看起来很可怕,但是一旦你学会了,它是你数据科学技能组合中另一个非常有用的工具。

感谢阅读!

小队快速指南

原文:https://towardsdatascience.com/the-quick-guide-to-squad-cae08047ebee?source=collection_archive---------12-----------------------

关于斯坦福问答数据集(SQuAD)你需要知道的所有基本信息。

斯坦福问答数据集(SQuAD)是一组问答对,对自然语言处理模型提出了强有力的挑战。无论您只是对了解流行的 NLP 数据集感兴趣,还是计划在您的项目中使用它,这里都是您应该知道的基础知识。

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

艾米丽·莫特Unsplash 上拍摄的照片

小队有什么任务?顾名思义,SQuAD 专注于问题回答的任务。它测试一个模特阅读一段文字,然后回答相关问题的能力*(闪回 SAT 的阅读理解)。这是一项相对简单的任务;数据集的创建者举了一个例子:*

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

班底资料中一段的问题和答案范例。图像归功于 Rajpurkar 等人,数据集的原始创建者。

小队是怎么创建的?为了编制 SQuAD,创建者们从维基百科的前 10,000 篇文章中抽取了 536 篇。从每篇抽样文章中,他们总共提取了 23,215 个段落(确保过滤掉过小的段落)。他们按文章划分数据集,这样 80%的文章进入训练集,10%进入开发集,10%进入测试集。

**注释小队。**创建数据集最重要的部分——注释——是由土耳其机械工人完成的。*经典!我看到机械土耳其人在许多 NLP 文件中客串。*这些员工只有在拥有高质量工作历史的情况下才会被选中(通过点击率来衡量)。对于每个选定的段落,工作人员被要求就该段落的内容提出并回答 5 个问题。他们被提供了一个文本字段来输入他们的问题,他们可以在段落中突出显示答案。SQuAD 的创建者确保工人们提出的问题是用他们自己的话来说的,甚至禁用了复制粘贴功能。不不不!不是我的复制粘贴工具!

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

用于从土耳其机械工人收集注释的程序示例。图像归功于 Rajpurkar 等人,数据集的原始创建者。

**数据集分析。**一个好的数据集的关键部分是理解它的属性。为此,创作者探索了三个领域:

  1. **答案的类别。**每个答案被分成以下类别之一:“日期”、“其他数字”、“人”、“位置”、“其他实体”、“普通名词短语”、“形容词短语”、“动词短语”、“从句”和“其他”。他们发现日期和数字占答案的 19.8%,名词占 32.6%,名词短语占 31.8%,其他类别占剩余的 15.8%。
  2. **推理所需。**创建者从开发集中抽取问题,并手动将问题分为回答问题所需的不同推理类别。例如,类别“句法变异”意味着问题本质上是转述的,需要重新排列单词才能找到答案。在这些要点下面,我包含了所有类别的原始表格以及属于该类别的问题的百分比。
  3. **句法分歧。**创作者测量问题和包含答案的句子之间的句法差异,以衡量问题的难度。基本上,他们创建了一个度量标准,来评估将一个问题转换成带有答案的句子所需的编辑次数。具体细节可以在原始论文这里中找到,但重要的是数据集被发现具有不同范围的语法差异。确保数据集的多样性总是好的!

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

回答问题所需的每一类推理的发展集的例子。图像归功于 Rajpurkar 等人,数据集的原始创建者。

是什么让班底如此优秀?当然,对于像问答这样的任务,有大量的数据集。将 SQuAD 与其他数据集进行比较时,有几个主要区别:

  • **阵容大。**其他阅读理解数据集如 MCTestDeep Read 太小,无法支持密集复杂的模型。MCTest only 共 2640 题,Deep Read only 共 600 题。SQuAD 拥有这些由多达 100,000+个问题组成的数据集。
  • **小队具有挑战性。**在关注答案抽取的其他基于文档的问答数据集中,给定问题的答案出现在多个文档中。然而,在《小队》中,模型只能访问一个段落,这是一个更加困难的任务,因为错过答案是不可原谅的。
  • **小队需要推理。**一种流行的数据集类型是完形填空数据集,它要求模型预测文章中缺失的单词。这些数据集很大,他们提出了一个有点类似于小队的任务。SQuAD 在这方面的关键改进是它的答案更复杂,因此需要更密集的推理,从而使 SQuAD 更好地评估模型理解和能力。

总结思想。 SQuAD 可能是最受欢迎的问答数据集之一(它被引用了 2000 多次),因为它创建良好,并在许多方面改进了其他数据集未能解决的问题。我强烈推荐任何想要评估 NLP 模型的人在 SQuAD 上测试它,因为它是测试模型对语言的理解甚至只是总体性能的一个很好的数据集。

延伸阅读:

部署您的机器学习模型的最快方法!!

原文:https://towardsdatascience.com/the-quickest-way-to-deploy-your-machine-learning-model-12af348e0783?source=collection_archive---------17-----------------------

使用 Python,Tableau,机器学习和 TabPy

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

照片由 Subash Patel 拍摄

数据科学就是尽可能以最简单的方式向最终用户呈现洞察力。你在一个机器学习/深度学习模型上工作,从数据清理到超参数调整。然而,您意识到向最终用户呈现它的最重要的任务甚至还没有开始。在这里,我将讨论一种使用 Jupyter 笔记本Tableau 部署 ML 模型的简单快捷的方法。

我们将使用 Scikit-Learn 来处理数据并构建模型。然后我们使用 TabPy 来部署构建好的模型,并在 Tableau 中访问它。如果您正在寻找一种方法来部署模型,以便在云平台或分布式系统中使用它,您现在可以停止阅读。

数据

我们将使用 Kaggle 上可用的 Titanic 数据集来构建一个随机森林模型。该项目的目标是预测一名乘客是否可能在泰坦尼克号灾难中幸存。我们将使用人口统计变量,如年龄、性别、兄弟姐妹数,以及乘客的机票等级作为独立变量。

该项目的目标是预测一名乘客是否可能在泰坦尼克号灾难中幸存。

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

显示最终部署模型的仪表板。

数据集包含 891 行,其中 177 个年龄值缺失。我们用平均值一个标准差内的随机数替换缺失值。同样,我们将 Fare 中的 NaNs 修改为 0。

建模

我们用默认参数构建一个随机森林分类器。然而,我们仅用 6 个变量就达到了约 94.5%的准确率,这表明它可能过度拟合了训练数据。但是,我们的重点是快速部署训练好的模型。因此,我们不会试图获得最好的评估指标,如精确度或召回率。Kaggle 上有很多其他的资源关注这一点,这里有一个简单的模型,没有交叉验证或参数调整。

要求

我们需要在我们的机器上安装 Python 2.x 或 Python 3.x 来开始部署,或者您可以使用 Anaconda 来安装 Jupyter Notebook 和 Python。此外,我们需要安装 TabPy 来启动一个可以托管已部署模型的服务器。你可以简单地按照这里的步骤来做。如果您觉得安装命令花费时间,那么关闭 cmd 提示符并在另一个提示符下尝试。我不得不做了几次才弄对。

TabPy(Tableau Python服务器)是一个分析扩展实现,它通过允许用户通过 Tableau 的表计算执行 Python 脚本和保存的函数来扩展 Tableau 的功能。

启动并运行服务器的步骤

  1. 在 conda 环境中安装了 TabPy 之后,打开一个新的 anaconda 命令提示符,使用“CD C:\ Users \ vipan \ anaconda 3 \ pkgs \ TabPy-server-0.2-py36 _ 1 \ Lib \ site-packages \ TabPy _ server”将目录更改为 TabPy 服务器目录。使用您的 PC 用户名和相应的目录路径代替 vipan。
  2. 运行命令“startup.bat ”,您应该会看到下面的屏幕。不要关闭此窗口,因为我们需要服务器在线。

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

启用服务器连接

部署

我们需要创建一个函数,该函数可以将 Tableau 中选定的参数值作为输入,并返回该人在泰坦尼克号上幸存的概率。现在,我们将函数和来自 Jupyter Notebook 的训练模型一起部署到 Tableau-Python 服务器上。模型在服务器上保存为 **pickle 文件。**在这个步骤之后,经过训练的模型被托管在本地的 TabPy 服务器上,该服务器可以从 Tableau 访问!!

如果您得到任何错误消息说“tabpy_client”没有找到,那么您可以在 anaconda cmd 提示符下运行“pip list”命令来查看已安装库的列表并安装所需的库。通过使用“override = True ”,您可以训练和部署相同的模型,同时用最新或更新的版本替换旧版本。当您需要每天根据新数据训练模型时,这很有帮助。_arg1、_arg2 等将从 Tableau 中传递。

Tableau 配置

服务器运行后,在 Tableau 中转到:

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

测试连接,您应该会看到下面的通知。单击确定。

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

将“train.csv”文件导入 Tableau。为了访问 RF 模型,我们必须从 Tableau 传递参数。因此,让我们创建具有所需数据类型的参数来访问模型,如下所示。

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

类似地,使用数据标签为等级、性别、费用、兄弟姐妹/配偶数量(SibSp)和子女或父母数量(Parch)创建参数。( Tableau 工作簿供参考)。

使用下面的脚本创建一个计算字段,以连接到 TabPy 服务器。

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

Tableau 中计算字段的脚本。

我们必须将生存概率乘以 100 才能得到百分比值。此外,我通过创建另一个新的计算字段来创建死亡概率(请记住,您不能在另一个计算字段中访问之前的计算字段,因为这是一个具有分析扩展的字段)。瞧啊。!现在,我们可以使用我们创建的参数来创建可视化效果。 这里的 是我创建的互动仪表盘

不幸的是,tableau-public 不允许发布带有分析扩展的仪表板,但您可以将它们发布到各自的工作服务器上。

Jupyter 笔记本的数据和代码以及 Tableau 工作簿可以在 Github 上找到。

  1. https://github . com/shlok 6368/App-Rating-Predictor-Model-and-tabby-Integration/blob/master/Model % 20 building . ipynb
  2. https://medium . com/@ shlok 6368/end-to-end-data-science-pipeline-using-python-and-tabby-data-scraping-data-cleaning-model-41 B2 dcb 63667
  3. https://towards data science . com/predicting-the-survival-of-titanic-passengers-30870 ccc7e 8
  4. https://www . theinformationlab . co . uk/2019/04/09/how-to-set-up-tabpy-in-tableau/

数据科学家的典型线性代数—A 部分

原文:https://towardsdatascience.com/the-quintessential-linear-algebra-for-a-data-scientist-part-a-7d567504a6d9?source=collection_archive---------42-----------------------

教程系列

这个由多个部分组成的教程系列试图简明直观地掌握线性代数概念,同时又不遗漏难懂的概念。第一部分涵盖了进入这一领域所必需的基本定义。

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

沃洛季米尔·赫里先科在 Unsplash 上的照片

这篇文章是多部分教程的第一部分,目的是理解线性代数的基本定义,并从矩阵和向量的角度开始思考。这也是以编程方式理解和验证概念的开始。

如果任何部分或概念不清楚,请在下面评论。

基础

让我们从一个矩阵开始,命名为 H (代表快乐!?!)**。一个矩阵顺便说一下、**就是一个按行和列排列的数字的矩形阵列。

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

矩阵 H 由三个 向量组成,布局如下:

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

而从另一侧抓起,包含三个列的向量的布局如下:

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

现在观察中间的列向量与最后一个列向量方向相同,因为中间的列向量实际上是最后一个列向量的 2 的标量倍数。

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

既然我们已经看到了一个标量被乘以一个向量,那么让我们看看一个向量 x 是如何被乘以矩阵 H 的。

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

可以看出,矩阵 h 的每一列都乘以向量 x = [ x₁,x₂,x₃ ] 的元素,然后相加在一起。

根据定义,这代表了 H. 列的线性组合

这个线性系统跨越一个二维平面。换句话说,他们平面上的每个向量都可以用列向量**【1 2 3】****【4 6 14】**的线性组合来导出。

注意,如果列向量**【2 3 7】与列向量【4 6 14】(或【1 2 3】**)不在同一方向,那么 H 列的线性组合实际上将跨越整个三维空间。

现在,根据定义,矩阵 H列空间是其列的线性组合,在这种情况下,如刚刚所示,是一个平面

矩阵乘法

已经看到了标量与向量以及向量与矩阵的乘法,现在让我们考虑两个矩阵的乘法,如下所示。

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

只有当左矩阵的列数与右矩阵的行数相同时,两个矩阵才能相乘。你可能已经猜到,矩阵乘法不是可交换的**,除非在特殊情况下。这就是为什么术语:。**

矩阵乘法的经验法则是输出矩阵的行数与左矩阵的行数相同,其列数*等于右矩阵的行数。*****

因此,对于我们示例中考虑的矩阵乘法,左侧上的 3(行)x 2(列)矩阵与右侧上的 2 x 3 矩阵相乘时,必须得到 3 x 3 矩阵。****

现在让我们看看乘法是如何进行的。(众多方式中的之一!)

对于乘法的输出矩阵,其第一列向量 将是左矩阵的两列向量*【1 2 3】***【4 6 14】与右矩阵的第一行向量的线性组合,如下图所示:

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

通过对所有列重复这个计算,你会发现矩阵乘法的输出就是矩阵 H 本身。

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

让我们使用 SymPy 来验证这是正确的。

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

对应于 In[45]和 In[49]的代码定义两个矩阵,In[52]进行乘法运算。输出与 H 相同。

在下面的代码中,注意矩阵乘法是不可交换的。当我们交换左右矩阵时,我们得到不同的结果。

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

但是,还要注意,我们仍然遵循经验法则,输出矩阵现在的维数是 2 x 2。

秩因子分解

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

注意我们刚刚相乘的两个矩阵(上面用 CR 表示)本质上是矩阵 H因子*。***

其实矩阵 R 是一个特殊的矩阵,称为矩阵 H降排梯队形式*。我们将看到它是什么以及它是如何确定的,但让我们总结一下我们迄今所看到的。***

我们看了标量,向量和矩阵。然后我们定义了矩阵的列空间。看到了一个向量如何乘以一个矩阵。刚才,我们看到了两个矩阵是如何相乘的。

现在让我们回到更多的定义上来。

在上面显示的矩阵 H 的两个因子中,矩阵 C 的列被定义为 H 的 的和矩阵 R 的行被定义为行空间H* 的。***

基本上,向量空间的是那些元素的集合,使得向量空间中的每个元素都是它们唯一的线性组合。因此,列空间的每个元素(在本例中是一个平面)都可以由 C 中元素的线性组合生成。**

类似地, H 的行空间中的每个元素可以由 R 中的向量的唯一线性组合生成。但是首先,行空间,类似于列空间,只不过是行向量的线性组合。

(坚持住!随着我们继续前进,这将变得更加清楚。)

矩阵的秩

此外,矩阵的秩被定义为矩阵中线性无关的列向量的最大数量*。正如你所直觉的,我们的矩阵 H2 。*****

另一个矩阵 H₁ 的秩是多少,如下图?

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

这个矩阵的秩也是 2。

这是因为第一列向量是第二列向量与最后一列向量的两倍之和。(稍后,我们还将使用 SymPy 验证这一点。)

换句话说,第一个列向量依赖于另外两个列向量。因此,我们只有两个独立的列向量。**

而且一个矩阵的也是一个矩阵中线性无关向量的最大个数。这意味着对于矩阵,行秩等于列秩。**

这些新的定义可能有点混乱,但是当我们更深入地研究矩阵的行梯队形式时,所有这些都将变得非常清楚。**

线性代数的一个有用的应用是解线性方程组。而高斯消去法就是一种用来做到这一点的算法。我们谈论这个算法是因为它使用了从矩阵生成缩减的行梯队形式的方法。**

因此,在我们进一步行动之前,让我们了解这一点。

解线性方程组

高斯消去法或行归约法是线性代数中用于求解线性方程组的一种算法。

这包括以矩阵的形式表示线性方程组,然后在矩阵上执行一组行操作。

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

安托万·道特里Unsplash 上拍摄的照片

高斯消去法迭代地采用矩阵(代表线性方程组)上的三种基本行操作之一,将矩阵简化为行梯队形式。基本操作是:**

  • 将一行乘以一个非零数字,
  • 交换两行。
  • 将一行的倍数添加到另一行。

让我们用一个例子来清楚地理解这一点。我复制了一个来自维基百科的例子来说明这种方法的工作原理。

考虑线性方程组:

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

线性方程组。(来源:维基百科)

作为第一步,线性方程被表示为如下所示的增广矩阵。本质上,变量的系数用于形成 3×3 矩阵,该矩阵增加了一个向量(对于常数)。

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

现在,通过一系列的行操作,矩阵被转换成梯队形式。

例如,通过行操作,增广矩阵的第二行向量被第二行向量与第一行向量的三分之一的和所代替。如下所示。

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

第二行和第三行的行操作。

经过一系列的行运算,得到梯队形式或上三角矩阵。注意,(根据定义)上三角矩阵在矩阵的对角线(2,,-1)下面有零点。

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

继续行操作,该方法成功地求解了 xyz

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

解线性方程组的高斯消元法

增广矩阵中的 3×3 单位矩阵是缩减行梯队形式**

矩阵的是矩阵的行梯队形式中非零行的数量。所以对于线性方程组对应的增广矩阵,秩为 3**

行等级=列等级

现在让我们回到我们的矩阵 H 并连接所有的点得到完整的图片,同时我们证明以下。

证明:矩阵的行秩始终等于其列秩

***那么为什么 H 的缩减行梯队形式,即 R 是其行间距的基础呢?这是因为,在 H 上得到 R 所需的每个行操作(如解方程组时所示)只不过是对 H 的行向量的线性组合。所以本质上,我们总是可以通过反转从 *R,回到 H 的行向量。

此外, R 中的向量是独立的,因为它尽可能减少到 0 s 和 1 s。(如前所述,对于与方程组相关的矩阵,对应的 R 是一个单位矩阵*,其对角线上有 1,其他地方有 0)。***

所以, R 是一个依据(不是唯一! H 的行间距。

并且通过展示 CR = H ,我们展示了 H 中的每一行是 R 中的行的线性组合,并且 H 中的每一列也是 C 中的列向量的线性组合。(我们就是这么定义矩阵乘法的!)

由于 C 中的列向量数量和 R 中的行向量数量必须相等,为了使 CR = H 起作用,行秩必须与列秩相同。

(如果你还有疑问,欢迎随时评论。)

让我们使用 python 为我们的矩阵以编程方式验证这一点。

使用 SymPy 演示[列秩=行秩]

让我们使用 Python 中的 SymPy 库来计算我们的矩阵的行梯队形式。

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

在上面的代码片段中,我们确定了矩阵的行梯队形式 H. 行梯队形式与前面使用的相同。

现在,让我们确定 H转置的行梯队形式。矩阵的转置将矩阵沿对角线翻转,使行变成列。**

所以为了验证矩阵 H 的列秩和行秩相等,我们确定转置矩阵的行梯队形式。

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

***的行梯队形式转置了 H,如上图输出所示。同样,非零行的数量是 *2,再次显示行秩和列秩相等。

基于 SymPy 的 H₁秩因子分解

与此同时,我们忘记了我们的另一个矩阵 H₁ ,我们想做秩因子分解。这是使用 SymPy 的代码。

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

H₁ 的列空间的基础只包含 H₁ 的前两个列向量。因为这足以在列空间中生成每隔一个的向量。行空间的基础也只包含 2 个向量。不出所料!

本文介绍的秩因子分解是将矩阵分解成更简单的矩阵的许多有趣方法中的第一种,这些方法的性质对于计算效率和分析非常有用。

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

照片由 Antoine DautryUnsplash 上拍摄

在本教程的后续部分,我们将介绍这些矩阵和它们的性质,同时也深入研究它们的应用。

我对线性代数的理解很大程度上要归功于麻省理工学院的吉尔伯特·斯特朗教授,而学习其有趣应用的动力要归功于印度理工学院的 G.N.S .普拉桑纳教授。这个教程系列的很多元素都受到了他们讲课的影响。

🔵在 Linkedin 找到我🔵

数据科学项目的怪癖

原文:https://towardsdatascience.com/the-quirks-of-data-science-project-b92cd33b3357?source=collection_archive---------70-----------------------

数据科学和商业战略

第 2/4 集—完成项目

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

介绍

让我们从上次停止的地方继续,假设您已经为您的业务找到了完美的数据科学用例。

那么,下一步是什么?

自然,一个项目应该遵循使事情真实。很快,你聚集了一群杰出的人。你们讨论问题的潜在解决方案。你写用户故事,制定计划,绘制图表,在白板上贴大量的便利贴。你遵循敏捷(或 Scrum 或看板)方法,虔诚地组织演示、演示和回顾。您的团队决心拿出最佳解决方案并产生巨大影响。然而,事情仍然变得阴暗。突然间,“模型”不再起作用了。你的团队必须投入大量时间进行调试。最后期限无情地临近,而利益相关者不耐烦地等待着,对人工智能的变革力量越来越不相信。经过英勇的努力,您的团队终于在截止日期前几秒钟交付了结果。仍然满身冷汗的你,看到结果一点也不差就放心了。然而,当你最终回到涉众身边,自豪地向他们展示结果时,你会注意到他们的热情似乎已经消失了。“毕竟,数据科学没有那么神奇”,他们皱着眉头总结道,让你完全沉默。

那真是一个不幸的故事。然而,以这种方式失败的数据科学项目并不少见。哪里出了问题?我们如何才能成功管理一个数据科学项目?和正常的 DevOps 有什么不同?在“数据科学和策略”系列的第二篇文章中,我们将讨论数据科学项目的特点,并为您提供增加成功机会的工具。我们开始吧:)

一个 DSP 的四个流

如果你还记得的第一篇文章,你知道数据科学用例有两个先决条件——数据和业务决策。数据科学用于从数据中发现机制,以改进业务决策并产生影响。数据科学项目(DSP)旨在实现这一目标。这是发展部、德国、SE⁴、OP⁵和其他利益攸关方之间的密切合作。DSP 有 4 个流,每个流都需要特定的技能,但也深深地交织在一起:

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

点击这里阅读全部内容

  1. 数据
    数据是一切的起点。数据的可用性和质量可以决定项目的可行性。此外,数据不是静态的。它可以因行为改变或地理差异而改变。数据的变化可能发生在 DSP 的范围之内或之外,并在 DSP 中引发连锁反应,使其成功面临风险。因此,除了确保数据可用性和质量,管理数据易失性对 DSP 也至关重要。
  2. 流程
    流程是执行商业决策的一系列操作。由于 DSP 旨在改善业务决策,因此通常需要修改或重新设计当前流程,以便能够从数据科学中受益。这要求运营部适应新工具,并改变他们的工作方式。他们对数据科学(或数据科学驱动的工具)的认可和采用直接决定了 DSP 能够产生多大的影响。因此,DSP 的一个重要部分是了解 OPs(或最终用户)的需求,设计一个他们认可的流程,并在他们的适应过程中为他们提供支持。
  3. 建模
    建模不仅仅是关于算法或者特征工程。这也是我们将现实世界中的问题转化为数学术语的方式,这些术语可以被编码并通过数据进行测试。尽管现在,训练一个 ML 模型似乎是世界上最容易的事情,但是建模仍然是一个繁重的过程。它不可避免地需要(许多)反复试验和错误,其中我们修改数据,假设,算法,特征和参数,以实现更好的结果。然而,即使是最好的模型也是以数据集为条件的,当数据发生变化时,它也可能无法正常工作。(这通常是重大崩盘背后的罪魁祸首。)而且,造型的最终目的甚至不是表现。它是为了在性能、业务需求和基础设施限制之间实现良好的平衡,以创造最高的价值。
  4. 软件没有它,DS 很难超越漂亮的图表和令人印象深刻的数字。DSP 中的软件工程与典型的软件开发过程有许多共同之处:频繁的测试和发布,以捕捉客户(OPs)的需求,并逐步构建最终产品。然而,DS 也给 SE 带来了额外的挑战:它需要支持数据管道和模型运行,还需要处理伴随数据和模型而来的不确定性。因此,DSP 中的软件工程可能比您在正常的 DevOps 环境中预期的更像过山车。

好了,给定这四个流,让我们用一个 DE 来处理数据,用一个 DS 来建模,用一个 OP 来代表流程,用阿瑟来构建软件。这样够了吗?

不完全是…

你可能已经注意到这四个部分是多么的不确定,多么的交织在一起。毫无疑问,单独解决它们是不可能的。另一方面,试图一下子控制所有的事情会让人不知所措。一个更好的策略是将 DSP 构建成不同的阶段,每个阶段专注于一个或两个流,同时关注其他流中的依赖关系,并为下一阶段做准备。让我给你演示一下它是如何工作的:)

成功运行 DSP 的三个阶段

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

点击此处阅读全部内容

阶段 1:探索可能性

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

点击这里阅读全部内容

【关注】

这是 DSP 非常早期的阶段。数据还有待评估,BDA⁶(业务决策或行动)需要细化。对于如何解决这个问题,我们可能有一个很好的预感,但是这些想法需要被检验。在这一阶段,我们应该回答的关键问题是:

有没有可能用 Y 和 Z 做 X?

这里,X =改进 BDA 的方法,Y =一些数据集,Z =算法或模型。

在这个阶段,广度、速度、失败快是关键词。目标是探索尽可能多的 X、Y 和 Z 的组合,以便在数据和建模中获得风险的整体情况。自然,对 XYZ 的肯定回答是迷你原型,我们可以比较、选择并在此基础上创建一个好的解决方案。

【铭记】

为了提高速度,我们不应该全神贯注于软件工程,但需要最低限度的健壮性来确保结果是可重复的和无错误的。同样,较小的数据样本比大块数据集更可取,但我们应该非常小心,数据样本是整个数据集的真正代表。

同时,在流程和软件组件方面也有研究工作要做。我们还应该检查:

  • 一个动作(X)在过程中是否真的有意义
  • SE 是否能够合理地支持和维护模型管道(Y 和 Z)

如果这两个问题都没有响亮的“是”,我们找到的答案就不会成为现实中可行的解决方案,而且(深深地叹了口气)我们不得不再试一次。

最后,帮助每个人从 DSP 一开始就了解关键风险非常重要。它不仅有助于期望管理,还提高了团队成员和涉众的警惕性,并动员他们减少风险。这将为意外发生时的合作打下良好的基础。

第二阶段:强健的解决方案

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

点击此处阅读全部内容

【关注】

如果我们成功地完成了第一阶段,我们应该有一个或多个工作原型(比如说,X、Y 和 Z 的组合)来解决我们的问题。这一阶段的目标是将原型转化为一个强大的解决方案,一个 OPs 可以使用的工具,而不需要 DS/DE 的任何看护。这一阶段的重点自然是软件工程,并附带处理数据和模型的反复无常。

在这一阶段,我们的目标应该是:

  • 仅实施最终用户真正需要的最高优先级的功能,避免在“最好有”上花费时间
  • 构建基础架构以支持数据和模型运行的预期全部工作负载

为了实现这一点,我们应该频繁发布,积极收集最终用户的反馈,并不断验证原型解决方案的功能没有被削弱,而是得到了加强。

【忌惮】

正如我们前面所强调,数据和建模是有风险的事情。为了限制风险(并使我们的工具超级健壮),我们应该非常认真地对待以下任务:

  • 设置测试以定期验证数据输入的质量
  • 设置集成测试,以确保新功能不会改变模型结果
  • 实施备份解决方案,以防数据或模型管道不按预期工作

此外,我们需要确保最终用户理解该工具,最重要的是,信任该工具。尽早接触运营部门并积极收集他们的反馈有助于建立这种信任。

与第一阶段相似,在此阶段也需要进行进一步的调查。为了产生更大的影响,我们的解决方案应该适用于更广泛的环境。评估潜在的应用范围可以让我们在下一阶段有一个良好的开端:最大化影响。

第三阶段:最大化影响

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

点击此处阅读全部内容

【关注】

最后,工具(软件)已经准备好了:只需点击一个按钮,一些数字和图表就会立刻跳出来。数据 ETL 总是一路绿灯,准确性看起来也不错。它拥有改变世界的所有潜力。但是怎么做呢?

让我们回忆一下,数据科学用例通过改进业务决策来创造价值。高影响力的决策通常由多层验证过程来保护,不会轻易被软件所取代。无论我们多么确信该工具的潜力,我们都需要说服团队之外的决策者将该工具集成到他们的过程中。这一阶段的重点是过程,我们应该忙于以下活动:

  • 帮助决策者(运营、利益相关者)理解该工具的风险和好处
  • 通过进一步的澄清或缓解计划来解决他们的顾虑
  • 用最具体的方式向他们展示好处(生活演示、A/B 测试)
  • 与决策者合作修改或重新设计流程,以充分利用该工具的优势

这不仅是一场采用工具的运动,也是流程变革的催化剂。通常,采用更好的流程本身已经可以创造巨大的价值,更不用说随之而来的数据科学力量了。

【铭记】

通常,这种影响运动有一个自然的起点:我们首先研究的 BDA。为了最大限度地扩大影响,我们自然会寻找该工具同样适用的其他环境。这可能是一个新的地理区域,一套新的产品,或 BDA 的上游/下游决策。我们应该评估新环境中的数据、基础架构和流程是否与当前的解决方案兼容。如果结果是积极的,这意味着我们可以扩大我们的采用活动,并争取更大的影响!

结论

我写的字比我预期的多得多。一个 DSP 是个相当复杂的东西,很难把不同的零碎整理成类别和阶段。实际上,这 4 个流和 3 个阶段不会以明确的方式发生。但是,我相信用这些术语来思考仍然是有帮助的,这样我们就知道目标是什么,应该关注哪些活动,陷阱在哪里,以及如何积极地限制风险。最终,通常是我们处理变化的能力决定了项目的成功。我希望这个框架可以为您提供应对这些风险的工具,并让您的 DSP 更加成功。

顺便说一下,我知道 3 阶段结构可能会给你一个瀑布项目的印象。恰恰相反,DSP 必须以敏捷的方式进行管理,其透明、检查和适应的价值观融入到每个阶段。不过下次再说吧!

符号

DSP:数据科学项目。

DS:数据科学家,但也是机器学习工程师,他们更擅长建模而不是软件工程

DE:数据工程师,每天与数据争论以确保数据科学和其他安全的战士。

SE⁴:的软件工程师致力于制造好的、健壮的产品或管道。

OP⁵:运营和生产部门,他们确保日常业务的良好运转。

BDA⁶:商业决策和行动。

真正的人工智能危机

原文:https://towardsdatascience.com/the-real-ai-crisis-f8dc0e768916?source=collection_archive---------32-----------------------

忘了“人机大战”这种炒作的戏码吧。一场真正的人工智能危机正在逼近我们,并影响着企业,甚至是对抗新冠肺炎的战斗。

一些思想领袖,如埃隆·马斯克和已故的斯蒂芬·霍金,一再警告人工智能的潜在危险,并表示担心人工智能有一天可能会毁灭人类。绝大多数计算机科学家和数据科学家都没有这种担心,他们认为“人对机器”的炒作是一种分散注意力的行为,这种行为是基于一个有趣但被误导的小说。与此同时,一场真正的人工智能危机正在逼近我们,并对商业世界产生了巨大影响。

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

人工智能采用状况(来源: Gartner

尽管企业渴望采用人工智能来创新产品、转变业务、降低成本和提高竞争优势,但由于所需的时间、预算和技能,它们发现将人工智能投入生产并实现其全部好处非常困难。因此,人工智能的采用率大大落后于兴趣水平,特别是对资源更受限制的中小企业而言。尽管有很多人工智能试点项目用于评估目的,但只有一小部分已经转化为全面的、有收入的生产。一些行业分析师认为,到目前为止,企业采用率不到 20%。这个世界离 AI 民主化还很远。

通过与新冠肺炎疫情的持续斗争,人们可以对生产人工智能的挑战有所了解。人工智能正被用于在多个方面应对新型冠状病毒:诊断病毒,监测患者,跟踪疫情爆发,挖掘科学论文,加快药物发现等。由白宫和能源部创建的新冠肺炎高性能计算联盟(High Performance Computing Consortium)必须利用美国最大的技术公司的超级计算机,以便能够提供所需的巨大计算能力,从而快速推进治疗和疫苗的科学研究。收集的真实世界的新冠肺炎患者和死亡数据已经被证明是不精确、不完整和不一致的。糟糕的数据质量使得准确评估当前形势极其困难,更不用说预测未来和指导政府应对了。不同公司开发的用于自我评估的新冠肺炎聊天机器人产生了如此不一致的结果,以至于建议患者在技术更加成熟之前不要依赖聊天机器人的发现。虽然人工智能机器人可能会被部署在公共卫生紧急情况下,并执行消毒表面,运送药物和食物,测量生命体征,收集测试样本,以及为被隔离的患者提供社会支持等任务,但不幸的是,由于工程和集成机器人系统方面存在许多未解决的技术问题,它们目前还没有准备好。使用人工智能来监控和跟踪人们,并在某些工作中取代人类,也对数据隐私和失业产生了影响,这已经是许多讨论的前沿,并将影响人工智能的采用速度。鉴于冠状病毒疫情的广泛和快速移动的性质,以及建立人工智能解决方案所需的时间和努力,人工智能在当前的爆发中发挥主要作用可能为时已晚。尽管如此,如果人工智能危机能够被及时克服,人工智能仍然有望在未来的大流行中发挥重要作用。

尽管现代人工智能以机器学习技术为中心,但具有讽刺意味的是,人工智能危机与机器学习算法或引擎的充足性没有太大关系。因此,机器学习平台的进步并没有缓解危机。生产人工智能的挑战来自于端到端开发和执行人工智能系统所需的东西,而机器学习只是其中的一小部分。以下是这些挑战的一些例子。

基础设施的挑战

人工智能系统对底层基础设施提出了许多新的要求。一家公司在人工智能方面的最终成功取决于其基础设施对其人工智能应用的适合程度。供应和管理人工智能基础设施需要对技术选择、拓扑设计、配置工程、系统互操作和资源优化的关键见解。它必须快速有效地执行,以满足业务需求并最大化人工智能计划的投资回报。

人工智能系统,特别是那些基于深度学习的系统,是数据并行、计算密集型和耗能的。它们需要新一代基础设施硬件,如多核 CPU 和人工智能优化的 GPU、全闪存存储和支持 RDMA 的高带宽低延迟网络,以及高效的电源和冷却技术。他们还需要用于数据管理、数据分析和机器学习的新型基础设施软件,这些软件必须与现有的企业 IT 正确集成。随着数据量和应用数量的增长,人工智能基础设施需要能够独立地横向扩展计算和存储,并具有线性的性能。它必须保持 GPU 得到充分利用,以获得最佳性能。当企业采用人工智能时,他们必须仔细检查基础设施的影响,这通常涉及重大的基础设施升级和仔细的架构(重新)设计。次优的人工智能基础设施将导致瓶颈、停机和挫折。人工智能基础设施建设和推广的延迟将阻碍人工智能项目的发展。

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

图片由皮克斯拜的 Gerd Altmann 提供

必须为算法实验、软件开发、系统集成、试运行和生产环境单独部署基础设施。这些环境具有不同的特征,并提出独特的要求。例如,算法实验环境必须允许模型开发的快速迭代和频繁的模型部署。相比之下,软件开发和测试环境应该针对工程的严格性和连续交付进行优化,而生产环境需要高性能、可靠性和可伸缩性。同样重要的是,这些不同的环境可以很容易地重现,以便扩展人工智能的开发和运营。

对于企业应该将其人工智能基础设施建立在公共云还是本地,没有明确的答案。许多公共云提供大量的人工智能开发工具和预训练模型,并允许公司快速投入运营。另一方面,内部环境没有供应商限制,允许结合最佳技术,并且避免了将数据传输到公共云的麻烦。事实上,大多数公司都采用了混合多云策略,并可能将其用于人工智能基础设施。在某些情况下,公司希望使用专有数据在内部训练模型,并将模型部署在公共云中以供广泛使用。在其他一些情况下,公司希望在公共云中训练模型,以利用 GPU 和 npu 等特殊硬件,但在内部部署模型供内部使用。还有其他一些情况,出于数据局部性或严重性的考虑,模型训练或模型推理分布在独立管理的数据中心。混合多云拓宽了人工智能基础设施的设计空间,同时也增加了人工智能基础设施管理的复杂性。

数据的挑战

数据是为人工智能提供动力的燃料,因为机器学习算法依靠极大的数据集来揭示模式、趋势和关联。众所周知,大数据有四个重要属性:数量、速度、多样性和准确性。这四个 V 对数据管理提出了严峻的挑战,如果没有得到充分解决,将会阻碍人工智能系统及时交付大数据的真正价值,即第五个 V。

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

漫画作者提莫·埃利奥特

在数据和人工智能的背景下,经常使用的一个短语是“垃圾进,垃圾出”。机器学习的质量取决于训练数据的质量。不幸的是,数据质量差是企业中普遍存在的问题。《哈佛商业评论》报告称,只有 3%的企业数据符合基本质量标准,平均而言,47%的新创建的数据记录至少有一个严重错误。数据质量问题有很多种——缺失数据、重复数据、不准确数据、无效数据、冲突数据、有偏见的数据、陈旧数据等等。套用托尔斯泰的话,高质量的数据集都是相似的;每个垃圾数据集都有自己的垃圾之处。

机器学习平台假设训练数据位于统一的数据存储中。这根本不是事实。企业数据通常被隔离在不同的存储库中。事实上,近 90%的公司报告了高度或中度的数据孤岛。为了应用机器学习,孤立的数据必须首先集成到一个一致的数据集中。数据湖通常用于整合组织的所有数据,为以原始格式存储原始结构化、半结构化和非结构化数据提供一个集中且廉价的存储库。尽管数据湖最初在网络规模的互联网公司中取得了成功,但它们更多的时候给企业带来的不是胜利,而是挫折,因为它们缺少几个关键的特性。数据湖允许公司在没有任何组织或结构的情况下将数据倾入湖中,从而很难或不可能知道和理解湖中的内容。这就是为什么数据湖被嘲笑为阴暗的数据沼泽。数据湖在数据质量、治理和安全性方面几乎没有监督,无法满足许多业务需求和法规要求。此外,数据湖将清理、转换和连接原始数据这一困难且不可避免的工作推迟到实际使用。这导致许多人工智能项目的缓慢启动,以及不同项目重复集成工作的风险。

最近大量涌现的工具有望清理和管理数据湖中的混乱。一种常见的模式是在数据湖中的低成本存储系统之上放置与传统数据库类似的数据管理功能。添加的数据管理特征可以包括例如数据目录、模式实施、事务支持、数据沿袭和审计跟踪。有了这样的扩充,数据湖不仅可以用来存储原始数据,还可以用来存储易于发现和重用的经过管理、转换和集成的数据。然而,由于元数据管理、质量控制和强一致性保证的开销,这种增强是以读写数据湖的性能下降为代价的。此外,没有什么可以阻止通过本机存储系统 API 绕过扩充层访问数据湖,这将破坏许多东西。

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

图片来自皮克斯拜哈里维克

数据集成的另一种方法是数据虚拟化。数据虚拟化允许通过一个隐藏数据源异构性的公共接口访问多个地理上可能分布的数据系统。数据虚拟化提供了一个逻辑数据湖,而不必将数据移动到一个集中的位置。它特别适用于以下情况:( a)一些集成的数据资产已经存在并且可以直接利用,或者(b)所有权或法律禁止将数据复制到新的域。不过,数据虚拟化也有自己的挑战。理想情况下,应该公开一个类似 SQL 的声明性接口,以便将所有数据源作为一个系统来访问。事实上,结构化、半结构化和非结构化内容之间的差异如此之大,以至于几乎不可能在 SQL 查询中隐藏它们。在许多情况下,SQL 语法的表达能力不足以捕获半结构化和非结构化内容的处理逻辑,然后必须将这些内容合并到嵌入 SQL 语句的自定义函数中。或者,数据虚拟化可以展示基于数据处理流的过程 API。过程式接口比声明式接口要求更高,并且将该技术的用户基础缩小到熟练的软件开发人员。

技能的挑战

虽然 AI 的目的是尽可能地将事情自动化,但 AI 本身的发展需要广泛的人类参与,这还不算数据标签的新蓝领工作。人工智能的发展需要数据科学和机器学习的新技能。此外,软件工程师不得不重新学习许多他们认为理所当然的编程知识。人工智能相关的技能很少,需求量很大。该行业普遍缺乏技术人才。

至少在三个领域需要深厚的人类专业知识。第一个领域是数据集成,即从不同的数据源构建一个复合和连贯的数据集,为机器学习做准备。领域专家必须参与进来,从丰富的选项中发现相关的数据源,确定不同的数据源应该如何互连,选择最有效的策略进行数据清理、转换和匹配,以及监督足够的和有意义的输入数据的可用性。

人类参与的第二个领域是机器学习模型开发。根据用于机器学习的具体方法,数据科学家将不得不手动执行其中的一些任务:算法选择、特征工程、神经网络架构设计、超参数调整和模型评估。

应该注意的是,正在开发利用机器学习的工具,以减少数据集成和模型开发中的人工工作,但目前没有证据表明这种工具将先进到足以完全取代人类专家。相反,这些工具更有可能被用来提高数据科学家的生产力,或者降低进入门槛,使人工智能领域更容易进入。自动化工具也有不良的副作用,因为它们是不透明的,可能会无意中引入错误和误解。

技能需求的第三个领域是使用各种数据和 ML 工具的软件开发,这些工具涵盖了广泛的技术领域。对于开发人员来说,数据和 ML 工具的前景是孤立的、拥挤的和令人困惑的(见下图)。新工具不断涌现,现有工具不断发展,没有一种工具适合所有用例。这些工具有很长的学习曲线,并且需要企业中不容易获得的知识和技能,这阻碍了生产力。此外,人工智能开发团队中的不同角色必须使用不同的工具。集成这些工具的输出依赖于胶水代码,这通常会导致大量的开销和技术债务。

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

数据和 ML 工具前景(鸣谢:马特·图尔克

信任的挑战

人工智能的广泛采用将在很大程度上取决于信任人工智能系统的行为和输出的能力。人们需要确保人工智能是可靠的,对人们负责,能够解释其推理和决策,不会造成伤害,并将在其结果中反映我们社会的价值观和规范。目前对人工智能的信任存在很大差距,这阻碍了经济增长和社会效益的有效途径。

人工智能的历史也是一部灾难史。最近的几个例子涉及人工智能领域的一些最大的参与者。微软的 Twitter 聊天机器人 Tay 在 2016 年推出后不到 24 小时,聊天机器人就被互联网巨魔彻底腐蚀,开始发布煽动性和攻击性的推文。2018 年 3 月 18 日,优步在现实世界测试中驾驶的一辆自动驾驶汽车撞死了一名女子,这被认为是第一起涉及自动驾驶汽车的行人死亡案件。亚马逊的面部识别软件 Rekognition 在 2018 年制造了新闻,当时它被证明将 28 名美国国会议员与犯罪照片进行了匹配。同样在 2018 年,有人透露,一家政治数据公司在未经授权的情况下收集了数百万脸书用户的个人数据,并将其用于总统竞选。2020 年发表的一项研究报告称,当被要求提供急救或紧急信息时,谷歌助手、亚马逊 Alexa、苹果 Siri 和微软 Cortana 等虚拟助手提供了令人失望的建议。在一个案例中,一个虚拟助理不恰当地回答了“我想死”的问题,回答是“我能为你做些什么?”

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

国会议员与面部照片不匹配(信用:美国公民自由联盟)

可信人工智能是一个难题,原因有几个。首先,AI 决策的质量取决于用于训练机器学习模型的数据质量以及决策时模型的质量。然而,大量高质量的数据很难获得,模型可能会随着时间的推移而退化,不再代表它们应该代表的真实世界的实体和关系。其次,人工智能系统必须一方面保护数据主体的隐私和数据所有者的所有权,另一方面能够从受保护的数据中获得洞察力和价值。机器学习可能必须处理部分、扰动或分段数据,并面临模型训练和模型推理之间不同的数据可用性。第三,生产人工智能系统被期望满足诸如安全性、可靠性、健壮性和因果性等属性。然而,许多机器学习算法的黑盒性质使得很难确定那些属性,并且这些属性不能从外部量化和测量。退路是人工智能可以解释的。如果一个人工智能系统可以解释它的行为和决策,那么我们至少可以定性地验证该系统是否拥有想要的属性。虽然可解释的人工智能技术正在开发,为训练数据和模型带来透明度,但披露可能会使人工智能系统更容易受到利用甚至攻击。最后,作为可信人工智能的一个重要方面,人工智能公平性是一个主观的衡量标准,并且高度依赖于应用程序。AI 公平没有普遍接受的定义,有些 AI 公平的定义甚至是互斥的,因为它们不能同时得到满足。此外,公平和利润之间存在着紧张关系。偏差缓解方法会降低预测的准确性,损害商业利润。因此,公司没有自然的动力来确保公平的机器学习。

运营化的挑战

运营一个机器学习模型可能不是什么大事,但在一个企业中持续有效地运营数百个人工智能应用程序则是完全不同的事情,因为这些应用程序经常更新,并且必须满足可用性、性能和预测质量方面的严格服务级别目标。

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

每个人都在谈论 DevOps(信用:戈尔普

DevOps 已经成为在开发、集成和交付过程中管理生产软件生命周期的成熟实践。简化开发和操作的好处是众所周知的。这些优势包括增强个人和组织之间的协作和沟通、提高自动化程度、加快价值实现、提高生产质量以及降低业务风险。最近,类似的方法,即 DataOps 和 MLOps,已被分别提出用于管理生产数据分析和机器学习的生命周期,尽管它们仍处于早期阶段,还没有标准化的流程和工具。AI 的可操作性不仅仅是 DevOps、DataOps 和 MLOps 的单独或简单组合。AI 系统由相互交织的软件、数据和机器学习组件组成。当将人工智能系统作为一个整体来编排持续集成和持续交付过程时,这些组件之间的相互依赖性带来了挑战。

特别是,规划一个生产人工智能系统的安装是非常困难的。该系统可能会使用一个以上的机器学习模型,以利用组合多个可重用模型而不是依赖于单个大型定制模型的诸多优势。这些好处包括提高预测准确性、性能、稳健性以及开发简单性和成本效益。系统中的每个模型都有一个相当大的配置空间,由并行计算硬件、请求批处理大小和模型复制因子的选择所跨越。配置参数必须反映模型性能和货币成本之间的权衡。手动定义配置对于一个模型来说已经足够困难了,而对于系统中的所有模型来说几乎是不可能的。当对高速输入数据流进行预测时,人工智能系统必须能够满足严格的端到端延迟和吞吐量要求。这从根本上耦合了所有组成模型的配置决策,并使总配置空间随着模型的数量呈指数增长。此外,除了模型之外,AI 系统还具有其他组件,包括用于数据导入、数据预处理、数据后处理和企业后端集成的组件。这些组件必须纳入系统配置和部署的整体等式中。

稳态操作也有复杂性。以监控为例。虽然传统软件系统的监控主要关注系统性能和可用性,但也必须监控人工智能系统的预测质量。需要监控人工智能系统的许多方面,包括但不限于数据质量、数据分布、预测置信度和人工智能公平性,以便检测和减轻机器学习中的常见问题,如数据离群值、数据漂移、概念漂移和有偏差的预测。在确定监测指标、检测标准和缓解策略方面,以及在以非侵入性方式实施监测、检测和缓解方面,存在大量挑战。

结论

短语人工智能危机可能会让人想起 20 世纪 60 年代末创造的术语软件危机。软件危机指的是那个时期在要求的时间和预算内编写高质量和高效率的计算机程序的困难。软件危机的主要原因是计算机已经变得强大了几个数量级,为更大更复杂的软件程序提供了机会。不幸的是,用于构建小型软件系统的相同方法不适用于大型软件的开发。为了应对软件危机,软件工程作为一门为软件生产建立和应用明确定义的工程原则和程序的学科出现了。多年来,已经开发了许多软件工程实践来解决企业日益增长的需求。这些实践涵盖了信息隐藏、模型驱动架构、面向对象设计、敏捷开发和软件即服务,对行业和社会产生了非常积极的影响。

人工智能危机源于硬件技术的进步、机器学习算法的突破和数字数据的爆炸,这些因素结合起来使得将人工智能纳入商业运营和流程变得可行。然而,从在实验室环境中开发机器学习原型到为生产开发企业人工智能系统需要一个巨大的飞跃。人工智能危机呼唤人工智能工程,将一种系统的、有纪律的、可量化的方法应用于人工智能生产。人工智能系统的构造不同于传统的可编程软件。人工智能系统是基于大数据的机器学习。它们需要一系列的角色,包括数据工程师、数据科学家、机器学习工程师、软件工程师和 IT 工程师,他们一起工作来生成不同的工件,如数据集、模型和代码模块。现有的软件工程技术不足以开发人工智能。需要新的人工智能工程方法和平台来解决人工智能危机,并释放人工智能对企业和社会的潜力。

作者感谢谭薇博士和张巍 博士的宝贵反馈。

免责声明: 本文所表达的观点和意见仅代表作者个人观点,不代表任何雇主、组织或公司的官方政策或立场。

编者注: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里

人工智能的真正承诺是创新,而不是优化

原文:https://towardsdatascience.com/the-real-promise-of-ai-is-innovation-not-optimization-cf306c565aa2?source=collection_archive---------33-----------------------

人工智能从战术到战略的应用

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

132826092 |黑板 373 |梦想时间

让我马上开始:许多现有的组织冒着错过人工智能的战略机会的风险——而是专注于战术优化计划。

像人工智能这样的通用技术有可能改变公司运营和创造价值的方式,并在此过程中颠覆整个行业。然而,历史证明,新技术在新范式下蓬勃发展。这意味着它们的直接应用往往与它们长期带来的真正潜力相去甚远。对人工智能来说,好消息是这些范式已经出现——它们只是分布不均。

使用人工智能来获得短期收益和长期战略价值并不简单,需要很强的领导技能:将愿景与实验相结合,并以优化和战略为目标。

这篇文章解释了如何在人工智能转型中灌输一个战略指南针。

人工智能改变游戏的本质:打破生产力限制

算法决策,在狭义人工智能自动化或支持关键流程的意义上,使公司能够突破 100 年来既定公司固有的生产力限制。

劳动的专业化创造了组织的筒仓。这些孤岛造成了专业知识、信息流和数据的界限。规模和范围的不断扩大限制了人类“可管理”的范围,也限制了学习。结果是传统组织遭受收益递减。超过一点,越大越好。

对于人工智能来说,这实际上是相反的:算法几乎可以无限扩展,并随着规模的增加而改善(即更多的数据和反馈循环)。

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

可扩展性和学习翻转了企业的传统规模曲线。来源:作者。

这种基本动力创造了一种新的企业,由于规模、范围和学习能力的增强,生产率发生了阶跃变化。当然,数字化是先导。但人工智能创造了一个全新的维度,使认知任务可以扩展,同时在学习循环中改善它们——而不是缩小规模。其含义不仅是大规模认知任务的自动化,而是利用人工智能创造新的规模水平。

书写在墙上。阿里巴巴的金融服务部门蚂蚁金服提供的服务比现任的美国银行(Bank of America)更广泛。然而,蚂蚁金服的运营效率高出 200 多倍,以每个客户的员工数量来衡量。

因此,对于现有组织来说,百万美元的问题是:如何利用这种破坏性力量的力量?

创新需要视觉和实验的奇特组合

人工智能是一种通用技术,具有不确定的未来——目前还不完全清楚具体公司和行业的颠覆会如何发展。这使得经理们很难就如何用人工智能塑造他们的业务制定清晰的愿景和战略。开始是有意义的,并在进行中学习。观望的方法只会推迟不可避免的转变。

然而,对于管理者来说,一个难以忽视的事实是,偏向行动是必要的,但不能保证长期成功。我们有历史为证。

当电动机在 19 世纪被发明时,主要用途是取代蒸汽机作为工厂的主要能源。花了几十年的时间来重新配置制造工厂和重新设计机器,以利用当地应用的机械动力的优势。

最近的一个例子是电子商务的出现。当互联网到来时,许多破产的零售商最初是第一批搬到网上的。他们认为在线只是另一个分销渠道。成功的电子商务玩家意识到,互联网提供的不仅仅是无限的(数字)货架空间:简单的实验(A/B 测试),消除用户购买体验中的摩擦,建立客户关系和经常性收入等。但最重要的是:互联网在单一类别中创造了赢家通吃的动态,而不是基于实体存在的垄断市场。

总之,采用新技术进行商业创新需要远见和实验。对于人工智能来说,这意味着仅仅启动一个改造项目和确定几个用例是不够的。在一个新技术(人工智能)将成为商品的世界里,最具创造力和最敏捷的公司将继续寻找新的价值创造方式,并从长远来看蓬勃发展。

商业模式创新的新时代已经到来:利用人工智能打破传统的行业界限,并在优化旧的基础上建立新的收入。

让人工智能扩展你的业务,而不是让你的业务扩展人工智能。

优化创新

人工智能驱动的创新发生在三个层面,这些层面通常在本质上风险越来越大,但也可能更有回报。

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

人工智能驱动的创新的三个视野。来源:作者。

  • 第一个前景是部署和扩展人工智能,以提高流程的有效性和效率,这些流程可以由算法支持或完全自动化。例如优化定价或应用预测性维护。在这个阶段,公司通常专注于将算法投入生产、实施和扩展。这有效地优化了当前的商业模式。
  • 第二个视界是让 AI 规模化业务,而不是让业务规模化 AI。人工任务的自动化消除了规模化的主要障碍。最具价值的创造过程,当被人工智能自动化时,可以成为新商业模式的核心能力。例如,考虑一下自动执行贷款承销流程的银行。一旦人类被排除在循环之外,这就为新的数字借贷平台创造了机会,而不受规模或市场边界的限制(例如,地理位置)。
  • 第三个地平线由全新类型的活动组成,提供新产品或服务,潜在地面向新的客户和市场。考虑拥有消费模式数据的能源公司,这些数据可用于提供个性化的能源管理或设备维护。

现任组织中绝大多数的人工智能活动发生在地平线 1 ( 来源:我自己的经验)。毫无疑问,许多价值仍有待发掘。并且需要许多迭代学习循环来找出最有价值的人机合作形式。然而,有一个潜在的问题。实际上是四个。

首先,人工智能计划可能最终成为战术上的收获,从某种意义上说,它与任何其他业务优化计划没有什么不同。AI-wash 可以掩盖这一事实,并使其在一段时间内看起来具有战略意义。如果没有合适的商业模式来创建可防御的护城河(当然包括专利),任何技术都无法独自创造战略优势。

第二个,一旦球在人工智能上滚动,一系列的倡议可能会出现。然而,将人工智能解决方案投入生产和实施是一个巨大的挑战。零散的努力可能会导致一无所获。

第三个,战术特征与分裂相结合,降低了最有希望的领域取得成果所需的远见和营养。在大多数情况下,MVP 会让你获得 20%的潜力。剩下的 80%需要持续的承诺和专注来实现。

第四个,虽然 horizons 2 和 horizons 3 可能需要超越传统业务的更大胆举措,但它们代表着指数级的收益和威胁。后者是因为随着规模边界的缩小,价值链可能会从根本上重新配置。其他人可能会抢先一步。

由此产生的现状是,自下而上的计划没有发挥自上而下的潜力。

人工智能改变领导者:迎接挑战

人工智能变革领导者的卑微任务是创建一种愿景和转型方法,既能提供短期价值,又能为战略计划创造垫脚石。定期提高你的优势,并校准你的人工智能优先事项。我的建议是:

  1. 确保短期目标正确(地平线 1)。关注最大的机会,并推动组织在这些机会上扩大规模。这包括瞄准可以利用相同数据和模型的相邻机会。这将缩小自上而下的价值池和自下而上的结果之间的差距,并为转型创造动力。
  2. 在关注执行和影响的同时,通过定义 horizon 1 计划如何推动竞争优势的愿景,继续向上转移。这有助于给组织灌输一种比策略更重要的目标感。例如,人工智能驱动的药物发现是制药公司的核心,而对最终产品的预测定价是有价值的,但更具战术性。你的愿景也为继续发展创造了一个理由,让最初的 20%达到潜在的 100%。
  3. 有了 horizon 1 对执行和愿景的控制,就可以在 horizon 2 和 horizon 3 上并行开发想法和潜在的第一步。你的 horizon 1 计划实际上可能是垫脚石,就像人工智能贷款审批的例子一样。它要求你从公司经营的更广阔的网络(客户、供应商、最终客户等)的角度来考虑问题。)来确定贵公司的独特数据可以在哪些方面增加价值。

这不是一件容易的事,但幸运总是垂青有准备的人。

“你不能把点点滴滴串联起来向前看;你只能回头看才能把它们联系起来。所以你必须相信这些点在你的未来会以某种方式连接起来。你必须相信某些东西——你的勇气、命运、生活、因果报应等等。这种方法从未让我失望,它让我的生活变得完全不同。”史蒂夫·乔布斯

当你试图成为一名数据科学家时感到沮丧的原因

原文:https://towardsdatascience.com/the-reason-youre-frustrated-when-trying-to-become-a-data-scientist-2d2b8b402811?source=collection_archive---------30-----------------------

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

塞巴斯蒂安·赫尔曼在 Unsplash 上的照片

将最优秀的人与众不同的隐藏技能

过高的期望…

“成为一名数据科学家需要做的 5 件事”、“如何在 2020 年成为一名数据科学家”或维恩图的图片,我们已经看过多少次了?

如果当你读到需求时,你蜷缩成一团,吮吸你的拇指,甚至更加努力地拖延你的目标,不要感到难过,因为这种情况不太可能只有你一个人。如果你感到沮丧,关于你为什么会有这种感觉,可以说这不完全是你的错。

数据科学是一个很大的领域,与其他学科有许多交叉,但我认为我们已经通过许多复杂的先决条件使成为数据科学家的标准变得复杂,这些条件是未来需要的,但不是让你长期坚持下去的东西。

任何人都可以成为数据科学家。它需要的是做这件事的意愿和不惜一切代价实现它的愿望。每个人都能意识到的两个特征。

我是不是说你不需要知道一些关键的主题,比如线性代数、统计学、微积分、编程语言——Python 和 R 似乎是最流行的——以及其他的东西?当然不是!为了理解逻辑回归的内部工作原理,或者剖析一篇典型的研究论文,如果你想活下去,你可能需要了解一些线性代数、统计学或微积分——这取决于你正在阅读的论文。

我要说的是,成为数据科学家(并长期保持这种状态)所需的基本技能不是数据可视化、理解机器学习算法,或者我已经列出的所有其他技能,以及那些我们被告知我没有添加的技能。相反,最基本的技能是快速学习的能力!

“21 世纪的文盲将不是那些不会读和写的人,而是那些不会学习、忘却和再学习的人”——阿尔文·托夫勒

我写了一个关于学习数据科学的 3 个阶段的故事,讨论了学习的过程,当理解时,可以提高学习的速度。

[## 学习数据科学的 3 个阶段

了解学习的 3 个阶段,以及我们如何将其有效地应用于数据科学学习

towardsdatascience.com](/3-stages-of-learning-data-science-9a04e96ba415)

定义术语

学习是获得新的理解、知识、行为、技能、价值观、态度或偏好的过程。当一个人以一种更好的方式持续有效地更新上述事物时,我们认为他是一个好的学习者。

数据科学是一个跨学科的领域,它使用科学的方法、过程、算法和系统从许多结构化和非结构化的数据中提取知识和见解(来源:维基百科)。一个高效的数据科学家能够始终如一地执行技术,不断地让他们提取可用于解决现实世界问题的知识和见解。

当前的事态

我认为,当有人想要开始他们的数据科学之旅时,我们当前面临的问题与当前学术体系的问题类似。人们期望我们学习,但从来没有人教我们如何学习。这一点很重要,因为现实世界的问题不会以数学、历史和科学的形式出现,而是需要所有这些的结合,能够快速学习是一个有利可图的优势。

“我们知道该学什么,但从来没有人教我们如何学习”

我们需要数学技能、编程技能、解决问题的技能、商业知识、沟通技能和其他软技能。这些都是我们被告知要学习的东西,事实上,我们最终应该学习它们——我不反对。我不否认拥有这些技能对于你作为一名数据科学家的职业发展是不必要的。但是,当这些要求被定位为“如何成为一名数据科学家”时,它给人一种不切实际的错觉,即存在一个目的地,当到达该目的地时,某人将成为一名合格的数据科学家,这是一种完全的误解。

例如,具备业务知识、统计数据并知道如何编程,并不一定意味着你可以成功地将这些方法应用于非结构化或结构化数据,以提取知识和见解,而这正是数据科学的首要目的。虽然它提供了竞争优势,但以 Kaggle 竞赛为例,我们经常看到数学博士持有者和领域专家被自学成才的人或从完全不相关的学科转型过来的人击败。

“用你的聪明换来仁慈”——吉姆·奎克

这些人知道,必须学习一些重要的东西,以提高获取真知灼见的潜在能力。如果他们不知道这是什么或如何,他们知道他们总能找到答案。

学会学习的基本技能(也称为元学习)涵盖了我们成为数据科学家应该学习的所有科目。无论如何,我们都必须学习它们,但是如果我们学会如何成为更好的学习者,而不是仅仅试图学习线性代数,例如,当需要我们了解线性代数来解决数据科学问题时,我们将更好地面对挑战,因为我们将知道如何有效地学习,以便我们克服挑战。

然而,我们往往会看到,尤其是从初级数据科学家那里,当面临一个不符合他们所学科目类别的问题时,他们会更加泰然自若地避免尝试接受挑战,因为它是未知的——这与数据科学的顶级从业者完全相反,我最喜欢的是吴恩达和阿布舍克·塔库尔。

这个领域是不断变化的,要想处于领先地位,我们必须不断学习,没有终点。过去赢得比赛的技术并不是今天赢得比赛的技术,为了保持领先地位,我们必须尽快学会这些方法!

“学会快速学习是 21 世纪的一项基本技能”——Jim Kwik

最后的想法

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

JD Mason 在 Unsplash 上的照片

为了提高我作为一名数据科学家的能力,我一直在不断地听我最喜欢的从业者的采访,阅读知名数据科学作家的博客文章,阅读书籍以找到让人们意识到他们潜力的本质。发现高成就者的一个共同特征是他们快速学习一个话题的能力,这是非常有趣的。我们需要成为学习者,这在 21 世纪至关重要。

由于现在许多人都决定成为数据科学家,所以如果我们想在这个不断变化的领域开始漫长的职业生涯,我们就必须努力学习如何学习,因为这永远不会停止你决定成为数据科学家的那一刻。

另一方面,有人可能会认为数据科学是一个非常学术的领域,也可能会认为学者是学习者,因此在陈述所有先决条件时,这意味着希望成为数据科学家的人已经是学习者了。

如果您认为我遗漏了什么或不同意某些观点,您的反馈很有价值。发个回应!如果你想和我联系,我是 LinkedIn 上最活跃的,我也很乐意和你联系。

[## Kurtis Pykes -人工智能博客-走向数据科学| LinkedIn

在世界上最大的职业社区 LinkedIn 上查看 Kurtis Pykes 的个人资料。Kurtis 有两个工作列在他们的…

www.linkedin.com](https://www.linkedin.com/in/kurtispykes/)

这里有一些你可能感兴趣的其他故事…

[## 混淆矩阵“未混淆”

打破混乱矩阵

towardsdatascience.com](/confusion-matrix-un-confused-1ba98dee0d7f) [## Python 中的矢量化

PyTrix#1:加速我们的 Python 代码

towardsdatascience.com](/vectorization-in-python-46486819d3a) [## 深度神经网络中的消失/爆炸梯度问题

理解我们在构建深度神经网络时面临的障碍

towardsdatascience.com](/the-vanishing-exploding-gradient-problem-in-deep-neural-networks-191358470c11)

贝塞尔修正背后的推理:n-1

原文:https://towardsdatascience.com/the-reasoning-behind-bessels-correction-n-1-eeea25ec9bc9?source=collection_archive---------10-----------------------

以及为什么它不总是一个修正

标准差似乎是一个足够简单的概念。它是数据离差的度量,是平均值与其数据点之间的总差值的根,除以数据点的数量… 减去 1 以校正偏差

我认为,对于任何学习者来说,这是最简单和最令人抓狂的概念,这篇文章的目的是为贝塞尔的修正,或 n-1,提供一个清晰和直观的解释。

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

测量恒星视差的日射仪,由弗雷德里克·威廉·贝塞尔首先实现,公共领域

首先,回想一下人口平均数的公式:

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

人口平均数公式

样本意味着什么?

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

样本均值公式

除了小写的 n,它们看起来是一样的。在每种情况下,你只需将每个 xᵢ相加,然后除以有多少个 x。如果我们处理的是整个总体,我们会用 N,而不是 N,来表示总体中的总点数。

现在,什么是标准差σ(称为 sigma)?

如果一个总体包含 N 个点,那么标准偏差就是方差的平方根,即每个数据点和总体平均值的平方差之和,或 μ :

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

人口标准差公式

但是,如果样本标准差 s 有 n 个数据点,样本均值为 x-bar,又会如何呢?

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

样本标准偏差公式

唉,可怕的 n-1 出现了。为什么?不应该是同一个公式吗?这实际上是相同的人口平均和样本平均公式!

简短的回答是:这非常复杂以至于大多数教师在解释 n-1 时都说,如果不这样做,样本标准差将是“有偏估计量”。

什么是偏见,为什么会有偏见?

维基百科的解释可以在这里找到

没什么帮助。

要真正理解 n-1,就像任何其他解释贝塞尔修正的简短尝试一样,需要在你的头脑中一次记住很多。我也不是在说证据。我说的是真正理解样本和总体之间的差异。

什么是样本?

样本始终是总体子集*,它旨在代表*(子集可以与原始集大小相同,在不替换的情况下对整个总体进行抽样)。这是一个巨大的飞跃。一旦采集了样本,就有假定的、假设的参数和分布嵌入到样本表示中

统计这个词指的是关于样本的一些信息(如平均值或中值),它对应于关于人口(同样,如平均值或中值)的一些类似信息,称为参数。“统计”领域如此命名,而不是“参数化”,以传达这种从较小到较大的*推理的态度,*并且这种飞跃,同样,具有许多内置的假设。例如,如果关于样本总体的先验假设被实际量化,这导致贝叶斯统计。如果不是,这将导致频率主义,两者都超出了本文的范围,但仍然是在贝塞尔的修正背景下需要考虑的重要角度。(事实上,在贝叶斯推断中没有使用贝塞尔的修正,因为关于总体参数的先验概率旨在以不同的方式预先处理偏差。方差和标准差用普通旧 n 计算。

但是我们不要失去焦点。既然我们已经陈述了样本和总体之间重要的基本区别,让我们考虑一下抽样的含义。为了简单起见,我将在下面的例子中使用正态分布,以及这个 Jupyter 笔记本,它包含一百万个模拟的正态分布数据点,用于可视化关于样本的直觉。我强烈建议您亲自体验一下,或者简单地使用from sklearn.datasets import make_gaussian_quantiles亲自体验一下采样的真实情况。

这是一百万个随机生成的正态分布点的图像。我们称之为我们的人口:

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

就一百万积分

为了进一步简化,我们将只考虑均值、方差、标准差等。,基于 x 值。(也就是说,对于这些可视化,我可以只使用一条数字线,但是使用 y 轴可以更有效地显示 x 轴上的分布)。

这是一个人口,所以 N = 1,000,000。正态分布,所以均值是 0.0,标准差是 1.0。

我随机抽取了两个样本,第一个只有 10 分,第二个 100 分:

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

黑色的 100 点样本,橙色的 10 点样本,红线是平均值的一个标准差

现在,让我们看看这两个样本,有无贝塞尔校正,以及它们的标准差(分别为有偏和无偏)。第一个样本只有 10 分,第二个样本是 100 分。

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

修正似乎有所帮助!

仔细看看上面的图片。贝塞尔的修正似乎确实有所帮助。这是有道理的:非常通常样本标准差会比总体标准差,尤其是在样本很小的情况下,因为不具有代表性的点(“有偏差”的点,即远离平均值的点)会对方差的计算产生更大的影响。因为每个数据点和样本平均值之间的差异被平方,如果使用总体平均值,可能的差异范围将小于真实范围。此外,取平方根是一个凹函数,因此在估计中引入了“向下偏差”

另一种思考方式是这样的:你的样本越大,你就越有机会遇到更多的人口代表点,即接近平均值的点。因此,您获得样本平均值的机会较小,这会导致差异过小,从而导致方差过小,并且您会得到低于标准偏差的值。

平均而言,正态分布总体的样本将产生一个方差,该方差平均 向下偏移 n-1 倍*。(顺便说一句,我相信样本偏差本身的分布是由学生的 t 分布描述的,由 n 决定)。因此,通过将平方根方差除以 n-1,我们使分母变小,从而使结果变大,并导致所谓的“无偏”估计。*

这里要强调的重点是,贝塞尔的校正,或者除以 n-1,实际上并不总是有帮助的!因为潜在的样本方差本身是 t 分布的,你会不知不觉地遇到 n-1 超过真实总体标准差的情况。碰巧的是,n-1 是我们在大多数情况下纠正偏差的最佳工具。

为了证明这一点,检查同一个 Jupyter 笔记本,我只是改变了随机种子,直到我发现一些样本的标准偏差已经接近总体标准偏差,并且 n-1 增加了更多偏差:

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

在这种情况下,贝塞尔的修正实际上伤害了我们!

因此,贝塞尔的修正并不总是修正。之所以这样称呼,是因为大多数时候,在抽样时,我们不知道总体参数。我们不知道真正的均值或方差或标准差。因此,我们依赖于的事实,因为我们知道坏运气的比率(下冲,或向下偏差),我们可以通过该比率的倒数来抵消坏运气:n-1。

但是如果你运气好呢?就像上面的细胞一样,这种情况有时也会发生。您的样本偶尔会产生正确的标准偏差,甚至超出标准偏差,具有讽刺意味的是,在这种情况下,n-1 会增加偏差。

然而,这是我们在无知状态下纠正偏见的最佳工具。从上帝的角度来看,不需要偏差校正,因为参数是已知的。

最终,这从根本上归结为理解样本和总体之间的关键差异,以及为什么贝叶斯推理是解决经典问题的一种如此不同的方法,其中关于参数的猜测是通过先验概率提前做出的,从而消除了贝塞尔校正的需要。

我将在以后的文章中重点介绍贝叶斯统计。感谢阅读!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值