机器会有移情能力吗?
人类是神奇的生物,没有机器可以复制这种魔力。
Image licensed from Canva
八十年代的我是一个孤独、古怪的孩子,总是渴望一些不存在的东西。我在书中找到了我的朋友,我有一个在科幻小说中读到的关于机器人的梦想,在某个时候,我们身边会有机器人,它们可以减轻我们孤独的痛苦。一个机器人,可能是我的朋友——会在我需要的时候出现在我身边安慰我,会爱我。
我说过,我很孤独。
三十年和许多技术之后,我们正以指数加速的方式走向人工智能的未来。三越和索菲亚今天可以成为不可思议的明天。
我是一个移情者,这让我变得非常有人情味,容易犯错。一台机器能够同情我吗?它会变得有同情心吗——以人类的方式?
Don’t change the subject. — source
当我们谈论人工智能时,我们很快就会谈到人工移情的话题。对于一台机器是否能够或者曾经能够发展出同理心,不同的学校有他们非常独特的观点。除了明显的“是的,他们可以”和“不,他们不能”之外,还有“当它看起来是真的时,谁在乎它是不是假的”的答案
在我看来,这与其说是剖析技术能力,不如说是找到正确术语的问题,这更是一个伦理问题,而不是科学问题。
当我们谈论智能和人工智能时,我们已经遇到了一些值得一提的主要差异。
H 人类智慧的力量在于它不局限于理性思考。我们能够处理信息,我们也考虑到了世界的不可预测性。我们的集体意识让我们知道什么是正确的,而不需要试图理性地找出它。
我们的情绪在我们的决定中起着巨大的作用,不管偏见是好是坏,我们也在用我们的悲伤、快乐、爱、恨、挫折来衡量我们的理性决定。我们的记忆、引发的创伤、希望和恐惧以及个性对我们如何应对周围的世界有着巨大的影响。
机器做不到这一点,即使它们想这样做。他们不能把一定比例的独特的不可预测性、恐惧、创伤计算在内——因为这不是他们的工作方式。
A 人工智能是关于观察人类,学习动作和反应,积累大量数据,并在此基础上创建复制信号。深度学习和自学的人工智能过程使人工智能能够处理和处理数量惊人的数据集——这些数据如此庞大,以至于我们有限的人类思维无法理解。
因为机器学习非常快,并且能够基于所有理性数据集做出快速决策,所以它们能够产生移情的外观。
但是同理心与处理的数据量或观察到的信号数量不是线性相关的。同理心是指根据我们自己的经验,认同他人,感受他们的感受,能够在没有信号的情况下预测他们的下一个感受。
“人们发出的信号只是他们经历的内心故事的一小部分。通过观察我们的所作所为和所说的话,你和我都远远超过其他人认为我们是什么的总和。”杰森·米勒
机器能有同理心吗?
根据剑桥英语词典的定义,同理心是指通过想象处于他人的处境会是什么样子来分享他人的感受或经历的能力。这是一种在精神上认同并完全理解另一个人的力量。
Artificial empathy— source
这个定义没有区分人类共情和人工共情。我们的定义来源于我们的人性——我们用人类的能力创造的任何东西都默认来源于人类。所以,每当我们谈论一般意义上的移情时,我们指的是人类的能力。如果我们需要参考其他东西——在这种情况下,我们正在教机器的人工共情和机器正在教自己的人工共情——我们需要澄清我们正在谈论的是人工共情。
当谈到人类的同情心时,这里有两个机器无法填补的空白:
- 机器无法在精神上认同人类
- 机器永远不会完全理解一个人
人类是有魔力的
安东尼奥·达马西奥谈到人类时说:
…我们不是会思考会感觉的机器,我们是会思考的感觉机器。
为了全面了解人类,我们需要首先了解是什么让我们成为人类。是我们拥有的感觉,而不是我们认为的想法。正是什么使我们成为人类,使得我们不可能完全理解我们,因为我们的意识是一个异常复杂、不断变化、灵活的结构——因此不同于任何机器构造。
首先,我们不是理性的生物。我们的意识不是由我们的大脑或理性思维驱动的,它不是一个线性和逻辑的结构——它有一些理性的线索,但它比那更有层次。
我们的意识是由我们如何体验世界来定义的,由我们的五种感官,视觉、听觉、触觉、味觉和嗅觉驱动,结合对感官的情感反应。没有机器可以像人类一样体验世界,没有机器可以复制相互联系的感官体验和我们对它们的情感反应。没有一台机器会感到真正的饥饿或干渴,或强烈的性欲,或对失去安全感的恐惧,或对未来事件(如死亡)的焦虑。
我们的意识也是由我们的集体意识塑造的,我们的集体智慧、记忆、文化——超越了个人的感知。在我们的社会中,它以价值观、规范、集体道德的形式表现出来。它表现在我们的人际交往中,表现在故事、谈话、传说、笑话中。在元通信和其他微妙的信号,如理解符号,讽刺,语气和理解,有时缺乏一个标志是标志本身。例如,在谈话中,面对令人震惊的事实毫无反应就像瞳孔因恐惧而放大一样。我们的意识存在于我们创造并坚持的信念、希望和信仰体系中。它们不符合逻辑,也不合理,但它们确实存在,而且深深扎根于我们的集体思维中。
当我们与他人互动时,当我们交流、告知、教导、相互支持时,通常需要同理心。我们的交流是独一无二的,不可能被复制,因为我们意识的所有层次、复杂性和不确定性被认为是所有互动的基础。
你无法教会机器像人类一样交流,机器也无法自己学会像人类一样交流。因为当我们以人类的方式做事时,我们利用了集体和个人的意识,而这是机器所不具备的,它们不是俱乐部的一部分——我们永远无法让它们完全参与进来。
机器无法像人类一样感受到共鸣
这不是一个技术问题,这是一个共情的解释问题。这并不是说相信下一级机器进化可以学会已经具有同理心,而是说人类的经验永远无法复制——如果可能的话,我们会将我们的能力退化到某种可测量、可计算的东西。
正如亨利·基辛格在《大西洋月刊》的文章中所言,在一个将人类经验简化为数学数据,并由他们自己的记忆来解释的机器世界中,意识应该如何定义?
我们拥有不可估量的独特的东西,可以称之为魔力,也可以定义为灵魂。
Light blue or dark blue — mitsuku.com
说到机器,我怀疑我们人类能否为一台我们无法百分之百理解的机器创造出某种东西。这是如此的无形,以至于它的存在甚至可以被否认,也不能被科学证明。
更不可能的是,一台人造机器能够生产出无法用它的能力来描述的东西——那是从数据、算法和逻辑中推导出来的。
机器不可能有人类的灵魂;他们无法学会感受或拥有人类的本能,他们无法复制人类魔法的多样性和不可预测性。
他们可以有人工共情,但它与人类共情的不同,就像塑料花与真花的不同一样。它可能很近,非常近——但它永远只是表象,而不是真实的东西。我个人不会有任何其他方式。
如果你想要更多,请注册我的每周 简讯 。
我的顾客会回来吗:和 CLV 一起玩
自从 Kaggle 的 Olist 数据集上线以来,我已经在过去的几天里修补客户终身价值模型了。特别是,我想探索久经考验的概率模型,BG/NBD 和 GammaGamma 来预测未来的购买和利润。我还想看看机器学习方法是否能做得很好——简单地预测客户是否会重复购买。这些模型做同样的事情——预测客户购买——尽管方式不同。也许在一篇更新的文章中,我可以提出一些衡量标准,在平等的基础上对它们进行比较。不管怎样,我们开始吧。
笔记本可以在 Kaggle 找到。这里:https://www . ka ggle . com/krsnewwave/CLV-with-lifetimes-and-feature tools
Olist 是一家巴西电子商务网站,它在 2016 年至 2018 年期间如此慷慨地在其网站上分享了 10 万个订单。数据可以在这里找到。
数据看起来像什么
该数据集包括约 95,000 名客户及其在该网站的订单,这些订单是约 73 个类别的约 33,000 种产品的约 100,000 个独特订单。它还包括商品的价格、客户支付的金额、信用卡分期付款,甚至与订单相关的恐惧成本。它的数据应该很像你自己的电子商务公司的数据。😉
购买模式似乎很正常,定期上涨,并在 2017 年 12 月大幅飙升。
数据显示,每位顾客的购买模式非常稀疏,每位顾客平均购买 1.03 份订单和 1.07 件商品。
英国地质调查局/NBD 模型
对于概率模型,我使用了许多这种绅士内核的代码。寿命库对于快速构建这类分析非常有用。它需要 RFM 输入数据,这要求每个客户,我们有他们最近购买的信息,他们购买的频率和他们购买的总货币价值。
贝塔几何负二项分布解决了两个问题,1)客户活跃或不活跃的概率(在文献中是活着还是死了!),以及 2)购买次数的概率。(1)由贝塔分布建模,以及(2)由泊松分布建模。对于这两个预测问题,每个个体或群体都有自己的参数。一个简单的方法是用一枚硬币和一个骰子来模拟(1)和(2)。
这里是衡量我们的模型性能的视觉效果。在校准期(左)和验证期(右)测试中可以看到,由于缺乏关于这一行为的数据,该模型在尝试预测 4 次或更多次购买时失败。
下图描述了 x 轴上的频率和 y 轴上的新近度。经常购买和最近购买的人在图表的最右边。在下图(a)中,未来 120 天的预期购买次数非常低(0.6 次),即使是最忠实的买家(最近购买且经常购买)。在(b)中,即使是最忠实的买家也只有 60%的机会活跃。这是因为数据中每个客户的购买模式非常稀疏。
使用该模型,可以根据未来的预期购买次数输出客户的排名。该排名可用于确定不同细分市场的营销策略。这是前 4 名客户的每个购买模式后存活的概率。这些前 4 名是根据半年内的最高预期购买次数计算出来的。
我还尝试了一个 GammaGamma 模型,该模型考虑了所购物品的货币价值。然而,预测并不好,在维持集上只有 0.35 的相关性。这可能是因为购买模式的稀疏性。我将把它留给一个更深入的研究,看看 GammaGamma 模型相对于购买的稀疏性在哪里崩溃。
更广阔的视角
从上一节中,我们抽象出了购买物品的性质和数量、购买的离散时间窗口以及支付的上下文。所有这些都会对重复购买的问题产生影响。在本节中,我们将使用特征工具库为我们自动创建特征。
将数据集连接在一起的过程有点乏味,但回报是一个完全自动化的特征工程例程。实体集将如下所示:
在转换特征之前,我们声明一个截止日期和训练窗口。截止日期之后的交易将被截断,截止日期之前的训练窗口期将构成我们的训练集。我们将预测客户是否会在截止日期后购买*,因为她在截止日期前的所有交易都在*训练窗口内。我们的截止日期将是 2018 年 7 月 1 日。**
在 featuretool 的深度要素合成(DFS)的帮助下,数据集将如下所示。DFS 使用关系中声明的索引来创建聚合和基本功能。例如,我们可以有一些简单的东西,如付款总额(深度=1),也可以有一些复杂的东西,如客户订单最大付款的平均付款额(深度=2)。回想一下,一个订单可以有多次付款,一个客户有多个订单。
模型的结果如下:
不算太坏。增加训练窗口显著提高了我们的指标,更复杂的模型并没有带来太多的改进。和以前一样,我们可以得到一个客户留下来的输出概率作为我们的排名。然后,我们可以围绕这些级别制定策略。
最后,我们将讨论最重要的特性。通过默认方式获得随机森林和梯度增强树的特征重要性是微不足道的-所有树的基尼系数的平均下降。我将让读者通过抽样来确定排列的重要性。
在 2018 年上半年购买的客户可能会在下半年再次购买。购买了许多订单并有许多付款(信用卡分期付款)的客户可能会再次购买。付款类型=未知可能表示全额付款。还有关于特定城市或州的特征,尽管这些仍然是可疑的,因为树偏向于具有许多级别的类别。
虽然,一些顶级功能是转移视线。谁听说过一个未知的星期几,月份或年份?这些可能是数据中的错误,模型以某种方式利用这些错误来获得优势。这项研究在投入生产之前还需要进一步的清理和完善。
感谢阅读。
原载于 2019 年 1 月 9 日【itstherealdyl.wordpress.com】。
我的机器学习系统会被攻击吗?
机器学习的安全性
打开 ML 安全威胁模型
机器学习真正将小说带入了现实。但是任何新发明(包括 ML)的不幸事实是新的能力伴随着新的漏洞供攻击者利用。因此,如果您是组织中负责安全的 CISO 或项目经理,您应该如何看待这些新的漏洞?你的 ML 真的会被攻击吗?如果是这样的话,如何以及何时会发生违规?
以上问题的答案是一个 ML 安全威胁模型——一个结构化的框架,展示了您的 ML 系统上所有可能的威胁载体。
机器学习仍然是非常新的,它的威胁向量知之甚少。然而,在这篇文章中,我们将尽最大努力去思考它们,看看我们是否能在文章的结尾给出一个考虑 ML 安全性的坚实框架。
让我们试一试。
威胁模型派
在 Calypso ,当我们考虑威胁模型时,我们喜欢考虑三个独立的部分:
世卫组织会攻击你吗?一切都始于世卫组织。袭击者。对手。另一边。你可以让定义世卫组织的工作变得非常简单或者非常困难。一方面,你可以说是“黑客”。另一方面,这实际上给了你什么信息?“一个了解机器学习如何工作的黑客”可能更好。“一个了解机器学习如何工作并有数学背景的黑客”更好。你能在世卫组织周围放得越详细越好。
**他们为什么会攻击你?**为什么超级和世卫组织关系密切(下面我为什么把两者放在一起讨论)。“为什么”背后的想法很简单——他们可以攻击你,但是他们为什么要攻击你呢?那里一定有适合他们的东西。一笔赏金。奖励。同样,定义“为什么”可以简单到说“为什么不”(不推荐),也可以难到说“违反保密性,然后将从我的 ML 系统中提取的数据出售给某个实体 X”(好得多!).
他们会如何攻击你?这是技术部分。现在你知道了世卫组织以及为什么会攻击你——下一个问题是他们会怎么做?如果我们在谈论机器学习——它们会在训练或推理过程中攻击你的 ML 吗?他们对你的系统有多少了解?一个非常有趣但也很有挑战性的方面是考虑如何选择。他们也许能够黑掉你的 ML,但是如果黑掉你的数据管道更容易,他们会那样做吗?
让我们进入更多的细节。
世卫组织+为什么
世卫组织。概括地说,我喜欢把对手想象成“严肃”的级别。我脑子里是这样想的:
- 聪明的研究员/工程师摆弄着一个商业 ML 系统(可能是为了实际的研究——比如对 Clarifai.com这里的攻击)
- 白帽子参与了一项赏金计划
- Penntester /红队队员进行测试
- 黑客行动主义者攻击商业 ML 系统来证明一个观点
- 黑帽攻击商业 ML 系统以赚取金钱奖励(无论是通过实际部署漏洞还是在暗网市场上出售)
- 有组织的黑帽集团攻击商业传销系统(想想匿名、影子经纪人和末日军团)
- 国家资助的组织(在这一点上,它基本上是网络战)
考虑你的对手有多严重是很重要的,因为这决定了他们可能获得的知识和工具的种类,从而决定了你的防御水平。
现在是为什么。为什么,在我脑子里,分解成两个问题:
- 他们的目标是什么?
- 他们的动机是什么?
在回答目标问题时,我喜欢用中情局三重奏:
三位一体的三个要素——机密性、完整性和可用性——指的是安全的三大支柱。如果你能保护好这三者——你就有了安全保障。
保密性(或 隐私 )攻击旨在从你的 ML 系统中提取敏感信息。例如,攻击者可能想要推断某个特定的数据点(例如您)是否是某个特定训练数据集(例如医院出院)的一部分。
完整性攻击让你的 ML 模型出错,但是——重要的是——悄悄地做。例如,攻击者可能希望您的分类器将恶意文件视为良性文件,而不影响其整体性能,因此您永远不会注意到。在 integrity 中,攻击者可以有许多子目标(从难到易):
- 源/目标分类错误 —攻击者希望将特定类别(“恶意”)归类为特定的其他类别(“良性”)。
- 有针对性的错误分类 —攻击者希望将特定类别(“停止”标志)归类为任何其他类别(例如“限速 60”或“限速 45”或“狗”或“人”或其他)。只要没有停)。
- 误分类——将任何一个类归入任何一个类。进入可用性攻击领域(见下文)。
- 信心降低 —攻击者希望你的模型失去信心(当它对阈值起作用时很有用,例如在欺诈分数的情况下)。
可用性攻击旨在彻底摧毁你的 ML 系统。比如,如果在训练池中插入了足够多的坏数据,那么你的模型学习到的边界基本就是垃圾,模型就变得无用。是机器学习界的 DOS 攻击。
攻击者的目标旁边是攻击者的动机。这个更加主观,有点和世卫组织纠缠在一起。如果你是一个定义上的黑客行动主义者群体,你会试图发表某种声明,如果你是一个黑帽组织,你可能想要经济利益。
怎么
技术部分。怎么会有人真的去破坏你的模型呢?(在这里,我将重点关注特定于 ML 的漏洞,并排除传统的网络安全问题,如 ML 服务器上的 DDOS。)
我们可以从四个方面对洗钱攻击的方式进行分类:
- 计时(训练/推理)
- 功能(白盒/黑盒/灰盒)
- 局限性(干扰距离/功能/领域/再训练频率)
- 可供选择的事物
时机 —这是指在 ML 部署管道中攻击发生的位置。这里有两个宽泛的选择——训练时间和推理时间。
- 在训练时间的攻击意味着攻击者能够影响训练数据集(无限的力量,但很难做到和额外的限制)。
- 在推断时间的攻击意味着攻击者只能干扰即时输入(可能强大,也可能不强大,这取决于模型,但更容易执行,因为只需要注入修改的输入)。
能力 —这是指攻击者对 ML 系统内部的了解。具体来说:
- 白盒攻击假设攻击者知道底层数据的分布(可能访问部分数据)、模型的架构、使用的优化算法以及权重和偏好。
- 黑盒攻击假设攻击者对 ML 系统一无所知(所以以上事情都没有)。它们可以有两种类型:硬标签(当攻击者仅从分类器接收到预测标签时)和置信度(当攻击者从分类器接收到预测标签以及置信度得分时)。
- 灰箱攻击位于中间。例如,攻击者可能知道模型是什么样子,但不知道底层数据是什么——反之亦然。
你也可能在科学文献中遇到类似于 NoBox 的术语。NoBox 指的是对代理模型的攻击,攻击者基于他们对目标 ML 系统的理解(无论多么有限)来重建代理模型。我不认为单独对此进行分类是有意义的,因为一旦攻击者建立了代理模型,它实际上就变成了白盒攻击。
经验法则:更多的知识=对攻击者更有利,对我们更不利(要了解更多,请参见我在闪避攻击上的帖子)。
限制指的是限制攻击者行为的某些规则。这些确实是 ML 系统特有的。例如:
- 在图像中,通常将扰动空间限制为“距离”度量,通常选自李、或规范。顺便说一下,这里有一个有趣的争论,关于这是否真的有意义(阅读这篇 33 页的白皮书了解更多)。
- 在恶意软件中,攻击者只能在某些地方以某些方式扰乱文件,否则它将失去其恶意功能或破坏所有文件。
- 在部署在物理设备(卫星、汽车、无人机、监控摄像机)上的系统中,攻击者可能被限制在修改物理域中的输入。
- 在训练时的攻击中,攻击者需要两件事情:a)系统基于新数据不断地重新训练(否则他们不能注入坏数据),以及 b)系统从外部来源获取数据,最好没有人在循环中批准它。
- 在隐私攻击中,通常攻击者需要一个没有查询限制的公共端点,并输出置信度得分。可信度分数特别严格,例如大多数反病毒产品只是告诉你他们认为文件是“恶意”还是“良性”,没有进一步的细节。
替代方案 —这是我想简要提及的最后一个方面。我曾经听一个做了 25 年保安的人用“电”来形容攻击者。他们总是选择阻力最小的道路。
这是一个很重要的标准,但我发现它经常被忽视,这个标准很容易建立或破坏威胁模型。攻击 ML 组件实际上是攻击者得到他们想要的东西的最简单的方法吗?例如,如果目标是侵犯隐私——他们会经历在你的分类器上构建影子模型的麻烦来获取数据,还是有更容易被利用的漏洞?
将这一切结合在一起
我给了你很多(事实上是我们 6 个月的研究和思考!).让我们一起来看看:
现在,让我们撒一些术语。
在对抗性 ML(ML 安全的学术方面)中,通常从“为什么”维度取“目标”,从“如何”维度取“时机”,来命名攻击。输出如下所示:
- **闪避攻击(也叫“对抗性例子”)**绝对是最受欢迎的类型。它们发生在推理时,利用了 ML 固有的漏洞(或者是“特性”?🤔—阅读我在闪避攻击上的帖子了解一下。
- 中毒攻击发生在训练时间,可能有两个目标——完整性或可用性。攻击者可以在您的训练池中插入一些精心选择的示例,在其中构建一个“后门”(完整性),或者他们可以插入如此多的坏数据,以至于模型的边界基本上变得无用(可用性)。了解所有关于中毒机器的知识就在这里。
- 隐私攻击可能是最少被研究的,但尤其是在今天,一个极其相关的威胁。在这里,攻击者不想干涉你的机器学习模型的工作,相反,他们想从中提取私人的,可能是敏感的信息。在我的完整文章中阅读隐私漏洞和修复方法。
就是这样!希望到现在为止,你已经对如何考虑你的 ML 系统的弱点有了一些概念。
保持安全。
NumPy 会变成 Python 吗?
ython 是世界上最流行的统计计算语言。这很有趣,因为 Python 从未被设计成统计语言。虽然 Python 确实拥有一些功能属性,如无类计算,但 Python 在很大程度上是一种面向对象的语言,更类似于 C++这样的语言,而不是 r 这样的传统统计语言。考虑到这一点,Python 的代码库最初并不是为数据科学而创建的。
像 R,Julia,甚至 Go 这样的语言经常实现基函数和操作数来做线性代数。Python 的基础中缺少这些函数。如果您已经用 Python 做了一段时间的线性代数,那么您很可能已经在代码中断言了这个经典短语:
将 numpy 作为 np 导入
Numpy 将 Python 的统计能力从 20%提高到 100%。作为一名数据科学家,实际上很难避免使用 Numpy。Numpy 不仅具有 Python 语言所缺少的线性代数能力,而且还采用了许多有用的数学和数据管理特性,这是人们很难离开的。
不仅如此,Python 的数据表管理库 Pandas 也是基于 Numpy 构建的。这使得集成几乎无缝。Numpy 和 Pandas 以其稳定、强大的代码库使数据科学变得流畅。这个概念是 Python 在数据科学方面领先于许多其他语言的全部原因。包是简单的,无论如何也不会令人费解。
鉴于大多数高级语言都实现了自己的线性代数函数,Python 稍微低级一点,需要的不仅仅是单个操作数或函数,这似乎有点奇怪。
比较
那么,没有 Numpy,我们如何在数组之间进行数学运算呢?Python 与我们这个时代的其他统计语言相比如何?实际上,Python 的数组迭代非常棒。zip()函数使得同时遍历两个列表成为可能。
array = []for f, b in zip(array1, array2): res = f * b array.append(res)
尽管这在任何想象中都不难,但当我们将其与另一种语言(如 R 或 Julia)进行比较时,我们会遇到一种更简单的方法来获得两个数组的乘积。
以 R 为例:
array <- array1 * array2
r 使它变得容易;您可以将星号操作数用于数组乘法以及整数和双倍乘法。
在朱丽亚身上:
array = array1 .* array2
在 Julia 中,我们可以简单地在星号前面加一个点,使它成为。*,我们将两个数组相乘。
随着 Python 越来越成为一种统计语言,看看 Numpy 是否会成为基础语言将会很有趣。很明显,Python 在统计学中的使用将会影响更多功能特性渗入到语言中的可能性。尽管 Numpy 肯定仍然会提供许多重要的工具,但我无法想象这个基础语言不采用一些指针,而 Numpy 却不这么做。虽然像 Numpy 这样的工具可能已经在很多机器上使用了,但是需要一个包在一行中执行数组乘法确实让人感觉有点奇怪。
虽然 Numpy 的一些特性是否被压缩到 Python 基础中并不是什么大问题,而且 Numpy 肯定被视为 Python 的扩展,但我确实认为这个概念很有趣。事实上这是很有可能的,而且既然如此。虽然符合这一想法似乎是合理的,但也有很好的理由弃权。随着 Python 越来越广泛地用于数据科学,我们可能会看到一些迎合统计的特性。
人类及其栖息地会成为未来通信网络的一个组成部分吗?
2035 年电信网络愿景
由于固定和移动电信网络似乎随时随地围绕着我们,我们可以获得广泛的通信服务。我们与世界另一端的朋友、同事或家人视频聊天,我们远程控制(半)自主机器人(从吸尘器到工业机器人)。
但是这些网络应该如何发展才能满足 2035 年的需求呢?让我们区分网络支持:(1)人与人之间的交流;(2)工业应用;以及(3)人工智能。之后,我们将简要考虑 2035 年后的网络可能会是什么样子。
100 Mbps 的“人类带宽”
对许多人来说,宽带连接已经成为一种必然——就像电一样。然而,经常旅行或经常在路上的人会认识到,拥有稳定的宽带连接不应该是理所当然的。
因此,我们对 2035 年的第一个期望是,我们将最终设法建立一个大型、稳定的网络,以支持人与人之间的通信以及人机交互;一个不再是电信运营商今天喜欢吹嘘的千兆速度的网络,而是一个符合我们的“人类带宽”的网络。
毕竟,无论我们谈论的是人与人之间的交流还是人机交互,都仅限于我们的感官能够处理的内容。研究表明,人类的带宽大约等于 100 兆比特每秒(Mbps)。
换句话说:一个能够为每个用户提供连续、有保证的 100 Mbps 带宽的网络足以让我们的感官饱和。这样的网络应该在 2035 年成为现实。
当然,问题是 2035 年我们是否还会有同样的生理(感官)限制。也许我们也能找到解决这些问题的方法?想想被用来检测神经疾病的神经探针。在未来,我们可能能够利用这项技术在我们的大脑中创建直接的输入和输出通道,这意味着无线通信将有可能通过我们大脑中的神经探针实现。
但是:仅仅因为我们的大脑中有一个直接的输入和输出通道,并且可以,至少部分地绕过我们的感官,这并不意味着我们的大脑会自动拥有处理额外刺激的吸收能力。因此,即使在这种情况下,似乎也不需要超过 100 Mbps 的带宽(无论是明天还是 2035 年)。
对于那些不热衷于植入的人来说,智能隐形眼镜和增强现实眼镜肯定也可以提供额外的输入。然而,矛盾的是,这些眼镜将需要超过 100 Mbps!为什么?因为我们的感官需要“正确的”100 Mbps。想起下面这个比喻:人们常说一张图等于千言万语;然而,找到精确的 1000 个词来完美地描述一张照片要困难得多……我们的感官也是如此:2035 年的智能眼镜将不得不传输更多的“词”来为我们提供我们实际需要的数据……
然而,无论你认为最有可能发生的场景是什么,都不会有任何空间让那些经常掉线的联系存在——今天依然如此。因此,我们预计电信行业将继续投资于(小蜂窝)网络,这些网络可以有效地为每个人提供 100 Mbps 的均匀且有保证的速度;将人的带宽放在中心位置的网络,而不是今天的(峰值)速率。
面向工业 4.0 应用的灵活网络
在工业环境中,我们将面临“工业 4.0”的需求——由于广泛的数字化,其特征是新的生产方法、新产品和新的商业模式。
工业 4.0 概念的成功取决于我们能够灵活满足新需求和趋势的程度。因此,难以重新配置的有线环境有被淘汰的风险。然而,与此同时,Wi-Fi 等无线技术在具有大量反射的生产设施中往往不够可靠…
在工业环境中,我们需要一个稳定可靠的网络,保证每台机器的无线带宽约为 10 Mbps,并且延迟有限。
因此,在工业环境中,我们也必须转向能够提供有保证的同质覆盖的网络,而不是部署能够提供高峰值速率的不稳定网络。如果人们预计配备增强现实眼镜的人类同事也将在未来的工厂里走动,情况将尤其如此。5G、大规模 MIMO 和分布式大规模 MIMO 等技术可以在实现这一未来愿景方面发挥重要作用。
人工智能:关注能效
普遍的预期是,到 2035 年,人工智能(AI)将使我们的生活变得更加轻松,并将帮助我们在生活的各个方面做出更好的决定。但我们如何确保这一愿景成为现实?
秘方可能是“分发”情报。如果我们想以有效的方式引入人工智能,将所有的智能放在大型中央数据中心不是一个选项;当然不是在必须做出实时决策或需要快速预测的场景中,比如无人驾驶汽车。另一方面,你不能把智能放在设备本身(传感器等)。),因为它们的电池和存储容量有限。因此,智能必须放在所谓的网络“边缘”。
但是,即使将智能放在网络边缘可以确保没有过多的数据流通过网络(这将需要大量的能量和带宽),我们仍然需要将网络的能效提高 10 到 100 倍,以使可持续的人工智能变得可行。
我们可以通过优化电路和技术的设计,也可以通过开发更好的(数据)压缩技术来做到这一点。
人类及其栖息地会成为未来电信网络不可或缺的一部分吗?
我们刚刚描述的三个网络在 2035 年的共同点是,它们将不再使用最大容量和峰值速率等指标进行评估。更重要的考虑因素是可靠性、能效和有保证的带宽。
一个例外(尽管可能只有在 2035 年之后)将是必须支持真正沉浸式应用的网络,如全息显示和虚拟现实应用。这些应用将需要一个由非常小的蜂窝组成的网络,该网络能够以极其节能的方式在仅几米的距离内提供数十千兆位每秒(Gbps)的传输。想想 ATTO 科技。
Imec researchers at Ghent University are developing ATTO technology that enables mobile connections of 100 Gbps with a latency of less than 10 microseconds — at short distances.
现在,让我们来看看,从长远来看,我们将如何塑造这样一个世界。如果我们真的考虑未来(甚至超过 2035 年),我们将如何部署和管理所有这些无线蜂窝?今天,一些地区正在部署光纤网络来实现这一目标——但如何部署全球光纤网络,即使是在安装电缆非常昂贵和困难的地方?
也许大自然可以帮助我们。或许我们可以——例如通过基因操纵——培育出具有集成天线能力的杂交植物和灌木?
从长远来看,树根能包含有机穿过土壤的集成光纤电缆吗?
作为一个社会,我们必须真正接受蓝天思维,这主要是因为电信网络在未来将变得更加重要。事实上,这个想法不再是科幻小说:十年前,贝尔实验室/朗讯科技的研究人员已经试图开发一种海绵,它可以生长成光纤电缆来传输数据。当时,进一步的开发被证明在工业上是不可行的——但这个想法仍然很有趣。
Ten years ago, researchers from Bell Laboratories/Lucent Technologies already made an attempt to develop a sea sponge that grew into a fiber cable to transport data. (Copyright: J. Aizenberg / Lucent Technologies)
旁注:良好的连通性来换取关于你自己的信息?
拥有可靠的连接将是一件非常美妙的事情,但是总是有可能在那些可以使用它的人和那些不能使用它的人之间出现两极分化。换句话说:2035 年,世界上可能会有一些地方有很好的(尽管价格昂贵?)连接,以及其他没有连接的地方——或者人们根本负担不起良好连接的地方。这是否会导致未来大型零售商和服务提供商提供连接来交换你的信息?可能吧。
危险?无线大脑接口或智能隐形眼镜是为了交换连接而赞助的,这意味着那些“赞助商”可以看到你看到的一切,感受到你感受到的一切(并可以做出相应的回应)。这也可能意味着一个受赞助者商业利益控制的社会阶层出现了——而更富裕的阶层(可以为中立的连接付费)保留了其独立思考……一个噩梦般的场景?有可能——尽管另一方面,我们可以问问自己,这在今天还没有成为现实。此外,这种情况也促使我们考虑技术的社会影响…
隐私会继续让位于监控资本主义吗
Photo by arvin keynes on Unsplash
快速的技术进步和数字经济日益紧密的联系正在彻底改变社会面貌。建国之初,开国元勋们最关心的问题之一就是政府对个人自由的威胁。开国元勋们在权利法案中加入了第四修正案,“人民的人身、房屋、文件和财产安全不受无理搜查和扣押的权利,除非有正当理由,否则不得侵犯”。创始人的意图已经争论了很久,但众所周知,这其中缺少的是来自私营部门的普遍隐私权。
在今天的数字经济中,经常听到“监控资本主义”这个术语。哈佛商学院教授肖莎娜·祖博夫写了关于这一现象的文章。祖博夫教授的解释是,这些新的私营部门的商业实践和技术挖掘用户的信息,“以预测和塑造他们的行为。”正如《纽约时报》所指出的那样,习惯的形成已经发展成为神经病学和心理学部门的一个主要研究领域。像 Target 这样的公司正在利用“将我们有意识和无意识的模式详尽地渲染到数据集和算法中”,这已经彻底改变了这些公司销售或营销其产品的方式。
祖博夫教授的分析暗示了这样一种信念,即消费者只不过是被硅谷那些实力雄厚、身价数十亿美元的大公司赶着走的“盲羊”。因此,祖博夫教授认为揭露这种技术并呼吁改革是她的道德责任,我倾向于同意这一点。罗伯特·爱泼斯坦博士提出了一个关于谷歌能力的类似理论,这可能证明了可能的“选举干预”我在另一篇名为“这就是谷歌如何破坏民主”的文章中讨论了谷歌的能力
毫无疑问,现代经济依赖于大数据和人工智能(AI)的使用。旧的制造业经济的日子已经一去不复返了,自动化消失了;今天,大多数公司依靠技术和人工智能进行创新。反过来,人工智能允许公司使用算法规则复制任务,有效地自动化曾经常见的工作。这种创新最好解释为创造性破坏的一部分。
算法是一套解决问题的规则。这些规则利用数据或信息来产生特定的结果。例如,在谷歌搜索中输入“大数据”这个词,结果会返回 69 亿个链接。“在不到一秒钟的时间里,[谷歌]算法整理了数千亿个网页,为用户找到最相关的结果。搜索算法通过使用排名系统来工作,该系统由‘一整套算法’组成,”我在 中 写道。这仅仅是一个例子,但是我们每天都会遇到这种算法。
祖博夫教授将监督资本主义定义为“单方面声称私人人类经验是转化为行为数据的免费原材料。然后,这些数据被计算并打包成预测产品,出售给行为期货市场。”
祖博夫教授将监督资本主义定义为“单方面声称私人人类经验是转化为行为数据的免费原材料。然后,这些数据被计算并打包成预测产品,出售给行为期货市场。”YouTube 搜索结果最能描述这种现象。用户将会注意到,在观看了关于他们偏好的视频之后,类似的内容将会被推荐给该用户。YouTube 通过广告创收,广告在视频播放前和播放过程中播放。用户在 YouTube 平台上花费的时间越多,YouTube 产生的收入就越多。这种市场转让的独特之处在于,用户向 YouTube 提供的只是他们的屏幕时间,而不是付费使用服务。
This interview inspired my research into the topic.
这种现在常见的市场转移是祖博夫教授主张的基础。通过技术进步,市场现在已经找到了更多的方法来将消费者的个人信息货币化,并预测未来的结果。例如,智能手表是一种技术娴熟的计时器,可以测量你的心率,跟踪你的健身情况,回复短信和电话,并可以为你指明方向。您输入此设备的信息可能会与医疗保健提供商、营销公司和其他第三方服务提供商共享。你有没有在搜索引擎上搜索某个产品,发现那个产品在不同的平台上给你做了广告?这正是祖博夫教授所批评的框架。
物联网 (IoTs)指的是能够“通过现有的互联网基础设施”连接到其他设备的“日常设备”物联网和当今其他技术先进的产品确实包含内在风险。几乎每个新产品中都有摄像头、摄像机、麦克风和数据收集功能,我们的世界很容易受到持续监控。最近,联邦调查局警告关于“智能电视”能够监控你。类似的故事暴露了亚马逊的 Echo 服务监听消费者的私人谈话。《纽约时报》的一篇文章展示了塔吉特百货是如何给消费者分配一个独特的代码,也就是所谓的客人 ID 号,来“记录他们购买的所有东西”从本质上来说,这个分数成了塔吉特百货的一种“社会信用分数”。在我们的建国之初,从来没有考虑到这种风险,今天,几乎没有法律规定这种服务的合法性。政府监控受一套完全不同的法律管辖。
随着 2001 年 USA PATRIOT 法案的通过,政府监控成为了一个非常真实的现象。关于这种监控工具的合宪性的问题依然存在,关于联邦调查局滥用《T2 外国情报监控法》(T3)(FISA)程序的披露只会增加怀疑。其他问题围绕着众议员亚当·希夫对记者约翰·所罗门、众议员德文·努内斯和总统的两名律师的电话记录的传唤(这些人都是长期受到“特别规则”待遇的个人)).
从本质上说,FISA 程序允许联邦政府在证明违反美国法律的可能原因后,监视或用通俗的话说,间谍,那些被怀疑为外国势力代理人的美国公民的通信。FISA 授权了一大堆程序,但最相关的是 PRISM。PRISM 利用互联网基础设施上的通信框架来搜索特定的关键术语。立法者打算通过法规和标准操作程序来设置足够的安全措施,以遏制非牵连个人被卷入互联网“搜索网”的可能性。因此,情报部门的任务是实施最小化程序。
司法部监察长最近的报告证实了隐私倡导者的观点,即“FISA 法律下的监控行为……缺乏足够的监督和透明度。”纽约时报在一篇标题为的文章中展示了这份报告的含义,“我们刚刚难得一见国家安全监控。太难看了。”不幸的是,指导私营部门监督的参数很少。
许多消费者隐私/倡导团体(美国公民自由联盟、电子隐私信息中心和电子前沿基金会)存在,以对抗隐私滥用或不公平。例如,电子隐私信息中心 (EPIC)致力于“公众关注新出现的隐私和公民自由问题,并在信息时代保护隐私、言论自由和民主价值观。”这些组织经常对公共和私营部门涉嫌滥用职权提起诉讼;他们也是《信息自由法》( FOIA)程序的积极使用者,该程序在适当的时候规定了政府的透明度。
如今,这些消费者隐私组织和美国联邦贸易委员会仍然没有一个全面的框架来解决私营部门层面的监控问题。虽然美国情报界受限于《外国情报监视法》( FISA)和其他相关法律规定的参数,但更广泛的私营部门并没有得到很好的控制。比如面部识别技术就特别有意思。很明显,我们面部的轮廓是高度个性化的,并且在很大程度上是独一无二的。假设一家拥有面部识别技术数据的公司被入侵,该如何处理这些信息?这是一个极其微妙但又至关重要的话题。一些市政当局完全禁止这项技术,而另一些则考虑效仿。这就提出了面部识别技术是否有任何社会效益的问题。Snapchat 使用这种技术来创建用户个人的过滤器。这是否构成了我们打算禁止的那种“恶意”使用?不太可能。
China is an example of a digital authoritarian state.
如果香港抗议者教会了我们什么的话,那就是为了“公众利益”而警惕监视。华尔街日报 写道“摄像头实时输入政府数据库,在复杂的面部识别软件的协助下,中国政府最终希望能够在任何事情发生的三秒钟内识别出任何地方的任何人。”这些建议是为了防止犯罪而制定的。
美国的公共监控有所不同。一般来说,公众不赞成侵犯隐私。最近,美国最高法院在 Kansas 诉 Glover一案中接受了调卷令,EPIC 已经提交了一份法庭之友书状。EPIC 警告说,这一决定会对下游产生重大影响,特别是“当与自动车牌阅读器结合使用时”就本条而言,案件的关键在于警官是否“合理怀疑”司机没有有效的驾驶执照。这名警察没有看到任何交通违规行为,但是,他在假定车辆登记所有人正在驾驶车辆的情况下,启动了交通拦截。隐私倡导者担心,自动车牌阅读器可能会导致执法部门在没有观察到交通违规的情况下拦截司机。在这种情况下,使用执法监控工具可能会以牺牲自由为代价阻止犯罪。
“智慧城市”的概念也存在类似的问题正如福布斯杂志所描述的,智能城市将“基础设施和技术结合在一起,以提高市民的生活质量,增强他们与城市环境的互动。”“智能城市”依赖于无线网络的速度,这就是为什么许多隐私倡导者对 5G 网络持谨慎态度。该提案旨在改善公共交通,有效监控“实时能耗数据”,并“提供准确的交通报告”。
谷歌已经提议在多伦多创建一个真正的“智能城市”。前谷歌高管埃里克·施密特(Eric Schmidt)在宣传让谷歌掌管一座城市的所有好处时,深情地谈到了这个想法。随着时间的推移,随着顾问和合作者的辞职,问题越来越多。一位合作者称谷歌项目为“智能监控城市”,而不是“智能隐私城市”。她的评论是因为有消息称,这个名为 Quayside 的谷歌“智能城市”将允许第三方“访问在 Quayside 收集的可识别信息”。
码头区虽然位于多伦多,却是“监视资本主义”问题的典型。与欧盟不同,美国没有一个全面的法律框架来管理信息的传播、披露和收集,除了管理特定部门和加利福尼亚州的法律之外。隐私辩论中一个令人惊讶的盟友是特朗普政府的司法部。2019 年 12 月 10 日,华盛顿邮报 报道司法部长威廉·巴尔正在探索“新的法律工具来调查公司侵犯隐私的行为以及他们监管在线内容的方式。”似乎司法部打算审查硅谷的大公司;然而,这并没有解决问题的根本原因:公司的信息共享和收集做法。**
随着技术通过物联网在社会中变得更加普遍和根深蒂固,管理数据处理和控制的合法框架将是至关重要的。其中一个建议是将社交媒体公司或信息服务提供商视为法律认可的受托人,它们“有义务行使忠诚和谨慎。”这是耶鲁大学法学教授杰克·巴尔金的“信息信托理论”其目的是对特定公司进行监管,就像它们是法律认可的受托人一样,这些公司在保留产生利润的动机的同时,按照消费者的利益行事。这种激励结构将我们引向正确的方向,但最好使用同意、限制收集、准确性和透明度的公平信息原则来补充。隐私倡导者担心,如果没有足够的参数,美国私营部门可能会开发出中国社会信用评分系统 (SCS)的私人版本。
如今,私营部门的监控设备越来越多,并且出现了独裁政府滥用这些设备的例子,难怪许多人担心这些工具可能会被滥用。毕竟,纳粹政权对权力的滥用让位于现代德国对隐私的过度关注。这种威胁被称为“数字威权主义”,随着全球民粹主义运动的兴起,这种威胁正在加剧。
在美国,我们很幸运,第四修正案保护我们免受政府对我们生活的侵扰;然而,这种保护只有在争取的时候才有保障。隐私专家和公民自由主义者不仅要关注政府的监控,还要关注私人公司可能的监控。服务提供商、州立法者、国会和专家必须确定如何对这些工具的感知优势进行成本效益分析,同时将侵入性降至最低。一个很好的起点是关于信息收集实践和用户同意的严肃辩论。在爱德华·斯诺登揭发了联邦政府的做法后,我们必须再次重新开始这场辩论,以解决当前做法的不公平性。
Mitchell Nemeth 拥有佐治亚大学法学院的法学硕士学位。他还拥有佐治亚大学的 BBA 金融学位。他的工作已经在经济教育基金会、梅里恩·韦斯特和红色&黑色杂志上发表。他最喜欢的作家是乔纳森·海特教授、马特·泰比和托马斯·索维尔。
科学研究能够避免人工智能陷阱吗?
现在很明显,人工智能、机器学习和深度学习不再是热门词汇,因为它们越来越多地出现在每个行业。尽管这一趋势在 2017 年被夸大了,但我们现在可以肯定,到 2020 年,这些技术将无处不在。
科学研究并没有落后,人工智能已经成为这一领域重大变革的导火索。机器学习技术,如医学图像处理、通过分割的生物特征识别和基于人工智能的医疗诊断,被健康研究人员以不加批判的方式正式采用。
AI 造成的这种颠覆性效果,终于很简单理解了。机器学习模型遵循一个不可避免的黄金法则:我们能提供给它们的(无偏见的)数据越多,它们就变得越准确和可靠。对于研究人员来说,高性能计算和大数据的融合似乎是圣杯,也是新发现的唯一可能途径。最近的一个例子加强了这一观点,在我们的星系中心发现了数千个黑洞——不是通过望远镜发现的,而是通过分析近 20 年前收集的长期存档数据发现的。
这种吸引力甚至不是一种趋势。在这些技术面前后退会被认为是一种科学蒙昧主义。我们进入了一个数据似乎能解答一切问题的时代。人类——尤其是研究人员和科学家——更倾向于相信其他人当中实验次数最多的代理人,这是完全合理的。让我们假设这样一种情况,你因为一个可能很严重的健康问题而不得不去看医生,你可以选择咨询一位有 20 年经验的著名专家,或者一位刚入行的年轻医生。你会看到谁?毫无疑问,我们都会选择第一个方案,我们将是正确的。
然而,休斯顿莱斯大学的 Genevera Allen 博士最近通过提出了关于可重复性和缺陷模式的问题,引起了科学界的警觉。根据 Steven N. Goodman、Daniele Fanelli 和 John P. A. Ioannidis 给出的定义:
“方法再现性是指捕捉再现性的原始含义,即尽可能精确地实施实验和计算程序,使用相同的数据和工具,获得相同结果的能力。”
再现性和重复性是验证任何关键研究结果的必要组成部分,忽视这些步骤会严重损害任何从科学经验中得出的假设或结论。这个问题可以通过分析大量数据得到部分解释,在这些数据中检测无意义模式的概率相当高。尽管存在一些实践来通过计算相关模式(与真实世界相匹配)应该被检测到的频率来防止这种复杂性,但是该指标类似于真正的正阈值,是不可靠的。最终,统计方法不适合成功地解决这个问题。只要人工智能代理既没有知识也没有世界模型,他们就不可能区分无意义和相关的模式。
为了更进一步,提到科学研究中最抽象的领域,也就是理论领域,会很有意思。让我们准确地以一个子领域即理论物理为例。这一研究领域旨在探索、描述和理解我们世界的性质,如地球上的物理现象、原子和分子的内部结构以及研究宇宙起源和演化的量子力学和宇宙学。与实验物理不同,理论物理的研究只能通过使用高度分析的概念和方法,通过将物理现象转化为数学模型来进行。
在最近一篇标题为“人工智能能解决爱因斯坦不能解决的问题吗”的文章我们可以读到:
“因此,像普朗克、爱因斯坦、海森堡、薛定谔、狄拉克等名字经常被誉为我们这个时代最伟大的科学天才。毫无疑问,他们解决了一些极其复杂的问题,而且做得非常出色。但人工智能很可能会做得更好。”
我们是 2019 年,我个人不同意这个观点。我会重新表述,我的问题会变成:“人工智能也能解决爱因斯坦能够解决的问题吗?”
我只能同意这样一个事实,即机器学习和深度学习在分析大量数据时,以前所未有的速度找到相关性、可能的因果关系、以前未知的相关模式以及所有这些,对于许多任务来说,效率惊人——但我们也必须说,我们距离希尔伯特·西蒙在 1956 年达特茅斯学院(Dartmouth College)的一次动员会上的预测仍然非常远,他宣布能够挑战人类思维的思维机器“指日可待”。
我甚至不打算提到当我们不满足深度学习神经网络的过度数据胃口或当我们向它们提供有偏见的数据时,深度学习神经网络往往会以惊人的方式失败的情况。但是,即使是最好的人工智能仍然缺乏被认为是真正智能的基本要素。人类可以从事推理,因为他们有常识。由于这一点,他们可以对周围的世界进行逻辑推理。机器不会。
一个真正的人工智能应该能够转移它的学习和智能来解决一个它没有被训练过的问题。 **DeepMind,**一家目前由谷歌拥有的英国人工智能公司强调了他们在游戏 Breakout 的实验中的差距。经过训练后,DeepMind 的人工智能知道如何正确地玩游戏,但事实证明,如果我们仅仅通过在积木中心添加一个牢不可破的区域来稍微改变规则,人工智能会非常缓慢地适应这些变化。在适应新的游戏配置时,人类玩家仍然比机器强。
但我想强调的主要问题是,人工智能无法生成一个假设,规定无法给出预期(最准确)的答案,因为解决问题的更多相关数据可能不会出现在训练数据集中。这正是为什么当想象一个具有高度抽象的人工智能时,它不可避免地会导致怀疑。深度学习不是深度理解的同义词,没有机器学习能够超越我们提供给它们的训练数据。
而且总的来说,AI 最大的死胡同就是一个 AI 不知道它不知道。
爱因斯坦没有数据,最重要的是,没有方程可解——他证明了麦克斯韦方程没有解,并由此开始概念化和介绍狭义和广义相对论。正如你所猜测的,即使我们将与麦克斯韦电磁理论(被认为是爱因斯坦推理的起点)相关的大量数据提供给最先进的 AI,也显然不可能获得作为输出的新的空间和时间概念。
唯一剩下的希望是,明天的伟大头脑将有后知之明,并有能力超越现有的工具,以抵御所有的恐惧,继续被锁定在一个既有希望又没有成果的系统中。
参考资料:
艾琳·迈耶,为天文学的下一个重大发现挖掘长期存档的数据(2018 年 5 月 15 日),thewire.in
Pallab Ghosh,美国科学促进会:机器学习‘引发科学危机’(2019 年 2 月 16 日),bbc.co.uk
伊森·西格尔,人工智能能解决爱因斯坦不能解决的问题吗?(2018 年 5 月 2 日),forbes.com
wired.com,Clive Thomson,如何教授人工智能常识(2018 年 11 月 13 日)
明天太阳会升起吗?机器学习的贝叶斯统计导论
你有没有问过自己,以前从未发生过的事件发生的概率是多少?
在本文中,我们将深入探讨贝叶斯统计的神秘世界,以及它的一些原则,如伯恩斯坦-冯米塞斯定理和克伦威尔法则,如何能够有助于分析现实世界的机器学习问题。
“贝叶斯统计在思考困难的意义上是困难的” —唐·贝里
如果你想深入研究贝叶斯统计背后的数学,这里不是你要找的地方(尽管我以后会发表这方面的文章)。这篇文章主要是向不熟悉这个概念的人介绍贝叶斯方法。
想象一下,你正在设计一座核电站。您的任务是使用数据来确定工厂是否正常运行。这可能看起来是一个相对简单的任务,直到你意识到你实际上没有任何关于核电站发生核泄漏时的数据。你怎么能预测这样的事情呢?
如果你是一个精明的机器学习专家,你可能会建议某种无监督的方法,如(受限的)玻尔兹曼机器,它能够学习“正常”的电厂是什么样子,从而知道什么时候事情有点不对劲(事实上,这是人们预测核电厂正常运行条件的一种方式)。
然而,如果我们从一个更普遍的意义上来思考这个问题,当我们几乎没有或者根本没有反面的例子来比较时,我们该怎么办呢?发生这种情况有几个原因:
- 该事件的概率如此之低,以至于在(有限的)样本数据中根本没有观察到该事件发生。(低概率场景)
- 观察到了,但很少。(数据稀疏场景)
- 失败的结果将是灾难性的,它只会发生一次,例如,太阳的毁灭。(大灾难场景)
传统统计学不太适合这类问题,通常需要不同的方法。
一个更普遍的问题是,我们如何处理极低(但严格非零)或极高(接近 1 但严格不是 1)的概率?让我们先来看几条规则,这些规则是为了研究数学家皮埃尔·西蒙·拉普拉斯提出的一个著名问题而开发的。
日出问题
想象有一天早上你醒来,太阳决定休息一天。这不仅(很可能)会毁了你的一天,打乱你的生物钟,还会直接改变你对太阳的感觉。你会自然而然地更有可能预测到也许第二天太阳也不会升起。或者,如果太阳只是度过了糟糕的一天,第二天又回来了,你对太阳会再次休息一天的预期会比之前高得多。
这里发生了什么?基于新的证据,我们改变了对事件发生概率的看法。这是所有贝叶斯统计的关键,并使用一个称为贝叶斯规则的等式进行正式描述。
贝叶斯法则
贝叶斯法则告诉我们,我们必须从某个事件发生的内在概率开始(在事实发生之前)。我们称之为先验概率。随着新的观察和证据不断呈现在我们面前,我们会基于对证据的观察和对当前立场可能性的判断来更新我们的信念。这个更新的信念被称为后验概率(在事实之后)。
回到我们的日出问题,每天我们都观察到太阳升起,每一次太阳升起我们都更加确定第二天太阳还会升起。然而,如果有一天我们发现太阳没有升起,这将极大地影响我们基于新证据的后验概率。
这在数学上表达为以下形式,乍一看令人望而生畏,但可以抽象出来:我们更新的信念是基于我们最初的信念和基于我们当前信念呈现给我们的新证据(可能性)。可能性表示我拥有的新证据,我的信念正确的可能性有多大?如果我相信明天太阳不升起的概率是百万分之一,然后它发生了,那么我的信念(我的模型)是错的可能性就很大,后验概率会更新预测它再次发生的可能性更大。
Bayes’ theorem.
这是一个非常漂亮的想法,它存在于许多不同的地方,尤其是当它涉及到人类和他们的信仰时。例如,假设你的朋友发信息告诉你,你最喜欢的一个名人去世了。最初,你可能会感到不安,还有点怀疑。当你开始你的一天时,你读报纸,它告诉你这个名人去世了,这种信念会进一步加强。也许你会在电视上看到新闻中对他们哀悼的家人的采访,你的信念会更加坚定。然而,如果你在电视上看到那个人正在接受采访,关于他们已经死亡的谣言正在传播,你对你朋友告诉你的事情的信任就会降低。
这是科学的一个重要方面,理论是通过实验和模拟来证明的,做这些实验和验证理论的人越多,这些理论就越可靠和可信。然而,举例来说,一些信教的人可能决定他们不需要经验证据(至少是同类的)来相信某件事,我们称之为信仰。
有趣的是,我们日常生活中如此普遍的东西对统计学和机器学习来说是如此重要,但它确实如此,我们将讨论为什么。然而,首先,我们需要看一下贝叶斯定理在极低概率下出现的一些问题。
克伦威尔法则
奥利弗·克伦威尔是英国历史上的杰出人物,他在 1658 年的苏格兰教会大会上说了一句名言
“我以基督的名义恳求你,想想你可能弄错了。”
这个短语的使用导致了丹尼斯·林德利(Dennis Lindley)对克伦威尔法则(Cromwell’s rule)的定义,它提出了一个想法,如果一个人以等于零(我知道某事不是真的)或一(我知道某事是真的)的先验概率开始,那么不管向你展示什么证据,你的信念都不会被动摇。
这向我们展示了绝对主义观点的危险,当我们看待可以通过经验观察到的事物时。如果我坚信自己是对的,那么无论任何人说什么或做什么都无法说服我。这是无知的高度,而不是我们想要纳入机器学习模型的东西。如果我们回头看看贝叶斯定理,我们可以看到为什么会这样,如果我们的先验概率是零,那么乘以任何东西,我们的后验概率仍然是零。
原则上(参见克伦威尔法则),没有任何可能性的概率应该被设置为零,因为在物理世界中没有什么是绝对不可能的(尽管它可能是),即使与所有的观察和当前的理论相反。
这种情况发生的理想例子是在神经网络中。当你启动一个神经网络时,你的节点从一些固有值开始。如果将这些节点的权重都指定为零,则这些节点将无法自我更新,因为梯度下降算法的所有迭代都将乘以零。相反,会进行随机初始化(通常用户看不到),这通常可以防止此类问题。
贝叶斯定理的另一个有趣的性质来自于我们对无数次观察后发生的事情的观察,这通常被称为伯恩斯坦-冯米塞斯定理。
伯恩斯坦-冯·米塞斯定理
简而言之,伯恩斯坦-冯·米塞斯定理告诉我们,随着我们获得更多的数据,我们的后验估计将渐近独立于我们的初始(先验)信念——当然,假设它遵循克伦威尔法则。这在某种程度上类似于频率统计中的法律数字定律,它告诉我们,随着我们获得越来越多的数据,样本的均值最终将与总人口的均值相同。
那么贝叶斯统计和正态统计有什么大的区别呢?为什么机器学习专家和数据科学家需要贝叶斯统计?
贝叶斯统计 vs 频率统计
对于那些不知道贝叶斯和频率主义是什么的人,让我来解释一下。频率主义者从频率的角度来看待数据。例如,假设我有一个两面都有头像的硬币。我掷硬币 10 次,10 次都是正面。如果我取所有掷硬币的平均结果,我得到 1,表明我的下一次掷硬币有 100%的机会是正面,0%的机会是反面,这是一种频率主义者的思维方式。
现在从贝叶斯的角度来看。我从一个先验概率开始,我选择 0.5,因为我假设硬币是公平的。然而,不同的是我选择如何更新我的概率。在每次抛硬币后,我会看看我的下一次观察有多大可能是给定我当前的信念(我有一个公平的硬币)。渐进,当我翻转更多的头时,我的概率将趋向于 1,但它永远不会明确地为 1。
贝叶斯方法和频率主义方法的根本区别在于随机性出现在哪里。在 frequentist 域中,数据被认为是随机的,而参数(如平均值、方差)是固定的。在贝叶斯领域,参数被认为是随机的,数据是固定的。
我现在很想强调一点。
它不叫贝叶斯,因为你使用了贝叶斯定理(在频率主义者的观点中也经常使用)。
它被称为贝叶斯,因为等式中的术语有不同的潜在含义。然后,从理论差异来看,你最终会得到一个非常有意义的实际差异:之前你只有一个参数作为你的估计器的结果(数据是随机的,参数是固定的),现在你有了参数的分布(参数是随机的,数据是固定的),所以你需要积分来获得数据的分布。这是贝叶斯统计背后的数学比正常统计更混乱的一个原因,人们必须求助于使用马尔可夫链蒙特卡罗方法从分布中取样,以便估计难以处理的积分的值。其他俏皮的技巧,比如无意识统计学家法则(多棒的名字,对吧?),又名。LOTUS 可以在数学方面提供帮助。
那么哪种方法论更好呢?
这些方法本质上是一枚硬币的两面(双关语),它们通常给你相同的结果,但它们实现的方式略有不同。谁也不比谁强。事实上,我在哈佛的班上甚至有教授经常争论哪个更好。普遍的共识是“这取决于问题”,如果有人认为这是共识的话。就个人而言,我发现贝叶斯方法更直观,但其背后的数学远比传统的频率主义方法复杂。
现在你(希望)明白了其中的区别,也许下面的笑话会让你发笑。
Bayesian vs frequentist joke.
什么时候应该使用贝叶斯统计?
贝叶斯统计包含一类可用于机器学习的特定模型。通常,人们出于一种或多种原因利用贝叶斯模型,例如:
- 具有相对较少的数据点
- 对事物如何运作有很强的直觉(来自已有的观察/模型)
- 具有高度不确定性,或强烈需要量化特定模型或模型比较的不确定性
- 想要声明关于替代假设的可能性,而不是简单地接受/拒绝零假设
看着这个列表,你可能会认为人们会一直想要在机器学习中使用贝叶斯方法。然而,事实并非如此,我怀疑机器学习的贝叶斯方法的相对缺乏是由于:
- 大多数机器学习都是在“大数据”的背景下完成的,其中贝叶斯模型的签名——先验——实际上并没有发挥多大作用。
- 在贝叶斯模型中采样后验分布在计算上是昂贵和缓慢的。
我们可以清楚地看到,频率主义者和贝叶斯方法之间有如此多的协同作用,特别是在大数据和预测分析变得如此突出的今天。我们有各种系统的大量数据,我们可以不断地对系统进行数据驱动的推理,并随着越来越多的数据可用而不断更新它们。由于贝叶斯统计提供了更新“知识”的框架,事实上,它在机器学习中被大量使用。
一些机器学习技术,如高斯过程和简单线性回归,有贝叶斯和非贝叶斯版本。也有纯粹的频率主义算法(如支持向量机,随机森林),和纯粹的贝叶斯算法(如变分推理,期望最大化)。了解何时使用其中的每一项,以及为什么会这样,才能让你成为一名真正的数据科学家。
你本质上是贝叶斯主义者还是常客?
就我个人而言,我不属于这个或那个阵营,这是因为有时我在具有数千个特征的数据集上使用统计学/机器学习,而我对这些特征一无所知。因此,我没有事先的信念,贝叶斯推理似乎不合适。然而,有时我有少量的特征,并且我对它们了解很多,我希望将它们纳入我的模型中——在这种情况下,贝叶斯方法将为我提供更多我信任的结论性区间/结果。
我应该去哪里了解贝叶斯统计的更多信息?
有几个很棒的在线课程深入研究了机器学习的贝叶斯统计。我推荐的最佳资源是我在哈佛上的 AM207 课程:高级科学计算(随机优化方法,用于推理和数据分析的蒙特卡罗方法)。你可以在这里找到贯穿这些技术[的所有讲座资源、笔记,甚至 Jupyter 笔记本。](http://Advanced Scientific Computing: Stochastic Optimization Methods. Monte Carlo Methods for Inference and Data Analysis.)
这里的也是一个很棒的视频,它讲述了贝叶斯和频率主义领域之间的转换(在视频中大约 11 分钟)。
如果你想成为一名真正伟大的数据科学家,我建议你牢牢掌握贝叶斯统计以及如何用它来解决问题。这个旅程很艰难,而且是一个陡峭的学习曲线,但这是将你与其他数据科学家区分开来的一个很好的方式。根据我与参加数据科学面试的同事的讨论,贝叶斯建模是经常出现的事情,所以请记住这一点!
时事通讯
关于新博客文章和额外内容的更新,请注册我的时事通讯。
丰富您的学术之旅,加入一个由科学家,研究人员和行业专业人士组成的社区,以获得…
mailchi.mp](https://mailchi.mp/6304809e49e7/matthew-stewart)
你的年收入会超过 5 万美元吗?机器学习可以分辨
Photo by Artem Bali on Unsplash
机器学习正在包括金融在内的众多领域取得突破。如果我们可以使用机器学习模型来识别个人的收入,会怎么样?我找到了最合适的数据集,叫做人口普查收入数据集。我使用数据集中的信息来预测某人的年收入是否会超过 5 万美元。
我从 UCI 机器学习知识库中收集数据,然后逐个解释每个特征。我使用了几个机器学习模型,得出的结论是准确率为 84.27% 和 F1 得分为 0.65 ,使用梯度增强分类器和最大曲线下面积为 0.90 。您可以在 GitHub 链接中找到完整的代码。
[## kb22/收入预测值
该项目涉及使用人口普查收入数据集上的机器学习来预测收入是高于还是低于 5 万美元每…
github.com](https://github.com/kb22/Income-Predictor)
探索数据集
数据集描述
数据集的目标是收入。所以,首先我用LabelEncoder
把它转换成0
和1
的标签。接下来,我使用dataset.info()
探索数据集。
看一下输出,很容易看出整个 datatset 中共有 32561 个数据点。此外,似乎没有任何列缺少任何值。
连续特征与目标变量的关系
对于所有连续的特征,我绘制直方图。我使用的栏目是“年龄”、“最终体重”、“教育人数”、“资本收益”、“资本损失”和“每周小时数”。
从上面的直方图中,我推断出以下几点:
- 我可以将年龄列分组到箱中。
- 对于资本收益和资本损失,数据严重左倾,需要解决。
- 我们需要进一步分析教育数字,因为它可能与教育信息一致。
- 最终重量也向左倾斜。
- 每周的小时数也可以分成几个时间段。
然后,我用相关矩阵来确定它们与收入的关系。
看一下上面的相关矩阵,很明显,任何连续特征和目标变量之间都没有高度的线性相关性。此外,Final Weight
与输出类没有任何关联,因此,我稍后将删除这个专栏。
处理数据集
一旦我对数据集有了一些了解,我就可以单独研究每个特性及其与目标列分布的关系。
年龄
我决定为Age
— 0-25
年创建三个桶,分别为Young
、25-50
、50-100
和Old
。
与Young
和Old
相比,数据集中有更多的Adult
。此外,收入超过 5 万美元的人相对较少。
资本收益和资本损失
由于两者相关,我从Capital Gain
中减去Capital Loss
,并将值保存为Capital Diff
。在分析数据时,我创建了两个桶,5000 美元到 5000 美元和 5000 美元到 100000 美元作为Minor
和Major
。
看一下结果,我可以看到Minor
有更多的人收入低于 5 万美元,而Major
有更多的人收入高于 5 万美元。这与以下事实完全一致:与Capital Loss
相比Capital Gain
较大的人Income
拥有超过 50K 美元。
最后体重
如上所述,我删除了Final Weight
一栏。
每周小时
考虑到通常的工作时间范围是 30-40 小时,我为不同的时间创建了时段。0-30
为Less Hours
,30-40
为Normal Hours
,40-100
为Extra Hours
。
随着人们花更多的时间工作,他们可能会得到加班收入。这也与数据一致。拥有Extra Hours
的人往往拥有更高比例的年薪超过 5 万美元的人。
工作类
这个特征定义了个人的工作阶级。我从绘制Countplot
开始。
看一下上面的图,我可以看到有被定义为?
的Work Class
值,这似乎是错误数据。尽管我们最初确定没有丢失数据值,但我们个别地发现一些数据可能是错误的。我之所以能发现这一点,是因为我逐一分析了每个特征。
由于这些错误的数据非常多,我将简单地删除这些记录。同样,两个值Without-pay
和Never-worked
可以忽略不计,因此也可以安全地删除它们。
教育和教育编号
我的第一个想法是检查Education
和Education Number
之间是否有关联。对于Education
的每个值,我都检查了对应的Education Numbers
。
我发现了Education
和Education Number
之间的一一对应关系。我决定放弃Education Number
专栏。此外,我开始进一步分析Education
列的值。我综合了从学前班到 12 年级的所有信息,因为他们可以被认为是一个没有受过大学教育的班级。
婚姻状况和关系
两者都没有缺失值。两者之间有一些重叠,例如,如果一个人是丈夫或妻子,那么他们的婚姻状况应该是已婚。然而,由于没有完全重叠,我将保留这两列。
职业
我也为这个特性绘制了Countplot
。
正如我们所看到的,不同职业的收入分配是不同的。类别已经是唯一可识别的了,我会保持原样。
人种
数据集包括关于White
种族的大部分信息,而所有其他种族的数量较少。我将把所有其他比赛数据合并到一个类中作为Other
。
性
从上面的情节可以清楚地看出:
- 男性参与者比女性参与者多
- 当我们比较两种性别和相应的收入分配时,男性收入超过 5 万美元的比例高于女性
国家
我注意到两件事:
- 由
?
表示的国家/地区列中有一些缺失值。由于它们非常少,我将删除这些行。 - 大多数成年人来自美国。因此,我们可以将列的值分配为
United-States
或Other
。
数据操作
使用 pandas 方法get_dummies
,我将所有的分类列转换成基于它们的类的单独的列。这将总功能提升至56
。
我用 70%的训练数据和 30%的测试数据将数据集分成训练和测试两部分。
应用机器学习
在创建的训练和测试数据上,我决定应用 5 个机器学习模型:
- 高斯朴素贝叶斯
- 支持向量分类器
- 决策树分类器
- 随机森林分类器
- 梯度推进分类器
为了评估这些车型,我计算了 F1 的分数。
基于以上结果,梯度推进分类器表现最好,F1 值最高0.65
。
分析结果
一旦有了基本指标,我决定使用精确度图和 ROC 曲线进一步分析它们。
准确度图
我计算了测试数据的准确性,并在此基础上创建了一个条形图。
如上图所示,梯度提升分类器的准确率最高,为 84.27% 。
受试者工作特征曲线
作为一个分类问题,我决定使用 ROC 曲线来检查哪个分类器表现最好。
决策树分类器似乎具有最低的曲线下面积。梯度推进分级机在这里再次表现最佳,最大曲线下面积为 0.90 。
结论
在本文中,我处理了人口普查收入数据集,并逐一分析了每个特征。最后,我应用各种机器学习模型从数据中学习并做出预测。
我学到的重要事情
- 相关矩阵可以揭示不相关的特征,我们可以删除它们
- 虽然可能没有丢失的数据,但也可能有错误的数据。在这个例子中,我们有一些字段为
?
- 应用多个机器学习模型可以帮助我们选择一个在当前场景下表现最好的模型,因为没有一个模型适合所有人
- 我们可以使用多个指标来确保模型正确运行,并且不会过度拟合数据
非常感谢您阅读完整的文章。我很乐意收到你的来信。请分享你的想法、想法和建议,或者通过 LinkedIn 联系我。
阅读我的其他文章:
机器学习在医疗保健中的应用
towardsdatascience.com](/predicting-presence-of-heart-diseases-using-machine-learning-36f00f3edb2c) [## 让我们使用 LDA 构建一个文章推荐器
基于搜索查询推荐文章
towardsdatascience.com](/lets-build-an-article-recommender-using-lda-f22d71b7143e) [## 使用 ROC 和 CAP 曲线的机器学习分类器评估
了解 ROC 和 CAP 曲线及其在 Python 中的实现
towardsdatascience.com](/machine-learning-classifier-evaluation-using-roc-and-cap-curves-7db60fe6b716) [## 使用 Flask、Flask RESTPlus 和 Swagger UI 处理 API
Flask 和 Flask-RESTPlus 简介
towardsdatascience.com](/working-with-apis-using-flask-flask-restplus-and-swagger-ui-7cf447deda7f)
Wind Mull——使用 Google Cloud AutoML Vision 和 MapBox 在航空影像上检测风力涡轮机
为什么是风呢?
我在地图上缩放/平移,探索 MapBox 航空影像欣赏我们的绿色星球。我的脑海中浮现出我在美国中西部的公路旅行,以及从公路上看到的风力发电场阵列有多大。它们在夜晚发出同步的闪光,美得令人难以忘怀。然后,我开始放大一个有风力发电场的地图区域,在地图上看到了相当清晰的涡轮机,心想:“有了这张图像,如果我能应用机器学习来自动化并找到更多的风力涡轮机,那该多好啊”。我可以创建一个 GIS 地图图层,自动标注它们并分析哪些州/国家在风力发电上投资更多。直接进入源图像要容易得多:允许我们在全球水平上分析天线,而不是依赖个别国家发布的公共数据集,这些数据集既稀少又不可靠。此外,如果我可以将它们分段呢?哦,太多可能性了!我降低了自己的期望,从小处着手,只研究风力涡轮机的识别。
现在舞台已经搭建好了,让我们看看我是如何到达那里的。
我开始在网上寻找好的 ML 框架。我想尽快启动并运行,而不是花费大量时间进行身份验证。我发现谷歌的云 AutoML 说:“用最少的努力和机器学习专业知识训练高质量的定制机器学习模型。”(他们没有开玩笑)与安装和做大量工作来运行 tensorflow 或 pytorch 相比,这听起来是一个很好的选择。所以,我决定继续使用 AutoML。
数据准备和将图像加载到 AutoML
我从这里的汽车视觉的官方快速入门教程开始。
- 我创建了一个名为“images”的目录,有两个文件夹“windturbine”和“notaturbine ”,如下所示。
2.我了解到,AutoML 视觉培训的最低要求是每个类别/标签 100 个图像示例。为了节省时间并了解这个想法是否可行,我开始从 MapBox 航空影像地图上快速拍摄南达科他州苏福尔斯附近的风力涡轮机。还有其他更简单的、商业上可接受的、自动化的方法来获取训练数据,但是对于这个练习,截图就足够了。
3.我保存了 100 张风力涡轮机的图片,保存在“windturbine”文件夹下
4.然后我保存了另外 100 个不是风力涡轮机的特征的截图。我故意包括道路、公园、高尔夫球场、停车场、水和建筑。
5.事后看来,我应该对所有训练图像的缩放级别进行严格选择,但一般来说,我保持在 17 和 19 之间(地图框 LOD ),这种方法返回了令人满意的结果。
6.我在谷歌云上创建了一个新的测试项目。
7.然后我访问了 AutoML Vision UI 来上传我的训练数据。
8.AutoML Vision 用户界面非常易于使用。当您单击“添加新数据集”时,您可以键入数据集名称并导入您的训练数据集。我选择了我的“图片”目录,系统足够智能,可以导入照片,并理解其中代表标签的文件夹名称,并正确标记“windturbine”和“notaturbine”。
9.这是我的数据集在导入完成后的样子
使用带有 AutoML 的训练图像的训练模型
- 现在,我所要做的就是点击“训练”按钮,选择几个选项进行训练。
2.数据集越大,显然训练的时间就越长。但是由于我的数据很小,只有 200 张图片,训练在大约 20 分钟内完成。
使用 AutoML 评估模型:
1.现在开始评估结果!让我们看看我的训练进展如何。AutoML Vision 自动将 80%的图像用于训练,10%用于验证,10%用于测试。
2.我得到了 100%的精度分数,但这应该持保留态度,因为我的数据集是 AutoML 允许的最小大小。
3.我的混淆矩阵得到了满分,它 100%正确地预测了“风力涡轮机”和“非涡轮机”的图像。我决定进行下一步。
用 AutoML 预测
- 现在这个模型已经训练好了,我进入了有趣的部分:预测。幸运的是,AutoML 自动将模型发布为服务,可以使用 REST API 或 python 调用该服务。还有一个测试操场上传程序,可以让你快速上传图片进行测试。
2.我用我从上传的训练集中保留的新的风力涡轮机图像测试了它,模型正确地预测了它是一个风力涡轮机!到目前为止潜力很大。
Wind Mull 网络地图应用
1.既然我已经搞清楚了 ML 部分,是时候尝试识别世界上更多随机的风力涡轮机了。为了做到这一点,我创建了“风毛拉”网络应用程序。
2.我选择的 Javascript 框架是 Vue,因为我喜欢在其中进行原型开发,所以我用 Vue CLI 快速启动并运行了一个 VueJS 项目。
3.我将 MapBox lib 添加到 Vue 项目中,创建了一个地图 div,并在中心绘制了一个 geojson 多边形来指示检测区域。
4.我的第一种方法是从 MapBox raster API 请求切片,每次用户移动地图时获取航空切片,然后调用 prediction rest 端点来获取预测结果。
5.这“有点”奏效了,但是我永远也不能让瓦片与我在地图上看到的地方对齐。幸运的是,通过反复试验,我想出了一个更好的主意。
6.MapBox 有一个很棒的静态图像 API 游乐场,当你通过边界框时可以抓取图像。
7.这对于我的用例来说非常有效。我能够在距离地图中心一定距离的地方抓取边界框,获得我的航拍图像,然后将其传递给 AutoML Vision API,该 API 通过训练好的模型运行它,并返回给我一个预测标签和一个分数。
8.我不得不与一些烦人的图像格式和编码诡计作斗争,但这只是任何涉及照片的典型 web API 编程的一部分。
9.我最后以百分比的形式显示了预测分数(根据概率在 0 到 1 之间)以及地图框(没有双关语的意思!)是否包含风力涡轮机。
10.没有进入其他细节,我通过 Firebase 托管了这个项目(也是由 Google 托管的),一旦链接了这个项目,托管 Javascript 应用程序和执行 ML API 的权限就变得非常容易。
11.风魔来了,而且是真的!
1.如果你想试驾的话,这里有这个应用的链接:这里
2.有时,如果影像的分辨率较低,或者空中景观与训练影像中的相似,模型会出现一些问题,并错误地识别出一些例子。然而,总的来说,当我使用地址地理编码器并在美国伊利诺伊州的风力涡轮机和比利时的图像上尝试预测模型时,它得到了大多数正确的结果。
3.如果我添加更多的训练数据,我认为这将有助于提高准确性相当多,特别是在风景接近有风力涡轮机的地方。
值得深思的想法
Wind Mull 对我来说是一个有趣的练习,让我重新开始机器学习,并了解如何将其应用于 GIS,但我学到了很多关于 ML 和基于云的服务在短短几年内取得的进展。谷歌如何将这一过程产品化并降低准入门槛,以便来自许多学科的开发人员和数据科学家可以通过 AutoML 实验机器学习,这真是太棒了。
此外,风力发电机不必只关注风力涡轮机检测。我们可以从航空图像中进行各种特征检测,甚至用 CV(计算机视觉)进行特征提取。我认为这对于从空中获取新的 GIS 数据而不是手工数字化来说是巨大的。手动完成这项工作通常需要几天甚至几个月的时间。
值得注意的其他提及
1.MapBox 已经在开发这个库,它可以让你从 OpenStreetMap 图像中收集训练数据,并在天线上执行特征提取:https://github.com/mapbox/robosat
2.ESRI 使用深度学习创建了一个游泳池检测和分类(干净或绿色):https://medium . com/geoai/swimming-pool-detection-and-class ification-using-deep-learning-AAF 4a 3 a5 e 652
3.光栅视觉是一个很好的开源框架,Python 开发者可以在卫星、航空和其他大型图像集(包括倾斜的无人机图像)上构建 CV 模型【https://docs.rastervision.io/en/0.9/
如果你想和我聊聊 wind mull,请在 LinkedIn 上联系我,我将很高兴听到你的想法,并讨论 GIS 和机器学习之间的交集的其他伟大想法。
葡萄酒已经过时了
酒棒极了。当你将数据科学生命周期的五个步骤中的每一个步骤应用于一个展示 2017 年葡萄酒爱好者评论的 kaggle 数据集和一个关于红酒化学成分和质量的 csv 时,这也是一个错误。那些步骤是什么?O用于O获取数据。 S 是为了 s 擦洗你刚才扯皮的数据(也叫清洗)。 E 用于 e 探索数据,有时也称为 EDA——探索性数据分析。这一阶段通常包括检查汇总统计数据以及查看可视化效果,以便更清楚地了解数据试图讲述的故事。 M 用于 m 建模,涉及选择一个或多个机器学习模型应用于数据。 N 用于 i n 解释上一步的结果。这五个阶段将在这里应用,希望能从发酵的葡萄汁中获得一些有意义的见解。
一.获得
虽然目前来说过于雄心勃勃,但我渴望从我最喜欢的应用程序之一 Vivino 中创建一些补充的葡萄酒数据。看看吧,它确实在葡萄酒行业和数据科学的交叉领域掀起了波澜。这里分析的数据已经引起了激烈的争论。红酒化学(酚类物质)的数据集来自 P. Cortez 等人 2009 年的科学研究。
二。矮树
审查数据集缺少一些信息,并且存在一些重复信息。丢失的值通过丢弃它们来处理,重复的值很好地说明了在清理数据时的虚伪誓言。理想情况下,重复的将被删除。然而,我证明了这样做造成的伤害(比好处多得多)是五倍。关于酚类物质的 Cortez 数据集既没有缺失条目,也没有重复条目。这是“在野外”遇到的相对罕见的事情,很可能是 Cortez 小组已经清理了数据的结果。前两个阶段占了整个数据科学生命周期的大部分。不是接近冰山下沉的百分比,通常,但接近。通常,您大约 60–80%的时间会用于获取和清理数据。
三。探索
Fairly Gaussian Distribution of Wine Ratings
上面显示的 seaborn 图不仅显示了正态分布,还提供了一些指导,说明了为了简化应该在哪里对这些点进行分组。这种简化的细节再次出现在我的 jupyter 笔记本上,这是我在 github 上主持的项目。
我在文中的形象化描述似乎证明了这样一个观点,即某个评论者对有问题的葡萄酒写得越多,他们就越喜欢它,对它的评价也越高(或者说它越贵,因此应该用更多的词来描述潜在买家的投资)。总的来说,一个简短的描述似乎是由于一个无动于衷的评论家。沉默寡言的品酒师的简洁很能说明问题。似乎是关键词。我们会看到的。
四。模型
我将使用的机器学习算法(随机森林)是为了分类,属于监督学习模型的范畴。首先,我检查数据集中葡萄酒描述的长度是否是一个令人满意的分类预测器,可以预测一种葡萄酒是否会被认为是高分(我的目标,或因变量)。我从我的 EDA 那里得到了这个关于有多少酒得到了什么样的分数。然后,在对葡萄酒价格进行分类的背景下,我检查了同一个独立变量,葡萄酒评论描述长度,这是我的下一个目标变量。在每个实例中,我使用随机森林分类(RFC)来查看该算法如何响应保持输入变量一致和改变输出变量。
在将分数简化或“宁滨”成更小的分组之前,第一个目标变量“分数”的精确度非常低。后来,它的分类只比偶然性稍好一点。第二个模型以价格为输出变量,在对价格高于 100 美元一瓶的昂贵葡萄酒进行分类时,被证明几乎同样有效(只是和随机机会一样好)。然而,在这个阈值以下,它给人留下了深刻的印象,分类准确率约为 96.5%。
我还在一个不同的数据集背景下检验了这个特殊的分类模型,这个数据集也涉及葡萄酒,但这次是红酒的酚类物质以及这些特征与质量的关系。酚类化合物是赋予红酒颜色的原因。这种化学成分非常迷人,它经常被认为是区分高质量葡萄酒和不那么高质量葡萄酒的因素。RFC 在这里证明了自己是一个非常有效的机器学习算法。
通常在机器学习中,许多不同的模型被迭代测试,以确定哪个提供最好的结果(无论你是为了准确度、精确度还是模型的一些其他特征)。在 RFC 的情况下,以及在其他决策树风格的方法中,这可能涉及到通过 GridSearch 之类的方法执行交叉验证(通常是 5 或 10 倍),这种方法通过输入数据组合地检查每种可能性。这是一种调整模型参数的简便方法,尽管这是一种计算量很大的穷举搜索。与其他最大似然算法相比,它往往是表现最好的,对数据中的噪声和方差有天然的抵抗力。
我确实利用 RFC 算法中的迭代来为我的酚类数据集找到最佳特征,以选择最高精度,但我没有为葡萄酒评论、价格和点数建模。这是我的项目中缺少的东西,在将来会是一个值得包含的东西。我在这里的理由是缩小 RFC 在两个不同的数据集上的具体功能,这两个数据集被一个共同的葡萄栽培主题所统一。
动词 (verb 的缩写)口译
巴克斯喜欢压力过大的葡萄。
我们已经到了数据科学过程的最后一步。我们应该如何看待我们所有的辛勤工作?在检查葡萄酒数据集的随机森林分类之前,我冒昧地猜测,品酒师越是把笔放在纸上,或者从技术上说,手指放在键盘上,他们对被采样的葡萄酒的评级就越高。
RFC 建模的结果相当具有决定性,我的假设实际上并不成立。
虽然简化点数指标的 RFC(未图示)在将葡萄酒描述长度划分为五个定义的类别方面确实比平均水平稍好,但它没有达到我最初制定这个项目时假设的程度。我的 EDA 中的这张图可能会说明原因:
线性回归模型在这里比分类更合适。
在 20 个不同的点类别的情况下,这被证明是特别正确的,但是当每 4 个点被分入更小的分组时,这仍然是正确的。
一个好得多的分类模型包括使用较短的描述来分类较便宜的葡萄酒(低于 100 美元)。包含向上的异常值在很大程度上帮助了这个模型。事实上,只包括价格高达 500 美元的葡萄酒对模型的准确性是有害的,在没有测试和验证的情况下,我是不会预见到的。在选择 100 美元作为质量门槛时,我有一些领域知识,超过这个门槛就是狂热状态。当一瓶酒的损害达到三位数时,在没有足够合理的质量指数增长的情况下,价格出现了巨大的差异。RFC 模型中反映的是对低于 100 美元的葡萄酒进行分类的高准确度,但对高于该阈值的葡萄酒来说,这不是一个比机会更好的分类模型。
我提出,绝大多数葡萄酒饮用者从未想过要花超过 100 美元买一瓶葡萄酒,或者很少这样做。该模型表明,通过随机森林算法,来自 2017 年葡萄酒评论子集的特定描述长度的葡萄酒能够以高精度和准确度被分类为低于该临界价格点。以上,审查的长度只是对每瓶酒的成本进行分类的机会。
综上所述,我认为这两个结果应该被解释为购买描述长度更长但价格仍低于 100 美元的葡萄酒是寻找下一个葡萄酒爱好者的最佳方法。因为它是一个较弱的模型,所以分数只能作为一个次要的方法来对真正最好的葡萄酒进行分类。
虽然我在这里没有涉及到它,但是在评论描述中,描述长度和词频可能有一些相互作用,这值得进一步研究。这将进入自然语言处理的领域,包括将给定文本中的单词外观转换成向量,以便能够测量频率。描述长度可能与某些单词出现的频率相协调,也可能不协调。这将是我在这里深入研究的一个有价值的扩展。
我们对酚类的研究给了我们一个决定性的分类。很自然。酚类是植物和动物作为其防御机制的一部分释放的有机化合物,具有中心环状苯环和不同数量的羟基作为取代基。所以,葡萄树受到的压力越大,它们产生的酚类物质就越多。这些化合物不仅会影响红葡萄酒的颜色,还会作为防腐剂影响味道。巴克斯喜欢压力过大的葡萄。
我的笔记本详细说明了,不管你是在处理我定义的“不是两块钱的查克”(好)还是“两块钱的查克”(坏)葡萄酒,对于这两种风格的葡萄酒中的一种,Random Forest 都是一个相当精确和准确的机器学习分类模型。它特别擅长辨别优质葡萄酒。当分析包含在高度分散的分布上运行的变量的数据集时,要素缩放总是值得应用的。然而,在这个具体的例子中,所有的特征甚至在缩放之前都是非常一致的。这一点,加上一些功能选择,为我进军机器学习和葡萄酒领域提供了一些额外的见解和深度。
尽管并不完美,但这个项目使数据科学生命周期在我看来更加具体。我希望它能在某种程度上为你做同样的事情。
参考文献:
https://github.com/harrisonhardin/Mod5Project
13 万条葡萄酒评论,包括品种、地点、酒厂、价格和描述
www.kaggle.com](https://www.kaggle.com/zynicide/wine-reviews)
页(page 的缩写)科尔特斯、塞德伊拉、阿尔梅达、马托斯和雷伊斯。通过物理化学特性的数据挖掘建立葡萄酒偏好模型。在决策支持系统中,爱思唯尔,47(4):547–553,2009。
https://www . ka ggle . com/ka Bure/wine-review-s-understanding-python IC-EDA
https://www . ka ggle . com/olivierg 13/wine-ratings-analysis-w-supervised-ml
https://www.winefrog.com/definition/515/phenolics
使用机器学习赢得 21 点
遗传算法的一个实例
机器学习的一个伟大之处在于有如此多不同的方法来解决问题。神经网络非常适合在数据中寻找模式,从而产生令人印象深刻的预测能力。强化学习使用基于奖励的概念,随着时间的推移不断改进。还有一种叫做遗传算法的方法。
遗传算法(GA)利用进化原理来解决问题。它的工作原理是使用一个问题的潜在解决方案群体,反复选择和繁殖最成功的候选方案,直到经过若干代后最终的解决方案出现。
为了展示这种方法的有效性,我们将使用它来解决一个复杂的问题——创建一个玩赌场游戏二十一点(也称为“21”)的策略。
在这种情况下,术语“策略”是指涵盖所有情况的玩家行动指南。我们的目标是找到一个最好的策略,随着时间的推移获得最大的收益。
关于这个“制胜”策略
当然,在现实中,21 点没有赢的策略——规则是这样制定的,所以赌场总是有优势。如果你玩的时间足够长,你就会输钱。
知道了这一点,最好的策略就是将损失最小化。使用这种策略可以让玩家尽可能地扩大资金,同时希望获得短期好运。这是在 21 点中获利的唯一方法。
正如你所想象的,数学家和计算机科学家已经研究 21 点很久很久了。早在 20 世纪 60 年代,一位名为爱德华·o·索普的数学家写了一本名为击败庄家的书,书中包括显示最优“基本”策略的图表。
最优策略大概是这样的:
Optimal Strategy for Blackjack
这三张桌子代表了玩 21 点的完整策略。
左边的高桌子是给硬手用的,右上的桌子是给软手用的,右下的桌子是给对用的。
如果你不熟悉 21 点,软牌是指一手可以算成 1 或 11 的牌,但总牌值不超过 21。对子不言而喻,硬手基本就是其他的一切,折算成总手值。
三个表格顶部的列用于经销商 upcard,它影响策略。请注意,升级卡等级不包括杰克、皇后或国王。这是因为这些牌都是 10 张,所以它们都与 10(“T”)组合在一起,以简化表格。
要使用牌桌,玩家首先要确定他们是有一对牌,一手软牌还是一手硬牌,然后使用对应于他们手中牌的行和对应于庄家升牌的列来查找适当的牌桌。
当正确的策略是击打时,表格中的单元格将为“H”,当正确的策略是站立时,单元格将为“S”,双降时,单元格将为“D”,而(仅在 pairs 表格中)拆分时,单元格将为“P”。
知道这样一个问题的最优解实际上非常有帮助。将遗传算法的结果与已知的解决方案进行比较将展示该技术的有效性。
最后,在我们继续深入之前,还有一件事需要解决,那就是非确定性的概念。这意味着,如果相同的 GA 代码连续运行两次,将返回两个不同的结果。这是遗传算法由于其固有的随机性而发生的事情。软件以这种方式运行是不寻常的,但在这种情况下,这只是方法的一部分。
遗传算法如何工作
遗传算法使用起来很有趣,因为它们非常容易理解:你从一群(最初,完全随机的)潜在解决方案开始,然后让进化去寻找解决方案。
这个进化过程是通过比较候选解决方案来驱动的。每个候选人都有一个健身得分,表明它有多好。对于所有候选人,每代计算一次该分数,并可用于相互比较。
在 21 点策略的情况下,适合度分数非常简单:如果你使用该策略玩 N 手 21 点,当完成时你有多少钱?(由于房子边缘,所有策略都会赔钱,也就是说所有的适应值都会是负数。一个策略的健康指数越高,仅仅意味着它比其他策略损失的钱更少。)
一旦创建了有效的适应度函数,使用 g a 时的下一个决策就是如何进行选择。
有许多不同的选择技术来控制选择在多大程度上由适应度分数和随机性驱动。一种简单的方法被称为锦标赛选择,它的工作原理是从人群中随机挑选 N 名候选人,并使用健康得分最高的一名。简单有效。
一旦两个父母被选中,他们就被杂交形成一个孩子。这就像正常的有性生殖一样——父母双方的遗传物质结合在一起。由于父母是着眼于健康而选择的,所以目标是将父母双方的成功因素传递下去。
自然地,在这种情况下,“遗传物质”仅仅是每个策略的三个表中的 340 个细胞。通过从两个父代中选择相应的单元格来填充子代中的单元格。通常,交叉与相对适应度分数成比例,因此如果一个父代具有明显更好的适应度分数,则他们可能最终比另一个父代贡献更多的表单元。
最后,就像在自然界一样,群体中的多样性也很重要。太小或太同质的群体总是比更大和更多样化的群体表现更差。
遗传多样性很重要,因为如果你没有足够的遗传多样性,就很容易陷入一种叫做局部最小值的东西,这基本上是一种比任何类似替代方案都表现更好的解决方案,但不如其他与它明显不同的解决方案。
为了避免这个问题,遗传算法有时使用突变(引入全新的遗传物质)来提高遗传多样性,尽管更大的初始种群也有帮助。
结果使用遗传算法
关于气体的一件很酷的事情就是看着它们演化出一个解决方案。第一代是完全随机的解决方案。这是来自第 0 代(第一个随机代)中 750 个候选人的最佳解决方案(基于适应值):
Randomly generated candidate from Gen 0
如你所见,这完全是随机的。到了第 12 代,一些东西开始成形:
只有 12 代的经验,最成功的策略是那些坚持了 20、19、18 甚至 17 代的策略。策略的这一部分首先发展,因为它发生得如此频繁,并且有一个相当明确的结果。基本概念首先是用气体发展起来的,细节是在以后的世代中出现的。
该策略中的其他质量暗示是硬 11 和硬 10 持股。根据最优策略,这些应该大部分是双倍下注,所以看到这么多黄色是令人鼓舞的。
对子和软牌桌会持续到最后,因为这些牌很少出现。例如,一个玩家只有 6%的机会拿到对子。
到了第 33 代,事情开始变得清晰:
到了 100 代,左边的硬手桌就完全稳定了——一代不变。软牌和对子牌桌越来越精致:
最后几代被用来改进策略。在这个阶段,代与代之间的变化要小得多,因为这实际上只是解决最小细节的过程。
最后,经过 237 代,找到了最佳解决方案:
如你所见,最终结果与最优解并不完全相同,但非常非常接近。特别是硬手牌(左边的表格)几乎完全正确。软牌和对子表中有更多不匹配的单元格,但这可能是因为这些牌类型出现的次数远少于硬牌。
就结果而言,以每手 5 美元的价格玩 500,000 手牌的最佳策略将导致 176,040 美元的损失。使用计算机生成的策略将导致 176,538 美元的损失,与 50 万手相比相差 498 美元。
有一个动画 GIF 展示了这种策略在 237 代中的演变,但要注意它的大小是 19 MB,所以你可能不希望通过手机来查看它。
产生这些图像的软件的源代码是开源。这是一个用 C#和 WPF 一起编写的 Windows 桌面应用程序。
组合暗示
尽管由此产生的战略令人印象深刻,但我们需要通过思考问题的范围来将其置于背景中。21 点的最佳策略是在 340 个牌桌单元(分布在三张牌桌上)中填入每种持有牌/庄家升牌组合的最佳选择,包括立牌、对打、双倍下注或分牌。
就组合而言,有 4 个⁰⁰可能的对子策略、3⁸⁰可能的软牌策略和 3 个⁶⁰可能的硬牌策略,总共有 5 x 10 个⁷⁴可能的 21 点策略:
4 ⁰⁰ x 3⁸⁰ x 3 ⁶⁰ = 5 x 10 ⁷⁴可能的 21 点策略
在这种情况下,遗传算法在 5×10⁷⁴可能答案的解空间中找到了接近最优的解。在一台标准的台式电脑上运行,大约需要 75 分钟。在那次运行中,评估了大约 178,000 个策略。
测试体能
遗传算法本质上是由适应度函数驱动的。如果没有一个好的方法来比较候选人,进化过程就无法进行。
适应度函数的概念很简单。尽管我们可能不知道问题的最佳解决方案,但我们确实有一种方法来衡量潜在的解决方案。适应度函数反映了传递给它的候选人的相对适应度水平,因此分数可以有效地用于选择。
为了找到一个 21 点策略,一个适应度函数很简单,它是一个在一定数量的牌局中使用该策略后返回预期最终收益的函数。
但是多少手才够呢?
事实证明,你需要用一个策略玩很多手牌才能确定它的好坏。由于一副牌天生具有随机性,所以需要打很多手牌,这样随机性在候选人之间就平衡了。
当我们的 GA 接近最终解决方案时,这一点尤为重要。在早期世代中,如果适应度分数不精确,这不是问题,因为坏的候选人和好的候选人之间的差异通常相当大,并且向最终解决方案的收敛继续没有问题。
然而,一旦遗传算法进入后代,被比较的候选策略将只有微小的差异,所以从适应度函数中获得准确的预期收益是很重要的。
幸运的是,找到所需的合适的手数非常简单。使用单个策略,运行多个测试,产生一组适应性分数。相同策略的不同回合之间的差异将揭示有多少可变性,这部分是由测试的手数决定的。玩的牌越多,变化就越小。
通过测量一组分数的标准偏差,我们可以了解在 N 手牌的测试中,一组分数的可变性有多大。但是,由于我们每次测试的牌局数量不同,我们无法比较标准偏差,原因如下:
标准差根据基础数据进行调整。我们无法比较使用不同牌局数的测试的体能分数(或其标准差),因为玩的牌局数越多,体能分数相应增加。
换句话说:假设一种策略有 34%的胜算。如果你用 25,000 手牌和 50,000 手牌进行比较,最后你会得到不同的总数。这就是为什么你不能简单地比较不同测试条件下的体能分数。如果你不能比较原始值,你就不能比较标准差。
我们通过将标准偏差除以每个测试值的平均健康得分(也就是玩的手数)来解决这个问题。这给了我们一个叫做变异系数的东西,它可以与其他测试值进行比较,而不管玩了多少局。
这里的图表展示了当我们玩更多手牌时,可变性是如何缩小的:
图表中有一些观察结果。首先,仅用 5000 或 10000 只手进行测试是不够的。在这些水平上,对于相同的策略,健康分数会有很大的波动。事实上,看起来最少 100,000 手可能是合理的,因为这是可变性开始变平的点。
我们能在每次测试中运行 500,000 或更多手吗?当然了。它减少了可变性并增加了适应度函数的准确性。事实上,50 万手的变异系数为 0.0229,明显优于 10 万手的 0.0494。但是这种改进绝对是收益递减的一个例子:测试的数量必须增加 5 倍,才能得到一半的可变性。
鉴于这些发现,策略的适应度函数将需要使用以下规则(在现实世界赌场中常见)玩至少 100,000 手 21 点:
- 使用混洗在一起的 4 副牌
- 庄家必须打到 17(软或硬)
- 你可以在你分开的一手牌上加倍下注
- 没有保险
- 21 点支付 3:2
遗传算法配置
使用 GA 的一个不寻常的方面是它有如此多的设置需要配置。可以为运行配置以下项目:
- 群体大小
- 选择方法
- 突变率和影响
- 终止条件
改变每一项都会产生不同的结果。确定这些设置值的最佳方式就是简单地进行实验。
人口规模
这是不同人口规模的每一代候选人平均适应度的图表:
这个图的 X 轴是世代数(最多 200),Y 轴是每代的平均适应度得分。最初的几代人并没有显示出当我们到达后代时的差异。
沿着图表顶部的扁平白线是已知的最佳基线策略的适应性分数。
首先要注意的是,两个最小的群体(分别只有 100 和 250 名候选人,以蓝色和橙色显示)在所有规模中表现最差。
这些小群体中缺乏遗传多样性,导致最终的适应性分数很低,同时寻找解决方案的过程也较慢。显然,拥有足够大的种群以确保遗传多样性是非常重要的。
另一方面,400 人、550 人、700 人、850 人和 1000 人之间没有太大的差异。
这与选择要测试的手数的情况类似,如果你选择的值太小,测试就不准确,但是一旦超过某个水平,差异就很小了。
选择方法
为交叉寻找好的候选者的过程被称为选择,有许多方法可以做到。锦标赛的选择已经介绍过了。以下是另外两种方法:
轮盘赌选择根据候选人的健康分数选择候选人。想象一个饼图,有三个大小分别为 1、2 和 5 的扇区。值为 5 的楔形区有 5/8 的时间被选中,值为 2 的楔形区有 2/8 的时间被选中,值为 1 的楔形区有 1/8 的时间被选中。这是轮盘赌轮盘选择背后的基本思想。与所有候选人的总得分相比,每个候选人的楔形大小与他们的健康得分成比例。
这种选择方法的一个问题是,有时某些候选人的健康得分很低,以至于他们从未被选中。如果幸运的话,有几个候选人的健康得分远远高于其他人,他们可能会被不成比例地选中,这降低了基因多样性。
解决方案是使用排序选择,它的工作方式是根据适合度对候选人进行排序,然后给最差的候选人 1 分,第二差的候选人 2 分,以此类推,一直到最佳候选人,最佳候选人得到的分数等于人口规模。一旦健身分数调整完成,将使用轮盘赌选择。
下图比较了使用各种选择方法的每一代人的平均适应度:
正如您所看到的,比赛选择很快收敛到一个最优解,事实上,比赛规模越大,平均健身分数提高得越快。这是有道理的,因为如果你随机选择 7 个候选人并使用最好的,质量会比只选择 2 个高得多。
尽管它有最快的初始改进,但 Tourney 7 最终产生了最差的结果。这是有道理的,因为尽管大规模的比赛会带来快速的进步,但它也将基因库限制在最好的范围内。所需的基因多样性丢失了,从长远来看,它的表现也不好。
表现最好的看起来是锦标赛 2、锦标赛 3 和锦标赛 4。给定 700 人的人口,这些数字提供了良好的长期结果。
精英主义
遗传算法中还有另一个概念叫做精英主义。它的思想是,当构建新一代时,首先按照适应度对人口进行排序,然后将一定比例的最佳候选人直接传递给下一代,而不进行改变。完成后,正常的交叉就开始了。
这个图表显示了四种不同的精英主义率的影响(仅为了显示细节,仅显示后代)。显然,没有精英主义或 15%是合理的,尽管 0%看起来更好一些。
这个图表有一点令人惊讶——精英主义程度越高,解决问题的收敛速度越慢。你可能认为故意包括每一代中最好的会加快速度,但事实上看起来只使用交叉候选人会给出最好的结果,也是最快的。
突变
保持高遗传多样性是很重要的,而突变是引入这一点的简单方法。
有两个因素与突变有关:它发生的频率有多高,以及当它发生时会产生多大的影响?
一个突变率控制着一个新产生的候选者被突变的频率。突变是通过杂交在创造后立即完成的。
突变影响控制一个候选者被突变的程度,以其细胞被随机改变的百分比来表示。所有三张牌桌(硬牌、软牌和对子)的变异百分比相同。
从 10%的固定影响率开始,下面是不同突变率的影响:
很明显,突变对这个问题没有帮助——受突变影响的候选人越多,结果就越糟糕。因此,不需要尝试不同的突变影响值——0%的突变率显然是解决此问题的最佳值。
终止条件
知道何时退出遗传算法可能很棘手。有些情况需要固定的世代数,但对于这个问题的解决方案是寻找停滞——换句话说,当遗传算法检测到候选不再改进时,它就会停止。
用于该测试的条件是,如果连续 25 代的整体最佳策略(或一代的平均分数)没有改善,则该过程终止,并且到该点找到的最佳结果被用作最终解决方案。
包扎
遗传算法是解决复杂问题的强大技术,并且具有易于理解的优点。对于因组合因素导致解空间巨大的问题,它们是极其有效的。
要了解更多关于 GA 的信息,请从这篇维基百科文章或者我写的 PluralSight(付费)课程开始,它涵盖了这个主题的更多细节。
赢得 PUBG:干净的数据并不意味着现成的数据
到目前为止,这个项目的研究是我最喜欢的。如果你是一个粉丝,或者至少浏览过 Kaggle 的一些比赛,那么你可能已经看到了预测 PUBG 挑战赛的胜利。竞争早已过去,但我想解决这个问题,因为游戏和这个行业是一个有趣和令人兴奋的冒险。
数据本身就很吓人……仅在训练数据集中就有大约 450 万次观察,在测试集中还有大约 150 万次。我已经听说 Kaggle 数据集非常干净,但这个数据集几乎是完美的。只有一个…我指的是整个数据集中的一个空值。我最初的想法是,“这将是一件轻而易举的事情”,但是我想彻底地经历 OSEMiN 过程的清理和探索阶段(获取、清理、探索、建模、解释)。在这里,我了解到干净的数据并不一定意味着现成的数据。
在对这些特征进行一些初步研究后,我注意到有一些比赛类型(单人、双人、小队)是数据集的一部分。玩过这个游戏后,我知道每个模式都有一些不同的特点,这些特点在比赛中会更重要(团队对单人)。所以对我来说,第一步是把数据分成 solo,duo 和 squad。这将我的数据集缩减到更容易管理的大约 55 万次观察。
运行完。describe()方法来查看基本的统计信息,这是我注意到的第一个障碍。0s。数据中成百上千的 0。为什么?当比赛进行时,开始是死亡和毁灭的风暴。那些被立即杀死的玩家在特性栏中会有很多 0。当你归因于超过 20%的玩家在前 5 分钟被杀,你最终会在数据中得到一堆 0。
When the min, 25%, 50% and 75% quartiles are 0….that’s an issue.
接下来,有一些本质上是绝对的数据。在预测获胜时,我需要逻辑回归或分类器,所以必须要有分类数据。不过没什么大不了的,分类数据与胜利无关,只是 Id 信息。
然后,我用直方图和箱线图将数据可视化。直方图验证了数据严重偏向光谱的 0 端。它也影响了箱线图的外观。由于大多数数据都是 0,如果特性可能达到数百甚至数千,可视化就会看起来很遥远,事实也确实如此。一些特征甚至有大量的异常值。虽然这部分是由于不平衡,但我确实想略读一些功能。所以对数据帧做一点参数调整就行了!
Histograms of the dataset, look at all those 0s!!!
The 0s make this plot look worse than it is (due to scale) but still some crazy outliers?!
现在来处理多重共线性。热图通常会说明问题,这里有几个没有值的要素和几个彼此高度相关的要素,因此我确定对模型影响不大的要素被删除了。
然而,仍然存在不平衡的问题。只有 1%的数据代表赢家,这是我们的目标。幸运的是,我们成功了。SMOTE 是一个方便的小软件包,可以对数据进行重采样以帮助平衡数据。预设为选择“非多数”数据进行重新采样,但如果需要,可以进行更改。好处是…一个更平衡的数据集,坏处是…我几乎加倍了观察值,这意味着以后会有更多的计算开销。
重点是,仅仅因为数据集是干净的(大多数都在 Kaggle 上),不要忘记探索和清理数据。经过一些小的改动,我的 solo 数据的最终模型最终测试的准确率为 99.48%。我的 Github 婴儿床里有一本完整的笔记本…https://github . com/Jason-M-Richards/Winning-at-PUBG-Binomial-class ification-。这是出于教育目的,但我的计划是重新访问和完成其他比赛类型的模型,并提交所有这些模型。比赛信息在 https://www.kaggle.com/c/pubg-finish-placement-prediction 的。
用 AI 赢得价格是对的
如何以及何时使用自定义成本函数
介绍
在机器学习中,我觉得成本函数是解决问题过程中经常被忽视的一部分。许多数据科学家对使用新模型或调整超参数以获得最佳性能感到兴奋。我们通常倾向于选择一个常见的成本函数,如均方差,然后毫不犹豫地继续训练。我认为,花时间思考和理解成本函数的含义以及它如何影响模型的性能,会对项目的结果产生重大影响。所以,为了进一步探索这个想法,我玩了一个热门游戏节目*的修改版《价格是对的》。*在我的这个实验中,我研究了不同的成本函数如何影响模型性能,包括我如何编写自己的函数来更具体地解决我想要解决的问题,以进一步改善结果。
成本函数的重要性
注意:下一节是我如何看待成本函数适应整个问题解决过程的概述。如果你只是对 代码 或 实验 感兴趣,可以随意跳到下一节。
这并不是对成本函数的介绍,而是假设对成本函数和梯度下降都有一定的了解。话虽如此,我还是想快速概述一下成本函数,然后深入探讨它们在问题解决过程中的影响。
什么是成本函数?
让我们看一个简单线性回归的基本例子来回顾成本函数。在线性回归中,我们试图解决找到最佳模型系数的问题,以绘制一条符合数据的直线。在机器学习中,这一般是通过梯度下降来完成的。梯度下降是一个过程,通过该过程,系数在成本曲线上缓慢下移,直到找到成本函数最小的位置。输入成本函数的重要性。
成本函数的作用
成本函数指导模型在进行预测时应该如何衡量不同的变量。它作为一个向导,帮助模型学习拟合数据的正确方法。所以你可以想象这可能真的很重要。如果一个模型被赋予了一个很差的成本函数,它就不会学会做出好的预测,也不会有用。
我发现思考成本函数的一个有价值的方法是将它们视为模型总体目标的反映。无论选择什么数学函数通过梯度下降来最小化,都应该尽可能地符合我们希望模型做的事情。我们以游戏节目价格合适为例。这个游戏的目标是尽可能准确地预测物品的价格,而不是猜测实际价格。那么成本函数如何反映这一点呢?我们希望我们的成本函数告诉我们的模型在不夸大事实的情况下做出预测。似乎不言自明,对吧?那么,为什么不是每个数据科学家总是为他们解决的每个不同的问题编写一个自定义损失函数呢?
选择成本函数
实际上,我认为为你试图解决的每个问题编写一个独特的成本函数是不现实的。对于某些任务,某些成本函数变得流行是有原因的。这是因为他们通常在解决某些类型的问题上做得很好。在 scikit-learn 等流行的框架中,这些函数中的许多已经变得非常容易实现。因此,在许多情况下,花时间编写一个自定义函数是没有意义的,因为它可能会花费更长的时间来最小化而不是改善您的结果。这并不是说不值得花时间来思考你的问题,以及哪个成本函数最有意义(我认为这是解决问题过程中非常宝贵的一部分)。但在现实中,你通常可以找到一个有助于解决你的问题的成本函数,而不需要花时间去写你自己的。
考虑到上面的警告,有时您可能会仔细考虑您的问题,并发现您可以创建自己的成本函数来提供更好的结果。本文的重点是向您展示充分理解您的问题以编写您自己的成本函数对您的项目成果的影响。现在舞台已经搭好,是时候进入了,价格是正确的。
价格合适
如果你不熟悉游戏节目价格合适,游戏相当简单。四名选手来到前面相互竞争。给他们展示物品,他们都要猜它的价格。猜得最接近实际价格的参赛者获胜,并进入下一轮。因此,大多数理性的人会问的一个明显的问题是:“我可以建立一个机器学习模型来帮助我在第一轮价格合适中获胜吗?”
数据
为了训练一个模型来帮助我赢得价格是正确的,我使用了来自亚马逊玩具数据集的数据,该数据集可在 Kaggle 上获得。在开始我的实验之前,我做了一些数据清理,并使用一些基本的 NLP 来创建特征,以预测数据中玩具的价格。如果你有兴趣看看我到底是怎么做的,你可以在这里查看这个笔记本。我最终的数据框如下所示:
实验装置
对于这个实验,我决定使用微软的 LightGBM。这是一个非常受欢迎的模型,目前是我的最爱之一。它还允许一些简单的方法来建立成本函数和评估。至于成本函数,我决定测试 5 个不同的变量。我使用了 2 个基线,即 LightGBM 已经实现的 MAE 和 MSE 函数。然后我写了 3 个自定义函数来测试。我将模型的超参数调整到 MAE,并在相同的随机状态下保持它们在所有模型迭代中的一致性。所以,如果有的话,我试图在我的实验中给基线优势。
接下来是对成本函数的评估。我决定评估模型性能的几个不同方面。第一个我称之为总奖金。为了在某种程度上复制*价格是正确的,*总奖金计算如下: 如果预测高于事实,奖金等于零。如果预测低于事实,奖金与预测相等。 这种类型的评估对价值较高的项目给予较大的权重。正因为如此,我也评估了标准化的赢款,计算如下: 如果预测高于事实,赢款等于零。如果预测低于事实,赢款等于预测除以事实。 这种方法对测试集中的每一个项目赋予相等的权重。除了这些方法,我还计算了每个模型过度预测的项目的百分比。下面是我创建的用来评估模型的类。
编写成本函数
LightGBM 使用两种不同类型的函数来训练模型。第一个就是我上面说的那个。它是目标函数。这是计算成本函数的梯度以帮助模型学习的函数。LightGBM 的独特之处在于它在学习中同时使用了一阶和二阶导数。你会看到我下面都有。第二种功能是评估功能。在这个实验中,我们使用评估集和提前停止来训练我们的模型。该模型使用评估函数来确定某个指标何时停止改善。当达到这一点时,模型停止训练以优化该指标。在我的实验中,我写了一个目标函数,并与三个不同的评估函数一起使用。
对于这些函数中的几个,我们使用一个惩罚来将我们的模型推向预测不足。这是一个在 Lasso 和 Ridge 回归中也用于有效分配系数权重的概念。在实验中,我观察了几个不同的罚值,并为每个函数选择了最好的一个。让我们快速看一下这些函数。
超预测 _ 惩罚 _ 目标:这是我们的目标函数。它是 MSE 的简单变体。我们计算 MSE 的一阶和二阶导数,并在预测值大于真实值时将损失乘以惩罚值。
**over prediction _ penalty _ squared:**这是我们的第一个评价函数。它也是 MSE 的一种变体,对过度预测进行惩罚。
**over prediction _ penalty _ absolute:**这是 MAE 的一个变体,对过度预测进行惩罚。
**over prediction _ penalty _ pr:**这是我专门针对这个问题写的一个独特的评价函数。在这本书里,我试图模拟我们实验的目标,通过返回一个与我们预测相等的损失,来哄骗我们的模型给我们尽可能高的回报。
这里是我写的运行实验的助手函数的快速浏览。您可以看到我使用的硬编码超参数以及早期停止和验证集。
结果
对于每个成本函数,我查看了总奖金和标准化奖金的最佳得分。这是总奖金的结果。
从这些结果中,我们可以看到,我们的自定义目标函数与我们的问题特定评估函数配对后,表现最好,其次是我们的自定义 MSE 评估函数。有趣的是,不同惩罚下的成本函数表现最佳。我会注意到,对于每个惩罚,这不是成本函数结束的顺序。在一些版本中,特定问题评估胜出,在一些版本中,自定义 MSE 胜出,在一个版本中,常规 MAE 胜出。这表明,在大多数情况下,您将不得不修改惩罚和超参数来确定最佳模型。现在是标准化的奖金。
在标准化奖金的情况下,低估价格的数量和奖金之间有很高的相关性(不出所料)。但是,我再次注意到,根据应用于问题的不同惩罚,顺序会发生变化。
最后的想法
编写定制成本函数的能力对我来说已经派上了好几次用场。有时是因为某个特定的问题更适合某个模型不支持的东西。我也遇到过这样的情况,我的模型简单地高估了,而不是低估,我想平衡一下。不管怎样,我相信这是一件值得修补和尝试的事情。这需要实验,就像数据科学领域的许多事情一样,但它有可能对模型的结果产生影响。
如果你对用其他方式编写定制函数感兴趣,scikit-learn 也支持它。你也可以在 TensorFlow 和 PyTorch 中编写自定义的成本函数。我认为值得花时间去理解成本函数,以及它们如何改变你的模型的性能。
从你的电脑上删除 Windows 10 并安装 Ubuntu 18.04 LTS
为深度学习提升你的电脑——第 3 部分
在 Part 1 中,我展示了如何将 PC 的显卡升级到兼容 Nvidia CUDA 的 GPU,以实现更快的深度学习。为确保 GPU 安装完成而进行的所有软件检查都是在我的 Windows 10 家庭版上完成的。在第二部中,我说过我会清除 Windows 10,用 Linux Ubuntu 取而代之(因为这通常比 Windows 更兼容机器学习项目)。第 3 部分介绍了擦拭和安装过程。
第 1 步:备份您电脑上的数据,并记下您的 Windows 10 激活密钥
在开始之前,请确保您已经备份并删除了 PC 中不可恢复的个人数据;一旦你安装了 Ubuntu 18.04,你的硬盘就会被清除。
同样,根据您的 Windows 在 PC 上的安装方式,您可能希望保留一个 25 位的 Windows 许可证密钥,以防您改变主意并希望重新加载 Windows。对我来说,这是在我的电脑外壳侧面的标签上。
第二步:为 Ubuntu 18.04 LTS 版制作一个可启动的 DVD 或 USB 驱动器
去官方 Ubuntu 18.04.1 LTS(仿生海狸)下载页面这里,或者这里获取 Ubuntu ISO 镜像。我正在下载 Ubuntu-18 . 04 . 1-desktop-amd64 . iso 的桌面图像。该文件的大小约为 1.8 GB。
您需要什么:
- 一个至少 2GB 的空 u 盘,用于存储可启动的 Ubuntu 18.04 映像。这需要在 FAT32 文件系统中进行格式化;或
- 一张可写/可读的 DVD,您可以在上面刻录 Ubuntu 18.04 ISO 映像。
步骤 2a (带镜像的可引导 USB 闪存驱动器)和步骤 2b (带可引导镜像的 DVD)是可选的,这取决于您使用 Ubuntu 18.04 ISO 镜像进行引导和安装的方式。我使用了步骤 2b ,因此仅简要提及步骤 2a 。如果您希望使用步骤 2b
步骤 2a:用 Ubuntu 18.04 ISO 镜像制作一个可启动的 USB 闪存驱动器
这里有一个很棒的 Ubuntu 教程,教你如何在闪存盘上制作可启动的 ISO 镜像。对于这篇文章,我没有制作 u 盘,而是刻录了一张 DVD。
步骤 2b:使用 Ubuntu 18.04 ISO 映像刻录 DVD
假设 Ubuntu ISO 镜像(在我的例子中称为 Ubuntu-18 . 04 . 1-desktop-amd64 . ISO)已经下载到了你的 PC 上——那里暂时还安装着 Windows 去找到。iso '文件。
在 Ubuntu 官方网站上,有专门的在 Windows 上刻录 Ubuntu DVD 的教程。当您将 DVD 插入 PC 上的读/写驱动器时,如果您使用的是 Windows 10,您可以右键单击下载的文件,然后选择“刻录光盘映像”将 ISO 映像刻录到 DVD 上,如图 1 所示。
Fig 1: burning ISO image onto writable DVD
一个新的“Windows 光盘映像刻录机”窗口将出现,如图 2 所示。选择要刻录为(在本例中)“Ubuntu-18 . 04 . 1-desktop-amd64 . iso”的光盘映像文件。勾选标有“刻录后验证光盘”的方框,以确保刻录成功。
Fig 2: choosing where to burn the ISO image and verifying disk
在刻录过程结束时,您应该会在状态栏中看到一条消息,显示“光盘映像已成功刻录到光盘”。至此,你已经准备好使用你的 Ubuntu 了。iso 镜像来启动你的电脑,如步骤 3 所述。
步骤 3:使用 DVD(或 u 盘)上的 ISO 启动 Ubuntu
我选择用一张刻录了 Ubuntu ISO 的 DVD 启动。 Ubuntu 说明书上写着:“从 DVD 上安装 Ubuntu 很容易。你需要做的是:
- 将 Ubuntu DVD 放入光驱。
- 重新启动计算机。
一旦你的电脑启动,你会看到欢迎窗口。"
我的 windows 10 电脑无法从 Ubuntu 自动启动。iso DVD,而是默认引导到 Windows 10,忽略可引导。驱动器中的 iso DVD。如果您遇到这种情况,请查看下面的步骤 3a。
步骤 3a(可选):如果你不能从新的启动到 Ubuntu,需要进一步的操作。iso DVD:
如果你的电脑正常启动到 Windows 10,但没有从 Ubuntu 自动启动。iso 磁盘,您可以
a) 用一个键进入 BIOS(当你启动的时候,选项有时会短暂的闪烁——但是我的选项根本不会出现)或者,
b)使用 Window 10 的高级开始菜单。
对于选项 a),本文还包含最常见 bios 选项的有用指导,以及如何进入 bios。它指出 F12 是调出系统启动菜单最常用的键,但是 Escape、F2 和 F10 也是常用的选择。它建议你在系统启动时寻找一个简短的信息,它可以通知你按哪个键来调出启动菜单。在我的情况下,这些选项根本没有闪现,也没有尝试 F12,F2,F10 等。因此,我选择使用 Window 10 的高级开始菜单,如步骤 4 所述。
第四步:使用 Window 10 的高级开始菜单启动 DVD
要使用 Windows 10 的高级开始菜单,请导航到“设置”(齿轮图标),或在 Windows 10 开始菜单中搜索“设置”。在“设置”中,底部的选项(如图 3 所示)是“更新和安全”选项。
Fig 3: Windows 10 settings — the bottom setting in the list is “Update & Security”
选择“更新和安全”(图 3)将带你到一个更远的窗口,有更多的选项列表(图 4)。选择“恢复”。
Fig 4: Recovery option in Update & Security within Settings
当您从图 4 的选项中选择“恢复”时,会显示各种恢复选项(图 5)。
Fig 5: Recovery Options & Choosing ‘Advanced start-up’ option
在图 5 的恢复选项中,选择“高级启动”,这将允许从 USB 驱动器或 DVD 启动。选择此项将自动重启你的电脑。在这一阶段,确保你有装有 Ubuntu 的 DVD 或 u 盘。iso 文件,在适当的 PC 驱动器中。
使用 DVD 重启/重新启动
在这一阶段,您的电脑会自动重启,u 盘或 DVD 放在电脑驱动器中。图 6 显示了带有选项的启动窗口。在此窗口中,您应该选择使用一个设备(USB 驱动器或您的 DVD,视情况而定)进行引导。
Fig 6: Screenshot on Windows 10 PC restart where a device is chosen to boot from (USB or DVD with Ubuntu .iso)
在我的例子中,我选择了图 7 所示的 CD/DVD 驱动器选项,因为它包含了 Ubuntu。我需要安装的 iso 文件。
Fig 7: Choosing device type (in my case DVD) to boot up from
步骤 5:从 DVD 光盘启动 Ubuntu
一旦电脑再次启动,这次是进入 Ubuntu,Ubuntu 红色和紫色的桌面背景就会显示出来。会出现一个名为“安装 Ubuntu 18.04.LTS”的图标;这在图 8 的左上角可见。如果你双击图标,这将打开一个窗口(“擦除磁盘并安装 Ubuntu”),这将开始完整的安装过程,如图 8 所示。单击该窗口上的“立即安装”按钮开始安装过程。Ubuntu 的最终安装是通过一系列窗口一步一步引导的,这里也描述了。
Fig 8: Clicking on the ‘Install Ubuntu’ icon (top left) starts the full disk erasure and Ubuntu installation process
结论
这篇文章阐述了 Ubuntu 仿生海狸(18.04 LTS)的安装,在这个过程中擦窗户 10。该系列未来的帖子将包括为 Ubuntu 18.04 LTS 安装 Nvidia 驱动程序、CUDA、cuDNN 和 Tensorflow。
没有理论,数据科学只是关于猫的迷因
仅依赖原始数据会限制您的数据科学工具的范围
数据科学的前景是巨大的,有时感觉你可以强行进入几乎任何有统计学意义的关系,而不用担心理论。那么我们真的应该就这样抛弃后者吗?
在下文中,我不争辩,因为:
1.你的数据是从来没有那么好
2.有因果关系:这很复杂
Lol cat, exhibit 1
炒作,炒作,万岁!
长期以来,理论(如经济学、语言学等。)在那里指导决策制定,同时在计算能力方面保持吝啬。然而,摩尔定律将我们带到了一个阶段,计算机将在几秒钟内产生统计算法,这些算法在几年前被认为过于贪婪而无法实现。
媒体不失时机地给予关注,例如《连线》2008 年的这篇文章:
“忘掉分类学、本体论和心理学吧。谁知道人们为什么做他们所做的事?关键是他们做到了,我们可以以前所未有的保真度跟踪和测量它。有了足够的数据,数字就说明了一切。”
这当然是一个非常天真的说法,任何一个做过数学的人都会知道。但这里更重要的一点是,有些人愿意向你出售他们的数据科学蛇油,这不仅仅是夸大其词:他们通常是在公然对你撒谎。就拿同一篇文章来说吧:谷歌当时和现在的研究总监彼得·诺维格(Peter Norvig)被引述说:“所有的模型都是错的,越来越多的情况下,没有它们你也能成功。”结果是他实际上从未说出被认为是他说的话,他甚至说了相反的话!
只是没有深入到你的数据中
好吧,有些人夸大了它,但它有多糟糕呢?让我们面对现实吧:目前,数据科学最好的情况是识别猫的图片。现在,自动识别图片、识别口头指令或推荐打字内容显然非常有用,因为它可以增强用户体验,并自动完成单调乏味的劳动密集型任务。
但在 Siri 和谷歌翻译之外,商业环境中的人们通常对了解他们所做决定的效果感兴趣,看看他们是否应该做出这些决定。
一只猫有一些特征来定义它,包括耳朵、尾巴、胡须等等。所以最后,铲子就是铲子,猫就是猫。
但是当涉及到人类时,事情就变得更加混乱了。客户的购买习惯、欺诈者的盗用技术或优步司机的乘车模式都是人们对其环境做出反应的结果,并考虑了他们行为的成本和收益(尽管可能没有达到最大程度)。这些成本和收益会随着时间的推移而变化,例如,随着法律或可用技术的变化而变化。他们也可以因参与者的学习而改变。
一个例子可以更好地说明为什么在这种情况下理论变得非常重要:想象一下,我正试图以 1000 美元的价格卖给你一支普通的铅笔。你不会买它,可能会说:“不可能,这不是一支铅笔的价格!”。你是对的,因为我的提议不是价格,除非你我同意交换。
这个基本的玩具例子在现实世界中可能会产生戏剧性的后果:在与一家相对较大的科技公司的数据科学家的讨论中,他们真的很困惑地听说,供应商在其平台上发布的价格实际上只有在卖家遇到买家时才成为价格信息。这意味着至少 75%的数据应该被丢弃,因为大多数帖子最终都没有在交易中结束。
关于人类行为的数据充斥着这类问题,讨价还价只是其中之一。这意味着,任何一个盲目适合数据的模型都只会和它所适合的数据一样好,直到新的东西出现,改变了代理之间的交互的性质。因此,既然所有数据集的母体并不存在,那么理论所做的就是将人们从其他不相关的数据集中学到的知识编织成常识。这就是理论作为概括的明显作用。
因果
现在,理论不仅证明在(永远)不完整数据集的情况下更稳健。数据科学越来越关注因果推理,试图回答这样一个问题:为什么会这样?这不仅仅是纯粹的相关性(例如,吸烟的人死得更早),而是找出发生了什么,以便我们能够采取行动(例如,香烟烟雾中含有各种各样的东西,这些东西会滞留在肺部,有可能恶化为癌症:由此你可以有把握地得出结论,停止吸烟有助于避免过早死亡)。
纯粹基于统计理由建立因果推断有两个问题:稳健性和可解释性。稳健性问题是上一节提出的观点的另一种表现形式:如果你对观察结果背后的机制没有概念,你就不能仅仅根据你的数据安全地进行概括。
至于可解释性,决策总是需要关注价值和风险的正确驱动因素。在某种意义上,理论是一种变量选择工具,这是原始统计技术的目标。以 LASSO 和其他正则化技术为例:众所周知,基本变量通常取决于所选的数据子集。解释能力到此为止!不言而喻,本质上是高性能预测黑盒的深度学习技术在这方面甚至更差。
在某些情况下,人们可能能够使用 A/B 测试来隔离因果关系。然而,如果没有理论,这种方法在许多情况下会遭受所谓的干扰偏差,特别是对于平台。为了理解这一点,让我们想象 Deliveroo 要建立某种优先交付。在这种情况下,因为 Deliveroo 是一个多方面的平台,将客户、餐厅和送货员联系在一起,所以人们不能只是以通常的方式在参与者的代表性子集上进行测试。这里的问题是,该实验正在改变对照组(优先递送功能未被激活)和治疗组(消费者可以选择优先递送)之间的竞争格局。因此,需要理论(这里是供求分析,可能与博弈论或产业组织相结合)来指导实验的设置,以考虑外部性并中和任何不必要的影响。
不要错过
总而言之,如果一个人对决策感兴趣的话,仅仅依靠理论上的数据是不可能的。如果尽管进行了上述讨论,你仍然心存疑虑,请记住,这不仅仅是我说的,还有计量经济学家如库普曼斯,或计算机科学家如彼得·诺维格或朱迪亚·珀尔。在他们之前,这种方法可以追溯到哲学家,如康德。相关性是一件美妙的事情,但是(套用舞韵合唱团的话)不要让自己被滥用!
数据故事——过去 30 年议会中的妇女
基于联合国数据集对 1990 年以来世界各国议会中女性代表情况的探索性分析
当我们结束 2000 年代的第二个十年时,我发现回顾过去 30 年各国议会中的女性代表情况很有意思。为了了解我们从哪里来,我们去了哪里,我使用了联合国的数据集,并在非洲大陆和国家一级进行了分析,然后深入研究了有突出数字的国家,并试图了解它们是如何发生的,以及如果我们希望在其他地方看到类似的表现,我们应该从中吸取什么教训。在分析过程中,我发现了几个有趣的、令人惊讶的和令人鼓舞的发现,我将在这篇博文中展示和讨论这些发现,所以废话不多说,让我们开始吧。
各大洲——总体趋势是积极的,澳大利亚和新西兰在代表性方面领先
我首先好奇的是各大洲的趋势。得知全世界的总体趋势无一例外都是积极的,我感到惊讶和高兴。此外,有趣的是,看到非洲和亚洲开始时非常接近,但分开了,在这一时期结束时,非洲比亚洲表现出更高的代表性,然而,他们的趋势非常相似。欧洲和美洲的接近也很有趣——我希望看到这两个地区的不同模式。最后但同样重要的是,澳大利亚和新西兰显示出独特的模式,在整个期间,妇女在议会中的代表比例最高,在 2015-2016 年期间略有下降,然后是稳定的积极趋势,我希望这一趋势在未来继续下去。
然后,我查看了每年所有分支机构的代表情况。这方面的趋势也是积极的——在 90 年代初,我们勉强抓住了女性所占席位的四分之一,而在 2019 年,次大陆的最高平均水平超过了 35%。这不是最理想的,但似乎我们正在慢慢实现。然而,需要注意的一件重要事情是每个盒子的底线——一些次大陆仍然保持着平均低于 5%的女性席位。
然后,我将各大洲分成五个组,因为我预计同一个大洲的子大陆会聚集在一起。令人惊讶的是,这种情况并没有发生,从结果中可以看出,例如,我们将北欧和西欧以及加勒比海和东非放在同一个群集 0 中,而在另一个群集 0 中,我们将南亚和西亚与中非、西非和大洋洲放在一起(群集 1)。不同的次大陆显示的模式与它们的邻居不一样,但与地球上其他地方的次大陆相似。
观察每个集群会发现一些有趣的模式:
第一个集群将最初占 20-28%的子大陆组合在一起,缓慢但稳定地上升,并在 2019 年达到 33%以上。有趣的是,我们在这里可以看到,加勒比海地区开始时的比例最低,略高于 20%,结束时的比例最高,略高于 35%,而南部非洲开始时为 22.5%,在最初的十年里有了很大的飞跃,并在过去十年里保持了大约 33%的稳定比例。
第二类是不太同质的子大陆,从低于 12%的相对较低的代表开始,有一个小的飞跃和下降,然后集中在 16%左右。
在第三组中,我们有相邻的美拉尼西亚、波利尼西亚和密克罗尼西亚,它们各自显示出相当独立的模式,我假设它们由于与所有其他次大陆相比的独特性而聚集在一起。请注意一路走来的小代表,在 2000 年抓到 5%,现在保持在 10%以下。
第四个聚类对 2000 年至 2015 年间代表人数大幅增加的次大陆进行了分组,然后在过去四年中保持稳定的代表人数,其中一些次大陆的代表人数有所增加。如果有人想知道如何扩大女性在议会中的代表性,那么这个集群中的次大陆是值得学习的地方,特别是南欧的代表在 2000 年至 2015 年间增加了两倍,中美洲的代表在同一年间增加了一倍,并且在过去四年中继续增加。
最后一组相当混乱,没有一个明确的模式。我们确实在这里看到了在 2015-2019 年间保持稳定的国家,以及在此之前几年上升的国家。有趣的是,东南亚和南美洲(橙色和红色线)在 2000 年至 2010 年间的代表性和上升率几乎相同,但随后又有所不同,后者的代表性有所下降,而第一名的代表性最高。另一个值得学习的次大陆是北非,在 2000 年至 2015 年期间,这一比例增加了 4 倍,然后在过去 4 年保持稳定。
国家——我们能从卢旺达和玻利维亚学到什么
然后我放大了这些国家。我想知道的第一件事是,基于更高分辨率的每年的盒状图是否会很快显示出一些有趣的东西——答案是肯定的。在这个图中,有更好的消息,范围的上限从 1990 年的 30%以下延伸到现在的 50%以上,异常值在 1990 年达到 40%,现在超过 60%。在这里,注意每年的下限也很重要——过去和现在都有国家的议会中没有女性代表。
研究这些国家的描述性统计数据会发现更多有趣的事实。从最大值直方图(左上角)中,我们可以看到,只有 11 个国家(数据集中总共 195 个国家)达到了低于 10%的最大代表比例,根据最小值直方图(左下角),大多数国家在观察期间至少有一次由妇女担任的席位不到 10%。平均直方图(右上角)显示,在大多数国家,平均比例超过 10%,其中一些国家的比例超过 40%,这一事实使人们有理由乐观地认为这一趋势将持续下去。标准差直方图显示,大多数国家都有稳定的代表率。
然后我想看看自 1990 年和 2010 年以来取得的进步。为此,我计算了每个国家在 2019 年和 2010 年、2000 年和 1990 年之间的代表性差异(即过去 10 年、20 年和 30 年的差异)。下面的直方图总结了差异的总体趋势。
我们可以看到,许多国家做出了微小的改变(如果有的话),少数国家做出了重大的积极改变,而一些国家在观察期间出现了下降。
然后,我放大了具体的国家,检查了哪些国家在过去 10 年、20 年和 30 年中女性比例上升幅度最大。
有趣的是,这些国家大多是发展中国家,卢旺达、玻利维亚和格林纳达名列前茅。
这些飞跃的主要原因之一是配额——这种制度的核心思想是招募女性担任政治职务,并确保她们不只是政治生活中的一些象征,通常是通过为女性保留特定数量的席位。这种制度自 1997 年起在玻利维亚实施,随着性别平等是国家基本价值观之一的新《宪法》的通过,以及 2012 年该国通过的《禁止对妇女的政治暴力和骚扰法》的通过,这种制度促进了代表人数的增加。在卢旺达,这一进步主要归功于 1995 年的种族灭绝,当时大约 65%的人口是女性,也归功于保罗·卡加梅——自 2000 年起担任卢旺达总统,他领导了对平等的呼吁。卢旺达妇女人数上升的其他因素是,该国于 2003 年通过了新宪法,规定 30%的议会席位将保留给妇女(配额),并努力教育女孩和任命妇女担任领导职务【3】。相反,格林纳达已经取得了重大进步,尽管该国没有采取任何措施来实现这一进步【4】。
还有这个比率的另一面——代表率变化最小的国家,其中一些国家出现了负变化,这意味着他们的代表率在几十年间下降了。有些下降是因为开始时比例很高,有些是因为政府不太愿意处理平等代表权的问题。
我停留在单个国家的决议中,检查了 1990 年、2000 年、2010 年和 2019 年女性所占席位百分比最高和最低的国家是谁。
在 20 世纪 90 年代代表性最高的国家(左图)中,除了冰岛,还有两个前苏联国家(土库曼斯坦和亚美尼亚)以及圭亚那、罗马尼亚、古巴和阿尔巴尼亚。在右边的图中,我们看到了代表率最低的国家,在观察的年份都是 0%。
在 2000 年,斯堪的纳维亚人仍然在左边的列表中占据首位,这里几乎所有的国家都是欧洲和/或属于发达国家。在右边的图中,我们仍然可以看到没有代表的国家,但有四个国家的议会中有一些女性,这是一个小小的鼓舞。
2010 年,我们在左图中看到了更多的非洲国家和更少的欧洲国家,女性占据了更高比例的席位。卢旺达今年已经以多数票高居榜首(!)议会中的女性。在右边,我们看到议会中没有女性的国家更少,这里的最高值高于前十年同一列表中的最高值。
然后我们就到了现在。至于 2019 年,世界上有三个国家的女性在议会中占多数——卢旺达、古巴和玻利维亚。纵观最高代表的名单,我们看到更多的非洲国家和更少的欧洲国家(只有两个),这一荣誉不是由斯堪的纳维亚人保持的,令人惊讶的是——尽管头条新闻——芬兰甚至没有进入前十名。在右边,我们看到只有两个国家的妇女任职人数为零,这两个国家的妇女任职人数也高于十年前。
我从这四个数字得出的主要结论是,情况仍然不是最佳的,但总体上正在改善。此外,通过深入研究数字背后的故事,我得出结论,妇女代表人数的增加通常是具体行动的结果,而在政府忽视平等代表问题的地方,数字很低,在一些地方还在下降。
最后,我画出了当今世界每个国家的女性代表。我希望这一数字将提醒我们,尽管上述总体趋势是积极的,但我们仍有很长的路要走。
(要查看每个国家/地区的地图和图示,请按 Run Pen 并将鼠标悬停在地图上)。
方法
我分析的数据集包含了 1990 年、2000 年、2005 年、2010 年和 2015 年至 2019 年期间世界各国议会中女性所占席位的百分比,以及 2000 年、2005 年、2010 年、2015 年至 2019 年期间各大洲和次大陆的平均百分比。
我为分析写的数据集和代码可以在这里找到。
参考文献
【1】https://www.idea.int/data-tools/data/gender-quotas/quotas?FB clid = iwar 0 ekcthhoewxfs 0 ysgnskagottpro _ omtj 1 pr-yudhl 44 tnmsicfkdeehe # what
【2】https://www . idea . int/news-media/news/Bolivian-elections-result-more-women-parliament?FB clid = iwar 1 fu 1 ejentso 2 fejp 3 peoplz 7 ei 7 pmeezgts 5 lt-qwskwwehntjnua 10kc
【3】https://www . NPR . org/sections/goatsandsoda/2016/07/29/487360094/invisibilia-no-one-thought-this-all-woms-debate-team-can-crush-it
【4】https://iknow politics . org/sites/default/files/JM _ where _ are _ the _ women _ CARICOM . pdf
人工智能领域的女性领导者——负责任人工智能的 10 项原则
想象一个世界,每个人都和你一模一样。你早上去上班,看到你的同事,他们都和你同时到达,穿着相同的衣服。你今天晚些时候有一个会议,里面都是和你一样的人。你是那种喜欢在会议上表达不同意见的人,因此其他人也是如此,所以你们进行了一些激烈的讨论,但最终就会议开始时计划做的事情达成了一致。没有新的创意来挑战你的观点。
下班后,你和一些朋友见面。他们都和你一模一样,和你有着相同的兴趣,对这些兴趣有着相同的看法。
Wondering who took the photo? Look at the reflection in the glasses.
听起来很棒?没有…?我也不喜欢它的声音。
我们宇宙中的许多美丽都源于多样性。如果一切都是完全均匀的,我们只会有比绝对零度高几度的灰色污泥均匀地充满我们的整个宇宙。我们将没有星系,没有恒星,没有飞机,没有地球,没有人类…
现代社会的多样性和包容性面临着一个新的风险:人工智能。在最好的情况下,人工智能可以对我们的家庭和工作生活产生重大的积极影响——找到治疗疾病的新方法,帮助我们更好地管理时间,找到我们以前从未听过的新音乐。然而,如果没有适当的制衡,就无法保证我们会看到人工智能的积极未来,也无法保证这种收益会在我们的社会中平均分配。相反,我们最终可能会拥有限制自由、不公平地惠及社会、强化或放大现有偏见的人工智能。
进入人工智能领域的女性领导者(WLinAI)和她们的“负责任的人工智能 10 大原则”。
WLinAI 由 Ivana Bartoletti、Allison Gardner 和 Reema Patel 三位领导人工智能讨论和发展的女性创立。目标?在人工智能领域发展多元化的女性和男性支持者网络,促进公平、平等和消除人工智能中的偏见,分享研究成果,并在这些主题上影响政治家。
“负责任人工智能的 10 项原则”是这些目标的顶点。他们提供了一套由包容性社区定义的实用指南,其格式与我们的政府产生了共鸣,提出了政策建议,以确保人工智能是公平的,没有偏见的,并促进平等。
“引入一种管理人工智能部署的监管方法,这种方法反映了用于制药行业的方法。”—建议 1T3
10 项建议的核心是务实。当我们探索 AI 时,我们可能会倾向于认为,既然这是一个新的复杂的新技术空间,那么我们期待答案填充一个复杂的新技术空间。事实并非如此。我们可以从其他更成熟的行业中获得灵感来形成我们的方法,并根据任何特殊的考虑对它们进行调整。
以自动驾驶汽车为例。如果它陷入这样一种境地,它做出的所有选择都导致人类受伤或更糟,它该怎么办?为什么不从医学伦理委员会那里获得灵感呢!技术可能有所不同,但我们为回答这些难题而开发的系统可能对这两种应用都有益。
那么监管呢?我们经常被告知监管扼杀创新,但这不是我们在制药行业看到的情况。相反,监管建立了消费者信任,引导制药公司生产更安全、更可持续的产品。我们也看到消费者转向道德消费。这种支出不仅仅是环保和公平贸易产品。它涵盖了所有展现道德价值观并采取行动造福社会的企业。
创造安全且符合价值观的人工智能可能会很复杂,这项研究由大型科技公司领导,这些公司有能力让研究和政策团队进行分析。许多较小和较新的玩家可能想做同样的事情,但他们努力争取时间和成本来实现这一点。监管可以创造公平的竞争环境,甚至提供实现这一目标所需的免费工具和知识。以欧盟 HLEG(目前的草案)道德准则或算法影响评估为例——这两者都很难从零开始创造,但国际政府正在帮助传播和获取这种知识。从今年 2019 年年中开始,我们将看到欧盟 HLEG AI 政策和投资建议的最终版本,这将为我们提供一个强有力的迹象。
“建立一个人工智能监管职能部门,与信息专员办公室和数据道德中心合作——审计算法,调查个人投诉,对违反 GDPR 及平等和人权法的行为发出通知和罚款,提供更广泛的指导,传播最佳做法,并确保算法必须向用户充分解释并公开接受公众监督”——建议 2
10 项建议还就如何超越现有立法向我们的政府提出了建议。《GDPR 法案》是对《数据保护法》的一次大规模改革,但我们的政府不能一成不变,否则就有让 GDPR 变得像《数据保护法》一样过时和不完善的风险。
尽管 GDPR 无疑对社会具有积极的潜力,但在某些领域它走得还不够远,在其他领域,我们需要具体的政府职能来解决与人工智能和算法有关的更多利基问题。例如,欧盟的信条之一是透明,在 GDPR 问题上,我们有经常被引用的“解释权”只是,目前我们没有解释的权利。这只是在叙述中提到,但从未包括在 GDPR 的文件中。
为了保持我们的透明度价值,WLinAI 建议我们增加一个新的监管职能,该职能理解提供解释意味着什么,甚至帮助企业实现完全可解释性。
“开展技能审核,以确定拥抱人工智能革命所需的广泛技能。”—建议 9
人工智能不会是第一个改变和取代我们劳动力的技术。我们已经看到了两次工业革命,人类的工作被某种技术取代,而且看起来,就业率仍然很高。这并不意味着这很容易,也不意味着我们没有教训可学。
在之前的工业革命之后,普通人经历了几十年的斗争,就业市场没有准备好吸收新的劳动力,培训也没有到位,让他们为这些不同的职业做好准备。即使当就业市场复苏时,这些工人的情况似乎也没有改善。商业利润飙升,但实际上人们变得更穷了,职业发展更慢,有时工作也不那么愉快。
人工智能革命可能会比以前的工业革命更快,更具破坏性。为了避免被剥夺权利的一代工人越来越感觉与曾经雇佣他们的企业的飙升财富脱节,我们必须积极主动地识别将继续相关的技能,而不仅仅是对工人进行技能再培训,这些技能在人工智能革命后将是多余的。
这是我们过去失败的一个领域。2018 年 OEDC 的数据显示,28%的英国毕业生对于他们所从事的工作来说是大材小用。从历史上看,再培训是相当无效的,给了人们错误的技能,这些技能可能在他们生活的地方或其他任何地方都无法就业,或者与他们实际想要做的工作类型不匹配。
因此,在简单地向再培训投入资金之前,WLinAI 建议我们对实际上能帮助人们的技能进行一次彻底的审核。
“制定教育和培训计划,以满足技能审核确定的需求,包括数据伦理和社会责任方面的内容。作为其中的一部分,我们建议设立一个坚实、勇敢和严格的计划,以鼓励年轻女性和其他代表性不足的群体进入技术领域。”—建议 10
男的做科技,女的做设计师对吧?不对。
这不仅是一个有偏见和不真实的假设,而且也不符合历史。1945 年,第一台全数字计算机 ENIAC 程序雇佣了 6 名女性作为第一批程序员,几十年来,女性一直引领着计算机科学领域。直到 1984 年,学习计算机科学的女性开始迅速减少。
为什么?回顾过去,许多因素共同导致了男性将女性挤出计算机科学领域,首先是 1964 年哈罗德·威尔逊的一项倡议,该倡议旨在拥抱技术革命,创造一个“有职业意识、有管理抱负的年轻男性人才库”
然后是上世纪七八十年代的硅谷淘金热,人们意识到两件事:编程很难,价值很高。男性对该领域越来越感兴趣,提高了所需的教育要求,进一步将女性挤出了计算机科学领域。
快进到今天,我们看到不到 30%的女性在硅谷从事技术工作。具体来看人工智能,数字甚至更令人担忧,在人工智能研究白皮书中列出的名字中,女性仅占 10%。
数据科学是目前最赚钱的职业之一,在开发生命周期中让不同的工作人员参与进来有助于在所创建的系统中建立不同的价值。对于我们的政府和受其影响的科技公司来说,重新平衡应该是当务之急。
我只概述了 WLinAI 提出的 10 条建议中的 4 条。作为一个整体,它们为我们的政府超越欧洲标准奠定了坚实的基础——不仅维护而且增强了我们的平等、民主、自由和人类尊严的价值观。我们的目标是使用人工智能来促进共同利益——一种不会在歧视他人的同时不成比例地偏向个人或群体的利益。公共利益平等地帮助所有人,这样做确保所有人都比在不公平的制度下过得更好,即使是对他们有利的制度。略高于绝对零度的灰色污泥对任何人都没有好处,但看到多样性带来的恒星和星系激励着我们。
Hubble Space Telescope — Pillars of Creation
想知道如何构建异常检测模型?
用 python 从头开始创建自己的异常检测模型
Photo by Jefferson Santos on Unsplash
嘿伙计们!你有没有想过银行是如何识别欺诈账户的?或者,如何检测网络中的一些故障服务器?或者你如何解决机器学习中的问题,你没有足够的关于你的正面例子的知识?
你来对地方了。异常检测是一种用于识别不符合预期行为的异常模式的技术,称为异常值。它在商业中有许多应用,从入侵检测(识别网络流量中可能预示黑客攻击的奇怪模式)到系统健康监控(在 MRI 扫描中发现恶性肿瘤),从信用卡交易中的欺诈检测到操作环境中的故障检测。
完成后你会学到什么
- 你会明白如何使用 numpy,以及如何使用它做矩阵乘法。
- 您将使用 matplot 库来绘制和可视化异常。
- 您将使用高斯分布来寻找数据集的概率。
- 您可以应用矢量化来提高代码效率。
- 你将学习 F1 分数的概念,并用它来计算精确度和召回率,使你的预测更加准确。
- 您可以使用 try-except 学习 python 中的错误处理。
嗯…激动?让我们开始吧。
我们在做什么?
因此,我们正在制作一个异常检测模型,并应用它来检测网络上的故障服务器。在进入原始数据集之前,让我们首先想象一下如何进行和执行不同的功能。让我们从导入几个库开始。
我们将使用一个虚拟数据集来检查所有函数是否正常工作,然后我们将在原始数据集上使用这些函数。我们和好了吗?现在,我们将导入数据集,需要注意的一点是这里的数据集应该位于脚本所在的同一个目录中。
sio.loadmat()将我们的数据集(’ anomalyData.mat ')加载到变量 dataset 中。变量“X”包含训练数据集,“Xval”包含交叉验证集,“yval”包含“Xval”的相应输出。让我们看看数组“X ”,我们将使用它来拟合高斯模型,以检测异常示例。
print(X.shape)
(307, 2)
如您所见,有 307 个训练示例,每个都有 2 个特征。这些特性测量每个服务器的**吞吐量(mb/s)和响应延迟(ms)。**当您的服务器运行时,您收集了 m = 307 个关于它们如何运行的示例,因此有一个未标记的数据集{x(1),。。。,x(m)}。您怀疑这些示例中的绝大多数都是服务器正常运行的“正常”(非异常)示例,但是在这个数据集中也可能有一些服务器异常运行的示例。现在,让我们将数据集可视化,以便有一个清晰的画面。
Fig.1
高斯分布
要执行异常检测,首先需要使模型符合数据的分布。给定一个训练集{x(1),…,x(m)}(其中 x(i) ∈ R^n,这里 n = 2),您想要估计每个特征的高斯分布。对于每个特征(i = 1。。。n),你需要找到参数均值和方差(mu,sigma)。为此,让我们写下计算数组(或者你可以称之为矩阵)x 的均值和方差的函数。
数学表达式是这样的:
Fig.2
我们必须计算每个特征的平均值,在此帮助下,我们计算相应特征的方差。让我们把它写成代码。
mu, sigma2 = estimateGaussian(X)
print('mean: ',mu,' variance: ',sigma2)
mean: [[14.11222578 14.99771051]] variance: [[1.83263141 1.70974533]]
现在我们有了均值和方差,我们需要计算训练样本的概率,以确定哪些样本是异常的。我们可以通过使用多元高斯模型来实现。
多元高斯分布
多元高斯函数用于计算每个例子的概率,并根据某个阈值决定是否标记异常。计算高斯模型参数的表达式为:
Fig.3
这里,μ是每个特征的平均值,变量 sigma 计算协方差矩阵。这两个参数用于计算概率 p(x)。“e”是我们将进一步详细讨论的阈值。一旦理解了表达式,代码实现起来就非常简单了。让我们看看如何把它变成代码。
在函数内部,首先,我们将 sigma2 向量转换为协方差矩阵,然后简单地应用多元分布公式来获得概率向量。如果你在 sigma2 中传递了一个向量,你必须将它转换成一个矩阵,向量作为对角线,元素的其余部分为零(第 6 行)。
p = multivariateGaussian(X, mu, sigma2)
print(p.shape)
(307, 1)
因此,你已经成功地计算出了概率。接下来,你必须使用一些带标签的数据来计算阈值。让我们看看如何做到这一点。
pval = multivariateGaussian(Xval, mu, sigma2)
我们找到“Xval”的概率,将其与“yval”进行比较,以确定阈值。让我们找出阈值。
首先,我们发现步长有一个很宽的阈值范围来决定最好的一个。我们使用 F1 得分方法来确定最佳参数,即bestε和 bestF1。预测异常如果 pval < epsilon 在变量中给出一个二进制值的向量预测。F1 分数考虑了精度和召回率。
在第 19 行,我实现了一个 for 循环来计算 tp、fp 和 fn。如果你能拿出一些逻辑的矢量化实现,我很想听听你的意见。
Fig.4
精度=真阳性/(真阳性+假阳性)
回忆=真阳性/(真阳性+假阴性)
最佳参数是 F1 分数值最大的参数。
**注意:**我们将需要一个 try-except 块,因为在某些情况下,我们可能会除以零来计算精度和召回率。
F1, epsilon = selectThreshHold(yval, pval)
print('Epsilon and F1 are:',epsilon, F1)Output:Warning dividing by zero!!
Epsilon and F1 are: 8.990852779269493e-05 0.8750000000000001
现在,我们有了最佳的ε值,并且我们现在能够计算训练数据的异常概率。我们也将异常称为异常值。
outl = (p < epsilon)
我们需要返回离群值的索引来识别故障服务器。这给了我们一个带有二进制条目的向量,其中 1 表示异常,0 表示正常。
Output:
Number of outliers: 6
[300, 301, 303, 304, 305, 306]
因此,故障服务器如上所述。我们还可以用图形方式找出异常值。
The red circle shows the faulty servers in the network
恭喜!!我们已经成功地测试了我们所有的函数,我们可以在一些真实的数据集上使用它们来找出异常。让我们完成我们已经开始的。
Output:
(1000, 11)
(100, 11)
(100, 1)
新数据集有 1000 个例子,每个例子有 11 个特征。“Xvaltest”是测试样本的交叉验证集,而“yvaltest”是相应的标签。现在,执行与虚拟数据集相同的操作。
Output:
Warning dividing by zero!!
Best epsilon and F1 are
1.3772288907613575e-18 0.6153846153846154
Ptest 包含测试样本的预测,pvaltest 包含交叉验证集的预测。最佳的ε值是 exp 的阶(-18)。
检查异常值:
输出:
Outliers are:
[9, 20, 21, 30, 39, 56, 62, 63, 69, 70, 77, 79, 86, 103, 130, 147, 154, 166, 175, 176, 198, 209, 212, 218, 222, 227, 229, 233, 244, 262, 266, 271, 276, 284, 285, 288, 289, 290, 297, 303, 307, 308, 320, 324, 338, 341, 342, 344, 350, 351, 353, 365, 369, 371, 378, 398, 407, 420, 421, 424, 429, 438, 452, 455, 456, 462, 478, 497, 518, 527, 530, 539, 541, 551, 574, 583, 587, 602, 613, 614, 628, 648, 674, 678, 682, 685, 700, 702, 705, 713, 721, 741, 750, 757, 758, 787, 831, 834, 836, 839, 846, 870, 885, 887, 890, 901, 911, 930, 939, 940, 943, 951, 952, 970, 975, 992, 996]Number of outliers are: 117
因此,有 117 个异常值,它们相应的指数如上所示。
结论
我知道从零开始有时会很麻烦,但是如果你从零开始做,你会学到很多细节。你可以在这里找到上述项目的 笔记本 。我希望我可以教你一些新的东西,并确保你检查我的 知识库 我已经做了其他项目,如最小化数据中心的成本(使用深度强化学习),数字识别,聚类一只鸟的图像等。
参考文献: 机器学习通过吴恩达
用于文本分类的词袋与词序列
当所述序列对分类重要时,序列尊重方法比词袋实现具有优势。在合成文本语料库上,针对具有 tf-idf 向量的朴素贝叶斯评估具有单词序列的长短期记忆(LSTM)神经网络的分类有效性。
想想这两句俏皮话:“为了活着而吃饭”和“为了吃饭而活着”。它们包含相同的单词,但顺序不同——导致意思上的巨大差异。基于单词包的模型不能区分这些文档,因此将它们放在相同的聚类或分类桶中。单词嵌入没有任何帮助,因为预先训练或定制的单词向量只是单词的函数,而没有考虑单词在句子中的位置。我们在以前的文章中考虑的所有 NLP 练习(分类,聚类)都使用了这种单词袋方法将文档转换成数字向量(有或没有单词嵌入),因此也有同样的缺陷。这就是长短期记忆(LSTM)神经网络深度学习的前景可以得到检验的地方。
Figure 1. (A) The meaning implied by the specific sequence of words is destroyed in a bag-of-words approach. (B) Sequence respecting models have an edge when a play on words changes the meaning and the associated classification label
LSTM 神经网络是递归神经网络(RNN)的一个分支,其标志是从序列中学习和预测——例如由单词序列组成的句子/语音,或者监控随时间演变的数据。LSTM 神经网络弥补了从长序列中学习的一些缺点,因此比 RNN 更有效。关于 RNN 和 LSTM 网络,已经有很多文章了,所以我们在这里就不深究细节了。参见 Karpathy 的文章, Colah 的博客对 rnn、LSTMs 及其功能的精彩介绍。当然还有许多关于媒体的文章以及 Jason Brownlee 在机器学习大师上写的文章。
这篇文章尝试使用 tf-idf 向量,用 LSTM 和朴素贝叶斯对合成单词序列进行分类。LSTM 通过 Keras 和 Tensorflow 后端实现。朴素贝叶斯是通过 SciKit 实现的。当我们在这里浏览一些代码片段时,可以从 github 下载重现结果的完整代码。主要进口如下。
import numpy as np
import os
import json
from sklearn.metrics import classification_report, confusion_matrix
from sklearn.model_selection import StratifiedShuffleSplit
import random as rn
import keras
import tensorflow as tf
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
在下面的代码片段中,我们修复了 numpy 和 tensorflow 的随机种子,这样我们就可以获得可重复的结果。此外,在运行模拟之前,我们将 PYTHONHASHSEED=0 设置为 shell 中的环境变量。
#All this for reproducibility
np.random.seed(1)
rn.seed(1)
tf.set_random_seed(1)
session_conf = tf.ConfigProto(intra_op_parallelism_threads=1,inter_op_parallelism_threads=1)
sess = tf.Session(graph=tf.get_default_graph(), config=session_conf)
keras.backend.set_session(sess)
1.构建一个文本语料库
这篇文章是为了说明的目的。我们想强调的一点是,当面对必须对文本进行分类时,基于单词包的分类器会严重失败,其中单词序列是类之间的主要区分因素,如上图 1 所示。为了轻松做到这一点,我们构建一个文本语料库,而不用担心所构建句子的含义。
- 挑选一组单词,如前 1000 个最常用的单词,并对它们进行排序。获得 995 个唯一单词。第 2–6 行
- 用这些单词造 3 个独立的句子。
- 有序:取 15 个字,顺序如 0…14, 1…15, … 995…13 等…从这个列表。我们得到 995 个属于这个有序类的句子。第 9–14 行
- **反转:**以上每一个序列都是反转的。第 16–18 行
- 无序 : 随机选取 25 个单词组成一个序列。又是 995 个这样的序列,所以三个类都是平衡的。第 19–22 行
- 混洗和分割以获得训练和测试数据集。我们留出所有数据的 20%专门用于测试。第 23–24 行
以下是用这种方法形成的几个样本序列及其所属的类。
有序: [‘一’,‘能’,‘约’,‘上’,‘行’,‘加’,‘怕’,‘后’,‘又’,‘反对’,‘年龄’,‘前’,‘同意’,‘空气’,‘所有’]
反转: [‘所有’,‘空气’,‘同意’,‘以前’,‘年龄’,‘反对’,‘再次’,‘以后’,‘害怕’,‘添加’,‘行为’,‘以上’,‘关于’,‘能干’,‘一’]
无序: [‘原子’,‘安逸’,‘尝试’,‘船’,‘睡眠’,‘烦恼’,‘见’,‘推’,‘拿’,‘谁’,‘冷’,‘选择’,‘冬天’,‘自己’,‘身边’]
2.文档=一串单词
每个文档都是一串单词,我们构建的数据结构可以被 Keras 库中的各种序列相关模型(如 RNN、LSTM 等)用作输入。
2.1 编码
对所有的句子/序列使用 Keras 文本处理器,这样它可以生成一个单词索引,并相应地对每个序列进行编码(下面的第 2 -4 行)。注意,我们不需要填充,因为所有序列的长度正好是 15。
# Encode the documents
kTokenizer = keras.preprocessing.text.Tokenizer() # **Line 2**
kTokenizer.fit_on_texts(X)
Xencoded = np.array([np.array(xi) for xi in kTokenizer.texts_to_sequences(X)]) # **Line 4**
labels = np.array(labels)
2.2 LSTM 实施
我们使用最简单的 LSTM 模型,包括嵌入层、LSTM 层和输出层,如下图 2 所示。
Figure 2. A simple model for LSTM. Input sequences of length 15 are fed in batches of 32 The embedding layer reduces the size of the 1-hot vectors, while the magic of LSTM results in softmax predictions for the 3 possible classes.
顺序的 15 个字(其中每个字是 1-hot 向量)被抽取作为嵌入层的输入,该嵌入层学习用于从 995 长到 248 长的数值向量的降阶的权重。这个 248 长的向量序列被馈送到 LSTM 层,通过 softmax 激活输出层产生 3 长的数值向量。然后,最大值的索引是预测的类别
- 第 5 行:嵌入层构建了一个单词向量,其大小是输入向量的 1/4。也就是说,在我们的例子中,LSTM 层被馈送一个大小约为 250 的数值向量,而我们的输入向量大小约为 1000。
- 第 6 行:LSTM 层输出一个 125 长的矢量,这个矢量在 softmax 激活时被输入到最后一层。
- 第 7 行:最终输出图层生成一个与标注数量一样长的矢量,该矢量的 argmax 是预测的类标注。
有了数据和模型,我们就可以训练模型并测试预测了。因为这是一个多类分类,所以我们在第 3–4 行将标签转换为 1-热点向量
train_x = Xencoded[train_indices]
test_x = Xencoded[test_indices]
train_labels = keras.utils.to_categorical(labels[train_indices], len(labelToName))
test_labels = keras.utils.to_categorical(labels[test_indices], len(labelToName))
在多次训练/验证模拟中,80%的数据被分成验证(这 80%的 20%,即总体 16%)和训练集(总体数据的 64%)。
- 第 2 行:如果确认损失在任何连续 5 个时期都没有减少,我们退出并停止训练。
- 第 3 行:我们设置了 10 个不同的训练/验证分割来循环。
- 第 7 行:培训以 32 个句子为一批,最多 50 个周期,如前所述,提前停止回拨。
- 第 11 行。从 softmax 输出向量中获取实际预测的标签。
3.文档=文字袋
使用 SciKit 的矢量器,从单词包方法中构建矢量非常简单。在之前的帖子中,我们已经多次这样做了。这里我们使用 tf-idf 矢量器进行编码。
3.1 编码
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(analyzer=lambda x: x, min_df=1).fit(X)
Xencoded=vectorizer.transform(X)
上面第 2 行的结果是一个稀疏的 tf-idf 数值向量数组,它可以提供给任意数量的传统分类器,如朴素贝叶斯、支持向量机等。这里我们选择朴素贝叶斯,它们中最简单的一个。
3.2 朴素贝叶斯实现
我们在下面的代码片段中使用了 SciKit 的 API。用于 LSTM 的相同的训练/测试数据在这里被用于训练和预测。
4.结果
对于我们在这里对比的两种方法,完整的代码在 github 上以 lstm.py 和 nb.py 的名称下载。
4.1 LSTM
样品运行与
#!/bin/bash
PYTHONHASHSEED=0 ; pipenv run python lstm.py
产量:
Layer (type) Output Shape Param #
=================================================================
embedding_1 (Embedding) (None, 15, 248) 247008
_________________________________________________________________
lstm_1 (LSTM) (None, 124) 185008
_________________________________________________________________
dense_1 (Dense) (None, 3) 375
=================================================================
Total params: 432,391
Trainable params: 432,391
Non-trainable params: 0
_________________________________________________________________
None
Train on 1910 samples, validate on 478 samples
Epoch 1/50
- 3s - loss: 1.1036 - acc: 0.2890 - val_loss: 1.1027 - val_acc: 0.2322
Epoch 2/50
- 3s - loss: 1.0813 - acc: 0.4429 - val_loss: 1.1533 - val_acc: 0.2343
Epoch 3/50
..
..
Epoch 11/50
- 3s - loss: 8.5663e-04 - acc: 1.0000 - val_loss: 0.6081 - val_acc: 0.9079
Epoch 00011: early stopping
Confusion Matrix:
[[190 4 5]
[ 0 199 0]
[ 14 28 157]]
Classification Report:
precision recall f1-score support
ordered 0.9314 0.9548 0.9429 199
reversed 0.8615 1.0000 0.9256 199
unordered 0.9691 0.7889 0.8698 199
micro avg 0.9146 0.9146 0.9146 597
macro avg 0.9207 0.9146 0.9128 597
weighted avg 0.9207 0.9146 0.9128 59
显示在第 11 个时间点触发了提前停站,同时获得了 0.91 的 f1 分数。样本分割的收敛速度,以及通过 10 次不同分割获得的 f1 分数如下图 3 所示。
Figure 3. Results with LSTM. (A) Training is essentially completed in 7 epochs but patience keeps us till 12 epochs or so. (B). Very good f1-scores in all cases. The average is close to 0.9
4.2 朴素贝叶斯
运行朴素贝叶斯也是类似的,其中python hashseed = 0;pipenv 运行 python nb.py 。不幸的是,正如我们在下面看到的,这产生了 0.23的平均 f1 分数。这与 LSTM 获得的 0.9 相差甚远。
Confusion Matrix:
[[ 36 103 60]
[ 92 39 68]
[ 62 75 62]]
Classification Report:
precision recall f1-score support
ordered 0.1895 0.1809 0.1851 199
reversed 0.1797 0.1960 0.1875 199
unordered 0.3263 0.3116 0.3188 199
micro avg 0.2295 0.2295 0.2295 597
macro avg 0.2318 0.2295 0.2305 597
weighted avg 0.2318 0.2295 0.2305 597
图 4 展示了并排使用 LSTM 和朴素贝叶斯得到的混淆矩阵,以供比较。与朴素贝叶斯相比,LSTM 的对角优势表明它有更好的预测和更大的 f1 值。
Figure 4. (A) LSTM does extremely well correctly predicting labels for ordered and reversed sequences. Some hesitation can be seen with predicting the label for unordered sequences. (B) Naive Bayes using tf-idf vectors has great difficulty figuring out the class and gets them mostly wrong.
5.结论和后续步骤
这就结束了我们的论证,即当所述序列对于手边的任务是重要的时,尊重序列的方法将在 NLP 任务中做得更好。因此,当单词序列很重要时,用于文档的单词串方法相对于传统的单词包方法具有优势。LSTM 等深度学习模型尊重单词的顺序,因此可以预期会做得更好。我们构建了一个合成文本语料库,并表明 LSTM 对 3 级 f1 得分达到了 90%以上,而使用 tf-idf 向量的朴素贝叶斯分类器仅产生了 0.23。
文本语料库的人工性质是朴素贝叶斯与 LSTM 相比表现极端不佳的原因。但是正如我们所说的,这篇文章的目的是说明性的,即强调什么时候&为什么尊重序列的方法比传统的单词袋方法有优势。在本系列的下一篇文章中,我们将对一些真实的文本语料库重复这些测试,看看我们的情况如何。
…
原载于 2019 年 1 月 13 日xplordat.com。
词云很蹩脚
探索词云作为数据可视化的局限性。
Author: Shelby Temple; Made with Tableau
词云最近已经成为数据可视化的主要内容。它们在分析文本时特别受欢迎。根据 Google Trends 的数据,流行程度的上升似乎始于 2009 年左右,搜索关键词的兴趣目前仅在条形图之下。
3 Month Moving Average; Source: Google Trends, Author: Shelby Temple, Made with Tableau
与条形图不同,单词云作为数据可视化有明显的局限性。显然,我不是唯一有这种想法的人。数据 viz 目录(【datavizcatalogue.com)提到词云对于分析准确性不是很大。 Daniel McNichol ,在《走向数据科学》上发表的一篇文章中,称文字云为文本数据的饼状图。
我的主要问题是,这种可视化通常是无趣的,并提供很少的洞察力。你通常会得到显而易见的单词和普通单词的混合。
你是说,“哈利”这个词在《哈利·波特》中出现了很多次。令人震惊!
Source: Word Clouds and Wizardry, Tableau Public; Author: Dave_Andrade
当我突然意识到云这个词是蹩脚的,我开始问自己更多的问题:
- 为什么每当有新的时髦 Twitter 话题或文本需要“分析”时,人们就会觉得有必要在整个互联网上发布单词云?
- 云这个词到底有什么局限性?
- 有没有一个合适的时间来使用单词云?
文字云背后的故事
我在一本名为文本可视化介绍的书中找到了单词云的起源故事,所以功劳归于曹楠和崔薇薇。
在这本书里,他们将单词云归因于社会心理学家斯坦利·米尔格拉姆在 1976 年创造的可视化。他让人们说出巴黎的地标。然后,他画了一张地图,上面用地标的名字作为文本,如果地标得到更多的响应,字体就会变大。
然而,这并不完全是云这个词流行的原因。为此,我们应该感谢照片分享网站 Flickr。大约在 2006 年,他们实现了单词 cloud visual,作为一种通过流行标签浏览网站的方式。他们称他们的单词云实现为标签云。UX 社区接受了这个设计,它开始出现在互联网上。因此,你可能会遇到人们仍然称之为词云,标签云。
Flicker 开心地为在 UX 社区掀起“云”这个词的热潮道歉。
3 Month Moving Average; Source: Google Trends; Author: Shelby Temple; Made with Tableau
那么,2010 年前后发生了什么,让词云趋势上升到类似于条形图的搜索兴趣水平?
我不知道这要归功于哪个人或哪个形象化的形象——但看起来,当前“云”这个词的流行与挖掘文本以获得洞察力的流行有关。
一个主要的应用是编辑一堆评论并挖掘它们的洞察力。例如,像亚马逊这样的网站可以获取产品的评论和评级(通常是 5/5 颗星),并找出产品的优势和劣势。也许当过滤低评价时,“不适合”这个短语经常出现。
对于一家有很多分支机构的公司来说,常见的投诉是可以解决的。如果一家塔可钟餐厅的管理经常遭到差评……也许那里的管理很糟糕?
不幸的是,word clouds 很少回答这些问题或解决这些应用程序,但人们仍然在制造它们!
抛开商业应用,任何对 R 或 Python 有基本了解的人都可以拉推文,做一个词云。它们现在更容易制造的事实显然有助于它们的流行。
总而言之:
- 1976 年,斯坦利·米尔格拉姆(Stanley Milgram)制作了第一张 word 云状可视化地图,作为巴黎的地标
- Flickr 在 2006 年开创了网络词汇云野火——他们表示抱歉
- 大约在 2010 年,数据科学和文本挖掘爱好者拿起了单词 cloud torch,并使它们比以往任何时候都更受欢迎!
探索“云”这个词的局限性
低-信息:
你上一次基于一个词云做决定或做重要外卖是什么时候?对我来说,答案是永远不会,我想大多数人都在同一艘船上。单词云提供了底层信息,通常只是一个单词出现的频率。如果没有额外的上下文,频繁出现的单词通常没有多大意义。谁说的,为什么说,什么时候说的,对谁说的?
我见过用颜色来表示第二层信息的用法。也许词的大小就是频率,那么颜色就是词的类别。我对此百感交集,因为这与人们习惯于在 word clouds 中看到的内容相悖。在某种程度上,它剥夺了使用词云的唯一优势之一——人们非常熟悉它们作为可视化词频的方法。
句子结构方面的语境:
单词云通常一次只查看一个单词。这是有缺陷的,因为它会产生误导性的最终产品。如果你的公司推特上有一堆推文说,“不酷!”云这个词会把“不”和“酷”分开。这可能会误导人们认为他们的公司 Twitter 很酷,而实际上它并不酷。
排名:
单词云甚至不是它们想要做的最好的可视化。给你看看最常用/最流行的词。当然,有时你能说出哪个是最流行的词,但是第二、第三和第十个最流行的词呢?没那么容易。在实现这一点上,排序条形图的作用要大得多。
排名第十的最受欢迎的单词是什么?
Author: Shelby Temple; Made with Tableau
现在怎么样了?
Author: Shelby Temple; Made with Tableau
其他限制:
其他一些问题包括单词云强调长单词多于短单词。单词的位置和顺序可能会令人迷惑,因为它们通常只是随机出现在不同的地方。此外,通常不清楚常见/无聊的词是否被过滤掉了,例如-the、 as 、 is 和或**。最后,如果你使用流行度/频率以外的尺度,人们可能会措手不及。**
为什么词云还在流行?
如前所述,文本挖掘只是数据科学浪潮中的另一名冲浪者。随着数据科学、大数据和人工智能越来越受欢迎,自然语言处理(NLP)和文本挖掘也将呈上升趋势。
奇怪的是,我现在开始把单词 cloud 和 NLP 的 hello world 联系起来。就像大多数程序员的第一个程序一样,他们只是简单地打印“你好,世界!”—从 Twitter 中挖掘推文并将其可视化为词云几乎已经成为文本挖掘的入门任务。一个微妙的区别是,文字云看起来比说“你好,世界”的文字有趣得多第二个区别是,将非结构化文本数据处理成单词云要复杂一些。由于这一点,我认为人们更倾向于分享他们的第一个词云。它是数据科学中的一种奇怪的弯曲。
自豪地在互联网上发布首个单词云
其他人:“是的,我记得我的第一个单词云。”
最后的想法
有没有一个很好的场景来创建单词云?
我也这么认为即使在指出其局限性之后,我认为单词云还是有一些优点的。
- 它们通常色彩鲜艳,看起来很漂亮
- 就像饼图一样,几乎不需要任何描述就能让人理解——这是一种人们熟悉的模式
- 这是一个很好的文本挖掘任务介绍
- 没有很多其他的可视化工具容易制作,并且专门用于非结构化文本分析
但是,我们如何解决词云被过度使用的问题呢?我认为可视化和 NLP 专家有很大的机会为文本挖掘提出新的包和可视化技术。我认为,如果有人构建了一个新的 Python 或 R 包,可以轻松地消化文本结构,并以令人兴奋的方式可视化它们,人们显然会利用它。
在那之前,每当有新的令人兴奋的 Twitter 话题时,我们都需要做好准备。
Author: Unknown
需要灵感?这里有一些我见过的更好的文本可视化。注意没有单词云:
Python 中的词云:综合示例
根据词频可视化文本——经济学家风格
Image from Wikipedia
这是一个简单的练习,将我的最新一期的和《经济学人》的形象化在一个单词云中。我没有心情真正阅读这期杂志,所以我认为这是一种快速消化信息的有趣方式。
目录
- PDF 到文本的转换
- 文本预处理
- 词云
PDF 到文本的转换
该过程的第一步是将原始 PDF 文档转换为文本。我是用 pdfminer.six 完成的(python3 的)。
打印出来的文本是这样的:浏览整本书需要很长时间。对于像我这样忙碌的数据科学家来说,读起来太长了。这就是我们做这个词云的原因,宝贝。
文本预处理
现在我们需要清理数据,使图像中没有标点符号或无关紧要的单词:
WordCloud
是时候把这些放在一起了!的。“面具”的 png 图像与本文开头的经济学人徽标相同。你会发现在最终的图像中它看起来很熟悉。
最终结果:
现在舅舅打电话给我说新闻的时候,我可以简单的把这个 wordcloud 里面最大的字读出来,显得知识渊博!注意单词 cloud 和 logo 的配色方案是一样的。如果你从电脑前走开,从远处看图像,你可以从色差中隐约看到《经济学人》。
如果您觉得这很有帮助,请订阅。如果你喜欢我的内容,下面是我做过的一些项目:
谢谢,
安德鲁
Tableau 中的单词云:快速简单。
使用 Tableau 轻松创建单词云。
一个字云,也被称为标签 云,是文本数据的可视化表示,通常用于描述网站上的关键字元数据(标签),或者可视化自由格式文本维基百科。单词云是一种流行的信息图表类型
,借助它我们可以显示数据中单词的相对频率。这可以通过数据中所选字段的大小或颜色来描述。它们是一个非常强大的功能,可以吸引人们对你的演讲或故事的注意
目标
Tableau 是当今业界广泛使用的数据分析和可视化工具。Tableau 提供了一个本地特性,只需点击几下鼠标就可以创建单词云。这将是一篇非常短的文章,强调在 Tableau 中创建单词云所需的步骤。如果你想以 Tableau 开始一篇更详细的文章,请确保先阅读我的文章 数据可视化与 Tableau。
尽管这篇文章关注的是单词云,但我也要提到一些关于使用单词云的可视化最佳实践。单词云看起来很酷,但有一些更好的替代品,以更清晰和准确的方式传达相同的信息。
数据
https://rogermooresmovienation.files.wordpress.com/2017/09/box1.jpg?w=640
数据涉及 2018 年美国前 20 名电影,按国内票房收入数十亿美元排名。该数据还包含每部电影的 元符号 分数。Metacritic 是一个收集包括电影在内的媒体产品评论的网站。
所有工作表和 Tableau 工作簿都可以从其关联的存储库** 这里访问。**
在 Tableau 中创建单词云
按国内总收入计算的电影
- 打开 Tableau 桌面并连接到数据源。你可以选择任何数据格式,但这里我们使用的是一个 excel 文件,其中有你想要的数据。
- 将所需尺寸拖动到标记卡上的文字处。在这里,我将把电影标题拖到文本中,因为我想知道哪部电影在票房收入方面表现良好。
- 将国内总收益拖动到标记卡上的尺寸上。
- 现在将国内总收入拖到标记卡上的颜色上,因为我们希望颜色能够反映收入模式。
- 将标记类型从自动更改为文本**。**
- 接下来,你可以隐藏标题,根据你的喜好改变视图和背景,这样你的单词云就准备好了。
电影按照他们的元批评分数
步骤同上,除了我们使用元临界分数而不是收益。
改进单词云
上述示例处理具有有限字段的简单且精炼的数据集。如果数据包含一本书的一个段落或一些段落,我们需要为此创建一个单词云,那会怎么样呢?让我们看一个这样的例子。
资料组
出于演示的目的,我从我的一篇中型文章中选取了整篇文章。我复制了整个文本,不管内容如何,并把它放在一个[text.txt](https://github.com/parulnith/Data-Visualisation-libraries/blob/master/Data%20Visualisation%20with%20Tableau/Wordclouds%20with%20Tableau/text.txt)
文件中。然后,我运行一个小的 python 脚本,将单词及其频率保存到一个 CSV 文件中。您可以使用自己选择的任何数据集。
from collections import Counter
def word(fname):
with open(fname) as f:
return Counter(f.read().split())print(word_count("text.txt"))
import csv
my_dict = word_count("text.txt")
with open('test.csv', 'w') as f:
for key in my_dict.keys():
f.write("%s,%s\n"%(key,my_dict[key]))
[text.csv](https://github.com/parulnith/Data-Visualisation-libraries/blob/master/Data%20Visualisation%20with%20Tableau/Wordclouds%20with%20Tableau/test.csv)
是包含数据集的文件,如下所示:
现在切换到画面。
- 使用
text.csv
文件中的单词创建一个单词云,如上所述。
- 如果您想要限制条目的数量,可以使用单词计数作为过滤器,只显示出现频率最低的单词。
- ****去掉最常见的单词——即使经过字数过滤,我们仍然看到像“”、“中”等没有太大意义的单词出现在整个工作表中。让我们摆脱他们。我们将首先创建一个英语常用词的列表,可以从这里的访问。该列表包含具有与其相关联的等级的单词,我们将使用该等级作为过滤的度量。
- 现在,让我们将此表添加到我们的工作簿中。这两个工作表将根据单词列进行混合,因为这是两个源所共有的。
- 创建一个新参数,命名为“要排除的单词”,设置如下:
- 显示参数控件,通过过滤将最常用的词从云端排除。
现在调整设置,你可以有一个更好看的词云与过滤器选项。
****
Before | After
什么时候不要用词云
Marti A. Hearst 的客座博文“标签云是怎么回事”在讨论词云时值得一读。单词云绝对引人注目,并提供了一种概览或第一视角,因为它们非常受欢迎,人们通常在他们的演示文稿中有一两个。
另一方面,与条形图不同,词云不提供相似大小的词之间的清晰区分。此外,属于同一类别的单词可能彼此相距甚远,较小的单词可能会被忽略。
单词云的替代方案
- 树形图
Tree Map
与单词云相比,树形图可能提供更好的想法,但不是最好的。树形图有时被视为饼图的矩形表兄弟,在显示详细信息时可能并不理想。
- 条形图
sorted Bar chart
排序后的条形图肯定能提供更好、更准确的信息,因为它给出了比较的基线。
结论
文字云的确很吸引人,有助于展示更加精彩,但当涉及到严肃的数据分析时,有更好的工具可以尝试。然而,本文的主要目的是展示如何用最少的努力在 Tableau 中创建单词云。所以你可以试着用你选择的数据建立你自己的单词云。