TowardsDataScience-博客中文翻译-2016-2018-二百八十三-

116 阅读1小时+

TowardsDataScience 博客中文翻译 2016~2018(二百八十三)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

反向传播的问题是

原文:towardsdatascience.com/the-problem…

神经网络依靠梯度下降的反向传播来设置神经元连接的权重。它有效,可靠地最小化了成本函数。研究人员喜欢它,因为他们有证据证明反向传播是可行的。然而,它的成功并不排除其他方法优化神经元的连接。而且,它有一个主要的限制:一旦网络学习了一组权重,任何新的学习都会导致灾难性的遗忘

DARPA 希望设计出能够持续学习的神经网络,不会遗忘,也不需要对它们的整个经历历史进行重新训练。我们知道这样的网络是可能的——我们自己的大脑能够学习新信息,而无需忘记或重新训练。他们寻找的网络不太可能使用反向传播,因为反向传播针对固定目标优化了网络。

固定目标与动态姿态

目前,神经网络被训练成擅长于一项预定的任务,它们的连接一旦被部署就被冻结。没有额外的学习发生。这类似于一辆赛车:该车辆针对在光滑赛道上比赛的任务进行了优化,一旦展开,其设计就不变。赛车擅长在那些光滑的赛道上行驶,但它不适合越野行驶。是‘一招小马’!

如果工程师对赛车进行改装,希望能让它越野,这些改装会损害它的赛道性能。修改后的设计已经'*忘记了'*如何在赛道上表演。

相比之下,人类能够适应各种环境。弹钢琴的手指也能穿针引线。我们的手没有提前为一个单一的任务优化。因此,我们能很好地解决新问题。机器智能不需要这种动力来完成固定的任务,比如语言之间的翻译。然而,这些固定的任务只是我们希望机器将扮演的角色的一小部分。我们需要能做出动态姿势的人工智能。

在野外学习

为了学习新的东西,神经网络必须衡量现有知识的适当性——“这个新任务是否遵循与我已经知道的东西相同的原理或动力学”有没有我已经知道的与这项新任务相关的特征或品质?它需要分析现有的技术,并通过这些领域传递信息。目前,混合专家网络最接近这个理想;它们通过较小的神经网络的组合来解析输入,并组合它们的输出。每个专家处理一个子任务或抽象,对于一个给定的输入,只有少数专家被调用。谷歌的杰夫·迪恩是这些稀疏网络的粉丝。

然而,混合专家仍然通过梯度下降的反向传播进行训练。因为每个专家仅用于输入的少数实例,反向传播缓慢且不可靠。当新的情况出现时,专家的组合不能快速适应它的分析。如果一种情况需要一种新的专业知识,现有的专家组合不能增加这种专业化。我们需要一个替代方案。

相比之下,决策树从相反的方向处理问题:反向传播自顶向下修改神经元,而决策树自底向上解析。它们也被证明对于优化各种固定任务是有效的,但是它们的分支仍然不能动态学习。要像人类一样学习,机器智能还需要其他东西。将新信息解析为“我已经知道的事情”和“我不知道的事情”,然后基于该解析形成输入的路由。

例如:假设我们假设的机器智能已经学会预测刚性下落物体的行为,然后给它一个弹力球。弹力球遵循与刚性球相同的抛物线轨迹,因此机器智能应该识别相似性并应用抛物线预测。然而,一旦弹力球落在一个表面上,它就会变形,并反弹到比刚性球高得多的位置。这是对它所学内容的修改——机器智能将需要调整现有的专业知识,并且它需要学习何时应用这种调整。在第一次反弹后,机器智能应该识别出球是有弹性的,并相应地调整其预测轨迹。对现有知识进行类似的解析和改编对于理解下落的粘土球也是必要的——粘土完全变形,根本不会反弹!

由内向外学习

我们自己的大脑不会像反向传播那样自上而下地学习,也不会像决策树那样自下而上地学习。相反,我们通过亲和力形成新的联系——“什么一起燃烧,什么一起连线”。这个过程发生在每个深度,沿着我们大脑的内部形成连接。

更重要的是,我们的大脑从一套多样的解释开始,慢慢地确定一个折中的方案。我们大脑中的每一群“专家”都会得出一个略有不同的结论,他们的评估会反复出现,直到他们找到一个对大多数人都有意义的解释。就像一群鱼一样,它们的个体取向影响着它们的邻居,它们的集体运动是它们个体运动之间的妥协。

更具体地说:假设你看到一个戴着猫耳朵的女孩的图像。你大脑的一部分识别出她的脸型,然后说“人类!”,而其他部分识别猫耳朵,以“猫!”…传统的神经网络会简单地输出一个分布:“我 50%确定这是一张女孩的照片,30%确定这是一张猫的照片。”它无法重新解读自己的类别——传统的神经网络认为你的图片要么是‘猫’,要么是‘女孩’,但不能两者都是

与传统的神经网络不同,你的大脑不会停留在“女孩或猫”上。每个区域展示了相声,有效地比较笔记。任何意见上的分歧都会产生不和谐,你的大脑会继续它的串音,直到不和谐消失。你大脑中说“猫”的那部分问那个说“女孩”的部分一个问题:“有没有可能是你搞错了,图片真的是猫?”那个“女孩!”region 回应:“不,这绝对是个女孩… 一定搞错了。”“猫!”区域检查,并说“嗯,它可能不是一只猫,但在肯定有猫耳朵。”“好吧,”另一个区域说,“那么这一定是一个新的类别——女孩身上的猫耳朵。”“我不能不同意,”猫说。地区。他们已经就一个新的类别达成了一致。

特征组合

在我们的“有猫耳朵的女孩”的例子中,你的大脑确信它看到了一个女孩——“女孩”的反应非常强烈。然而,对于“猫耳朵”的特征也有强烈的反应,这鼓励了对猫的解释。你的大脑能够通过问自己来解决这种不协调:“是的,有猫的耳朵,但是猫的其他特征也在那里吗?—不!”

我们的大脑与紧密聚集的特征探测器一起工作,它们被连接在一起形成新的组合,新的类别。你可能会看到一张照片,你大脑的特征探测器会识别出:“它像一匹马,但很结实,鼻子上有两只角……”传统的神经网络会试图将图像放在预先存在的类别中,说“60%确定它是一匹马”,但这将是错误的。相比之下,我们的大脑识别出这不是马——这是一头犀牛!然后我们在这些特征之间连线,这样的组合中的‘马’、‘矮壮’和‘角’就有了‘犀牛’的路线。

连接新的特征组合是隐喻的本质。我们的大脑根据存在的抽象星座形成类别。“弹力球像石头一样下落,但它也向上跳跃,并再次开始下落……”“电子像波一样穿过双缝实验,其波纹相互干涉,在探测器表面形成图案。”"爱就像挠痒痒,就像你肚子里的蝴蝶."传统的神经网络不关注当前的特征星座;他们只评估预先存在的类别的可能性。这是我们的智力和他们的智力之间的关键区别。

功能接线星座

使用反向传播不可能识别特征群*。当传统神经网络的输出层说“60%是马”时,它不会告诉你哪些特征是活跃的,从而导致了那个结论。它已经丢失了那个信息*。所以,反向传播无法区分一头犀牛和一头都被简单地称为“六成马”。

当我们的大脑学习识别一只猫时,他们正在学习通常存在的一系列特征。如果这些特征中的大部分是活跃的,并且没有竞争的特征是活跃的,我们的大脑会迅速达成一致,认为他们看到了一只猫。然而,如果竞争特征是活跃的,我们的大脑会检查一致性——他们会问“那个特征可能是个错误吗?“任何可能出现的错误都被压制*,我们的大脑再次检查。如果仍然有竞争的特征,我们的大脑将它们连接在一起,形成一个新的星座,一个新的类别。*

这是一个抑制不确定性布线亲和力的过程。并且,它发生在网络的每个深度,而不需要等待来自输出层的反向传播*。它还为每个要素星座形成新的类别,而不是在输出层保持一组固定的类别。如果我们希望人工智能能够在飞行中学习新事物,并形成抽象和隐喻,我们将需要这种基于亲和力的连接。*

抑制不确定性和布线亲和性

当我们的大脑问“这个特征可能是个错误吗?”他们通过抑制该特征的一些输入来实现。在神经网络实现中,这可以通过 暂时降低这些神经元 的权重,并再次运行输入来表示。如果特征仍然在抑制权重的情况下触发,那么可以肯定这不是一个错误。

而且,当我们的大脑试图组合一组新的特征时,他们会问“哪些特征是一起出现的?”为了在人工神经网络中实现这一点,一个独立的神经元集群被连接以与触发的每个特征相连接,这样新的集群仅在整个星座激活时才被触发。这些特征可能位于网络的不同深度,有些可能位于低级纹理和边缘检测器图层,而有些则位于高级位置和比例图层。它们都被直接连接成一个新的集群,当所有的特性出现时就会触发。

每一个深度连接新的特征星座可以识别不同的物体:一个闪亮、光滑、玫瑰色的球将与一个粗糙、棕色、有纹理图案的球截然不同——网络可能会称一个为“玻璃珠”,另一个为“木制球体”。哑光、棕色和纹理图案的低层次特征可能会出现在窄腿的矩形物体上,即“木制咖啡桌”。网络了解到低级特征的星座与木制物体相关联,而高级特征区分它们的形状和功能。

如果这样的神经网络看到了一个新的物体,并且没有识别出它的高级形状特征,它可能仍然会意识到这个物体是由木头制成的,因为它是无光泽的,棕色的,并且有纹理图案。这些洞察力是普通智力的组成部分。如果我们寻找真正学习的机器,我们将需要根据这一原理设计的神经网络。

数据科学的过程被低估了

原文:towardsdatascience.com/the-process…

编码和统计很重要,但是选择先做什么和下一步做什么也很重要

我听说了很多关于数据科学工具的事情—

scikit-learn、熊猫、TensorFlow、IBM Watson 等。

—我听说了人们应用它们的数据集—

Twitter feeds,网络搜集的数据,Kaggle 上的任何东西,等等。

—但是,除了精心制作的例子和在线竞赛之外,我几乎没有听到太多关于数据科学的过程的信息。

在现实生活中的业务案例中,您很少从一个清晰、干净地解决手头业务问题的数据集开始。除非你在一个高度专业化的领域工作,否则你的任务很少是将算法的准确性从 90%提高到 95%,这是数据科学竞赛中的典型情况。

通常,您可能从一组抽象的业务目标和本地数据库包含的内容的模糊概念开始。你可能要为一个没有现成数据的问题寻找解决方案。在这些情况下,python 和统计学知识对您的起步帮助不大。首先,你需要找到你必须处理的东西,这通常意味着寻找、探索和批判性地思考缺失的部分,以及如何找到它们。

可能更重要的是,在项目的每一步,你都需要保持对下一步可能发生的事情的意识。你应该想出对冲风险的方法,因为数据可能很棘手。一个意外的有偏见或不完整的数据集可能会毁了你的一天,甚至整个项目,如果你最终的结果不好,而且你没有备份计划。

这就是为什么我认为数据科学是一个过程。我的工作是弄清楚项目中接下来应该做什么以及结果可能是什么,不仅是在不久的将来,而且是在项目的后续步骤中。

[## (我喜欢你)叫我大数据

恶名昭彰的 IDE 人群的滑稽嘻哈联合

medium.com](medium.com/@briangodse…)

该过程

以这种方式思考数据科学让我认为它是一个 12 步的过程——原谅我的陈词滥调。由于处理数据所固有的不确定性,我认为每一步都不是必要的,而是一个需要提出、思考和给出答案的问题。通常,对于这些问题有许多好的答案,一个好的答案是在给定到那时为止你所知道的一切和你将来可能期望的一切的情况下,使你更接近实现项目目标的答案。

问题步骤大致按时间顺序排列(顺序可以有所改变),如下所示:

  1. 你有哪些具体的问题和你想要实现的目标?
  2. 有哪些数据可用,如何找到或收集这些数据?
  3. 您如何确保数据干净可靠?
  4. 数据的优势、劣势和局限性是什么?
  5. 根据您目前所知道的和不知道的,一个好的项目计划应该是什么样的?
  6. 什么是合适的统计模型?
  7. 如何将统计模型转化为可以应用于数据的软件?
  8. 如何提高软件的性能、规模或效率?
  9. 基于您所拥有的和您所知道的,您如何将它们放在一起以构建一个解决一些问题并实现一些目标的产品?
  10. 你将如何设计产品,并把它交付给能充分利用它的人?
  11. 在产品完成或交付后,你如何解决问题并进行修改?
  12. 如何以可访问的方式清理、记录和存储您的项目,以便您或其他人可以在将来重用、扩展或修改它?

为什么这个过程被低估了

将这一过程与统计和软件方面的知识和专业技能结合在一起是数据科学项目成功的秘诀,但我对这一过程的了解远不如对统计和软件的了解。

我写这本书像数据科学家一样思考的主要原因之一是,在过去几年里,许多朋友、熟人、同事和其他有抱负的数据科学家问我:

好的,我会写一些代码,也会一点统计学。这让我成为数据科学家了吗?我还需要什么?

在书籍和网络上,除了“经验”或“主题专业知识”,很难找到这些问题的好答案。我发现自己不可避免地会说这样的话:

缺少的是对将数据转化为知识的多种方式的透彻理解,这反过来有助于解决业务问题。

如果您能够理解这些转变的步骤,并且能够看到它们对过去和未来步骤的影响,那么您绝对是一名数据科学家。

盲目地将数据塞进机器学习算法通常不会有太大帮助。关于数据和知识,你必须知道你在哪里,你要去哪里,以及如何到达那里而不撞墙或坑洞。我觉得这一点足够重要,足以写一本书,这让我想到了另一个我认为数据科学过程被低估的原因,也是我写这篇文章的主要原因之一:我的书的一些早期评论者,包括亚马逊的一些评论者,对它没有专注于通过最新最棒的软件应用高度复杂的统计模型感到失望。事实上,在整本书中,我在许多情况下故意避免复杂的技术示例,以便我可以清楚地专注于数据科学过程的主要概念:

  • 从哪里开始你的项目;
  • 数据可能采用的所有形式和格式;
  • 下一步做什么;
  • 哪里可能有坑洞;
  • 有问题怎么办;
  • 是的,一些统计数据,一些软件,一些编码;

诸如此类。这就是我的书的内容;您可以在其他地方找到大量详细的统计数据和软件参考。

数据科学的进程似乎已经被推到了后面,而软件和统计数据——诚然,谈论起来更酷、更性感——抢尽了风头。但我是一个深思熟虑的人;如果没有一个框架来帮助我利用酷和性感来实现目标,它们不会让我走得很远。

让我们将流程重新放在首位!如果我们这样做,我们会得到更好的,可重复的结果。

有关数据科学过程的更多信息,请下载免费的第一章 像数据科学家一样思考 并查看此 幻灯片演示文稿 了解更多信息和购买折扣代码。

Brian Godsey 博士是一名数学家、企业家、投资者和数据科学家,他的著作 像数据科学家一样思考 现已有印刷版和电子书。——briangodsey.com

如果你喜欢这个,请点击💚下面。

[## 检查您对数据的假设

没有人喜欢糟糕的假设

medium.com](medium.com/towards-dat…)

采购中采用人工智能的深远好处

原文:towardsdatascience.com/the-profoun…

随着技术、数据科学和人工智能的出现,企业运作的方式发生了翻天覆地的变化,这一点现在已经得到了广泛认可。在所有主要业务职能中,决策、计划和执行的方式都发生了重大变化。因此,理解这些发展影响特定功能的方式比以往任何时候都更加重要,以便能够从采用新工具和技术中获得最大回报。

我们知道,组织内的采购职能正处于整合围绕人工智能和分析的新方法的风口浪尖。鉴于业务发展的巨大步伐,采购从业者采用新兴解决方案不再是一个选择的问题。这样做的好处远远超出你的想象。

(1)经济利益

最明显的价值当然是财务上的。新的数字技术和先进的数据分析为采购提供了前所未有的弹药,以发现产生底线影响的机会。采购部门节省的资金越多,其对整体业务的价值就越大。

直到最近,对于采购部门来说,准确了解一个组织的总支出都是一项挑战。随着人工智能支持的采购方法的出现,这是一个过去的问题。利用先进的分析方法来构建坚实的数据基础,进而可以通过多种算法进行分析,在多个层面找到隐藏的机会。

新时代支出分析解决方案可以帮助在可实现的支出上节省高达 15–25%的成本。

迄今为止,在没有分析解决方案的情况下释放如此大规模的价值,对于采购来说还是一个白日梦。今天,这是一个众所周知的现实。

(2)更高的效率

像大多数技术解决方案一样,人工智能和分析可以帮助采购团队节省大量时间,从而让他们专注于节省成本。传统上,采购团队会花费大量的时间(通常是他们的大部分时间)来处理来自支出捕获系统的数据。在准备进行任何分析之前,这些数据需要大量的链接、清理和丰富。有了人工智能,只需点击一个按钮,就可以进行这些分析。

高级支出分析解决方案能够准确地指出采购中隐藏的节约,量化这些节约,并推荐最大化不同采购计划影响的方法。

除了提高采购团队的生产力之外,更高的效率还体现在更快的投资回报上。通过 获得 3-6 个月的节省捕获速度(典型的为 ),获得精细的节省洞察可显著加快采购计划的执行,更快地产生影响。

(3)文化利益

在采用人工智能的所有好处中,最不为人所知但却是最深远的是文化上的好处。它将采购定位为推动业务决策的突出和战略性角色——这在历史上几乎从未发生过。采购几乎总是被降级为一项支持职能——这无疑是一项重要的职能——但不具有战略重要性。

然而,随着越来越多的采购组织采用以数据为中心的方法,这种模式正在快速变化,主要表现在两个方面:

  • 改变与内部利益相关方的对话:详细的数据驱动分析使采购部门能够在平等的基础上参与业务,并推动转型计划。在过去,关键业务职能通常会将大多数采购计划视为不可行而不予考虑,并将其归因于采购人员不了解业务如何运作这一事实。然而,借助强大的支出分析解决方案,采购部门可以用更难忽视的事实和数据武装这些对话。因此,业务职能部门开始将采购视为一个有价值的盟友,可以帮助他们以最具成本效益的方式实现自己的目标。
  • 与外部供应商更轻松的谈判:同样,与供应商的对话也经历了巨大的变化。虽然传统上,采购团队会依靠个人关系或典型的讨价还价方法与供应商谈判,但有了数据,这种讨论就非常不同了。如今,品类经理不再因为预算限制或无形的竞争压力而要求降价,而是可以坐在供应商的对面,查看供应商提供给不同业务部门的价格、其他供应商提供的价格、相关商品价格变动、消费量、供应商绩效指标等数据。—并要求更难以辩驳的条款和价格。

虽然成为人工智能支持的采购组织需要时间和努力,但这是非常值得的投资。一旦数据基础就绪,采购部门可以通过许多不同的途径利用它来提供持续的更高价值。

人工智能在音频处理中的前景

原文:towardsdatascience.com/the-promise…

2017 年是人工智能的好年景,尤其是深度学习。我们已经看到图像和视频处理的人工智能技术的兴起。尽管事情往往需要一段时间才能进入音频世界,但在这里我们也看到了令人印象深刻的技术进步。

在这篇文章中,我将总结其中的一些进展,概述人工智能在音频处理方面的进一步潜力,并描述我们在追求这一目标时可能遇到的一些可能的陷阱和挑战。

迈向更智能的音频

激发我对音频处理的人工智能用例兴趣的是 2016 年底发布的 Google Deepmind 的*“wave net”*——一种生成音频记录的深度学习模型[1]。Deepmind 的研究人员使用一种经过调整的网络架构,一种扩展的卷积神经网络,成功地生成了非常令人信服的文本到语音转换,以及一些从古典钢琴录音中训练出来的有趣的类似音乐的录音。

An illustration of WaveNet’s dilated model for sample generation (photo credit: Google Deepmind)

在商业领域,我们也看到了机器学习在产品中的更多应用——以 LANDR 为例,这是一种自动化音频制作服务,它依靠人工智能来设置数字音频处理和细化的参数。

今年,pro audio software moguliZotope发布了 Neutron 2 ,这是一款音频混合工具,具有一个*“轨道助手”*,它利用人工智能来检测乐器,并向用户建议合适的预设。在用 AI 对音频进行更直接的处理时,iZotope 还在他们的音频恢复套件 RX 6 中提供了一个实用程序来隔离对话

A short demonstration of iZotope’s dialogue isolate feature

人工智能在数字信号处理中的潜力

我们仍然处于 AI 在音频处理中应用的早期。深度学习方法允许我们从一个新的角度来处理信号处理问题,这个角度在音频行业中仍然很大程度上被忽略。到目前为止,我们已经把注意力集中在公式化的处理上:对一个问题有了深入的理解,并手动设计函数来解决它。然而,理解声音是一项非常复杂的任务,我们作为人类,直觉上认为很容易的问题往往很难用公式来描述。

举个例子,源分离:你发现自己处在两个人互相交谈的场景中。事实发生后,在你的脑海中,你可以想象两个人中的任何一个不需要太多努力就可以单独说话。但是我们如何描述一个分离这两种声音的公式呢?嗯,看情况:

有没有统一的方法来描述人的声音听起来怎么样?如果是,性别、年龄、精力、个性是如何影响这些描述的参数的?与听众的物理距离和房间声学如何影响这种理解?录音过程中可能出现的非人类噪音怎么办?我们可以根据哪些参数来区分不同的声音?

正如你所看到的,为这个问题的全部范围设计一个公式需要注意很多参数。在这里,AI 可以提供一种更务实的方法——通过设置适当的学习条件,我们可以自动统计估计这一功能的复杂性。事实上, Eriksholm (助听器制造商 Oticon 的研究中心)的研究人员最近提出了一种使用卷积递归神经网络架构在实时应用中实现改进的源分离的方法[2]。

随着用深度神经网络处理音频的方法不断改进,我们只能开始想象我们可以解决的困难问题——下面是我对实时音频处理中深度学习的一些想象:

  • 选择性噪声消除,仅去除某些元素,如车辆交通
  • 高保真音频重建,来自小型低质量麦克风
  • 模拟音频仿真,估计非线性模拟音频组件之间的复杂交互
  • 语音处理,改变说话者、方言或录音中的语言
  • 改进的空间模拟,用于混响和双耳处理

表现和建筑的挑战

WaveNet 是第一批成功尝试在原始样本水平上生成音频的公司之一。这里的一个大问题是,CD 质量的音频通常以每秒 44100 个样本的速度存储,因此,用 WaveNet 生成的声音需要小时。这排除了该方法在实时应用中的使用。这只是一大堆需要理解的数据。

另一方面,许多当前利用神经网络进行音频处理的解决方案利用了频谱图表示和卷积网络。在这些解决方案中,音频频谱本质上是在 2D 图像上随时间变化的幅度,卷积网络用于扫描和处理该图像[3]。通常,这些方法的结果并不像我们在视觉领域看到的那样令人信服,例如 CycleGAN 可以为电影做一些令人印象深刻的风格转换[4]。

CycleGAN transforming horses into zebras (photo credit: CycleGAN)

电影和音频剪辑有一些共同点,因为它们都描绘了随时间的运动。考虑到 CycleGAN 等图像处理网络的创新,人们可能会认为这种风格转移也适用于音频。

但是,电影和音频剪辑不是一回事——如果你冻结一部电影的一帧,仍然可以收集到关于该帧中的动作的大量信息。然而,如果你冻结一个“帧”的音频,就很难收集到实际听到的内容的意义。这表明音频从根本上比电影更依赖于时间。在频谱图中,你也不能假设一个像素属于一个单独的对象:音频总是“透明的”,因此频谱图在同一帧中显示所有彼此重叠的可听声音[3]。

我们做机器视觉是为了做机器听觉。

卷积神经网络的设计灵感来自人类视觉系统,大致基于信息如何流入视觉皮层[5]。我相信这是一个值得考虑的问题。本质上,我们获取音频,将其转换为图像,并在将图像转换回音频之前对其进行视觉处理。所以,我们做机器视觉是为了做机器听觉。但是,正如我们直觉意识到的那样,这两种感觉的作用方式不同。看下面的声谱图,你(以你聪明的人脑)实际上能收集到多少关于音频内容的意义?如果你能听它,你会很快对正在发生的事情有一个直观的了解。也许这是一个阻碍我们在人工智能辅助音频技术方面取得进展的问题。

A five-second spectrogram. Can you tell what it is? (It’s a blues harp.)

因此,我建议,为了用神经网络实现更好的音频处理结果,我们应该分配精力来找出更好的音频表示和神经网络架构。一种这样的表示可以是自相关图,一种声音的三维表示,其中包括时间、频率和周期性[6]。事实证明,人类可以通过直观地比较声音的周期性来找到相似的模式,从而分离声源。音高和节奏也是时间因素的结果。因此,更侧重于时间的表示,如自相关图,可能是有用的。

An illustration of an autocorrelogram for sound (photo credit: University of Sheffield)

此外,我们可以开始考虑在建筑上模拟听觉系统的神经通路。当声音刺激我们的耳膜并进入耳蜗时,它会转换为不同频率的幅度。然后,它进入中央听觉系统进行时间模式处理。我们利用哪种分析模式从我们的中央听觉系统中的音频中收集可以在人工神经网络中建模的意义?周期性,也许[6]。声音事件的统计分组,也许[7]。扩大分析的时间框架,也许[1]。

An illustration of information flow in the auditory system (photo credit: Universität Zu Lübeck)

结论

人工智能的发展为更智能的音频信号处理带来了巨大的潜力。但为了更好地理解神经网络中的声音,我们可能需要放弃固有的视觉视角,转而考虑基于听觉系统的新技术。

在这篇文章中,我提出的问题比我提供的答案要多,希望能激发你在这种背景下对声音的思考。

这是一个更大的机器听觉项目的一部分。如果您错过了其他文章,请点击下面的链接了解最新情况:

批评:CNN 和 spectrograms 做音频处理有什么问题? 第一部分: 仿人机器听觉带 AI (1/3) 第二部分 : 仿人机器听觉带 AI (2/3) 第三部分 : 仿人机器听觉带 AI (3/3)

来源

[1] A. Oord,S. Dieleman,H. Zen,K. Simonyan,O. Vinyals,A. Graves,N. Kalchbrenner,A. Senior,k . Kavukcuoglu:wave net:原始音频的生成模型,2016

[2] G. Naithani,T. Barker,G. Parascandolo,L. Bramslø,N. Pontoppidan,T- Virtanan : 利用卷积递归神经网络的低时延声源分离,2017

[3] L. Wyse : 卷积神经网络处理的音频谱图表示,2017

[4] J. Zhu,T. Park,P. Isola,A. Efros : 使用循环一致对抗网络的不成对图像到图像翻译,2017

[5] Y. Bengio : 学习人工智能的深度架构(第 44 页),2009

[6] M .斯莱尼,r .里昂 : 论时间的重要性——声音的时间表现,1993

[7] E. Piazza,T. Sweeny,D. Wessel,M. Silver,D. Whitney : 人类使用汇总统计来感知听觉序列,2013

追求(机器人)幸福:TRPO 和 PPO 如何稳定政策梯度方法

原文:towardsdatascience.com/the-pursuit…

强化学习给我的印象是现在机器学习的狂野西部:一个充满戏剧性和进步的地方,每个人的视野中都有宏伟未来的梦想。但是,这也是一个远离规则和假设的地方,这些规则和假设支配着监督和非监督学习的世界。典型假设的一个最显著的违反是,特别是在政策梯度中,你无法可靠地知道你前进的方向是否会真正提高你的回报。因此,许多最近的政策梯度创新——本文将讨论其中的两个——专注于如何在你对追求的最佳方向的估计存在有意义的更高方差的情况下更有信心地进行优化。

快速了解术语

  • “轨迹”——轨迹被定义为一系列状态、行动和奖励。轨迹是通过遵循一些政策来收集的,这些政策决定了在给定的状态下你将采取什么行动,但是这些政策不需要动机;在随机策略下,理论上也可以计算轨迹
  • “状态”——这通常用来宽泛地表示:在任何给定的时间点,代理与之交互的环境输入的集合。
  • “奖励”——根据上下文,这可以指在特定时间步长给出的奖励,也可以指从给定动作的时间步长直到轨迹结束的折扣奖励。

你不可能总是知道自己想要什么:学分分配问题

强化学习问题的基本框架是一个在环境中运行的代理:它接受观察(或称为状态 s),并采取行动,这触发环境产生一些奖励 r,并更新到由给定行动产生的新状态。关于这种设置,需要注意的一件重要事情是,它隐含地假设环境具有做出判断的能力,无论是关于动作还是世界的首选状态。

这似乎是显而易见的,但这可能只是因为我们习惯于听到“奖励”是 RL 的一个基本组成部分。但是,不要把奖励简单地想成一些完全抽象的概念,而是应该考虑不同类型的环境,以及它们在量化奖励中的表现和不表现。

一方面,你有像许多 Atari 游戏那样的基于点数的游戏,因为拥有许多点数是赢得游戏的决定性因素,点数可以提供一个相当直接的奖励信号。在中间,想象像 Go 这样的东西。在这种情况下,有一个定义明确的赢或输的概念,但环境不会自动提供任何给定中间步骤的价值评估,或者它离赢得游戏有多近。事实上,在这种情况下,我们想让代理人做的一个实质性的部分就是发展关于什么样的中间博弈状态比其他的更好的知识。

另一方面,我们还有教机器人走路的问题。在这种情况下,任何奖励都必须由人类明确设计,以捕捉我们认为有效行走意味着什么;它们不是由环境结构所固有的。所有这些只是想说:奖励的概念可能是一个有用的抽象概念,但你应该记住,它是用来描述一个相当广泛的反馈机制。

这个关于奖励的讨论符合我认为的关于强化学习的一个最明确的事实:你无法看到你试图优化的功能。这是一个微妙的问题,而且常常是以一种比实际情况更明显的语气随口说出的。

想象一下,在监督学习中,您的模型产生了一组 softmax 值(分类网络的传统输出结构)。如果将这些输出与 one-hot-encoded true label 进行比较,就可以将交叉熵误差计算为每个 softmax 输出的直接解析函数,这样就可以反推这些 softmax 输出发生变化时,损耗会如何变化,并返回到网络中。但是,在 RL 中,你的损失不是一个可微的函数,你对它有完全的方程级的可视性,而是一个由宇宙控制的黑匣子。你采取了一系列的行动,并获得了一系列的奖励,但是你不可能直接计算出为了增加你的奖励,你应该上调或下调每个具体行动的概率。

你可以根据你的参数创建奖励梯度的估计值,这是现代 RL 的两个主要分支之一 policy gradients 所采用的方法,但这些估计值比监督学习中的估计值具有更高的内在方差。在监督学习中,小的迷你批次大小会使您当前估计的损失量发生变化,但损失相对于参数的实际导数是由网络定义的确定量。相比之下,在强化学习中,你是在估计导数本身。特别是在多步骤中,早期的单个操作可以导致完全不同的路径,给定政策可以导致的可能轨迹的空间非常大,这意味着您需要更多的样本来很好地估计给定政策的执行情况。

符合政策梯度

Source: Trust Region Policy Optimization paper. This simulated walker is an example of the kind of continuous-valued problem (where the policy is the continuous-valued torque on each joint) for which policy gradient methods are particularly well-suited

要建立对政策梯度方法的直觉,首先要考虑强化学习最直接的形式:进化方法。在一种被称为交叉熵方法的原型进化方法中,你定义一些政策参数的分布——让我们说一个具有一些均值和方差的高斯分布——并收集 N 组参数下的 N 条轨迹。然后,取前 p%的最高表现轨迹,并基于使用该 p%的参数样本作为经验起点来拟合新的高斯参数分布。所以,在下一轮,你的 N 个样本是从对应于上一轮最佳样本的分布中抽取的。

这背后的想法是,在生成良好轨迹的参数集内,该集内的每个参数都可能更接近最佳参数设置。虽然像这样的简单方法有时令人惊讶地工作得很好,但是它们的缺点是随机更新参数值,而不遵循任何明确的梯度,该梯度携带关于参数值的什么改变可能提高性能的信息。现在,有人可能会合理地争辩说:你刚刚说过,不是 10 段之前,在强化学习中,你不能指定一个从你的参数到你的奖励的梯度链,因为行动和奖励之间的环境函数是一个黑盒。

没错:你不能直接计算。但是,在通过动作输出柔量最大值的网络中,您可以计算一个梯度,将柔量最大值移向一些不同的动作集。所以,如果你定义了一个关于你的行动的估计损失梯度,你可以通过你的行动分布来改进这个估计损失。

沿着这些路线的一个基本政策梯度是通过给每一个行动附加一个叫做优势估计的东西来运作的。这从数字上回答了“这个行动比我在这种状态下采取的平均或预期行动好多少”的问题。重要的是,优势评估使用未来折扣奖励,这意味着从采取行动的那一点开始累积到未来的所有奖励,折扣率适用于未来的奖励。请注意,这与进化方法不同,在进化方法中,每个行为都被隐含地赋予了对整个轨迹的回报的部分责任,而不仅仅是在此之后的回报。给定附加到每个动作的这个优势估计,基本策略梯度方法使用给定轨迹的预期优势作为其回报,通过计算和求和从概率策略采样的动作的优势估计,根据每个动作的概率隐含地加权每个动作。虽然每种方法都有自己的细微变化,但这一基本框架是政策梯度方法的概念基础。

当你怀孕的时候会期待什么

许多机器学习问题是根据某种期望值的最小化或最大化来定义的。对于那些离统计时代稍远的人来说,函数的期望值定义为:

期望值是相对于某个概率分布 p(x)来定义的,你期望 x 从该概率分布中被采样,并且在概念上可以被描述为“如果你从 p(x)中采样 x,你会得到什么,并且平均你从那些样本中得到的 f(x)”。在强化学习的背景下,这一点非常突出,因为它有助于说明 it 和强化学习之间的另一个微妙差异。

在规范的监督学习问题中,f(x)是某种损失函数,例如,预测的 softmax 输出和目标之间的交叉熵损失,而 p(x)分布是训练集中存在的输入的分布。换句话说,这个问题框架寻求最小化预期损失,这转化为构建一个对某个输入集 x(构成训练集的输入集)具有低误差的网络。这是隐含地完成的,因为根据定义,网络只看到训练集中存在的例子,并且如果在训练集 p(x)的经验分布下一个例子(或接近输入空间的一组例子)是高概率的,将更频繁地看到该例子。这里,p(x)不在你的控制范围内,f(x),网络+损失函数,是你训练网络时要优化的。

现在,想象一个强化学习问题,我们想从给定的政策中获得最大的期望回报。

方程的结构在这里几乎是相同的,除了 x 已经被替换为τ,以表示每个τ现在是从策略 p-θ得出的轨迹。(τ是轨迹的标准符号)。然而,在这里,你所优化的已经翻转。因为优化策略的结果是让您选择不同的行动,当您优化策略参数时,这会通过计算奖励的轨迹分布对期望值*产生影响,*在监督学习中,样本的分布由固定的训练集决定。相比之下,之前,我们的网络优化了作用于样本的损失/回报函数,在这里,我们无法看到 R(t)回报函数,我们影响预期回报的唯一杠杆是通过改变我们采样的轨迹的分布。

这一事实对政策梯度方法可能经历的失败模式有影响。在监督学习环境中,无论我们采取多少不明智的优化步骤,我们都不会影响我们正在学习的样本的分布,因为这超出了我们的控制范围。相比之下,在政策梯度环境中,如果我们最终处于一个特别糟糕的行动空间区域,这可能会让我们处于一个很少有有用的信息轨迹可供学习的境地。例如,如果我们试图在一个迷宫中寻找一种奖励,并且意外地学会了保持静止或转圈的策略,我们将很难达到任何有积极回报的行动,因为我们只能通过体验那个行动并看到它导致奖励来学习增加行动的可能性。

别担心,你可以信任我

前面提到的灾难性崩溃问题在历史上导致了策略梯度方法中超参数优化成为一个脆弱而复杂的过程:你需要找到一个足以在问题上取得实际进展的学习率,但又不能高到经常意外终止学习过程。在学习过程的灾难性结束不仅仅意味着不得不重新运行一些代码,而且实际上意味着可能刚刚驶下悬崖的物理机器人代理的毁灭的情况下,这一点尤为突出。

当我们要更新我们的政策时,我们真正想回答的一个问题是:我们能不能做出一个保证改善我们当前政策的更新,或者至少不会使它恶化?完全计算这一点的一种方法(将我们的策略更新后称为“新策略”,更新前称为“旧策略”)是:

  1. 了解新政策将访问哪些州,以及访问这些州的概率有多大。
  2. 在每个州,对以下行为求和:该州每个行为的新政策概率,乘以该行为比该州旧政策的平均行为好多少。(这个量,“这个动作比这个状态下的平均动作好多少”,被称为优势)。
  3. 上面的求和操作相当于在每个状态获得预期的优势,根据该状态下新策略的动作分布进行采样。
  4. 我们通过新政策到达该州的可能性来衡量每个州的预期新政策优势
  5. 总的来说,这将使我们获得新政策相对于旧政策的预期优势,并让我们在采取行动之前确认预期优势是积极的。

This equation is basically a mathematically restatement of items 1–5 above

新策略在给定状态下的给定动作的概率很容易计算:我们可以很容易地将来自任何状态的数据(甚至是由不同策略采样的数据)输入到具有更新参数的策略网络的副本中,并获得该网络的动作分布。

然而,更困难的是新政策将覆盖的州的分布。与许多预期一样,我们没有任何方法可以直接估计给定策略在某个状态下结束的概率。因此,我们不是显式地对状态求和并计算每个状态的 p(s ),而是通过采样进行估计:如果我们获得一个策略所达到的状态集,并计算每个状态的新策略优势,那么我们将通过 p(s) 进行隐式加权,因为更有可能的状态将更有可能被包含在样本中。为了在没有采样的情况下进行计算,我们需要知道转移函数——在给定状态下,给定动作下一个环境状态的分布——这是一个未知的环境黑箱。

信赖域策略优化(TRPO)的方法是计算上述优势量的估计,但是使用来自旧策略的状态分布来这样做,而不是来自新策略的状态分布,新策略的状态分布基本上只能通过潜在昂贵的采样来获得。

Note: eta(pi), the first term, is just the expected reward of the old policy, which already knew from sampling from it. You can see that, in contrast to the partial equation above, the distribution over states is from the old policy (pi) rather than the new policy (pi tilde)

这种近似的有效性直接关系到旧策略状态分布与新策略状态分布的不同程度。如果更新的策略以足够相似的概率到达相同的状态,那么这种近似更有可能成立。直觉上,这是有意义的:如果新策略经常出现在旧策略从未或很少出现的某个状态,其中所有的行为都比旧策略要糟糕得多,那么旧策略近似的损失(赋予该状态低权重或零权重)将会对新策略的性能不恰当地乐观。

虽然这篇文章的证明有点长,但原始的 TRPO 论文表明,如果您对新旧策略的动作分布(或动作分布参数,如果您正在学习参数化的策略)之间的 KL 差异进行限制,这将转化为新旧策略状态分布差异的限制。而且,如果对这种差异有足够强的限制,我们知道我们的新策略状态分布与旧策略状态分布足够接近,我们的近似损失函数应该是有效的。

再见了,吉隆坡

从经验上看,TRPO 方法表现得相当好:以前需要精确的特定问题超参数搜索者的问题现在可以用一组合理的参数来解决,这些参数可以很好地跨问题转移。然而,TRPO 的一个挑战是需要计算参数之间 KL 散度的估计值:这需要使用共轭梯度法,这增加了该方法实施的复杂性和计算时间。

OpenAI 去年发布的近似策略优化(PPO)T1 试图解决这个问题。为了理解这种方法,我们首先需要了解一些关于替代损失函数 L-pi 的计算方法,特别是预期优势的计算方法(如下所示)。

虽然我们的模型结构给出了在给定状态下直接计算行动概率的能力,但是为了减少计算,我们不倾向于明确地计算在给定状态下每个行动的优势,并且计算它的加权概率。相反,我们只是再次通过采样来计算隐含的期望:我们根据我们网络的 softmax 动作分布来采样动作,因此给定状态下的动作根据它们的可能性来显示。然而,回想一下,使用 TRPO,整个目标是能够使用从旧政策中抽取的样本来推断新的更新后政策**的行为。**因为我们使用的是在旧策略下抽取的样本,所以每个动作都隐含地乘以在旧策略下被抽样的概率。因此,为了纠正这一点,在 TRPO 中,我们将旧政策下采样的每个优势估计值乘以一个比率:新政策下的概率除以旧政策下的概率。从概念上讲,这只是通过除以显式旧策略概率(得到 1)然后乘以新策略概率来抵消隐式旧策略概率。

Slightly different symbols than the last few equations, but hopefully still clear.

这个概率比,PPO 论文称之为 r-theta,是 PPO 改进方法的焦点。PPO 没有估计一个替代的预期优势损失,而是提出了 KL 散度损失(注意,这组符号将对状态的期望包含在 et 项中):

换句话说,这就是计算两件事,并取其中的最小值:

  1. R-theta * Advantage :比值项如上所述,只是取新的动作概率除以旧的。
  2. *一个削波的 R-theta 优势:这里,ε被定义为一个相当小的项,比如说 0.20,我们将概率比削波到 0.8 到 1.2 之间。然后,我们将这个削波比率乘以优势。

这种方法的基本操作理论与 TRPO 是一样的:保守主义,以及对更新的谨慎,这种更新会把你带到旧政策没有探索的区域。让我们通过几个可能的案例来思考为什么。

A few made-up illustrative examples

剪裁只适用于使我们对新政策优势的估计更加悲观:当在新政策下更有可能出现真正好的行动,而在旧政策下更有可能出现坏的行动。在前一种情况下,我们限制了你能给予新政策多少向上加权的好行为的信任,在后一种情况下,我们限制了你能削减多少向下加权的坏行为的新政策松弛。这一点的总体要点是,我们给予算法更少的动力来进行将导致行动或状态分布发生强烈变化的更新,因为我们正在抑制可能导致这种更新发生的两种信号。

In all but one case, PPO outperforms or is tied for top performance with competing algorithms. Source: PPO paper

这种方法的一个有意义的优点是,与 TRPO 的硬 KL 发散约束不同,这种削波目标可以使用梯度下降直接优化,允许更干净和更快的实现。

切斯特顿的政策栅栏

在 1929 年的一本书中,G.K .切斯特顿写道:

在改造事物的问题上,与改变事物不同的是,有一个简单明了的原则……在这种情况下,存在着某种制度或法律;为了简单起见,让我们说一个横跨马路的栅栏或大门。更现代的改革家兴高采烈地走上前去说,“我看不出这有什么用;让我们清除它。”对于这个问题,更聪明的改革家会很好地回答:“如果你看不到它的用处,我当然不会让你把它清理掉。走开想一想。然后,当你能回来告诉我你看到它的用途,我可能允许你摧毁它

这种对全新方法的谨慎,以及对过于热衷于变革(即使表面上看起来是一种改进)的警惕,是贯穿这里讨论的两种政策梯度改进方法的基本主题。冒着变得过于华丽的风险,这是一个非常隐喻的想法:通过渐进、谨慎的步骤获得信心,让你离更好的地方更近一点。

剩余问题

现在这已经成为我的习惯,我想以一些问题来结束我的演讲

  • 在许多问题中,直到成功的那一刻才有稀疏或不存在的回报,我预计强化学习方法一般会有麻烦。对于 Q 学习和政策梯度在这些低回报密度的情况下是否表现更好,有没有已知的研究?
  • 与此相关,我很想了解奖励形成——创造手工设计奖励的过程——对解决不同类型的问题有多重要。
  • 我从来没有完全弄清楚为什么在 TRPO 中计算 KL 散度约束需要共轭梯度来估计

即使仅在政策梯度这个主题中,这个领域也有如此多的丰富性和细微差别,以至于我没有时间在这里触及:优势估计在减少方差中的作用,PG 与 Q 学习的利弊,随机政策在导致更好学习中的作用。如果你对了解以上任何一点感兴趣,我有一个有点非正统的建议:约翰·舒尔曼(TRPO 和 PPO 背后的研究人员,目前是 OpenAI 的研究员)的博士论文。鉴于这本书并没有明确地写为面向公众的教学,它写得非常好,非常清楚,包含了我在研究过程中能够找到的一些概念的最佳解释。

人工智能难的真正原因

原文:towardsdatascience.com/the-real-re…

今年圣诞节,我朋友的祖母终于发现了她孙子多年来一直在做的事情。他是一名数据科学家,在英语环境中长大,偶尔在家庭场合会说一点西班牙语。他的祖母只会说西班牙语。

“在今天之前,我的祖母不知道我到底是做什么的。”

关于数据科学家研究什么的科幻小说式的谣言——尤其是如果我们专门研究人工智能——吸引了一股荒谬的气息,所以我们许多人发现自己不得不不断地解释我们的生活选择。这就是为什么当我得知我的朋友分享了我的博客帖子的西班牙语翻译时,我非常感动。他的祖母终于能够告诉他,她理解他,并为他感到骄傲。

这是她第一次可以想象他在工作中真正做了什么的圣诞节。

她第一次明白,他的召唤并不是某种模糊的杀手机器人味道的东西,而是某种因其能够让人类生活变得更好而深具美感的东西。机器学习和 AI 给你第二种和计算机对话的方式。旧的方法是给计算机明确的指令,而新的方法是给出例子——数据!—相反。这就是 AI 的本质。

不要让它的简单让你失望;杠杆也很简单,但它们可以移动世界。

正是在这样的时刻,我的写作受到了极大的鼓舞。我写作的原因(通常会放弃每个周末的一半时间来做这件事)是为了让数据科学决策智能对所有人来说都是容易理解的。

我相信,对这些理念的基本了解对于参与人类不可避免地走向的人工智能未来至关重要,我对任何人被抛在后面的想法感到不寒而栗。

我不希望 AI 只属于学者、专家、大公司,以及那些和流行博主说同样语言的人。说应用人工智能聪明而神秘是一个谎言——以下是今天它很难的真正原因:

大规模实现自动化是很困难的。这是我大惊小怪的事情,但这不是人工智能特有的问题。从做汉堡到提供搜索结果,在全球范围内做任何事情都是复杂的。然而,从个人的角度来看,这可能相当容易,除非这些工具不是用户友好的。这就引出了第二点。

(2)今日工具吸。是的,所有的人。

我什么意思?简单来说:大多数五岁的孩子不会使用今天的数据科学工具。想法并不难 ( 例子进去,菜谱出来),但是界面难。对于你们当中的终身工程师来说,他们可能不这么看,但对于那些以前从未编写过for loop的人来说,他们是令人生畏的。好消息是工具正在迅速变得更好。很快,非专家将能够使用简单的界面从他们的生活中去除各种烦人的苦差事……只要他们知道这是一种选择。我不希望看到人们仅仅因为看不懂英语或者没有在大学学过数学,就被排除在人工智能之外,无法成为自己更美好生活的建筑师。

好消息是工具正在迅速变得更好。

测试一个重要的应用需要专业知识。作为一名的统计学家,我可能会对甚至在睡梦中的测试感到愤怒——对缺乏严谨性感到愤怒是我这类人根深蒂固的本能——所以我必须提醒自己,在许多应用中失败并不痛苦。

有时候失败是如此有趣,它们实际上是最好的部分——例如在这个人工智能生成的烤蜗牛黄油食谱中,由 aiweirdness.com 的提供。我要求你大声读出来,不要笑出声来。

An AI-generated recipe, courtesy of aiweirdness.com. I dare you to read it out loud without cracking up.

这样的应用程序不需要同温层标准的严格测试,而同温层标准会让我的坏脾气伙伴们感到骄傲。创造一种救命的药物和为我的家庭娱乐创造一种新的黄油配方是有区别的。如果我们决定药物不再需要统计测试,我会立刻加入抗议。至于不敢相信这是黄油……我一直在我的厨房里做疯狂的事情,那里唯一接近测试的东西就是火警。(它经常给我唱它的人民的歌。)

在我的演讲和文章中,我经常支持行业用例,但是让我们不要忘记所有带来一点个人快乐或舒适的个人可爱应用。我有很多定制的基于 ML 的个人生产力工具,让我可以表现得好像一天有 25 个小时一样。这些并不重要,但它们让我的小生活变得更好。

我希望其他人也能获得这些技术——这就是为什么我为成为 Google Cloud 的一部分而感到自豪……制造更好的工具,将大量计算资源交给所有不想建立自己的数据中心的人,这基本上是我们存在的目的。不幸的是,如果人们不知道什么是人工智能,他们最终仍然会被排除在外,他们被允许在没有成为教授的情况下加入这种乐趣。所有那些关于机器人的科幻废话真的对事情没有帮助。

我不想看到人们仅仅因为看不懂英语或者他们在大学里没有学过数学而被排除在为自己创造更美好生活的建筑师之外。

每个人都应该参与到人工智能的想法中,这就是我写作的动机。我只是众多声音中的一个——这是一件好事,因为每一点都有帮助。我想对那些帮助我摆脱英语科技泡沫的人说谢谢。

对于那些花了一点时间与可能被排除在外的人分享人工智能想法——我的或其他人的——的人,请接受我衷心的感谢。每个人都应该成为其中的一部分,不管他们是谁,说什么。


我的第二个 Medium 账号上有其他语言的社区翻译文章。下面是🇦🇪 阿拉伯语 🇨🇳 汉语,🇳🇱 荷兰语🇫🇷 法语 🇩🇪 德语 ,🇮🇹 意大利语 ,🇯🇵 🇷🇺 俄语🇪🇸西班牙语和🇹🇷 土耳其语

我希望我知道每一种语言,这样我就可以用它们来写作,但是我不知道。如果你想多做一点,把这个词表达出来,我总是欢迎志愿者翻译。谷歌翻译传达了最基本的意思,但却失去了很多乐趣。我这样写是因为我认为快乐是至关重要的……否则我会链接到一本教科书然后就到此为止。我非常感谢那些抓住了我的文章精神的人,所以当他们到达语言障碍的另一边时,他们仍然很有趣。

感谢阅读!YouTube AI 课程怎么样?

如果你在这里玩得开心,并且你正在寻找一个为初学者和专家设计的有趣的应用人工智能课程,这里有一个我为你制作的娱乐课程:

Enjoy the entire course playlist here: bit.ly/machinefrie…

喜欢作者?与凯西·科兹尔科夫联系

让我们做朋友吧!你可以在 TwitterYouTubeSubstackLinkedIn 上找到我。有兴趣让我在你的活动上发言吗?使用表格取得联系。

这就是推特如何看待世界:情感分析第一部分

原文:towardsdatascience.com/the-real-wo…

by Hugh Han on Unsplash

Twitter 是一个在线社交网络,截至 2018 年 2 月,月活跃用户超过 3.3 亿。twitter 上的用户创建称为 tweets 的短消息,与其他 twitter 用户分享,这些用户通过转发和回复进行互动。Twitter 采用了 280 个字符或更少的消息大小限制,这迫使用户专注于他们希望传播的消息。这一特性使得 twitter 上的消息非常适合情感分析的机器学习(ML)任务。情感分析属于自然语言处理的范畴,自然语言处理是人工智能的一个分支,处理计算机如何处理和分析人类语言。

训练数据是从感知 140 获得的,由大约 160 万条随机推文组成,并带有相应的二进制标签。0 表示负面情绪,1 表示正面情绪。在这篇博客文章中,我们将使用朴素贝叶斯分类器从这个训练集中学习正确的标签,并进行二元分类。在坚果壳中,朴素贝叶斯定理根据某些其他事件的联合概率分布来计算某个事件发生的概率。我使用 twitter 的 API 下载了测试数据集,并将用于测试模型的真实性能。API 的完整文档和条款可在developer.twitter.com/en/docs获得。

在这篇博客文章的第一部分,我们将介绍一个情感分析 ML 任务中对文本数据执行的标准预处理步骤。第二部分将在后续的博客文章中介绍,我们将预处理合并到 ML 管道中的一个步骤中。第一篇文章解释了当我们使用管道来处理预处理时,在幕后发生了什么。

第 1 部分:探索带标签的训练数据集

在我们的工作流程中,我们将使用带有 Python 的 Jupyter Notebook。

  • 导入此项目中使用的 python 库。
  • 将数据导入到 pandas 数据框架中,并进行一些探索性的数据分析。
**# you can see the full list of imports on GitHub!****# Machine Learning imports
import** **nltk
from** **sklearn.pipeline** **import** Pipeline
**from** **sklearn.model_selection** **import** train_test_split
**from** **sklearn.metrics** **import** classification_report, confusion_matrix, accuracy_score
**from** **sklearn.naive_bayes** **import** MultinomialNB
**from** **sklearn.model_selection** **import** KFold, cross_val_score
**from** **sklearn.ensemble** **import** RandomForestClassifier
**from** **sklearn.feature_extraction.text** **import** CountVectorizer
**from** **sklearn.feature_extraction.text** **import** TfidfTransformer
**from** **sklearn.model_selection** **import** GridSearchCV
**from** **sklearn.externals** **import** joblib
**from** **nltk.corpus** **import** stopwords
**from** **nltk.tokenize** **import** TweetTokenizer
**from** **nltk.stem.wordnet** **import** WordNetLemmatizerLoad training dataset to Pandas and preview the top rows.
*# load train data*
data = pd.read_csv('Sentiment Analysis Dataset.csv',
                   error_bad_lines=**False**)
data.columns = ['id','label','source','text']
data.head(2)*# get text and matching label columns*
data = data.drop(['id','source'],axis=1)
data.head(10)

  • 我们可以观察到数据确实来自 twitter 上发布的 tweet 消息。
  • 标签和文本似乎没有按照列出的顺序排列。如果数据不是随机分布的,这可能是一个问题,因为它会给学习模型带来偏差。在任何情况下,我们都将使用 Scikit Learn 库,该库具有拆分我们的训练和测试数据并同时混洗数据的功能。
  • 洗牌数据减少了方差,并确保我们的模型可以更好地概括数据,减少过度拟合。我们希望确保训练和测试数据集能够代表数据的总体分布。
  • 为此,我们还想检查数据中的标签频率分布,如下所示。
  • 我们可以观察到的另一个现象是文本包含不同的格式。一些单词包含混合的大小写字母,需要规范化为它们的基本单词。例如:‘哭’变‘哭’了。
  • 第一个字母大写的单词可以尝试,因为它们可能包含不同的特征空间,如人名或国名等。

探索标签类型的分布。

*# check the number of positive vs. negative tagged sentences*
positives = data['label'][data.label == 0]
negatives = data['label'][data.label == 1]print('number of positve tagged sentences is:  **{}**'.format(len(positives)))
print('number of negative tagged sentences is: **{}**'.format(len(negatives)))
print('total length of the data is:            **{}**'.format(data.shape[0]))

positive VS negative

  • 考虑到数据集的大小,标签似乎“大约”均匀地分布在 788435 和 790177 处,分别为正和负。
  • 接下来,我们希望看到每个句子中包含的单词数,所以我创建了一个函数来提取这些信息,并将其附加到文本列旁边的列中。下面是一个示例输出。
*# get a word count per sentence column*
**def** word_count(sentence):
    **return** len(sentence.split())

data['word count'] = data['text'].apply(word_count)
data.head(3)

word count per message

*# plot word count distribution for both positive and negative sentiments*
x = data['word count'][data.label == 1]
y = data['word count'][data.label == 0]
plt.figure(figsize=(12,6))
plt.xlim(0,45)
plt.xlabel('word count')
plt.ylabel('frequency')
g = plt.hist([x, y], color=['r','b'], alpha=0.5, label=['positive','negative'])
plt.legend(loc='upper right')

word count distribution for both positive and negative

  • 从上面的图表来看,大多数句子在 5 到 10 个单词之间,但是可以说 twitter 上的大多数文本在 1 到 25 个单词之间。考虑到 twitter 对一条消息中可以使用的字符数有限制,这就不足为奇了。在撰写本文时,280 个字符已经是极限了。
  • 总之,看起来 1-20 个单词覆盖了所有句子的 80%以上,这使得该数据集成为一个很好的训练候选集。
  • 5 个单词以内的肯定句比否定句多,这种差异目前看来还不足以引起任何关注。
*# get most common words in training dataset*
all_words = []
**for** line **in** list(data['text']):
    words = line.split()
    **for** word **in** words:
        all_words.append(word.lower())

Counter(all_words).most_common(10)

以下输出:

[('i', 741876), ('to', 556149), ('the', 516654), ('a', 374024), ('my', 309966), ('and', 294805), ('you', 236109), ('is', 229444), ('for', 212852), ('in', 209009)]
  • 在上面的单元格中,我们提取了数据集中最常见的单词,并列出了前十名。
  • 也许毫不奇怪,我们会遇到像 i、这样的词,因为它们在人类表达中使用频率很高。这种词通常在消极和积极的表达中同样出现,因此它们带来的信息很少,可以纳入模型中,所以我们必须在以后的道路上摆脱它们。
  • 在后面的文本预处理步骤中,我们将学习如何处理这些对特征空间没有太大贡献的常用词。
  • 下面的代码输出一个图表,显示前 25 个单词的频率。
*# plot word frequency distribution of first few words*
plt.figure(figsize=(12,5))
plt.title('Top 25 most common words')
plt.xticks(fontsize=13, rotation=90)
fd = nltk.FreqDist(all_words)
fd.plot(25,cumulative=**False**)*# log-log plot*
word_counts = sorted(Counter(all_words).values(), reverse=**True**)
plt.figure(figsize=(12,5))
plt.loglog(word_counts, linestyle='-', linewidth=1.5)
plt.ylabel("Freq")
plt.xlabel("Word Rank")
plt.title('log-log plot of words frequency')

  • 我还为单词频率创建了一个 双对数 图,它类似于之前的频率图,但包括所有单词,并以 10 为基数的对数标度绘制,这有助于我们可视化单词频率随着排名下降而快速减少的情况。
  • 本数据字典中出现的单词分布是大样本单词中非常常见的现象,如齐夫定律所示,其中最频繁出现的单词的出现频率大约是第二频繁出现的单词的两倍,第三频繁出现的单词的三倍,等等。
  • 如果我们从上面的观察中去掉像 **i、**和 is 这样的词,看看这是否成立将会很有趣。

第 2 部分:探索原始 Twitter 数据

在训练模型后,我们对原始 twitter 数据进行情感预测,但在此之前,我们需要下载并进行一些基本的数据清理。您可以通过关键字从 twitter RESTful API 下载推文,并获得历史推文流和元数据。我使用了 Tweepy ,这是 twitter API 的一个 python 包装器库,它可以让您更好地控制如何查询 API。你可以在 GitHub 上看到代码。

用于下载历史推文的关键词是“保罗·瑞安”,他是本文撰写时的美国众议院议长。我对这个关键字的选择是任意的,但我觉得足够好来返回一些两极分化的推文。这很重要,因为推文本身可以作为自己的基准。考虑到语言是相对的并且总是在变化的,NLP 的障碍之一是评估模型的性能。

  • 导入和预览原始数据。
*# create column names*
col_names=['date','user_loc','followers','friends','message','bbox_coords',\
           'full_name','country','country_code','place_type']*# read csv*
df_twtr = pd.read_csv('paul_ryan_twitter.csv', names=col_names)*# check head*
df_twtr.head()

我们将保留位置数据,并在以后使用它在地理地图上绘制出我们的结果。

第 3 部分:文本预处理

  • 我们希望删除数据中任何不必要的质量,这些质量会使训练好的模型成为不良的概括器。
  • 文本预处理涉及许多事情,如删除表情符号,正确格式化文本以删除文本中多余的空格或任何其他我们认为不会给我们的模型添加信息的信息。我们将在下面看到一些例子。
  • 我们还必须确保我们传递给模型的信息是计算机能够理解的格式。我们还将在下面完成其中的一些步骤。
  • 在这个预处理步骤之后,我们的数据应该准备好用于机器学习分类任务。

注意:无论我们在训练数据上做什么样的文本预处理,也必须在测试和原始数据上完成。

预处理 1:通过删除链接、特殊字符

  • 这一步我们可能会花很多时间,但目标总是找到最佳平衡。
  • NLP 中的大部分工作是在特征工程上完成的。现在我们将去掉链接和表情符号。值得一提的是,我们可以将它们用作特性,但目前我们只是在构建一个基本模型。

我创建了一个函数,使用 regex 对数据集中的每条 tweet 进行批量格式化。示例输出包含在代码中。

*# helper function to clean tweets*
**def** processTweet(tweet):
    *# Remove HTML special entities (e.g. &)*
    tweet = re.sub(r'\&\w*;', '', tweet)
    *#Convert @username to AT_USER*
    tweet = re.sub('@[^\s]+','',tweet)
    *# Remove tickers*
    tweet = re.sub(r'\$\w*', '', tweet)
    *# To lowercase*
    tweet = tweet.lower()
    *# Remove hyperlinks*
    tweet = re.sub(r'https?:\/\/.*\/\w*', '', tweet)
    *# Remove hashtags*
    tweet = re.sub(r'#\w*', '', tweet)
    *# Remove Punctuation and split 's, 't, 've with a space for filter*
    tweet = re.sub(r'[' + punctuation.replace('@', '') + ']+', ' ', tweet)
    *# Remove words with 2 or fewer letters*
    tweet = re.sub(r'\b\w{1,2}\b', '', tweet)
    *# Remove whitespace (including new line characters)*
    tweet = re.sub(r'\s\s+', ' ', tweet)
    *# Remove single space remaining at the front of the tweet.*
    tweet = tweet.lstrip(' ') 
    *# Remove characters beyond Basic Multilingual Plane (BMP) of Unicode:*
    tweet = ''.join(c **for** c **in** tweet **if** c <= '**\uFFFF**') 
    **return** tweet
*# ______________________________________________________________**# clean dataframe's text column*
df_paulry['message'] = df_paulry['message'].apply(processTweet)
*# preview some cleaned tweets*
df_paulry['message'].head()

  • 还要注意,你不可能有一套完美的清理步骤,因为一些清理步骤最终会在数据中引入一些缺陷。
  • 下面是一个前后示例,其中已从重选中删除,这改变了该词的含义,或许也改变了用户的本意。单词不会也会变成赢了显然有完全不同的意思。

我们删除重复的推文,因为它们没有给数据集带来新的信息,而且计算效率也很低。我们还将语料库中最常见的单词可视化。

**# most common words in twitter dataset*
all_words = []
**for** line **in** list(df_paulry['message']):
    words = line.split()
    **for** word **in** words:
        all_words.append(word.lower())*# plot word frequency distribution of first few words*
plt.figure(figsize=(12,5))
plt.xticks(fontsize=13, rotation=90)
fd = nltk.FreqDist(all_words)
fd.plot(25,cumulative=**False**)*# log-log of all words* 
word_counts = sorted(Counter(all_words).values(), reverse=**True**)plt.figure(figsize=(12,5))plt.loglog(word_counts, linestyle='-', linewidth=1.5)
plt.ylabel("Freq")
plt.xlabel("Word Rank")*

预处理 2:不带停用词的标记化

  • 我们的训练数据现在已经被转换成更加精简的文本体,对于特征提取来说更加清晰。正如我们之前提到的,我们在数据集中确实有一些词,它们在自然人类语言中很常见,但在大多数句子成分中使用,我们最好不要使用它们,因为它们不会给我们的模型带来有用的特征。
  • 这些词在 NLP 中通常被称为停用词,并且 NLTK 库带有一个函数,可以从数据集中过滤出这些词。以下是停用字词表中包含的实际字词。我们还可以制作自己的特殊停用词列表,以适应任何独特的情况。例如,如果您正在对法律文档进行情感分析,考虑到其中包含的法律术语在本质上是独特的,您可能需要一个特殊的集合。
**# show stop words examples*("i , me , my , myself , we , our , ours , ourselves , you , you're , you've , you'll , you'd , your , yours , yourself , yourselves , he , him , his , himself , she , her , hers , herself , it ")*
  • 在移除停用词后,我们将数据集中的所有句子进行拆分,以获得单个单词*(令牌)**,这基本上是新处理的 tweet 中包含的每个句子的单词列表。现在我们可以看到,数据帧中有两个新列,包含这些 tweet 的标记化版本。*
  • 下面是一个示例输出。
**# tokenize helper function*
**def** text_process(raw_text):
    *"""*
 *Takes in a string of text, then performs the following:*
 *1\. Remove all punctuation*
 *2\. Remove all stopwords*
 *3\. Returns a list of the cleaned text*
 *"""*
    *# Check characters to see if they are in punctuation*
    nopunc = [char **for** char **in** list(raw_text) **if** char **not** **in** string.punctuation] *# Join the characters again to form the string.*
    nopunc = ''.join(nopunc)

    *# Now just remove any stopwords*
    **return** [word **for** word **in** nopunc.lower().split() **if** word.lower() **not** **in** stopwords.words('english')] **def** remove_words(word_list):
    remove = ['paul','ryan','...','“','”','’','…','ryan’']
    **return** [w **for** w **in** word_list **if** w **not** **in** remove]*# -------------------------------------------**# tokenize message column and create a column for tokens*
df_paulry = df_paulry.copy()
df_paulry['tokens'] = df_paulry['message'].apply(text_process) *# tokenize style 1*
df_paulry['no_pauls'] = df_paulry['tokens'].apply(remove_words) *#tokenize style 2*
df_paulry.head()*

Compare the message column VS tokens column VS no_pauls.

  • 还有其他标准化技术,如 词干词汇化 ,我们可以在我们的数据上尝试,但 twitter 消息被设计得很短,上述方法可能不会很好,因为它们本质上是将单词缩短为基本单词。例如:运行运行*。*
  • 现在,我们将坚持我们的消息数据的当前规范化状态,我们现在可以将它转换成一个向量,这个向量可以输入到适当的 ML 算法中。
  • 我还创建了一个词云,描述标准化后整个 twitter 数据集中最常见的词。
  • 我们可以看到我们的关键词——Paul 和 Ryan——显然非常突出,但一些领域知识将有助于理解为什么其他一些词会在那里。毕竟这是 twitter,所以你总是可以期待各种各样的情绪。数据集中的一些单词确实使用了非常强烈的语言。单词 cloud 还排除了单词 paulryan ,因为它们在数据集中出现的频率过高。
**# split sentences to get individual words*
all_words = []
**for** line **in** df_paulry['no_pauls']: *# try 'tokens'*
    all_words.extend(line)

*# create a word frequency dictionary*
wordfreq = Counter(all_words)*# draw a Word Cloud with word frequencies*
wordcloud = WordCloud(width=900,
                      height=500,
                      max_words=500,
                      max_font_size=100,
                      relative_scaling=0.5,
                      colormap='Blues',
                      normalize_plurals=**True**).generate_from_frequencies(wordfreq)plt.figure(figsize=(17,14))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()*

Tokenized words word cloud

预处理 3:特征提取

矢量化—(单词袋)

我们将把每条由一系列符号表示的消息转换成机器学习模型可以理解的向量。

为此,我们使用了包含三个步骤的单词袋模型。

  • 1.计算一个单词在每条消息中出现的次数(称为词频)
  • 2.对计数进行加权,以使频繁出现的令牌获得较低的权重(逆文档频率)
  • 3.将向量归一化为单位长度,以从原始文本长度中提取(L2 范数)

每个向量将具有与 tweeter 语料库中的唯一单词一样多的维度。

我们将首先使用 SciKit Learn 的 CountVectorizer 函数,该函数将一组文本文档转换成一个令牌计数矩阵。

想象这是一个二维矩阵,其中一维是消息中包含的全部词汇,另一维是每条推文的一列。

由于有如此多的消息,我们可以预期数据中每个单词的出现都有很多零计数,但是 SciKit Learn 将输出一个稀疏矩阵。下面是一个矢量化句子的例子——代码和输出。

**# vectorize*
bow_transformer = CountVectorizer(analyzer=text_process).fit(df_paulry['message'])
*# print total number of vocab words*
print(len(bow_transformer.vocabulary_))# output
6865*# example of vectorized text*
sample_tweet = df_paulry['message'][111]
print(sample_tweet)
print('**\n**')*# vector representation*
bow_sample = bow_transformer.transform([sample_tweet])
print(bow_sample)
print('**\n**')*

Sample sentence in vector representation

**# transform the entire DataFrame of messages*
messages_bow = bow_transformer.transform(df_paulry['message'])*# check out the bag-of-words counts for the entire corpus as a large sparse matrix*
print('Shape of Sparse Matrix: ', messages_bow.shape)
print('Amount of Non-Zero occurences: ', messages_bow.nnz)*

Whole corpus in vector representation

术语频率,逆文档频率

  • tf-idf 代表术语频率-逆文档频率,TF-IDF 权重是信息检索和文本挖掘中经常使用的权重。该权重是一种统计度量,用于评估一个单词对集合或语料库中的文档有多重要。
  • 重要性与单词在文档中出现的次数成比例增加,但是被单词在语料库中的频率抵消。tf-idf 加权方案的变体通常被搜索引擎用作给定用户查询时对文档相关性进行评分和排序的中心工具。
  • 最简单的排名函数之一是通过对每个查询项的 tf-idf 求和来计算的;许多更复杂的排名函数是这个简单模型的变体。
  • 通常,tf-idf 权重由两项组成:第一项计算归一化项频率(tf),aka。单词在文档中出现的次数,除以该文档中的总单词数;第二项是逆文档频率(IDF ),计算为语料库中文档数量的对数除以特定术语出现的文档数量。
  • TF:术语频率,衡量一个术语在文档中出现的频率。因为每个文档的长度不同,所以一个术语在长文档中出现的次数可能比短文档多得多。因此,术语频率通常除以文档长度(又名。文档中的术语总数)作为标准化的一种方式:

TF(t) =(术语 t 在文档中出现的次数)/(文档中的总术语数)。

  • IDF:逆文档频率,衡量一个术语的重要程度。在计算 TF 时,所有项都被认为是同等重要的。然而,众所周知,某些术语,如“是”、“的”和“那个”,可能会出现很多次,但并不重要。因此,我们需要通过计算以下各项来降低常用术语的权重,同时提高罕见术语的权重:

IDF(t) = log_e(文档总数/包含术语 t 的文档数)。

  • 下面是一个简单的例子。
  • Example: Consider a document containing 100 words wherein the word cat appears 3 times. The term frequency (i.e., tf) for cat is then (3 / 100) = 0.03\. Now, assume we have 10 million documents and the word cat appears in one thousand of these. Then, the inverse document frequency (i.e., idf) is calculated as log(10,000,000 / 1,000) = 4\. Thus, the Tf-idf weight is the product of these quantities: 0.03 * 4 = 0.12.
**# from sklearn.feature_extraction.text import TfidfTransformer*
tfidf_transformer = TfidfTransformer().fit(messages_bow)
tfidf_sample = tfidf_transformer.transform(bow_sample)
print(tfidf_sample)*

  • 我们将继续检查单词“trump”和单词“gop”的 IDF ( 逆文档频率)是多少?
**# some IDF (inverse document frequency) example*
print(tfidf_transformer.idf_[bow_transformer.vocabulary_['trump']])
print(tfidf_transformer.idf_[bow_transformer.vocabulary_['gop']])*

  • 为了将我们的整个 twitter 单词库一次转换成 TF-IDF 语料库,我们将使用下面的代码:
**# to transform the entire bag-of-words corpus*
messages_tfidf = tfidf_transformer.transform(messages_bow)
print(messages_tfidf.shape)# Output
(4164, 6865)*
  • 在对数据进行预处理之后,我们现在准备让它通过一个 ML 分类算法。
  • 这就结束了我们工作流程的文本预处理阶段,但是我们将在这里继续的下一部分中作为流水线中的一步重新审视这些步骤。

这就是推特如何看待世界:情感分析第二部分

原文:towardsdatascience.com/the-real-wo…

image by Deepthiyathiender

这篇博客文章是上一篇文章的延续,上一篇文章讲述了机器学习(ML)情感分析任务的文本预处理的内部工作。在这篇文章中,我们将把来自集 140 的数据分成训练集和测试集。在训练模型之后,我们将使用它来对未见过的 twitter 数据进行情感分类,这些数据已经以与训练数据相同的方式进行了预处理。

第一部分:模型训练

朴素贝叶斯分类器

在这个分类任务中,我们将使用基于贝叶斯定理朴素贝叶斯(NB) 分类器。简而言之,NB 分类器假设一个类中特定特征的存在与任何其他特征的存在无关。因此,举例来说,如果一个水果是橙色的,圆形的,直径约为 3 英寸,那么它就可以被认为是橙子。朴素贝叶斯分类器认为这些“特征”(橙色、圆形、直径 3 英寸)中的每一个都独立地影响水果是苹果的概率,而不考虑特征之间的任何相关性。然而,特征并不总是独立的,这通常被视为朴素贝叶斯算法的缺点,这也是它被标记为“朴素”的原因。然而,它理解、构建和训练相对简单,而且速度非常快,这使得它成为情感分类的良好候选。

贝叶斯定理提供了一种从 P(c),P(x)和 P(x|c)计算后验概率 P(c|x)的方法。看下面的等式:

- P(c|x) is the posterior probability of class (c, target) given predictor (x, attributes).
- P(c) is the prior probability of class.
- P(x|c) is the likelihood which is the probability of predictor given class.
- P(x) is the prior probability of predictor.

创建管道来一步管理预处理步骤

  • Scikit Learn 提供了一个管道功能,允许您定义一个管道工作流,该工作流将采取上述所有步骤,甚至是一个分类器和网格搜索参数。
  • 管道使代码更具可读性,并使交换管道片段变得容易(管道片段可以包含其他 ML 算法并尝试不同的配置)。
  • 管道还允许对模型工作流进行交叉验证。
  • 通过确保使用相同的样本来训练转换器和预测器,管道还有助于避免在交叉验证中将测试数据中的统计数据泄漏到训练模型中。

交叉验证:

  • 训练好模型的推荐方法是首先使用训练集本身的一部分进行交叉验证,以检查您是否使用了容量过大的模型(即模型是否过度拟合数据)。
  • 为了同时交叉验证和选择最佳参数配置,我们使用了 GridSearchCV。
  • 这使我们能够轻松地测试不同的超参数配置,例如使用 KFold 策略将模型分成随机部分,以确定它是泛化得好还是过度拟合。
  • GridSearchCV 允许您使用要迭代的超参数配置值定义 ParameterGrid。对所有组合进行测试和评分,并返回最佳模型。
  • 对于我们的例子,有 4 + 2 + 2 个参数组合要测试,有 10 kfold 验证,因此模型将在验证集上训练和测试 8 x 10 = 80 次。
*# Run Train Data Through Pipeline analyzer=text_process*
*# uncomment below to train on a larger dataset but it's very slow for a slower machine.**# X_train, X_test, y_train, y_test = train_test_split(data['text'], data['label'], test_size=0.2)*
X_train, X_test, y_train, y_test = train_test_split(data['text'][:5000], data['label'][:5000], test_size=0.2)*# create pipeline*
pipeline = Pipeline([
    ('bow', CountVectorizer(strip_accents='ascii',
                            stop_words='english',
                            lowercase=**True**)),  *# strings to token integer counts*
    ('tfidf', TfidfTransformer()),  *# integer counts to weighted TF-IDF scores*
    ('classifier', MultinomialNB()),  *# train on TF-IDF vectors w/ Naive Bayes classifier*
])*# this is where we define the values for GridSearchCV to iterate over*
parameters = {'bow__ngram_range': [(1, 1), (1, 2)],
              'tfidf__use_idf': (**True**, **False**),
              'classifier__alpha': (1e-2, 1e-3),
             }*# do 10-fold cross validation for each of the 6 possible combinations of the above params*
grid = GridSearchCV(pipeline, cv=10, param_grid=parameters, verbose=1)
grid.fit(X_train,y_train)*# summarize results*
print("**\n**Best Model: **%f** using **%s**" % (grid.best_score_, grid.best_params_))
print('**\n**')
means = grid.cv_results_['mean_test_score']
stds = grid.cv_results_['std_test_score']
params = grid.cv_results_['params']
**for** mean, stdev, param **in** zip(means, stds, params):
    print("Mean: **%f** Stdev:(**%f**) with: **%r**" % (mean, stdev, param))

  • 我们向 GridsearchCV 对象传递了 8 个参数和 10 个用于交叉验证的折叠参数,这意味着对于每个参数组合,网格将运行 10 次不同的迭代,每次使用不同的测试集。
  • 在尝试了不同的模型参数组合之后,GridsearchCV 返回了性能最佳的模型,我们可以用它来对新的(twitter)数据进行分类。我们将下面的模型保存到工作目录中,以便将来在不重新训练它的情况下检索训练过的模型。
  • 如果您计划将模型部署到其他地方,比如移动应用程序或 web 应用程序,那么保存模型也是一个必要的步骤。

第 2 部分:模型评估

在下面的代码中,我们将在测试维持数据集上测试我们的训练模型。

*# save best model to current working directory*
joblib.dump(grid, "twitter_sentiment.pkl")*# load from file and predict using the best configs found in the CV step*
model_NB = joblib.load("twitter_sentiment.pkl" )*# get predictions from best model above*
y_preds = model_NB.predict(X_test)print('accuracy score: ',accuracy_score(y_test, y_preds))
print('**\n**')
print('confusion matrix: **\n**',confusion_matrix(y_test,y_preds))
print('**\n**')
print(classification_report(y_test, y_preds))

  • 在上面的单元格中,我使用了最佳模型来对看不见的测试数据进行预测,这让我们可以对性能指标进行分级和检索。
  • 我们可以从上面得到的一些性能指标包括分类报告和混淆矩阵。
  • 一个混淆矩阵(CM) 非常简单明了,但下面是解释它以及得出分类报告的关键:

根据上面的精度指标:

  • 95%是模型在数据集中所有标签中预测正确标签的次数。
  • 当数据中类的分布非常均衡时,准确性可以让您很好地了解模型的执行情况。

来自混淆矩阵:

  • 该模型将 553 个标签正确预测为阴性,将 799 个标签正确预测为阳性。
  • 我们还得到 4 个预测为阳性的标签,尽管它们是阴性的(假阴性)。
  • 从 CM 中我们可以知道的另一件事是,模型预测 62 个标签为阴性,但它们结果是阳性(假阳性)。

来自分类报告:

可以从混淆矩阵中的度量获得的分类报告给出了关于模型性能的更详细的信息。

  • 精度:标签 0 为 99%,标签 1 为 93%。这个数字告诉我们在该类别的所有预测中,正确预测的标签所占的比例。
  • 回忆:标签 0 为 90%,标签 1 为 100%。这是该类别的真实标签中正确预测的数量。
  • f1 -score :这是该类的精度和召回率的加权平均值。它通常给出该标签的模型表现的更大画面,并且显然该数字越高越好。标签 0 为 94 %,标签 1 为 96%。0 表示消极情绪,1 表示积极情绪。
  • 从上述指标来看,该模型似乎表现得相对较好,尽管它在预测类 0 的正确标签方面可以做得更好。
  • 根据研究,由于评分者之间的可靠性问题,人类评分者通常同意 80%的时间【Roebuck,k .(2012–10–24】】。
  • 因此,一个 70%准确的程序做得几乎和人类一样好,即使这样的准确性可能看起来并不那么令人印象深刻。如果一个程序在 100%的时间里都是“正确的”,人类仍然会在 20%的时间里不同意它,因为他们对任何答案都不同意。
  • 我们还可以将我们的模型与类似的工作进行比较,这些工作对情感分析和情感标签的二元分类进行了广泛的研究。最终的模型是基于支持向量机( SVM )并进而达到 79.08%的准确率。
  • 到目前为止,我们已经采取措施来避免过度拟合我们建立模型管道的方式,但最终真正的测试是在看不见的数据上测试模型。

第 3 部分:真实世界的模型性能

下一步,我想用我们的模型对通过 twitter API 获得的数据进行情感预测,并评估它的性能。预测和预览结果是在下面的代码中完成的。

*# run predictions on twitter data*
tweet_preds = model_NB.predict(df_twtr['message'])*# append predictions to dataframe*
df_tweet_preds = df_twtr.copy()
df_tweet_preds['predictions'] = tweet_preds
df_tweet_preds.shape# Output
(4164, 8)

查看下面的一些示例预测。

0 =正,1 =负。

*# print text and sentiment*index = random.sample(range(tweet_preds.shape[0]), 20)
**for** text, sentiment **in** zip(df_tweet_preds.message[index],
                           df_tweet_preds.predictions[index]):
    print (sentiment, '--', text, '**\n**')#------------------------------
# SAMPLE PREDICTIONS BELOW    #
#------------------------------0 -- Spot on correct. The Paul Ryan Story: From Flimflam to Fascism [https://t.co/BPwrobl0aS](https://t.co/BPwrobl0aS)0 -- .@Varneyco @charleshurt   Paul Ryan didn't get Tax Reform.  Donald Trump got Tax Reform.  Boy George could have bee… [https://t.co/vGmRJWQnlG](https://t.co/vGmRJWQnlG)1 -- @HumanBeings1st @LotraineH Paul Ryan is cold-hearted👎🏼👹He hates Social Security and Medicare and Medicaid and has t… [https://t.co/oQAXvfEuLI](https://t.co/oQAXvfEuLI)0 -- Paul Ryan is an unconvincing charlatan whose primary goal in life has been to make life harder for poor people. The… [https://t.co/yyK80Tsgmz](https://t.co/yyK80Tsgmz)0 -- absolutely delish...#winningMeghan McCain Erupts After Audience Cheers Paul Ryan Retirement: ‘You Deserve Trump’ [https://t.co/7s2AUVGrgp](https://t.co/7s2AUVGrgp)0 -- Is anyone surprised Paul Ryan isn’t going to run? #morningjoe0 -- @CNN If the Repubs stand by and continue to let the lunatic run the asylum, then they are accountable, if the Repub… [https://t.co/uNNkd9yljp](https://t.co/uNNkd9yljp)0 -- .@IronStache wins eight months early [https://t.co/7txWs0YvER](https://t.co/7txWs0YvER)

下面,我在互联网上的一些文本上测试了这个模型,以更好地了解它在一些随机数据上的表现。

*# Testing random text from the internet**# load model*
model_NB = joblib.load("twitter_sentiment.pkl" )*# test string*
sample_str = """While ride-sharing first mover Uber has fallen on tough times with
scandal and abyssal track records of leadership, and cash burning
growth-orientated practices, the world has caught up with self-driving
tech with many players now in the race."""p = model_NB.predict([sample_str])*# formatting helper*
**def** sentiment_str(x):
    **if** x==0:
        **return** 'Negative'
    **else**:
        **return** 'Positive'
*#_____________________________________________**# test result ___ 0=Negative, 1=Positive*
print("the sentence: **\n\n**'**{}**' **\n\n**has a **{}** sentiment".format(sample_str,sentiment_str(p[0])))

观察

  • 我在上面的单元格中可视化了由我们的模型分类的 10 个 tweets 示例,这些示例看起来执行得基本正确,但有时会令人尴尬地失败。
  • 当在非 twitter 文本上测试时,该模型似乎拾取了许多嵌入的情感,但需要更多工作来从所述文本中提取一般结论。例如,我们可能需要对整个段落进行训练,而不仅仅是一句话。
  • 关于情感分析的一个棘手的问题是,即使该模型在一些基准上表现良好,最终的表现也将不得不留给难以量化的实际人类法官。
  • 话虽如此,我查看了许多随机的负面分类和正面分类的推文,有一些非常好的分类,还有一些分类似乎不属于任何地方。这也让我觉得我们应该探索第三种分类。所以我们会有积极、消极和中性的情绪
  • 虽然我认为模型已经完成了一些学习,但我认为我们可以通过调整模型的参数、探索其他算法或创建算法集合来做得更好。

比较 twitter 数据上的模型预测统计

pos = df_tweet_preds.predictions.value_counts()[0]
neg = df_tweet_preds.predictions.value_counts()[1]print('Model predictions: Positives - **{}**, Negatives - **{}**'.format(neg,pos))*# save dataframe with appended preditions* 
df_tweet_preds.to_pickle('paulry_predicts_df.p')

第 7 部分:地质图、最终想法和结论

  • 在这一部分,我们还创建了下载推文的地理可视化,这是数据故事的重要组成部分。
  • 在训练任何 ML 模型时,一个重要的部分是能够以促进利益相关者决策的方式呈现我们的发现。
  • 我们将加载包含预测的数据框架,并探索国家和美国各州的分布,特别是因为我们的 twitter 数据围绕着美国新闻。
  • 值得一提的是,我们的数据集在发展过程中存在一些限制。大多数 twitter 用户不广播他们的地理位置,但我们的搜索标准只提取了启用了位置信息的推文。
  • 因此,我们可能错过了很多推文,这些推文描绘的画面可能与我们在地图上绘制的画面不同。了解这一点不仅对解释结果至关重要,而且对理解我们如何使模型更加稳健也至关重要。
*# load dataframe with predictions*
df = pd.read_pickle('paulry_predicts_df.p')*# get all the countries in dataset*
df.country.unique()

*# get top countries in the dataset by percentage of tweets*
df.country.value_counts(1).head(10)

在[132]:

*# plot histogram of tweets counts by country of origin*
sns.set_style("darkgrid")
x = df.country.value_counts(1).head(20)
x.plot(kind='bar',figsize=(10,6),fontsize=13,color='steelblue')
plt.ylabel('**% o**f Total Tweets', fontsize=13)

  • 正如我们所怀疑的,绝大多数推文来自美国。接下来,我们将通过状态计数来获取状态。
*# get latitudes and longitudes**# some helper funtions to get longs and lats*
**def** lats(x):
    **return** x[1]**def** longs(x):
    **return** x[0]*# --------------------------------------------------------#*
*# append longs and lats to dframe*
df['latitude'] = df['geo_code'].apply(lats)
df['longitude'] = df['geo_code'].apply(longs)
df.columns

*# for US tweets extract state abbreviations for a new STATE column*
*# helper function to extract state origin of every tweet*
**def** get_state(x):

    states = ["AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DC", "DE", "FL", "GA", 
              "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD", 
              "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", 
              "NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC", 
              "SD", "TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY"]states_dict = {
            'AK': 'Alaska','AL': 'Alabama','AR': 'Arkansas','AS': 'American Samoa',
            'AZ': 'Arizona','CA': 'California','CO': 'Colorado','CT': 'Connecticut',
            'DC': 'District of Columbia','DE': 'Delaware','FL': 'Florida','GA': 'Georgia',
            'GU': 'Guam','HI': 'Hawaii','IA': 'Iowa','ID': 'Idaho','IL': 'Illinois',
            'IN': 'Indiana','KS': 'Kansas','KY': 'Kentucky','LA': 'Louisiana',
            'MA': 'Massachusetts','MD': 'Maryland','ME': 'Maine','MI': 'Michigan',
            'MN': 'Minnesota','MO': 'Missouri','MP': 'Northern Mariana Islands',
            'MS': 'Mississippi','MT': 'Montana','NA': 'National','NC': 'North Carolina',
            'ND': 'North Dakota','NE': 'Nebraska','NH': 'New Hampshire','NJ': 'New Jersey',
            'NM': 'New Mexico','NV': 'Nevada','NY': 'New York','OH': 'Ohio','OK': 'Oklahoma',
            'OR': 'Oregon','PA': 'Pennsylvania','PR': 'Puerto Rico','RI': 'Rhode Island',
            'SC': 'South Carolina','SD': 'South Dakota','TN': 'Tennessee','TX': 'Texas',
            'UT': 'Utah','VA': 'Virginia','VI': 'Virgin Islands','VT': 'Vermont',
            'WA': 'Washington','WI': 'Wisconsin','WV': 'West Virginia','WY': 'Wyoming'
    }abv = x.split(',')[-1].lstrip().upper()
    state_name = x.split(',')[0].lstrip()
    **if** abv **in** states:
        state = abv
    **else**:
        **if** state_name **in** states_dict.values():
            state = list(states_dict.keys())[list(states_dict.values()).index(state_name)]
        **else**:
            state = 'Non_USA'    
    **return** state*# ____________________________________________________________________________**# create abreviated states column*
df = df.copy()
df['states'] = df['full_name'].apply(get_state)
list(df['states'].head())

输出:

['Non_USA', 'PA', 'FL', 'NY', 'FL']

在下面创建一些可视化效果。

*# save updated dataframe*
df.to_pickle('df_paulry_longs_lats.p')*# retrive updated dataframe*
df = pd.read_pickle('df_paulry_longs_lats.p')*# plot tweets distribution by state*plt.style.use('seaborn-darkgrid')
df_states = df[df.country=='United States']
df_states = df_states[df_states.states!='Non_USA']x = df_states.states.value_counts()
x.plot(kind='bar',figsize=(14,6),fontsize=12,color='steelblue')
plt.ylabel('Origin of Tweets', fontsize=13)

  • 从上面我们可以看到大多数推文来自哪里,看起来可能与人口数量和州的大小有关。
  • 接下来,我们通过将积极和消极相加来提取每个状态的总体情绪,最后的数字就是指标。
  • 我们将使用每个州的总体情绪来创建一个热图,显示从最消极到最积极的状态。

*# Create the sentiment by state Heat Map*colorscale=[
            [0, 'rgb(31,120,180)'], 
            [0.35, 'rgb(166, 206, 227)'], 
            [0.75, 'rgb(251,154,153)'], 
            [1, 'rgb(227,26,28)']
           ]data = dict(type='choropleth',
            colorscale = colorscale,
            reversescale=**True**,
            locations = df_state_sentiment['states'],
            z = df_state_sentiment['total_sentiment'],
            locationmode = 'USA-states',
            text = df_state_sentiment['states'],
            marker = dict(line = dict(color = 'rgb(255,255,255)',width = 2)),
            colorbar = {'title':"Twitter Sentiment"}
            )layout = dict(title = 'Twitter Sentiment: GOP House Speaker: Paul Ryan',
              geo = dict(scope='usa'
                        )
             )choromap_us = go.Figure(data = [data],layout = layout)*# plotly.offline.plot(choromap_us, filename='img_map.html')  # save html map*
IFrame('img_map.html', width=950, height=700)  *# view saved map html file*

  • 总情绪是通过对每个州的积极和消极因素求和得出最终数字。
  • 从上面的热图中,我们可以做出一些有趣的观察。
  • 从地图右侧的色标来看,蓝色过渡到红色,表示积极到消极的情绪。该量表实际上是从 0 开始的,因为没有一个州的总体情绪是积极的。所以我们赤字越多,情绪就越消极。
  • 纽约和加州对这个关键词搜索的负面情绪最大。请记住,纽约和加州的推特用户最多,这很可能会扭曲上面的图片。
  • 因此,我觉得这张热图不太可靠,但它是探索 情绪 vs状态可视化的良好起点。
  • 接下来,我们将看到另一个热图,我们将根据各自的地理位置数据绘制数据集中的每条推文。
*# use the folium library to create all tweet origins in the dataset on map of US*geoplots = []
**for** index, row **in** df_states[['latitude','longitude','predictions']].iterrows():
    geoplots.append([row['latitude'],row['longitude'],row['predictions']])mus = folium.Map(location=[39, -99], zoom_start=4)
plugins.Fullscreen(
    position='topright',
    title='Expand me',
    title_cancel='Exit me',
    force_separate_button=**True**).add_to(mus)mus.choropleth(
    geo_data='us_states.geojson',
    fill_color='red', 
    fill_opacity=0.1, 
    line_opacity=0.2,
    name='US States')

mus.add_child(plugins.HeatMap(geoplots,
                            name='Twitter HeatMap',
                            radius=10,
                            max_zoom=1,
                            blur=10, 
                            max_val=3.0))
folium.TileLayer('cartodbpositron').add_to(mus)
folium.TileLayer('cartodbdark_matter').add_to(mus)
folium.TileLayer('Mapbox Control Room').add_to(mus)
folium.LayerControl().add_to(mus)
mus.save("twitter_us_map.html") 
IFrame('twitter_us_map.html', width=960, height=520)

  • 上面的美国地图显示,许多推文来自这些人口密度高的地区。
  • 充其量,地图给我们提供了一种方式来查看推文来自哪里,下一步将根据它们的情感值来映射它们,以便更好地表达情感。
  • 我们还可以在地图上添加一个时间维度,以可视化推文,因为它们在时间序列中实时发生,这将是一个跟踪相关方感兴趣的主题的伟大工具。这种工具以前在总统竞选和自然灾害中使用过。

结论

  • 到目前为止,对于情绪分析模型来说,我们的模型表现得相对较好,其准确率为 76% ,但我们还可以做很多事情来提高对这种表现的信心。
  • 我认为这是一个很好的基本模型,可以通过试验以下建议来提高其性能:
  • 可以对训练语料库执行额外的数据归一化。我们从训练数据中移除了停用词,但我们也可以尝试使用词干词汇化,这两种方法都是基于词根或基本词来分析语料库中的单词。
  • 我们还可以尝试不同的单词标记方法,特别注意大写单词和特殊字符。
  • 表情符号也可以用来提取更多的文本内容。
  • 尝试使用多类标签来容纳所有可以通过文本传达的人类情感。例如:悲伤、快乐、兴奋、厌烦等..
  • 考虑其他 ML 算法,如支持向量机、决策树、神经网络等,甚至这些算法的集合。
  • 最后,我想知道在不同的主题上训练一个模型并为不同的数据集选择最相关的一个是否有益。例如,在广泛的法律文档库上训练的用于法律的模型,或者在体育相关文本上训练的用于体育的模型,比如与体育和体育名人相关联的推文。当然,对于实验和随后的评估来说,这方面的基础无疑是丰富的。

这篇文章的代码和更多内容可以在我的 GitHub 获得。

如何访问未发布的数据集

原文:towardsdatascience.com/the-real-wo…

因为“真实世界”不是 Kaggle…

aggle 以透明和无与伦比的方式向数据科学家提供了大量真实世界的数据集。不幸的是,随着越来越多的新数据科学家依赖 Kaggle 向他们提供数据,他们错过了发展我们领域最重要的技能之一:搜寻和获取难以找到或私人持有的数据集。

这篇文章将帮助你发现未发表的数据集,并教你一个简单的“提问和获取”的框架。

我什么时候需要找到获取数据集的方法?

最终你会需要数据,而谷歌搜索不足以获得这些数据。这个周末就发生在我身上。它会发生在你身上。

作为一名员工:(企业或公司内部的)数据经常会被隔离,由不同的个人或部门持有。理解简单的模式来识别和有说服力地联系有权共享这些数据的关键利益相关者,对于及时完成任务至关重要。

**作为一名企业家:**对于希望验证产品创意的数据驱动型企业家来说,做出明智决策所需的数据通常已经以某种形式存在——无论是学术形式还是专业形式——但它们有时隐藏在昂贵的付费墙后面,或者只能在有限的范围内公开获取。知道如何找到并访问它可以节省时间和金钱。

**作为一名学者:**在学术界,发现、记录和发布以前未知的知识需要勤奋地寻求&对每一个假设和主张的质疑,以发现突破的机会。如果不了解基本的沟通,学术风险是“发现”一些已知的东西,甚至浪费时间和研究资源。

这个周末,我就有过这样的经历。吃饭时,一位朋友问道:“有没有可能去除波旁威士忌中的酒精,同时又不失去其复杂的味道和气味?”

当我开始用谷歌搜索时,我很快意识到我能找到的唯一答案是我自己决定的。带着这个问题,我陷入了困境。

第 1 阶段—确定您需要的问题/数据

明确你的问题

这是最重要的部分。你问的问题通常定义了你需要的信息。这也限制了你试图获取的数据的范围,而当你要求一个根本没有义务回应你的要求的人时,这些数据是有帮助的。

谷歌一下或者做个内部网搜索

作为数据科学家,我们已经非常擅长谷歌搜索和基于启发式的信息搜索。在公司环境中,使用你的内部工具和文档。对于学者和企业家来说,谷歌学术是无价的。

在问别人之前进行彻底的搜索是很重要的,以确保你的问题是可靠的,并向他们表明你尊重他们的时间。这也有助于在数据集搜索时请求访问时建立信任。

我的研究导致了一些关于波旁威士忌中化合物分子量的有希望的研究。结果我的问题演变了。它帮助我进一步确定了一项看起来特别有前途和有用的研究和数据集。

使用人际互动

事实上,与人交谈可能会令人生畏,但这往往会影响我们获取高质量信息的速度。

media.giphy.com/media/24xRx…

一个简单的电话、电子邮件或 DM 是开始的地方。

老实说,只要你礼貌而中肯,几乎没有错误的方法。

就得做。

一旦你定义了你的问题,并确定了谁有权访问你所需要的数据(或者谁可能知道谁有权访问你所需要的数据),那么你就可以进入第二阶段。

第 2 阶段——询问你找到的人,并通过询问找到

问&找

无论是电子邮件还是电话,模板都大同小异: 有礼貌、直截了当地传达“询问”信息。

My “Ask” email to the bourbon study researcher.

记住:

传达出你对他们的工作和他们努力收集的数据感兴趣。这会让他们兴奋起来,并帮助他们关心你。

做人吧。确保你写的每封邮件都是专门给那个人的。你不希望你的邮件给人的感觉是机械的或者缺乏感情。

不要让人们做任何会给他们带来麻烦的事情。你也应该清楚而真实地陈述你对这些数据的意图。

如果没有得到回应,第二天继续跟进。简单的说“嗨 __,你收到我的邮件了吗?”你不会试图向他们推销任何东西,所以不要犹豫,要坚持。简单礼貌的跟进是关键。

简单的电子邮件通常会很快得到回复。如果你很快收到回复,假设他们的时间不多,立即跟进。

The individuals with the data are an invaluable resource. Time is their limited resource.

找&问

一旦你开始谈话,你就进入了最后阶段。你会发现这个阶段的人都很乐于助人。你可能最终会与他们来回发送电子邮件来寻找正确的数据,但这个过程有助于你确定你真正需要的数据。

Success! A better dataset than I could have ever found on my own.

如果你进入了对话的死胡同或者得到了“不”,一定要跟进,询问他们是否可以为你提供任何其他有用的数据集,或者他们是否知道任何其他可以找到你需要的数据的资源。人们几乎总是会尽力帮忙,因为这减轻了不得不对别人说“不”的严重性。

不要害怕问一些关于数据集的简单问题,看看他们有什么额外的数据。运气好的话,他们会帮你找到你需要的数据集,并帮你节省大量时间。

有些询问会引导你找到一个数据集,有些会引导你去问一个新的人,但不管你找到谁或什么 都要记得说谢谢。

The most important email — the Thank You.

我自己对 bourbon 数据集的搜索由于这几个技巧而成功结束。

请记住,你是在要求别人分享他们可能花了比你多 1000 倍的时间去做/看的东西。

如果你给他们的工作带来热情,他们会回报你的。

作为一名数据科学家,如果你有任何其他写冰冷邮件的技巧,请在评论中分享。

再现性危机以及为什么它对人工智能有害

原文:towardsdatascience.com/the-reprodu…

2016 年《自然》的一项调查显示,超过 70%的研究人员试图重现另一位科学家的实验,但失败了,超过一半的人没有重现自己的实验。这一令人担忧的发现对数据科学产生了影响,在数据科学中,越来越多的同类问题正在涌现。在最近对铽实验室首席技术官 Clare Gollnick 的采访中,我讨论了科学中所谓的“再现性危机”的含义及其对数据科学家的影响。

绝对值得去看看完整采访。克莱尔很好地解释了再现性危机,并就这个问题如何影响人工智能从业者提供了深刻的见解。

Subscribe: iTunes / SoundCloud / Google Play / Stitcher / RSS

以下是她的一些主要观点的简要概述:

  • **数据钓鱼和黑客攻击。**再现性危机的一个促成因素是“p-hacking”——即在确定潜在因果关系的特定假设之前,检查一个人的实验数据,直到发现符合统计显著性标准的模式。P-hacking 也被称为“数据钓鱼”,这是有原因的:您正在从您的数据逆向工作到一个模式,这打破了最初决定统计显著性的假设。
  • 深度学习不透明。Gollnick 指出,数据钓鱼正是机器学习算法所做的——它们从数据逆向工作到模式或关系。因此,你可以说 p-hacking 本质上相当于 ML 中的过度拟合。数据科学家很清楚,交叉验证是纠正这个问题的必要实践。但是人工智能中仍然存在大量的可复制性问题。Pete Warden 最近发表的一篇博客文章谈到了数据科学家和其他从业者面临的一些核心挑战。Warden 提到了当前 ML 和深度学习方法的深度迭代性质,以及数据科学家不容易记录他们在每次迭代中的步骤的事实。此外,深度学习的数据科学堆栈有许多移动的部分,这些层中任何一层的变化——深度学习框架、GPU 驱动程序或训练或验证数据集——都可能影响结果。
  • 数据科学的哲学。 Gollnick 和其他相关的数据科学家一致主张更深入地理解我们使用的模型如何以及为什么工作。这样做可能意味着重新审视科学方法的基础,探索“数据哲学”。也就是对科学知识的哲学探索,它对某些事情意味着什么,以及数据如何支持这些。显而易见,任何迫使我们面对关于可解释性、因果性和确定性等问题的棘手问题的思维练习,在我们扩大现代机器学习方法的应用时,都可能具有巨大的价值。

ML 和 AI 中的再现性问题是每个数据科学家都应该关注的问题,因为它的影响深远。如果你想了解更多关于这个问题的信息,或者对 Gollnick 或我有任何意见,请访问我们的节目页面,收听完整的播客并加入讨论。

2018 年 4 月 17 日编辑:格式修复。纠正深度学习是“一个黑匣子”到“不透明;前者是过于强烈的描述,而且不准确。

原载于 2018 年 3 月 22 日twimlai.com

“正确答案”偏差和统计问题

原文:towardsdatascience.com/the-right-a…

假设你将一枚硬币抛 10 次,得到 6 个头。概率 P(H |观测值)是多少(正确答案)?

答案肯定不是。6。其实我们根本不知道答案是什么。根据我们所看到的情况,概率 0 . 6 是最有可能的答案,但考虑到我们的样本量是如此之小,它并不比 0 . 5 或 0 . 7 更好。

增加样本量可能有助于我们更好地提炼答案,但没有没有统计学背景的人(甚至那些只是肤浅地了解的人)在看到观察结果的第一眼可能会想到的那么快。如果我们在 100 次抛硬币中得到 63 个正面,这将意味着 0.6 可能比 0.5 好得多,但这并不一定意味着 0.63 一定比 0.6 好得多。(确实意味着. 63 是比. 6 更好的答案,只是好不了多少,不足以用足够的信心来证明这个论断。)

原则上,每个人都应该知道这一点,特别是考虑到统计发现的每一个主张都带有误差幅度,我们在每门入门课程中都教授计算误差幅度的公式。但我认为这种解释通常是用一种令人困惑和误导的语言表达的。举一个简单的例子,如果我们声称 P(X) = .6 +/- .02,这并不意味着概率(以观察为条件)仅在区间(. 58,. 62)上均匀分布,许多人似乎含蓄地认为是这样,而是 P(X) < .58 is smaller than 2.5%, as per statistical convention. The probability that P(X) is, in fact, .57 is not much smaller than that it is .581, despite the latter being supposedly within the margin of error. Conversely, the probability that P(X) is in fact .6 is much greater than that it is .581, with the big caveat that the distribution of the observations are well behaved (which is where the really big can of worms resides.)

While this might seem simple, the same problem lies with interpretations of, among other things, coefficients of linear regressions. So you find that a coefficient is “significant.” What the heck does it really mean? A coefficient of b on variable x is usually taken to mean a change of b in the value of y for one unit change in the value of x, which is true, technically, but的概率仅在平均上均匀分布。限定词“平均”是这里的关键:x 值的单位变化可以很容易地导致 b+q 的 y 的变化,有一定的概率。这就是标准误差的用途——帮助你计算 b+q 在 y 中变化的概率,假设数据的分布符合教科书统计学的便利假设,你应该多次被提醒,这些假设的存在只是为了使解释简单,而不是让“噪音”分散你的注意力,而“噪音”在现实生活中可能非常重要。

我们可以考虑故意和肆意违反这些便利假设的情况。为了便于说明,让我们编造一些数据:

set . seed(0) a<-r norm(1000,10,10) b < -rnorm(1000,10,1) c < -rnorm(1000,10,1) x0<-runif(1000)* 20 x1<-runif(1000)* 100–50 x2<

我们所做的是在 y 和标记为 x0 到 x3 的 4 个变量之间创建一组关系,x1 到 x3 上的系数具有相同的均值,但不同的方差。通过构造,违反了同伦假设:x(任意 x)的值越大,误差就越大。但是 x1 的值越大,误差就越大。这可以通过比较下面的图来说明。此外,我对数据进行了设置,使 x1 对 y 的影响比 x2 或 x3 大得多,这并不是因为 x2 或 x3 的单位增加影响较小,而是因为 x1 的取值范围比 x2 或 x3 大得多。

y vs. x1

y vs x2

y vs x3

这里有两点:只看 y,每个 x 都淡化了他们之间的真实关系。x3 每增加一个单位,y 就会增加 10 倍。实际上,x3 的取值范围很窄(x1 的 1/10),以至于它对 y 的影响被 x1 的影响淹没了。其次,平均而言,x1 值的增加会导致 y 值增加 10,但没有什么理由认为 x1 值(绝对值)越大,y 值的变化就会越小或越大,因为数据生成过程中存在异方差关系。对于较小的 x1 值,该模型相当不错。对于较大的值,这是相当糟糕的。

一个简单的线性模型(错误地)提供了一个误导的印象:

由于 x1 具有最宽的范围,它似乎以最大的一致性影响 y 的值,如最小的估计标准误差所捕获的,即使其“真实”系数从结构上来说是最大的噪声。范围最小的 x3 做的最少。当然,这反映了这样一个事实,即线性回归并不是真正用于估计噪声,而是均值,它是用于预测一个点,而不是测量分布。事实上,标准误差不是与系数相关的(估计)噪声量的估计值,而是估计系数的精度度量。

这组例子是为了说明在排除噪音的情况下,过多地寻找“正确”答案所产生的问题。给定数据生成过程的细节,“正确的”答案并不存在,只有比其他答案更正确的一些答案——但这种正确本身并不存在,而且只在特定条件下存在。虽然在上面的例子中,x 对 y 的影响的正确答案是 10,但对于 x1、x2 和 x3 也是如此。由于 x1 的噪声系数,这是最不正确的答案。对于所有三种情况,10 作为答案的有用性取决于 x 的值,因为模型内置了异方差性,但对于 x1 的大值来说,这尤其是一个大问题,这也是因为噪声的幅度以及 x1 取值的宽范围。作为一种预测工具,该模型在 x2 上更好,在 x3 上甚至更好,但我们无法通过查看数据来确定这一点。虽然绘制残差图应该告诉我们,对于较小的 x1 值,该模型作为预测工具更有用,但我们应该想知道在什么情况下,该模型更差/更好。

事实上,我不清楚如何轻松地从数据中恢复 x3 上的系数远不如 x1 或 x2 的噪声大这一事实,除了蒙特卡罗到处走动之外。我们需要将样本分割成子集,当 x3 变化时,x1(和 x2)保持在每个子集内的狭窄范围内,并比较 y 的变化,作为跨切片的 x3 的函数,或者类似的事情。但这似乎有点涉及到看似相当琐碎的问题。但是估计整个分布通常是一件棘手的事情——尽管通过重采样技术和更便宜的计算能力,这变得容易多了。难怪大多数非参数技术是最近才发展起来的。

深入研究这些问题将占用我更多的空间,所以我将这篇文章总结如下。统计数字和数据不会提供正确的答案:它们只会提供比备选方案更正确的答案,因为这些答案内置了特定的功能,而且往往是错误的和误导性的——尤其是如果你天真地误解了它们。总是有必要问,这个模型错了多少,什么时候错(后者尤其重要,因为很少有事情是随机的——我们假设随机是为了在建立模型时让我们的生活易于处理(韦斯伯格的“故意无知”,他强调,这是一件好事——如果你知道你在故意无知什么)。一旦我们建立了模型,我们可能想让这种无知消失,这样我们就可以开始了解我们的模型的真正限制是什么。

注意:在帖子最初发表后,做了一些印刷上的更正。

组合学在文本分类中的作用

原文:towardsdatascience.com/the-role-of…

还记得你可能上过的一门数学课吗…

Source: Danny Krashen

正如人们可能想象的那样,机器学习和组合学领域有很多重叠。在机器学习中,自然语言处理和文本分类包含大量有趣且具有挑战性的问题。

在这篇文章中,我将深入探讨在文本分类环境中实现组合方法的一般和特殊见解。

什么是文本分类?

文本分类是将预定义的类别分配给自由文本文档的任务

从表面上看,文本分类就像任何其他的分类问题一样。机器学习中的分类问题涉及给给定的输入数据分配正确的类别标签。在文本分类的情况下,输入数据是文本的语料库,并且标签可以基于场景而变化。

这种实践不仅可以提供文档集合的直观概念视图,而且在现实世界中也有重要的应用

文本分类的例子

在你的日常生活中,有大量的文本分类的例子。几个值得注意的用例包括:

  • 话题识别:一篇新闻是关于政治、体育还是科技的?
  • 垃圾邮件检测:电子邮件是否是垃圾邮件?
  • 情绪分析:这个影评是正面的还是负面的?
  • 拼写纠正:天气还是天气?颜色还是色彩?

注意,输入不一定是一篇文章或一段文字。如在关于基于上下文的拼写校正的最后一个例子中所看到的,输入可以小到一些选择的单词或字母。

什么是组合学?

简而言之,组合学是对有限或可数结构的研究。

虽然这个定义相当宽泛,但我希望它有助于阐明组合学如何帮助提高文本分类问题的效率。如果你没有听说过组合学,不要担心——如果你分析过样本空间大小,甚至只是以一种有效的方式简单地统计过事物,你无疑已经在不知不觉中使用过它了。

[## 如何像数据科学家一样思考组合学

牢固掌握这些基本概念,以改善您的决策过程并推动您的公司…

towardsdatascience.com](/how-to-think-about-combinatorics-like-a-data-scientist-bddbd18eff80)

组合学的作用

文本分类通常涉及处理大型高维数据集。这就成了一个问题,尤其是当试图随着时间的推移缩放模型时。

然而这并不是必须的。很多时候,您可以用少得多的功能实现类似的性能。几乎总会有一些功能比其他功能重要得多。这是去除停用词(例如“the”、“a”和“he ”)的基本思路。这也符合用主成分分析来最小化你的特征空间的做法。

通过利用组合方法,可以获得文本数据的有意义的表示,其特征空间平均比原始空间小 50 倍。

应用

我写这篇文章的动机主要是源于 Andrei V. Anghelescu 和 Ilya B. Muchnik 的一篇题为《学习分类中特征选择的组合 PCA 和 SVM 方法》的论文。

通过使用组合主成分分析(cPCA)和组合支持向量机(cSVM ),作者表明,多亏了组合学,在他们的试验中,有可能用小得多的特征空间实现 2%以内的性能

在实现和一些调查之后,这篇论文中有几个重要的见解值得一提。这两种方法遵循相似的模型,包括使用具有特定得分函数的文本的矩形矩阵表示,以便优化结果。虽然每种方法都实现了相同的目标,但它们都适用于不同类型的问题。作者怀疑 cPCA 对图像视觉特别有用,而 cSVM 对任何可以在欧几里得空间中表示的数据都有优势。

包扎

简而言之,这些方法“提供了一种简单的方法来确定数据点和特征可以排序的尺度,从而使线性搜索最优的特征或文档集成为可能”——这允许更有效的特征选择。

在这样做的过程中,组合方法可以帮助解决文本分类中关于高维度的问题,在这种情况下,准确性往往会随着维度的增加而迅速下降。

这不仅有效地展示了如何提高文本分类的效率,还展示了组合学在数据科学领域的广泛应用。很明显,对数据驱动的问题应用组合范围通常有很大的好处。

请在家里随意尝试,并使用您在那门被遗忘的数学课中学到的知识来提高您在机器学习方面的成功!

感谢阅读!如果你喜欢这篇文章,请继续向鼓掌按钮展示你的爱。对更多的帖子感兴趣吗?请务必关注我并订阅下面的我的简讯以接收任何新内容。更多关于我和我在做什么,请查看我的网站

运气在扑克中的作用:玩的手数如何影响方差

原文:towardsdatascience.com/the-role-of…

是什么让扑克同时最惊险和痛苦?方差。每个人都可以成为赢家。但是能持续多久呢?

几个月前,我和我的牌友们进行了一场辩论:“随着手牌样本的增加,方差会发生什么变化?”答案对每个人来说都是显而易见的,但令人惊讶的是——不同。每个人的论点、推理和逻辑似乎都是合法的。但是统计可能很棘手,有时,就像在扑克中,你的“感觉”是不够的。所以我,这个小组里最书呆子的家伙,决定炫耀一下。

基础

一位智者曾经说过:“一半的答案存在于一个精心设计的问题中。”。如果我是第一个说出来的,那我就是那个聪明人。所以,我们来分解一下。首先,方差的定义:“方差是一个数字,它衡量一组数字围绕均值分布的程度。”一个更有用的术语是标准差,它是方差的平方根。两者都代表你的扑克成绩有多好。但是标准差可以告诉你更多的东西。让我们来看一个扑克的例子。一个英雄玩期望值为 0(EV)的游戏,每 100 手牌的标准差为 100 倍大盲注(无限注德州扑克 6 人现金游戏的常见标准差)。他的技能水平(0 EV)将在整个帖子中保持不变。由于这一确切的标准差,他的资金在 100 手牌后有 68%的机会会发生不到 100 倍大盲注的变化。但是如果英雄玩了不同数量的手牌会怎么样呢?

赢款的差异

让我们从最明显的开始,赢款的方差。它告诉你在大盲注或金钱方面你可以预期有多少波动。但是,随着玩的牌越多,它是变得越小还是越大呢?为自己考虑,但要小心。你的农民逻辑会被女人的变化打败。这次你不能怪她。

这里有七个不同的英雄通过 100k 手样品赢得的模拟图。为了让这些图表更容易理解,你可以把它们想象成技能水平完全相同的玩家的图表。

Graph 1

有点难以置信,那些都是 0 EV 玩家的模拟图。如你所见,线条越来越分散。这意味着更大的方差和标准差。如果你仍然有“运气会在一天结束时抵消”这样的想法,让我给你看另一个图表。假设英雄玩 1k 手牌,在一手牌样本结束时,他赢了一点。然后他又从头开始,做了 2k 手牌。再点。然后是 3k 手,4k,5k…等等,直到 1M 手。以下是他得到的结果:

Graph 2

再来一次,它就分散了。为了让事情更清楚,我甚至展示了获胜的标准差线。它与手数的平方根成正比。标准差的等式等于

在我们的例子中,K 等于 10。例如,如果你的标准差是 85bbs/100hands,那么 K 的值就是 8.5。实际上,你可以从上面的等式中计算出一些有趣而有用的信息。你可以看到任何固定的手样本都有相同的标准差,不管它在图上的位置。

乍一看,这些结果有些难以理解,所以让我们举几个例子,它们具有“逻辑”意义:

  • 你一手牌不能赢一叠以上。多玩几手,就有多赢的可能。微小的部分会增加扩散。
  • 假设你在不完全平坦且有沙子的混凝土上直线滚动一个球。球最终会出界。它形成的线越长,就越有可能远离初始线。最后一张图从鸟瞰的角度展示了这种情况。

在你开始尽可能少玩以降低方差之前,请继续阅读。

胜率的方差

这个案子扭转了整个局面。胜率的定义是大盲注赢款除以玩的手数。考虑到这一点,我们得到一个有点不同的标准差公式:

事实上,事情发生了巨大的变化。随着手动样本的增加,标准差变小了。让我们将赢款除以手数/100,这是我们从图 1 中得到的结果:

Graph 3

胜率越来越接近 0bb/100 手,这是 hero 的正版胜率。图表 2 也是如此:

Graph 4

显然,你玩的牌越多,你的胜率就应该越准确。使用第二个等式,我们可以计算出将标准差降低到 1bb/100 手需要多少手。这意味着,如果你的胜率是 1bb/100 手,你可以 67%确定你的胜率在 0 到 2bb/100 手之间。为此,你需要一百万只手。所以继续努力吧…

结论

理解变化是成为一名优秀扑克玩家的关键因素之一,尤其是因为你的心理游戏。你应该预料到会有不好的事情发生,并有能力面对它们。不要太在意那些扑克软件系列。它们并不像你想象的那样能很好地预测你的技能,即使是 EV 线。请记住,永远不要低估方差和高估你的扑克技巧。我祝你在牌桌上一切顺利。

关于作者

Miha Gazvoda 是一名扑克玩家,他指责 variance 没有成为职业选手。然而,幸运的是,他有足够的技巧成为 2014 年斯洛文尼亚扑克冠军。

原载于 2015 年 9 月 14 日【www.pokerstrategy.com】

机器学习在使电子健康记录物有所值中的作用

原文:towardsdatascience.com/the-role-of…

华尔街日报发表的一篇名为“关掉电脑,倾听病人的声音的专栏文章将一个关键的医疗保健问题推到了全国讨论的前沿。医师作者 Caleb Gardner 医学博士和 John Levinson 医学博士描述了医师对糟糕的设计、联邦激励措施和当今电子病历(EMRs)中实施的“一刀切的医疗实践规则”的失望。

从一开始,对 EMR 的任何批评的反驳就是,数字健康数据的收集最终将使发现提高医疗质量、防止错误和将资源导向最需要的地方的机会成为可能。毕竟,这是几乎所有后数字化行业的故事。

然而,许多组织正在艰难地认识到,在帮助其他行业从量化和可靠的销售、库存和财务数据中学习方面非常成功的商业智能工具在尝试理解医疗保健的非结构化、稀疏且通常不准确的临床数据方面可能会受到限制。

数据仓库和报告工具——理解其他行业的量化和可靠的销售、库存和财务数据的基础——对于 CMS、ACO、AQC 以及谁知道接下来会有什么要求的过程度量的必要报告是有用的。然而,应该明确的是,这些多年、数百万美元的投资旨在解决付费服务护理的问题:发生了什么,发生在谁身上,何时发生。他们不会开始回答对基于价值的护理最关键的问题:可能会发生什么,发生在谁身上,应该做些什么。

快速发展的分析方法非常适合医疗保健数据,旨在回答基于价值的护理问题。不幸的是,记者和供应商在传达机器学习方法的价值、潜力和本质方面都做得很糟糕。

隐藏在人工智能、大数据、认知计算、数据科学、数据挖掘和机器学习等时髦词汇背后的是一套方法,这些方法已被证明能够回答临床领域中基于价值的护理的“下一步是什么”问题,包括心胸外科、泌尿外科、矫形外科、整形外科、耳鼻喉科、普通外科、移植、创伤和神经外科、癌症预测和预后以及重症监护病房发病率。尽管有超过 20 年的经验证据证明了优越的预测性能,这些方法仍然几乎是学术界的专有财产。

围绕这些方法的花言巧语是模棱两可的,并不是特别有用。要么大数据将在短短几年内治愈癌症,要么临床医生自豪地列出他们不会被虚拟人工智能版本取代的原因。这两本书读起来都很有趣,但都没有抓住利用辛苦输入的数据来更有效地提供护理的直接机会。

更有成效的是将机器学习框定为它实际的样子——一种新兴的工具。像所有工具一样,机器学习有其固有的优点和缺点,应该加以考虑。

赞成一栏是这些方法比传统的风险评分或基于规则的方法考虑更多数据点的能力。对医学来说同样重要的是,基于机器学习的方法不需要数据格式良好或标准化就可以从中学习。结合自然语言处理,机器学习可以考虑临床医生或病例经理的自由文本印象,以预测哪个患者最有可能更快地从关注中受益。像临床护理一样,这些方法通过新的经验进行学习,使洞察力能够根据不断变化的护理提供动态而发展。

**举例来说,我工作的组织最近被招募来确定一个健康计划的成员,这些成员在加入一年后最有可能被取消注册。**对于承担提供护理的财务责任的组织来说,这是一个特别敏感的损失,因为在第一年要进行大量投资来稳定和维持会员的健康。

使用为采用这些方法而设计的软件,我们使用了 30 种文件类型,从案例管理笔记、索赔到呼叫中心记录。比较一年后退出计划的成员与继续参与计划的成员的所有数据,我们了解到与退出计划最相关的模式。我们的合作伙伴利用这些见解在会员取消注册前主动致电他们。随着他们的呼叫中心采用策略来减少不满意的具体原因,成员想要离开的原因发生了变化。因此,从软件中出现的模式也是如此。

其结果是会员满意度更高,退订率创下历史新低,并以更主动的方式解决会员的问题。这不是治愈癌症的方法,但当一个组织的成功取决于有效利用资源时,这是越来越多需要解决的问题之一。

迄今为止,机器学习的最大限制是不可访问性。与之前的大型机一样,这项新技术一直是专家的专属领域。在大多数应用程序中,每个模型都是使用为数据科学家设计的工具,经过几个月的时间开发出来的。结果是作为建议提供的,而不是随时随地可以插入的 HIPAA 兼容软件。就像计算机的发展一样,所有这一切都将改变。

在阅读了加德纳和莱文森的专栏文章几个小时后,我坐在一位初级保健医生朋友的对面,她结束了一天的实践,列出了最后几个病人。当她奋力通过一个又一个与糖尿病相关的报告要求的筛选时,她的沮丧是显而易见的,这些要求“与保持[她的]患者健康毫无关系。”她对使用其组织的行业领先的电子病历的好处的想法没有加德纳和莱文森博士那么慎重:“我宁愿把我的眼睛戳出来。”

我完全同意加德纳和莱文森医生的观点。**答案不是放弃电子系统,而是在电子病历的可用性和它们提供的有价值的信息之间取得平衡。**但我从事医疗保健的时间够长了,我知道临床医生不会很快享受到设计良好的电子病历。与此同时,很高兴知道我们不需要等待他们所有的辛勤工作开始产生回报。

Leonard D'Avolio 博士是哈佛大学医学院的助理教授,麻省剑桥大学 Cyft 的联合创始人。@ldavolio

英国皇家学会关于机器学习的报告(2017 年 4 月)

原文:towardsdatascience.com/the-royal-s…

英国皇家学会发起了一项(128 页!)关于机器学习的报告。我仔细阅读了它,并做了一些笔记,其中有一些有用的不同或以有用的方式传达的东西,其他人可能会觉得有用。在这里和那里,我链接了我发现的其他作品,并添加了一些观察。

深闺披露(截至 2017 年 6 月 9 日):当我咨询公务员时,我需要对英国临时选举指南特别敏感,该指南涉及可能被视为影响选举的政治动机言论。引用的地方都是逐字逐句地从材料中摘录的,而不是我自己的观点。

“确保为机器学习的安全和快速部署提供尽可能好的环境,对于促进英国的经济增长、福祉和安全,以及释放‘大数据’的价值至关重要。在关键领域采取行动——塑造数据格局、培养技能、支持业务和推进研究——有助于创造这种环境。”

从数据中提取价值

  • 创建支持机器学习的数据环境。英国生物银行是实践中的一个很好的例子。
  • 延长开放数据的生命周期需要开放标准“政府在创建新的开放标准方面发挥着关键作用”

从机器学习中创造价值

  • 学校和大学需要更新,以关注数据技能和研究。【和情商】(T13)。另请参阅 FT.com 的观点,该观点称情商在学校也至关重要。所以我们把情商+数据素养作为最重要的学校技能。
  • “英国的移民方法应该支持英国成为世界上最好的研究和创新场所之一的目标,而机器学习是支持这一目标的一个机会领域”

“世界上几乎 90%的数据估计都是在 最近五年内产生的

“对于公众来说,‘机器学习’这个术语并不突出;皇家学会和益普索莫里调查机构的调查显示,只有 9%的人认识到这一点。然而,许多人熟悉机器学习的具体应用 17,每天都与机器学习系统进行交互。”

人工智能

“人工智能”这个术语缺乏一个被广泛认同的定义 ,但是有不同的描述

  • “[…自动化]我们与人类思维相关的活动,如决策、解决问题、学习等活动…”(Bellman,1978)
  • “创造机器的艺术,这些机器在由人执行时执行需要智能的功能。”(库兹韦尔,1990)
  • “对使感知、推理和行动成为可能的计算的研究。”(温斯顿,1992)
  • 计算机科学的一个分支,研究智能行为的自动化(卢格和斯塔布尔菲尔德,1993)
  • “…致力于使机器智能化的活动,而智能是使一个实体能够在其环境中恰当地、有远见地运行的品质。”

机器学习和人工智能的发展

这里的关键是,自从 50 年代计算机发明以来,人工智能作为一个概念就已经存在了。

下面的图表中唯一需要补充的是,在 2014 年的 图灵测试中,机器人第一次赢得了冠军 ,从那以后图灵奥运会成为“人工智能感知”的首选指标。

现有方法的局限性

大量被人为手工标注的数据。那些有必要规模的人已经做了一些聪明的把戏来解决这个问题:例如,

  • 谷歌在美国的 411 目录服务帮助训练他们的语音识别系统
  • 他们在网络上使用的 reCAPTCHA 系统有助于训练图像识别。

上下文很难建立。对人类来说是“常识”的东西在计算机中没有对等物。又称“帧问题”。

人类善于将想法从一个问题域转移到另一个问题域 。即使有了最新的机器学习技术,这对计算机来说仍然具有挑战性。这里研究的活跃领域叫做迁移学习

机器学习帮助解决的标准问题

中型不提供桌子(!!!HTML 1.0 提供了表格…想想吧…)所以我在下面放了一张图片,在这里做了一个表格

从数据中提取价值

**“世界上 90%的数据是在过去 5 年中创建的。”——尽管 IBM 声称这是过去两年的。报告称每天产生 25 亿 GB,但数据来自 2014 年。该站点有一个实时估算,显示截至 2017 年 4 月 27 日的数字为 28 亿 TB/d(所示的 1000 倍)

“英国已经承诺遵守 G7《开放数据宪章》,该宪章的原则规定,政府数据应默认公开发布,供所有人使用,并以允许自动处理的高质量格式发布”

培养各级技能

数据的作用及其对我们生活的影响将继续在家庭和工作中变得更加普遍,因此需要从小就具备基本的“数据素养”。关闭或重启(2012) 促进了英国学校课程的积极变化“其他学科快速发展的数据科学需求将需要在未来的课程和资格审查中加以考虑”。**

“人们理解他们生活和工作的世界的能力越来越取决于他们对科学思想和相关技术以及社会问题的理解”

Key concepts in machine learning and recommended school age for introduction, paving the way for data literacy

“至少,新获得资格的专业人员应该懂数据,并且能够‘用算法思考’”

“作为一个跨学科的领域,机器学习目前没有得到现有资助模式的良好服务”

**“如果这个领域要以代表广泛利益的方式前进,那么它就需要从广泛的人才库中汲取人才,如果它要避免形成一种研发‘短视’的话。吸引各种各样的人到这个领域,对于提高英国在这个领域的技能基础的整体实力也是至关重要的。”。这是一个很难解决的问题:一般来说,计算机科学已经有很长一段时间了,而且似乎没有太大的变化。目前还不清楚这种吸引力会以何种形式出现。

社会中的机器学习

皇家学会和益普索·莫里调查了 978 名公众。虽然只有 9%的人理解“机器学习”这个术语,但大多数人(89%)认可它的应用。这似乎是合理的:当技术透明时,它就是成功的。

态度: " 这些公开对话中最明确的一个信息是,公众对机器学习没有单一的看法;积极或消极的态度取决于使用机器学习的环境。”

机会

机器学习作为一个品牌依赖于“大数据”,这使得它更容易获得。人们发现的机会总结如下:

  • 更客观
  • 更准确
  • 更有效率
  • 新生物
  • 有助于解决大规模的社会挑战,如人口老龄化

关注的问题和解决这些问题的计划

不过,并不全是彩虹和独角兽,还有一些担忧,我认为所有这些都很合理,但有益的是,报告指出了对所有这些的积极研究:

  • ***造成伤害的可能性:*解决方案研究包括保证系统将是“稳健的”、强有力的安全证据以及人为监督或最终决策
  • 去技能化和过度依赖机器学习以及由此产生的社会去技能化或降级为利基。这是不可避免的,而且已经发生了 500 年了。在极端情况下,该调查揭示了公众对机器取代工作场所中的人的担忧,以及“改变与个人重要活动的关系:自由或自主的感觉”。对于医护人员来说,强调准确性不是衡量成功的唯一标准也很重要。人类的同理心和个人参与在健康和社会关怀中尤为重要。
  • 选择和人类经验的限制:遗漏细微差别解释的风险(只有在数据量和解释能力更大的情况下才有可能)。

关注的背景

调查中人们的关注程度因以下方面而异:

  • “技术使用者的感知意图;
  • 谁是受益人;
  • 使用机器学习而不是其他方法是多么必要;
  • 是否有明显感觉不合适的活动;和
  • 人类是否参与决策。
  • 准确性和错误的后果也是重要的考虑因素。”

“从根本上说,这些公共对话中提出的问题与是否应该实施机器学习技术关系不大,而是如何最好地利用它来造福公众。从具体应用的角度,而不是从宽泛、抽象的原则的角度,更容易做出这种判断。”

数据的使用、隐私和同意

"随着机器学习在这种新环境中投入使用,它重新构建了关于隐私、数据使用以及在信息稀缺环境中设计的治理系统的适用性的现有问题"

“机器学习进一步动摇了当前‘敏感’或‘个人’和‘非敏感’数据之间的区别:它允许最初看起来无害的数据集被用来从平凡事物中推断出敏感事物。”

“例如,研究表明,可访问的数字记录,如脸书的“赞”,脸书用户通过这些记录表达对社交媒体网站上内容的积极情感,可以用来推断敏感的个人属性。 通过分析用户的脸书喜好,研究人员发现他们可以预测诸如性取向、种族、宗教或政治观点、智力或性别等特征。 虽然默认情况下赞是公开的,但用户并不一定期望这些会泄露更多敏感信息。然而,这些信息现在可以从他们的在线活动,或者一系列组织可以获得的数字记录中预测出来

"在过去,同意被认为是良好数据治理的标志。然而,即使在同意被用作数据使用的“黄金标准”的情况下,这种同意是否是知情的,这一点一点也不清楚。尽管高达 33%的人声称他们通常会阅读网站条款和条件,但服务器端的调查表明,只有 1%的人实际上有…因此需要新的方法来导航关于同意的问题"

公平和统计刻板印象

“机器学习应用程序可能以两种不同的方式导致偏见或缺乏公平性。

  1. **当机器学习算法继承了存在于训练算法的数据中的主观偏见时。【例如,一个简历库中很少有女性,可能会推断出一个简历库中将来也很少有女性。-J]
  2. **当机器学习算法正确地发现个人的特定属性在预测结果时是有价值的,在社会可能认为使用这样的属性不合适的情况下,可能会出现不同的偏见或不公平的来源",[例如保险费的性别— 这在欧盟现在是非法的,但也可以通过其他参数来推断-J]

可解释性和透明度

***具有隐藏层的神经网络也隐藏了它们的推理。*对于高影响力的决策,可解释性和透明性对于希望了解原因的用户和希望改进系统的开发人员来说非常重要。

“围绕数据使用的法律框架,即新的《欧洲一般数据保护条例》中隐含了‘解释权’”

“在试图解决透明度问题时,可能需要在准确性和可解释性之间进行权衡。在基本层面上,硬编码的规则更容易解释,但神经网络等更不透明的方法往往更强大,可以产生更准确的结果。透明度和性能之间的权衡在不同的应用中有不同的结果,这就提出了一个问题,即是否需要明确决定优先考虑透明度还是准确性,如果需要,如何以及由谁来决定。”此外,硬编码模型(如传统编程)的构建成本要高得多,因为每个细微之处都必须到位。

有责任

“在公众中,对于“当机器学习‘出错’时,谁应该负责”这个问题,最常见的回答是“操作员和机器为之工作的组织”(32%),尽管这并不构成大多数人的回答,但它显然超过了认为机器本身应该负责的受访者人数(3%)。”— 最后这一点很有趣,因为我自己认为只有当机器意识到其行为的后果并有足够的感知能力来引导其决策朝着激励而非抑制的方向发展时,该机器本身才应该承担责任。

解决责任的三种方法:

  • “所谓的 Bolam 测试,或者一个合理的人类专业人士是否会以同样的方式行事;
  • 自动驾驶汽车的严格责任——或无过失或无伤害意图的责任;和
  • 第三者责任,类似于对危险犬的规定。”

与机器学习使用增加相关的潜在社会后果

泡泡/回音室:通过强化现有信仰的强化内容和信息对社会群体进行分层。(例如,参见 WSJ 红色进料,脸书上的蓝色进料)

新的权力不对称:隐私与访问。 “新的权力不对称可能被创造出来;“浮士德协定”,个人自愿放弃隐私,以换取效率、便利或获得服务的需要,而不给予知情同意”

人机互动:随着这变得越来越普遍,它开始影响社会规范,比如 Alexa 不要求孩子们说请或者谢谢

机器学习的未来

可能要在以后总结。

查看完整报告(PDF,128 页)

预测热门歌曲的科学!

原文:towardsdatascience.com/the-science…

F 或者很多全职音乐艺人,拿到高排行榜位置就是他们的饭票;为了赚钱,他们需要在行业中有突出的地位,图表位置是显示他们有多突出的一种明确方式。每年年底,Spotify 都会编辑一份当年最常播放的歌曲列表。今年的播放列表包括 100 首歌曲。问题是:这些顶级歌曲有什么共同点?人们为什么喜欢它们?

要回答这个问题,我必须借助数据科学!我使用了 spotify 的 2017 年热门歌曲列表数据集:(https://github . com/kayguxe/hit _ songs _ data _ science/blob/master/featuresdf . CSV)每首歌曲的音频特征都是使用 Spotify Web API 提取的。

可跳舞性:

平均值为 0.697,很明显大多数顶级曲目都有很高的可跳性评级。在八十年代以前,一首歌曲的可舞性与其流行潜力并不十分相关。从那时起,适合跳舞的歌曲更有可能成为热门歌曲。这显示了音乐产业发展的程度。

音乐键和模式:

music keys count in 2017 top tracks list

顶级曲目中最常见的基调是 C♯/D♭.那么这一切意味着什么呢?嗯,在某种程度上,它揭示了我们在音乐中更常见的声音类型:勇敢、乐观的大调往往会击败忧郁的小调。这也揭示了 Spotify 大部分收藏(更倾向于西方音乐)的来源。

拍子

节奏的平均值为每分钟 119.202 次,与八十年代的平均节奏(每分钟 70-89 次)相比,2017 年热门歌曲的节奏非常快。

效价

心理学家用“化合价”这个词来描述某样东西是否有可能让某人感到快乐(正化合价)或悲伤(负化合价)。这有点像这个词的电子意义。

快乐和悲伤的歌曲相当均匀地分布在 0.517。 我们对音乐的反应是情绪化的。有些让我们快乐,有些让我们悲伤,歌曲的范围介于快乐和悲伤之间。

音量

平均而言,排行榜上的所有歌曲都很吵。此外,点击率相对高于那些在排行榜底部徘徊的歌曲。

持续时间

持续时间的平均值是 218387 毫秒,大约是 3 分 38 秒。一篇连线文章提出,20 世纪 60 年代之前流行歌曲的时间长度是基于留声机的。起初,这些留声机是圆柱形的。后来,它们以 10 英寸磁盘的形式出现。这些磁盘以每分钟 78 转的速度旋转,可以存储大约 3 分钟的音乐。这也是到目前为止正常的歌曲长度。

[## 为什么广播里的歌曲长度都差不多?

这实际上是我的一个孩子提出的问题。“为什么这些歌的长度都差不多?怎么会有…

www.wired.com](www.wired.com/2014/07/why…)

结论

音频特性是艺术家在发行前测试其歌曲成功与否的一项重要措施。然而,如果要正确评估诸如响度之类的音频特性,那么在正确评估歌曲之前,似乎需要对歌曲进行完整的编写、制作、混音和掌握,这必然会花费时间、金钱和精力。

但有一点是明确的,即研究领域不会有任何进展,尤其是随着音乐人工智能的进步。众所周知,如今越来越多的热门歌曲是由那些知道如何给公众提供数据所显示的他们想要的东西的制作人根据一个经过时间考验的公式制作出来的。对照成功的数学方程式测试配方,并最终使用算法生成热门歌曲,是热门歌曲制作工厂合乎逻辑的下一步。

对范畴相关的探索

原文:towardsdatascience.com/the-search-…

本帖中出现的所有代码都是我的 GitHub 页面 上的 [dython](https://github.com/shakedzy/dython) 库的一部分。 如有任何代码相关问题,请在本库的 GitHub 页面 开题

不久前,我在 Kaggle 上偶然发现了一个蘑菇数据集,其中收集了 20 多种不同特征的食用和有毒蘑菇,并进行了分类。寻找可能指出吃随机蘑菇有多安全的模式的想法似乎是一个不错的挑战——我甚至发现自己在我后来出版的的内核后面创造了一个完整的故事情节——一个在森林里迷路的人。

在浏览其他用户的内核时,很容易看到随机森林和其他简单的方法无需太多努力就可以达到极高的准确性,所以我也认为没有理由这样做——我决定看看我是否可以自己找到哪些功能指向我可以安全食用的蘑菇,如果我需要的话。我意识到我实际上在寻找的是特征和蘑菇类型之间的相关性,但这是一个问题,因为特征都是分类的,在这种情况下相关性没有定义。

什么是相关性?

在我们讨论相关性不是什么之前,我们先来讨论它是什么。在人类语言中,相关性是对两个特征如何相关的度量;就像一年中的月份与日平均温度相关,一天中的时间与户外的光照量相关。从数学上来说,通常使用的相关性定义是数据样本的 Pearson's R (产生范围为[-1,1]的值):

Pearson’s R for data sample. Taken from Wikipedia

但是,从上面的等式可以看出,当数据是分类的时,皮尔逊的 R 没有被定义;让我们假设 x 是一个颜色特征——如何从颜色的平均值中减去黄色*?我们需要别的东西。*

处理这种情况的一个常见选项是首先使用一次性编码,并将每个分类特征的每个可能选项分解为 0 或 1 特征。这将允许使用相关性,但它很容易变得过于复杂而无法分析。例如,one-hot 编码将蘑菇数据集的 22 个分类特征转换为 112 个特征的数据集,当将相关表绘制为热图时,我们会得到如下结果:

Correlation of the mushrooms data-set, transformed using one-hot encoding

这不是可以轻易用来获得新见解的东西。所以我们还需要别的东西。

直言不讳

我们需要的是看起来像相关,但对分类值有效的东西——或者更正式地说,我们在寻找两个分类特征之间关联的度量。介绍:克莱默 V 。它是基于皮尔森卡方检验的一个名义上的变化,并且有一些内在的好处:

  1. 与相关类似,输出在[0,1]的范围内,其中 0 表示没有关联,1 表示完全关联。(与相关性不同,不存在负值,因为不存在负相关这种东西。要么有,要么没有)
  2. 像相关性一样,克莱姆的 V 是对称的——它对交换 xy 不敏感

更好的是——有人已经将其实现为一个 Python 函数。这是我编辑过的原文:

**def** cramers_v(x, y):confusion_matrix = pd.crosstab(x,y)
    chi2 = ss.chi2_contingency(confusion_matrix)[0]
    n = confusion_matrix.sum().sum()
    phi2 = chi2/n
    r,k = confusion_matrix.shape
    phi2corr = max(0, phi2-((k-1)*(r-1))/(n-1))
    rcorr = r-((r-1)**2)/(n-1)
    kcorr = k-((k-1)**2)/(n-1)
    **return** np.sqrt(phi2corr/min((kcorr-1),(rcorr-1)))

当应用于蘑菇数据集时,它看起来像这样:

Cramer’s V calculated for the mushrooms data-set

那不是很漂亮吗?通过观察这张热图,我们可以看到气味与蘑菇的(可食用/有毒)高度相关,并且鳃附着特征与其他三种特征高度相关。

对称的诅咒

思考克莱姆 V 的输出,我意识到由于它的对称性,我正在失去有价值的信息。为了更好地证明这一点,请考虑以下数据集:

我们可以看到,如果已知 x 的值,仍然无法确定 y 的值,但是如果已知 y 的值——那么就保证了 x 的值。当使用克莱姆的 V 时,由于它的对称性,这些有价值的信息丢失了,所以为了保存它,我们需要一个非对称的分类特征之间关联的度量。这正是泰尔的 U。

泰尔的 U ,也称为不确定系数,是基于 xy — 之间的条件熵或者用人类的语言来说,给定 x 的值, y 有多少种可能的状态,以及它们出现的频率。就像克莱姆的 V 一样,输出值在[0,1]的范围内,与之前的解释相同——但与克莱姆的 V 不同,它是不对称的,意思是 U(x,y)U(y,x) (而 V(x,y)=V(y,x) ,其中 V 是克莱姆的 V ) 。在上面这个简单的例子中使用 Theil 的 U 会让我们发现,知道 y 就意味着我们知道 x ,反之则不然。

将公式实现为 Python 函数产生了这个*(关于* conditional_entropy 函数的完整代码可以在我的 Github 页面上找到——链接在帖子顶部):

**def** theils_u(x, y):s_xy = conditional_entropy(x,y)
    x_counter = Counter(x)
    total_occurrences = sum(x_counter.values())
    p_x = list(map(**lambda** n: n/total_occurrences, x_counter.values()))
    s_x = ss.entropy(p_x)
    **if** s_x == 0:
        **return** 1
    **else**:
        **return** (s_x - s_xy) / s_x

将此应用于蘑菇数据集:

Theil’s U calculated for the mushrooms data-set

这个新的计算让我们从克莱姆的 V 中看到了更多的关联——例如,我们现在看到,虽然知道气味比蘑菇的种类提供了很多信息,但反过来却不是这样。泰尔的 U 确实给了我们更多关于不同特征之间真实关系的信息。

当我们把东西混在一起时会发生什么?

因此,现在我们有了一种方法来衡量两个连续特征之间的相关性,以及两种方法来衡量两个分类特征之间的关联。但是一对连续特征和一个分类特征呢?为此,我们可以使用相关比率(通常使用希腊字母 eta 来标记)。数学上定义为每个类别均值的加权方差除以所有样本的方差;在人类的语言中,相关比回答了下面这个问题:*给定一个连续数,你能多好地知道它属于哪一类?*就像我们之前看到的两个系数一样,这里的输出也在[0,1]的范围内。

Python 中的实现如下所示:

**def** correlation_ratio(categories, measurements):
    fcat, _ = pd.factorize(categories)
    cat_num = np.max(fcat)+1
    y_avg_array = np.zeros(cat_num)
    n_array = np.zeros(cat_num)
    **for** i **in** range(0,cat_num):
        cat_measures = measurements[np.argwhere(fcat == i).flatten()]
        n_array[i] = len(cat_measures)
        y_avg_array[i] = np.average(cat_measures)
    y_total_avg = np.sum(np.multiply(y_avg_array,n_array))/np.sum(n_array)
    numerator = np.sum(np.multiply(n_array,np.power(np.subtract(y_avg_array,y_total_avg),2)))
    denominator = np.sum(np.power(np.subtract(measurements,y_total_avg),2))
    **if** numerator == 0:
        eta = 0.0
    **else**:
        eta = np.sqrt(numerator/denominator)
    **return** eta

最后的话

我相信我可以宣布,对分类特征的关联度量的研究是成功的,特别是当某些要求——例如对非对称度量的需要——在开始时没有被预期到。在探索包含分类特征的数据集时,这三个新指标非常有用,并帮助我对我探索的数据集获得更多见解。我只能希望这能像对我一样对你有用,如果没有的话,至少你现在知道如何识别可食用的蘑菇了。

实验的第二个幽灵:基于会话的度量的谬误

原文:towardsdatascience.com/the-second-…

利齐·埃德里,科林·麦克法兰和汤姆·奥利弗

The second Ghost of Experimentation: The fallacy of session based metrics

👻这篇文章是探索导致追逐统计幽灵的实验从业者普遍误解的系列文章的一部分。

标准统计检验允许我们判断 A/B 检验的结果是否显著(不太可能仅仅是由于偶然变化)或者不依赖于每个“观察”是独立的假设。对于会话级指标,如每个会话的转换,观察单位是会话。

然而,在 A/B 测试中,通常将用户分配到 A 组或 B 组,以避免同一个人同时看到两个版本,扰乱用户体验。这样会话就不是独立的了,因为一个用户可以有多个会话,一个会话中发生的事情会影响或改变我们对用户其他会话中发生的事情的预期。例如,在 Skyscanner 中,我们发现用户会话越多,就越有可能转化:

但是,如果用户使用多个会话进行会话,则单个会话不太可能被转换。

会话的这种非独立性非常重要,因为这意味着如果我们随机选取一组用户,并查看他们所有会话中已转换的部分,我们预计平均而言,与我们随机选取每个会话相比,结果对真实会话转换率的估计不太准确。举一个极端的例子,如果每个用户有 1000 个会话,我们选择五个用户,那么最终的平均会话转换率将在很大程度上取决于我们选择哪五个用户。然而,如果我们随机选择 5000 个会话,结果将更能代表真实的总体平均值,因为我们已经选择了 5000 个会话,而不是 5 个随机选择。

我们在 Skyscanner 上模拟了这如何影响我们的转化率估计,方法是多次选择会话组,并查看平均会话转化率的变化。在第一个例子中,我们通过在 28 天的时间内随机选择(替换)500,000 个用户及其所有相关会话来模拟实验设置。下面的绿色直方图显示了 10,000 个随机组的平均会话转换率的分布。在第二个实例(蓝色直方图)中,我们独立处理会话,并从同一时间段随机选择相同数量的会话,而不管是哪个用户创建的。

这里的虚线表示当样本中的每个观察值独立且同分布( i.i.d. )时的理论方差,这是普通统计检验(χ2 检验、z 检验、t 检验等)中内置的假设。).当我们将会话视为独立时,它就像预期的那样严格遵循这个假设的方差。然而,当我们随机选择用户而不是会话时,正如我们在 A/B 测试中基本上所做的那样,方差比显著性计算中假设的要大——它可能看起来是一个小差异,但当我们选择用户而不是会话时,我们根据理论称之为“不太可能”的结果(>平均值的 2σ)实际上是三倍常见。

其结果是,当应用于会话级度量时,标准统计测试不可靠,并导致更多的误报。我们可以通过模拟 AA 测试(两组用户看到完全相同的东西的实验)来估计这对实验结果的影响。当我们使用 95%的置信度时,我们预计只有 5%的测试会出现假阳性。例如,当没有真实效应时,如 AA 测试的情况,我们应该只推断 5%的显著差异。

Skewed!

左边的图显示了从一周的 Skyscanner 数据中计算的 p 值,随机选择用户组成两组,从两组的会话转换率之间的差异计算 p 值,然后多次重复该过程。如本系列的第一个幽灵所示,p 值应该是均匀分布的,因为我们知道没有真正的影响,但是它们偏向低 p,其中大约 10%的 p 值为 0.05,所以我们 95%的置信度实际上只是 90%的置信度。

Uniform

以上都不是用户级指标的问题,因为用户是独立的——他们被随机分配到 A 或 B,我们不希望一个用户的行为影响另一个用户的行为。如果我们看一个用户级的指标,比如转化的用户比例,我们得到了预期的结果;从同一周的数据中,我们看到 5%的模拟 AA 测试显示出显著差异。

在我们的例子中,实验时间越长,影响越大,因为每个用户的平均会话数更高。在不同的时间范围内重复上述过程,我们可以看到假阳性率——被发现有意义的 AA 实验的百分比——如何取决于实验的长度。正如您在下图中看到的,当使用 95%的置信度时,为期一个月的会话转化率实验的假阳性率将超过 15%。这意味着我们实际上只能达到 85%的置信度,并且发现倍于预期的假阳性!

This ghost could give us three times as many false positives

如何才能避免被这个统计幽灵抓到?

尽管我们在这里关注的是会话级指标,但是每当你试图测量一个速率指标时,这个问题就会发生,这个指标是由你随机选择的以外的东西定义的。例如,如果你随机选择用户,点击率(总点击量/总浏览量),或者每页面浏览量,每点击量,或者每用户日指标都会受到影响。我们认为有三种选择可以避免被这个统计幽灵所迷惑:

a)面向用户指标

如果你对用户进行随机选择,那么在大多数情况下,使用用户级别的度量标准将满足常见的统计显著性测试的假设,并避免上面看到的虚高的假阳性率。考虑到当分析单位(分母)不是随机化单位时,对转换率等比率指标的解释可能是不明确的,因此向用户级指标的转变在任何情况下都可能是有益的。例如,会话级转换率的增加可以指示改善的、减弱的或未改变的用户体验,这取决于分子(转换)或分母(会话)或两者是否已经改变。

b)应用适当的修正

在有必要测量一个指标的情况下,有一些方法可以估计真实的方差并计算出精确的 p 值。你可以在微软团队这里这里找到关于这些方法的更详尽的讨论。常见的技术有 bootstrapping 或“delta method”,但是这些方法在计算上可能很昂贵,因为它们需要处理数据的全部分布,而不是简单地处理聚合平均值,否则这些平均值就足以满足二项式检验的要求。

c)预计会有更多的误报

最后,如果您没有执行方差计算和实施上述校正之一的基础设施或意愿,您至少应该意识到,根据您选择的显著性水平,您将具有比预期更高的假阳性率。我们建议您查看 AA 测试,以充分了解您的指标是如何受到影响的,因为这高度依赖于所讨论的数据和指标。

👻更:追统计鬼

与我们合作

我们在 Skyscanner 以不同的方式做事,我们正在全球办事处寻找更多的工程团队成员。看看我们的 Skyscanner 职位寻找更多空缺。

Work with us

强化学习背后的秘密

原文:towardsdatascience.com/the-secrets…

玩 Dota2 的机器人,打败世界上最好的围棋选手的人工智能,擅长毁灭的计算机。这是怎么回事?AI 社区一直这么忙着玩游戏是有原因的吗?

让我这么说吧。如果你想让机器人学会走路,你会怎么做?你造了一个,编了程序,然后在纽约的大街上发布?当然不是。你建立一个模拟,一个游戏,你用那个虚拟空间教它如何在它周围移动。零成本,零风险。这就是为什么游戏在研究领域如此有用。但是你怎么教它走路呢?答案是今天文章的主题,也可能是当时最令人兴奋的机器学习领域:

你可能知道有两种类型的机器学习。有人监督和无人监督。嗯,还有第三种,叫强化学习。RL 可以说是 ML 中最难理解的领域,因为有太多太多的事情同时发生。我会尽可能地简化,因为这是一个非常惊人的领域,你肯定应该了解它。但是让我警告你。它涉及到复杂的思维,需要 100%的专注去把握。和一些数学。所以,深呼吸,让我们开始吧:

马尔可夫决策过程

强化学习是一个反复试验的过程,其中 AI ( 代理)在环境中执行若干动作。每个独特的时刻,代理都有一个状态,并从这个给定的状态到一个新的状态。这个特殊的行为可能会有奖励。因此,我们可以说每一个学习时期(或事件)都可以表示为一系列的状态、行动和回报。每个状态仅依赖于先前的状态和动作,并且由于环境本身是随机的(我们不知道下一个状态),这个过程满足马尔可夫性质。马尔可夫性质表明,过程未来状态的条件概率分布只取决于当前状态,而不取决于之前的事件序列。整个过程被称为马尔可夫决策过程。马尔可夫决策过程是主要的数学工具,我们用它来构建几乎所有的 RL 问题,这种方法很容易研究和试验不同的解决方案。

让我们看一个使用超级马里奥的真实例子。在这种情况下:

  • 代理人当然是受人爱戴的马里奥
  • 状态就是当前的情况(比如说我们屏幕的框架)
  • 动作有:向左、向右移动和跳跃
  • 环境是每个层次的虚拟世界;
  • 奖励就是马里奥是死是活。

好了,我们已经恰当地定义了问题。下一步是什么?我们需要一个解决方案。但首先,我们需要一种方法来评估解决方案有多好?

我想说的是每集的奖励是不够的。想象一个马里奥游戏,其中马里奥由代理控制。他在整个关卡中不断获得正面奖励,但就在最后一面旗帜前,他被一个锤子兄弟杀死了(我讨厌那些家伙)。你看,每个人的奖励都不足以让我们赢得比赛。我们需要一个能抓住整体水平的奖励。这就是贴现的累积预期回报的期限发挥作用的地方。

它无非是所有奖励的总和减去一个因子 gamma,其中 gamma 属于[0,1]。折扣是必不可少的,因为回报往往在开始时比结束时更重要。这很有道理。

接下来就是解决问题了。为了做到这一点,我们定义学习任务的目标是:代理人需要学习在给定的状态下执行哪一个动作,使累积奖励随时间最大化。或者学习策略π: S- > A. 策略只是状态和动作之间的映射。

综上所述,我们使用以下等式:

其中 V ( )是一项政策(π)从一个州(s)获得的预期长期回报。

你还和我在一起吗?如果是的话,让我们暂停 5 秒钟,因为这有点让人不知所措:

1…2…3…4…5

既然我们恢复了头脑清醒,让我们回顾一下。我们将问题定义为马尔可夫决策过程,我们的目标是学习最佳策略或最佳价值。我们如何进行?

我们需要一个算法(谢谢你,夏洛克……)

好吧,这些年来有大量开发的 RL 算法。每种算法关注的都是不同的东西,无论是价值最大化还是策略最大化或者两者都是。是否使用模型(如神经网络)来模拟环境。它是否会捕捉到每一步或最后的回报。正如你所猜测的,将所有这些算法分类并不容易,但这正是我要做的。

如您所见,我们可以将 RL 算法分为两大类:基于模型的和无模型的:

基于模型的

这些算法旨在从其观察中了解环境如何工作(其动力学),然后使用该模型规划解决方案。当他们有一个模型时,他们使用一些计划方法来寻找最佳策略。众所周知,它们是数据高效的,但是当状态空间太大时,它们就失效了。尝试建立一个基于模型的算法来下围棋。不会的。

动态规划方法是基于模型的方法的一个例子,因为它们需要环境的完整知识,例如转移概率和回报。

无模型

无模型算法不需要学习环境和存储所有状态和动作的组合。根据培训的最终目标,可以分为两类。

基于策略的方法试图找到最优策略,无论它是随机的还是确定的。像策略梯度和加强算法属于这一类。它们的优点是在高维或连续的作用空间上有更好的收敛性和有效性。

基于策略的方法本质上是一个优化问题,在这里我们找到一个策略函数的最大值。这就是为什么我们也使用像进化策略和爬山这样的算法。

基于价值的方法则相反,试图找到最优价值。这一类别的很大一部分是一个称为 Q-learning 的算法家族,它学习优化 Q 值。我计划在下一篇文章中彻底分析 Q-learning,因为它是强化学习的一个重要方面。其他算法涉及 SARSA 和值迭代。

在策略和基于价值的方法的交叉点,我们发现了行动者-批评家方法,其目标是优化策略和价值函数。

现在是最酷的部分。在过去的几年里,镇上出现了一个新人。不可避免地会影响和增强所有现有的解决强化学习的方法。我相信你猜到了。深度学习。因此,我们有了一个新的术语来代表所有这些新的研究想法。

深度强化学习

深度神经网络已经被用于对环境的动态进行建模(基于模式)、增强策略搜索(基于策略)以及逼近价值函数(基于价值)。对最后一个(这是我最喜欢的)的研究产生了一个名为 Deep Q Network 的模型,该模型及其许多改进促成了该领域一些最惊人的突破(以雅达利为例)。更让你兴奋的是,我们不仅使用简单的神经网络,还使用卷积、递归和许多其他网络。

好了,我觉得第一次接触强化学习就够了。我只是想给你整个想法背后的基础,并给你一个这些年来实现的所有重要技术的概述。同时,也给你一个这个领域未来发展的提示。

强化学习在工业和研究中都有应用。仅举几个例子:机器人控制、优化化学反应、推荐系统、广告、产品设计、供应链优化、股票交易。我可以永远继续下去。

这可能是人工智能目前最令人兴奋的领域,在我看来,它拥有一切权利。

这是一系列帖子中的第一篇,我们将揭开强化学习的秘密,并试图解释所有不同算法背后的直觉和数学。主要焦点将是深度学习如何被用来大大增强现有技术,以及它如何在短短几年内带来革命性的结果。

下一次,我们将深入 Q 学习,贝尔曼方程,并解释为什么 2015 年提出的深度 Q 网络打开了人工智能新时代的大门。

直到我的下一篇文章,敬请关注。

如果您有任何想法、评论、问题或者您只想了解我的最新内容,请随时在LinkedinTwitterinsta gramGithub或在我的

要阅读整个深度强化学习课程,学习所有你需要了解的人工智能知识,请前往此处

原载于 2018 年 9 月 23 日sergioskar . github . io

基因组的形状:用拓扑数据分析超越双螺旋

原文:towardsdatascience.com/the-shape-o…

这篇原创的博客最早出现在 2017 年的 Ayasdi 网站上。

在科学领域,或者说整个 20 世纪,最具标志性的形状之一是双螺旋。

1953 年,弗朗西斯·克里克和詹姆斯·沃森发现了 DNA 的形状(归功于莫里斯·威尔金斯和罗莎琳德·富兰克林),这是理解人类基因组的一个重要里程碑,也是一些非凡研究的起点。

从我们的角度来看,值得注意的是使用拓扑数据分析研究“组学”数据集的合作者数量。在这篇文章中,我们引用了一些 TDA 最近发表的突破性发现。

我们在哥伦比亚大学的合作者刚刚在自然遗传学发表了一篇论文,题为“时空基因组架构为胶质母细胞瘤(GBM)的精确肿瘤学提供信息”这篇论文使用我们的软件观察了 52 个个体的基因组和表达谱。他们发现,来自相同肿瘤块的样本共享基因组和表达特征,而地理上分离的多灶性肿瘤和/或长期复发性肿瘤来自不同的克隆。这些发现可以为 GBM 患者的靶向治疗干预提供信息,有可能通过基因组特征实现癌症的精确药物治疗。

UCSF 几周前刚刚发表了一篇论文,题为“在 PLOS 一中使用拓扑数据分析揭示创伤性脑损伤中精确的表型生物标记关联”在这里,该团队再次使用 TDA 揭示了数据驱动的患者结果模式,以确定潜在的康复生物标志物。使用更传统的单变量统计检验方法,这可以显著预测创伤性脑损伤后患者的预后恢复。这是我们与 UCSF 合作的第二份出版物。这些分析可能为 TBI 患者的未来临床试验中的患者分层和治疗计划提供一种可靠的方法。

stowers Institute of Medical Research 上个月刚刚在 Nature Scientific Reports 发表了一篇名为《扰动蛋白质相互作用网络中拓扑网络模块的识别》的论文。这是我们与 Stowers 合作的第三份出版物( PLOS 报纸EMBO 报道)。斯托斯的科学家们确定了拓扑网络模块,这些模块由在网络中特定位置发现的具有共享属性的蛋白质组成。生物网络由功能模块组成,然而识别和表征这些模块是困难的。第一作者 Mihaela Sardiu 的机场类比非常贴切,“把蛋白质想象成轴辐系统中的机场。该系统在其正常状态下以一种方式工作。但是当一场暴风雪关闭了一个主要的枢纽会发生什么呢?网络的一部分受到影响。网络中某个部分的变化不仅会影响该部分,还会影响周围的部分。”随着更多受干扰的蛋白质相互作用网络变得可用,用像我们这样的高级数学工具分析这些数据集可能会为癌症等疾病的研究提供新的见解&其他人类遗传疾病,其中蛋白质相互作用网络因化疗或固有疾病本身而改变。通过研究蛋白质及其环境,研究人员希望深入了解广泛的生物功能,包括耐药性和导致癌症的突变。

我们在这方面的工作可以追溯到几年前。

例如,在 2016 年,欧洲医学研究联盟 UBIOPRED(呼吸疾病结果预测中的无偏生物标志物)使用我们的软件发现了 1700 个基因签名,以有意义地区分严重哮喘与非哮喘和轻中度哮喘。通过对哮喘人群进行细分,研究人员希望为对治疗有反应的患者开发有针对性的治疗方法。这种疗法在治疗只涉及少量基因的疾病方面一直很有效。开发针对哮喘等涉及成百上千个基因的疾病的靶向药物更具挑战性。这项研究发表在美国呼吸重症医学杂志上,包括 11 个欧洲国家 16 个地点的 610 名患者,补充了之前发表在过敏和临床免疫学杂志上的两篇论文。

几年来,斯坦福大学的大卫·施奈德已经将 TDA 用于复杂的疾病康复领域。在 2016 年发表的一篇论文中,该团队使用我们的软件复制了感染疟原虫的小鼠和人类在转录阶段空间中从健康状态到患病状态,再回到健康状态的圆形轨迹。

2015 年,西奈山的一个团队使用 Ayasdi 的软件探索了 11210 名二型糖尿病患者的表型空间,并确定了 3 个以前没有报道过的具有不同遗传和疾病关联的患者亚组。这是主流新闻,被快速公司采用,并成为科学的封面。

在 2015 年之前有几十篇论文,但有几篇值得注意,包括病毒进化的拓扑结构,来自哥伦比亚的团队提出使用遗传相空间的持续同源性来研究网状进化,并将这一想法应用于病毒的重配和重组。本质上是“进化中的革命”这是 TDA 将现实世界数据中的相关结构可视化的另一个例子,这是经典技术看不到的。数学生物学按照达尔文的生命树模拟了进化。也就是说,进化网络是树状的,在模拟时间进化的基础网络中没有任何循环。这篇论文表明,这种循环存在于真实数据中,TDA 需要找到并理解它们。这是这种结构存在的第一次严格和系统的确立——现在很明显,这是一种普遍存在的现象。

最后,来自 Nicolau 等人的一篇论文于 2011 年在 PNAS 发表,详细描述了该团队如何使用 TDA 构建乳腺癌肿瘤转录相空间的低维拓扑表示,确定了一组先前未报告的具有良好预后和独特分子签名的患者。

如果你感兴趣,你可以在系统生物学最新观点中找到我们的哥伦比亚合作者引用这些突破性论文的评论论文。

在激动人心的遗传学领域,我们将有更多的顶级论文发表!敬请关注。

要成为合作者,请发邮件给我们,我们的名字是collaborations@ayasdi.com

人工智能的短期伦理关注

原文:towardsdatascience.com/the-short-t…

本文是关于人工智能引起的短期和长期伦理问题系列文章的一部分。如果你对 AI 有技术上的理解,一定要跳过前两部分。

围绕人工智能突破的炒作一直让我们陷入歇斯底里,这提醒我们,我们正处于将我们所关心的一切都输给机器的边缘。从暗示机器已经发展出自己的语言的文章,到受流行文化启发的对人工智能危险的描述,我们正在慢慢失去从虚构中过滤事实的能力,看不到噪音中的信号。这篇文章绝不是人工智能及其进展所引发的所有伦理问题的详尽清单,而是正确定义人工智能是什么、不是什么的入门读物,以及对算法给我们的劳动力市场、公民自由和政治带来的一些短期缺陷和危险的务实审视。

狭义人工智能 vs 人工广义智能

为了全面剖析人工智能广泛的伦理问题以及这个领域是如何发展的,对人工智能有一个正确的理解是必不可少的。人工智能*(以下简称 AI)* 是一个计算机系统,它可以执行通常留给人类认知的任务。这些任务的范围可以从狭义的任务到理论上更广义的任务。狭义人工智能(Narrow AI),是智能系统在狭窄领域和用例中的应用,如下棋、驾驶汽车和在 X 射线上识别癌症。举个狭义 AI 的具体例子, Waymo 的自动驾驶汽车系统可能在驾驶汽车方面很优秀,但它永远不会开飞机,也不会下棋。或者,广义人工智能*(将被称为 AGI )* 是一个可以完成无数任务的人工智能系统。需要注意的是,AGI 系统并不存在*(还没有),今天所有的人工智能应用都被认为是狭义的。我们已经获得的最接近某种形式的普通智能的东西是 Deepmind 的 AlphaZero,它能够在没有任何事先指令的情况下征服围棋、象棋和松木游戏。我们对 AGI 的概念化,无论是关于如何到达那里,还是它广泛的伦理问题,仍然是基于理论的。然而,这是一个至关重要的研究领域,因为强大的 AGI,没有正确的价值取向(在未来的博客文章中会有更多关于价值取向的内容)* 有能力从根本上改变我们生活的世界。

人工智能技术前景

除了将人工智能划分为狭义的人工智能和 AGI,对当前人工智能应用的技术前景有一个模糊的理解是值得的。最近,流行媒体一直在交替使用诸如*、【人工智能】、、【深度学习】、*等术语。然而,为了更清楚地理解人工智能中的伦理问题,必须区分这些术语。我们可以将这三个术语视为同心圆,人工智能包含机器学习,机器学习包含深度学习。

机器学习围绕着创建可以从大型数据集学习有用模式的系统,并因此提供有用的见解。机器学习本身分为三个主要类别——第一个是监督学习,它需要创建理解一组数据点*(输入)和标签(输出)之间关系的系统,从而在未标记的数据点上提供结果。例子包括对借款人是否会拖欠贷款进行分类的系统,预测未来股票价格的系统等。或者,无监督学习正在构建可以简单地基于相似特征或特性从数据集中识别有意义模式的系统。例如,根据相似的购物行为对客户进行聚类,通过异常检测识别欺诈行为,以及根据用户的相似兴趣推荐电影。最后,强化学习是机器学习的一个分支,它试图在一个定义良好的环境中坑一个智能代理,有一组可能的动作和一个目标函数(奖励)最大化。我们可以想到自动驾驶汽车(代理)行驶在高速公路上(环境)其唯一的目标是不发生事故(奖励)*例如。

最后,深度学习是机器学习中使用的一种技术,它利用大量数据和神经网络——一种受大脑结构启发的机器学习技术——来理解数据集内的模式。最近人工智能在计算机视觉和语音识别等领域的突破几乎都导致了深度学习研究,更重要的是计算能力的商品化。

直观地说,把机器学习想象成对孩子大脑建模的尝试。儿童从其他人的动作中学习**(监督学习)试图辨别世界上不同物体之间的相似性,例如将形状相似的乐高积木组合在一起(无监督学习)并在没有直接输入的情况下导航困难的环境,例如攀登架(强化学习)**。深度学习是机器学习中的一种技术,是人工智能最近突破的根源。

The AI Technical Landscape

短期道德问题

目前笼罩着人工智能的短期伦理担忧,与寻求接管地球的类人机器人的好莱坞转世毫无相似之处。与其通过天真的拟人化来思考人工智能的危险,不如将人工智能视为有能力在公共和私人领域取代人类决策的计算机系统或算法。也就是说,人工智能系统将在直接影响我们生活的后台进程中,自动实现不同利益相关者之间的信息流动。这可以是看似良性的过程,比如我们在脸书上看到的帖子(在最近的丑闻之后就不那么良性了),或者我们在网飞上得到的电影推荐,也可以是更重要的过程,比如信用评级预测个人的累犯率

The Trap of Hollywood Inspired Anthropomorphism When Thinking About the Dangers of AI

事实上,人工智能的短期伦理担忧主要源于管理自动信息流的系统的脆弱性,它们被拉拢和侵蚀集体真理概念的能力。因此,通过人工智能对劳动力市场的影响*(即其自动化信息流的能力)*、其强化现有刻板印象和偏见的能力以及其刺激威权倾向的能力来看待人工智能的短期危险是有用的。

I)人工智能及其对劳动力市场的影响

在他的书《第三次工业革命》中,杰里米·里夫金假设能源、通信和运输技术创新的融合是结构性经济变革的根源。根据里夫金的说法,这些创新的融合引入了所有以前的工业革命。例如,廉价蒸汽动力印刷机*(通讯)、煤炭(能源)的发现以及蒸汽机驱动火车(交通)的发明是第一次工业革命的根源。相反,他认为电话的发明(通讯)、石油的发现(能源)和汽车的发明(交通工具)是第二次工业革命的关键。展望未来,他预计互联网通信技术(通信)、可再生能源(能源)以及自动驾驶汽车和卡车(交通)的发展将迎来第三次工业革命——这是一个以零(或几乎为零)*边际成本运行的价值链将通过相互通信的传感器在“物联网”上协调的范式,所有这些都由人工智能系统管理。

无论人们认为里夫金是对还是错,都有待辩论——但不值得辩论的是,人工智能系统将使信息流自动化,并侵蚀我们在不断扩大的经济活动范围内对人类决策的需求。围绕这一范式转变已经说了很多,公众对劳动力市场结构性变化的焦虑是可以理解的。然而,对于人工智能在劳动力市场的不同影响,以及它如何导致失业率上升,改变就业动态,加剧经济不平等和改变全球经济相互依赖,有一个清晰的视角至关重要。

人工智能系统对失业率的潜在负面影响存在广泛分歧。当前的研究领域充满了相互竞争的数字,从仅在美国就有 47%的工作面临自动化风险,到整个经合组织经济体中只有 9%的工作面临自动化风险。这些差异背后的原因源于不同的方法——研究指向更高的预期失业率着眼于整体工作,而预测较低预期失业率的研究倾向于着眼于工作中的任务。我怀疑真相介于两者之间——需要对自动化对一个行业的影响进行更深入的分析,纵观整个潜在职业链,从高度重复的*(即自动化的高风险)到不重复的(即自动化的低风险)*。

Income Inequality Being at the Heart of 21st Century Populism

一旦我们考虑到人工智能的广泛使用加剧收入不平等的潜在可能性,正确识别预期失业率的需求就变得尤为突出。一种观点是,自动化投资将被吸引到机器人的比较优势将比人类高几个数量级的经济领域*(即智能工厂),将机器比较优势较低的工作留给人类。然而,并不能保证这些工作会有高薪。因此,收入不平等将会加剧,因为中低收入工作的工资将开始下降,为政治动荡和剧变铺平道路,西方世界最近兴起的一系列民粹主义运动就是明证。*

此外,人工智能不仅仅是破坏劳动力市场的稳定,还可以在改变现有和未来工作的动态方面发挥作用。从一个角度来看,技术乐观主义者经常指出,数字化和计算机化的兴起催生了共享经济——这是事实。然而,重要的是要看看共享经济生态系统核心的不同服务中存在的动态,以及人工智能如何在管理这些服务的中央机构和填充这些服务的工人之间存在的信息和权力不对称中发挥作用。AI Now 最近的一份报告探讨了当前正在进行的研究,即优步如何使用其司机数据来激励他们乘坐无利可图的车辆,以推进其为客户提供便捷用户体验的目标。除了算法形式的管理,传统经济将经历动态变化,未来的工作不再要求专业化,而是普遍化。此外,创造力和技术知识将是基本工具包的一部分,此外还有与机器沟通和一起工作的能力——因此,重新培训当前的工人和重新想象当前的教育系统都是最大限度地减少人工智能对不断发展的劳动力动态的破坏所必需的。

2017 年,麦肯锡全球研究所估计,全球超过 60%的工作中,有 30%的任务面临自动化的风险。然而,重要的是要注意到,对就业影响的分布因国而异。专家指出,第三次工业革命将会有赢家和输家,高出生率的发展中国家是其中最大的输家——一些人甚至出去说,发展中国家几乎 70%的工作面临自动化的风险。正如我们今天所知,发展中国家主导生产价值链支柱的当前经济相互依存模式可能会不复存在,因为机器人生产的竞争成本将迫使发达国家的制造商在国内生产。这种经济相互依赖的变化将带来政治不稳定、大规模移民以及随之而来的焦虑。因此,为迎接即将到来的价值创造转变,对劳动力市场进行再培训至关重要。

II)人工智能系统中的偏差

人工智能系统*(更具体地说是一种机器学习算法)的关键目标之一是根据我们提供的关于两个或更多人口的一些数据集,在这些人口之间划出一条区别线。例如,根据两个肿瘤群体(一个是癌性的,一个不是癌性的)的数据训练的机器学习算法,提供的数据集是肿瘤的高度和宽度,可以预测未来的肿瘤是否是癌性的。该算法通过识别一条线(一条判别线)*来做到这一点,这条线最好地区分了癌性肿瘤和非癌性肿瘤。

A Machine Learning Algorithm Learns to Discriminate Between Cancerous and Benign Tumors

在获得贷款、医疗保险和其他问题上推断这一过程,分析与社会*(即种族、地址、性别等)、经济(收入水平、教育等)和政治(政治派别)*维度相关的数据,很容易看出人工智能系统可能会强化当今社会中存在的偏见。

人工智能系统中的偏差可能有不同的原因。之前提到的人工智能 Now 报告深入研究了人工智能偏见的起源。简而言之,机器学习算法需要对数据进行训练,才能输出预测。训练数据经常会有偏差、扭曲、不完整或不准确。举个例子,2015 年,谷歌图像分类算法将两个黑人归类为“大猩猩”——这个问题可能源于不平衡的训练数据,并显示了当前人工智能系统的不完善,这些系统在狭窄的任务中可以拥有超人的智能,但缺乏常识。尽管他们尽了最大努力,谷歌对这个问题的解决方案是阻止图像识别算法一起识别大猩猩。此外,收集数据的方式往往会导致有偏见的结果。数据要么是由人工标记的,要么是从现有的网络服务上刮下来的,而且很少受到审核机制的约束。此外,嵌入到机器学习算法中的任何偏见都很难解释,从而更难发现。这导致机器学习应用程序的偏见在部署后被发现,正如 Propublica exposé 所证明的那样,一个机器学习应用程序在预测累犯率和批准假释方面对黑人有偏见。

超越训练数据不平衡——机器学习算法受制于复杂性和可解释性之间的权衡。也就是说,通常在机器学习算法的性能和决策透明性之间存在权衡。由于回归和决策树等基本机器学习算法为我们提供了理解他们为什么做出决策的能力,因此深度学习模型等更复杂的系统仍然是一个“黑匣子”。使深度学习模型更加可解释的研究仍在进行中。然而,我们今天使用的许多应用程序,如面部和语音识别软件,无法解释他们为什么做出这样的决定。

三)人工智能,政治和政府

人工智能可以被视为一种通用技术——与电力类似,它的影响可以横向追溯到人类生活的各个方面,用例出现在医疗保健、工业、金融等领域。它的无处不在不仅有能力在我们的经济体系中产生结构性变化,而且有能力颠覆我们当前政治和治理框架中的现有关系——有可能强化专制倾向和扩大现有的权力不对称。更重要的是,人工智能受益于我们生活中的连续数字技术,这使我们开发出一种有效的*【监控】设备,由私营和公共部门提供支持。越来越多的企业(更重要的是科技公司)以提供更个性化的体验和更好的广告定位为名,依赖于收集客户信息,从脸书喜好到位置数据。另一方面,政府一直以国家安全的名义压制公民自由和隐私权,爱德华·斯诺登等告密者的证词就是明证。在此需要说明的是,这种“监控”*设备的发展因国家而异,可以采取许多不同的形式,这在很大程度上取决于数据隐私法的性质、私营部门和公共部门之间的合作程度,以及最重要的基础设施限制。因此,有必要将人工智能对政治和治理构成的潜在危险视为一场针对现有治理形式的突然政变,而是朝着数字专制的缓慢而模糊的前进。

抛开警告不谈,AI 提供了一系列先进的模式识别工具,如果建立在这个*“监视”*设备之上,将大大降低政府压迫的成本,动摇现有的社会政治安排,并侵蚀客观真理的概念。由人类未来研究所最近发布的一份报告提供了大量关于人工智能可能实现专制特征的方式的描述。首先,人工智能提供了一种具有成本效益的方法来识别潜在的政治异议者——因为我们在网上留下的数字痕迹从食物偏好到我们喜欢看什么类型的节目,可以为政治倾向提供具有统计意义的预测。最近的美国选举和剑桥分析公司丑闻证明了这一点,脸书的数据被用来推断用户的政治倾向和心理特征以便更好地将他们作为政治广告的目标。为了更好地孤立持不同政见者,更好地预测他们的行动,并制造各种形式的反对意见的抑制因素,可以采用同样的程序。主要是,大赦国际提供的工具包使政府能够使持不同政见者成为持不同政见者更昂贵的选择,因为改进的识别和监测技术为在持不同政见之前或之后逮捕和惩罚持不同政见者提供了有利条件。此外,政府可以建立社会信用体系,这是一种政府可以根据某种信任程度给其公民打分的措施。中国计划在 2020 年前实施社会信用体系,该计划利用了各种数据点,包括金融数据、与个人在线关系相关的人际数据以及其他社会维度。这种信用体系将是一个人的孩子接受什么类型的教育,是否有机会获得公共住房,工作资格,甚至恋爱关系的决定性因素。这种信用系统有可能强化专制政权的权力基础,并系统地自动惩罚异议行为。

An Illustration of Deepfakes in Action, Transposing the Face of Actress Gal Gadot on a Pornographic Video

此外,政府有能力以前所未有的水平制造同意,有能力使用人工智能机器人渗透到在线社区,这些机器人可以有效地回应异议团体,并促进政府的谈话要点。这些机器人还可以通过人工智能支持的视频和音频编辑技术*(也被称为“deep fakes”)来实现,这些技术可以创建非常可信的篡改视频。Deepfakes 最近变得引人注目,因为某些 Reddit 社区开始使用它在色情视频中移植名人的脸。虽然 Deepfakes 本身值得探索(在未来的博客文章中会有更多介绍)*,它有能力将假新闻、网络欺凌以及社会凝聚力碎片化,但它侵蚀对异议的信任的能力是惊人的。

结束语

我在开始这篇文章时,并没有详尽地列出人工智能的短期伦理问题,而是介绍了如何思考人工智能的崛起所引发的伦理问题。这样做的目的并不是支持某种新排外主义,而是提出关于技术将在我们生活中扮演的角色的重要问题。技术乐观主义者可以写一篇更长的文章,讨论人工智能的短期和长期好处,它有助于药物发现,实现个性化和预测性医疗,为个人提供更高程度的自主权,并有可能将我们从人类的苦差事中解放出来。这篇文章没有停留在光谱的任何一端,而是在一个务实的中间,承认人工智能的潜力,同时保持警惕,并对其缺点提出问题。这些问题需要政策制定者、政治家,最重要的是公民做出细致入微、深思熟虑的回应。关于如何弥合安全和人道的未来与技术进步之间的差距,需要我们做出结合硬科学和社会科学的深思熟虑的回应。

最终,技术专家通常会分化成两个对立的阵营,一个认为技术是中立的,另一个认为技术不是。然而,我们的数字生活和线下生活之间的桥梁,以及人工智能的崛起及其组织我们的社会、经济和政治的能力,彻底颠覆了这一鸿沟,并让我们不禁要问: 我们希望它保持中立吗?

在 Python 笔记本中跟踪 for 循环的进度和预期运行时间的最简单、最干净的方法

原文:towardsdatascience.com/the-simples…

一段时间以来,当谈到我在笔记本上的代码单元的进展时,我经常感到被遗忘在黑暗中。因此,我想找到一种简单明了的方法来跟踪 for 循环进行到什么程度。

最终输出应该告诉我当前的进度、当前的运行时间和预期的运行时间,如第一幅图所示:

Final Output Example

虽然使用 IPython 小部件可能有更好看的解决方案,但下面的方法是我发现的最简单的实现方法。在过去,我倾向于简单地打印当前的循环进度,但是这样做意味着我们将有一个很长的循环每个阶段的列表,如下所示。

Previous Method used for Tracking Progress

相反,我希望进度输出在同一行中。我们可以通过三个简单的步骤实现这一目标:

1)从 IPython.display 导入“clear_output”函数

2)在每个循环结束时,打印当前进度

3)在下一循环步骤开始时删除当前进度

这意味着我们本质上是在循环的每个阶段替换文本,也意味着我们没有一个长列表,否则我们可能会有。这显示在下面的代码示例中,其中突出显示了提到的三个部分。

Print Replacement Method for Cell Output

我们可以通过估计预期的总运行时间来进一步改进这个输出。这可以通过交叉引用当前花费了多长时间和进展了多远来实现。当然,这是一个非常粗略的计算,并且假设花费的时间是线性的,但是它至少给出了大概需要多长时间。在下面的代码中突出显示了新的计算方法,我们还免除了前 5%的预期时间计算,以避免不准确。

Print Replacement Further Improved

我希望你觉得这是有趣和有用的,如果你有任何问题,请让我知道。

谢谢

哲学(philosophy 的缩写)

神经网络的最简单介绍

原文:towardsdatascience.com/the-simples…

30 天写作挑战

这是我的30 天写作挑战 的第 10 天。我每天都在努力写一篇短文,为我建立机器学习团队的新角色做准备。7 天发表了 7 篇文章,刚刚休了 2 天假。你可以在我的机器学习之山——到达大本营阅读一周总结。

到目前为止,我一直专注于简单的数据科学算法。它们是强大的技术,因为它们实现起来很简单,但是组合起来比它们各部分的总和要大得多。然而,如果不真正深入到神经网络——人们在谈论人工智能时通常会想到的东西,这个系列就不完整。

让我们回到起点,想想生物神经元,即构成大脑的细胞。它们的工作方式启发了我们将要研究的神经网络。

简单地说,神经元被树突上的输入所激发。刺激可能来自一个神经或另一个神经元,这无关紧要。如果输入足够强,轴突就会放电,另一端会有输出。同样,这可能是另一个神经元或神经,它实际上是在移动你的肌肉。想象一下装满咖啡杯的刺激。如果咖啡杯溢出,它就会被激活。不同的神经元会被不同水平的输入激活。有些只需要一点点刺激,有些需要很多刺激。

我们可以非常简单地用数学建模。如果所有输入x的总和乘以权重w大于或等于激活阈值 theta,则神经元f(x)为 1。否则就是零分。

训练一个非常简单的单神经元神经网络(技术上是一个感知器)是非常容易的。如果我们知道我们所期望的结果(即监督学习),那么新的激活阈值被计算出来:

计算每个神经元的新权重:

不要让符号让你分心。它们很容易计算。每次你训练神经元时,激活阈值会向最佳值靠近一点,每个输入的权重都会得到调整。

我已经编写了一个示例脚本来训练一个有两个输入的神经元,只有当两个输入都激活时才激活它。它首先在几轮训练前分配随机权重和随机激活阈值。

在训练之前,输出是完全错误的。即使只经过 100 轮训练,该模型也能为任何给定的输入生成正确的输出。

这只是一个简单的例子来介绍神经网络的概念。它很琐碎,不太可能对任何现实世界的问题有用。不过,你应该知道我们所说的神经元是什么意思,以及我们如何使用一些输入的预期结果来稍微接近产生正确输出的权重和激活阈值。

神经网络的真正力量是当你把很多很多的神经元结合起来,创建一个大的网络。您可以解决的问题类型会显著增加。在下一篇文章中,我们将看到如何修改这个例子来解决一个更复杂的问题。

这是我的 30 天写作挑战 中的一个帖子。我是一名软件工程师,试图理解机器学习。我没有博士学位,所以我将用简单的语言和大量的例子来解释事情。

关注我的Twitter查看我的最新帖子。如果你喜欢这篇文章,请点击下面的心形按钮来分享——这将有助于其他人看到它。

监督学习和非监督学习的简单、深刻而复杂的世界

原文:towardsdatascience.com/the-simply-…

人工智能(AI)很像生活中的关系。有时候,你投入的东西很简单,就能得到你想要的结果。其他时候,我们只能说,过程变得有点复杂,有时结果并不完全是你预想的那样。换句话说,你可以在两种关系中输入相同的内容,但是不同的路径会导致不同的结果。然而,两者都是学习过程。在人工智能的世界里,这被称为有监督和无监督的深度学习——和大多数关系一样,你输入的内容和你得到的输出之间的最短距离并不总是众所周知的直线。

什么是深度学习?

在我们深入研究什么是有监督的和无监督的深度学习之前,你应该知道深度学习是从一个叫做机器学习的过程进化而来的。机器学习采用一种算法或一套规则,在没有特定编程的情况下创建输出。想想社交网络如何从你的帖子中挖掘数据。例如,你和你的朋友去你最喜欢的寿司店吃饭,并在网上分享你的经历——你喜欢什么,觉得不喜欢什么,照片,你会回来吗——一旦你将这些输入到你的社交网络,一种算法就会收集关于你输入的珍闻,提取你喜欢什么,不喜欢什么的模式,甚至根据你的照片提取你的长相。该算法可能会发现,你大约 23 岁,每月与朋友在这种特定类型的餐厅吃饭两次,喜欢加州卷鳗鱼寿司。然后,它会根据这些数据向你发送广告。机器学习反复收集关于输入的信息,尽管没有被告知如何这样做或在哪里寻找这些信息。

深度学习将它提升了一个档次。它接受您的输入,发现它可以对其进行分类而不产生问题(有监督的)或聚集未标记的信息,尝试对其进行分类以便有意义(无监督的),然后接受该输入并创建某种可行的输出。这是一个分层的体系结构,能够理解从一层到另一层非常抽象的数据。这就是深度学习如何模拟人脑的多方面复杂性——它的神经通路处理大量信息,这些信息在它有意义(或没有意义)之前是没有意义的。

有监督的深度学习:通向期望的接吻路径

当你的上司在工作中监视你时会发生什么?像大多数人一样,这让你抓狂,所以你倾向于选择阻力最小的方式,找到最没有挑战性的方法来快速完成工作,同时满足你上司的期望,对吗?假设某个主管训练你处理信贷申请。所述主管知道那些申请中有什么,并且知道任何申请的预期结果是批准还是不批准。你从培训中学习了如何以最佳方式工作,以达到期望的结果,即你的主管需要的结果。有监督的深度学习就是这样。我们人类倾向于在一个特定的层次中处理:我们接受生活的输入,并基于我们的经验(训练),我们组织这些输入,以便我们先前的知识可以理解它,处理它到一些预期的结果。受监督的深度学习属于保持简单愚蠢(KISS)路径,这是一条阻力最小的路径,可以实现一些预期。

有监督的深度学习非常适合决策:以我们的信用卡为例。银行接受你的申请,并根据其风险类别进行审核,然后决定是否批准你的申请。程序要点如下:

应用程序是来自客户的输入

银行将来自应用程序的数据输入到算法中

该算法从过去的应用中注意到数据遵循特定的路径(建模)

例如:婚姻状况-单身,已婚,离婚,丧偶都有一个是或否的答案

该算法采用银行确定的申请数据、是或否答案,并遵循其流程图(路径规则)

当算法决定数据属于批准和未批准的主要类别时,数据流经该路径

给出批准或不批准的预期决定

客户被批准,是一个快乐的营员或没有被批准,并想知道如何固定他的信用评分(必须把它扔进去)。

监督深度学习不仅仅是你典型的开灯关灯二元函数。该算法将标准分类为银行的风险预期,将风险处理为两个决策之一。这种分类方法被称为二项式分类(两个选择)或多类(两个以上的选择)。

无监督的深度学习:探索未知的旅程

如果有监督的深度学习是获得预期输出的途径,那么无监督的深度学习会获取相同的输入,并试图在避开某些输出之前理解它。以你最好的朋友为例,让我们去参观艺术博物馆。你们都被一幅玫瑰画迷住了。你们中的一个人从字面上理解,另一个人从象征上理解。对你来说,一朵玫瑰只是一朵玫瑰,而你想去看梵高的展览。对你的朋友来说,玫瑰是黄色的,而它应该是红色的,你的朋友不明白为什么这幅画代表友谊而不是爱情。在一切准备就绪之前,梵高是不存在的——直到你的朋友沉思那朵玫瑰,以及为什么她现在的关系挂在博物馆的墙上,这一切才发生。

无监督的深度学习没有目标,没有对输入的期望。它依靠探索各种可能性来得出一些结论。当你可以去参观梵高的展览时,你的朋友却在苦苦思索如何将友谊和爱情带给一个人幸福生活的所有途径分类,以及如何从错误中吸取教训。

决策时间:如果你当时知道你现在所知道的

人类是主观上有知觉的生物,其决策过程更多地迎合意外(无监督的深度学习)而不是预期(有监督的深度学习)。电脑没有人的因素。他们没有经验。他们只有数据集、函数和“思维”,这些都是基于以有序或无序的方式将信息汇集在一起的层。

随着神经网络和人工智能变得更加复杂,深度学习算法也是如此。你可以在监督、非监督或深度学习组合包中进行选择,以解决从信贷审批到令人难以置信的复杂机器人数据集的任何问题。还记得社交网络的例子吗?当你上传图像时,一种叫做卷积神经网络(CNN)的东西在得出你大约 23 岁的结论之前挑选出特征,汇集相关数据:餐馆、朋友笑、朋友皱眉、面部识别、背景识别。将这些小组组合分类,你的形象就充分说明了你是谁以及你是如何生活的。想象一下,他们会从你上传的视频中发现什么?然而,有时生命不得不在不受 knowns 监督的情况下展开,重建(自动编码)数据驱动的宇宙,而自组织地图将模糊的数据模式转化为二维(想想地形图),这让你进一步思考为什么玫瑰的任何其他名字只是反向传播(眨眼)。

UX 数据的不稳定性

原文:towardsdatascience.com/the-slipper…

在我的文章证明设计中,我谈到了拥有做出正确产品或产品决策的证据有多难。有些项目非常昂贵,以至于需要很强的说服力才能获得预算。这是一种自然的权衡。在你完成了项目的一部分之后,或者甚至在你已经完成了项目并且现在有兴趣进行第二阶段的开发之后,事情并不会变得更容易。

许多 UX 专业人士谈论数据的重要性,但让我们诚实地说,在设计和决策的周期中,有无数的事情是无法衡量的。

可以衡量什么?

  1. 人们需要你的产品吗?
  2. 产品本身以及人们如何使用它。
  3. 想法和迭代——使用用户研究。

基本上你和你的团队能做的一切。它占创作过程的 20%左右。

你创造了什么?是什么启发了你的想法?你是否受到其他你无法衡量的设计的影响?太好了。

什么是不可测量的?

竞争对手

你不知道为什么你的竞争对手会这样做。你没有他们的数据,也无法知道他们的决策过程。

产品前行为

有许多营销产品正在试图解决这个问题。然而,在用户旅程的这一部分,设计师没有控制权。无论是操作系统还是平台,用户之旅都是由推动者推动的。每个平台都会为你提供一些数据和测量结果,但它并不完全是在监测 UX,它更多的是通用的和市场导向的。在大型组织中,获取这些数据点也是一个挑战。另外,每一条数据都要核实。有了平台,几乎不可能验证。

分析学

在您的服务中,您需要通过不同的工具(MixPanel、GTM、Data studio 等)进行检查和关联。).对于 UX 和产品角色来说,理解分析工具已经变得至关重要。这就是公司如何做出关键决策的原因,也是为什么通常用三到四个系统对数据进行检查和交叉匹配,以比较和查看数据是否可靠。

操作系统设计模式

事实上,谷歌决定某样东西应该看起来是这样的,但这并不意味着它是最好的方式。这意味着他们可能测量了它,它是有效的。这也意味着,凭借他们的影响力,许多应用程序将采用它,它将变得熟悉。但不一定代表更好。其中一些决定是为了与 iOS 或 Windows 等其他平台区分开来。其他决定是一个伟大设计的折衷解决方案,因为该设计可能会申请专利。这正是谷歌和微软收购摩托罗拉和诺基亚,剥夺他们的专利,然后卖给别人的原因。所以如果你见过一个设计,即使它很有名,也不意味着它是最佳实践。

仅仅因为它有效,并不意味着它是一个很好的体验。许多公司看不到改变的理由。当一家公司处于垄断地位时,这是很常见的..比如在易贝买东西……有用吗?,是啊…这是一个很好的体验吗?不,一切都很麻烦:接收信息,发送信息,浏览 2000 年至今的易贝版本。

It works but it ain’t nice and at times very confusing

相比之下,亚马逊更加雄心勃勃,并且“非常缓慢地”重新设计他们的体验,使之实用和令人愉快。

你已经拿到数据了!但是,等等,可能会有偏差。

让我们来看看这是如何发生的。

错误的实现

仅仅一行简单的代码或一个错误事件的选择就可能导致每次点击都被计为两次。这就是为什么检查多个系统很重要——正如我前面提到的,在用户旅程真正开始之前的阶段可能会有问题。

意图

即使你有很多经过验证的数据,你怎么能相信你看到的数据呢?每个收集数据的人(甚至可以说是科学家)都试图以一种迎合他们议程的方式展示数据。数据可以以非中立的方式收集和呈现。这很自然,从营销公司到 UX 设计师,每个人都希望自己的项目成功。

Source giphy.com

介绍会;展示会

媒介是武器,理解为什么选择某样东西很重要,就像理解平面设计决策一样:它们向我展示了什么,又向我展示了什么。

当前几个有偏差数据的例子及其使用方法:

  1. 脸书第十次承认测量错误
  2. 脸书被指责是假新闻问题的一部分…谷歌也是,但它很少用于休闲和内容消费。
  3. 脸书正在删除成千上万的虚假用户,这就是为什么他们不断调整新闻提要,谷歌也在对搜索结果做同样的事情。
  4. 剑桥分析公司(Cambridge Analytica)因其影响英国/美国用户的方法而受到怀疑和质疑

处理它的主要方法

批评家

要苛刻挑剔,尽量找角度。如果你总是认为每个人都有兴趣,生活会很糟糕,但即使意识到了会让人悲伤,用批判的眼光看待事情更聪明,尤其是在商业中。所以当你看到一个新功能,在你兴奋完或者嘘完之后,想想他们为什么要创造它?这是谁的决定,他们的兴趣是什么?将其价值与商业、营销、用户满意度、设计等联系起来。猜猜这个概念是哪个部门想出来的?想想接下来他们会把它带到哪里。它的未来是什么?

受影响但意识到

没有什么是公开的,你有的只是用户体验数据的踪迹。我之前写的一篇关于脸书的帖子得到了回复,上面写道“但是数据在哪里?”答案是:这些数据是内部的,其他任何人都无法获得。太隐秘不能暴露,是他们的秘制酱。这是不是意味着我不能写或者分析它?我不这么认为。

在 Instagram 中,你会知道有多少照片被上传到 Instagram,因为这是一个影响保留/花费时间的财务数据。但你不会知道这些照片中有多少是从电脑、用户画廊或专业相机上传的。重要的是,在批评或受其影响时接受它,并知道你正在处理的数据的局限性。

这里举一个的例子whereyouhavedatabutcanonlyseepartofth 虽然没有好的方法来计算维修收入的多少,但苹果的服务收入拉低了净销售额的 70.4 亿美元,而总销售额为 529.0 亿美元。”

意识到你的控制水平,但是看看你是否能更进一步。拥有一个操作系统和参与一个操作系统之间的差别是巨大的。当我在三星工作时,我们正在为电视设计 Tizen 操作系统的核心。我们可以无限制地控制一切。如果我们建造了它,我们可以追踪任何我们想追踪的东西。但是,当你成为生态系统的一部分时,你需要遵守规则,并在整个过程中获取你所能获取的一切。这就是为原生操作系统设计如此有趣的原因,尤其是当其他人正在构建和增加您的知识时。

数据很重要,但我认为决策只能在一定程度上基于数据。在我看来,构建决策的大约 70%是经验、愿望以及与业务其他方面的一致性。一个好的设计师或产品人员应该影响和说服他人,但这并不完全取决于数据。数据只是武器库中的另一个工具,它适合特定的用途。

如果你喜欢的话。A.