TowardsDataScience-博客中文翻译-2016-2018-四十二-
TowardsDataScience 博客中文翻译 2016~2018(四十二)
原文:TowardsDataScience Blog
协议:CC BY-NC-SA 4.0
运营一个预测模型到底意味着什么?
原文:https://towardsdatascience.com/what-does-it-really-mean-to-operationalize-a-predictive-model-1c2864678d40?source=collection_archive---------20-----------------------
仅仅建立一个能够做出预测的 web 服务是不够的。
Original Image Source — Meme overlay by Imgflip
在 2017 年 SAS 调查中,83%的组织在大数据方面进行了中度至显著的投资,但只有 33%的组织表示他们从投资中获得了价值。最*在 T4 的其他调查也显示了类似的结果。我们发现,这种差距的主要原因是未能理解以真正有利于您的业务的方式实施预测所需的全部范围。在这篇文章中,我将带您浏览一个示例场景,并展示成功如何需要一个过程来确保与受影响的人保持一致,保持对要获得的业务价值的关注,并迭代地构建技术平台。
Photo Source
在您的数据科学团队加载第一个数据框之前,模型的操作流程就已开始。一个高功能的数据科学团队将与业务一起产生想法,并展望将产生的业务价值。例如,仅仅说“我们想预测客户流失”是不够的。一个更好的商业假设可能是,“我们希望通过向 10%最有可能流失的客户发送有针对性的促销信息来防止他们流失,从而每年节省 72 万美元”。确定工作积压的优先级时,数据科学团队应该关注那些具有最高潜在投资回报的想法。正如我的同事肖恩·麦考尔指出的,这项任务应该落到数据科学产品负责人的肩上。您可以在下面找到一个计算客户流失率的示例:
`($300 cost of acquisition (measured)
— $100 cost of promotion(assumed))
- 30% success of retaining with promotion (assumed)
- 10000 customer churn per month (measured)
= $60K / month
= $720K / year`
一旦数据科学团队开始开发支持业务理念的模型,他们应该从最简单的模型开始,定期与受影响最大的团队分享结果,与他们合作改进模型,并共同决定模型何时足够好。这就是我们先前粗略估价的用处。与你的利益相关者谈论 RMSE、特征向量和 ROC 曲线很可能会让他们失去兴趣。通过将您试图预测的准确性翻译回业务价值陈述,您将说同一种语言。“我们能够以 75%的准确率预测客户流失”听起来要好得多,“根据目前的假设,这将为我们每月节省大约 45,000 美元”,尤其是当您在下一步中实际开始实施该模型时。
当模型背后的团队决定开始在生产中运行模型时,他们还应该了解构建和运行生产版本的成本(包括提供输入数据的数据平台、模型预测端点和模型服务的监控)。这与上面的数据科学家的成本一起,提供了 ROI 等式的成本侧。进行这种估算的细节超出了本文的范围,所以让我们假设成本是 18 万美元。以此成本,该解决方案应在 4 个月内收回成本,并提供 54 万美元的 1 年投资回报。这是一个巨大的回报,因此我们开始了自动化数据馈送的过程,在 web 服务后面部署模型,生成预测,并将预测结果集成到新的和现有的应用程序中,以使它们易于使用。因为我们一直在与预测的最终用户合作,我们知道他们希望看到哪些细节来帮助建立对预测的信任。
现在我们已经到了实际操作模型的地步,我们仍然需要说服人们使用它。在我们之前的例子中,让我们假设提供我们的目标促销的一种方式是手写笔记给客户。首先,我们需要说服某人提供预算来建立一个笔记部门(也许我们会投资一个 Robotica 的那些 Turry 手写机器人)。如果我们不把它全部交给机器人,我们将需要通过展示他们的工作正在产生影响来激励我们的人类笔记团队。我们应该开发一个跟踪系统,看看我们的笔记中的促销活动是否被实际使用,以及有多少百分比的促销活动用户仍然在公司工作。这将允许我们验证业务假设,并帮助通知其他决策。
因此,现在我们已经建立了一个很好的模型托管系统,并且我们正在测量 75%的预期保留率(人们似乎总是高估这些类型的假设,但这没关系,因为我们仍然有望节省 40.5 万美元),该团队可能会继续构建其他高价值的模型。一个经常被忽视的关键步骤是将跨多个模型的通用操作构建到一个平台或框架中。为了在任何规模下操作模型,底层数据平台必须足够灵活,能够进行快速实验,同时还必须足够可伸缩,能够处理转换,并有助于快速预测大量数据。为了证明这些投资的成本,可以将它们分摊到几个模型的 ROI 中。
随着这一过程的重复,平台变得更加强大,团队在评估价值和与最终用户建立信任方面变得更好,我们能够真正大规模地运营模型。团队开始基于他们的预测模型更快地生产有价值的应用程序、功能和见解,更广泛的业务开始更快地信任这些结果。
然后,6 个月后的某一天,警报响起,客户流失模型不再有效。准确率已经下降到 50%,所以本质上只是猜测。数据科学团队必须努力找出问题所在并加以解决。输入数据发生了什么变化?我们上次部署该模型是什么时候?底层机器上的补丁破坏了什么吗?如果能回到我们训练模型时的确切状态就好了,这样我们就可以确定发生了什么变化。最终,有人发现并纠正了问题(由于错误的部署,所有客户的使用度量被设置为 0)。类似这样的事件导致团队专注于构建主动调试工具,如关键功能的异常检测和预测结果,以更快地检测和隔离问题。
此时,您的组织能够大规模构建和部署高价值的机器学*应用程序,同时将风险降至最低。这就是我们在 Pariveda 所说的“机器学*作为一种商业能力”。
虽然上面的故事是虚构的,但它是基于我们在机器学*旅程的各个阶段与许多客户合作的经验。如果您对此有任何问题,我很乐意讨论支持实验和模型操作的技术平台,以及对架构、流程和工具的指导/实现支持,以使您的团队能够将机器学*作为一种业务能力。
原载于 2018 年 8 月 13 日【http://parivedaperspectives.com】。
它看到了什么?
原文:https://towardsdatascience.com/what-does-it-see-f2dcd9dff9af?source=collection_archive---------17-----------------------
人工智能困惑的目光
前几天,我用人工智能搜索了一张我的阴茎土豆的照片,想看看这项技术会怎么称呼它。它会知道我的土豆是一个土豆吗?尽管它有一个像阴茎一样的突起,这个突起为它赢得了一个昵称。
我让系统查看我的阴茎土豆的几个不同的镜头——有闪光灯和没有闪光灯,室内和室外,以及各种角度——得到的答案从“胡桃南瓜”到“面团”,即使我拍摄土豆的方式是故意隐藏其隐私部分。我当时不知道的是,系统永远不会把我的土豆识别为土豆,不是因为它的阴茎,而是因为它根本不了解土豆。
我使用的人工智能在某些领域很有名,并且在几年前的 ImageNet 大规模视觉识别挑战赛(ILSVRC)中表现出色。对于那些不熟悉这场比赛的人来说,我会把它比作肯塔基赛马会,这对那些对马和赛马感兴趣的人来说是众所周知和同样令人兴奋的。这个人工智能被称为 VGG-19,用于训练和测试它的图像数据集 ImageNet 本身就很有名,它提供了数以千计的标记图像,可供研究人员使用。
据该网站称,到目前为止,ImageNet 包含超过 21,000 个类别的超过 1,400 万张图片;然而,这些类别中只有 1000 个用于比赛——1000 个所谓的 synsets,其中“土豆”不在其中。换句话说,因为人工智能已经在 ILSVRC 竞赛数据集上接受了训练,所以无论我多久向系统展示一次马铃薯,或者马铃薯的形状有多完美,系统都不会想到“马铃薯”这个词,因为它没有被教会识别它。土豆不在 1000 之列。
我看了看的 1000 个类别,得知人工智能应该能够识别胸罩、步枪、羽毛围巾、乳液、井盖、电脑鼠标、风车、祈祷毯和威士忌酒瓶。大多数时候,当我浏览被选中者的名单时,我在想,为什么是这些?
一篇关于比赛的论文解释说,1000 个比赛类别是在比赛的第一年,即 2010 年随机选择的,然后经过精心挑选,以确保它们不会太模糊,并且在等级体系中任何两个类别之间没有重叠(如果包括“猎犬”,那么“猎犬”(超类)或“小猎犬”(子类)就没有重叠)。这些年来,这一套已经发生了变化,但 639 个类别在每次挑战中都被使用过(至少到 2015 年,论文发表的那一年)。换句话说,我要感谢随机性,为什么模型能识别胸罩,但不能识别一幅画,一个石榴,但不能识别猕猴桃,一个土豆泥,不是我的土豆,一个书店,但不能识别一本书。
等等…没有书?
我向人工智能展示了一本书的几张照片,然后我被告知这是一个“橡皮擦”或“信封”,或者有时,更奇怪的是,照片中有一些东西,但我根本没有注意到。例如,当我向人工智能展示一个拿着一摞书的女人时,它将照片归类为“球衣”。
在另一张照片中,人工智能直视正在阅读的人,但识别出背景中的书架是一家书店。人工智能最自信地预测的事情并不是不正确的,只是不一定是当我看照片时我的眼睛被吸引到了哪里。要明确的是,我不期望人工智能看到它不知道的东西,但想想我们在教我们的技术什么,以及他们对什么视而不见,因为我们没有向他们展示例子,这是一件有趣的事情。
由于弗吉尼亚理工大学和佐治亚理工学院研究人员的工作,我能够窥探人工智能,看看它看起来在哪里,他们建造了制导的 Grad-CAM ,我用它来生成上面的插图。制导 Grad-CAM 技术有许多有趣的应用,但给我印象最深的是基于人工智能凝视的方向来识别偏见。在下面的例子中,有偏见的模型注意到一张女性的脸,并将她识别为护士。
(image from the paper: https://arxiv.org/abs/1610.02391)
研究人员写道,有偏见的模型从它被训练的数据中学*其偏见,但使用“从 Grad-CAM 可视化中获得的洞察力,我们平衡了数据集并重新训练了模型。”无偏模型在确定职业时看听诊器不看脸。
在另一项发人深省的研究中,脸书大学的研究人员观察了我们的技术在分类物体方面做得如何,以及它们在哪里失败了,特别是篮球和 ImageNet 中用来说明它们的图像。尽管他们看到的至少出现一个白人或一个黑人的图像的百分比非常相似(前者为 55%,后者为 53%),但根据这一数据训练的模型表现出意想不到的方式。当要求对选择的一组图像进行预测,以便“两幅图像之间的主要明显差异是人的肤色”时,该模型展示了这种模式:“所有包含黑人的图像都被分类为篮球,而具有不同肤色的人的类似照片被不同地标记”(例如,作为排球、乒乓球或棒球运动员)。换句话说,模型已经学会了一种偏向。
(image from the paper: https://arxiv.org/abs/1711.11443)
研究人员指出:
模型学*这些偏见的原因尚不清楚。一个假设是,尽管在标有篮球的图片中种族分布均衡,但与其他阶层相比,黑人在这个阶层中的比例更高。
我把上面这段话读了几遍,思考了一下其中的含义。我想知道,ImageNet 到底代表了谁,没有代表谁。我们的技术仅仅因为数据中包含(或省略)了谁和什么而获得了什么样的模式?
我们的模型非常擅长识别模式,只有一些模式不是有意的,或者更糟,是有害的。由算法做出的令人不安的决定已经出现在选美比赛、面部识别和自然语言处理等领域。去年,研究人员在我们的几个大型图像数据集中发现了明显的性别偏见。接受这些图像训练的人工智能不仅发现了这些偏见,还放大了这些偏见,将女性与厨房等事物联系起来,将男性与体育用品联系起来(见《连线》杂志的报道)。
我很欣赏为创建和维护我们用来训练和测试人工智能的图像数据集所付出的巨大努力。如果没有 ImageNet 和围绕它的竞争,我不认为我们的技术会发展得如此之快。尽管如此,我还没有在这个数据集中遇到过与肤色和表征相关的研究,我担心的是,将人类肤色与某些类型的事物联系起来,而不是与其他事物联系起来,这意味着什么。
我反复听到图像数据被称为“真实世界数据”。但这些数据反映了现实吗?我们如何确保这些数据不仅仅是在强化我们作为一个社会必须努力克服的偏见?
延伸阅读:
“Grad-CAM:通过基于梯度的定位从深度网络获得的视觉解释”,Ramprasaath R. Selvaraju,Michael Cogswell,Abhishek Das,Ramakrishna Vedantam,Devi Parikh,Dhruv Batra【https://arxiv.org/abs/1610.02391】T2
“超越准确性的 ConvNets 和 ImageNet:解释、偏差检测、对立的例子和模型批评”,Pierre Stock,Moustapha Cisse【https://arxiv.org/abs/1711.11443
“ImageNet 大规模视觉识别挑战赛”,Olga Russakovsky* Jia Deng*苏浩 Jonathan Krause Sanjeev Satheesh Sean Ma 黄志恒 Andrej Karpathy Aditya Khosla Michael Bernstein Alexander c . Berg 李菲菲https://arxiv.org/pdf/1409.0575.pdf
关于数据科学,Kaggle 调查告诉了我们什么
原文:https://towardsdatascience.com/what-does-kaggle-survey-tell-us-about-data-science-1f634ea000b1?source=collection_archive---------15-----------------------
使用 Graphext 理解用户配置文件
Kaggle 最*发表了第二次年度机器学*和数据科学调查。全球约有 24,000 名用户参与了此次调查,透露了许多关于他们的人口统计、行为和观点的信息。它为机器学*和数据科学行业提供了一个独特的视角。
通过分析调查,我们想探索对特定人群来说什么是最重要的。但是任何调查分析的挑战总是在于,定义“一个群体”的最佳方式是什么?应该根据人口统计特征还是行为来划分人群?我们如何彻底调查数据,以便了解宏观趋势(例如,全球技术行业)和微观趋势(例如,在巴西工作的女性数据科学家主要使用 R )?在本文中,我们试图使用我们的软件 Graphext 运行调查分析来回答这些问题。
Graphext 的妙处在于,我们允许用户通过两种方式探索数据:一是通过无监督的数据分割;第二,通过回答具体问题。
第 1 部分——无监督分割
在将数据集上传到 Graphext 后,软件自动绘制出调查数据的拓扑结构(在这种情况下,它看起来像一个巨大的热气球),并自动将响应分成几个集群。就我个人而言,我总是发现从一个概括的个人资料或用户考虑许多不同的特征开始非常有帮助。一旦我能想象出这个用户是谁,他/她每天做什么,通常他们的行为对我来说更有意义。
所以看看这些由无监督学*分割的聚类,一些有趣的轮廓从数据中跳出来。
蓝色集群(人口的 20%):约翰 38 岁,住在旧金山。他在一家科技公司工作,担任高级数据科学家。他拥有计算机科学博士学位,过去 6 年一直在数据科学领域工作。他的公司在技术方面相当成熟,所以他主要从事大数据方面的工作。他的工作包括构建原型,然后在 AWS 上运行 ML 模型。他使用 Python,尤其是 Scikit-learn 库,因为他主要处理表格、文本和时间序列数据。
红簇(人口的 10%):来自上海的年轻研究员明。他今年 25 岁,正在探索不同的 ML 方法来推进他的研究。他的研究重点是图像识别。他主要使用 Python、TensorFlow 和 Keras 库来处理图像数据。由于他不使用大数据集,他主要使用托管解决方案,但偶尔会使用阿里云。他拥有软件工程师学位,在 ML 领域只有 2-3 年的经验。对他来说,ML 是一个黑盒子,虽然他使用它,但他不觉得有必要向他的观众解释输出。
棕色人种(占总人口的 8%):Karina 是来自伦敦的商业分析师。她 27 岁,在一家保险公司工作。她拥有统计学本科学位,尽管她对数据科学非常感兴趣,但她从未接受过任何培训。她已经做了 4 年的工作,她的主要目标是发展分析来影响公司的决策者。她很少使用 ML,但是当她使用时,她使用随机森林和插入符号库来处理数字数据。对她来说,向她的利益相关者解释她的模型的输出并避免任何偏见是非常重要的。
如您所见,要构建丰富的用户资料,您需要提供许多详细的特征。当您有太多的数据维度需要考虑时,很难手动完成。但是有了 Graphext 这样的工具,你可以在几分钟内得到一个无偏的结果。
第二部分——回答具体问题
一旦你对调查人群有了一个总体的了解,通常,你会想用这些数据来回答一些特定的问题。在这种情况下,我们想知道欧洲的用户和美国的用户有什么不同。为此,我们选择了两组用户:来自排名前五的欧洲国家(英国、德国、法国、西班牙、意大利)的用户和来自美国的用户。我们简单地将它们分组以缩小我们的分析范围
Graphext 有一个“比较”功能,可以让你通过自动突出显示可以从统计上解释它们差异的变量来比较两个或多个组。下面是我们使用这个函数得到的结果(美国用蓝色表示,欧洲用橙色表示):
首先,欧洲用户的薪资水平远低于美国用户。从他们的背景来看,欧洲用户似乎更具技术性:他们更有可能拥有计算机科学、数学和物理学的硕士或博士学位,他们的工作是数据科学家和研究科学家。而在美国,用户更可能拥有工程、商业或生命科学方面的学士学位。除了像数据科学家这样的典型角色,他们还担任数据分析师和业务分析师。技术经验的水平也反映在他们使用的工具类型上。
当我们继续探索他们的差异时,我们发现欧洲用户更多地使用时间序列数据,而美国用户更多地使用数字数据。当我们观察这些用户工作的行业时,美国医疗和制药行业的用户比例几乎是欧洲用户比例的两倍。此外,与美国相比,欧洲男性用户的比例似乎略高。
尽管有这些不同,他们的挫折似乎是普遍的。他们都在数据清理上花了太多时间,他们发现很难解释黑盒模型,很难让工作易于重用,很难让算法公平或无偏见。我想这些共同的挫折是我们在 DS 和 ML 学科中的纽带,让我们互相学*。
我希望你喜欢阅读这篇文章。如果我的分析引起了你的兴趣,那么我鼓励你向我们索取一个演示来亲自看看 Graphext 在探索数据方面能做些什么!
是什么让美国如此伟大?科学家的视角
原文:https://towardsdatascience.com/what-does-make-america-great-a-scientists-perspective-e23284a74b37?source=collection_archive---------4-----------------------
从我们走上街头为科学游行到现在刚刚一个多星期。这是多么不可思议的一天——因为你参加了 600 多次游行!!!
为什么我对这个话题这么有热情?下面是我演讲的视频和全文(你还可以在频道找到巴拉通德·瑟斯顿、亚当·沙维奇等许多人的演讲)。我还用当天的一些图片和我收到的问题(例如,我穿的衬衫是什么?).
那么,现在怎么办?
我们游行。现在我们行动。正如我在演讲中所说,科学不能等待。我们等不及了。为了我的孩子,你的孩子,我们孩子的孩子,我们现在需要科学进步。你可以这样做!
- 保持接触!我们需要你在 www.marchforscience.com 报名参加这项运动。
- 让别人听到你的声音!你的声音很棒,我们在游行时听得很清楚。因此,通过打电话给你当地的代表、参议员和任何其他公共领袖,让他们听到你的声音。打电话给你的学校董事会,确保他们教进化论。写信、写专栏等。
- 分享你的故事!告诉世界科学是如何影响你的,以及我们为什么需要科学。
- 不要让紧急的事情妨碍了重要的事情。会有很多噪音。会有好戏看。会有可供选择的事实。我们必须保持参与,专注于有影响力的事情。
- 看到什么,说什么。我们总是听到诸如我不擅长数学或科学之类的话。或者男生化学比女生好。或者气候变化是编造的。如果你听到了,就大声说出来。如果我们保持沉默,我们就是同谋。
- 把它变成一项团队运动!让朋友订婚。我们通常不会带那些对科学有困难的人来。那些被科学吓倒的人。那些对数学感到沮丧的人。那些在课堂上有过糟糕经历的人。不要丢下他们。不要居高临下地对他们说话。我们队里需要他们!与他们分享你的激情。帮助他们明白为什么我们都应该关心科学。做一个倡导者!
是什么让美国如此伟大?(演讲全文)
Look at all of you who showed up!
谢谢你出来支持科学!
我们现在生活在一个有趣的时代……关于是什么让美国变得伟大,这个问题一直存在。所以,我想和你谈谈为什么科学让美国变得伟大。我将通过我在布什政府和最*在奥巴马政府的白宫时有机会与之交谈的来自全国各地的一些了不起的美国人的故事来讲述这个故事。
My daughter’s sign at the SF March For Science
在过去的两年里,我最喜欢的事情之一是我们把白宫变成了一个科学博览会。我们邀请了全国各地的孩子来展示他们的研究。哇哦。这些项目是美国之所以伟大的缩影。
以内森为例,他当时 15 岁,建立了机器学*和人工智能算法,以检测可能导致癌症的基因突变。
Simon-Peter、Maya 和 Grayson 在他们十几岁的时候设计了一种新的假腿,可以让截肢者步行、管理不平坦的地形,甚至(我最喜欢的部分)玩滑板!
或者奥利维亚(Olivia),她在 17 岁时开发了一种快速、便携、廉价的埃博拉病毒诊断测试。
这些孩子来自各行各业。从 T4 到美洲的每一个地方。花五分钟和他们在一起,你会带着难以置信的自卑感离开谈话。
不只是那些孩子,看看这里所有的孩子。男生和女生。你们是我们未来的科学家。你们将带领我们走向星星,你们将理解物理学的深层奥秘,开启数学之美,发现下一个医学突破,发明下一种新型材料。
我的朋友、前国防部长阿什·卡特经常提醒我,安全就像空气。没有的时候才知道需要。科学也是如此。
我国国家和经济安全的基础是科学技术。自从我们伟大的国家成立以来,这一点一直如此。
在这个国家,大陆会议和我们的第一任总统乔治·华盛顿创建了陆军工程兵团。他们的使命是——在和平时期和战争时期提供重要的公共工程服务,以加强我们国家的安全,振兴经济,降低灾害风险。
这个国家颁布了《国家航空航天法》,建立了美国国家航空航天局。创造了一条赢得登月竞赛的前进道路,今天继续引领我们努力去理解上面的地球和宇宙。
这个国家建立了美国国家卫生研究院(NIH ),以推动下一轮突破,确保我们拥有世界上最好的医疗保健。该机构通过积极的投资,成为众多人的黄金标准和希望灯塔。
这个国家率先保护我们的水资源,确保我们有清洁的空气,建立了环境保护署,其中超过一半的员工是工程师、科学家和环境保护专家。
这个国家建立了令世界羡慕的学院和大学。
这是创造了互联网的国家。
这不是政府一个人做的。它点燃了火焰,但工业、学术界和公私合作助长了火焰。例子?全球定位系统,DNA 和基因测序的发现,机器人技术,甚至数据科学。我们正在人工智能和自动驾驶汽车上看到这一幕。
但是让我告诉你。我们不能认为这是理所当然的。当我们没有领先优势时,我们只会知道我们已经失去了领先优势。我们之前的几代人所做的投资和牺牲是我们今天正在受益的。这包括那些来自世界各地的移民和难民,以使这个国家更加强大。2016 年,美国大学的 6 名研究人员和科学家获得诺贝尔奖。共同的线索?这 6 个人都出生在美国以外。
The shirt I was wearing at the SF March for Science — for more check out my naturalization speech
感谢那些为科学和创新奉献一生的人。对于那些曾在我们的军队或公共服务中服役的人们,我永远感激你们。对于那些教师,感谢你们已经做的和将要继续做的一切。你是我们的秘密配料。我们的超级大国已经并将继续培养最优秀和最聪明的人来应对当今最大的挑战。
理工科不能等。慢下来不是一个选项。密歇根州弗林特的孩子们仍然没有干净的水。气候正在变化。下一个疫情可能就在眼前。我们有越来越多的世界人口需要养活和教育。我们的国防将继续依靠创新。癌症和罕见疾病继续夺走太多人的生命。这也是我在白宫花费大量时间致力于通过精准医疗倡议和癌症登月寻找下一代医疗方法的原因之一。
我遇到的其中一个人是詹妮弗·比特纳,她给总统写信——是的,我们的确读过你写的信。关于詹妮弗,你首先要知道的是。她是个美丽的人。她是丈夫罗德的好妻子,也是他们的儿子和即将出生的孩子的好母亲。她是自然的力量。以下是詹妮弗自己说的话:
我被诊断患有第四期转移性乳腺癌,已经扩散到我的肝脏、肺部、肾上腺、脾脏、卵巢、脊柱、臀部、肋骨、股骨、肩胛骨、锁骨和许多其他骨头。一位医生说我会在三个月内住进收容所。虽然很难用语言来表达我有多感激过去几年拥有这美好生活的每一刻,但这确实不容易。我每天都在接受化疗或其他治疗。我已经忍受了多次手术和放疗,以及每周肿瘤标志物和每三个月扫描的焦虑。我的治疗副作用具有挑战性,有时会使人虚弱。尽管如此,转移性乳腺癌患者的平均寿命只有短短三年。
人生还没过半,三年就太短了。研究对于延长和改善癌症患者的生命绝对至关重要——尤其是现在我们正处于免疫疗法等一些令人难以置信的医学突破的边缘。…这就是研究得到充分资助如此重要的原因。我们如此接*,但我们大多数人不能再等了。”
问题是,如果我们不加快速度,詹妮弗就看不到她的孩子学会骑自行车、阅读或参加班级演出。她的孩子将被剥夺拥有母亲的机会。与任何一位科学家交谈,他们都会告诉你詹妮弗是对的,我们可以走得更快。与任何病人交谈,他们都会和詹妮弗说同样的话——我们必须走得更快。
癌症不等人。罕见病不等人。流行病不会等待。我们的孩子等不及了。寻找治疗方法需要对所有科学进行投资。数学、生物、物理、化学、材料科学、计算机科学、社会学、心理学、生态学,甚至数据科学。
这是我们欠所有詹妮弗·比特纳的。因为其中一个珍妮弗可能是我们的亲人。
当我们作为一个国家走到一起时;当我们作为一个团体关注时;当我们坚定不移地支持所有科学的时候,我们将保持科学的正确地位,引领我们的国家前进。为我的孩子争取一个积极的未来。你的孩子。世界儿童。我们孩子的孩子。
科学不能等。我们开始工作吧。
愿你们都长命百岁,事业兴旺。
-dj
“重大”是什么意思?
原文:https://towardsdatascience.com/what-does-significant-mean-3088aaefc244?source=collection_archive---------7-----------------------
最*,我写了一篇文章,建议决策者需要更多的数学知识才能在当今更加数据驱动的环境中有效运作。在这篇文章中,我想把重点放在数学的一个方面,我认为这是商业世界中非常缺乏的,并且可能导致经常性的严重错误决策:研究数据时的显著性的概念。
阅读本文的读者很可能已经深刻理解了统计学意义的概念。但是根据经验,我怀疑相当大比例的读者不会做出这样的声明。所以我想用一种既直观又有用的方式来介绍意义的概念。我还希望它能让人们比现在更多地询问重要性,并在没有对分析结果进行适当的显著性检验的情况下暂停妄下结论。
扔硬币
开始理解意义的最好方法是看看扔硬币的想法。这很容易理解,因为抛硬币只有两种结果:正面或反面。你可以想象一个公平或正常的硬币有相等的概率抛出一个头或一个尾巴。但是一枚有偏或有负载的硬币可能不会。例如,它可能是一种有两个头的硬币。
假设我们有一个硬币,我们被告知至少有一面是正面的,我们想确定这个硬币实际上是否是双面的。有人会为我们抛硬币,只要我们愿意,抛多少次都行,而且对结果总是诚实的。
掷一次硬币,结果是正面朝上。如果硬币是公平的,那么偶然发生的概率是二分之一。你对这两种说法有多满意?
- 硬币抛了一次,结果是正面朝上。
- 硬币有偏差
希望你对陈述 1 100%满意,对陈述 2 不太满意。很好。现在让我们第二次扔同样的硬币。又是正面。连续两个头偶然出现的概率是 1/4。也许你现在更倾向于同意第二种说法。也许不是。
假设硬币被抛了十次,十次的结果都是正面。这种事情偶然发生的概率小于 1/1000。大多数人现在会更有信心做出上面的陈述 2。
什么是意义?
作为一个概念,意义从根本上涉及三个事实:
- 答:我们周围的世界是不确定的
- b:你永远无法对事物进行足够多的测试来 100%确定一个结论
- c:尽管有 A 和 B,生活中还是需要做决定
在掷硬币的情况下,不管你掷多少次硬币,总是有正面朝上的可能性,不管这个可能性有多小。但你不能永远扔硬币否则你会在做决定之前死去(B),所以你需要确定一个点,在这个点上你可以自信地说硬币是有偏差的(C)。
每个人都有不同的确定感。我可能需要看到硬币被扔了十次才愿意伸出头来,声称硬币是有偏差的,但我的朋友可能会对扔三次硬币感到高兴。为了处理这些人类的自然差异,几个世纪以来,统计学家建立了一个确定性标准。这一标准有许多要素,但最常被引用的是这样一种观点,即要声称显著性,这种现象偶然发生的概率需要小于 0.05 或 1/20。所以在我们的掷硬币的例子中,要做出一个统计显著性的声明,你至少需要连续掷 5 次头才能达到规定的确定性水平。
这对我的工作意味着什么?
假设一个勤奋的分析师找到你,给你看他们做的分析。在此分析中,分析师查看了您组织中的所有员工,将他们分为男性和女性,并显示了以下内容:
- 在过去的 12 个月里,100 名女性中有 20 人离开了公司,离职率为 20%
- 同一时期,200 名男性中有 30 人离开了公司,离职率为 15%
现在,您将在图表上放置一个标题来显示这一分析。您可以选择两个标题:
- 在我们组织过去的 12 个月里,女性的离职率比男性的离职率高 5 个百分点
- 女性比男性更有可能离开我们公司
我希望你马上想到掷硬币的例子。标题 1 是一个很好的标题,你可以立即写下来。但是你不能在没有看到显著性测试结果的情况下写下标题 2。如果你要做这样的测试,你会发现这些比例偶然发生的概率(称为 p 值)约为 0.27,远没有低到足以自信地提出第二项主张。
这很重要,因为标题 2 是一个非常严肃的陈述。这可能会导致付出大量努力和投资来解决一个可察觉的问题。所以你和分析师有责任回去获取更多的数据,这样你就可以支持正确的统计标准。
什么时候该问意义?
每当一个有限的数据集被用来支持一个一般性的陈述时,你都应该询问它的重要性。这可以通过多种方式实现。就像上面的例子一样,一个或多个群体可能会根据特定的标准进行比较,以表明某些群体与其他群体不同。或者可以使用关于相关性的数据来声明特定的关系。不同的统计测试存在于不同的情况下,你应该有一个知道这些并能应用它们的人。
显著性通常取决于观察到的差异大小和观察到差异的人群大小。在我们上面的女性与男性的例子中,在相同规模的人群中,差异需要更大才能声称显著性,或者差异需要相同,但在更大的人群中。当你看数据时,这应该引导你的直觉。
但我从丰富的经验中知道,直觉并不总是正确的,所以我的建议是:永远要测试,不测试就不要下结论。以下是我最重要的建议,让重要性成为你的分析文化的一部分:
- 养成拥有包含 p 值的脚注的*惯
- 在没有支持显著性的 p 值的情况下,不要写关于分析结论的一般性陈述
- 不要害怕在同事面前卖弄学问。以身作则!
在商业世界的大多数情况下,重要性并不是一个复杂的概念,但它却被大大低估了。在一个越来越数据驱动的世界里,不进行显著性测试就做出决定是越来越糟糕的做法。是时候改变了。
最初我是一名纯粹的数学家,后来我成为了一名心理计量学家和数据科学家。我热衷于将所有这些学科的严谨性应用到复杂的人的问题上。我也是一个编码极客和日本 RPG 的超级粉丝。在 LinkedIn 或Twitter上找我。
社会科学能为数据产业提供什么?
原文:https://towardsdatascience.com/what-does-social-science-have-to-offer-the-data-industry-b026211a61ca?source=collection_archive---------4-----------------------
我会使用任何我需要的工具来得到结果。但我不会凭信仰拿工具。
我昨天在推特上打架了——不是故意的。
“Coursework will include math, statistics, and computer science as well as machine learning, computational modeling, and how neural nets works.’ Where are the social sciences?”
在宣布一所大学将提供人工智能本科学位,并开设“数学、统计学、计算机科学以及机器学*(和)计算建模”课程时,有人问了一个问题:“社会科学在哪里?”
作为一名训练有素的人类学家,他已经做了十多年的数据科学家,这个问题切中要害。在我的职业生涯中,我一直试图在我作为一名社会科学家的自我认同和用我的雇主和客户关心的术语阐述我的价值的实际需要之间取得平衡。几年前,当我刚刚开始自称为数据科学家时,我曾经写过这个主题(例如,这里的和这里的和和),最*我发现自己回到了这个主题,因为我试图解释人种学方法是我的技术工作的核心部分。
社会科学在哪里?他们应该在哪里?这些是我在职业生涯中一直努力想要回答的问题。我试图通过回复我上面链接的推文来开始关于这个问题的对话,但事情很快变得很糟糕。可能只是我沟通不好吧。也许 Twitter 只是一个试图谈论任何实质性问题的可怕地方。也许两者都有。真的,我只是一遍又一遍地重复同一个问题:
我从未得到答案,但我仍然想要一个。
这是关于整个学科,而不是人。当然,我相信许多个体社会科学家做了值得称赞的工作,正如我相信许多个体计算机科学家做了非常糟糕的工作一样。但是在最初的推文中隐含的问题不是“你为什么不让特定的社会科学家 X 教一堂课?”,而是“为什么不把社会科学系的课程纳入课程表?”这个相同的问题是由一个人在线程中提出了一个澄清问题暗示的:
“How can you be an anthropologist and data scientist and not understand how essential an understanding of human factors and human behaior is to the development of artificial intelligence? Genuine question.”
我认为这个问题引出了另外两个问题:
- 对人类因素/行为的理解对人工智能的发展至关重要吗?
- 通常被称为“社会科学”的学科是否可靠地提供了对人类因素/行为的可信理解?
回答问题 1:我不知道,但我很怀疑。如果我们用机器学*的温和术语谈论人工智能,而不是用某种奇点式一般智能的明显不那么温和的术语,那么我们在谈论一个工程问题,这意味着我们在谈论修补。我认为绝对必要的是,我们积极建立方法来监控数据系统如何对个人和社会产生下游影响。但我认为,我们通过构建然后逐步修改人工智能来了解人类行为的可能性,与其他方式相比是一样的。 我认为,假设我们理解人类行为的能力目前已经足够强大,可以首先实现理解,然后在理解的基础上建立系统,这是错误的。事实上,我认为科学的大部分历史都是由修补系统和建立理解组成的。纳西姆·塔勒布已经写了关于这一点的文章(这里是他的一些观点的一个更加用户友好的摘要)。
回答问题 2:我职业生涯中的一个主要遗憾是,我不得不回答不,而我非常希望能够回答是。我的职业生涯是在工业界度过的,所以我根据工具实现实际效果的能力来判断它。例如,我根据病人康复和病人康复的记录来判断医学。如果医学的某一部分有不良记录,或者没有记录,我判断该领域的该部分的理解水平是差的。我不在乎有多少研究或有多少人写了关于这个主题的文章:如果你不能得到结果,那么你不能声称理解。
将单词单独归类为结果是错误的。 如果你能做点什么(改变行为,赚钱等。)在现实世界中使用工具——“工具”可以指一种方法或理论观点以及一段代码或机器——那么这个事实是理解的必要但不充分的证明。 那是我自称理解的最低门槛。
除了人种学方法之外,我想不出任何一个源于社会科学的工具可以明确地声称遇到了这一障碍。即使是在人种学的情况下,我认为我对被证明的价值的断言也是有争议的。我不介意不完美的工具——它们总是可以改进的。我确实介意那些在现实世界中从未取得实际效果的工具。我想有更多的例子表明,起源于社会科学的工具遇到了障碍,而我只是没有意识到。但即使是这样, 社会科学中的噪声与信号之比简直太高了。就构建人工智能而言,这一比例远远高于计算机科学等学科。这并不意味着计算机科学被证明是有价值的,社会科学被证明是没有价值的。这意味着,在这个世界上,我保住工作的能力取决于我为雇主和客户提供价值的能力,搜索计算机科学工具的回报比搜索社会科学工具的回报高得多。
我希望不是这样。我为自己是人类学家而自豪。在我的职业生涯中,我经常不得不淡化这一事实,因为为我的技能付费的人没有认识到这一称号的任何价值,尽管我的人类学技能是让我提供他们想要的结果的很大一部分。这让我难过,有时让我沮丧,但它早已不再让我惊讶。
那么社会科学在哪里呢?在很大程度上,他们似乎在忙着自言自语。被纳入大学课程、研究议程或商业计划是一种尊重的标志——一种认可价值的标志。社会科学经常被排除在外,这表明它们没有得到广泛重视。从我作为一个从业者的角度来看,我希望我能说他们目前应该得到更多的重视,但是我不能。我希望这种情况会改变。与此同时,我有我需要建造的东西。我会用任何能帮我的工具。但是我不会带走任何工具,尤其是成套的工具。
电力革命告诉了我们人工智能的未来。
原文:https://towardsdatascience.com/what-electricity-revolution-tells-us-about-our-future-with-a-i-69eff44295d4?source=collection_archive---------14-----------------------
All illustrations by J. P. Solano
我们并不总是有机会见证或经历一场革命,一场真正的革命。历史已经表明革命如何改变人们的生活。无论何种类型(社会、宗教、艺术或技术),所有革命都有一个共同的核心模式: 思考或想象事物方式的突然、彻底或完全的改变 。
革命并不总是每个人都失去理智的暴力骚乱;大部分时间都是缓慢的过程,需要数年才能完全展现,给人的印象是什么都没有改变,更像是煮青蛙的寓言。
也许如果我们分析像电这样最具革命性的发明之一,我们就能理解人工智能会有什么样的前景。
本杰明·富兰克林(1706-90)一生中,作为一名作家、企业家、政治家和科学家,开辟了一条成功项目的非凡道路。最重要的是,他是一个发明家,为普通问题创造解决方案,创新新技术。尽管他从未申请过一个专利,但他的许多发明仍然在我们身边,比如双焦眼镜或摆动鳍。1752 年 6 月的一个下午,在一个暴风雨的日子里,他认为这是去放风筝以展示闪电的电学性质的最佳时机。这个实验打开了一个新领域的大门:电学。127 年过去了,托马斯·爱迪生(1847-1931)终于在 1879 年在他的实验室里制造出了一个可靠、耐用的电灯泡。从那时起,在接下来的 50 年里,从木炭到电力的转变是缓慢的,远远不是一个自然的过程。总的来说,人类的劳动、城市和生活质量都不会一样。然而,电在我们的生活和日常事务中变得如此重要,以至于没有它我们无法在正常的日子里思考。但情况并非总是如此。商业和工业用了将* 30 年才完全适应,住宅电气化用了 20 年。在这个时期,电从一种神秘的力量变成了一种重要的公用事业。深入了解商业、城市和家庭如何采用电力,可以给我们一些关于人工智能和机器学*革命将如何改变我们思维方式的提示。
在工业革命的巅峰时期,理想的工厂应该是这样的:一个附属于大型多层建筑的蒸汽机房。原因很简单:工厂布局受到传动轴和单一电源的限制。这种设计昂贵且低效,但比人力工作站更有效率。
在向电力过渡的初期,制造商不愿意放弃他们大量的知识来采用最初只是略微优越的技术。其结果是,生产流程几乎没有变化,只是将现场的蒸汽机换成了电动机。这一过程仍然效率低下,但他们发现木炭费用的节省已经足够好,不需要再努力了。他们遵循一条软适应路径。
然而,电气化注定是有史以来最具破坏性的技术之一,在 1888 年至 1905 年间形成的工业部门中,超过 40%在 1930 年初失败。那些在这些“电力冲击”中幸存下来的人看到,巨大的收益不是来自简单地用蒸汽机代替电动机,而是来自生产过程本身的重新设计。像亨利·福特(1863-1947),在电气化和其他创新方面遵循艰难适应道路的领导者,结束了我们今天所知的工厂和生产的重新设计。
经济史学家保罗·大卫和加文·莱特发现,用了这么长时间才完全认识到电力的变革潜力的主要原因是“需要在任务和产品的定义和构造方式上进行组织上,尤其是观念上的变革。
这种布局将标志着作者安德鲁·迈克菲和埃里克·布林约尔松所说的“第一个机器时代”或工业革命,即使用机器来自动化和增强我们的肌肉(身体)力量。
另一方面,家庭电气化还面临着其他挑战,如令人担忧的媒体报道和家用电器的缺乏。还需要 20 年的时间,城市和房屋才能反映出电力对提高我们生活质量的真正影响。
解读:我们人类倾向于寻找阻力和风险较小的道路。然而,创新和革命恰恰相反,因为它充满了变化和机遇。就电力而言,我们倾向于维护现状,直到我们被迫改变并接受一种新常态。从 1880 年到 1930 年,企业、城市和家庭不得不采用最新技术来保持竞争力和效率。适应过程显示了这种模式:
- 拒绝与批判。由媒体和普通人领导。
- 软适配路径。由关注经济影响的早期业务采纳者领导。
- 硬适应路径。由专注于颠覆传统的商业远见者领导。
- 拥抱变化。每个人都追随这项技术的大规模应用。
如果我们在创新时间轴上快进,我们将到达我们的时代。人类已经见证了计算机和软件的崛起,这开启了第二个机器时代:机器现在不仅被用来扩展体力,还被用来论证我们的认知能力。这为一系列新的挑战打开了大门,但也为一个新的进步单位打开了大门:指数级
未来学家杰森·希尔瓦 (1982 -)说大脑在一个线性和局部的世界中进化,但我们现在生活在一个全球化和指数化的世界中。他说,在一个带着线性镜头的思想家的世界里,技术变革正在以指数速度发生,所以我们永远看不到未来的到来。举个例子来理解线性增长和指数增长的区别,如果你走 30 步线性增长,你会得到 30 步,但是如果你走同样的 30 步指数增长,你会得到 10 亿。
在破解了英格玛机器并为二战中打败纳粹德国做出了贡献之后,数学家艾伦·都灵(1912–1954)着迷于创造一种能够学*并成为人工智能的“学*机器”的可能性。正如他指出的那样,“思考”很难定义,正因为如此,他在 1950 年发表了他著名的图灵测试,这是一项测试机器表现出与人类同等或不可区分的智能行为的能力的测试。不幸的是,他因为自己的性倾向而被起诉,并在多年后自杀,但都灵给人工智能留下的遗产就相当于本杰明·富兰克林给电。
人工智能只在大学和实验室中可见,直到 80 年代 Geoffrey Hinton 教授(1947 —)和同事对多层神经网络的研究,创建了一个使用机器学*和深度学*(人工智能的一个子集)的清晰模型。然而,许多冬天过去了,直到人工智能获得主流关注。
但是,为什么人工智能现在如此重要,而不是在 20 或 30 年前,那时所有的理论和概念都已经存在了?答案是计算能力和可用的数据量。当我们与人类的表现相比时,以前在一般问题中使用人工智能的尝试显示出平庸的结果。2014 年,谷歌聘请辛顿教授将人工智能作为重中之重,并开放了对互联网产生的大型数据集的访问。随着计算机性能的不断提高,所有这些变化都为人工智能(特别是深度学*)的商业改编创造了完美的条件。
对人工智能的大肆宣传。来自深度学*在某些特定领域取得的令人难以置信的进展。但同时,邪恶人工智能的大肆宣传或终结者的场景这只是媒体策略的一部分,以获得一些容易出售的新闻的关注。事实是人工智能远不能代表对人类的真正威胁。
作为斯坦福大学的教授,吴恩达 (1976 -),一直是深度学*和机器学*研究的先驱。他联合创立并领导了谷歌大脑项目,曾任 VP &首席科学家;当我们试图理解人工智能对我们社会的影响和作用时,他也是最受尊敬的声音之一。
他创造了这个短语:
“人工智能是新的电力,”他说。“就像 100 年前电力改变了一个又一个行业一样,人工智能现在也将这样做。”
以下是一些例子:
医学:
- 基于人工智能的临床决策;
- 医学知识工程;
- 图像分析;
- 生物和临床医学中的计算智能:
自动驾驶汽车:
- 交通即服务
- 免费邮递
- 较少的车祸
学历:
- 课外辅导和支持
- 面向所有学生的普及教育
- 差异化和个性化学*
数字助理:
- 阿莱夏
- 戒指
- 谷歌主页
- 索诺斯
人工智能的想法已经讨论了一段时间,但直到 2006 年,世界才意识到可行的人工智能的两个主要要求:更快、更便宜的计算机(云计算)和大量的数据(互联网)。从那时起,人工智能,特别是深度学*的成就已经呈指数级增长(就像 AlphaGo 一样),这意味着我们可能不必再等 50 年才能看到人工智能的全面发展。
人工智能的适应过程如下:
- 拒绝和批评是预期媒体报道的一部分,但每次关于人工智能的新闻越来越少启示性,越来越科学
- 从业务角度来看,许多公司正在寻找人工智能的软适应路径,例如,通过增加聊天机器人服务来取代呼叫中心的人工操作员,而无需重新思考业务流程。正如 100 年前发生那样,这将代表边际成本节约,但不是真正的竞争优势。
- 亚马逊、谷歌、苹果、微软等其他公司已经开始了人工智能的艰难适应之路,进行真正的结构重组,并在世界各地开设人工智能研究实验室。谷歌报告称,通过使用与 AlphaGo 类似的方法,DeepMind 能够将谷歌数据中心的能效提高 15%
- 我们正处于家庭大规模适应数字辅助的开端。亚马逊 Alexa、谷歌 Home 和其他公司都在努力赢得家庭的关注。
人工智能作为一种革命性的颠覆将需要可治理性规则和明确的界限。我们对社交媒体公司的艰难觉醒,是一个伟大的工具如何被用于邪恶提议的例子。
更多来自 J.P .索拉诺的帖子:
- 在世界上最好的餐厅之一用餐是什么感觉?
- 大卫·海涅梅尔分享了一些违背常理的原则
- 重要的是平台,而不是应用程序。
- 开发 SaaS 产品前你想知道的事情
- 通勤自我意识
- 企业家、可信度和辛纳特拉测试
- 每位企业家都应该参加斯巴达赛跑的 8 个理由
- 斯蒂芬·金的 20 条作家法则适用于企业家
- 应力悖论
- 99u IDEO 工作室的 10 个经验教训
- El bulli 如何将用餐变成一种体验
- 分享你的想法,反正没人会在意
- 为什么不利用自己呢?
- 释放你内心的超级英雄
Infer.NET 代码中潜伏着哪些错误?
原文:https://towardsdatascience.com/what-errors-lurk-in-infer-net-code-e9c52ecc389e?source=collection_archive---------22-----------------------
微软发布的项目资源是进行分析的一个很好的理由。这次也不例外,今天我们就来看看 Infer.NET 法典中发现的可疑之处。不要做总结,说重点!
项目及分析仪简介
推断。NET 是微软专家开发的机器学*系统。项目源代码最*在 GitHub 上可用,这引起了它的检查。更多关于该项目的细节可以在这里找到。
该项目由 PVS-Studio 6.26 静态代码分析器检查。我提醒一下,PVS-Studio 正在搜索 Windows、Linux、macOS 下 C\C++\C#(很快还有 Java)代码中的错误。C#代码目前为止只在 Windows 下分析。你可以下载并在你的项目上试用这个分析器。
支票本身非常简单,没有任何麻烦。在检查之前,我从 GitHub 下载了项目源代码,恢复了所需的包(依赖项),并确保项目成功构建。这是必需的,以便分析人员可以访问所有需要的信息来执行全面的分析。在几次点击之后,我通过 Visual Studio 的 PVS-Studio 插件运行了解决方案分析。
顺便说一下,这不是微软的第一个项目,用 PVS-Studio 检查过——还有其他的:罗斯林、 MSBuild 、 PowerShell 、 CoreFX 和其他。
注意。如果您或您的朋友对 Java 代码分析感兴趣,您可以通过选择“我想要分析 Java”写信给我们的支持人员。目前还没有公开的测试版本,但它很快就会出现。有人在一个秘密实验室里(隔壁)人们正在积极地研究它。
然而,哲学对话已经谈得够多了——让我们看看代码中的问题。
是 Bug 还是特性?
我建议你自己找出错误——这是一个完全可能的任务。我保证没有烧伤符合文章“2017 年 C++项目十大 Bugs】”中的内容。因此,请花时间阅读代码片段后给出的分析器警告。
**private** **void** **MergeParallelTransitions**()
{
....
**if** ( transition1.DestinationStateIndex ==
transition2.DestinationStateIndex
&& transition1.Group ==
transition2.Group)
{
**if** (transition1.IsEpsilon && transition2.IsEpsilon)
{
....
}
**else** **if** (!transition1.IsEpsilon && !transition2.IsEpsilon)
{
....
**if** (**double**.IsInfinity(transition1.Weight.Value) &&
**double**.IsInfinity(transition1.Weight.Value))
{
newElementDistribution.SetToSum(
1.0, transition1.ElementDistribution,
1.0, transition2.ElementDistribution);
}
**else**
{
newElementDistribution.SetToSum(
transition1.Weight.Value, transition1.ElementDistribution,
transition2.Weight.Value, transition2.ElementDistribution);
}
....
}
PVS-Studio 警告:v 3001有相同的子表达式 double。IsInfinity(transition1。Weight.Value)'的左边和右边的'&'操作符。运行时自动机。Simplification.cs 479
从源代码片段中可以看出,该方法使用了几个变量— transition1 和 transition2 。使用相似的名字有时是合理的,但值得记住的是,在这种情况下,在某个地方偶然犯错误的可能性会增加。
所以在检查无穷上的数字时发生了( double。IsInfinity )。由于错误,同一个变量的值转变 1。重量值被检查了两次。变量跃迁 2。第二子表达式中的 Weight.Value 必须成为一个检查值。
另一个类似的可疑代码。
internal MethodBase **ToMethodInternal**(IMethodReference imr)
{
....
bf |= BindingFlags.Public
| BindingFlags.NonPublic
| BindingFlags.Public
| BindingFlags.Instance;
....
}
PVS-Studio 警告:v 3001有相同的子表达式' BindingFlags。“|”运算符左侧和右侧的“Public”。编译器 CodeBuilder.cs 194
形成 bf 变量值时,枚举器 BindingFlags。公共使用两次。该代码包含冗余标志设置操作,或者代替第二次使用 BindingFlags。公共的另一个枚举器必须在这里发生。
顺便说一下,这段代码是在源代码中用一行代码写的。在我看来,如果它是以表格的形式格式化的(就像这里),就更容易发现问题。
我们继续吧。我引用了整个方法体,并再次建议您自己找出一个(或多个)错误。
**private** **void** **ForEachPrefix**(IExpression expr,
Action<IExpression> action)
{
*// This method must be kept consistent with GetTargets.*
**if** (expr is IArrayIndexerExpression)
ForEachPrefix(((IArrayIndexerExpression)expr).Target,
action);
**else** **if** (expr is IAddressOutExpression)
ForEachPrefix(((IAddressOutExpression)expr).Expression,
action);
**else** **if** (expr is IPropertyReferenceExpression)
ForEachPrefix(((IPropertyReferenceExpression)expr).Target,
action);
**else** **if** (expr is IFieldReferenceExpression)
{
IExpression target = ((IFieldReferenceExpression)expr).Target;
**if** (!(target is IThisReferenceExpression))
ForEachPrefix(target, action);
}
**else** **if** (expr is ICastExpression)
ForEachPrefix(((ICastExpression)expr).Expression,
action);
**else** **if** (expr is IPropertyIndexerExpression)
ForEachPrefix(((IPropertyIndexerExpression)expr).Target,
action);
**else** **if** (expr is IEventReferenceExpression)
ForEachPrefix(((IEventReferenceExpression)expr).Target,
action);
**else** **if** (expr is IUnaryExpression)
ForEachPrefix(((IUnaryExpression)expr).Expression,
action);
**else** **if** (expr is IAddressReferenceExpression)
ForEachPrefix(((IAddressReferenceExpression)expr).Expression,
action);
**else** **if** (expr is IMethodInvokeExpression)
ForEachPrefix(((IMethodInvokeExpression)expr).Method,
action);
**else** **if** (expr is IMethodReferenceExpression)
ForEachPrefix(((IMethodReferenceExpression)expr).Target,
action);
**else** **if** (expr is IUnaryExpression)
ForEachPrefix(((IUnaryExpression)expr).Expression,
action);
**else** **if** (expr is IAddressReferenceExpression)
ForEachPrefix(((IAddressReferenceExpression)expr).Expression,
action);
**else** **if** (expr is IDelegateInvokeExpression)
ForEachPrefix(((IDelegateInvokeExpression)expr).Target,
action);
action(expr);
}
找到了吗?让我们检查一下!
【PVS-Studio 警告:
V3003 检测到“if (A) {…} else if (A) {…}”模式的使用。存在逻辑错误的可能性。检查线路:1719,1727。编译器 CodeRecognizer.cs 1719
V3003 检测到“if (A) {…} else if (A) {…}”模式的使用。存在逻辑错误的可能性。检查线路:1721,1729。编译器 CodeRecognizer.cs 1721
让我们简化代码,这样问题会变得更加明显。
**private** **void** **ForEachPrefix**(IExpression expr,
Action<IExpression> action)
{
**if** (....)
....
**else** **if** (expr is IUnaryExpression)
ForEachPrefix(((IUnaryExpression)expr).Expression,
action);
**else** **if** (expr is IAddressReferenceExpression)
ForEachPrefix(((IAddressReferenceExpression)expr).Expression,
action);
....
**else** **if** (expr is IUnaryExpression)
ForEachPrefix(((IUnaryExpression)expr).Expression,
action);
**else** **if** (expr is IAddressReferenceExpression)
ForEachPrefix(((IAddressReferenceExpression)expr).Expression,
action)
....
}
如果语句重复,条件表达式和然后-几个的分支。也许,这段代码是用复制粘贴的方法写的,导致了一个问题。现在结果是然后——副本的分支永远不会被执行,因为:
- 如果条件表达式为真,则从相应对中执行第一个 if 语句的主体;
- 如果条件表达式在第一种情况下为假,那么在第二种情况下也为假。
由于then-分支包含相同的动作,现在看起来像冗余代码,令人困惑。也许,这里有一种不同的问题——必须运行其他检查,而不是重复检查。
我们继续。
**public** **int** **Compare**(Pair<**int**, **int**> x, Pair<**int**, **int**> y)
{
**if** (x.First < y.First)
{
**if** (x.Second >= y.Second)
{
*// y strictly contains x*
**return** 1;
}
**else**
{
*// No containment - order by left bound*
**return** 1;
}
}
**else** **if** (x.First > y.First)
{
**if** (x.Second <= y.Second)
{
*// x strictly contains y*
**return** -1;
}
**else**
{
*// No containment - order by left bound*
**return** -1;
}
}
....
}
PVS-Studio 警告:
v 3004‘then’语句相当于‘else’语句。运行时 RegexpTreeBuilder.cs 1080
v 3004‘then’语句相当于‘else’语句。运行时 RegexpTreeBuilder.cs 1093
这段代码看起来非常可疑,因为它包含两个条件语句,这两个条件语句的主体完全相同,分别是和以及 else 分支。大概在这两种情况下,都值得返回不同的值。另一方面,如果它是构想行为,那么移除冗余的条件语句将是有用的。
我遇到了一些更有趣的循环。下面是一个例子:
**private** **static** Set<StochasticityPattern>
IntersectPatterns(IEnumerable<StochasticityPattern> patterns)
{
Set<StochasticityPattern> result
= **new** Set<StochasticityPattern>();
result.AddRange(patterns);
**bool** changed;
**do**
{
**int** count = result.Count;
AddIntersections(result);
changed = (result.Count != count);
**break**;
} **while** (changed);
**return** result;
}
PVS-Studio 警告:v 3020一个循环内的无条件‘中断’。编译器 DefaultFactorManager.cs 474
由于无条件的 break 语句,恰好执行一次循环迭代,甚至不使用控制改变的变量。一般来说,代码看起来很奇怪,很可疑。
同样的方法(精确复制)发生在另一个班级。相应的分析仪警告: V3020 一个循环内无条件的‘中断’。可视化工具。windows factor manager view . cs 350
顺便说一下,我在一个循环中偶然发现了一个无条件的 continue 语句(分析器通过相同的诊断发现了它),但是在它上面有一个注释,声明它是一个特殊的临时解决方案:
*// TEMPORARY*
**continue**;
让我提醒你,在无条件的 break 语句旁边没有这样的注释。
我们继续吧。
internal **static** DependencyInformation **GetDependencyInfo**(....)
{
....
IExpression resultIndex = null;
....
**if** (resultIndex != null)
{
**if** (parameter.IsDefined(
typeof(SkipIfMatchingIndexIsUniformAttribute), false))
{
**if** (resultIndex == null)
**throw** **new** InferCompilerException(
parameter.Name
+ " has SkipIfMatchingIndexIsUniformAttribute but "
+ StringUtil.MethodNameToString(method)
+ " has no resultIndex parameter");
....
}
....
}
....
}
PVS-Studio 警告:v 3022表达式' resultIndex == null '始终为 false。编译器 FactorManager.cs 382
我想直接指出的是,在声明和给定检查之间, resultIndex 变量的值可能会改变。但是,在检查之间 resultIndex!= null 和 resultIndex == null 该值不能更改。因此,表达式 resultIndex == null 的结果将始终为 false ,从而永远不会生成异常。
我希望即使没有我的建议,你也有兴趣独立搜索 bug 来发现问题,但为了以防万一,我会建议再做一次。方法代码很小,我就全部引用了。
**public** **static** Tuple<**int**, string> ComputeMovieGenre(**int** offset,
string feature)
{
string[] genres = feature.Split('|');
**if** (genres.Length < 1 && genres.Length > 3)
{
**throw**
**new** ArgumentException(string.Format(
"Movies should have between 1 and 3 genres; given {0}.",
genres.Length));
} **double** value = 1.0 / genres.Length; var result
= **new** StringBuilder(
string.Format(
"{0}:{1}",
offset + MovieGenreBuckets[genres[0]],
value));
**for** (**int** i = 1; i < genres.Length; ++i)
{
result.Append(
string.Format(
"|{0}:{1}",
offset + MovieGenreBuckets[genres[i].Trim()],
value));
} **return**
**new** Tuple<**int**, string>(MovieGenreBucketCount, result.ToString());
}
让我们看看这里发生了什么。输入字符串由字符“|”解析。如果数组的长度与预期的不匹配,就会产生一个异常。等等… 流派。长度<1&1&流派。长度> 3 ?因为不存在适合表达式( [int。最小价值..1) 和 (3..里面的 MaxValue] ,表达式的结果永远是假。因此,该检查不提供任何保护,并且不会引发预期的异常。
这就是分析器阻止我们讲述的:v 3022表达‘流派。长度< 1 &体裁&。长度>3’始终为假。这里可能应该使用' || '运算符。Evaluator Features.cs 242
我发现了一个可疑的组织行动。
**public** **static** **void** **CreateTrueThetaAndPhi**(....)
{
....
**double** expectedRepeatOfTopicInDoc
= averageDocLength / numUniqueTopicsPerDoc;
....
**int** cnt = Poisson.Sample(expectedRepeatOfTopicInDoc);
....
}
PVS-Studio 警告:v 3041表达式被隐式地从“int”类型转换为“double”类型。考虑使用显式类型转换来避免小数部分的丢失。举个例子:double A =(double)(X)/Y;。LDA Utilities.cs 74
这里的可疑之处在于:执行了整数除法(变量 averageDocLength 和numuniquetopisperdoc属于 int 类型),但是结果被写入一个 double 类型的变量中。这就引出了一个问题:这是故意的还是暗示了实数的除法?如果变量expectedrepeatoftopiciindo属于 int 类型,这将禁止可能的问题。
其他地方的方法阿松。例如,使用其自变量是可疑变量的样本,如下所述。
**int** numUniqueWordsPerTopic
= Poisson.Sample((**double**)averageWordsPerTopic);
averagedwordspertopic为 int 类型,在其使用的地方被强制转换为 double 。
这是另一个使用的地方:
**double** expectedRepeatOfWordInTopic
= ((**double**)numDocs) * averageDocLength / numUniqueWordsPerTopic;
....
**int** cnt = Poisson.Sample(expectedRepeatOfWordInTopic);
请注意,变量与原始示例中的名称相同,只是在初始化时使用了实数的 expectedRepeatOfWordInTopic除法(由于显式的 numDocs 转换为 double 类型)。
总的来说,上面提到的由分析器用警告突出显示的起始源代码片段值得一看。
让我们把是否修复这个问题的思考留给代码作者(他们知道得更多),我们会走得更远。下一个可疑部门。
**public** **static** NonconjugateGaussian **BAverageLogarithm**(....)
{
....
**double** v_opt = 2 / 3 * (Math.Log(mx * mz / Ex2 / 2) - m);
**if** (v_opt != v)
{
....
}
....
}
PVS-Studio 警告:v 3041表达式被隐式地从“int”类型转换为“double”类型。考虑使用显式类型转换来避免小数部分的丢失。举个例子:double A =(double)(X)/Y;。运行时 ProductExp.cs 137
分析器再次发现一个可疑的整数除法运算,因为 2 和 3 是整数数值,表达式 2 / 3 的结果将是 0 。因此,表达式如下所示:
**double** v_opt = 0 * expr;
你必须承认,这有点奇怪。好几次我都回到这个警告,试图找到一个窍门,而不是试图将它添加到文章中。该方法充满了数学和公式(坦率地说,拆除并不十分吸引人),这里有很多值得期待的东西。此外,我尽量对这些警告保持怀疑的态度,我在文章中提到了这些警告,并在对它们进行了初步的深入研究后对它们进行了描述。
我恍然大悟——为什么需要像 0 这样的乘数,写成 2 / 3 ?因此,这个地方无论如何都值得一看。
**public** **static** **void**
**WriteAttribute**(TextWriter writer,
string name,
object defaultValue,
object value,
Func<object, string> converter = null)
{
**if** ( defaultValue == null && value == null
|| value.Equals(defaultValue))
{
**return**;
}
string stringValue = converter == null ? value.ToString() :
converter(value);
writer.Write($"{name}=\"{stringValue}\" ");
}
PVS-Studio 警告:v 3080可能的空引用。考虑检查“价值”。编译器 WriteHelpers.cs 78
相当公平的基于条件的分析器警告。表达式值中可能出现空引用取消引用。等于(默认值),如果值== null 。由于该表达式是运算符||的右操作数,对于其求值,左操作数必须具有假值,为此,至少一个变量默认值 \ 值不等于空值就足够了。最后,如果 defaultValue!= null ,并且值== null :
- default value = = null->-false;
- default value = = null&value = = null->false;(值检查未执行)
- 值。equals(default value)->-NullReferenceException,asvalue-null。
让我们看另一个案例:
**public** **FeatureParameterDistribution**(
GaussianMatrix traitFeatureWeightDistribution,
GaussianArray biasFeatureWeightDistribution)
{
Debug.Assert(
(traitFeatureWeightDistribution == null &&
biasFeatureWeightDistribution == null)
||
traitFeatureWeightDistribution.All(
w => w != null
&& w.Count == biasFeatureWeightDistribution.Count),
"The provided distributions should be valid
and consistent in the number of features.");
....
}
PVS-Studio 警告:v 3080可能的空引用。请考虑检查“traitFeatureWeightDistribution”。推荐功能 ParameterDistribution.cs 65
让我们省略额外的字符串,只留下计算布尔值的逻辑,以便于整理:
(traitFeatureWeightDistribution == null &&
biasFeatureWeightDistribution == null)
||
traitFeatureWeightDistribution.All(
w => w != null
&& w.Count == biasFeatureWeightDistribution.Count)
同样,运算符||的右操作数只有在对左操作数求值的结果为 false 时才会被求值。左操作数可以取 false 值,包括当traitfeatureweightdession = = null和biasfeatureweightdession!= null 。然后运算符||的右操作数将被求值,并调用traitFeatureWeightDistribution。所有的将导致抛出 ArgumentNullException 。
另一段有趣的代码:
**public** **static** **double** **GetQuantile**(**double** probability,
**double**[] quantiles)
{
....
**int** n = quantiles.Length;
**if** (quantiles == null)
**throw** **new** ArgumentNullException(nameof(quantiles));
**if** (n == 0)
**throw** **new** ArgumentException("quantiles array is empty",
nameof(quantiles));
....
}
PVS-Studio 警告:v 3095“分位数”对象在验证为空之前被使用。检查线路:91,92。运行时 OuterQuantiles.cs 91
注意分位数。访问长度属性,然后检查分位数是否等于空值。最后,如果 quantiles == null ,该方法将抛出一个异常,但是是不正确的异常,并且位于错误的位置。大概是线反了。
如果你已经成功地发现了前面列出的错误,我建议你用下面的方法发现一个错误,然后给自己泡一杯咖啡,试着重复一次英雄行为。为了让它更有趣一点,我将引用整个方法代码。
(全尺寸)
好吧,好吧,那是个玩笑(还是你干的?!).让我们简化任务:
**if** (sample.Precision < 0)
{
precisionIsBetween = true;
lowerBound = -1.0 / v;
upperBound = -mean.Precision;
}
**else** **if** (sample.Precision < -mean.Precision)
{
precisionIsBetween = true;
lowerBound = 0;
upperBound = -mean.Precision;
}
**else**
{
*// in this case, the precision should NOT be in this interval.*
precisionIsBetween = false;
lowerBound = -mean.Precision;
lowerBound = -1.0 / v;
}
好点了吗?分析仪发出以下代码警告:v 3008‘lower bound’变量被连续赋值两次。也许这是一个错误。检查线路:324,323。运行时 GaussianOp.cs 324
事实上,在最后一个 else 分支中, lowerBound 变量的值被连续赋值两次。显然(从上面的代码判断),变量 upperBound 应该参与其中一个赋值。
我们继续吧。
**private** **void** **WriteAucMatrix**(....)
{
....
**for** (**int** c = 0; c < classLabelCount; c++)
{
**int** labelWidth = labels[c].Length; columnWidths[c + 1] =
labelWidth > MaxLabelWidth ? MaxLabelWidth : labelWidth;
**for** (**int** r = 0; r < classLabelCount; r++)
{
**int** countWidth = MaxValueWidth;
**if** (countWidth > columnWidths[c + 1])
{
columnWidths[c + 1] = countWidth;
}
} ....
}
PVS-Studio 警告:v 3081“r”计数器不在嵌套循环内使用。考虑检查“c”计数器的使用情况。命令行分类赋值模块. cs 459
请注意,内部循环计数器— r 没有用在这个循环的主体中。因此,在内部循环的所有迭代中,执行具有相同元素的相同操作——在索引中,也使用外部循环的计数器,而不是内部循环的计数器( r )。
再来看看其他有趣的问题。
**public** **RegexpFormattingSettings**(
**bool** putOptionalInSquareBrackets,
**bool** showAnyElementAsQuestionMark,
**bool** ignoreElementDistributionDetails,
**int** truncationLength,
**bool** escapeCharacters,
**bool** useLazyQuantifier)
{
**this**.PutOptionalInSquareBrackets = putOptionalInSquareBrackets;
**this**.ShowAnyElementAsQuestionMark = showAnyElementAsQuestionMark;
**this**.IgnoreElementDistributionDetails =
ignoreElementDistributionDetails;
**this**.TruncationLength = truncationLength;
**this**.EscapeCharacters = escapeCharacters;
}
PVS-Studio 警告:v 3117没有使用构造函数参数' useLazyQuantifier '。运行时 regexpformattingsettings . cs 38
在构造函数中,没有使用一个参数— useLazyQuantifier 。鉴于在一个类中,一个属性是用一个适当的名称和类型定义的,这看起来特别可疑——T2 uselazy quantifier。显然,有人忘记通过相应的参数进行初始化。
我还遇到了几个潜在危险的事件处理程序。下面是其中一个例子:
**public** **class** **RecommenderRun**
{
....
**public** event EventHandler Started;
....
**public** **void** **Execute**()
{
*// Report that the run has been started*
**if** (**this**.Started != null)
{
**this**.Started(**this**, EventArgs.Empty);
}
....
}
....
}
PVS-Studio 警告:v 3083事件“Started”的不安全调用,NullReferenceException 是可能的。请考虑在调用事件之前将其分配给一个局部变量。评估员推荐 Run.cs 115
事实是,在检查 null 不等式和处理程序调用之间,如果在测试 null 和调用事件处理程序之间的时间内,事件没有订阅者,则会引发异常 NullReferenceException ,则可能会发生事件取消订阅。为了避免这样的问题,例如,您可以将对委托链的引用保留在一个局部变量中,或者使用?.'运算符来调用处理程序。
除了上面的代码片段,还找到了 35 个这样的地方。
顺便说一下,785v 3024 警告发生了。使用运算符比较实数时发出 V3024 警告!= '或' == '。我不会详述为什么这样的比较不总是正确的。关于这个的更多信息写在文档中,还有一个到 StackOverflow 的链接。
考虑到经常遇到公式和计算的事实,这些警告即使被置于第三级也可能是重要的(因为它们几乎与所有项目都不相关)。
如果您确定这些警告是不相关的,您几乎只需点击一下就可以删除它们,从而减少分析仪触发的总数。
结论
不知何故,碰巧我很久没有写关于项目检查的文章了,所以我很高兴再次参与到这个过程中。我希望你从这篇文章中学到一些新的\有用的东西,或者至少带着兴趣阅读它。
我希望开发人员快速修复问题,我想提醒大家,犯错误是可以的,因为我们是人。这就是为什么我们需要像静态分析器这样的额外工具来发现一个人遗漏了什么,对吗?无论如何,祝你的项目好运,谢谢你的工作!
此外,记住静态分析器的最大使用是在它的常规使用时获得的。
万事如意!
什么是计算机视觉?
原文:https://towardsdatascience.com/what-even-is-computer-vision-531e4f07d7d0?source=collection_archive---------11-----------------------
粗略的探索
非常可爱的计算机科学家、企业家、风险投资家保罗·格拉厄姆曾经在他的文章《像你说的那样写》中提到:
非正式语言是思想的运动服。
记住这一点,让我们讨论一下计算机视觉“甚至是什么”,从不真正了解它开始。
TechCrunch 巧妙地用这个想法打开了话题:
房间对面有人扔给你一个球,你接住了。简单吧?事实上,这是我们试图理解的最复杂的过程之一——更不用说重现了。
现在,快速浏览一下维基百科:
计算机视觉是一个跨学科领域,研究如何让计算机从数字图像或视频中获得高层次的理解。
粗略翻译:计算机视觉和它听起来的一样,只是有一些额外的考虑和与其他相关领域的区别。
Extracting and Classifying Features in Video
再次引用维基百科,计算机视觉包括:
使用借助几何学、物理学、统计学和学*理论构建的模型,从图像数据中解开符号信息。
用不经意的语言来说:计算机视觉是一个丰富而令人兴奋的领域,充满了研究论文,在这个领域,人们不会像说话一样写东西(除了这个家伙)。
计算机视觉漫长而传奇的历史
大约在华特·迪士尼去世和维基百科创始人诞生的时候,人们就一直试图赋予计算机视觉的天赋:
可以说,半个世纪以来,计算、数学和相关领域的进步使我们取得了很大进步。
数字图象处理
计算机视觉在很大程度上依赖于数字图像处理和维恩图,听起来也是如此,但这是不同的。可以说以下任务属于数字图像处理的范围:
- 模式识别:自明。找到规律。
- 特征 提取:将图像分解成不同的特征。
- 分类:这一簇边/形状看起来像汽车吗?一只狗?
- 多尺度信号分析:还有哪些方式可以看到这个图像?
- 图形投影:我们如何用 2d 表现 3d 物体?
Some ways to project a 3d object into two dimensions: An image processing task
算法模式识别使我们能够自动定位图像的关键点,如角和边。例如,当我们比较连续视频帧之间显著点的相对位置时,我们可以做一些事情,如补偿 x 和 y 轴的过度移动;我们可以稳定颤抖。你可以用 python 中的开源代码很容易地做到这一点。
Shaky on the left, stabilized on the right
多尺度信号分析可能是这些图像处理子任务中最令人兴奋的,但在高层次上,它也和它听起来的一样:在几个“尺度”上,呃,从几个角度分析一个信号(比如一幅图像)。Photoshop 在其锐化工具中使用多尺度分析。
Sometimes, to sharpen an image, you gotta blur it up first to help figure out where the edges are.
一个有趣的方法是通过对 取导数来分离图像。这是一种帮助找到图像边缘的方法,然后可以帮助我们将图像的各个部分聚集成单独的对象,然后这些对象可以接收标签——人类、狗、豹猫、运动球等等。这经常发生在多个“尺度”上。
Brightness at the pixel level. Images do start to look like numpy arrays…
上面是诚实的安倍的照片。它的分辨率足够低,你可以看到单个像素。由于我们使用的是 8 位灰度,这些数字代表每个像素的亮度值,范围从 0 到 255。
如果你沿着 x 轴对任何给定的像素取离散导数,这意味着你将把它与它左边和右边的像素进行比较,然后得到它们亮度值之间的瞬时变化率的估计值。你可以沿着 y 轴(它的列)对同一个像素进行离散求导,然后将这两条信息结合起来,就可以计算出这个像素是否位于边缘。
Imagine x is a pixel’s position in a discrete row of pixels, and y is its brightness value. You couldn’t get its derivative from the bar graph, but you could estimate it from a curve of best fit.
边缘往往在亮度或颜色值之间具有更大的瞬时变化率。我的意思是,看看亚伯的黑胡子的对比边缘。无论如何,这里有一个去年最新的物体检测演示,它实时结合了许多这些技术:
Joseph Redmon et al’s YOLOv3 Object Detection Algorithm. His resumé is awesome.
计算机视觉与机器视觉
那么,计算机视觉和数字图像处理的区别是什么呢?有很多重叠,但计算机视觉通常被认为更广泛:计算机视觉倾向于要求一些关于世界的假设作为输入,并且还试图输出一些可操作的决策。
这里有一种方式来思考这种区别:想象一下我们从飞机上扔下一个配备有降落伞和摄像机的简单机器人。如果它只是在降落时进行数字图像处理,它可能能够分析其摄像头的反馈,以识别其下方的陆地和海洋区域——但它不知道什么是陆地和海洋也不知道对它们做了什么。
有了计算机视觉,我们可以给我们的机器人一些关于世界的假设,比如“水和热熔岩不适合着陆,”以及“这就是热熔岩和水的样子。”然后,我们的机器人可以使用数字图像处理来分析它的摄像头,将周围的区域分为陆地、海洋或熔岩,并根据它之前的假设,决定在哪里着陆最好——然后去那里。
这个假设的跳伞实际上是机器视觉的一个例子,是计算机视觉的应用工程子类。机器视觉的一个更现实的应用可能是,自动化和加速装配线上的视觉质量控制任务。计算机视觉与这一学科的理论和科学元素有更多的关系,而不是帮助跳伞机器人安全着陆的实地工作。
憎恨者不会同意这些定义。有人说,数字图像处理只寻求以某种方式转换图像,而计算机视觉做任何和所有的模式识别、分析、解析斑点等等。在这一系列学术术语中,它仍然有点像狂野的西部。
未来:好与坏
我们已经疯狂地给予计算机*乎实时地观察事物并描述它们是什么的能力。未来工作的重点将是进一步开发通用系统,让计算机能够理解它们看到的东西,并做出适当的反应。
我们需要这样的系统来让自动驾驶汽车安全运行。为了让医学成像变得更好更便宜,我们需要它们。我们将需要它来做许多好事,但正如人类建造的任何闪亮的新工具一样,我们必须记住一件事:一旦建立在这些基础上的工具以有意义的方式出售,那些从剥削、战争和其他邪恶行为中获利的人就会拿出他们的支票簿。来自 Gizmodo :
伦敦著名的皮卡迪利广场正在安装一个巨大而可怕的…巨大的屏幕……【它】可以探测附*的车辆、年龄,甚至人们的情绪,并通过播放有针对性的广告做出反应。
多黑的镜子。
机器学*和数字图像处理的进步正在融合。想到在我有生之年,在仓库工作的机器人将能够看到我正在向它扔扳手,理解这意味着什么,决定它应该做什么,抓住它,这并不疯狂。
每个 CEO 需要了解的人工智能知识。第一部分:增长
原文:https://towardsdatascience.com/what-every-ceo-needs-to-know-about-ai-part-one-growth-5c9c9d21374?source=collection_archive---------21-----------------------
简单地将 AI 委托给你的数字团队是错误的。以下是您如何利用它来改变您业务的方方面面。
人工智能(AI)允许公司思考以前不可想象的事情。然而,尽管微软、亚马逊、脸书、谷歌和百度等科技巨头将人工智能作为其核心,并定期利用其潜力,但大多数其他非科技公司现在才开始意识到人工智能给他们带来的机遇。
很少有首席执行官意识到人工智能可以帮助他们实现商业目标并塑造 P & L 。他们知道如何利用组织重新设计、削减成本、并购、业务和产品发布以及地理扩张,但未能看到人工智能是一个可以添加到他们工具包中的强大工具。
由于大多数非科技公司的首席执行官不知道如何将人工智能融入他们的商业战略,他们倾向于将人工智能工作委托给他们的数字团队。但是这些团队不可避免地从技术的角度而不是 P&L 的角度来看待它。我看到的是数字团队迷失在树林中,而牺牲了森林。后者需要高级商业领袖充分理解和欣赏人工智能如何帮助他们。
每个首席执行官都应该能够在人工智能的帮助下重新想象他们的业务和 P&L。作为一个指南,我确定了首席执行官可以在人工智能的帮助下塑造的 17 个杠杆,以提高他们的损益。我开发的框架(如下)既可以用作评估你的团队围绕人工智能所做努力的当前状态的晴雨表,也可以用于发现新的机会。这 17 个杠杆展示了人工智能如何帮助推动卓越的增长,提高资本回报率,以及管理可取和不可取的风险。
该框架将帮助您与您的团队围绕如何利用人工智能的力量进行结构化和集中的讨论,关注以下问题:
- 奖金的潜在规模有多大?
- 市场进化到了什么阶段?
- 早期采用者实现了什么?
- 要避免哪些陷阱?
持续高速增长
我们先来看增长。持续的高速增长是难以捉摸的。没有必胜的公式。但成功的公司似乎掌握了战略、资本配置、创新、市场扩张以及卓越的销售和营销的调配权。这些杠杆中的最后三个一直是人工智能早期采用者的关注点。
创造新的
推动增长的秘诀是大胆开发一种全新的产品,这在以前是不可能的。以亚马逊的智能音箱 Alexa 为例——现在每六个美国家庭中就有一个。这是一项创新,打破了电信巨头、手机制造商和家庭娱乐系统提供商对进入家庭的“声音”的束缚。
在零售领域,在线超市集团 Ocado 已经将人工智能置于其新客户服务中心运营方式的核心——我们过去称之为仓库。该公司坚持认为,组装订单的时间已经从几个小时减少到几分钟。算法运行仓库以确保速度、准确性和质量——甚至确保西瓜不是放在一箱鸡蛋上面。人工智能平台不仅让 Ocado 有效地运营自己的业务:它还将该系统出售给了海外的其他零售商。
微小的进步,比如给现有产品添加一些人工智能,可能会帮助你保持竞争力。但它不太可能增加你的收入或利润,除非你是苹果公司推出具有面部识别功能的 iPhoneX,或者你可以模块化你的产品并为人工智能模块定价。
接触更广泛的客户群体
有远见的公司已经开始使用人工智能来服务以前被认为不值得为之烦恼的顾客。
以提供信贷为例。机器学*可以查看数据,如个人过去的购物*惯、公用事业账单和租金的支付情况,以建立他们可能的信用状况。有了这些信息,公司就可以决定是否发放贷款——即使相关人员过去没有信用记录。全球约有 17 亿成年人仍然没有银行账户。然而,需要特别注意隐私法和客户的同意和偏好;该行业正面临一些监管阻力。
同样,小企业在寻求信贷时也可以接受评估:人工智能可以查看从脸书、LinkedIn、易贝和 PayPal 等地收集的销量、客户评论和数据等信息,来衡量一家公司是否有可能支付账单。
从现有客户那里获得更多
人工智能现在已经接*实现大规模个性化。它可以将传统数据与从在线浏览、社交媒体和可穿戴设备等来源收集的客户行为详细信息结合起来。这样就可以在正确的时间提供正确的产品,传达正确的信息。麦肯锡估计,这种大规模个性化可以将销售额提高 10%或更多。
例如,在亚马逊,我们已经看到机器学*被用来向现有客户提出建议:他们会收到一个推荐的“下一个要购买的产品”。这些想法是通过查看您的人口统计资料、您过去购买的产品以及具有类似资料的客户购买的产品而产生的。一度,亚马逊约 30%的销售额来自其推荐引擎。
企业对企业的公司可以采取类似的策略,通过挖掘过去的订购模式,并将它们与销售给类似客户的情况进行比较。
不要忽视人工智能在减少客户流失和留住客户方面的潜力。机器学*可以查看客户登录的频率、他们对电子邮件的回复率以及他们致电服务台的频率等指标。然后,它可以估计客户转向竞争对手的可能性,并进行干预,以尽量减少取消订单的数量。
以网飞为例。如果花超过 60 到 90 秒的时间才能找到他们想看的东西,客户很可能会失去兴趣。通过使用个性化和推荐,该公司认为它节省了超过 10 亿美元(7.57 亿英镑)的收入,否则它会失去这些收入。
获得合适的价格
没有自然法则说每个顾客都应该为给定的产品或服务支付相同的价格——事实上,也没有理由说一个顾客每次购买给定的东西都应该支付相同的价格。
优步提供了一个最著名的可变价格的例子:当一个特定地区的需求相对于可用的司机数量而言很高时,乘车的价格就会上涨。
同样的想法也适用于无数其他行业。移动电话运营商正在尝试使用机器学*来预测需求,并衡量一小批消费者的价格敏感度。然后,他们可以利用这些信息来决定需求价格的取舍,以实现收入和盈利能力的最大化。
在 B2B 领域,公司可以使用数据科学来确定具有相似购买模式的客户群,识别相似的交易,并生成有关支付价格的信息。让销售人员掌握这些信息可以帮助他们在不损失业务的情况下谈判出尽可能好的价格。
提高销售效率
销售人员大约三分之二的时间用于日常工作,如与潜在客户联系、安排约会、接受订单和准备合同。公司已经开始将此类活动自动化,让销售人员有时间完成交易、培养关系和管理非同寻常的交易。
一个能够识别最有可能促成销售的线索的公司将比其竞争对手更有优势。公司正在使用人工智能的预测能力来确定最有希望的线索,并根据他们过去的销售历史将这些线索发送给最适合完成这些交易的销售人员。此外,公司正在使用人工智能记录、转录和分析销售电话、演示和会议。观察最成功的销售代表是如何引导对话的,有助于公司指导其他员工提高水平,获得更多交易。
让营销支出更有效
个性化现在是营销的核心。它可以在营销支出上获得巨大的回报。
但有远见的营销人员现在可以走得更远。分析顾客的行为仅仅是开始。现在,企业可以根据客户的行为、偏好和情感来确定营销目标,利用自然语言处理(NLP)技术创建情感智能的个性化内容,这种技术可以在所有营销渠道中大规模部署。全球银行花旗(Citi)聘用了营销语言云公司 Persado,其电子邮件“打开率”增加了 70%,点击率增加了 114%。
(本文原载于《伦敦商学院评论》。)
待关注:每个 CEO 都需要知道的人工智能知识。第二部分:资本回报率
每个 CEO 需要了解的人工智能知识。第二部分:退货
原文:https://towardsdatascience.com/what-every-ceo-needs-to-know-about-ai-part-two-returns-4965712633df?source=collection_archive---------19-----------------------
利用人工智能的力量可以帮助你提高生产力,改善预测和最大限度地提高效率
在推动增长的同时确保健康的资本回报是所有企业领导人面临的一个关键挑战。削减成本为实现这一目标提供了一条显而易见的途径。但营业利润的改善需要聪明且有粘性,才能持续并产生长期增长。人工智能可以提供一系列方法来提高生产率,改善预测,减少停机时间,并堵塞生产,供应链,采购,客户服务和行政管理费用的昂贵漏洞。
服务公司:提高效率
Blue Prism、Automation Anywhere、Pega 和 UiPath 等软件机器人执行日常任务,如访问应用程序、数据输入和计算。它们模仿人类所做的活动,所以遗留的 IT 系统不需要改变。
许多公司已经安装了软件机器人来实现快速节约。但在许多情况下,好处被证明是难以捉摸的。组织是围绕过程而不是任务构建的,而这些过程分布很广:它们是分散的。因此,组织面临着将任务自动化转化为节约的挑战。
那些成功抓住人工智能技术全部潜力的公司已经采取了一种全面的方法,而不是仅仅追求机器人技术。他们重新构想了流程和组织结构,并以集成的方式部署了多种技术,如机器学*和认知应用,以及机器人技术。对于这些公司来说,在流程简化和数字化的同时应用人工智能技术带来了巨大的节约——有时高达 30 %- 70%。如此规模的节约甚至使得将一些活动从离岸地点迁回成为可能。更快的流程改善了客户体验。
看看汽车保险索赔是如何处理的,这有力地说明了应用整套人工智能技术是如何产生影响的:
- 保险公司一直在使用光学字符识别(OCR)将手写索赔转换为机器可读数据。但是 OCR 并不总是准确的。现在,总部位于加州的 Captricity 公司使用其 Shreddr 技术,估计可以达到 99.9%以上的准确率。
- 机器人可以接管手动任务,例如通过验证申请人的身份创建第一份损失通知,搜索保单细节,输入损失损坏和维修估计信息,检查保单覆盖范围,上传照片并将其放入正确的评估队列。
- 计算机视觉可以帮助验证索赔。英国第三大汽车保险公司 Ageas 使用总部位于伦敦的 Tractable 公司的计算机视觉技术来加快维修成本的评估。Tractable 系统存储了数百万个碰撞修复图像和相应的修复估计值。因此 Ageas 可以每分钟检查数千个评估,并向其专家标记不必要的修复。
- 自然语言生成可用于编写叙述性报告,从索赔和维修中识别信息,然后详细说明趋势、解释和潜在的下一步行动。
制造企业:提高生产效率
在过去的二十年里,公司已经采用精益和自动化来减少浪费和提高效率。随着进一步的改进变得越来越难以实现,人工智能已经成为允许他们进入下一个生产力水平的白衣骑士。
- 将从工业机器收集数据的物联网(IoT)的进步与人工智能相结合,使公司能够减少资产停机时间。基于人工智能的算法监控设备层面的声音或热信号,以及维护日志和天气模式等其他数据。如果系统随后发现异常,它可以标记出维护需求,从而减少停机时间。Pitney Bowes 引入了通用电气的 Predix 系统,机器产量增加了 20%,零件更换节省了 15%,技术支持成本降低了 10%。
- 工人的生产率可以通过使用“协作”机器人来提高,这些机器人可以在无法完全自动化的工作中与人类工人一起操作。计算机视觉使机器人能够意识到周围的情况。人类工人只需握住机器人的手臂,引导机器人完成所需的动作,就能给机器人“编程”。仍然需要人,但是他或她的生产力大大提高了。
- 人工智能可以对能源消耗产生重大影响。一个突出的例子是谷歌的 DeepMind,它将谷歌用于冷却其数据中心的能源减少了 40%。算法查看温度、功率和泵速等方面的历史数据,以预测未来的温度,然后决定最大限度减少功耗的最佳设置。铝、水泥和造纸等能源密集型行业也可以采用类似的方法。
- 通过将计算机视觉与机器学*相结合来简化检测,更准确地检测异常并给出一致的结果,可以加快质量控制。有了好产品和有缺陷产品的图像,人工智能系统还可以识别以前未知的缺陷。
让供应链更加敏捷
机器学*和机器人技术已经允许零售、包装消费品和高科技行业的公司将其供应链转变为竞争优势的来源。公司正在使用人工智能来准确预测客户对大量不同商品的需求。然后,他们用灵活高效的供应来补充改进后的预测。他们有自动化的仓库流程,使用机器人进行拣选和包装;并使物资运输和交付能够响应实时信息,如天气预报和交通流量。
德国电子商务商家 Otto 现在可以以 90%的准确率预测未来 30 天内将出售的商品,每年减少五分之一的过剩库存和超过 200 万件商品的退货。算法不仅考虑历史销售,还考虑广告活动、商店开门时间、当地天气和节假日,以预测每个商店对各种产品的需求。
亚马逊使用 Kiva 机器人给站在平台上的工人送包裹。亚马逊将库存能力提高了 50%,运营成本降低了 20%。
以更低的成本增强客户服务
人工智能可以帮助公司满足客户对个性化服务和直接获得他们想要的东西的日益增长的期望。
- 减少传入的失败需求:当某样东西不能满足客户的需求时,他们可能会联系呼叫中心。找出问题所在既有助于避免重复缺点,又能减少对呼叫中心的需求。记录和分析客户来电可以找出投诉的根本原因。电话的精确转录变得越来越可能。谷歌、IBM 和微软的系统现在可以以大约 95%的准确率转录电话对话。使用自然语言处理和文本挖掘,可以对呼叫进行分析,以得出需求趋势和故障模式;然后,可以采取适当的行动。
- 减少打给呼叫中心代理的电话数量:模仿人类说话的在线聊天机器人已经被广泛使用。在银行业,聊天机器人全天候回答简单的查询,并帮助客户完成日常交易,如检查余额和支付。聊天机器人充当看门人,处理简单的任务,然后将他们无法处理的呼叫转移到呼叫中心代理。下一次发展将会看到聊天机器人与机器人配对,可以进行端到端的交易,例如注销被盗的信用卡并发行一张新的信用卡。
- 消除花在身份验证上的时间:呼叫中心平均花 30 到 45 秒来验证客户的身份。这相当于每年 1000 万次通话需要大约 10 万个小时。汇丰银行和花旗银行等银行已经部署了 Nuance 和 Nice 等公司的语音生物识别技术,以消除这种浪费的时间。该系统将呼叫者的声音与存储的声音签名进行比较。面部识别也正在成为一项可行的技术——尤其是在中国。许多中国银行允许用户在网上和自动取款机上仅通过面部识别身份。
- 加快处理呼叫:呼叫中心代理通常会在呼叫过程中和呼叫结束后,花费多达四分之一的时间访问不同的系统来查找和更新数据。简化的机器人桌面控制台允许自动填充或验证数据,可以大大节省代理的时间,使其专注于工作的其他方面。HMRC 推出了一种仪表板,将代理在通话中点击鼠标的次数从 66 次减少到 10 次。结果是:处理一个电话的平均时间减少了 40%。
- 代理人蔻驰:呼叫记录可以帮助呼叫中心代理人学*他们表现最好的同行的运作方式。随着聊天机器人越来越多地涵盖简单的查询,代理将被留下来处理复杂的查询。基于转录的辅导将帮助他们更顺利地过渡。提高产能利用率:呼叫中心可以使用 Random Forest 和脸书的 Prophet 等机器学*模型来准确预测呼叫中心的需求。提前六个月的准确预测将有助于呼叫中心做出更好的招聘和技能组合决策。提前一周的准确预测将有助于呼叫中心更好地安排代理。
削减采购成本
购买的商品和服务通常占产品成本的 60-80%。人工智能可以用信息和洞察力武装采购经理,以确保更好的交易。但许多公司的采购数据是不干净的,没有按照支出类别分类,分散在不同的系统中。然而,Coupa 软件使用机器学*来自动清理和分类信息。它声称已经分析了超过 1.3 万亿美元的支出。企业可以通过自动化订单管理(尤其是针对长尾支出的订单管理)来堵塞不合规和低效率导致的漏洞,从而进一步降低采购成本。典型的泄漏率为 3-4 %,相当于 60 亿英镑支出中的 1 . 8-2 . 4 亿英镑。
减少开销
使用人工智能来重新想象行政流程有着广阔的空间。想象一下,一个系统拍摄一张收据的照片,并使用光学字符识别来读取文本,然后由机器学*来识别金额、日期、货币和费用类型:把它们放在一起,它就可以创建一个费用条目。
吸引和留住人才
随着人力资源部门从传统的服务角色升级到战略业务合作伙伴的职责,他们可以从迈克尔·刘易斯的书《金钱球》中得到启示,获得关于人才的数据驱动的见解。
- 寻找潜在的高绩效者:具有前瞻性思维的人力资源团队正在利用数据科学来识别使某人成为高绩效者的特质,并定义可能在特定角色中表现出色的员工的特征。此外,人工智能可以强调高绩效员工来自哪里,并识别有前途的人才来源。
- 降低招聘成本和时间:早期采用者已经采用算法来加速筛选申请人的简历。算法可以识别最有可能被雇用的最合适的候选人,从而让专家专注于优先考虑的人才库。公司可以使用人工智能自动更新埋在候选人数据库中的数百万份简历,并从网上获取最新的工作历史。客户关系管理公司 Beamery 允许雇主在潜在候选人申请工作之前就与他们接洽。它的算法根据求职者的兴趣向他们提供内容、新闻和信息。该公司声称,其客户的合格候选人数量增加了两倍,招聘成本降低了一半以上。
- 减少流失:员工会在社交媒体上留下求职的痕迹。社交媒体元数据和历史人力资源数据可以帮助公司确定哪些员工最有可能辞职。然后,雇主可以想办法留住表现最好的员工。
(本文原载于《伦敦商学院评论》。)
待关注:每个 CEO 都需要知道的人工智能知识。第二部分:风险
脸书关闭数据经纪人的决定意味着什么
原文:https://towardsdatascience.com/what-facebooks-decision-to-shut-down-data-brokers-means-70a6a3aca8de?source=collection_archive---------9-----------------------
社交媒体可以说是*年来最重要的技术进步之一,帮助人们通过点击按钮与世界各地的亲人沟通。然而,*年来,随着脸书和其他社交媒体加大广告力度,试图将他们的服务货币化,用户已经提出了隐私问题。起初只是一些广告,现在已经变成了脸书和它的广告商全力以赴向你推销服务和产品。
随着社交媒体网站受到《观察家报》、《卫报》和其他媒体的负面报道,更多的争议随之而来,暴露了脸书与第三方数据经纪人的关系。Experian、TransUnion 和 Epsilon 等公司一直在从用户互动中收集信息,既有公开张贴在墙上的,也有私下通过邮件收集的。这些经纪人使用数据定位技术向用户销售产品,而脸书则不为所动,以保持强劲的收入流。然而,社交媒体网站在这样的报道之后改变了主意。
该网站表示,为了增加用户的隐私,它将关闭这些数据经纪人的广告定位方法。此举不会立即发生,但脸书表示将逐步取消这些被称为合作伙伴类别的做法。该公司表示,虽然这是行业惯例,但我们相信,这一步骤将在未来 6 个月内逐步结束,这将有助于改善脸书人们的隐私。许多人认为电视网的决定是积极的,将对整个行业产生深远的影响。
为了确定这些变化将如何影响依赖脸书及其第三方数据的公司,我联系了 Blinker ,这是一款允许人们完全通过智能手机自己购买、出售、融资和再融资汽车的应用程序。“我们已经收集了一个重要的 CRM 列表,因此随着脸书消除第三方数据源,Blinker 将进一步利用其现有的客户数据来创建我们可以锁定的定制受众群体。我们的长相相似的观众一直是表现最好的目标,所以我们预计我们的宣传策略或表现不会有太大变化。”Blinker 的营销副总裁安德鲁·普莱斯在一份书面声明中说。
以下是脸书决定改变其广告做法的后果:
1)增加隐私
自然地,用户会更舒服地使用社交媒体网站与朋友、家人和爱人讨论个人问题。脸书还表示,它将改变隐私设置,以便让用户更容易选择与谁分享他们的个人和专业信息。此举看起来像是一个在不泄露用户信息的情况下保持其用户连接网络的决定,尽管一些人认为该公司出于邪恶的原因将第三方数据经纪人从其网络中移除。
2)获得竞争优势
脸书可能只是对基于其做法而受到的媒体反弹做出反应,但也许该公司只是没有像它希望的那样赚钱。然而,这一决定可能是该公司试图从谷歌等竞争对手那里吸引用户的含蓄尝试,这些竞争对手仍在使用第三方数据经纪人。母公司 Alphabet 一直在使用这些做法,在 YouTube 和搜索引擎等各种数字渠道上向你宣传产品和服务,看起来脸书正在逆势而为。
3)制定行业标准
虽然脸书清理其行为的决定可能是一种公关举措或获得竞争优势的一种方式,但它可能会改变该行业的运作方式。谷歌等公司尚未讨论此事,但脸书的政策变化可能会带来一笔意外之财,即其他公司会清理自己的行为,以保持自己在行业中的高地位。其他社交媒体可能会很快效仿,而搜索引擎等科技领域的其他行业可能会在广告定位方法上变得更加专业化。
4)你仍然会看到广告
我们可能不会再收集你的个人数据和互动信息来向你发送广告,但脸书仍在与公司合作做广告。不同的是,社交媒体网站现在必须使用自己的目标工具,如“定制受众”,其中包括与他们希望销售的用户有事先关系的公司。脸书没有完全消除广告,而是找到了一个中间地带,既能改变公众对信息系统服务的看法,又不损害其底线。
5)政治起了作用
总统大选已经过去一年半了,脸书仍因未能删除网站上的假新闻和错误信息而备受指责。具有明显政治倾向的用户正在接收适用于他们的新闻——无论是真实的还是虚假的——而一些处于政治光谱边缘的人仍在接收错误信息,以这样或那样的方式影响他们。最*在脸书上发现了一个功能,它显示了对一条可能不可靠的新闻的警告,鼓励用户在相信媒体来源告诉他们的东西之前做自己的研究。将第三方广告经纪人从他们的文件夹中删除将允许网站消除发送给用户的错误信息,这些信息可能会影响他们对某个政党或候选人的看法。
底线…
脸书的决定在很多方面都是有意义的,因为它将提升自己的公众形象,让自己比竞争对手更有优势,同时还会向你发送一些广告,以保持收入流。随着时间的推移,用户会有更多的隐私,对在网站上分享数据会感到更舒服,而政治也会更客观,因为网络上的假新闻会更少。从长远来看,我们可能会将脸书的举动视为一个转折点,标志着从过度饱和的广告向更私人的在线体验的转变。
是什么让机器学*项目中的数据科学家感到沮丧?
原文:https://towardsdatascience.com/what-frustrates-data-scientists-in-machine-learning-projects-3398919a7c79?source=collection_archive---------9-----------------------
Photo by Vance Osterhout on Unsplash
如今,人们对数据科学的兴趣激增。一个人只需要插入标语“由人工智能驱动”,任何东西都可以卖出去。
但是,这就是问题的开始。
数据科学的推销通常是异想天开。然后,客户将期望值提高一个档次,启动他们的登月计划。最终,把客户带到月球上,还是把他们留在荒岛上,都要由数据科学家来决定。
早先的一篇文章,数据科学家工作面试失败的 4 种方式研究了候选人在追求数据科学职业生涯时犯的主要错误。现在,我们走进数据科学项目期望的幻想世界,找出客户持有的最大误解。
在这里,我们将讨论我在机器学*项目中看到的 8 个最常见的神话,以及它们为什么会让数据科学家感到烦恼。如果你刚刚进入数据科学,或者已经成为主流,这些都是可能扔向你的潜在手榴弹。因此,知道如何处理它们会很方便。
“所有的模型都是错的,但有些是有用的。”—乔治·博克斯
Photo by Andre Hunter on Unsplash
误区一。“我们想要一个人工智能模型..造一个来解决这个问题”
分析领域的大多数行业问题都可以通过简单的探索性数据分析来解决。如果机器学*对这些来说是多余的,我们甚至不要开始讨论为什么人工智能在这里是无用的。为什么要用大炮打死一只苍蝇?
是的,高级分析很酷。每个企业都喜欢谈论成为行业中部署最新技术的第一人。而哪个厂商不想标榜一个 AI 项目呢?但是,人们需要教育客户,并找出真正保证 ML 军械库重型火炮的用例。对于所有其他需求,通过使用探索性数据分析、统计或其他此类久经考验的技术展示商业价值来说服客户。
“到目前为止,人工智能最大的危险是,人们过早地断定他们理解它。”—埃利泽·尤德科夫斯基
误区二。“拿着这个数据..并带着变革性的见解回来”
通常,客户认为他们的责任到移交数据就结束了。有些甚至停留在问题定义上,但是我们将在第 4 点看到这一点!他们要求分析师获取数据,并带回一套惊天动地的商业见解,这将在一夜之间改变组织。
不幸的是,与创造性写作不同,人们不能孤立地想出可行的商业建议。它要求与业务用户就什么对他们是相关的和可行的进行持续的迭代和富有成效的对话。在整个项目中,定期与业务人员一起计划优质时间。
“如果你不知道如何问正确的问题,你将一无所获。爱德华·戴明
误区三。“构建模型,通过跳过不必要的分析来节省时间”
许多数据科学家忽视了在打开模型工具箱之前进行数据辩论和探索性分析的重要性。因此,当客户要求从关键路径中删除【不必要的分析】以节省宝贵的项目时间时,他们看不到风险。
数据探索和分析是机器学*和所有其他高级技术的强制性先决步骤。没有对数据的感觉,发现异常值或发现潜在模式,模型除了在黑暗中拍摄什么也不做。总是指定时间进行分析,并通过分享有趣的发现来说服客户。
炼金术士在寻找黄金的过程中发现了许多其他更有价值的东西。——亚瑟·叔本华
误区四。“我们有上周的数据,你能预测未来 6 个月吗?”
这是数据科学家最讨厌的事情。客户在电子表格中拼凑几行数据。然后,他们希望人工智能能像水晶球一样凝视未来。有时,当客户承认没有任何数据,然后真正想知道机器学*是否可以填补空白时,这变得非常奇怪。
数据质量和数量是不容讨价还价的。“垃圾进垃圾出”同样适用于分析。当你的数据有限时,统计技术会派上用场,当你的数据更少时,它们会帮助你提取更多的数据。例如,估算缺失点, smote 生成数据或使用更简单的低容量模型。但是这需要降低客户对模型结果和项目成果的期望。
Performance of analytics techniques with data volume: Source Andrew Ng
误区五。"你能在两周内完成建模项目吗?"
在任何业务关键型项目中,结果都是在昨天就可以预期的,即使项目启动是在今天计划的。在匆忙破坏项目时间表的过程中,一个常见的损失就是模型工程阶段。随着模型 API 的免费提供和对 GPU 计算的轻松访问,客户想知道是什么减慢了数据科学家的速度。
尽管 Auto-ML 有所进步,但是在建模过程中有一个不可缺少的手工元素。数据科学家必须检查统计结果、比较模型和检查解释,通常需要经历痛苦的迭代。这是无法自动完成的。至少,现在还没有。最好通过分享示例和说明如果跳过某些步骤可能会遗漏什么来启发客户关于数据科学生命周期的知识。
建模一部分是实验,一部分是艺术,所以里程碑驱动的项目计划可能不会太精确。
误区六。"你能替换结果变量并点击刷新吗?"
在数据科学家解决了业务行为建模的问题后,新的客户请求经常会以增量变化的形式出现。有时,他们会要求替换结果变量,并通过重新运行模型来快速刷新结果。客户没有意识到这种变化不仅仅是移动球门柱,而是将比赛从足球转换到篮球。
虽然机器学*是高度迭代的,但核心挑战是为给定的结果变量挑选正确的影响者,并映射他们的关系。客户必须事先了解这是如何运作的,以及他们可以自由使用的杠杆。他们还必须注意那些需要预先仔细规划的参数,以及如果这些参数的变化超出了定义的里程碑,将会发生什么情况。
神话 7。“我们能有 100%的模型准确率吗?”
人们经常被错误率所困扰。就像盲目追求考试成绩一样,客户希望准确率接* 100%。当准确性成为压倒所有其他因素的唯一焦点时,这变得令人担忧。建立一个复杂到无法实时制作的高度精确的模型有多大用处?
以最高精度赢得百万美元网飞奖的模型从未上线,因为它的极端复杂性意味着沉重的工程成本。而精度较低的型号采用了。始终平衡准确性与简单性、稳定性和业务可解释性。这需要果断的权衡和判断,信任客户。
Model Engineering: Achieving the fine balance and trade-off
误区八。“训练出来的模型能永远保持聪明吗?”
在投入大量精力进行模型构建和测试后,客户想知道机器是否已经学会了它所需要的一切。一个常见的问题是,它能否保持智能,适应业务动态的所有未来变化?
可惜机器不是终身学*的。模型需要不断耐心的教导。他们需要每隔几周或几个月快速复*一次,就像学校里那些努力学*的学生一样。当环境改变时,更是如此。这就是分析行业目前的状况,尽管它在快速发展。所以,现在,为模型维护和病人更新做时间和精力的预算。
结论
我们已经看到了项目中的 8 个主要误解,这些误解也可以分为 ML 建模生命周期的 6 个阶段,如下所示。
Machine learning project lifecycle
几乎所有的上述误解都是由于缺乏意识和项目中的优先级错位造成的。毕竟,每个客户和企业都是在严格的时间表、紧张的预算和不那么完美的数据流下进行团队合作的。数据科学家应该能够与客户产生共鸣,理解这些脱节的真正原因。这将使他们能够教育利益相关者,并提供实例来阐明他们的观点。
数据科学团队应该采取温和刺激和友好权衡的结合。他们应该做出不影响项目最终结果的决定。祝你在下一次机器学*项目中处理这些常见问题时好运!
这里还有没有列出其他的误解?请在下面留下您的评论,继续对话。
如果你觉得这很有趣,你可能想看看我写的其他相关文章:
- 让你在数据科学生涯中不可或缺的 4 种超能力
- 数据科学家面试失败的 4 种方式
对数据科学充满热情?随时在LinkedIn上加我,订阅我的 简讯 。
在数据科学领域找一份工作会是什么样子
原文:https://towardsdatascience.com/what-getting-a-job-in-data-science-might-look-like-f94ddb788a5e?source=collection_archive---------0-----------------------
备选标题:我的人生故事:)
我读过一些文章,这些文章阐述了进入分析和数据科学领域有多难。这不是我的经历,所以我想分享一下。我们将看看面试,我目前使用的工具,我在学校没有准备好的行业,以及我的职业轨迹是什么样子的。但不是按那个特定的顺序。
在我们开始之前,快速回顾一下我的教育可能是有意义的!
2004 年——获得了麻省理工学院达特茅斯分校的数学学士学位
- 我的专业平均成绩为 3.8 分
- 在那里学了 FORTRAN(不擅长)
- 没有实*
- 我热爱数学,热爱我在学校的时光
老实说,2004-2007 年没什么值得注意的。我在“寻找自我”,或者别的什么。
2007 年——开始在 WPI 兼职统计学硕士,同时为考德威尔银行家房地产经纪公司工作。
- “房地产泡沫”破裂(大衰退的开始),与此同时,我很幸运地获得了 WPI 的助教职位。
- 搬到伍斯特,完成了我的全日制硕士学位(2010 年毕业)
- 在课堂上使用 SAS & R
- 仍然没有实*机会(经济不景气,我还没有学会很多找工作、建立关系网的知识,也没有利用职业中心)
- 我想在社区大学教书,但是两位教授问我是否有兴趣去当地的公用事业公司面试(而那家公司刚好离我父母家 3 英里)。
我在那家公司面试并接受了那份工作。
我毕业后的第一份行业工作是 NSTAR(现在是 Eversource),我是一名预测分析师,使用计量经济学时间序列分析来预测天然气和电力负荷(阅读——我们需要多少天然气和电力来服务客户)。
我每天都在构建 ARIMA 模型,使用各种统计测试来测试数据中的结构突变,单位根测试来测试平稳性,我写了一个证明来解释为什么我选择的值大于 1 的 t-stats(即使 p 值可能是 0.2)有利于模型的预测。
我建立了很酷的神经网络来预测每小时的电力负荷。这种方法很有意义,因为电力负荷和天气之间存在非线性关系。模型结果非常好,并被用来决定如何在预计需要高负载的日子里满足容量。
这是我第一次了解到,一旦你完成了一个人们关心的项目,你很可能会写一套解释问题和结果的材料..然后你去“巡回演出”。也就是说,我制作了 PowerPoint 幻灯片,并向其他团队展示了我的作品。我的第一个幻灯片不是很好。我花了多年的经验才达到这样一个地步,现在我认为我的套牌在视觉上很吸引人,适合我演讲的观众(有正确的信息“水平”),而且引人入胜。
在 NSTAR 我也用了一点 SAS。这是以重新运行他人先前编写的代码的形式。它有时也涉及到稍微修改别人写的代码,我肯定不会认为这是一项密集的工作。更像是“SAS 按键”。
我每天构建的模型都是在“点击”软件中构建的。
到目前为止,NSTAR 是我最“统计”的工作,但是时间序列只是统计世界中的一小部分。我想拓展我的视野,并了解到在分析领域有大量的机会…
我其余职位的快速概述:
silver link communication s 分析顾问
- 提供市场研究、细分、研究海报和宣传活动,旨在支持管理式医疗机构(mco)、药房福利经理(pbm)和疾病管理(DM)客户。
vista print 分析经理
- Vistaprint 在网上销售名片和其他营销产品。他们的主要客户群是小企业。
- 管理一个分析师团队来优化 Vistaprint 网站。
- 担任过许多其他角色,并在分析领域从事大量不同的项目
资深数据科学家,常接触
- Contant Contact 提供电子邮件营销解决方案。也是电子商务,也针对小企业。
两个月来我一直保持联系。我的第一个目标是:
- 检查已经存在的模型的有效性
- 改进他们目前的测试方式。然后自动化!
- 试图在客户群中识别季节性客户。
- 学*很多新东西!
关于标题的说明:
标题很棘手。一个头衔可能听起来很时髦,报酬也不高,有时一个较低的头衔可能会比你预期的报酬更高!
随着将数据用于商业目的变得越来越流行,人们对某个职位通常包含哪些角色、职责和技能更加困惑。探索你所有的选择!你可以在许多不同的网站上查看职位的平均工资。
- www.glassdoor.com
- www.payscale.com
我使用的工具(从最基础的开始):
我去过的地方都用过 Excel。做以下事情的能力:
- 数据透视表
- 垂直查找
- 使用“记录”按钮编写一个简单的宏来自动执行一些数据操作
- 这些类型的东西可以让你看起来像一个其他领域的商业奇才。(没说是对的,只是说事情就是这样)
- 在我的职业生涯中,我一直使用这些东西。
随着数据变得越来越大,公司开始走向 Tableau。我自己对它还不熟悉,但它让我不用看着一份 Excel 文档花很长时间保存。我认为等待大型 Excel 文件的日子已经成为过去。
- 对于 Excel 来说,数据很快变得太大,我发现任何高于 400k 行(多列)的数据都变得很难操作。
- 漂亮的可视化,可以是交互式的,快速的,点击式的。
Screenshot of Analysis in Tableau
- Tableau 还可以直接从 SQL(一个. csv 和一堆其他格式)中获取数据。
SQL 中数据科学工作的真正核心。我认为没有人会反驳这一点。
在学校,大部分数据都以一种很好的形式给了我,我所要做的就是分析和建模。在工业中,在 100 或 1000 个不同的表中有数百万行。需要使用相关标准从相关表格中收集这些数据。大多数时候,您将操作 SQL 中的数据,使其变成您非常熟悉的漂亮/可用的形式。这是一个时间密集型的过程,你会开始意识到,在你用 R 或 Python 写一行代码之前,你工作的很大一部分就是决定你需要什么数据,找到数据,转换数据使之适合建模。
我在工业界的前 3 份工作都涉及到 SQL,而我只做过 4 份工作。
你可以直接从 SQL 中提取数据到 Excel 或 R 或 Python 或 Tableau 中,这个列表还在继续..
SQL 有许多不同的“风格”。如果你知道一个,你可以学*其他任何一个。过去,我曾被列出 AP 或其他变体的招聘信息吓到。语法上可能会有细微的差别,但它们实际上只是要求你了解 SQL。不要被吓倒!
下面是一个简单查询的例子。我选择了一些 id、月份、年份,以及基于“where”语句中给定标准的变量“sends”的计数。该查询还显示了一对表连接,用“join”表示,然后我给出了连接的条件。
SQL has been invaluable in my career. Couldn’t live without it
一旦您理解了 SQL,转向大数据就不那么困难了。使用 Hive(在工作描述中看起来也很吓人),很像 SQL(加上一些您可能需要处理的嵌套数据),您可以从 Hadoop 中查询数据。
我使用命令行来访问 Hive,但是很好的 ui 已经出来了。如果你仔细看,你会看到我的查询只是“从联系人限制 1 中选择 account _ id,只说“给我一个联系人表中的 account_id”,它看起来就像 SQL。
At the time of this screenshot, I had just kicked off this query. Because there is so much data. It may take over a minute to get me 1 account id from this table
当我获得统计学硕士学位时,每个人都在使用 r。甚至一些统计学家现在也在转向 Python。以前,我所有的建模都是在 R 中进行的,但是我自己正在测试 Python waters!
我在 Coursera 自学了 Python,目前正在我的新工作中使用。这就是互联网的美妙之处。想学一个新工具?去学吧,资料唾手可得。
下面是我在 JupyterLab 中的 Python 代码的一个例子。这是全新的,而且我的截图并没有做到这一点。你可以在这里阅读更多关于木星实验室的信息:木星实验室
This is what JupyterLab looks like. Although I don’t have any pretty charts here (sorry), I’m just working on a little Quality Control problem.
一个的小纸条。我把我上过的课程放在 LinkedIn 的“成就”下面。这是个不错的主意。
关于工业我不知道的事情:
你可能会有一些旅行的机会——目的地的乐趣会有所不同
- 我去过拉斯维加斯、奥兰多、巴塞罗那、温莎安大略、新泽西州和马里兰州工作。
通常会有个人发展预算
- 一本你想读的相关的书?你可能会花掉它。
- Coursera 上有相关的课程吗?你可能会花掉它。
- 他们有时会送你去参加会议
——我在 3 月 21 日参加了 Jupyter 弹出窗口,我将参加 5 月份的开放数据科学大会。 - 不要羞于问你的老板是否有预算。对大多数人来说,看起来你很关心自己的事业,并对其进行了投资!
裁员是一件事。我最*才了解到这个第一手资料。我的经历很棒。
Vistaprint 决定裁员 2000 万美元(182 人)。
- 我得到了一份相当丰厚的遣散费。
- 小费!可以同时领取失业和遣散费!
这是我多年来第一次有机会真正思考文化和方向,并真正思考我的下一步行动。
Vistaprint 支付了一个职业蔻驰帮助我:
- 简历(他们更新了我的内容和格式)。
- 求职信提示(描述如下)
- 建立工作关系网
- 采访
- 谈判!
我从来没有见过这种风格的求职信,但它有惊人的回复率!
I literally took the requirements from the job and pasted them on the left. Then took my qualifications from my resume and posted them on the right. Took less than 15 minutes for each cover letter.
采访
我从教练那里学到的最大收获和我自己面试数据科学家职位的经历是…
以星形格式练*回答问题。
https://www.vawizard.org/wiz-pdf/STAR_Method_Interviews.pdf
在一个电话屏幕上(和克罗诺斯在一起),我被问到所有我已经准备好的问题:
- 告诉我你向非技术观众解释技术结果的一次经历?
- 告诉我你改进流程的一次经历?
- 告诉我一个与难相处的利益相关者一起工作的例子,以及它是如何解决的?
连续两天,和不同的公司(其中一家是 Spotify),我被要求回答 FizzBuzz。
- 做好准备应对初级编码问题或 SQL 问题,这是工作描述中要求的技能之一。
- http://rprogramming.net/fizz-buzz-interview-test-in-r/
准备以面试你的人(可能没什么背景)能够理解的方式谈论你的一个项目。高水平,注重结果。说真的,在你开始谈论这个项目之前,先描述一下目标是什么,很容易一头扎进某样东西,却意识不到对方根本不知道你在说什么。
我真的可以一直谈论上面列出的话题,但我想简要概述一下我的一些不同经历。也许我稍后需要详细说明。
谢谢你看了我的经历。我希望你在进入数据科学领域的道路上取得巨大成功。当你到了那里,我希望你会觉得很充实。我知道。
访问我的网站!这里
报名接收我的新文章:这里
Tensorflow Dev Summit 2017 上发生了什么-第 1/3 部分:社区和应用
原文:https://towardsdatascience.com/what-happened-at-the-tensorflow-dev-summit-2017-part-1-3-community-applications-77fb5ce03c52?source=collection_archive---------0-----------------------
TL;速度三角形定位法(dead reckoning)
2017 年 2 月 15 日,人工神经网络软件框架 tensor flow1.0 版本在加州山景城的谷歌 TensorFlow Dev 峰会上发布。
活动期间,在项目的四个不同领域进行了演示和公告:社区、应用、部署策略、工具和技术。这次活动是现场直播的,所有的视频都可以在网上看到。
通过这一系列的帖子,我将重点介绍最有趣的部分,并就活动期间涉及的主题给出实用的建议。
社区
传奇人物杰夫·迪恩给我们讲述了这个项目的故事,拉开了峰会的序幕。Tensorflow 并不是谷歌大脑团队创建通用机器学*框架的第一次尝试。之前关闭的源代码项目被称为 DistBelief 。
Tensorflow 于 2015 年 11 月开源,从其公开发布开始,谷歌内部和社区的采用情况令人印象深刻。
在一年多一点的时间里,开源 Github 库成为了“机器学*”类别中的第一名,拥有超过 44,000 颗星,500 名程序员开发并提交了他们的软件,每月提交数千份,5500 个名为 Tensorflow 的独立库现在出现在 Github 上。各大高校已经开始使用 TensorFlow 教授机器学*。
许多公司也支持这个项目。IBM、 Movidius 和高通正与谷歌合作,全力支持 Tensorflow 平台的硬件加速。来自高通的 Travis Lanier 展示了 tensorflow 的 InceptionV3 模型在Hexagon DSP上运行时的 8 倍性能(114.495 毫秒对 1968.753 毫秒或其他指标 8.7 帧每秒对 0.5 帧每秒),同样在对移动设备至关重要的功效方面。
Jeff Dean 说 Tensorflow 是为每个人准备的,我们鼓励每个人使用它,并把他们的想法变成现实。
有趣的是,围绕这个项目的社区发展得如此之快。峰会会场挤满了来自不同公司、城市和背景的与会者。该活动是现场直播的,世界各地的许多 Tensorflow 社区,如纽约、马德里、阿姆斯特丹、开罗、吉隆坡和其他各种城市,组织了当地聚会来现场观看该活动。
但是为什么这么感兴趣呢?用 Tensorflow 可以做什么?做了什么?
应用程序
峰会期间有许多应用程序,如著名的日本黄瓜分类农场,其中通过形状选择黄瓜的过程由所有者手动执行,直到他们的儿子使用 Tensorflow、相机和树莓皮创建了一个自动分类器。
检测黄瓜的形状听起来很有趣,也很实用,但是我们还能检测什么呢?
Lily Peng 医学博士、博士兼谷歌研究院产品经理研究并开发了一种检测糖尿病视网膜病变的工具。这种疾病是世界上导致失明的主要原因之一。如果及时发现,它是可以治疗的,但在世界上的一些地方,如印度,缺乏眼科医生,45%的患者在能够接受诊断之前就遭受视力下降。
该网络在由 54 名眼科医生标记的 130,000 幅图像上进行训练,生成 880,000 幅标记图像的数据集。
她强调,工作的重点不再是机器学*部分,他们在预先训练的数据集上使用重新训练的、众所周知的架构,并将工作更多地转移到理解问题、获取数据和构建工具来优化这一过程。
Nature cover and article
使用 Tensorflow, Brett Kuprel 展示了他如何训练一个神经网络来检测皮肤癌,其表现优于一般的皮肤医生。发表在《自然》上的研究登上了封面。使用 Inception V3 模型训练神经网络,在 129K 个图像的数据集上进行迁移学*,其中约 2K 个图像是疾病(707 个癌,225 个黑色素瘤+ 1010 个黑色素瘤皮肤镜检查)。
How 20 Doctors classified around 100 images
一个有趣的方面是算法性能与所选皮肤科医生的比较。首先,这 20 名医生只分类了大约 100 张图像,(正如 Brett 评论的那样,他们有比分类成千上万张图像更好的事情要做),其次,与机器(蓝线)相比,他们的性能是可变的(图中的红点)。
这项皮肤癌研究并不是第一次获得《自然》杂志的封面,谷歌 Deepmind 的另外两项技术过去也获得过。
Nature front page of deep learning algorithms
第一期和第二期《自然》封面由谷歌的 Deepmind 获得。第一场展示了 DQN,第二场展示了 AlphaGo,这是一个神经网络,能够击败人类世界冠军之一。
Deepmind 的研究工程师 Daniel Visertin 表示,Tensorflow 是实现的关键,因为训练这种神经网络的过程非常复杂。Deepmind 于 2016 年 4 月宣布全面采用 tensor flow。
AlphaGo 使用强化学*的理论来决定在特定状态下可能的行动中的最佳移动。这一决策过程也可以应用于其他场景,如通过调节冷却系统来优化数据中心的能源消耗。
Cooling System of Google’s Datacenter
建模是在模拟器中离线完成的,以确保算法不会开始尝试随机的事情,并可能摧毁数十亿美元的数据中心。该模型不仅使用可用的数据,而且还进行一些探索性分析,以便可以从人类操作员的基线进行改进。探索性分析对于找到更好的策略是很重要的(否则只会有操作人员已经在做的事情)。
Graph of the energy effectiveness after activating the model.
在初步研究和实施之后,该系统被打开,显示出电力使用效率 (PUE)的明显下降,导致数据中心的账单减少了 40%。
保持时间序列的主题,Deepmind 的另一大成就是创造了 Wavenet 。这种神经网络可以以前所未有的精确度将文本转换成语音和音乐。这个网络改变了以前在文本到语音合成中使用的范例,从使用预先录制的语音片段的连接/参数方法到直接产生声波的。使用【MOS】(MOS 是主观声音质量测试的标准衡量标准),结果清楚地显示了性能的提高。
这个神经网络也能够生成完整的音乐波形!这些只是 Deepmind 团队在 2016 年取得的众多成果中的几个精选例子。
音乐和艺术生成的主题非常有趣,Tensorflow 有一个完整的项目致力于让所有艺术家都可以使用这项技术:Magenta 项目。
Magenta 是由谷歌大脑的研究科学家道格拉斯·埃克创造的,他回答了一个问题:深度学*和深度强化学*能否产生像音乐和艺术一样引人注目的媒体?
The Art exhibition by Mike Tyka that was installed at the event is an example of generative art.
谷歌大脑团队还通过他们的学*艺术风格的表现例子,设法改进了艺术风格的原始神经算法。虽然第一项工作发现了如何教会单个神经网络如何将风格从单个绘画转移到单个图片,但这项工作能够训练一个新的神经网络,它能够学*并同时应用一组不同的风格。
Tensorflow 对计算机视觉的另一个创造性应用是图像修复,卷积神经网络被训练生成任意图像区域的内容。图像的一部分被移除,并且神经网络能够从可用的环境中重建缺失的部分。
这种输入的概念也可以应用于音乐,给定一组乐曲的音轨,神经网络可以以与歌曲其余部分合拍的方式填充空白部分。
Example of counterpoint generation from music context
神经网络可以诊断皮肤癌,可以玩游戏,可以管理数据中心,可以说话,甚至可以播放音乐。那为什么不自己编程呢?我们当然有这方面的神经网络!
学*用梯度下降法学*用梯度下降法学*和用强化学*的神经架构搜索是神经网络自身产生和改进神经网络的两个例子。
这里的想法是使用 AlphaGo 中相同的决策原则,但不是进行游戏移动,而是网络试图决定在定义神经网络的操作序列中使用什么数学函数。
神经架构搜索神经网络生成了一个名为 NASCell 的新细胞,它优于之前所有人类生成的细胞,以至于已经可以在 Tensorflow 中使用。神经网络的这种特殊应用真正引起了我的兴趣和兴奋,因为每次神经网络优化技术有所改进所有的神经网络都会立即改进,创建那些指数反馈循环,最终导致更接*“真正”人工智能预期的系统。
第一部分的结论
这是第一部分的结尾。我们讨论了 Tensorflow 项目的两个方面:社区和应用。在第 2 部分中,我将介绍工具和技术,在第 3 部分中,我将回顾部署策略。
这篇文章故意写得有点高,非专业读者也可以阅读。在接下来的文章中,我将更多地讨论框架的内部结构以及如何使用这些工具,看到更多的代码片段,可能还会展示一些操作视频。
如果你喜欢这篇文章,你想知道下一部分什么时候出来,请在 medium 和 twitter 上关注我,不要忘记分享这篇文章:)
保持饥饿,保持愚蠢,保持关注
关于数据科学,什么样的纸牌屋是正确的(和错误的)
原文:https://towardsdatascience.com/what-house-of-cards-got-right-and-wrong-about-data-science-41218f69c7f5?source=collection_archive---------2-----------------------
鉴于最*发布的两部 《纸牌屋》第五季预告片和即将发布的值得狂欢的《T4》网飞系列第五季,这是做两件事的绝佳机会:
- 观看(或重新观看!)立即串联。
- 回顾一下《纸牌屋》第四季如何使用数据科学家,以及他的工作如何很好地反映了现实世界的数据科学。
剧透预告: 本帖包括《纸牌屋》第四季之前的剧透。如果你还没有看完第四季,我建议就此打住。
快速回顾:
在第三季和第四季中,弗朗西斯·安德伍德(凯文·史派西饰)是美国总统。他和妻子克莱尔·安德伍德(罗宾·怀特饰)分别以总统和副总统的身份竞选 2016 年总统大选。他们聘请琳恩·哈维(内芙·坎贝尔饰)担任竞选经理,负责监督和管理他们的总统竞选活动。她聘请艾丹·麦卡伦(达米安·杨饰)担任竞选活动的数据科学家,他的工作是收集选民的数据和信息,以便做出更好的竞选决策。
你可以在这里 找到第 1-4 季 更详细的总结。
小组讨论
总统的幕僚长道格·斯坦普(Doug Stamper)认为,安德伍德总统选择他的妻子作为竞选伙伴将会是竞选的一场灾难。即将成为竞选经理的 Leann Harvey 反对他使用焦点小组作为证据:
丽安:你做了一些民意调查,那又怎么样?
道格:焦点小组也是。
丽安:毫无意义。
《纸牌屋》做对了什么:焦点小组通常由 30 人组成,他们坐在一个房间里,被问及对一个人、一个想法或刚刚看完的一个广告的感受。Leann 是正确的,焦点小组并不能很好地反映人们会如何投票;如果我们对 30 名随机投票者进行投票,该投票的误差率将高达 18% 。(相比之下,美国大多数总统民调的误差率在 4%左右。)18%的误差率意味着你的选举预测将非常不精确。例如,一项民意调查显示 60%的人会投票给克林顿,误差率为 18%,这意味着美国人投票给克林顿的“真实比例”估计在 42%到 78%之间!用一个焦点小组作为证据来证明为什么克莱尔会成为一个好的或坏的副总统候选人,嗯,有点傻,不是一个好主意。
此外,焦点小组包括参与者之间的讨论。在这些讨论中,人们经常改变他们的想法或说出一个在群体中似乎受欢迎的观点,即使他们实际上并没有这样的感觉。心理学家 Solomon Asch 对这个想法进行了一项臭名昭著的研究。如果你以前在美国投过票,你就会知道你是独自去投票站,在没有其他人压力的情况下做出决定的。这表明焦点小组没有提供选举结果的准确估计——因为他们没有反映我们实际投票的情况!
《纸牌屋》出了什么问题:正如 Leann 所说,尽管焦点小组对选举结果既不提供准确的估计,也不提供精确的估计,但这并不意味着它们完全没有意义。焦点小组通常用于定性研究:例如,人们如何感知信息或人们如何对他人的意见做出反应。听取焦点小组成员对他们刚刚观看的广告的反应,可以洞察例如一个家庭或一群朋友如果在家观看广告可能会有什么反应。理解参与者反应的言辞和想法对营销人员或政治家来说是非常宝贵的。
Ken Bone, American hero and global meme.
监督学*
背景:数据科学家 Aidan Macallan 和活动经理 Leann Harvey 在一家爵士乐俱乐部会面,背景音乐是表演者的演奏。Leann 想知道安德伍德夫妇需要做些什么才能赢得更多的选票,但 Aidan 还没有找到任何答案。
Leann:“我们给了你权限——我需要的比我们得到的更多。你应该告诉我人们想要什么。”
艾丹:“直到第一次听到爵士乐,人们才知道他们想要爵士乐。我可以让他们喜欢这音乐——我不会作曲。给我一些我可以用的东西。”
Claire Underwood discovering “beyond” in South Dakota.
正如 Aidan 和 Leann 讨论的那样,Aidan 没有能力为 Underwoods 在竞选中说些什么……但是一旦 Frank 和 Claire 说了一些能引起选民共鸣的话,Aidan 就能抓住选民的情绪,鼓励 Underwoods 一遍又一遍地说。艾登发现克莱尔在南达科他州的一次演讲中使用了“超越”这个词,开始让选民转向安德伍德一家。然后他们尽可能频繁地使用“超越”这个词——交谈
纸牌屋做对了什么:数据科学不是魔法。在现实世界中,如果我们想测试一个政治广告是否会使选民转向一个方向,首先必须有人制作这个广告, ,然后 ,我们可以运行一个实验来测试它。这不仅限于政治。实验(在非学术环境中通常称为 A/B 测试)在许多领域都很常见,包括临床试验、网站布局以及电子邮件营销活动。
在没有观察到选民更有可能投票给你的任何情况下,预测会导致选民投票给你的情况是可以理解的困难。艾丹的观点是,他无法预测选民会开始改变主意的情况,但一旦他观察到选民改变主意,他就能确定为什么会发生这种情况。(在数据科学中,我们使用术语监督学*来指代类似这样的情况,我们已经观察到一些输出,如增加的投票者认可。)
虽然“超越”这个词对于选民“想听的”来说可能是一个奇怪的选择,但 2016 年美国总统大选中有许多词可能有助于打动选民。想想唐纳德·特朗普给那些反对他的人起的绰号:
- 说谎的泰德(克鲁兹)
- 小马可(卢比奥)
- 高飞·伊丽莎白·沃伦
- 弯曲的希拉里(克林顿)
- 低能杰布(布什)
知道哪些词语会对选民产生影响对竞选公职的人来说是无价的。
什么纸牌屋出了问题:数据科学家可以在这个问题上取得进展,而不需要一个特别好的广告或短语。想想超级碗广告中的常见主题——狗、情感诉求和政治主题似乎是谈论最多的广告主题。数据科学家可以使用像回归这样的机器学*技术来查看什么产生了最多的流量,即使他们还不能检测出什么会导致选民以特定的方式投票。类似地,数据科学家可以观察现有的政治广告,试图区分什么是“好”广告,什么是“坏”广告。
使聚集
背景:数据科学家艾丹·麦卡伦(Aidan Macallan)正在推销他的分析公司,以赢得一份美国国家安全局的合同,该合同监控所有美国人的手机,以识别和跟踪潜在的恐怖分子。(然而,安德伍德夫妇希望利用这些数据来确保他们赢得选举。)
What data scientists do when their code is running.
艾丹:以枪支为例。如果我们从每个合法拥有枪支的人开始,通过他们的手机追踪地理定位模式,我们就开始描绘出枪支拥有者的生活、饮食、购物等一切。由此,我们预测了每个可能想要枪支但没有登记的人。他们可能会表现出和正常人一样的行为。你可以用它来帮助那些对阿拉伯语感兴趣的人,那些想去中东旅行的人,那些对美国政府失望的人。
《纸牌屋》做对了什么:数据科学家确实可以使用技术来找到符合某一类别的个人。在缺乏“拥有枪支”和“绝对不想拥有枪支”这两个类别的实际数据的情况下,数据科学家可能会使用聚类分析来识别不同的选民群体,了解枪支所有者倾向于在哪里生活、吃饭和购物,然后开始关注那些在相同地方生活、吃饭和购物但没有枪支的人。聚类分析包括查看数据,并通过观察看起来彼此“接*”的观察结果或个人来识别组。一个经常被引用的聚类分析的真实例子是,Target 的统计学家在一个女孩的父亲知道她怀孕之前就知道她怀孕了,因为她的购物*惯与其他孕妇相匹配(理解为“接*”)。
什么纸牌屋出了问题:某人把手机放在哪里——也就是艾丹提到的地理定位模式——并不是数据科学家进行预测的唯一方法。事实上,目标怀孕预测模型是基于购物*惯。数据科学家将经常使用购买历史和人口统计信息等变量来组织消费者、投票者,甚至基于他们的“相似”程度来组织字体。一个很酷的例子是Ideo设计的这个字体地图,它依靠人工智能来直观地布局不同字体有多相似。
Credit to Joseph Nelson for putting this GIF (pronounced “jif”) together.
结论
总而言之,《纸牌屋》在展现最佳数据科学实践方面做得很好。该节目的编剧没有将数据科学视为解决故事的杀手锏。老实说,“纸牌屋出了什么错”主要是为了更完整地描述数据科学是如何运作的,而不是展示者的错误陈述。对于一个组织来说,这并不奇怪,因为它不仅雇佣了数据科学家,还举办了一场挑战,利用数据科学来改进推荐算法。
我的意思是,即使是克莱尔·安德伍德也知道价值观是怎么回事。
Ba-dum-tiss.
感谢约瑟夫·尼尔森、劳拉·李波芙和丽贝卡·路易的编辑,这篇文章有了很大的改进!
我从 Udacity 自动驾驶汽车纳米学位项目第一学期学到的东西。
原文:https://towardsdatascience.com/what-i-have-learned-from-the-first-term-of-udacity-self-driving-car-nanodegree-program-7d36b011f300?source=collection_archive---------0-----------------------
我叫哈迪·阿布·斯内赫,来自约旦安曼。我曾在德国约旦大学学*机电一体化工程。我决定接受挑战,参加 Udacity 自动驾驶汽车项目。在德国生活了一年半之后,促使我寻找替代方案,并思考解决我们在约旦遇到的事故和驾驶心态的方法。在这篇文章中,我将简要说明我的项目是关于什么的,以及我在第一学期学到了什么。
注意:所有代码都是用 Python 编程语言编写的,使用了一些有用的库,如 OpenCV。
项目 1:寻找道路上的车道线:
第一个项目是机器视觉和基本图像处理方法的基本介绍。这个项目的目的是使用基本算法检测视频中的车道线。这个项目的目标是提供对图像处理和计算机视觉中使用的重要算法和方法的良好理解,例如:
- Canny 边缘检测:这是一种用于检测图像边缘的算法。有关此方法的更多信息,请点击 此处 。
- 区域屏蔽:该函数用于拟合多项式,屏蔽图像中不需要的部分,以便只显示感兴趣的区域(ROI)。例如:
Unmasked image on the left vs. the ROI image on the right
3.霍夫空间(Hough space ):通常,在图像空间中绘制图像,将图像上的每个点表示为 X 对 1962 年,Paul hough 发现了一种表示图像的新方法。新的空间被称为霍夫空间,其以笛卡尔形式用 m 对 b 或者以极坐标形式用 r 对θ来表示每个图像。图像空间中的一条线由 Y=mX+b 表示。这意味着图像空间中的每一条线由一个点表示。这种变换有助于找到图像中线条之间的关系。为了成功地执行霍夫变换并检测正确的线,需要注意不同的参数。有关此转换的更多信息,请点击 此处 并检查 OpenCV 中的函数,请点击 此处 。
4.在实现代码之前,需要将图像转换为灰度图像,而不是红绿蓝(RGB)色彩空间。高斯模糊也用于模糊图像并去除图像中存在的一些噪声。
在使用霍夫变换找到霍夫线之后,基于它们的斜率和位置过滤这些线,以确保检测到的线仅仅是车道线。您可以在管道中的 draw_lines 函数中看到这一点。
第一个项目的代码可以在我的 Github 库这里看到。
这是第一个项目的最终结果:
Lane line detection video.
项目 2:交通标志识别分类器:
第二个项目侧重于不同的原则,即神经网络(NN)。我会试着在这里简单地解释一下,但是我也会提供一些有用的链接给你查看。
首先,深度学*使用算法和多层来提取特征、学*和预测结果。神经网络是一种深度学*方法,用于教会计算机预测特定的结果。
神经网络由不同平行层组成。每层由一个或多个节点组成。一个节点包含一个特定的数学运算。神经网络的输入称为特征。它们代表从比如说一幅图像中提取的选定信息。例如:图像的像素值。输出是图像的结果,称为标签。例如:指定图像中的物体是什么(狗、猫等)。像素值进入节点,并乘以随机权重,以创建表示图像像素之间关系的数学方程。这些特征进入不同的节点,从而产生不同的方程和不同的关系。
This is an example of a simple Neural Network.
节点还包含激活功能,以确定是否触发网络中的下一个节点,例如:如果结果> 0,则激活下一个节点,如果< 0,例如-0.5,则将其设为 0,不激活下一个节点。
开始时,网络将完成一次转发。结果不会非常准确,因为等式的权重是随机的,这意味着我们可能最终会放大不太重要的特征,并减少更重要的特征(在等式中,w=2 会使特征加倍,而 w=0.5 会将其减半)。因此,计算误差或均方误差将显示预测结果与实际结果的差距。为了获得更小的误差,我们需要更新权重,以获得最小的误差。换句话说,我们的目标是通过在下面的图像中更深入来降低梯度,直到梯度几乎为零。这是梯度下降。
Example of the gradient descent to reduce error. The goal is to reach the bottom (Gradient of almost Zero).
为了更新权重,有一个称为反向传播的过程。它使用在网络末端获得的误差,并且主要使用链规则来寻找每个节点处的误差和梯度。因此,网络向前,找到误差,然后向后更新权重,并一直这样做,直到达到最小均方误差。
在更高级的网络中,任何预测的结果都将是多个标签。每个都有正确结果的概率和误差。因此,在其他标签中,最大的概率和最小的误差应该是正确的猜测。有不同的程序和算法用于提高神经网络的效率和准确性,例如 softmax 函数,它将网络的输出转换成概率。
因此,由标签矩阵 Y 表示的 NN 的标签是等式 Y=Xw+b 的结果,其中 b 是偏差,X 是特征矩阵,w 是整个网络的权重矩阵。在训练过程中,X 中的每一行代表图像像素。要训练网络,必须有一个具有已知标签的大型数据集,以便您可以向网络输入 x。首先,权重将是随机的,当计算与已知 Y 相比的误差时,权重会更新等等。在训练网络之后,通过向网络提供新的图像(X)并使用网络应该能够成功预测结果的更新的权重(标记 Y)来测试网络。完成该操作后,计算精度。
因为数据集非常大,所以矩阵 X 会非常大。这意味着使用普通计算机 CPU 训练网络将花费大量时间,而使用 GPU 要快得多。
训练网络的目标是泛化。我们需要创建一个足够通用的网络来预测任何新的观察结果并给出正确的结果。需要避免的一个重要情况是过度拟合。你可以认为过度拟合是一个网络,它在与训练过的网络相似的观察(图像)中表现得非常好。但是一旦给出一个新的稍微不同的图像,结果就变得不对了。因此,该网络不能推广到成功预测不同的给定。这也意味着训练误差很低,而测试误差很高。应该防止这种情况,这种情况在许多情况下都会发生,例如增加历元数。在神经网络的训练中,历元是向前一遍和向后一遍。另一个原因是通过使用与训练数据相同的数据来测试网络。
A plot shows how overfitting affects the test results.
神经网络有许多参数可以调整以达到最佳精度。例如:改变历元数或学*率。学*率是在每个时期更新权重的速率。
关于神经网络 NNs 或者甚至非常相似的卷积神经网络 CNN 的进一步信息,我推荐这些链接:
-
用于视觉识别的卷积神经网络
-
CS231N —卷积神经网络
不同的公司和组织创建了 CNN 架构,将节点组合在一起,以产生最佳效果。我使用 LeNet 架构实现了我的项目,这是一个非常简单的 CNN,可以提供合理的准确性。
该项目是关于创建一个交通标志分类器,它能够识别汽车前置摄像头检测到的不同交通标志,并区分它们。正如你从下图中看到的,分类器能够对我从互联网上随机选择的交通标志图像进行分类。
Result of the traffic sign classifier in predicting traffic sign images.
要查看我的项目报告,其中我解释了所有实施的步骤和结果,请按 此处 。并点击 此处 查看我的项目管道。
项目 3:行为克隆:
这个项目的目标是建立一个能够克隆汽车行为的 CNN。通过模拟器,汽车在轨道上行驶。汽车的前窗装有摄像头。摄像机的转向角度和图像可以在任何位置记录并保存。分类器将图像作为特征,将转向角作为 CNN 的标签。在使用用户保存的所有数据集(记录的图像和赛道上的转向角度)训练网络之后,汽车应该能够在从相机获取图像作为输入时,通过预测转向角度,在相同的赛道上自动驾驶。
为了能够构建高效的 CNN,使用了 Keras,这是一种基于 Tensorflow 构建的高级神经网络 API。如果你点击 这里 ,你可以看到我用来实现让汽车自动驾驶的代码。
下面是汽车在自主模式下的视频:
要看我写的关于这个项目的报告,请点击 这里 。
项目 4:高级车道线查找:
Udacity 的第一个项目是寻找车道线。该项目使用先进的算法,能够在阴影等关键情况下预测车道线。
为了做到这一点,汽车的摄像头应该进行校准,以确保图像没有失真。这是通过计算摄像机矩阵和失真系数来完成的。我将在本节末尾的报告中对此进行解释。
要学*的一件非常重要的事情是色彩空间。它是一个数学模型,表示每个图像中使用的颜色系统。一个著名的颜色系统是 RGB(红绿蓝),它使用不同强度值的红绿蓝颜色来表示和形成任何颜色。每个图像中使用不同的颜色空间,例如 HSV(色调、值和饱和度)。
RGB color space vs. HSV color space.
所以为了提取特定的信息,我们可以使用不同的颜色空间,甚至不同的通道。例如,如果我们从 RGB 和 HSV 颜色空间中提取红色通道和 S 通道,则黄色油漆的车道线比在不同通道中更有可能出现。组合最佳通道有助于增加在图像中找到所需信息的可能性。
另一种在图像中寻找直线或边缘的方法是使用 Canny 边缘检测方法。这种算法的核心依赖于所谓的 Sobel 算子。将这些运算符应用于图像类似于在 X 和 y 方向上对图像求导。这可用于找到边缘的大小,甚至它们的方向,这将有助于找到它们。这也可以与颜色空间相结合,以提高我们的检测算法的效率。(在我的例子中,我将红色通道、S 通道和 X 方向的梯度与特定阈值相结合,以检测车道线)。这也将在本节末尾的报告中解释。
A binary image resulting from combining images from (Gradient X, S channel and the Red channel)
在将彩色图像转换成二值图像后,图像被扭曲成鸟瞰图像。扭曲图像是通过透视变换完成的,也就是将一个对象从一个透视变换到另一个透视。在我们的例子中,我们希望将图像的一部分从正常视角转换为鸟瞰视角,在正常视角下,我们看到的物体比其他物体更大,而在鸟瞰视角下,我们从上方看到物体。这是通过在图像中指定四个点来完成的(应该创建一个梯形)。彼此靠*的两个点将被进一步处理,这将把梯形转换成正方形/矩形。
Warped image (right) vs. an original image with trapezoidal shape (left)
这种扭曲将有助于找到街道上线条的曲率。因此,在扭曲图像后,我们将能够在车道线上拟合多项式。这主要是通过找到直方图中的峰值(白线代表二进制图像中的峰值),然后在图像中滑动窗口以覆盖这些线来完成的。之后,在直线上拟合一个多项式。这是窗口和多项式的样子:
Polynomial fit on the lane lines that are covered by the sliding windows. (they are colored for demonstration)
这将使计算线条的半径并在视频中突出显示它们变得更加容易。下面的视频显示了高亮显示车道线的结果。
看一下这个项目的报告。请点击 这里 。并且在这里按看一下代码管道。
项目 5:车辆检测:
第一学期的最后一个也是第五个项目是写一个程序,通过在每个检测到的车辆上画一个包围盒来检测车辆。该项目是使用支持向量机 SVM 完成的,这是一种用于分类和区分不同类别的分类器。在这种情况下,分类器将图像的多个特征作为输入,并学*将它们分为两类,汽车和非汽车。
提取图像特征有不同的方法。第一个 HOG 特征是梯度直方图,寻找图像像素的梯度方向。第二是计算每个通道的颜色直方图。通过计算,你将得到从 0 到 255 的每个通道的直方图。
因为车辆有特殊的特性,比如闪亮的油漆。更好的做法是检查在提取特征和识别每幅图像时能够给出最佳结果的最佳颜色空间。特征提取应用于 cars 图像数据集和非 cars 图像数据集,之后它们被保存在两个数组中。然后应用 SVM,并计算新训练的分类器的准确度。
不,我们能够识别汽车图像。下一步是能够在包含多个对象的图像中找到汽车。一个简单的方法是在图像上滑动一个特定大小的窗口,搜索里面是否有汽车。最有效的方法是提取整幅图像的 HOG 特征,然后对图像进行二次采样并搜索汽车。要确定检测到的对象是汽车,最好创建不同大小的窗口。这将增加检测汽车的概率。换句话说,汽车将被检测多次,而非汽车对象将被检测一次。这将有助于移除所有不需要的对象。这些被称为假阳性。
False positives (left) vs. Cars successfully detected by different windows (right)
如果你能在图像中看到树的影子,软件就会认为那辆车就在那里。消除误报将有助于提高软件的准确性,并将只保留被多个窗口检测到的对象。这是通过将热图应用到分类器来完成的,该分类器将热量添加到窗口内的每个像素。在有多个窗户的地方热量会增加,而在只有一个窗户的地方热量会保持不变。这在管道中用于消除所有误报。
请点击 点击 查看项目报告。并且还点击这里的来检查管道。****
下面是我能得到的结果的视频:
到目前为止我对机器学*的理解
原文:https://towardsdatascience.com/what-i-have-understood-about-machine-learning-so-far-836d814dbe84?source=collection_archive---------6-----------------------
每当我想到机器学*或人工智能,我都会想起这句流行的名言——
“人类大脑有 1000 亿个神经元,每个神经元与 1 万个其他神经元相连。坐在你的肩膀上是已知宇宙中最复杂的物体。”
这句话简单地解释了人类大脑的复杂性,人类大脑由数十亿个被称为神经元、神经元的思维单元组成,大脑中的单个神经元通过被称为轴突的电线连接到其他几个神经元,这些轴突为电脉冲提供了在单个神经元之间移动的路径,因此知识在我们的大脑中以电脉冲的形式移动。
人脑是如何影响机器学*的?
正如你们许多人所知,人工智能是目前最热门的研究领域之一,它主要涉及人工智能系统的创造。我们人类是聪明的,因为我们有能力获取知识,这是智能的核心部分,实际上计算机很难获取知识,因为它们只是由沙子(硅)制成的,但它们如何学*和获取知识呢?他们如何变得聪明?在不久的将来,他们如何获得影响我们日常生活的潜力?答案很简单..因为机器学*才有可能!!
所以机器学*是让人类创造人工智能系统的东西。(就好像 AI 是名词,机器学*是动词一样)。有许多机器学*的方法,但由于这样或那样的原因,它们都失败了。为什么?因为他们没有提供一个通用的学*方法。当人类开始理解大脑实际上是如何学*的时候,真正的革命就开始了,我们称之为知识金字塔,它代表了不同层次的知识表达。
我们举个例子来了解一下这个知识金字塔。假设你正在看一张电影海报,每当你看到你周围的一些物体时,你眼睛的视网膜能够产生你所看到的电脉冲。这些脉冲被称为数据(知识金字塔的最底层),默认情况下,数据没有任何意义,大脑中第一级神经元的责任是从中形成一些有意义的形状。因此,第一级神经元将电脉冲视为像素,这些像素可以以多种方式一起摸索,形成许多内部表示。这些表示我们称之为信息。但是光有信息还不足以获得你所看到的完整画面。众所周知,电影海报是一个长方形,但有许多物体可以类似电影海报的形状(可以是电影屏幕、电脑屏幕或任何东西),所以你需要了解物体是电影海报。更高级别的神经元负责从现有知识中提取你所看到的意义。我们称之为机器学*中的推理。人脑内部将你看到的电影海报与你之前的经历进行匹配,以确定它到底是什么。
所以当你看这张图片的时候,你可以说这是《权力的游戏》,因为你以前就知道《权力的游戏》,而对于一个从未看过《权力的游戏》的人来说,这真的很难。这就是人脑识别物体的方式。同样的知识金字塔可以用来学*任何东西。这是主要影响机器学*的概念。
机器学*的类型:
有 3 种类型的学*:
1.监督学*:在监督学*中,我们通过展示 1000 个例子来训练一个 ML 模型。例如,为了让计算机识别猫,我们展示成千上万只猫的图像。这样它就能知道猫到底长什么样。
2.无监督学*:在无监督学*中,我们不需要展示例子。电脑可以自己学*,这就是我们大脑的工作方式。
3.强化学*:这可以简单地定义为“从错误中学*”,计算机执行数以千计的试错步骤,以学*实现目标的最佳技术。强化学*可以用来构建智能游戏机器人。
一个简单的神经网络:
因此,让我们建立一个简单的神经网络,在旅途中,我会向你解释它如何与人脑相关。
看一下上图。它被称为具有一个隐藏层的前馈神经网络。输入层是我们给出输入的地方,输出层是我们得到预测结果的地方。例如,如果我们在输入层输入一幅猫的图像,我们在输出层得到猫的预测。正如你在图中看到的,神经元之间的连接叫做边缘。一条边将当前层的一个神经元与下一层的所有神经元连接起来。因此,边类似于人脑中的轴突,网络中的每个节点类似于人脑中的一个神经元。神经网络可以有 n 层,称为隐藏层,如下所示:
学*只是一种数学优化:
上面的结构默认不学任何东西。所以我们应该有让神经网络学*的东西。图中的每条边都被赋予一个叫做权重的值。开始时,我们随机分配权重。在学*过程中,学*算法调整每条边的权重,以获得期望的输出。学*算法基本上使用诸如梯度下降的优化器来优化权重。
输入输出表示:
当我们训练神经网络时,我们以向量(X,Y)的形式定义输入和期望输出,其中 X 是所有输入值的集合,Y 是期望输出。X 可以表示为一组输入 X = {x1,x2,x3…xn}。应该有一个神经元接受 X 的每个输入值。例如,如果 X = { x1,x2},则应该有 2 个输入神经元。y 是输出向量,向量 W 表示分配给流出神经元的每个边缘的一组权重。W = {w1,w2,w3…}。在每次迭代中,X 向量与 W 向量相乘,并加上一个称为 Bias 的值。因此,表达式可以写成 W*X + b,然后将值传递给激活函数。
使用激活功能:
概率是一种重要的数学工具,可以用来确定一个事件是否可能发生。例如,如果我们向神经网络输入一幅猫的图像,那么猫出现的概率就很高。如果 yi Y 是代表猫的类,而 yj Y 是代表狗的类,那么如果输入是猫的图像,则 yi 具有更高的概率。必须有一种技术将 x*w+b 值转换为概率分布,这可以通过使用一个称为 sigmoid 的数学函数来完成, sigmoid 在数学上表示为
sigmoid 函数总是产生 0 到 1.0 范围内的值。x 值越高,sigmoid 将返回值≈ 1,因此我们可以说该特征更有可能存在。这里,X 值是通过将 X*W 与偏差相加得到的。因此权重对乙状结肠功能的结果有较大的影响。由于我们随机分配权重,我们不会得到适当的输出。因此我们计算误差并优化权重以最小化误差。这是通过梯度下降和反向传播实现的。
确定输出误差,并使用梯度下降法降低误差:
到目前为止,我们所学到的可以总结在下面的图片中
我们只是将输入向量 X 的每个值(X)与权重向量 W 的每个权重(W)相乘,并添加一个偏差(对所有输入值和权重都是如此),然后使用 sigmoid 将结果转换为概率分布。
在应用 sigmoid 之后,我们得到一个预测的输出概率,这个值与最后一层的权重相乘,一起产生一个预测的输出。为了计算误差,我们必须将预测输出与期望输出进行比较,这可以使用许多方法来完成,下面给出了其中一种方法..
该表达式根据预测输出和期望输出之间的欧几里德距离计算误差,然后对其进行平方,通过消除负号来获得平均误差。这个误差值也称为损失或成本,在开始时是最大值。随着训练的继续,损失会最小化。怎么会?
当我们仔细观察误差公式时,我们可以说,当 y ≈ y 时,误差 E 将最小或几乎为 0。这只有在我们优化权重时才会发生,这意味着我们必须回到神经网络并调整权重。梯度下降和反向传播帮助我们做到这一点。
梯度下降:
微积分几乎应用于所有的科学领域。梯度下降如果你微积分好的话可以很好理解。梯度下降有助于优化权重。w 值代表为了优化而必须应用的重量变化。w 可以是正数,也可以是负数。在训练过程的每一次迭代中,梯度下降确定 w 的值,然后 w 被加上与单个神经元相关联的权重。在此之前,我们必须确定需要优化的权重,这可以使用反向传播算法来完成,一旦我们确定了神经元,我们回到那里执行 w+∏w,我们可以从数学上认为∏w 是 w 的一个小变化,因此权重在每次迭代期间得到小范围的优化。
N 个输出类的误差函数可由下式给出:
我们得到损失函数的偏导数:
wij(k)可以通过反向传播算法来确定。
从上图可以清楚地看出,存在一个最佳权重,其误差约为 0。学*算法的目标是使用梯度下降来优化权重,或者在数学意义上,损失函数的偏导数的斜率导致 w,并且它总是向最优权重移动。我们不强调梯度下降的数学公式,因为它需要大量的微积分知识。
反向传播算法及其在神经网络中的应用;
我们知道梯度下降是一个数学函数,可用于优化权重,但我们假设权重 w 是已知的,因此 w 可以应用于它,梯度下降对神经网络的现有权重没有任何概念,因此反向传播用于确定可以应用优化的权重 w。
计算图中的反向传播:
如果对 X 和 y 的任何有限向量明确定义了每个神经元的操作,则神经网络 N 可以表示为计算图。将 nn 表示为计算图非常有用,因为它们可以像数学表达式一样进行评估,并且适用于计算图的所有规则也可以应用于神经网络。计算图和反向传播的细节可以在这个链接找到:【http://colah.github.io/posts/2015-08-Backprop/
通俗地说,反向传播可以用来确定每个神经元的权重对输出的影响,这很好地帮助我们反向传播网络,并获得该神经元的 w。一旦 w 已知,我们就可以应用 w+∏w。
总结:
给定数据集(X,Y ),其中 X 是输入向量 X={x1,x2…xn}和 Y ={ y1,y2…},其中 X 是输入训练样本,Y 是输出标签集,N 是执行函数 f:N(X)→Y 的神经网络,其中 Y 是包含一组预测输出的向量 Y = { y1,y2…yn }, W 被称为权重矩阵,并在开始时被随机分配,f:N(X)执行以下函数:
- 在每个神经元上对 xi 进行一些运算,然后乘以权重 wi (xi 和 wi 分别属于 X 和 W)。
- 将偏差 b 添加到产品中。
- 对输出 z= xw+b 应用一些激活函数,它可以是 sigmoid、softmax、ReLu、tanh 或任何其他函数。
- 这种操作在整个网络的每一层执行,这就是所谓的前向传播。
- 在输出层,为每个类产生 yi,(yi 属于 Y)。
- 计算误差函数 E(Y,Y)。
- 通过应用反向传播和梯度下降来调整权重矩阵 W 的值,从而最小化损失。
- 重复以上所有步骤,直到 E ≈ 0。
通过这种方式,可以训练网络执行一些智能动作。简单地说,我们可以将神经网络的基本操作定义为:
X "* "(?或 W) = Y
如果 X 是输入,Y 是输出,我们必须找到 W 或者?它必须和 X 一起使用才能产生 y。
这里代表 X 和 W 之间的一系列数学运算,“”一般是不存在逆的非线性运算。
这只是神经网络的理论介绍。将来会涵盖更多内容。
谢谢你,☺
我在硅谷学到的人工智能
原文:https://towardsdatascience.com/what-i-learned-about-artificial-intelligence-in-silicon-valley-7d30b47ab751?source=collection_archive---------3-----------------------
上周,我在加州帕洛阿尔托的技术革命中心呆了一周。我去过机器人大会,AI 研讨会,深度学*讲座,虚拟助理演示。
我了解到人工智能无处不在,虽然它已经融入了我们的日常生活,但我们还没有看到任何东西…
为什么是现在?人工智能一词是由约翰·麦卡锡在 1956 年的达特茅斯会议上提出的,在过去的几十年里,它经历了两个“冬天”,一个在 70 年代,一个在 90 年代。软件和硬件的问题受到了冲击,留给了学者去解决。
“我们正在从移动优先的世界向人工智能优先的世界发展”,谷歌首席执行官桑德尔·皮帅
有三种不同类型的人工智能:
人工狭义智能——一匹只会一招的小马,它们可以下棋、识别人脸或翻译外语
AGI——人工通用智能——能够将智能应用于任何问题。
ASI——人工超级智能——比最好的人类大脑更聪明,能够将其应用于任何事情。(这是斯蒂芬·霍金和埃隆·马斯克这样的人害怕的人工智能)
由于以下三个因素,人工智能最终能够发挥其全部潜力:
- GPU 功耗和成本
- 大数据
- 算法复杂性和效率
GPU 功耗和成本
随着 NVIDIA 在 2007 年发明 CUDA,一种允许图形处理单元(GPU)用于计算和 3D 渲染的 API,一种更强大的处理方法被创建出来。最初用于视频和游戏软件,现在用于机器学*,这是人工智能的核心。
CPU 由几个针对顺序串行处理进行优化的内核组成,而 GPU 则具有大规模并行架构,由数千个更小、更高效的内核组成,旨在同时处理多项任务。
大数据
人类在过去两年中创造的数据比人类历史上的总和还要多。每分钟有 300 个小时的视频被上传到 YouTube,每秒钟有 40,000 次谷歌搜索,在脸书每分钟有 510,000 条评论被发布,293,000 条状态被更新,136,000 张照片被上传。
以及健康数据、银行业务、短信、电子邮件、照片等等,这些数据让计算机以惊人的速度进行学*。
算法复杂性和效率
计算机过去由程序员编程,有特定的输出设置。现在,随着处理器能力和大数据的可用,数据和所需的输出可以输入计算机,而计算机不需要编程。
例如,你可以将一百万张动物照片输入电脑,根据学*的类型,有监督的或无监督的,你可以将这些照片分类:猫、狗、马等等。到那时,你就可以停止贴标签,计算机将能够自己识别一只猫。
实际上,机器学*就像教孩子,孩子通过观察和经验学*,计算机使用数据而不是经验,并在失败时继续测试自己,重新测试,学*和理解。
应用程序
人工智能能够做一些不可思议的事情,其中一些我已经了解如下:
翻译
谷歌最*发布了 Pixel Buds,可以进行 40 种语言的实时语音翻译。他们使用谷歌助手语音识别和翻译服务。
娱乐
网飞推荐了你。
网飞将观众分成两千多个口味组。你在哪一个决定了你得到的建议。网飞的工作人员观看每一个节目的每一分钟,并标记发生的一切,例如打架、接吻、争吵等,然后网飞算法根据你“竖起大拇指”或在两个晚上狂看的节目显示建议
自动驾驶汽车
人工智能允许自动驾驶汽车根据交通、环境、路况、天气等做出数以千计的决定。你可以在这里阅读我关于自动驾驶汽车未来的文章。
卫生保健
斯坦福大学的研究人员创造了一种可以像专业医生一样识别皮肤癌的人工智能。该程序使用深度学*对* 13 万张痣、皮疹和病变的图像进行了训练。它的创造者说,它的表现与人类一样准确(“至少”91%一样好)。
数字助理
Just some of the digital assistants available today.
最*出现了一个完整的数字助理世界,Siri、Cortana、Alexa、谷歌助理,事实上到 2021 年,它们将超过世界人口。这已经开始了一个新的#noui 系统的状态,我将在我们的下一个寓言中谈到,在这里订票。
物联网(IOT)
人工智能可以通过 IOT 改善一切,它可以预测你什么时候回家并打开暖气,什么时候睡觉并调暗灯光,什么时候你将用完牛奶和鸡蛋……任何与互联网连接的东西都可以受益于数据、学*和最终的智能。
未来
The future of AI?
任何技术都可能是一把双刃剑…人工智能可以解决所有的人类问题:贫困、不平等和气候变化,或者它可能是人类的末日。
谷歌人工智能主管 Ray Kersell 认为奇点可能会在 2029 年到来。奇点理论认为,人工智能将超越人类智能,并将突然引发失控的技术增长,从而给人类文明带来不可估量的变化。
失业
人工智能和机器人肯定会失去工作,电话销售员、收银员、法律助理、出租车司机、快餐厨师都将受到威胁。但是我们以前见过这种情况,动物被引入农业,机器首次进入生产线。我们适应,我们调整,我们找到新的工作让我们去做,例如,33.8 万人为谷歌、脸书、苹果、思科和甲骨文工作。事实上,仅在美国,就有 670 万人受雇于科技行业。这些工作在 30 年前并不存在。
Robopocalypse?
一些非常聪明和见多识广的人害怕 AI 会把我们带到哪里,一些同样聪明和见多识广的人认为我们应该 100%接受它。
埃隆·马斯克(特斯拉和 SpaceX 的首席执行官)、雷德·霍夫曼(LinkedIN 的创始人)和一小群互联网企业家成立了 openAI ,一家负责研究和俯瞰人工智能发展的公司。
“一旦开发出来,致命的自主武器将允许武装冲突以前所未有的规模和人类无法理解的速度进行。”埃隆·马斯克
马克·扎克伯格(脸书首席执行官)不同意,他说人工智能末日理论是不负责任的。
马克·扎克伯格说:“在未来的 5 到 10 年里,人工智能将会极大地改善我们的生活质量。”
那么,在不远的将来,人工智能会给我们带来什么呢?硅谷的专家认为,它将改变我们日常生活的每一个元素,从我们与他人互动的方式,到我们的家,我们的汽车等等。我非常期待看到它将带我们走向何方…
我从分析和可视化交通事故数据中学到了什么
原文:https://towardsdatascience.com/what-i-learned-from-analyzing-and-visualizing-traffic-accidents-data-7cd080a15c15?source=collection_archive---------1-----------------------
Source: Power BI
概观
美国国家公路交通安全管理局(NHTSA)向公众公开了一些非常有趣的数据。我下载了几个数据集,其中包含从 1994 年到 2015 年的致命机动车辆碰撞和死亡的信息。本分析的目的是探索并更好地理解影响车辆碰撞可能性的一些因素。
分析和可视化是用 R 语言完成的。r 是可怕的,因为你会发现。
数据
加载库
我将使用下面的库进行分析和可视化。为了保持文章简洁,我没有展示大部分数据清理和分析步骤的代码,但是和我所有的文章一样,代码可以在 Github 上找到。
library(XML)
library(RCurl)
library(rvest)
library(dplyr)
library(tidyr)
library(ggplot2)
library(ggthemes)
library(reshape)
library(treemap)
美国的交通死亡人数一直呈下降趋势。值得注意的是,2014 年的死亡人数(不到 33,000 人)远低于 2005 年的峰值(超过 43,000 人)。
ggplot(aes(x=Year, y=Val), data = df_long_total) + geom_line(size = 2.5, alpha = 0.7, color = "mediumseagreen", group=1) +
geom_point(size = 0.5) +
ggtitle('Total Number of Accidents and Fatalities in the US 1994 - 2015') +
ylab('count') +
xlab('Year') +
theme_economist_white()
Figure 1
而且上述数字还没有考虑到路上不断增加的汽车数量。美国人开车比以往任何时候都多。
ggplot(aes(x=Year, y=Val), data = df_long_travel) + geom_line(size = 2.5, alpha = 0.7, color = "mediumseagreen", group=1) +
geom_point(size = 0.5) +
ggtitle('Total Vehicle Miles Traveled 1994 - 2015') +
ylab('Billion Miles') +
xlab('Year') +
theme_economist_white()
Figure 2
2015 年各州交通死亡人数以及与 2014 年相比的百分比变化
state <- state[c('State', 2015, 2014, 'Percent.Change')]
newdata <- state[order(-state$`2015`),]
newdata
- 德克萨斯州在 2014 年和 2015 年都是美国交通死亡人数最多的州。
- 可以理解的是,交通死亡人数最少的州也是居民最少的州,包括哥伦比亚特区,其次是罗德岛州和佛蒙特州。
在全国范围内,每年男性的机动车事故死亡率高于女性(两倍以上)。
ggplot(aes(x = year, y=count, fill=killed), data=kill_full) +
geom_bar(stat = 'identity', position = position_dodge()) +
xlab('Year') +
ylab('Killed') +
ggtitle('Number of Persons Killed in Traffic Accidents by Gender 1994 - 2015') + theme_economist_white()
Figure 3
25 至 34 岁年龄组的死亡人数最多。
age_full$age <- ordered(age_full$age, levels = c('< 5', '5 -- 9', '10 -- 15', '16 -- 20', '21 -- 24', '25 -- 34', '35 -- 44', '45 -- 54', '55 -- 64', '65 -- 74', '> 74'))
ggplot(aes(x = age, y=count), data =age_full) + geom_bar(stat = 'identity') +
xlab('Age') +
ylab('Number of Killed') +
ggtitle('Fatalities Distribution by Age Group 1994 - 2015') + theme_economist_white()
Figure 4
从 2005 年到 2015 年,只有两个年龄组的死亡人数增加;55 比 64 和 65 比 74。16 至 20 岁和 35 至 44 岁年龄组的死亡率下降幅度最大。
ggplot(age_full, aes(x = year, y = count, colour = age)) +
geom_line() +
geom_point() +
facet_wrap(~age) + xlab('Year') +
ggtitle('Traffic Fatalities by Age 1994 - 2015') +
theme(legend.position="none")
Figure 5
从这张树形图中,我们看到下午 3 点到 5 点 59 分和下午 6 点到 8 点 59 分死亡人数最多。让我们深入了解一下。
treemap(kill_by_hour_group, index=c("hours","variable"), vSize="sum_hour", type="index", fontsize.labels=c(15,12), title='Fatalities by time of the day', fontcolor.labels=c("white","orange"), fontface.labels=c(2,1), bg.labels=c("transparent"), align.labels=list(
c("center", "center"), c("right", "bottom")), overlap.labels=0.5, inflate.labels=F,
)
Figure 6
大多数事故发生在周六和周日的午夜到凌晨 2:59 之间。让我们更深入地探究一下原因。
ggplot(aes(x = variable, y = sum_hour, fill = hours), data = kill_by_hour_group) +
geom_bar(stat = 'identity', position = position_dodge()) +
xlab('Hours') +
ylab('Total Fatalities') +
ggtitle('Fatalities Distribution by Time of the Day and Day of the week 1994-2015') + theme_economist_white()
Figure 7
星期六和星期天的午夜到凌晨 2 点 59 分是许多人离开酒吧的时间。我们还要说多少次,不要酒后驾车?
ggplot(aes(x = year, y = count, fill = hour), data = pair_all) +
geom_bar(stat = 'identity', position = position_dodge()) +
xlab('Year') +
ylab('Number of Fatalities') +
ggtitle('Fatal Crashes caused by Alcohol-Impaired Driving, by Time of Day 1994-2015') + theme_economist_white()
Figure 8
在过去 10 年里,酒精中毒驾驶致死的比例实际上是持平的。
ggplot(aes(x = year, y = mean, color = bac), data = al_all_by_bac) +
geom_jitter(alpha = 0.05) +
geom_smooth(method = 'loess') +
xlab('Year') +
ylab('Percentage of Killed') +
ggtitle('Fatalities and Blood Alcohol Concentration of Drivers 1994-2015') + theme_economist_white()
Figure 9
轮到你了
NHTSA 为交通死亡信息提供了丰富的数据源。有数百种方法来分析它们,最好的方法取决于数据和你试图回答的问题。我们的工作是讲述一个有数据支持的故事。哪种类型的车辆更有可能发生碰撞?车辆中最安全的座位在哪里?所以,拿出你自己的故事,让我知道你在数据中发现了什么!
数据不能激励人,故事可以。
我从查看大量仪表盘中学到了什么
原文:https://towardsdatascience.com/what-i-learned-from-reviewing-a-ton-of-dashboards-cac9087b6c2f?source=collection_archive---------11-----------------------
每个人都遵循同样的准则?对吗?
在准备最*的一次演示时,我试图找到一些仪表板来展示我的一些想法。我不想只显示我创建的仪表板。这些是普遍原则;每个人都遵循同样的指导方针?对吗?
如果你搜索谷歌图片,你可以一次看到许多仪表板的例子。只需快速点击几下,您就可以浏览这些网站,对主题有所了解。我承认我没有对所有的 500+图片做这个练*,但是我确实有一些收获。
产品演示会变得…奇怪
这些仪表板中的大部分都在炫耀产品功能,而不是实用的设计。这是我看到如此多种多样的数据对象放在同一个页面上所能得出的唯一结论。
地图旁边的三维饼图旁边的气泡图?有人的照片上有一打仪表?带交通信号灯的思维导图?抱歉,伙计们,这实在是太荒谬了。
我查看的大多数仪表板都有一个通用主题,如销售、客户服务或医疗保健。但是仪表板中的措施从来没有多大意义。通常,您不会将团队评级、年度销售业绩和产品缺陷计数等指标放在一起。我夸张了点,但离事实也不算太远。我想设计师是在说——看,你可以把所有的信息放在一起。但是你应该——我问?
我担心一个没有经验的设计师可能会用这些被误导的仪表板作为例子。我想知道那个人如何在他们的组织中取得成功。这个工具或者这个人将会因为这个危险的想法而受到责备。
仅仅是缺乏 Dataviz 知识吗?
更仔细地查看仪表盘,可以发现样式选择不佳,而且总体上缺乏数据可视化知识。最大的问题是仪表板仪表的误用。
虽然许多仪表板设计者反对仪表,但他们可以成功地使用。它们的使用是有指导方针的——但是许多这样的仪表板甚至没有遵循简单的指导方针。
许多基本的数据可视化原则也被忽略了。
也许一个设计师如此迷恋汽车仪表板的想法,以至于忘记了让数据被理解。哪个组织在同一个页面上有 20 个 KPI?
许多仪表板都有明亮的调色板和奇怪的背景颜色选择。
我所知道的关于仪表板的一件事是:如果用户不需要显示的数据——你的仪表板仅仅根据它的美观程度来判断。
如果用户需要信息来完成工作任务,仪表板可能很糟糕,但仍然很受欢迎。
但是你不想要一个好看的仪表板吗?想到一些可怜的懒汉因为你卑鄙的设计选择而受苦,难道不可怕吗?或者其他人嘲笑令人不快的仪表板设计。数据可视化和网页设计是一门学科。这是可以学*的。
术语“性能仪表板”没有得到普遍理解
一些设计师使用 MS Excel 创建了一个仪表板。这种技术只是对工具的误用。仪表板是一种组织工具,应该放在一个中心位置。您如何与组织共享 Excel 电子表格?通过电子邮件?如何保持更新,如何控制变化?我不会反复强调这一点,但是停止做那件事。
在我看来,绩效仪表板是组织中使用的一种特殊工具。它允许组织设定目标并在一段时间内跟踪这些措施。这是一项投资。随着组织的成长,仪表板帮助组织成长。它侧重于数据的使用,显示数据的真正价值。
仪表板应该是什么?
对于上面的许多设计,你不得不怀疑仪表板是否有效,甚至是否可用。从这个角度来看,仪表盘对于局外人来说可能会很无聊。仪表板是组织定制的,包含他们想要关注的内容。一个组织可能需要专注于培训,而另一个组织需要专注于用更少的资源提高效率。这些问题将具有不同的 KPI,并使用不同的支持信息。
你的外卖
当仪表板有吸引力且有用时,它就是完美的。很多时候,可靠的条形图、折线图以及一些标尺才是正确的答案。一个干净、简单的设计,允许用户关注度量,最终会使组织有效。
我认为这些原则并不能销售许多仅仅显示这些东西的仪表板构建工具。毕竟,销售和营销过程也是一门艺术。
我从谷歌的 Udacity 的 A/B 测试课程中学到了什么
原文:https://towardsdatascience.com/what-i-learned-from-udacitys-course-on-a-b-testing-by-google-45f6d3297f42?source=collection_archive---------3-----------------------
在网站和移动应用的发展阶段,A/B 测试仍然是最常用的技术之一,也是经理和决策者回答业务问题的首选。A/B 测试有助于量化用户对新产品或新功能的反应,方法是将其与原始版本进行比较,看哪个版本表现更好。
通过这篇文章,我希望传达我对谷歌 Udacity 的 A/B 测试课程的理解。我会向任何考虑从事数据科学职业的人推荐这门课程。但是在你开始学*这门课程之前,请确保你已经掌握了推断统计学的概念,因为这门课程非常强调 A/B 测试的商业应用。你可以使用任何 stats 101 书籍作为本课程的补充,或者如果有足够的时间,你可以学*另一门关于 Udacity 的非常好的课程推论统计学简介。没有别的事了,让我们开始吧。以下是整篇文章的结构。
1.什么是 A/B 测试?
2.为什么 A/B 测试很重要?
3.为什么要考 A/B?为什么不是对照实验?
4.顾名思义,A/B 测试是否仅限于检查两种变体?
5.A/B 测试有哪些阶段?
- 探险
- 剥削
6.什么是 A/B 测试,什么不是?
7.结构良好的 A/B 测试的步骤
- 研究
- 选择和表征指标
- 实验单位和人群的选择
- 实验持续时间
- 分析结果
8.结论
9.关键要点
10.摘要
11.资源
1.重要的事情先来!什么是 A/B 测试?
A/B 测试是用于测试新产品或新功能的可行性的实验。这种技术是基于网络的实验设计的应用,或者更常见的工程实验设计。实验单元(网页或用户的输入流量)被分成两组(A 和 B),其中一组暴露于原始版本,另一组暴露于新版本。最终目标是评估成功标准并决定是否发布新特性。
2.为什么 A/B 测试很重要?
A/B 测试很重要,原因有二:
- 它们是解决短期商业问题的好方法。
- A/B 测试有助于得出因果结论
3.为什么要进行 A/B 测试?为什么不是对照实验?
A/B 测试类似于受控实验或分割测试,包括假设、控制和处理组(或原始与您想要尝试的变化)以及统计计算结果。唯一的区别是,当一个实验在受控环境中进行时,它被称为受控实验,而 A/B 测试是在互联网上进行的实验。A/B 测试通常不被称为受控实验的原因是,当涉及到互联网流量时,存在许多相关的可变性,这可以在一定程度上得到缓解,但很难在完全受控的环境中操作。
4.顾名思义,A/B 测试是否仅限于检查两个变体?
不要!A/B 测试不仅限于两种变化,你可以尝试 n 种变化。但是随着 n 的增加,每组测试需要更多的流量。其他类型的在线实验包括:
- 多元测试
- Bandit 算法
我将简要地谈一下其中的每一项。
A/B 测试或 A/B/C/D/n 测试:测试,一个属性有多个变量。A/B 测试用于确定最佳布局。在下图中,彩色块(或 4 页中每一页的标题)是属性,4 种不同的颜色代表我们正在测试的变化。我们可以看到黄色的变化比其他颜色做得更好。
Image source
多元测试:测试多个属性,每个属性都有多个变量。MVT 用于确定哪组属性变化或属性组合产生最佳结果。下图中的第 1 项、第 2 项和第 3 项代表三个属性,每个属性都有三种变化,分别用蓝色、粉色和灰色块表示。使用多元测试来润色页面布局。
Image source
Bandit 算法: Bandit 算法是 A/B/n 测试,根据每个变体的性能实时更新。
5.A/B 测试有哪些阶段?
任何 A/B 测试都有两个重要阶段:
1.探索:这是在部署变更之前,在目标人群的一个小的但有代表性的样本上测试您想要启动的变更的阶段,同时给予仔细的考虑以避免 I 型错误(假阳性)和 II 型错误(假阴性)的风险。相当大的声明!让我们把它分解成小块,试着去理解。
- “目标人群的小而有代表性的样本”:有一个有代表性的样本对于你的结论被认为是有效的是很重要的。在向整个目标受众发布您的变更之前,您可能希望在一个小但有代表性的人群样本上尝试您的变更,这样您就可以观察小部分受众的反应,如果结果不错,可以将您的结果推广到整个目标受众。
- “避免第一类错误(假阳性)和第二类错误(假阴性)的风险”:第一类错误(假阳性)是指,断定某项改变或干预有效果,而实际上没有。第二类错误(假阴性)是未能发起重大的变革。下图显示了一个误报的示例。
Image source
2.开发:启动变更。不言自明,对吧?
6.什么是 A/B 测试,什么不是?
A/B 测试有利于回答“这个还是那个?”类似的问题。一些例子是:
- 页面加载时间的增加会影响收入吗?在这里,您可能对用户界面(UI)进行了一些更改,这可能会增加延迟。因此,您可能希望 A/B 测试原始用户界面与新用户界面,看看收入是否有差异。
- 另一个例子是,测试改变按钮的颜色是否能提高点击率?当你想测试按钮的可用性,看看按钮在当前的阴影和大小下是否明显时,可以使用这个选项。谷歌进行了一个类似的实验,当他们无法在两种蓝色之间做出决定时,他们最终测试了 41 种不同色调的蓝色,介于两种蓝色之间。
另一方面,A/B 测试可能不是检查网站完整性、新体验(如厌恶变化与新奇效果)和任何长期变化(如买车或租房)的好选择。
- 网站的完整性:A/B 测试不能回答这样的问题,我们的网站上是否有缺失的产品?它可以回答产品 A 是否应该在产品 B 之上,但它不能判断网站上是否缺少产品 C,以及我们是否应该包含它。
- 新体验:一些用户可能不喜欢新的变化(这是厌恶变化),而另一些用户可能对尝试变化感到兴奋(这被称为新奇效应)。所以,这将很难提出一个基线,因为你不会知道你的传入流量的百分之多少属于变化厌恶,百分之多少属于新奇效应。这使得提出一个可比较的控制/治疗分割变得更加困难。另一个问题是时间表,即用户适应变化所需的时间,这样你就可以做出可靠的结论。
- 长期变化:这些也很难衡量。假设您想要检查出租公寓推荐方案的有效性。现在人们不经常租公寓,这使得很难在短时间内收集足够的数据来做出有效的结论。因为你进行实验的时间越长,你所观察到的变化由某个因素引起的可能性就越大,这个因素是最*出现的,但在实验开始时没有包括在内。例如,假设你从五月到八月进行出租公寓的实验。现在八月,通常标志着一个学期的开始,这意味着你可能会观察到出租公寓数量的突然增加。所以,如果你没有考虑这个因素,你可能会有一个假阳性。
7.结构良好的 A/B 测试的步骤
a.研究
在你考虑做任何实验或优化之前,请花点时间思考一下
- 你对商业目标有清晰的概念吗?
- 你有明确的目标吗?
- 你知道你要用什么 KPI(关键绩效指标)吗?
- 你有目标衡量标准吗?
一旦你清楚了这些事情,你就可以继续做一些理智检查,比如:
- 网站有什么 bug 吗?bug 可能是潜在的转换杀手。
- 不同设备和浏览器之间有差异吗?这些差异可能是不同设备和浏览器之间的延迟问题。进行测试来检查不同平台之间的一致性,可能会消除混淆或隐藏变量破坏实验的风险。
b.选择和描述指标
指标的选择取决于您希望指标服务的目的。有两类指标:
- 用于评估的指标:这些指标包括帮助跟踪深入信息(如用户对产品的体验)的详细指标,还有用于跟踪业务目标的高级业务指标。
- 用于健全性检查的指标:这些指标用于检查控制组和实验组是否具有可比性。因此,您可以检查两个组中的用户数量是否相同。这些组在分布等方面有可比性吗?
得出指标的步骤
第一步:为指标提出一个高层次的概念
这通常是一个大家都认同的定义。这些指标可以简单到点击率、点击率、活跃用户数量
第二步:将高层指标转化为完全实现的定义
因此,我们在步骤 1 中看到——活动用户数量——是一个高级指标。它的一个完全实现的版本将是定义什么是主动。是 1 分钟主动吗?还是 1 小时主动?还是 1 周活跃?因此,在定义一个完全实现的指标时,要记住的一件事是决定时间戳。你可能要考虑的另一件事是不同浏览器之间的一致性。每个浏览器与您的网站交互的方式可能不同,因此获取数据的方式也可能不同。此外,不同浏览器之间的延迟可能不同,这可能会导致差异。
现在,这些指标的有效性,在很大程度上依赖于您用来计算它们的数据,因此,评估不同的技术和收集数据的来源,值得同等关注。
那么,用什么数据呢?
很明显,你会使用从你的网站产生的数据,如点击,在一个页面上花费的时间,页面浏览量,创建的帐户数量等来运行 A/B 测试。但是除了这些数据之外,你还可以使用专注于收集数据的公司生成的外部数据,通过调查来回答有趣的问题,或者你可以雇佣公司使用用户体验研究和焦点小组等技术来生成你自己的深度数据。从这些技术中收集的数据可以作为验证您的指标的良好来源。这可以通过绘制内部数据与外部数据的趋势和季节变化并检查它们是否一致来实现。第二,您还可以使用这些数据来产生关于使用简单的度量标准的想法,作为较难度量的度量标准的代理。一个更难测量的度量标准的例子是,测量用户满意度。在一项研究中,用户报告的满意度与在网站上花费的时间进行了比较,以建立两者之间的一般相关性。通过这种相关性——在网站上花费的持续时间或时间——这很容易测量,被转换成一种衡量用户满意度的指标。
第三步:将测量结果汇总成一个指标
到目前为止,我们只有直接的数据测量,如页面浏览量、点击量、延迟等。但是现在我们需要想出一个方法来总结这些。要总结一个指标,我们需要考虑最终总结指标的以下两个特征:
- 敏感性和稳健性: 我们希望我们的指标足够敏感,能够捕捉到我们关心的变化,但同时指标也应该足够稳健,不会捕捉到我们不关心的变化。敏感性和稳健性很重要,因为它们使我们免于第一类错误(发起我们不关心的变更)和第二类错误(未能发起我们关心的变更)。为了衡量灵敏度和稳健性,我们可以:
- 运行实验:如果我们可以访问实验数据,那么我们可以运行实验,看看度量标准是否随着变化而移动。这将是一个很好的灵敏度测试。
- A vs. A 测试(或 A/A 测试):我们也可以用实验数据做 A vs. A 测试。在 A/A 测试中,对照组和治疗组都暴露于完全相同的变化。如果我们的指标在两组之间移动,那么这将是一个很好的迹象,表明该指标不够稳健。
- 回顾性分析:现在,如果我们无法访问实验数据,那么我们可以取出一些我们存档的数据,这些数据在过去用于运行类似的实验,并查看我们感兴趣的指标是否以我们想要的方式做出响应。
2。指标的分布: 分布用于确定一个特定指标相对于其他指标的优先级。比方说,我们有一个像正态分布一样的良好分布,那么均值或中值将是一个不错的选择。如果分布是偏斜的,那么百分位数将是一个很好的选择。
c.实验单位和人群的选择
下一个要考虑的重要话题是实验单位(分流单位)和你希望锁定的人群。在确定实验规模和决定如何将事件分配给实验组或对照组时,这两者都变得越来越重要。
- 实验单位: 这是用于定义哪个用户或哪个事件被分配到控制和实验组的转移单位。转移的单位可以是唯一的标识符,如 user_ID 或 cookie,也可以是基于事件的转移,如页面视图。分流单位的选择取决于三个重要的考虑因素:
- 用户一致性:如果我们正在处理一个用户可见的变化,我们希望我们的用户始终有一致的体验。因此,user_ID 或 cookie 将是一个不错的选择,如果我们试图实现的更改对用户不可见,那么基于事件的转移(如页面视图)将更有意义。这一点很重要,因为如果我们使用页面浏览量作为用户可见变化的转移单位,那么每次用户重新加载页面时,他们可能会被分配到一个新的组,即如果用户最初在实验组,现在他们可能会在控制组结束。
- 伦理考虑:因为真实的人作为实验单位参与了实验,所以仔细考虑实验的伦理是非常重要的。一些伦理考虑是风险、利益和隐私。如果风险超过最低风险的阈值,即包括身体、心理、情感、社会或经济问题,那么获得知情同意就变得至关重要。如果用户在研究完成后会受益,那么说明益处是很重要的。如果收集新数据的内部流程到位,那么隐私就不会是一个大问题,但如果不是,就需要额外的安全措施。
- 指标的可变性:分流单位的选择会极大地影响指标的可变性。与分析单位相比,如果转移单位更宽,则指标的可变性更高。分析单位基本上是指标的分母。因此,对于点击率来说,点击率被定义为#点击量/#页面浏览量,#页面浏览量成为分析的单位,(其中' #点击量'读作'点击次数')。因此,如果我们使用 user_ID 作为我们的转移单位,使用点击率作为我们的分析单位,那么我们的指标点击率的可变性会高得多,因为一个 user_ID 可以对应多个页面视图。
- 人口: 人口的选择将极大地影响你正在努力实现的新变化或新特性的成功。当您计划发起一项变更时,您会希望向最相关的受众发起变更,即更有可能对变更做出积极响应的用户。尽管您可能出于各种原因想要提前做出这个决定:
- 避免不必要的媒体报道:当你不确定是否要发起变革时,这尤其有用。因此,您可能需要限制暴露的用户数量。
- 第二个原因是,如果你计划在国际上发布变更,你可能需要额外确保使用的语言是正确的。
- 接下来,如果你知道这个变化将会影响到属于某一特定人群的用户,那么向全体用户发布这个变化可能会蒙蔽实验的效果。
现在主要问题!
公制、分流单位和人口的选择如何影响实验的规模?
- 我们在上一节中看到,如果分析单位与转移单位相同,指标的可变性就会降低。现在,由于可变性降低,同样的最低可检测效果所需的页面浏览次数也减少了。
- 正确的目标人群也减少了实验所需的样本量,因为我们不考虑无关的观众,因为他们可能会欺骗我们。
d.实验持续时间
实验的持续时间与您希望通过实验发送的流量比例有关。如果您的实验总共需要 20K 个用户(每个控制组和实验组中的 10K 用户),每天每组发送 500 个用户,将需要您运行实验 10 天。现在,如果您将数量减少到每天每组 250 个用户,实验的持续时间将会增加到 20 天。
当谈到持续时间时,需要记住的下一件重要事情是,统计意义并不意味着实际意义!仅仅因为您的测试显示了统计上的显著结果并不意味着您应该发起变革。统计意义基于统计界限,但实际意义基于你所关心的最小可检测效应。
也就是说,让我们正式声明一些停止规则:
停止规则:
决定持续时间(通常为 2-4 个业务周期)。我们考虑完整商业周期的原因是为了避免扭曲的结果,并获得一个有代表性的样本,因为它将包括每一个外部因素:一周中的每一天,不同的流量来源,季节性和任何其他外部事件,两次。
确定每天每组的最小样本量(如每个治疗组和对照组 400 名用户)
可能出现的一个重要现象是回归均值。根据这种现象,您可能会在初始阶段观察到明显的获胜变化,但是随着测试的进行,转换率没有任何差异。下图显示了转化率,4 周后回归到平均值。因此,如果您在测试过程中观察到不同变化之间的差异在减少,那么这可能是您应该运行更长时间测试的一个指示。这也使我们免于推出与当前版本没有什么不同的变体。
Image source
e.分析结果
执行理智检查
分析任何实验的第一步是检查控制组和实验组是否具有可比性,基本上是使用我们在第 2 节讨论的不变指标(选择和描述指标)进行健全性检查。如果健全性检查失败,就没有必要继续进行实验的其余部分。现在两组可能没有完全相同的实验单位数量,但应该大致相当。
分析结果
如果您有一个评估指标,那么您可以直接为您观察到的差异构建一个置信区间。如果置信区间不包含 0,则对照组和治疗组之间观察到的差异具有统计学意义,但正如我们之前讨论的,统计学意义并不意味着实际意义,如果最小可检测差异低于置信区间,则我们可以说我们观察到了我们关心的显著差异。
我们可以将我们的结果与从非参数检验(如符号检验)中获得的结果进行比较,看看它们是否与我们观察到的假设结果一致。
如果我们不观察统计显著性呢?
不要走得太快。A/B 测试是一个迭代的过程。多尝试几次迭代。
第二,寻找辛普森悖论。仅仅因为你的总体测试没有显示出统计学意义,并不意味着你的干预(或改变)不值得发起。这种变化可能会提高特定受众的转化率。在这种情况下,您可以使新版本对该细分市场可用,而不是向更广泛的受众发布,尽管您可能希望确保您可以证明为什么这种变化会改善该细分市场的体验。所以,注意细分。
您可能会考虑以下部分:
- 新用户与经验丰富的用户
- 移动设备/平板电脑与台式机
- Chrome vs. IE vs. Safari vs. Firefox
- 人口统计(年龄组、性别、城市、州、国家)
- 登录/注销界限内的用户与界限外的用户
- 直接来自页面的流量与来自内部链接的流量
现在,如果您有多个评估指标,这些指标之间可能存在一些相关性,但您总是可以假设独立性并获得保守估计,因此您可以使用类似 Bonferroni 校正的方法
8.结论
最后一步是得出结论。要得出结论,你基本上需要回答整个实验过程中的三个关键问题:
- 我们有统计上和实际上有意义的结果吗?
- 我们对变化理解得足够好了吗?
- 改变值得发起吗?
9.关键要点
- 检查,两次检查,三次检查实验的设置
- 统计意义并不意味着实际意义
- 变异的辛普森悖论与回归均值
- 如果这是你的第一个实验,可能会有很大的影响,做几个实验,看看你对结果是否满意
10.摘要
- 遵循结构化方法
- 研究并定义您想要改进的业务目标或 KPI。
- 进行实验
- 分析、学*和迭代
11.资源
- 从初级到专业的 A/B 测试掌握度
- 统计显著性不等于有效性(或者为什么你会得到想象的提升)
我从数据科学竞赛中学到了什么
原文:https://towardsdatascience.com/what-i-learnt-from-a-data-science-competition-428a3d876e56?source=collection_archive---------2-----------------------
2 个月前,我开始参加在 Kaggle.com 举行的数据科学竞赛,用桑坦德银行的数据集预测客户满意度。由于这将是我第一次单独参加非计算机视觉 Kaggle 挑战赛,我认为这将是一个很好的途径,可以将我从论文、论坛和非正式对话中收集的一些建议付诸实践。这篇文章详细介绍了我所采取的步骤,哪些有效,哪些无效,希望它能帮助你在决定采取行动时有所作为!
对于那些对代码感兴趣的人,你可以查看我的 github 库这里。
xgboost
我几乎是本能地从 xgboost 开始的,这是一个流行的梯度增强实现,具有 R 和 python 接口,既能有效地利用服务器 CPU 上的多线程计算,又具有良好的预测性能。xgboost 模型在过去的许多 Kaggle 比赛中表现良好,也是许多脚本的初始选择。这也有助于它不需要很长时间的培训,特别是当运行在我的 48 核服务器在办公室!
数据清理
数据非常稀疏,有许多二进制和数字变量。通过在论坛上的一些探索和阅读,我发现有一些相关和重复的专栏,我立即删除了它们。我最初也删除了重复的行,但结果是性能更好的公共脚本没有删除它们,所以我保留了重复的行。不太清楚为什么它表现得更好。
论坛上暴露的另一个问题是出现了奇怪的号码,如-999999、999999999。我将它们替换为 NA,这将允许 xgboost 自动确定给定数据的最佳估算值。
特征工程
最初,我尝试了使用分位数的宁滨列,但似乎没有多大帮助,尤其是在公共排行榜上。根据我对 xgboost 实现的理解,该算法按分位数对数据进行分类,并从那里确定最佳分割。因此,这一步似乎有些多余,除非你有令人信服的理由不使用分位数来绑定变量。
与此相反的例子是年龄变量,我以 10 年为间隔进行分类,同时将所有 20 岁以下的客户归为一类。虽然比赛没有提供太多关于年龄的背景信息,但不难想象不同的年龄组会有不同的态度或满意度标准。由于年龄差异很大,让 xgboost 解释默认的年龄分位数可能不是训练模型的最有用的方法。这确实稍微提高了本地和公共 LB 分数,使我的公共 LB 分数超过了 0.840。
最后,我探索了为前 10 个变量添加双向交互。我首先运行一个 xgboost 模型来对变量重要性进行评分(因为它比运行线性模型更快!),并挑选了计算乘除交互作用的前 10 名。我用两种方法计算了除法相互作用(A/B and B/A),但我怀疑两种方法都有帮助,因为单调排序(以及分位数和分裂)会简单地反转。具有双向交互的模型在公共 LB 上表现稍差。
参数调谐
我用 xgb.cv 进行了一个简单的 5 重交叉验证的网格搜索,保存了 2 个模型;一个有双向交互,另一个没有。我使用 ggplot 来帮助可视化 AUC 的方差和均值。巨大的差异是一个明显的迹象,表明我不太相信我当地的简历分数和公众的 LB 分数。回过头来看,我意识到技术比一个好的公共 LB 重要得多,因为过度适应公共 LB 是很危险的,并且欺骗自己认为你不是。
分叉公共脚本
比赛快结束时,我发现时间很紧,公共脚本提供了一个复制最佳实践和特色工程思想的好方法。然而,公共脚本很容易过度适应公共 LB。鉴于各种用户对脚本的积极分流和对结果的现成评估,这意味着只有“更好”的脚本才能获得投票和公众的关注。某些脚本仅发布优化的参数,而没有通过交叉验证进行调整,这导致人们怀疑通过这些脚本获得的公开 LB 分数的可靠性。以下是我更详细的意思:
过度拟合公共 LB
我自己已经制作了几个非常相似的模型,我觉得我需要选择最好的一个来提交。由于我在比赛期间没有充裕的时间来慢慢回顾我的提交列表并评估更好的,我决定只选择公共 LB(公开分叉)上表现最好的脚本并提交它。结果是,我提交的模型在公共 LB 上给出的 AUC 为 0.842(在超过 5000 个条目中排名 644),将下滑到 0.825(排名 1620/5123),而我的尽职调优但简单的模型只会从 0.840 下降到 0.827(排名 145/5123)!这给了我一个非常重要的教训:相信技术,而不是短暂的分数。
组装
当然,事后看来,我应该知道最好的执行模型,但是当我只有公开的 LB 结果时,我应该如何选择我的提交?这就是集成的作用,它消除了过程中的猜测,同时减少了你的误差的方差。比赛结束后,我尝试了一个合奏,取了我选择的 4 个作品的天真平均值:
- 一个带有一些功能工程的公共脚本,在公共 LB 上得了 0.842 分(作者是一个叫 Mikhail 的家伙)
- 一个名为 xgb_lalala 的公共脚本(没有 cv,只有一组‘古怪的性能参数’)
- 我自己的脚本有和没有双向互动
结果几乎让我哭了(兴奋的泪水混合着悔恨的痛苦):
我希望这篇文章有所启发,不仅仅是技巧,还有面对排行榜上的激烈竞争坚持己见的重要性。
作为一名数据科学经理,我希望自己做得与众不同
原文:https://towardsdatascience.com/what-i-wish-id-done-differently-as-a-data-science-leader-on-centralizing-siloed-data-d7492fd0d03c?source=collection_archive---------7-----------------------
集中孤立的数据
I still get nostalgic looking at the very first Pebbles. (Photo courtesy of Pebble’s first Kickstarter)
2014 年,我加入了后来被 Fitbit 收购的智能手表制造商 Pebble,领导他们的数据科学和分析团队。
我对在硬件公司管理数据组织的挑战很感兴趣。我上一份全职工作是在脸书平台的一家视频游戏开发商那里,分析是公司的命脉。我们对从游戏内机制到用户获取的一切都进行了集中登录。
我知道在硬件公司工作会有所不同。我们会有很多我在以前的工作中遇到的相同的业务问题——客户在哪里找到我们的产品?他们如何使用它?我们怎样才能让它变得更好?—但要回答这些问题,可利用的数据有限得多。当顾客在百思买购买你的产品时,很难推断他们是从哪里听说你的,也很难衡量你的营销努力的影响。当客户被动地将您的产品戴在手腕上时,很难知道哪些客户每天都会使用该产品,哪些客户通常会将手表放在抽屉里。
My favorite watch face, on the Pebble Time Round.
在我在 Pebble 工作的两年中,我们想出了许多方法来了解人们如何使用 Pebble,并确定我们如何改进它。但是我们在分散在不同系统的数据上苦苦挣扎。
关键信息分布在多个存储库中:来自手表的日志保存在一个可查询的数据库中。营销数据存储在谷歌分析中,有时访问受到限制。销售数据存储在来自零售分销商的巨大、难以解析的电子表格中。客户支持查询和退货数据被锁定在不可查询的第三方工具中。
筒仓的问题
许多公司面临着同样的问题:集中分析团队只能访问公司不同业务职能部门的一小部分信息,而他们无法获得跨职能部门的支持,将孤立的数据集中到一个中心位置。
把所有数据放在一个地方的好处很容易得到口头上的支持。但实际上实现这一目标并不是一件轻而易举的事情,需要多个岗位的多个人坐下来达成共识。
如果孤立的数据没有直接和明确定义的增值,每个人都将难以将集中化优先于他们手头的所有其他任务。即使您使用的工具应该使数据集中化变得“简单”,您也必须找到合适的人,比如说,让您获得适当的身份验证令牌,以将孤立的数据源连接到您的中央数据存储,并且这个“简单”的任务可能会拖上几天,直到您取消优先级并有效地放弃它。
也可能有合理的理由保持数据孤岛,而组织的不同部分并不完全理解。例如,有些公司拥有敏感的客户数据,出于隐私原因,整个组织都不能访问这些数据。
The fence between the data you have and the data you need.
“可是我们没有数据啊!”
“我们没有数据”是数据工作者哀叹的标准部分。作为一名经理,我觉得我工作的一部分就是让我的团队向我倾诉他们日常工作中的琐事所带来的挑战。
我知道数据工作有多令人沮丧。您花了几个小时清理一堆杂乱的数据,只是为了可以对其运行一个简单的脚本,您发现日志中的漏洞和错误弄乱了您的整个方法,或者您发现自己无法回答高管们提出的问题,因为您需要的数据根本不存在。处理数据需要用头撞墙,作为经理,我的工作就是承认这种挫败感,并尽可能有效地帮助团队克服它。
有时,经理可以提供建设性的解决方案,实际上解决这些问题。实现一个 ETL 脚本来保持数据整洁!与工程部门讨论如何修复日志记录错误!与另一个团队合作,访问您需要的数据!但是通常最好的选择是鼓励团队找到变通的解决方案。人们很容易被问题的细节所困扰,开始让完美成为美好的敌人。尽可能经常地,我想让我的团队成员回到鸟瞰图,这样他们可以找到一个足够好的解决方案来有效地解决他们的问题。
为什么管理者会让“我们没有数据!”关注幻灯片
这就是为什么,当我团队中的人提出我们应该集中访问谷歌分析、Zendesk 或零售销售数据的时候,我经常不予理会。这些数据通常对解决他们眼前的问题并不重要,而且作为一名经理,我倾向于不优先考虑那些“值得拥有”的东西
我也有一种直觉,我们的团队可能并不了解为什么这些数据最终会成为孤岛的所有复杂的组织原因,所以我不想花费宝贵的时间和精力去追逐那些最终会成为死胡同的数据。
但是我希望,无论何时,当我的团队抱怨他们无法使用某些东西时,我会告诉他们去解决他们自己的问题。
去找电商团队谈 Google analytics 吧!
去和支持团队谈谈 Zendesk 吧!
去和销售团队谈销售渠道数据吧!
如果你想要数据,让它发生!没有人会比你更关心这些数据,所以你会优先考虑这些数据。我会给你所有你需要的工具,把它输入我们的中央数据库。如果你没有访问数据的权限,那是你要解决的问题。去拿吧!
Collect ALL the data!
让你的团队继续前进
我尽最大努力让我的团队去追逐他们需要的数据。但是在这些情况下,他们通常会带着一个新的理解回来,为什么他们认为容易的事情实际上很难,他们会放弃他们的担忧,继续他们的下一个任务。
我希望我进一步鼓励了他们,并告诉他们坚持下去。
虽然集中式数据的直接价值并不总是显而易见的,但我确实相信将所有数据放在一个地方会有剩余和复合效应。但是,经理们通常无法确定集中化任务的优先顺序。有太多的孤岛,太多的团队需要加入,太多的令人担忧的问题需要优先考虑。
自上而下的数据集中化方法—数据科学副总裁与营销副总裁、销售副总裁、运营副总裁和首席执行官合作—过于庞大。但是零敲碎打——让一个有积极性的数据工作者在另一个部门找到一个合作者,并继续集中他们能集中的任何一点点数据——可能会成功。
Pebble 拥有适合这种自下而上方法的文化。总的来说,我们是一群友好、体贴、慷慨、思想独立的人。我们的组织文化强调自主意识,没有人会因为初级团队成员主动解决他们关心的问题而被冒犯。
自下而上的数据集中化方法可能并不适用于每家公司,但总的来说,我认为数据科学经理可以受益于将数据获取的责任交给他们团队中投资于所述数据的任何成员。他们才是将要使用它的人——为什么他们不应该有责任倡导获取他们需要的数据呢?
如果我告诉你数据库索引是可以学*的呢?
原文:https://towardsdatascience.com/what-if-i-told-you-database-indexes-could-be-learned-6cf8f59bff94?source=collection_archive---------2-----------------------
不幸的是,这篇论文我没能在 NIPS 上看到,但在过去的几天里,它在 ML 圈子里引起了相当多的关注。这些作者中包括杰夫·迪恩(Jeff Dean),一位非常受尊敬的早期谷歌员工,他们有一个核心观点,他们在整篇论文中重申:在他们的核心,数据库索引是模型。它们可能(通常)不会被统计学*,但是它们是在输入(索引建立所基于的键)和输出(内存中的位置)之间提供映射(希望非常快)的结构。二叉树是用于有序数据的典型结构,它甚至采取树的形式,这是机器学*工具箱中的核心工具。
基于这一关键的直觉,论文接着提出了这样的问题:如果这些结构仅仅是模型,那么统计模型是否可以学*并利用被索引数据的分布,比我们目前使用的索引更好——更小,更高效?剧透:答案(至少对于数值数据类型)是肯定的。
例如,可能所有元素的长度都相同,并且数字键的位置随着每个键前进 5:在这种情况下,您可以很容易地学*键和位置之间的线性回归映射,这将比必须有条不紊地一个一个拆分的 B 树快得多。B 树在最糟糕的情况下是有效的,在这种情况下,键的位置的 CDF 密度(如果你把它们排成一行)确实是随机的,并且假设是未知的。
关于 B 树的一个有趣的事实是,每当有新数据加入时,它们都需要重新平衡,作者认为这个过程类似于模型的重新训练。因此,出于比较的目的,他们简单地比较了在训练集上的性能,因为 B 树和候选统计模型只有在被重新训练后才能工作。
架构和结果
作者从训练一个基线模型开始:一个两层,每层 32 个隐藏单元,密集连接的网络。这个模型有两个主要问题。
- 首先,它生成作为关键字函数的最小/最大搜索位置的预测非常慢:它最初是在 Tensorflow 中训练的,它的前期成本很高,对于这样小的模型来说不值得
- 其次,它只是在单个键的层面上不够准确。虽然它在学*累积密钥分布的整体形状方面做得很好,但它避免了过度适应 CDF 函数中的小局部变化,因此当您“放大”密钥空间的小区域时会变得不太准确。因此,与只进行全键扫描相比,它并没有显著加快查找过程。按照他们设计问题的方式,一个简单的模型可以很容易地将预期的搜索误差从 100 米减少到 10,000 米,但由于模型中固有的平滑假设,很难将它一直减少到 100 秒的数量级
提议的解决方案
这些问题有两个关键的解决方案:一个是实施细节,另一个是理论创新。第一种方法相对简单(至少在概念上):构建一个框架,在这个框架中,您可以在 Tensorflow 中训练模型,但是模型是在推理阶段用 C++评估的。这使得之前测试的基准模型的性能大幅提升:从 80,000 纳秒降至 30 纳秒。
第二,作为“最后一英里”准确性问题的解决方案,是递归模型。在这个框架中,我们首先训练一个“顶级”模型,它输出对钥匙位置的预测。然后,我们把空间分成,比方说,三个部分,然后分别为每个子区域学*一个模型。因此,例如,顶部模型可能预测键 4560 映射到 10000 长的存储区域中的位置 2000。因此,他们会根据顶级模型的预测,将观察结果组合在一起,并专门训练一个新模型,比如说,预测位置在 0 到 3500 之间的键。
当这种方法——使用更有意义的优化代码的分层模型——在具有数字键值的数据上进行尝试时,结果确实令人印象深刻。与 B 树相比,使用小得多的模型,学*索引实现了有意义的加速,超过 60%。值得注意的是,下面的结果是没有使用 GPU。这表明如果 GPU 在数据库硬件中变得更加标准,这种改进甚至可能会增加。
他们目前只展示了对数字键建模的工作,但建议将目前用于文本的更复杂的方法(RNNs,字符级 CNN)添加到这个通用框架中。
Results for lat/long of Maps data
那么,除了它可能导致新一代数据库索引设计的实际事实之外,为什么所有这些首先是有趣的呢?
首先,我要承认,在我心中,那些在一个知识领域的背景下重新构建另一个知识领域的论文有着特殊的地位。除了介绍一些引人注目的 ML 思想之外,这篇文章还让我更深入、更清晰地思考索引如何工作背后的机制,而在以前,这一直是我通常理解但没有深入研究的东西。
其次,这只是一个实际的事实,作为机器学*模型被用来优化运行它们的低级系统的一个例子,它似乎是有意义的。这是我记得看到的第一篇使用机器学*来优化计算过程本身的论文之一,但它似乎不太可能是最后一篇。
你的数据不正常怎么办?
原文:https://towardsdatascience.com/what-if-your-data-is-not-normal-d7293f7b8f0?source=collection_archive---------5-----------------------
在本文中,我们讨论了统计数据分析的切比雪夫界。在对给定数据集的正态性没有任何概念的情况下,该界限可用于衡量数据在平均值附*的集中程度。
介绍
这是万圣节周,在恶作剧和款待的间隙,我们这些数据极客正在社交媒体上为这个可爱的迷因窃笑。
你认为这是一个笑话?我告诉你,这可不是闹着玩的。这很吓人,符合万圣节的精神!
如果我们不能假设我们的大部分数据(商业、社会、经济或科学来源的)至少是*似“正常的”(即它们是由高斯过程或多个这样的过程的总和产生的),那么我们就注定要失败!
这里有一个非常简短的列表,列出了一些无效的东西,
- 六西格玛的整体概念
- 著名的68–95–99.7 法则
- 统计分析中 p =0.05 (来自 2 sigma 区间)的‘神圣’概念
够吓人吗?大家再多聊聊吧…
无所不能、无所不在的正态分布
让我们保持这一节的简短和甜蜜。
正态(高斯)分布是最广为人知的概率分布。这里有一些描述其功能和广泛适用性的文章的链接,
- 数据科学家为什么爱高斯
[## 为什么数据科学家喜欢高斯?
高斯分布如此受深度学*、机器学*工程师和…
towardsdatascience.com](/why-data-scientists-love-gaussian-6e7a7b726859)
- 如何在数据科学面试的统计部分占据优势
- 正态分布有什么重要的?
由于它出现在各个领域和中心极限定理 (CLT),这种分布在数据科学和分析中占据中心位置。
[## 正态分布-维基百科
在概率论中,正态(或高斯或高斯或拉普拉斯-高斯)分布是一种非常常见的连续…
en.wikipedia.org](https://en.wikipedia.org/wiki/Normal_distribution)
那么,有什么问题呢?
这一切都很好,有什么问题?
问题是,您经常会发现特定数据集的分布可能不满足正态性,即正态分布的特性。但是由于过度依赖正态假设,大多数商业分析框架都是为处理正态分布的数据集而定制的。
它几乎根深蒂固地存在于我们的潜意识中。
假设您被要求检测来自某个流程(工程或业务)的一批新数据是否有意义。通过“使有意义”,你的意思是新数据是否属于,即它是否在“预期范围”内。
这个‘期望’是什么?如何量化范围?
我们自动测量样本数据集的平均值和标准偏差,并继续检查新数据是否在特定的标准偏差范围内,就像受到潜意识驱动的指引一样。
如果我们必须在 95%的置信范围内工作,那么我们很高兴看到数据落在 2 个标准差以内。如果我们需要更严格的界限,我们检查 3 或 4 个标准偏差。我们计算 Cpk ,或者我们遵循六西格玛的质量 ppm (百万分率)标准。
所有这些计算都基于一个隐含的假设,即总体数据(而非样本)遵循高斯分布,也就是说,所有数据(过去和现在)生成的基本过程由左侧的模式控制。
但是如果数据遵循右边的模式会发生什么呢?
或者,这个,还有……那个?
数据不正态时有没有更普适的界限?
最终,我们仍然需要一种数学上合理的技术来量化我们的置信区间,即使数据不正常。这意味着,我们的计算可能会有一点改变,但我们仍然可以这样说-
“在距平均值一定距离处观察到一个新数据点的概率是这样那样……”
显然,我们需要寻找一个比 68–95–99.7(相当于距离平均值 1/2/3 的标准偏差)更普遍的界限。
幸运的是,有一种这样的束缚叫做“切比雪夫束缚”。
什么是切比雪夫界,它有什么用?
切比雪夫不等式(也称为 Bienaymé-Chebyshev 不等式)保证,对于一大类概率分布,不超过某个分数的值与平均值的距离不超过某个距离。
具体来说,不超过 1/ k 个分布值可以超过 k 个偏离平均值的标准偏差(或者等价地,至少1 1/k个分布值在平均值的 k 个标准偏差内)。
它适用于几乎无限类型的概率分布,并且基于比正态性更宽松的假设。
它是如何工作的?
即使你对你的数据背后的秘密过程一无所知,也有很大的机会你可以说出下面的话,
“我相信所有数据的 75%应该在平均值的 2 个标准偏差之内”,
或者,
我相信 89%的数据应该在平均值的 3 个标准偏差之内”。
这是任意分布的情况,
Image Credit: https://2012books.lardbucket.org/books/beginning-statistics/s06-05-the-empirical-rule-and-chebysh.html
如何应用?
正如您现在所猜测的,您的数据分析的基本机制不需要做任何改变。您仍将收集数据样本(越大越好),计算您*惯计算的两个量——平均值和标准差,然后应用新的界限,而不是 68–95–99.7 规则。
该表如下所示(这里 k 表示远离平均值的许多标准偏差),
Image: https://en.wikipedia.org/wiki/Chebyshev%27s_inequality
这里是它的应用的视频演示,
有什么条件?为什么人们不用这种‘更普遍’的束缚呢?
通过查看表格或数学定义,很明显有什么问题。切比雪夫规则在对数据设限方面比高斯规则弱得多。
与正态分布的模式相比,它遵循 1/k 模式。
例如,要以 95%的置信度绑定任何东西,您需要包括多达 4.5 个标准差的数据,而不是只有 2 个标准差(对于正常情况)。
但是当数据看起来一点也不像正态分布时,它仍然可以挽救这一天。
还有更好的吗?
还有一个界叫做“ 切尔诺夫界”/赫夫丁不等式 它给出了独立随机变量和的指数锐尾分布(与 1/k 相比)。
当数据看起来不正常时,这也可以用来代替高斯分布,但是只有当我们高度确信底层过程由彼此完全独立的子过程组成时。
不幸的是,在许多社会和商业案例中,最终数据是许多子流程极其复杂的交互的结果,这些子流程可能具有很强的相互依赖性。
摘要
在本文中,我们了解了一种特殊类型的统计界限,它可以应用于与正态假设无关的最大可能的数据分布。当我们对数据的真实来源知之甚少,并且不能假设它遵循高斯分布时,这就很方便了。该界限遵循幂律,而不是指数性质(如高斯),因此较弱。但是它是一个重要的工具,可以用来分析任意类型的数据分布。
你可以查看作者的 GitHub 知识库 中其他有趣的 Python、R 或 MATLAB 代码片段和机器学*资源。如果你像我一样,对机器学*/数据科学充满热情,请随时在 LinkedIn 上添加我或在 Twitter 上关注我。
* [## Tirthajyoti Sarkar -数据科学工程经理- Adapdix Corporation | LinkedIn
将 AI/ML 的力量放在工业 4.0 和下一代智能工厂的边缘。将人工智能引入工业领域…
www.linkedin.com](https://www.linkedin.com/in/tirthajyoti-sarkar-2127aa7/)*
英特尔最*的举动将如何影响深度学*
原文:https://towardsdatascience.com/what-intel-acquiring-and-integrating-vertex-ai-with-movidius-means-for-deep-learning-16c0055dc99c?source=collection_archive---------7-----------------------
谁没听说过英特尔这个引领处理器发展的科技巨头呢?虽然它曾经引领计算设备行业,但由于竞争对手不断涌现,用于移动设备和其他下一代设备的处理器不断涌现,它的声誉最*正慢慢黯然失色。幸运的是,这位技术领袖并不打算很快被淹没。引用 Ingrid Lunden 在她的 TechCrunch 文章中的话,
该公司的目标是成为下一波计算浪潮的中心,这是其关注 R&D 和其他人工智能投资的更广泛背景。
没错:英特尔曾经引领计算领域的潮流,它计划在人工智能领域也这样做。这一努力的最新步骤是:获得顶点。AI,正如 2018 年 8 月 16 日宣布的那样,并让这个团队与英特尔的 Movidius 团队一起工作。
Image by author
不太清楚这意味着什么,以及它将如何影响深度学*,是吗?我们将把它分成几个部分,理解每一个部分,以便更好地了解全局。在这样做的时候,我们将看到这一举动将如何影响这一领域的进展。
云:去而复返
机器学*(ML)或深度学*(DL)模型需要经过训练、测试和部署才能适合使用,这就是问题所在:这些需要大量的计算!随着更好更复杂的算法被开发出来,笔记本电脑再也无法在合理的时间范围内应付了。谁会愿意让自己的笔记本电脑连续四天不停地进行数学运算呢?因此,开发人员借助谷歌云平台和亚马逊网络服务等服务,将他们的模型运行在云上。通过这种方式,他们可以腾出笔记本电脑来执行其他任务。
这些解决方案虽然在某种意义上很方便,因为开发人员现在可以免费使用他们的笔记本电脑,但不幸的是,它们并不适合解决速度至关重要的问题,换句话说,就是实时问题(下面将提到一些例子)。随着越来越多的人使用这种服务,集中式云计算预计会变得很麻烦,因为通信期间的延迟预计会增加。如果开发人员有一些设备,如 USB,其目的是做这些密集的计算,模型可以部署在本地,并给出几乎即时的响应…进入英特尔 Movidius!
英特尔移动
正如 Siraj Raval 的视频中所描述的,英特尔 Movidius 神经计算棒由英特尔的一个名为 Intel Movidius 的团队创建,是一种将模型从“云”(在线,在远程服务器中)带到“边缘”(本地)的设备。换句话说,它允许用户在本地测试和部署模型。由于不需要与数据服务器通信,实时使用现在可以更快地完成。此外,由于数据保存在本地,不会发送到中央服务器,因此数据隐私问题较少。
应用多种多样,例如智能安全摄像头、手势控制无人机和工业机器视觉设备,如英特尔 NCS 页面所述。请注意,在这些应用程序中,速度是最重要的。例如,在手势控制的无人机场景中,如果无人机检测到有人向它投掷物体,最好的解决方案是尽可能快地躲开,立即做出决定,而不是记录场景,将其发送到服务器,等待回复,然后根据回复采取行动。
好吧,但这和顶点有什么关系?AI?好吧,我们会查出来的!
顶点。人工智能,以及他们加入英特尔将如何影响深度学*
顶点。AI 是一家创业公司,在他们的网站上写着如下宗旨:
我们正致力于将神经网络的力量应用到每一个应用中,使用内部发明和构建的新技术,使不可能的应用成为可能。
顶点。AI 正在建立一个名为 PlaidML 的平台,其任务是在任何设备上启用高性能神经网络。这的确是一个非常崇高的使命,因为正如该项目的 Github 资源库所提到的那样,它们已经是实现这种算法与操作系统(Linux、Windows、macOS)和硬件(Intel、AMD、ARM 等)兼容的最快和最简单的平台。嗯……最快最简单,那么这会给用户的预算造成多大的缺口呢?这个项目是开源的(因此 Github 上的任何人都可以看到),这个平台是免费使用的!
A comparison of PlaidML with alternative tensor compilers (TVM and Tensorflow Comprehension)
现在我们有了不同的拼图。剩下的就是把它们放在一起。
- 英特尔 Movidius 团队努力工作,推出了英特尔 Movidius 神经计算棒,可以对本地部署的模型进行计算。这提高了速度,消除了与中央数据服务器通信的需要。
- 英特尔收购了 Vertex。简而言之,AI 的目的是让深度学*在任何地方都能工作,并计划让这个团队与英特尔 Movidius 一起工作。
(Sourced from https://www.cbronline.com/news/startup-vertex-ai)
在未来几年(如果不是几个月的话)可以预期的是,实时深度学*应用(由 Movidius 实现)的繁荣,在所有平台上工作(由 Vertex 实现)。AI)。随着两个团队共同努力实现他们设定的目标,以及对这种组合的认识的提高,这种增长将会发生。实时应用将会像我们想象的那样丰富多彩,并将有助于推动人类沿着人工智能的道路前进。
如果你喜欢这篇文章,请给它一个掌声,这样其他人也可以找到它。在数据科学社区中互相帮助总是好的:)
Hans A. Gunnoo 是一名数据科学家,他的职业生涯始于电子工程,后来专攻机器学*。他还在业余时间为开源人工智能项目和关于数据科学领域最新趋势的博客做出贡献。
什么是 DAPP?
原文:https://towardsdatascience.com/what-is-a-dapp-a455ac5f7def?source=collection_archive---------5-----------------------
Apps vs. DAPPs
DAPP(分布式应用程序)由运行在分布式对等网络上的后端代码组成。DAPP 也可以有一个用户界面,由调用后端的前端代码创建。DAPPs 不需要一个中央机构来运行:它们允许用户和提供商之间的直接交互。
DAPPs 的特性
DAPPs 通常具有以下特征:
- 他们在区块链上奔跑
- 他们的代码是开源的,自主运行,没有任何人或团体控制大多数令牌
- 它们生成 DAPP 令牌来为它们的贡献节点提供价值
- 用户被授予对它们的访问权以换取令牌
- 当矿工成功地为生态系统做出贡献时,他们会得到代币作为奖励
Unlike most Apps in use today, DAPPs store all their data on a blockchain and have their back end code running on a blockchain instead of with a central authority.
DAPPs 的种类
以太坊描绘了 DAPPs 的三个主要类别:
1.资金管理应用:用户可以在区块链网络上使用其固有货币进行交易。这些 DAPPs 通常都有自己的区块链,我们通常称之为加密货币(比如比特币)。
2.将金钱与外部真实事件相结合的应用程序:例如,一家物流公司可能使用 RFID 芯片位置来确定一批货物已经到达港口,然后才支付货款。如果买卖双方签订一份智能合同,这甚至可以用区块链上的资金完成,无需人工干预。
3.分散自治组织(DAOs):区块链上分散的、无领导的组织。这些从概念开始,根据编程定义的规则运行,这些规则关于什么实体可以是成员,成员如何投票,他们可以从事什么业务或活动,以及代币、资金或价值如何交换。一旦部署,DAPPs 会根据它们的规则自动运行。他们的成员可以在地理上分散在任何地方。
迄今为止,DAPP 初创公司(建立在区块链平台之上)已经构成了 ico 的大部分。大多数当前的 2 类和 3 类 DAPPs 使用以太坊平台。
DAPPs present a new paradigm for fintech and money management related applications.
为什么是 DAPPs?
DAPPs 本质上允许所有后端代码和数据去中心化,因此是不可变的和防篡改的。考虑到这些应用的分散性质,再加上保护区块链数据的机制,DAPPs 有潜力开启各种各样的用例。
创建 DAPP 而不是普通应用程序的一些好处包括:
支付处理:无需与法定支付提供商集成来接受用户资金,因为用户可以直接使用加密货币进行交易
用户证书:使用公钥和私钥系统,用户可以轻松地以不同程度的匿名处理和绑定他们的用户会话和元数据,无需冗长的注册或登记过程
信任和可审计性:聪明的用户可以访问和理解开源的 DAPP 代码。封闭数据的这种透明性和固有的安全性产生了对应用程序的信心。区块链上的公共记录也使得交易信息易于被用户或第三方审计
Ethereum is currently the platform of choice for DAPP developers, with several extremely promising contending platforms closing in.
结论
DAPP 的前景正在迅速演变。虽然以太坊目前是 DAPP 开发人员的首选平台,但 Cardano、Lisk、QTUM 和 NEO 也是 DAPP 开发的热门平台。也有许多努力正在进行中,以建立其他大规模的 DAPP 平台。
DAPP 开发正处于萌芽阶段,但 DAPP 提供的优势(传统的集中式应用程序没有)表明,我们可以期待在不久的将来看到区块链技术令人印象深刻的新功能和用例。
—
陕雷
关注 Lansaar Research 关于媒体的最新新兴技术和新商业模式。
什么是“数据工程师?”
原文:https://towardsdatascience.com/what-is-a-data-engineer-bee7a2d82667?source=collection_archive---------6-----------------------
今年早些时候,我的老板与我和一位同事一起为我们的团队定义了一个新职位——数据工程师职位。这让我很兴奋,因为自从进入大学毕业后的职业生涯以来,我一直有一个不幸的*惯,那就是从事与他们的头衔或描述不符的工作。在研究了其他公司如何描述相同的职位后,我意识到这最接*我目前的职责(以及我的兴趣)。
上周,我有机会描述了我的职业道路,以及在此基础上,我如何解释我目前作为一名数据工程师的职责。我进一步解释了我所看到的“数据工程师”和其他几个热门的数据相关职业(包括著名的“数据科学家”)之间的区别。最终目标是帮助一个同为多面手的人(也在市场运营部门工作)决定她在职业生涯中可能有哪些选择。
在收到积极的反馈后,我决定写下我的想法来阐明我所看到的数据工程。
我怎么会在这里
大学一毕业(拥有数学学位),我就在临床研究领域找到了一份“治疗数据分析师”的工作它通常被描述为一个数据科学家类型的角色,在谷歌搜索这个术语并看到它是一个有前途的职业后,我就接受了这个角色。几年后,随着对行业标准术语有了更多的了解,我把它更多地描述为一个商业智能分析师,也就是说,把来自不同来源的数据拉进中小企业的标准报告中。这里和那里都涉及到数据科学——我们会被要求根据数据帮助做出决定,然后我们会创建用 r 编写的定制算法。
随着时间的推移,我意识到我们的许多业务问题可以通过提供对我们正在使用的数据的更容易的访问来解决,这个角色演变成了一个商业智能工程师。我的日日夜夜都专注于数据库设计、ETL 工作、与供应商应用程序的基本集成,以及设计用户界面(虽然有些糟糕,但总比没有好)。我保留了我最初的头衔——治疗数据分析师——当我开始寻找职业生涯的下一步时,这是一个障碍,因为我没有合适的词语来描述我正在做什么或想要做什么。
当我作为一名解决方案工程师被 Red Hat 聘为营销运营时,这份工作被官方描述为用最新的 NodeJS 栈构建内部的、面向用户的工具。鉴于我的技能,我有机会从事我们的营销自动化基础设施的工作(当时主要是在 Eloqua 的程序构建器界面中构建的)。日常工作包括设计新的数据自动化流程,并使用数据分析对现有流程进行故障排除。但是,随着解决方案工程师团队越来越关注 javascript 应用程序,我们需要对数据人员所做的事情进行新的描述。看了几篇很有帮助的博文(数据工程师的崛起),我们团队的数据工程师工作诞生了。
有什么区别?
我和我的数据工程师( D E)同事认为自己是构建健壮、一致、高质量数据流程的人。我们中的一些人有不同的关注点(例如,开发接*实时的销售线索数据管道与维护全球数据仓库和仪表板),但质量和一致性是我们的共同因素。
我们的目标还包括教育和鼓励其他企业用户如何最好地使用和应用可用数据。由于我们最接*数据创建级别,我们通常是理解数据可能具有的潜在假设和警告的专家(这对于做出基于数据和数据驱动的决策至关重要)。
我们的营销运营团队有许多面向数据的角色,因此区分这些角色的起点和终点非常重要:
- 应用工程师:这两个职位通常需要相同的技能(面向对象编程,解决问题),但是应用工程师通常在 UX 投资更多。DEs 也有潜在的更大的错误后果,包括数据修复工作和收入损失。
- 数据分析师:通常专注于解释和说明数据,以帮助业务用户做出更好的决策。虽然涉及到分析,但对于 DE 来说,其目的通常是排除故障和改进现有的基础设施。
- 数据科学家:热门职业,有时从 BI 分析师到机器学*专家不等(因为是比较年轻的职业,像德,没那么多固化的定义)。在不知不觉中,DE 角色经常有很多重叠,因为数据科学家需要干净、标准化的数据来进行分析。
我希望这能为一些人提供数据工程的有用解释,以及它与其他数据职业的关系。考虑到数据收集和使用的迅速发展,对进入这个行业的人来说,清楚地了解这些选项是很重要的。
请随时留下您的想法、问题或不同意见!
什么是决策树?
原文:https://towardsdatascience.com/what-is-a-decision-tree-22975f00f3e1?source=collection_archive---------2-----------------------
银行在考虑是否向某人提供贷款时,通常会考虑一系列问题,以判断向个人提供贷款是否安全。那些问题可以从人有什么样的收入这样简单的问题开始。如果介于 30-70,000 美元之间,他们会继续回答下一个问题。他们目前的工作做了多长时间?如果 1-5 年后,这会导致他们的下一个问题:他们会用信用卡付款吗?如果是,他们会提供贷款,如果不是,他们不会。这个过程最基本的形式是决策树。
决策树是用于回归和分类问题的大量使用的非参数有效机器学*建模技术。为了找到解决方案,决策树根据预测数据对结果变量进行连续的、分层的决策。
那么这一切意味着什么呢?
分层意味着模型由一系列问题定义,当应用于任何观察时,这些问题导致一个类别标签或一个值。一旦建立起来,模型就像一系列“如果这发生,那么这发生”条件中的协议,从输入数据产生特定的结果。
非参数方法意味着没有关于误差或数据分布的潜在假设。它基本上意味着模型是基于观察到的数据构建的。
目标变量使用一组离散值的决策树模型被分类为分类树。在这些树中,每个节点或叶子代表类标签,而分支代表导致类标签的特征的合取。目标变量取连续值(通常是数字)的决策树称为回归树。这两种类型通常在 CART(分类和回归树)中一起被提及。
每个购物车模型都是有向无环图的一个例子。这些图具有表示关于给定预测值的主变量的决策点的节点,边是节点之间的连接。在上面的贷款场景中,30-70 美元是一个优势,而“工作年限”是节点。
由于决策树的目标是在每个节点的末端做出最佳选择,因此它需要一种能够做到这一点的算法。这种算法被称为亨特算法,它既贪婪又递归。贪婪意味着在步骤中它做出最优决策,递归意味着它将较大的问题分成较小的问题,并以相同的方式解决它们。根据称为纯度的度量标准,决定在每个节点进行拆分。当一个节点被 50/50 平均分割时,它是 100%不纯的,当它的所有数据都属于一个类时,它是 100%纯的。
为了优化我们的模型,我们需要达到最大纯度并避免杂质。为了衡量这一点,我们使用了基尼系数,它衡量随机选择的元素被错误标记的频率,如果它是根据分布随机标记的。它的计算方法是将标签为 I 的物品被选中的概率 pi 乘以时间分类错误的概率(1–pi)。我们的目标是让它达到 0,在这里它将是最小不纯的,最大纯的,属于一个类别。
使用的另一个度量是信息增益,它用于决定在树的每一步拆分什么特征。这是通过维基百科精心设计的方程式计算出来的,
Information Gain = Entropy(parent) - Weighted Sum of Entropy(Children).
虽然这是一个很好的模型,但它确实存在一个很大的问题,即当所有信息都在一个类或属性中时,它会停止运行。以偏差为代价,这个模型的方差是巨大的,肯定会导致过度拟合。“决策树学*者可以创建过于复杂的树,这些树不能很好地从训练数据中归纳出来。”那么网络如何应对这种情况呢?我们可以设置决策树的最大深度(即,它将深入多少个节点(上面的贷款树的深度为 3 )),和/或另一种方法是指定做出每个决策所需的最小数据点数。
决策树的其他缺点是什么:它使用贪婪算法进行局部优化,我们不能保证返回到全局最优的决策树。如果单个类接受一个数据集,这是一个令人难以置信的有偏差的模型,除非数据集在放入树中之前是平衡的。
虽然有缺点,但决策树也有很多优点。
由于它们的可视化表示,它们非常容易理解,它们需要很少的数据,可以处理定性和定量数据,可以使用统计集进行验证,可以处理大量数据,并且计算成本非常低。
我希望这篇文章能帮助你更好地理解决策树。对于编码和更多关于它们的知识,我强烈建议您查看关于决策树的 Scikit-Learns 文档。
什么是生成性对抗网络?
原文:https://towardsdatascience.com/what-is-a-generative-adversarial-network-76898dd7ea65?source=collection_archive---------6-----------------------
生成模型中有什么?
在我们开始讨论生成对抗网络 (GANs)之前,有必要问一个问题:生成模型中有什么?为什么我们甚至想拥有这样的东西?目标是什么?这些问题可以帮助我们思考如何更好地与 GANs 合作。
那么我们为什么想要一个生成模型呢?嗯,名字里就有!我们希望创造一些东西。但是我们希望产生什么呢?通常,我们希望生成数据(我知道,不是很具体)。除此之外,我们很可能希望生成以前从未见过的数据,但仍然适合某种数据分布(即我们已经放在一边的某种预定义数据集)。
这样一个生成模型的目标是什么?变得如此善于提出新生成的内容,以至于我们(或任何正在观察样本的系统)再也无法区分什么是原创的,什么是生成的。一旦我们有了一个可以做这么多的系统,我们就可以自由地开始产生我们以前从未见过的新样本,但仍然是令人信服的真实数据。
为了更深入一点,我们希望我们的生成模型能够准确地估计我们真实数据的概率分布。我们会说,如果我们有一个参数 W,我们希望找到使真实样本的可能性最大化的参数 W。当我们训练我们的生成模型时,我们找到这个理想的参数 W,使得我们最小化我们对数据分布的估计和实际数据分布之间的距离。
分布之间距离的一个很好的度量是 Kullback-Leibler 散度,它表明最大化对数似然相当于最小化这个距离。采用我们的参数化生成模型,并最小化它与实际数据分布之间的距离,这就是我们如何创建一个好的生成模型。它还把我们带到了两种类型的生成模型的分支。
显式分布生成模型
显式分布生成模型提出显式定义的生成模型分布。然后,它通过对数据样本的训练来改进这种明确定义的参数化估计。显式分布生成模型的一个例子是变分自动编码器 (VAE)。VAEs 需要一个明确假定的先验分布和似然分布。他们使用这两个组成部分得出一个“变分*似”来评估他们的表现。由于这些需求和这个组件,vae 必须显式分布。
隐式分布生成模型
就像你可能已经放在一起的一样,隐式分布的生成模型不需要对它们的模型分布进行显式定义。相反,这些模型通过从其参数化分布中间接采样数据来训练自己。你可能已经猜到了,这就是 GAN 所做的。
它到底是怎么做到的?让我们深入研究一下 GANs,然后开始描绘这幅画面。
高级 GAN 理解
生成敌对网络的名字有三个组成部分。我们已经谈到了生成方面,网络方面是不言自明的。但是对抗性的部分呢?
GAN 网络由两部分组成,一个发生器(G)和一个鉴别器(D)。这两个组件一起出现在网络中,作为对手工作,推动彼此的性能。
发电机
生成器负责生成虚假的数据示例。它将一些潜在变量(我们称之为 z)作为输入,输出与原始数据集中的数据形式相同的数据。
潜变量是隐藏变量。当谈到甘时,我们有一个“潜在空间”的概念,我们可以从中取样。我们可以不断地滑过这个潜在的空间,当你有一个训练有素的 GAN 时,它会对输出产生实质性的影响(有时是可以理解的影响)。
如果我们的潜在变量是 z,我们的目标变量是 x,我们可以把网络的生成器看作是学*一个从 z(潜在空间)映射到 x(希望是真实的数据分布)的函数。
鉴别器
鉴别者的作用就是鉴别。它负责接收样本列表,并预测给定样本是真是假。如果鉴别器认为样本是真实的,它将输出更高的概率。
我们可以把我们的鉴别器想象成某种“扯淡检测器”。
对抗性竞争
这两个组成部分走到一起,一决雌雄。生成器和鉴别器彼此对立,试图最大化相反的目标:生成器希望创建看起来越来越真实的样本,而鉴别器希望总是正确地分类样本来自哪里。
事实上,这些目标是彼此直接对立的,这也是 GANs 名字中对抗性部分的由来。
谁不爱用一个好的比喻来学*理解一个概念呢?
艺术品赝品
当我第一次了解甘斯时,我最喜欢的比喻是伪造者对批评家的比喻。在这个比喻中,我们创造者是一个试图伪造艺术品的罪犯,而我们的鉴别者是一个艺术评论家,他应该能够正确地鉴别一件作品是赝品还是真品。
两者来回往复,彼此直接对立。试图超越他人,因为他们的工作依赖于此。
伪造的货币
如果不是艺术品伪造任务,而是我们有一个试图制造假币的罪犯和一个试图确保他们不接受任何假币的银行实*生。
也许在开始的时候罪犯是非常坏的。他们进来,试图递给实*生一张纸,上面用蜡笔画着一美元钞票。这明显是假美元。但也许实*生也真的不擅长他们的工作,并努力弄清楚这是不是真的假的。两个人都会从他们的第一次互动中学到很多。第二天,当罪犯进来的时候,他们的假钱会变得更难辨别真假。
在日复一日的活动中,这两个人来来回回,变得非常擅长他们的工作。然而,在某一点上,可能有一天两者会达到某种平衡。从那里,罪犯的假美元变得如此逼真,甚至没有一个经验丰富的专家甚至可以开始告诉它是假的还是真的。
那是银行实*生被解雇的日子。
这也是我们利用我们的罪犯变得非常富有的一天!
鹦鹉
前两个例子非常直观。但是一个稍微不同的例子呢。
假设我们的发电机是我们的宠物鹦鹉,我们的鉴别者是我们的弟弟。每天,我们坐在窗帘后面,我们的鹦鹉坐在另一个窗帘后面。我们的鹦鹉会试着模仿我们的声音来愚弄我们的弟弟。如果他成功了,我们就请他吃一顿。如果我们的兄弟猜对了我们在哪个窗帘后面,我们会给我们的兄弟一份礼物(希望不是给我们的鹦鹉的礼物)。
可能一开始,鹦鹉真的不擅长模仿我们的声音。但是日复一日的练*,我们的鹦鹉也许能够发展出完美地模仿我们声音的技能。在这一点上,我们已经训练我们的鹦鹉像我们一样说话,我们可以成为网络名人。
得分!
怪物背后的数学
在我们结束对 GAN 的介绍之前,有必要稍微详细地探索一下 GAN 背后的数学。gan 的目标是通过求解以下 minimax 方程,在网络的两部分之间找到平衡:
我们称这个方程为极大极小方程,因为我们试图联合优化两个参数化网络 G 和 D,以找到两者之间的平衡。我们希望最大化 D 的混乱,同时最小化 g 的失败。当求解时,我们的参数化的、隐式的、生成的数据分布应该相当好地匹配底层的原始数据分布。
为了进一步分解等式的各个部分,让我们多分析和思考一下。从 D 这一边,它想最大化这个方程。当一个真正的样本进来时,它希望最大化它的输出,当一个假样本进来时,它希望最小化它的输出。这就是等式右半部分的本质所在。另一方面,当 G 得到一个假样本时,它试图欺骗 D 使其产量最大化。这就是为什么 D 试图最大化而 G 试图最小化。
由于最小化/最大化,我们得到了 minimax 这个术语。
现在,假设 G 和 D 被很好地参数化,因此有足够的学*能力,这个极大极小方程可以帮助我们达到两者之间的纳什均衡。这是理想的。
如何实现这一点?
简单:我们只是来回迭代。
开玩笑的。其实并不简单。但是我们可以简单地描述一下。
首先,我们将首先训练 D 成为固定版本 G 上的最佳分类器。从那里,我们固定 D 并训练 G 以最好地愚弄固定 D。通过来回迭代,我们可以优化我们的极大极小方程,直到 D 不再能够区分真实和虚假样本,因为我们的生成数据分布或多或少无法与实际数据分布区分开来。此时,D 将为它遇到的每个样本输出 50%的概率。
包扎
这就是我们对甘斯的介绍。但是男孩还有更多!我们只是刚刚开始触及表面,在高层次上触及一切。然而,还有更多的错综复杂的事情要发生。并非所有事情都像我们目前概述的那样简单,在真实环境中训练 GAN 实际上可能非常困难。出于这个原因,我们将在后面的帖子中更深入地讨论 GANs 的组件、问题、突破、变化等等。现在,只要陶醉于这样一个事实:你正在理解生成模型和 GANs 的神奇世界!
如果你喜欢这篇文章,或者发现它在任何方面都有帮助,如果你给我一大笔一美元或两美元来资助我的机器学*教育和研究,我会永远爱你!每一美元都让我离成功更*一步,我永远心存感激。
敬请关注*期更多 GAN 博客!
P.S .非常感谢生成性对抗网络及其变体如何工作:GAN 概述的作者,他们帮助启发了我,让我对 GAN 如何工作有了更多的了解。如果没有他们的论文,这个系列是不可能完成的。
最初发表于T5【hunterheidenreich.com】。
卷积神经网络新手入门
原文:https://towardsdatascience.com/what-is-a-neural-network-6010edabde2b?source=collection_archive---------2-----------------------
这是一只狗。
Image 1: Dog // Source
这是一只猫。
Image 2: Cat // Source
当我们的眼睛看到这两张图片时,我们的大脑会立即告诉我们正在展示的是哪种动物。很简单,对吧?但是如果你不得不教一台机器区分猫和狗呢?
如果我们仅仅依靠我们在学校学*的基于逻辑的(“传统”)编程,这几乎是不可能的。我们可以尝试对猫和狗的特征进行分类,比如说,猫有尖尖的耳朵和锋利的爪子,而狗通常有较平的耳朵和较钝的爪子。因此,如果动物有尖尖的耳朵和锋利的爪子,那么它就是猫。如果不是,那就是狗。
然而,这也带来了许多问题。首先,有很多例外。有尖耳朵的狗和耷拉着耳朵的猫。还有,有很多猫不露出爪子的画面。除非我们手动编程所有的例外——会有很多——很难简单地通过从列表中勾掉它们的特征来简单地区分这两种动物。其次,机器将如何识别图片是否包含尖耳朵?图像没有标签说{尖耳朵:真,尖爪子:真},这意味着我们必须自己找到一种方法来确定它。当我们看图片时,我们会自动看到尖尖的耳朵和锋利的爪子,但机器如何学*呢?
当我们看到一只狗的图像时,我们大脑中的某些神经元受到刺激,向其他神经元发送信号,其他神经元向更多的神经元发送信号,最终导致某些神经元被激活,“告诉”我们看到了一只狗。神经网络试图模拟这一过程,建立一个“迷你大脑”,可以完成简单的任务,如区分猫和狗。
Image 3: Basic neural network // Source
最基本的神经网络看起来像这样。我们从神经元的输入层开始,它激活隐藏层的神经元,然后激活输出层的神经元。把上图中的每个圆圈想象成一个神经元。每个神经元包含一个数字,称为它的激活。
在狗和猫的例子中,给我们一张照片,我们必须区分它是狗还是猫。所以我们的输入是照片,我们的输出是它是猫的概率和它是狗的概率。
为了简单起见,我们只给机器黑白照片。假设我们传入一张尺寸为 64 x 64 像素的照片:我们有 64 x 64 = 4096 像素。这些像素中的每一个都有一个对应于像素灰度值的数字。下图中的每个像素都有一个从 0 到 255 的数字,0 代表黑色,255 代表白色。
Image 4: Input image // Source
因此,输入层将由 4096 个激活排列在一起的神经元组成,或者由 4096 个数字组成的数组(列表)。
当我们传入一张大小不是 64 x 64 像素的照片时会发生什么?神经网络有一个固定的输入层大小,这意味着它必须分析 64 x 64 像素的照片。如果我们传入的照片比这个大,我们可以给机器编程,只分析中间的 64 x 64 像素,或者缩小整张照片,直到它达到那个尺寸。如果我们传入的照片小于 64 x 64,我们可以放大照片,或者干脆不分析。当然,64 这个数字是我选择的。您可以在每次运行时更改输入大小。计算机科学家通过实验发现,分析正方形部分(例如 64 x 64,而不是 64 x 70)会产生更好的结果,所以通常我们会继续分析正方形部分。
另一方面,输出层应该只包含两个神经元:一个神经元表示它是猫的概率,另一个表示它是狗的概率。理想情况下,如果我们传入一张猫的照片,我们应该得到这样的结果:
Image 5: Cat output
或者,从数值上来说,是这样的数组:[1.00,0.00]。
如果我们传入一张狗的照片,我们应该得到相反的结果。然而,更有可能的是,一个训练有素的神经网络可能会产生这样的结果:
Image 6: Dog output
或者,从数值上来说,是这样的数组:[0.98,0.02]。
神经网络训练得越好,就越接*正确答案。
在输入层和输出层之间,有几个隐藏层。在上图中,只显示了一个由 5 个神经元组成的隐藏层,但大多数神经网络都有多个包含许多神经元的隐藏层。理想情况下,我们可以想象每一层都有特定的用途;例如,第二层(第一隐藏层)将识别动物的轮廓,第三层将识别某些形状(如圆形),第四层将识别动物部分(例如,圆内的圆可能是眼睛和瞳孔),最后一层(输出层)将根据动物部分的特征识别它是猫还是狗。
这是怎么回事?这个网站展示了如何很好地分析图像的特征。这里,人的输入图像被转换成人的轮廓的输出。
Image 7: Convolution layer
这可以简单地通过抓取 9 个像素(3 x 3,如输入图像的左上角所示)并将 9 个像素中的每一个乘以某个数字,然后将它们加在一起来完成。在本例中,9 个像素乘以这些数字:
Image 8: Convolution kernel
左上角的像素灰度数乘以-1,右上角的像素灰度数乘以-1…等等。然后,所有的数字加在一起,这个新的灰度值就是输出图像中相关像素的数量。这里,输出是-172,所以输出图像中红色框中的像素是黑色的。
或者,简单地说,机器在一个 3×3 矩阵中取 9 个像素,并让它与另一个 3×3 矩阵进行标量乘法,以产生新图像的新灰度数。
然后,机器向下移动到下一组 3 x 3 像素,如下所示:
Image 9: Convolution layer
它会继续下去,直到创建一个完整的输出图像,只包含原始图像的轮廓。
同样的事情也可以用我们的狗对猫神经网络的前两层来做。狗或猫的照片被传入,然后经过一个变换矩阵,在图片中勾勒出动物的轮廓,以创建一个新的轮廓图片。新轮廓图片中的每个像素是第二层中的一个神经元。
在两层之间可以进行不止一次转换。例如,我们可以选择突出狗图片的垂直边缘和水平边缘。这是两个需要两个变换矩阵的变换,将产生两个输出图像。在这种情况下,两个图像(及其像素)可以放在一起形成第二层。这样,第二层不必包含与输入层相同数量的神经元;事实上,神经网络中的每一层都不需要拥有相同数量的神经元。
从第二层开始,对图像进行更多的变换以产生其余的隐藏层。最后一个隐藏层然后经历最后的变换,产生两个数字:它是猫的概率和它是狗的概率。
该视频展示了识别字母的神经网络的不同层,初始图像经历了几次转换,直到最终映射到某个字母。
Image 10: Convolution layer
回到这个例子,输入图像中的 3×3 像素乘以轮廓变换矩阵产生-172,即输出图像中像素的激活。我们称变换矩阵中的数字(1 和 8)为图像的权重。为了更好的形象化,这是我们的神经网络图:
Image 11: Weights
因为空间有限,我只将输入图像中中间一列的 3 个像素表示为输入层中的三个神经元。隐藏层中的顶部神经元是输出图像中产生的像素。神经元乘以的每个数字(1 和 8)就是神经元的权重。
有时候,我们可能想做矩阵乘法之外的另一种运算。例如,我们可能希望将激活下移一个特定的值。例如,我们可以使用 9 个像素和变换矩阵,取其标量积得到-172,然后减去 10 得到-162。在这种情况下,10 将是它的偏差,这意味着神经元必须至少为 10 才能有意义地活跃。
每个神经元都有自己的偏好和权重。通过正确的权重和偏差,神经网络将能够区分猫和狗。
2020 年的当代网络刮刀是什么样的?
原文:https://towardsdatascience.com/what-is-a-present-day-scraper-e2c3d3b79648?source=collection_archive---------14-----------------------
如果网站所有者不通过 API 授权用户访问,2020 年网络数据提取或网络抓取是获得所需数据的唯一途径。
Photo by Bruno Mira on Unsplash
许多网站,如 Twitter、YouTube 或脸书,提供了一种通过公共 API 访问数据的简单方法。使用 API 获得的所有信息都是结构化的和规范化的。例如,它可以是 JSON、CSV 或 XML 格式。
从任何网站提取数据的 3 种方法。
排名第一的官方 API。
首先,你应该总是检查是否有一个官方的 API,你可以用它来获得想要的数据。
有时官方 API 更新不准确,或者其中缺少一些数据。
#2“隐藏的 API”。
后端可能会生成 JSON 或 XML 格式的数据,供前端使用。
使用 web 浏览器检查器研究 XMLHttpRequest (XHR)为我们提供了另一种访问数据的方式。它会像官方 API 那样为我们提供数据。
如何获取这些数据?让我们寻找 API 端点!
例如,让我们看一下https://covid-19.dataflowkit.com/资源,它为网站访问者展示了当地的新冠肺炎案例。
- 通过按 Ctrl+Shift+I 调用 Chrome DevTools
- 控制台出现后,转到“网络”选项卡。
- 让我们选择 XHR 过滤器来捕捉一个 API 端点作为“XHR”请求,如果它可用的话。"
- 确保“录制”按钮已启用。
- 刷新网页。
- 当您看到与数据相关的内容已经出现在网页上时,请单击停止“记录”。
现在,您可以在左侧看到一个请求列表。调查他们。预览选项卡显示名为"v1."
的项目的一组值
按“标题”选项卡查看请求的详细信息。对我们来说最重要的是网址。"v1"
的请求网址是[https://covid-19.dataflowkit.com/v1](https://covid-19.dataflowkit.com/v1)
。现在,让我们以另一个浏览器标签打开该 URL,看看会发生什么。
酷!这就是我们要找的。
直接从 API 获取数据或使用上述技术获取数据是从网站下载数据集的最简单方法。当然,这些方法不会对所有的网站都有效,这就是为什么网络抓取库仍然是必要的。
如果网站所有者不通过 API 授予用户访问权限,Web 数据提取或 web 抓取是获取所需数据的唯一途径。Web 抓取是一种 的数据抽取技术 ,替代手工的重复键入或复制粘贴。
#3 网站抓取。
懂规矩!
在抓取网站之前应该检查什么?
Photo by Adam Sherez on Unsplash
☑️ Robots.txt 是你打算抓取网站数据时首先要检查的。Robots.txt 文件列出了您或机器人应该如何与它们交互的规则。您应该始终尊重并遵守 robots.txt 中列出的所有规则。
☑️确保你也看了网站的使用条款。如果使用条款规定没有说限制对僵尸程序和蜘蛛的访问,也没有禁止服务器的快速请求,那么爬行是可以的。
☑️为了遵守新的欧盟通用数据保护条例,或者 GDPR,你应该首先评估你的网络废弃项目。
如果你不收集个人资料,那么 GDPR 就不适用。在这种情况下,您可以跳过这一部分,进入下一步。
☑️:使用提取的数据时要小心,因为有时你可能会侵犯版权。如果使用条款没有对数据的特定用途做出限制,只要爬虫不侵犯版权,什么都可以。
查找更多信息:网页抓取合法不合法?
网站地图
典型的网站都有网站地图文件,其中包含属于该网站的链接列表。它们有助于使搜索引擎更容易抓取网站和索引它们的页面。从网站地图中获取 URL 进行抓取总是比用 web scraper 顺序收集要快得多。
呈现 JavaScript 驱动的网站
JavaScript 框架如 Angular、React、Vue.js 广泛用于构建现代 web 应用程序。简而言之,典型的 web 应用前端由 HTML + JS 代码+ CSS 样式组成。通常,源 HTML 最初并不包含所有的实际内容。在网页下载过程中,HTML DOM 元素与呈现 JavaScript 代码一起被动态加载。结果,我们得到了静态 HTML。
☑️:你可以使用 Selenium 进行网站抓取,但这不是一个好主意。许多教程都在教授如何使用 Selenium 从网站上抓取数据。他们的主页清楚地说明 Selenium 是用于测试目的的自动化 web 应用程序的。
☑️ PhantomJS 早期适合处理此类任务,但自 2018 年以来,其开发已暂停。
☑️或者,Scrapinghub 的 Splash 是在 Headless Chrome 出现之前 Python 程序员的一个选择。
你的浏览器本质上是一个网站刮刀。如今最好的方法是使用无头 Chrome,因为它可以“原生地”呈现网页。
puppeter节点库是 Javascript 开发者控制 Chrome over DevTools 协议的最佳选择。
Go 开发者可以选择从 chromedp 或 cdp 中选择一个,通过 DevTools 协议访问 Chrome。
放聪明点。不要让他们阻挡你。
Photo by Randy Fath on Unsplash
一些网站使用反抓取技术来阻止 web scrapper 工具获取在线数据。网络抓取永远是一场“猫捉老鼠”的游戏。因此,在构建 web scraper 时,考虑以下方法来避免阻塞。否则你有可能得不到想要的结果。
技巧 1:在请求之间制造随机延迟。
当一个人访问一个网站时,访问不同页面的速度比网络爬虫的速度慢很多倍。相反,Web scraper 可以立即同时提取几个页面。短时间内网站的巨大流量看起来很可疑。
你应该找出理想的爬行速度,这是每个网站的个人。为了模拟人类用户行为,您可以在请求之间添加随机延迟。
不要给站点造成过多的负载。对你从中提取数据的网站要有礼貌,这样你就可以继续抓取数据而不会被屏蔽。
技巧 2:改变用户代理。
当浏览器连接到网站时,它在 HTTP 头中传递用户代理(UA) 字符串。该字段标识浏览器、其版本号和主机操作系统。
典型的用户代理字符串如下所示:"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36".
- 如果对同一个域的多个请求包含同一个用户代理,网站可以很快检测并阻止您。
- 一些网站阻止特定的请求,如果他们包含不同于一般浏览器的用户代理。
- 如果“用户代理”价值丢失,许多网站将不允许访问他们的内容。
解决方法是什么?
您必须建立一个用户代理列表,并随机轮换它们。
技巧 3:轮换 ip 地址。使用代理服务器。
如果您在抓取过程中从同一个 IP 地址发送多个请求,网站会认为您行为可疑并阻止您。
对于最简单的情况,使用最便宜的数据中心代理就足够了。但是一些网站有先进的僵尸检测算法,所以你必须使用住宅或移动代理来清除它们。
例如,欧洲有人想从一个只允许美国用户访问的网站中提取数据。很明显,通过位于美国的代理服务器进行请求,因为它们的流量似乎来自本地到美国的 IP 地址。
要获得目标网站的特定国家版本,只需在数据流工具包获取服务的请求参数中指定任意国家。
技巧 4:避免刮擦模式。模仿人类的行为。
人类在浏览网站时是不一致的。他们做不同的随机动作,比如点击页面和移动鼠标。
相反,网页抓取机器人在抓取网站时会遵循特定的模式。
教你的刮刀模仿人类的行为。这样,网站机器人检测算法就没有任何理由阻止你自动化你的抓取任务。
提示 5:留意防刮擦工具。
检测黑客攻击或网络抓取企图最常用的工具之一是“蜜罐”人眼看不到蜜罐,但机器人或网页抓取工具可以看到。就在你的抓取工具点击了这样一个隐藏链接之后,网站很容易就屏蔽了你。
找出一个链接是否设置了"display: none"
或"visibility: hidden"
CSS 属性,如果它们只是停止跟随那个链接。否则,一个网站会立即识别你是一个机器人或刮刀,指纹你的请求的属性,并禁止你。
技巧 6:解决在线验证码。
在大规模抓取网站的同时,有机会被网站屏蔽。然后你开始看到验证码页面,而不是网页。
验证码是网站用来反击机器人和爬虫的测试,要求网站访问者在继续之前证明他们是人类。
许多网站使用谷歌的 reCAPTCHA。reCAPTCHA 的最新版本 v3 分析人类行为,并要求他们勾选"I'm not a robot"
框。
验证码解析服务使用两种方法来解析验证码:
☑️ 基于人工的验证码求解服务
当你把你的验证码发送到这样的服务,人类工作者解决一个验证码,并把它发送回来。
☑️ OCR(光学字符识别)解决方案
在这种情况下,OCR 技术用于自动解决验证码。
点击式可视选择器。
当然,我们不打算只下载和呈现 JavaScript 驱动的网页,而是从中提取结构化数据。
在开始数据提取之前,让我们指定数据的模式。请看销售智能手机的网络商店截图。我们想刮一个项目的图像,标题,及其价格。
谷歌 chrome inspect 工具在研究 HTML 网页的 DOM 结构方面做得很好。
Click the Inspect icon in the top-left corner of DevTools.
Chrome Inspector tool
使用 Chrome Inspect 工具,您可以轻松地找到并复制网页上指定 DOM 元素的 CSS 选择器或 XPath 。
通常,当抓取一个网页时,您有不止一个相似的数据块要提取。在一次抓取会话中,您通常会抓取几个页面。
当然,你可以使用 Chrome Inspector 来构建一个有效的抓取工具。在一些复杂的情况下,这只是研究网页上特定元素属性的一种方法。
尽管现代在线 web 抓取器在大多数情况下提供了一种更舒适的方式来指定数据抓取的模式(CSS 选择器或 XPath ),设置分页规则,以及在此过程中处理详细页面的规则。
看看这个视频,了解它是如何工作的。
管理您的数据存储策略。
现在最广为人知的存储结构化数据的简单数据格式包括 CSV、Excel、JSON (Lines)。在解析网页之后,提取的数据可以被编码成目的地格式。这些格式适合用作小容量存储。
抓取几个页面可能很容易,但是几百万个页面需要不同的方法。
如何抓取几百万个页面,提取几千万条记录?
如果输出数据的大小从中等到巨大怎么办?
选择正确的格式作为输出数据。
Photo by Ricardo Gomez Angel / Unsplash
格式#1。逗号分隔值(CSV)格式
CSV 是最简单的人类可读数据交换格式。文件的每一行都是一条数据记录。每条记录都由逗号分隔的相同字段列表组成。
以下是以 CSV 数据表示的系列列表:
id,father,mother,children
1,Mark,Charlotte,1
2,John,Ann,3
3,Bob,Monika,2
CSV 仅限于存储二维无类型数据。没有办法像普通 CSV 中的孩子的名字一样指定嵌套结构或值的类型。
格式#2。JSON
[
{
"id":1,
"father":"Mark",
"mother":"Charlotte",
"children":[
"Tom"
]
},
{
"id":2,
"father":"John",
"mother":"Ann",
"children":[
"Jessika",
"Antony",
"Jack"
]
},
{
"id":3,
"father":"Bob",
"mother":"Monika",
"children":[
"Jerry",
"Karol"
]
}
]
然而,在 JSON 文件中表示嵌套结构很容易。
如今,JavaScript Object Notation(JSON)成为事实上的数据交换格式标准,在大多数情况下取代了 XML。
我们的一个项目包含 300 万个解析过的页面。因此,最终 JSON 的大小超过 700 Mb。
当您必须处理这样大小的 JSONs 时,问题就出现了。要从 JSON 数组中插入或读取记录,每次都需要解析整个文件,这远非理想。
格式#3。JSON 行
让我们看看什么是 JSON 行格式,以及它与传统 JSON 的比较。使用 JSON 行在业内已经很普遍了。 Logstash 和 Docker 将日志存储为 JSON 行。
表示为 JSON 行格式的相同系列列表如下所示:
{"id":1,"father":"Mark","mother":"Charlotte","children":["Tom"]} {"id":2,"father":"John","mother":"Ann","children":["Jessika","Antony","Jack"]} {"id":3,"father":"Bob","mother":"Monika","children":["Jerry","Karol"]}
JSON Lines 由几行组成,其中每一行都是一个有效的 JSON 对象,由换行符\n
分隔。
因为 JSON 行中的每个条目都是有效的 JSON,所以可以将每一行解析为独立的 JSON 文档。例如,您可以在其中进行搜索,将一个 10gb 的文件分割成较小的文件,而无需解析整个文件。您可以根据需要读取任意多的行来获得相同数量的记录。
摘要
一个好的刮削平台应该:
☑️ 同时从网页中获取和提取数据。
我们使用 Golang 的并发特性,发现它们非常棒;
☑️ 定期将提取的刮掉的 数据块保存在中央数据库中。
这样,在抓取许多页面时,您不必在 RAM 中存储太多数据。除此之外,以后可以很容易地将数据多次导出为不同的格式。我们使用 MongoDB 作为我们的中央存储。
☑️ 基于网络。
在线网站刮刀是可以从任何地方的任何设备连接到互联网。不同的操作系统不再是问题。都是浏览器的问题。
☑️ 对云友好。
它应该提供一种根据 web 数据提取项目的当前需求快速扩大或缩小云容量的方法。
结论
在这篇文章中,我试图解释如何在 2020 年抓取网页。但是在考虑抓取之前,试着找出官方 API 的存在或者寻找一些“隐藏的”API 端点。
如果您能花一分钟时间告诉我,2020 年您最常用的网络抓取方式是哪一种,我将不胜感激。就在下面给我留言评论吧。
刮的开心!
关于 2020 年网页抓取器的推文。
原载于 2020 年 5 月 27 日 https://blog.dataflowkit.com**的 。
什么是 AI 对齐?
原文:https://towardsdatascience.com/what-is-ai-alignment-2bbbe4633c7f?source=collection_archive---------12-----------------------
这篇博客是一个系列的一部分
第一部分是: AI —控制问题
在之前的博客中,我讨论了控制问题——我们面临的挑战是控制一台以与我们完全不同的方式思考的机器,它很可能比我们聪明得多。即使我们对控制问题有一个完美的解决方案,我们还剩下第二个问题,我们应该要求人工智能做什么,思考什么,重视什么?
这个问题就是 AI 对齐。
人工智能很可能比我们快得多(如果不是,为什么不多建几台服务器呢?那就一定会!)而且对我们来说,确认它想要做出的每一个决定都是不可行的,也是没有价值的。我们想要的是一套规则或原则,人工智能可以参考这些规则或原则,自己做出决定,知道通过遵循这些规则,它的行动将与人类想要的一致。
人工智能的这些规则系统分为两个主要类别——直接规范性和间接规范性。
直接规范性
有了直接的规范性,我们给 AI 提供了一套可以遵循的规则。这些规则中最著名的是艾萨克·阿西莫夫机器人定律,它是一个伟大的…基础…但是分崩离析,正如我们从阿西莫夫写的故事中看到的那样。
一个更现代的例子是 Nick Bostrom 的回形针最大化器。拿一个人工智能来说,让它的效用函数成为它的核心价值,来创造回形针。这听起来无害,并且是要求受控人工智能制作回形针的一种简单方法。我们不想让它做人类会做的事情;我们已经有工厂生产回形针了。我们使用人工智能的目的是找到新的、更好的、更有效的制造回形针的过程,并且制造出它应该制造的回形针。在它完成所有我们可能想要的曲别针之后,它会停止吗?不。它已经被硬连线制作回形针,所以它会继续制作回形针,即使在它使用了所有给它的材料,地球上的所有材料,甚至把我们星球和太阳系以外的材料变成回形针,如果可以的话。那些人类?它们也是由物质制成的,如果它是一个回形针,看起来会更好。如果有什么不同的话,人类变成回形针是特别重要的,因为在他们的人类形态中,他们可能会决定不再需要任何回形针。人工智能希望给自己尽可能高的概率来制作回形针,如果它预测人类可能不希望这种情况发生,他们就有机会以人工智能的方式获得,所以人工智能根除人类以提高其制作更多回形针的概率是合理的。
对此的改编是告诉一个回形针制作有限数量的回形针,比如 1000 个。不幸的是,这也不太管用。假设这个人工智能使用贝叶斯概率来衡量确定性,它永远不可能对任何事情都 100%或 0%确定。在制作了 1,000 个回形针之后,它将继续检查它是否精确地制作了 1,000 个,而不是 999 个,并且它们都是回形针应该有的样子。它将继续使用它将用来变成回形针的所有相同的资源来检查和再次检查这一点,因为 AIs 的最终价值,它的整个存在是关于确保精确地制作 1000 个回形针。另外,它也没什么更好的事情可做。
应用于比对,我们想要做的是找到一系列规则,人工智能可以严格遵守这些规则,并确保它正在做人类想要做的事情。我们目前提出的系统似乎都有漏洞,如果我们能够以人类的智力水平发现这些漏洞,那么对于超越人类水平的智力来说,发现和利用这些漏洞将是轻而易举的事情。
增加越来越多的规则听起来也没有吸引力。我们可以把这比作税法,税法有大量的规则。然而奇怪的是,我们似乎被人包围着,甚至是不纳税的大公司。更多的规则似乎提供了更多可被利用的漏洞,而不是更安全。在直接规范下,我们没有理由期望一个人工智能遵循规则的精神,只是严格遵守它们。
间接规范性
所以,进入替代方案。间接规范性并不要求 AI 遵循一套明确的静态规则。相反,它给了人工智能一个框架来寻找价值本身,通常要求它做我们“想要的”Eliezer Yudkowski 提供了一个框架,称为“连贯的外推意志”,简称 CEV。
用诗歌的术语来说,如果我们知道得更多,思考得更快,成为我们希望成为的人,在一起成长得更远,我们连贯的推断意志就是我们的愿望;外推收敛而不是发散,我们的愿望一致而不是干涉;如我们所愿的推断,如我们所愿的推断,如我们所愿的解释——Eliezer Yudkowski,机器智能研究所
这种方法有一个更深的抽象层来指导规范性,并要求 AI 基于对早期声明的诚实解释来创建自己的规则。我们在这里工作的假设是,我们已经解决了控制问题,所以人工智能不能为了任何邪恶的需要修改第一个声明。
随着间接规范性的出现,一件有趣的事情变得显而易见,那就是我们并不真的希望人工智能去做我们会做的事情,或者精确地评价我们会重视的东西。想象一个在维京时代创造的人工智能,在那里我们成功地编码了我们当时的价值观。我们很可能会拥有一个非常强壮和暴力的人工智能(抱歉,如果维京人不是这样,历史不是我的强项!).我们今天有不同的价值观,但那些价值观可能并不能反映 1000 年后我们将成为的人,甚至不能反映超人智能 AI 出现后我们将立即成为的人。例如,我们今天重视人类的生产力,这将变得不那么重要。我们也重视短期收益,以牺牲环境为代价提高生产率,而这不太可能适合我们未来的社会。我们想要的是一个人工智能,它可以为自己创造一个价值体系,总结我们未来的需求,而不牺牲今天社会的需求或价值。
很难预测人工智能在这种情况下会做什么。正如我们所说的,这个假设场景中的控制已经解决,我们要求人工智能做我们在未来会做的事情,我们的价值观趋同,做我们在这个声明中的意思。它预测的未来版本的我们可能可以接受人工智能为了我们自己的利益操纵我们自己的价值体系,即使这不是我们今天想要的东西,因为这是我们未来可能重视的东西。
我们如何找到正确的价值观?
简而言之,我们不知道。
关于伦理和道德的问题已经被哲学家们研究了几千年,而且确实没有令人满意的答案。我们甚至在最基本的问题上没有完全的共识——一些人认为我们可以发现一个普遍的伦理框架,另一些人认为伦理是我们当前理想的平均值,随着时间的推移而变化。仅仅因为人工智能是一个不同的问题,并不意味着我们会更容易找到答案。
提出的一个解决方案是创建一个精灵类型的人工智能,并询问它应该被赋予什么值,或者我们应该使用什么间接指令来实现想要的值。如果我们使用这种类型的人工智能来解决控制问题,这种方法的问题就可想而知了。如果我们用它来解决控制问题,精灵本身是无法被完全控制的。我们可能会试图限制它对数据的访问,并给它一个非常严格的交流系统,比如只能回答是或不是的问题,但人类很难预测一个比我们更强大的智能可能会采取什么方法来逃离我们为它建造的笼子。应用于对齐,问题是我们如何知道未对齐的人工智能给出的答案是否确实符合人类价值观,因为我们期望我们需要一个不同于我们以前想到的任何答案。
Eliezer Yudkowski 将这种类型的人工智能与下棋计算机进行了比较。1950 年,克劳德·香农提出了一个理论上完美的国际象棋算法,从此“深蓝”花了 47 年时间打败了加里·卡斯帕罗夫。香农需要的是让他的算法实现的计算能力。人工智能排列虽然是在前香农天。即使有无限计算,我们也不知道我们将运行什么算法。
凭借我们今天可用的处理能力,理论上完美的算法和功能原型之间的差距可能会更短,但我们首先需要解决一些基本问题,以充分利用这种处理能力。
AI 是什么?
原文:https://towardsdatascience.com/what-is-ai-cc85fb25a981?source=collection_archive---------5-----------------------
我最*与一位非技术业务同事/经理会面,他要求我解释一些人工智能术语,如机器学*和深度学*。“机器学*是深度学*的一种,还是反过来?”。所以,我在白板上画了这幅图,然后开始了一个有点漫无边际的关于人工智能及其历史的演讲。然后我想到,许多业务类型都在问自己(和他们的同事)类似的问题,我看到不止一个经理混淆了这些区别。因此,这篇文章试图做一个快速的非技术性概述。
本着上面匆忙绘制的图片的精神,本文并不打算对人工智能的子领域进行彻底的分类。我也不做任何准确性的声明,所以如果你不同意,或者认为我在某些细节上错了,请对我宽容一些。如果你谷歌“什么是人工智能?”,你会得到大量有深度的文章/博客(包括维基百科条目)、书籍,以及许多更加全面的图片。但是许多非技术经理既没有时间也没有兴趣钻研细节;这篇文章旨在帮助这些人更好地了解人工智能。
人工智能可以大致分为符号人工智能和机器学*。如今,人工智能一词是机器学*的同义词,最*则是深度学*。但是,人工智能的起源大多是象征性的,带有旨在捕捉专家知识的手工编码规则。通常,精通 Lisp 或 Prolog 等“人工智能语言”的人工智能软件工程师会与领域专家(比如说,医学博士)配对,以 IF-THEN 规则的形式表示相关知识。除了规则,还有很多其他的符号化知识表示机制,比如框架。时至今日,你会发现许多产品都使用规则/框架,比如许多最先进的聊天机器人框架,它们使用 AIML 规则或意图框架来使用脚本对话创作对话。这些产品虽然取得了一些成功,但仍然受到下面提到的限制。
在 20 世纪 60 年代和 80 年代的几次人工智能炒作周期之后,人工智能领域进入了一个漫长的“人工智能冬天”直到 2000 年代中期。为什么?从软件工程的角度来看,规则/框架是脆弱的,一旦我们通过了几百条规则,就很难管理/维护一个符号化的人工智能系统。规则开始相互冲突,并且不可能跟踪规则触发的顺序和调试这些系统。规则必须由昂贵而忙碌的领域专家手动编写,并进行大量输入。这些系统中的“学*”大多是“受监督的”和离线的。人们试图通过基于用户交互反馈的“无监督”和在线学*来自动创建规则。然而,大多数这些尝试仍然是学术上的努力,很少有商业上成功的实现。
机器学*开始于 20 世纪 90 年代中期,当时计算机科学家和统计学家开始相互合作和学*。决策树和支持向量机等算法在 21 世纪初被用于挖掘越来越大的数据库,以获得可用于预测/分类和其他高级分析任务的模式。更快的计算机和 Hadoop 等“大数据”软件工具的出现激发了人们对数据驱动模式识别的兴趣,这种模式识别使计算机能够从历史数据中学*。主要区别是,新的人工智能工程师,现在称为数据科学家,不从事传统的软件工程。相反,他们的工作是从原始数据中提取特征,并使用这些特征来创建监督学*模型,使机器能够学*基于历史数据进行分类和预测。数据科学家提供带标签的数据,用于识别指向每个不同类/标签的要素组合。这种“模型工程”远比“规则工程”更强大,并受益于更快的计算机、更多数据和用户在线反馈的良性循环。无监督的机器学*方法(如聚类)通常与有监督的方法结合使用。
深度学*起源于人工神经网络(ANN),它是“连接主义者 AI ”的一部分,也可以追溯到 20 世纪 60 年代。许多算法进步,如反向传播、多层感知器、卷积网络和递归网络,是在 20 世纪 80 年代、90 年代和 21 世纪初逐步发现的。但是深度学*,其名称来自大量的神经层(从 5 到 100 或更多),只是在大约 5 年前随着 GPU 作为计算主力的出现才变得具有商业可行性。这些更快的基于 GPU 的计算机以及大量非结构化数据(如图像、音频、视频和文本)的可用性,是人工智能当前成功的关键。此外,在过去 5 年中,深度学*算法和架构的创新步伐令人难以置信。今天,深度学*系统可以以惊人的准确度执行图像识别、语音识别和自然语言理解任务。
深度学*系统也大多是受监督的学*系统,因为数据科学家必须提供大量带标签的数据来训练这些系统(神经元之间互连的权重)。但是,与更传统的统计机器学*算法(如随机森林)不同,深度学*系统可以自动从原始数据中进行特征提取。因此,数据科学家不必执行特征工程。深度学*的意义在于,连续的层在不断增加的抽象层次上学*特征。因此,虽然前几层可能识别边缘和其他较低层次的图像特征,但接下来的几层识别较高层次的特征,如鼻子/耳朵/嘴巴,而接下来的几层识别整张脸等等。
生成对抗网络(GANs) 和自动编码器是无监督深度学*系统的例子。强化学*系统是深度学*系统的例子,可以被认为是在线学*系统,因为它们直接从模拟环境中执行的动作和在真实环境中部署时获得的反馈中学*。自动驾驶汽车和游戏系统,如 AlphaGo 利用强化学*;AlphaGo 是基于模拟学*的一个很好的例子,因为该系统是通过无数次与自己对弈来训练的。这也是一个无监督学*的例子,因为系统通过观察自己的错误并纠正它们而变得更好。
人工智能还有许多其他相关的子领域,如进化(遗传)算法、博弈论、、多智能体系统等等。此外,请注意,人工智能受益于其他学科,如数学优化,这些学科已成为其他领域的一部分,如运筹学 (OR)。事实上,人工智能最*的繁荣也重振了对控制理论等相关领域的兴趣,因为自动驾驶汽车、无人机和机器人背后的许多算法都有其他学科的数学基础。因此,人工智能是一个真正的跨学科领域,来自各种背景的科学家和工程师能够应用他们的数学和软件技能。
我试图保持这个概述的非技术性和简短。我希望这能帮助一些商业人士掌握办公室里流传的一些流行词汇和行话。
什么是信息图?它与数据可视化有什么不同?
原文:https://towardsdatascience.com/what-is-an-infographic-and-how-is-it-different-from-a-data-visualization-a92c23b35197?source=collection_archive---------4-----------------------
你在任何地方都能看到它们——从教室到企业,信息图表充斥着我们的生活和媒体。很难一天不在我们的脸书 feed 或网络上的其他地方看到他们。有了信息图表制作软件,创建这些有趣的视觉效果比以往任何时候都更容易,许多人正在利用这一点。
然而,随着这个词被如此频繁地使用,人们不禁要问——信息图到底是什么?这些视觉效果很容易与其他形式混淆,尽管它们有自己独特的历史、设计和目的。
先来一个大概的定义。根据 dictionary.com的说法,信息图是“以图表、图形或其他图像的形式伴随着最少文字的信息的视觉呈现,旨在给出一个容易理解的概述,通常是一个复杂的主题。”
你可能会问:“但是这和数据可视化有什么不同?”根据《哈佛商业评论》的指南 好图表,有四种不同类型的信息图形:陈述性的、概念性的、探索性的和数据驱动的。为了找出特定图形的位置,您需要问自己两个问题:
- 我拥有的信息是概念性的还是数据驱动的?
- 我是在宣告什么还是在探索什么?
如果你对第一个问题的回答是“概念性的”或“数据驱动的”,对第二个问题的回答是“声明某事”,那么你可能正在处理一个信息图,绘制在下面图表的上半部分。
如果您对第一个问题的回答是“数据驱动”,对第二个问题的回答是“探索某物”,那么您很可能希望创建一个数据可视化,它绘制在此图表的右下象限。
每种图形类型的视觉示例
这个方便的图表可能会让你更好地了解如何对信息图形进行分类,但是要真正训练你的眼睛来识别每一个,你可能需要看一些例子。下面,我们提供了一些现实生活中的例子来帮助你识别它们之间的区别。
数据即:数据驱动和探索
Image Source
在爱因斯坦的想法首次出现一个世纪后,看看这张关于广义相对论对当前物理学研究的影响的迷人的数据可视化图。它允许用户通过放大数据点并从各种不同的角度查看来与信息进行充分的交互。这使得读者可以随心所欲地深入或浅显地研究数据。
图表:声明性或探索性
Image Source
图表经常在信息图中使用,但并不等同于后者。图表直观地显示特定的数据集,本质上可以是声明性的,也可以是探索性的。
如果你的星盘中的一切都是为了制造一个特定的、预先确定的点,那么你可以确定它是声明性的;然而,如果它在显示数据时没有将注意力吸引到某一点上,让浏览者得出自己的结论,那么它可能是探索性的。
尽管信息图可能包含图表,但它们使用其他图像和文字来为一个点服务。您可能会使用图表来显示单个数据集,而不是试图在一个视图中包含一大部分信息。
信息设计
Image Source
由于名称非常相似,很容易将信息设计与信息图混淆。然而,这两者仍然服务于明显不同的目的。根据 Dirk Knemeyer 的说法,信息设计并没有一个固定的定义。有各种各样的方法来理解它,正如你在这里看到的。一个这样的潜在定义是:“语言学科、艺术和美学学科、信息学科、传播学科、行为和认知学科、商业和法律以及媒体制作技术之间的交叉点。”
信息设计尤其用于连接和整合不同的学科。它不是一个特定的视觉类别,如信息图,因为它包含了广泛的概念。例如, Clare McDermott 建议使用“标注框”形式的信息设计来吸引对特定点的注意。
那么我们什么时候使用信息图表呢?
Jaime Nacach 通过解释信息图表的四种用途给出了答案:
- 图解数据:这意味着从调查(和类似的功能)中获取数据,并使它们比你的平均图表更有趣。
- 简化一个复杂的主题:如果你有一个令人难以置信的概念,并且需要一种快速简单的方法来分解它,信息图是一个不错的选择。
- 进行比较:信息图非常善于展示两件事是多么相似还是不同。
- 知名度:无论是与商业、政治还是任何其他领域相关,您都可以通过可共享的信息图表迅速提高品牌或事业的知名度。
问问你自己,“我想呈现什么样的信息?”如果你想要吸引眼球的东西,有大量简化的数据,信息图是正确的选择。
如果信息图已经演变成一套独特的视觉效果,那么这些图形最初是如何发展的,在哪里发展的?事实上,它们的起源可以追溯到很久以前。
开始的时候…
Image Source
可能最早被认为是“信息图表”的图片实际上是洞穴壁画。这些不是今天大多数人知道的信息图表,但它们仍然有类似的目的:将一个困难的主题,如一个故事或一课,转化为一种易于可视化和理解的格式。象形文字和地图可以被认为有类似的目的。
我们今天所知的信息图的最大功臣是 1626 年的克里斯托夫·席耐尔,他利用信息图追踪太阳的轨迹。他在 Rosa Ursina sive Sol 重印了这些,一份遗产就这样诞生了。
席耐尔可能已经播下了这个信息图表的种子,但是一个名叫威廉·普莱费尔的苏格兰人真的在它上面展开了。根据克莱夫·汤普森的说法,Playfair 最初绘制专利,后来意识到他可以将他的插图应用于经济学,使数据更具视觉吸引力。
随着 Playfair 掌舵,这些新兴的信息图表在 19 世纪开始在欧洲蓬勃发展,有几个著名的例子。安德烈·米歇尔·盖里(André-Michel Guerry)是第一个使用阴影来说明某种物质或主题密度较高的区域的人,例如犯罪较为常见的区域,许多人随后采取了其他措施。
19 世纪后期,弗洛伦斯·南丁格尔使用信息图表向维多利亚女王陈述了她的情况——具体来说,她希望克里米亚战争的参战者获得更好的医疗服务。
事实证明,信息图表已经从简单地展示科学或经济数据转变为展示道德和政治主题。这些被带到了美国,在那里“奴隶地图被用来决定内战中的战场。本质上,黑暗的区域意味着更多的奴隶,因此他们是应该首先关注的目标。
信息图在 20 世纪的使用更加多样化。丽贝卡·洋葱发布了一些来自科学美国人的 20 世纪早期的信息图表,这些图表聚焦于各种主题(例如,离婚的原因)。美国宇航局甚至向太空发送了信息图表,以先锋 10 号和先锋 11 号上的“先锋徽章”的形式。
21 世纪信息图的使用扩展到了许多媒体形式,包括电视节目、视频游戏和报纸文章。Adobe 等程序的出现使得创建视觉效果变得不那么费力,并为现在的程序和信息图表铺平了道路。
今天,信息图仍然用于新闻和其他媒体,但已经扩展到其他领域,如课堂和内容营销。
要避免的常见错误
如今,信息图有多种使用方式,也有多种出错方式。
Emilie Flutterman 给出了各种信息图表常用方式的例子。例如,她提到信息图经常被视为简历,可以用来进行比较和招募他人。
凯西·施勒克提到信息图表可以很好地用于评估,并为教师列出了各种资源,以及许多有创意的信息图表示例。她的博客值得一读,尤其是如果你是一名有兴趣将这些概念融入课堂的老师。同样,Catlin Tucker 评论了教授信息图表如何给她的学生提供有用的技能,并给出了他们工作的几个例子。
随着信息图表出现在课堂环境中,它们也出现在学生的演示中也就不足为奇了。许多学生自然看到了使他们的信息更吸引人和更容易获取的吸引力,这也使他们的信息更有娱乐性。
信息图表应用增长最快的领域可能是内容营销。这张信息图说明了许多人想在营销中使用信息图的几个原因,从制作病毒式内容到让你的主题更容易理解。乔·普利兹列出了一些最好的内容营销信息图,让你知道什么最有效。
虽然您可能已经准备好直接创建信息图,但首先有几件事您应该警惕。创建一个糟糕的信息图实际上会迷惑他人,让他们对你的主题不感兴趣,而不是吸引他们的注意力,让数据更加清晰。
Nayomi Chibana 给出了一些信息图表半途而废的 10 个原因。例如,她警告说,你应该从一个另类和原创的角度来接*一个广泛覆盖的主题,否则你可能会失去观众的注意力。他们还警告诸如糟糕的设计或信息图表太长等缺陷。
以下是一些让你的信息图脱颖而出的额外技巧:
- 别出心裁:做别人没做过的事,或者用新的方式去做。
- 做意想不到的事:给你的观众一个惊喜,但不要做得太安全。但是记住,要确保这个惊喜不会转移你的主题。
- 了解你的观众:记住你的观众,设计一些吸引他们的东西。
- 使用吸引人的颜色组合和图形:学*色彩理论,看看哪些颜色搭配起来很好,它们能唤起什么样的情感,然后开始运用它们。
- 理解你的主题:在你的信息图中包含信息之前,先弄清楚事实。
记住这些提示,你就可以开始创造一些惊人的视觉效果了。
敬未来
信息图现在非常流行,并且在过去几年里以惊人的方式发展,但是未来会怎样呢?
毫无疑问,信息图表将继续被企业、教育工作者和媒体频繁使用,但它们很有可能会像我们的技术一样发展。或许在未来,我们将开始看到更多互动的、类似游戏的信息图,以及融入虚拟现实体验的 3D 沉浸式信息图。
信息图仍在发展和变化,所以如果你以前没有使用过它们,现在是开始的最佳时机。你可以从下面的免费的 初学者指南中获取创建可共享的信息图,带着你的新的创新想法,把它们变成能被人们长久记住的东西。
本帖 原版 最早出现在 Visme 的 视觉学*中心 。
什么是 API,如何使用 Youtube API
原文:https://towardsdatascience.com/what-is-api-and-how-to-use-youtube-api-65525744f520?source=collection_archive---------5-----------------------
用简单的英语解释 API 的概念,以及如何使用 tuber package 抓取 Youtube 数据
上次我谈到了成功优步的策略。对我来说,这是一个令人兴奋的项目。但这并不容易,因为我必须努力搜索如何获得 Youtube API 密钥。已经有很多资源了,但是大部分是给 web 开发者的,给 R 用户的教程几乎看不到。在我花了一整天的时间设法得到 API 密匙之后,我突然有了一个想法,为什么不把帖子留给和我有同样问题的人。
今天我要讲的是 API 的概念,以及如何获取 API key。我还将介绍用于在 r 中分析数据的 tuber 包。如果你没有使用过 Google APIs,并且你有兴趣用它们做一个数据科学项目,这篇文章将是一个好的开始。
什么是 API?
如果你不熟悉 API 这个词,一开始可能很难理解它的意思。API 代表应用程序编程接口。对你来说这是不是太“程序员”语言了?那很好。我会一步一步解释这个概念。
为了您的理解,最好从两个不同的接口开始。有两种接口,用户接口和应用编程接口。简单来说,UI 是普通用户的接口,API 是程序员的接口。你可以在下面看到一个 UI 的例子。这是我们每天都会遇到的常见网页。我们如何使用它们?我们可以简单地通过点击图片或单词来使用它们。这是面向普通人的级别,面向用户的界面。怎么可能呢?这是因为 web 开发人员将所有需要的代码都藏在了按钮后面。这是程序员的界面,代码和命令就在这里。换句话说,API。您可以将 API 视为一组代码、协议和功能,用于与软件应用程序进行工作和交互。对于 UI,我们使用简单的按钮和工具,而对于 API,我们使用预定义的功能。
Two kinds of interfaces (on the left) and the screenshot of Airbnb apps (on the right)
对你来说还很难吗?那么让我们假设你正坐在一家餐馆里。你晚餐想要一份美味的牛排和一杯红酒。你坐在桌子上打电话..谁啊。服务员!然后你拿到菜单,点你想要的。几分钟后,他们会把菜端上来。这就是 API 的作用。你不需要卷起袖子一个人做所有的事情,比如准备食材、切蔬菜、烤肉。服务员会为你做这些步骤,你所要做的只是叫他们,然后从那个架子开始你的工作。
同样,当开发人员使用编程工具时,或者当数据科学家与数据争论时,他们不会每次都编写每一个代码。他们使用预制的功能,这些功能是在引擎盖下运行的基本代码集。例如,当您想要将两个数据合并成一个数据时,您可以调用 join 函数(一个“join”服务员)并命令它按照您的命令工作(对菜单进行排序)。然后它会返回需要的结果(你的菜)。
为什么是 API?
API 现在已经成为企业在大数据时代装备的一种新的商业模式和战略。那有什么特别的?是什么让 API 这些天这么火?让我们简单地谈谈在商业环境中我们可以用它做什么。
API 可以在内部和永久产生大量的价值。管理和处理数据是企业管理的关键因素之一,每个公司都建立了 IT 系统。然而,随着数据的规模呈指数级增长,通过传统 IT 系统处理所有数据存在局限性。从这个意义上说,应用 API 可以是一个效率更高、安全性更好的解决方案。它可以打破系统之间的壁垒,从而简化工作流程,促进组织之间的合作,并提高数据保护。
API 的外部优点甚至更花哨。如果一家公司公开或以额外费用开放他们的 API,它可以提供新的服务并获得潜在客户。客户可以体验到前所未有的更高级别的服务。通过提供 API 服务,第三方开发者可以构建全新类型的产品,这甚至是公司从未想过的。例如,谷歌地图,开发者中最受欢迎的应用程序接口,最初并没有预期会产生那么大的影响。通过将这些数据应用到房地产和其他各种领域,开发者为谷歌带来了更高的价值和资产。
如今 API 的数量在不断增加,而且这种趋势将会持续下去甚至更多。现在我们可以说,一个公司 API 的实施和管理是其竞争和战略价值的关键因素之一。
那么如何使用 API 呢?
要使用 API,您需要首先获得一个授权密钥。它用于获取与 API 连接的授权密钥。API 提供者,在这里是 Youtube,不仅仅是无控制地提供他们的服务。为了保留这个界面并管理用户,他们为每个用户提供了一个唯一的访问密钥。这样,我们就可以连接到应用程序的接口。就像我们通过将电源线插入电源插座来连接电源一样,我们使用这个唯一的密钥将服务器插入存储设备。从这一点出发,我们可以使用 API 的数据和协议。
那么现在让我们从如何获得授权密钥开始。有一个非常好的获取钥匙的教程。如果你是一个网站开发人员,你可以一步一步地遵循这个教程。
[## 如何创建你的 YouTube API 证书
创建您的 YouTube API 凭证是通过执行以下主要阶段来完成的:第一阶段——创建 Google OAuth…
help.aolonnetwork.com](https://help.aolonnetwork.com/hc/en-us/articles/218079623-How-to-Create-Your-YouTube-API-Credentials)
如果你要做一些数据分析,你不需要所有这些步骤。您按照步骤进行,直到第 9 步,然后选择“其他”而不是“web 应用程序”开发人员控制台上有两种不同类型的客户端,每种情况下的访问方法都不同。因此,如果您尝试通过“web 应用程序”获取密钥,并从您的本地计算机请求 Oauth,您可能会遇到类似我所得到的错误消息。
因此,单击“其他”选项,然后您将获得客户端密钥和秘密密钥。将它们复制并粘贴到本地计算机上。
Youtube API 的 tuber 包
R 里有 tuber 包,是专门为 Youtube 数据分析做的。您可以绘制各种数据,包括特定频道的视频数量、观看次数、对视频的喜欢和评论等等。要在 R 中调用这些数据,需要先安装‘tuber’包。然后,您向 Google 请求授权令牌。
install.packages('tuber')
library(tuber)client_key = ''
client_secret = ''
yt_oauth(app_id = client_key, app_secret = client_secret)
当您注释这段代码时,浏览器会弹出一些数字,允许您授权应用程序。如果您检查您的本地工具,R 将已经在等待编号,所以复制并粘贴序列号。现在你终于可以和 Youtube API 连接了。
我还将介绍一些对分析来自tuber
包的 Youtube 数据有用的函数。
get_all_channel_video_stats
:统计一个频道中所有视频的功能。您需要一个 channel_id 来使用它。get_stats
:这给你一个视频 id 的统计数据。返回值是视图、喜欢、不喜欢、喜爱和评论的计数。get_video_details
:提供视频发布日期等更具体的信息。您还可以获得标题、描述、缩略图和类别。get_all_comments
:它给你一个视频的所有评论,因此在特定主题或频道的文本挖掘方面有很大的用处list_channel_activities
:返回频道活动列表。list_videos
:返回最受欢迎的视频。
还有其他有用的 API 调用,推荐大家去查一下。你可以从这里浏览它们。
资源
- 什么是 API 的一个优秀视频:https://www.youtube.com/watch?v=s7wmiS2mSXY&t = 75s
- 哈佛 API 战略价值报告:https://hbr.org/2015/01/the-strategic-value-of-apis
- 想多研究 API?ProgrammableWeb 是一所“API”大学,提供几乎所有关于 API 的内容:【https://www.programmableweb.com/
- 不知道怎么处理 Youtube 的数据?看看我以前的作品。你可以从中获得新的灵感!
[## 成为成功 Youtube 的策略:广泛的 Youtube 探索性分析(第 1/2 部分)
为 Youtubers 推荐数据驱动的策略
towardsdatascience.com](/strategies-to-be-a-successful-youtuber-extensive-youtube-exploratory-analysis-part-1-2-40eee29554e6) [## 成为成功 Youtube 的策略:广泛的 Youtube 探索性分析(第二部分)
揭开单词嵌入的神秘面纱并拟合模型以预测视图
towardsdatascience.com](/strategies-to-be-a-successful-youtuber-extensive-youtube-exploratory-analysis-part-2-2-6862cd4f40be)
已经有很多 API 了,但是只有一小部分是公开的。由于数据将直接转化为当今世界的竞争力,我理解企业的意图。然而,我认为他们不应该忽视共享经济的潜力。通过使他们的内部数据可访问,他们将释放全世界开发人员和数据科学家的创造力,为数据设计全新的用途。就像过去几年我们对开源所做的一样。
感谢您的阅读,希望这篇文章对您有所帮助。如果有需要改正的地方,请分享你的见解!如果您想鼓励一位有抱负的数据科学家,请点击👏 👏 👏!我总是乐于倾听你的想法,所以请在 LinkedIn 上分享或联系我。我将带来另一个激动人心的故事。在那之前,机器学*快乐。
什么是人工通用智能?
原文:https://towardsdatascience.com/what-is-artificial-general-intelligence-5b395e63f88b?source=collection_archive---------1-----------------------
首先,什么是人工智能?
人工智能是计算机科学(或科学)的一个分支,研究智能系统的创造。智能系统是那些像人类一样拥有智能的系统。
人工智能科学并不新鲜,人工智能一词在古希腊和埃及的手稿中就已被提及。希腊人信奉神赫菲斯托斯,也被称为铁匠之神,根据一个希腊神话赫菲斯托斯为所有的神制造了智能武器,在他们看来,人工智能的目标是:有助于人们实现某个目标,能够自动操作并预先被编程以根据情况做出不同的反应。
嗯,人工智能这个词在娱乐领域变得很流行,我们可以看到很多基于超级智能概念的电影。(前 machina,Her,AI,复仇者联盟-奥创时代等。) .但是我们今天看到的人工智能系统无法与所谓的“超级智能”系统相提并论。
真实人工智能和当今人工智能系统的区别:
如前所述,人工智能并不是一个新的领域,自从人类出现以来,许多哲学家和科学家都对人工智能有过一些想象,但他们都受到了当时技术的限制。今天,随着强大的超级计算机的出现,我们能够建立服务于所需目的的人工智能系统。 但是,他们真的聪明吗??答案是否定的,他们不是。让我们看看怎么做。
在计算机和互联网上足够大的数据集的帮助下,所谓的机器学*进入了画面。机器学*提供了一套可以在现实世界中实现的数学概念。
神经网络,大致模拟人脑的工作,让机器从例子中学*。深度学*已经帮助许多技术巨头,如谷歌和苹果,通过实施许多新的热门技术,如人脸识别,语言理解,图像理解等,经济地改进他们的产品。但是你想到的,所谓的深度学*并不是真正的智能。机器学*领域需要大量数据集来学*对对象进行分类或进行预测,这被称为监督学*。
所谓的监督学*创造了一种智能的假象,但其核心只是一种数学优化。尽管它拥有决策和分类数据集的能力,但它的工作方式非常狭窄。
我们非常熟悉创建监督学*系统的技术。给定一个大数据集,监督学*系统学*输入和输出之间的映射,因此它可以预测未知输入的输出。但这不是我们的大脑实际做的事情,我们的大脑不需要 10000 张猫的图像来识别一只猫,甚至我们的大脑可以做很多监督学*系统不能做的事情。
监督学*的局限性:
即使监督学*可以用来创造如此多令人惊奇的东西,它也有如此多的限制:
- 它的思维总是局限于某个特定的领域。
- 它的智能取决于你使用的训练数据集。再说一次,你在控制。
- 它不能用于动态变化的环境。
- 只能用于分类和回归。但不是为了控制问题。
- 它需要庞大的数据集,否则就缺乏准确性。获取数据集可能是一个问题。
什么是 AGI?
AGI(人工通用智能)是一个用来描述真正智能系统的术语。真正的智能系统拥有全面思考的能力,不管以前受过什么训练都可以做出决定,这里的决定是基于他们自己所学的。设计这样的系统可能真的很难,因为今天的技术有些有限,但是我们可以创建所谓的“部分 AGI”。
强化学*:
甚至在今天,许多科学家认为强化学*是实现所谓 AGI 的一种方式。强化学*可以用来解决监督学*无法解决的问题。让我们举一个简单的例子来理解行走的基本任务之一,行走是我们非常自然和擅长的一项人类任务。婴儿自己学会走路,而不必搜索数据集,人脑可以通过从错误中学*来做到这一点。但是一旦它变得完美,它可以走上千步,甚至一个步长的不匹配都能被它识别出来。大脑采取的步骤总是最优的,采取的速度(或简单的步长)总是以这样的方式,以同样的方式,在最短的时间内到达目的地,每一步花费的能量应该是最小的。所以行走的速度取决于能量以及你到达目的地的速度。同样的行走问题也可以应用到机器人学等许多需要运动的领域。当然,如前所述,监督学*无法做到这一点。
与动态规划和控制理论的联系:
正如我们已经熟悉的,动态规划是一种获得任何问题的最优解的方法。动态规划已经成为解决旅行商问题和其它图论相关问题最成功的算法之一。这种方法使用迭代方法,其中一组解决方案可以在一个或多个步骤中找到,然后算法的剩余部分决定哪个解决方案是最优的。
动态规划方程:动态规划的标准方程被称为贝尔曼方程。该方程可应用于所有决策问题,例如,在旅行推销员问题中,给定一组城市及其距离,问题是获得穿过所有城市至少一次的最短路径。贝尔曼方程可由下式给出:
这个方程包括寻找一个函数 V(x,a),这个函数的目标是为每个状态 x 选择一个动作 a,使得 a 对于 x 总是最优的。这是解释贝尔曼方程的最简单的形式(不是数学的,为了证明,参考维基百科)。目前广泛使用的所有强化学*算法都是动态可编程的,也就是说它们都采用贝尔曼方程的形式。我们稍后会看到 Deep-Q 算法,它类似于贝尔曼方程。一些强化学*算法遵循马尔可夫决策规则,如 SARSA 算法等。在这种情况下,它们采用随机空间中的贝尔曼方程的形式,如下所示:
深度 Q 学*算法:
谷歌的 Deepmind 在 2015 年发表了一篇关于所谓深度 Q 学*算法的非常有趣的论文。这种算法能够在大多数人类难以完成的任务中表现出色。该算法能够在超过 2600 个雅达利游戏中脱颖而出。
他们的工作代表了有史以来第一个能够在没有任何人类干预的情况下不断适应其行为的通用智能体,这是在寻求通用人工智能的过程中向前迈出的一大步。
代理是使用一种称为 Q-learning 的算法开发的,Q 学*算法的核心是 Bellman 方程的一个结果,因此它遵循动态规划的方法论。
实用方法:每个强化学*问题都包含以下成分:
- 代理:学*算法或任何有学*能力的物理实体。
- 环境:是部署代理的地方或空间。地球是一个环境,在这里人类是代理人。一个环境是由状态、行动和奖励形成的一套定义明确的规则组成的。
- 状态:代理在任何情况下的有效位置称为状态。代理可以通过执行动作从一种状态转换到另一种状态。每一个行动,不管对国家来说是否正确,都有回报。
- 奖励:奖励是由特定行动的环境定义的结果。如果行动正确,奖励是积极的,否则是消极的。
任何代理人的长期目标都是了解环境,以便获得最大的回报。奖励只有在积极的情况下才能最大化,积极的奖励反过来又是对那个状态采取正确行动的结果。因此,最大化问题处理以下序列,简单来说:
- 给定有效状态 si,生成随机动作 ai。
- 假设动作是正确的,并经历到下一个随机状态 si+1 的转换。
- 计算过渡的奖励 ri。
- 如果奖励是积极的,记住这种状态下的行动,因为这是适当的行动,但不是最佳行动。
- 如果奖励是负的,放弃行动。
- 从获得的一组最佳行动中,找出奖励最大的最佳行动。
- 对环境中的每个状态都这样做。
该等式可由下式给出:
意味着,Q 值,即状态-动作值取决于旧值+新信息和旧信息之间的差异。旧的信息已经存在于记忆中,而新的信息是通过最大化从行动中获得的回报而获得的。所以在许多强化学*问题中,我们构造了一个神经网络,如果动作是正的,它可以学*状态和动作之间的映射。一旦训练完成,我们就可以部署网络,使它为任何有效状态创建正确的动作,从而最大化回报。
登山车示例:
Openai gym 提供了一套可以训练智能体的环境,Mountain Car 是一个很好的例子,强化学*可以用来学*最佳加速度。这个游戏的目标是训练一辆汽车成功爬山。
我们可以从头开始实现 Q 学*,或者我们可以简单地使用 Kears-rl。Krars - rl 只是一个 API 集合,通过它可以使用预先编写的算法。
Car learning to produce optimal acceleration.
如图所示,在 4000 集结束时,汽车已经学会产生足够的加速度来爬山。
代码:
Code for MountainCar-v0
谢谢大家!更多关于强化学*的例子,请参考我的 GitHub 简介:https://github.com/Narasimha1997
我的 Linkedin 个人资料:https://www . Linkedin . com/in/narasimha-pras Anna-HN-17aa 89146/
谢谢:)
什么是人工智能?第一部分
原文:https://towardsdatascience.com/what-is-artificial-intelligence-part-1-75a6de110141?source=collection_archive---------8-----------------------
虽然人工智能(AI)这个术语已经存在很多年了,但*年来它似乎已经成为一个流行语。像许多从科学中获得的流行词汇一样,人工智能似乎已经成为一个相当恼人的现象的受害者:大多数使用这个术语的人并不真正知道它的意思。
好吧,也许这有点太苛刻了。当然,使用人工智能这个术语的人对它的意思有一些了解,但是我注意到在很多情况下,非专家(甚至一些所谓的专家)的用法偏离了这个术语在学术界最初的意图。
没有人真正知道是谁创造了“人工智能”这个术语。许多人将其归因于已故的计算机科学家约翰·麦卡锡,但是根据丹尼尔·克勒维耶的采访,麦卡锡否认提出了这个术语。
Participants of the 1956 Dartmouth Summer Research Project on Artificial Intelligence in front of Dartmouth Hall. Based on my wife’s highly tuned facial recognition algorithm, the photo includes Claude Shannon (front right), John McCarthy (back right), Marvin Minsky (center), Ray Solomonoff (front left), and Nathaniel Rochester (back left). Photo credit Margaret Minsky via www.achievement.org
尽管如此,人工智能一词在 20 世纪 50 年代中期开始流行,尽管主要是在美国科学家的小圈子里。一个同义术语,机器智能,似乎起源于英国,至今仍在使用,虽然没有人工智能广泛。在本文中,我主要使用术语 AI 来指代“思维机器”的概念,除非我讨论的是一贯使用“机器智能”的作者。
总的来说,本文旨在从历史的角度阐明人工智能的概念,并简要追溯其发展到现代。作为免责声明,我需要指出我不是专业的历史学家。在这段简短的历史中,可能有许多遗漏的情节,但我将通过引用许多更权威的参考文献来试图弥补这一点。
我打算分几部分发表这篇文章。在第 1 部分中,我将重点放在能够思考的机器的概念上。第二部分将集中在 1936 年到大约 1954 年间英国的发展。第三部分将继续从 1954 年左右开始的故事,当时焦点开始转移到美国。
早期人工智能简史
为了理解人工智能是什么,我们回顾过去,看看伟大的思想家认为机器可能做什么。我将人工智能的早期历史分为三个时期:“从自动机到分析引擎”,“从图灵机到跳棋”,以及“从逻辑理论家到自我编写程序”。这将我们带到大约 20 世纪 50 年代末,在这一点上,我们可以说人工智能是一个根深蒂固的科学学科。
从自动机到分析引擎
一些作者将思考机器的想法追溯到古埃及或古希腊(例如[2]),但我个人并不认为这些例子,如苏格拉底和 Euthypro 之间关于虔诚标准的对话,与思考机器或人工智能有太多关系(见[3])。另一个例子是 Talos ,希腊神话中的青铜雕像。由于他被认为是由希腊神赫菲斯托斯创造的,他很难被称为人造生物。
In 1637, Descartes presumed that it would be impossible to create machines that reasoned like humans. Image from a first edition copy of Discourse on the Method (Source: Bibliothèque nationale de France, département Réserve des livres rares, RESM-R-76, Available from: http://gallica.bnf.fr/ark:/12148/btv1b86069594)
基于我有限的研究,我认为思考机器的想法可以追溯到 17 世纪[5]。特别是,勒内·笛卡尔在 1637 年发表了关于方法的论文(著名的短语“我思故我在”就来自于此),在论文中,他推测不可能创造出像人类一样推理的机器[6]:
“……从道德上讲,任何一台机器都不可能存在多种多样的器官,足以让它像我们的理性使我们能够行动那样,在生活的所有事件中发挥作用。”
事实上,在同一篇文章中,他概述了图灵测试,这个话题我们稍后会谈到:
对于那些熟悉不同的自动机或人类工业制造的移动机器所执行的各种运动的人来说,这也不会显得奇怪,与在每个动物体内发现的大量骨骼、肌肉、神经、动脉、静脉和其他部分相比,这只是很少的一部分…
……但是,如果有一些机器带有我们身体的形象,并且能够在道德上尽可能模仿我们的行为,那么仍然会有两种最确定的测试来证明它们不是真正的人。其中第一个是,他们永远不能使用我们能够胜任的词语或其他符号来向他人表达我们的思想:因为我们可以很容易地设想一台机器被构造成能够发出词汇,甚至能够发出一些与外部物体对它的作用相对应的信号,这些外部物体引起它的器官发生变化;例如,如果在一个特定的地方被触摸,它可能要求我们想对它说的话;如果在另一个地方,它可能会大叫说它受伤了,诸如此类;但不是说它应该把它们排列成不同的形式,以便恰当地回答在它面前所说的话,就像智力水平最低的人所能做的那样。
第二个测试是,虽然这种机器可能执行许多事情与我们任何人一样完美,或者可能更完美,但毫无疑问,它们在某些其他方面会失败,从中可以发现它们不是根据知识行事,而是仅仅根据它们的器官的配置…
他所指的自动机本质上是对各种生物的机械化模仿。据报道,这种自动机在古代就已经被制造出来,但它们很难被称为模仿人类思维的机器。
Image of the Great Chess Automaton from “Briefe über den Schachspieler des Hrn. von Kempelen” by Karl Gottlieb von Windisch and published in 1783 (Source: Krešimir Josić, University of Houston)
一个例外是 Wolfgang von Kempelen 的大象棋自动机,它建于 1769 年。它被设计来下棋,而且下得很好。它甚至打败了本杰明·富兰克林!大多数人都认为擅长下棋是一种需要智力的能力。唯一的问题是冯·肯佩兰的象棋自动机原来是假的。这个奇妙的装置里真的有人!直到 1837 年,也就是它诞生* 70 年后,这一点才被揭示出来。
然而,这个例子表明,到 18 世纪,思考机器的想法肯定仍然存在,而且很好,一些人愿意试图证明笛卡尔是错误的(如果他们甚至知道他的断言)。事实上,似乎没有人知道如何制造会思考的机器,但至少梦想是存在的。
19 世纪上半叶是一个巨大的飞跃,当时发明家查尔斯·巴贝奇提出了分析引擎。它被广泛认为是通用计算机的第一个设计。虽然分析引擎从未完全建成,但许多人认为它在推进机械化通用计算的梦想方面具有影响力。
Trial model of Charles Babbage’s Analytical Engine. (Source: Science Museum Group. Babbage’s Analytical Engine, 1834–1871. (Trial model). 1878–3. Science Museum Group Collection Online. Accessed March 10, 2018. https://collection.sciencemuseum.org.uk/objects/co62245.)
1843 年,阿达·洛芙莱斯翻译并注释了 Luigi Menabrea 的一篇论文,该论文基于 1840 年巴贝奇在都灵的演讲,描述了巴贝奇的分析引擎[8]。似乎没有人想到分析引擎确实是一台思考机器:
因为机器不是一个有思想的生物,而只是一个根据强加给它的法则行动的自动机。
洛夫莱斯在她的笔记中补充道:
分析引擎并不自命能创造任何东西。它可以做我们知道如何命令它执行的任何事情。它可以跟随分析;但是它没有预见任何分析关系或真理的能力。它的职责是帮助我们利用我们已经熟悉的东西。
尽管分析引擎不被认为是思维机器,但它在设计能够进行复杂数学计算的计算机方面向前迈出了一大步。这将被证明是对其他计算机先驱的鼓舞,比如艾伦·图灵,我们接下来会谈到他。
继续第 2 部分。
参考
[1]克勒维耶博士(1993 年)。人工智能:探索人工智能的动荡历史。纽约:基础书籍。
[2]哈克,s .(未注明)。人工智能简史。检索自https://www . atariarchives . org/deli/artificial _ intelligence . PHP。
[3]柏拉图。(约。【公元前 399 年】T4。从http://www.gutenberg.org/ebooks/1642取回。
[4] 塔罗斯。检索自https://www . Greek mythology . com/Myths/Creatures/Talos/Talos . html。
【5】人工智能。(2010) 你知道吗?。从https://didyouknow.org/ai/.取回
[6]笛卡尔(1637 年)。论正理求真的方法。从 http://www.gutenberg.org/ebooks/59 取回。
[7]伟大的国际象棋自动机。(未注明)。恶作剧博物馆。检索自http://hoaxes . org/archive/permalink/the _ great _ chess _ automaton。
[8]梅纳布雷亚,L. F. (1843 年)。查尔斯·巴贝奇发明的分析引擎草图。a .洛夫莱斯)。科学回忆录。第三卷。从https://www.fourmilab.ch/babbage/sketch.html取回(原作发表于 1842 年)。
什么是人工智能?第二部分
原文:https://towardsdatascience.com/what-is-artificial-intelligence-part-2-bad0cb97e330?source=collection_archive---------9-----------------------
从图灵机到跳棋
在这篇文章中,这是从一开始就追溯人工智能概念的系列文章的第二部分,我们继续讲述艾伦·图灵的故事,他被许多人认为是计算机科学之父。正如我们将看到的,艾伦·图灵不仅有资格被称为计算机科学之父,也有资格被称为最早的人工智能先驱之一(或者他会称之为机器智能)。因此,我对他短暂而非凡的职业生涯倾注了相当多的关注,包括一些生平细节。
我重申我的免责声明,我不是专业的历史学家。相反,我希望这一系列文章能够激励其他人进一步研究这一迷人的历史,并为“人工智能”的实际含义提供见解。
论可计算数(1936)
1936 年,艾伦·图灵发表了科学史上具有里程碑意义的论文之一《论可计算数,以及对 entscheidungpolymer 的应用》[1] 。在书中,他描述了他所谓的“通用计算机器”。为了纪念他,这个理论构造现在被称为通用图灵机,它不仅具有理论意义:许多人认为它是现代计算机的基础思想。
图灵在计算科学方面的早期工作与人工智能相关,因为它提出了以巴贝奇的分析引擎为代表的计算思想。图灵的论文从数学角度证明了一般计算由单台机器完成的可能性。也就是说,图灵证明了任何可以被计算的数或序列,都可以被一种单一类型的机器计算,即所谓的通用图灵机。虽然这可能无法证明机器能够思考,但它表明,完成一般计算任务的机器是可以设计出来的(至少在理论上是如此)。
Several pages of a typed draft of “On Computable Numbers” are known to exist. Another unpublished paper was handwritten by Turing on the back of these pages. I gratefully acknowledge [2] for this information (Image Source: AMT/C/15/image 01a.2. The Turing Digital Archive [6]. Copyright © P.N. Furbank)
谜和炸弹(1939-1942)
1939 年 9 月 4 日,也就是英法对德宣战的第二天,图灵从剑桥搬到了英国政府代码和密码学校(GC & CS)的总部布莱切利公园[3]。在那里,他成了破译机Bombe的主要设计者,这种破译机用于破译德国 Enigma 密码机的密码。
谜和炸弹的故事是一个漫长而有趣的故事,但它已经被很好地记录下来了。我将只叙述基本的细节。我向感兴趣的读者推荐杰克·科普兰的优秀著作《图灵的本质》和其中引用的参考资料。
Example of a wartime Enigma cipher machine. (Source: National Museum of the Royal Navy)
在这篇文章中,我想简要探讨的是图灵的工作和人工智能的发展之间的联系,我相信这有助于阐明人工智能实际上是什么的概念。
在许多方面,Bombe 可以被认为是机器学*的原始实现。“炸弹”是一种机器,它装有复制几份“谜”的元件,建造的目的是发现能解开德国密码信息的“T2 之眼”。它使用启发式搜索来找到一个候选关键字,该关键字将解决一组特定的约束条件(即,一个启发式的,由炸弹的特定设置来表示),然后人工操作员将检查该关键字,应用于编码信息,是否会产生连贯的德语。图灵后来推测“智力活动主要由各种各样的搜索组成。”[4].
我认为上述过程是机器学*的原始形式,因为这是当今许多机器学*算法在高层次上所做的:(1)从一大组可能的配置中选择一个配置,表示满足某些约束的函数的参数,(2)根据某种正确性度量来检查/测量候选解(即参数集),(3)根据需要重复,以及(4)一旦对性能满意,就使用所选配置作为模型来计算其他尚未看到的数据的一些输出。
Images of a “Bombe,” which was about 2 meters high (including the wheels and cabinet). The left image shows the front with its nine rows of drums replicating Enigma “wheels”. The right image show the rear panel, where cables connected together different drums in order to represent different constraints (Left image source: Gerald Massey; Right image source: Antoine Taveneaux)
Bombe 和现代机器学*之间有三个主要区别,不是在程序上,而是在实现上。首先,Bombe 要求操作员使用连接不同组件的电缆来设置机器(见上图),以便施加某些约束/启发。一个人还被要求将候选“解决方案”转移到一台单独的机器上(一个复制的谜),以试图破译一条完整的德国信息。原则上,这些手动步骤也可以是自动化的,但在这个时期,让人类操作员执行这些步骤可能比构建/扩展一台机器来执行相同的任务更容易。
其次,虽然 Bombe 可以在大约两个小时内选择和检查 17,576 种配置[3],但在现代计算机上执行的现代机器学*在许多情况下可以每秒执行数百万次这种类型的过程(当然,细节取决于参数的数量、计算之间的函数、计算机的大小等)。).
第三,炸弹是一种被设计用来执行特定任务的机器(即学*恩尼格玛密码的钥匙),而且只能用于该任务。今天,我们通常在通用计算机上执行机器学*任务,这些计算机可以通过简单地将其他程序加载到内存中来“重新配置”用于其他任务。
尽管用现代术语来说,这种炸弹需要手动操作且“缓慢”,但与之前存在的任何东西相比,它代表了其特定任务在自动化和计算速度方面的重大进步。请注意,当时还有其他计算机器存在,如 IBM 601 。不过,我不确定是否有可能像我们今天这样,在这个时代的不同机器之间进行“苹果对苹果”的计算速度比较。最后,我想指出的是,Bombe 是基于早期解谜机的设计,由波兰数学家设计的 Bomba 。
在进入其他话题之前,我想指出,在仅仅三四年的时间里,图灵从非常理论化的(关于可计算数字)转向了高度实用化的(破解德国军事通信)。用英国特勤局官方历史学家哈里·辛斯利爵士的话说:
我不会说图灵的所作所为让我们赢得了这场战争,但我敢说,如果没有他,我们可能会输掉这场战争。
我们还知道,在 1941 年初,由于德国潜艇对船只的攻击,英国面临着食物和其他基本供应品告罄的危险。当时,海军版的英格玛还没有被破解,许多人认为它无法破解,但最终当图灵的团队在 1941 年 6 月开始定期解码海军英格玛信息时,英国船只能够成功地避开 U 艇[3]。灾难得以避免。
如果这些成果——帮助英国人民避免饥饿,帮助盟军赢得二战——不是实践研究的缩影,我不知道什么是。在我看来,在图灵悲惨短暂的职业生涯开始时,他的工作的高度实践性对人工智能的发展有很大的影响。如果图灵继续走理论路线,这个领域可能不会像 1941-1953 年期间那样迅速发展,我们现在将探讨这一点。
图灵转向机器智能(约 1941-1953)
根据与图灵在布莱奇利公园共事的唐纳德·米歇尔的采访,图灵早在 1941 年就开始思考“机器智能”。他在 GC & CS 的同事中传阅了一篇关于机器智能的论文,但是现在已经遗失了。我们还知道,在 1941 年底,留给图灵研究的关于英格玛的理论问题已经不多了,所以他开始研究其他问题,只是在短期内加入了英格玛团队[3]。
1942 年 11 月,图灵去了美国,在那里他在贝尔实验室研究语音加密。在那里他遇到了 Claude Shannon,我们将在第 3 部分讨论他。图灵于 1943 年 3 月回到英国,继续致力于自动语音加密,直到战争结束。
第一台通用计算机设计(1945-1947)
尽管图灵 1936 年关于可计算数字的论文描述了一台通用的计算机,但它并不是一台计算机的实用设计。1945 年 10 月,图灵加入了国家物理实验室(NPL)的数学部门,致力于这样的设计。1945 年末,图灵发表了一份名为“提议的电子计算器”的技术报告,其中详细说明了这种机器的设计(见下图)。在这份报告中,他还提出了机器智能的话题,描述了什么将成为“经典”的人工智能问题:
给定国际象棋中的一个位置,机器可以列出每边大约三步的所有“获胜组合”。这……提出了一个问题‘机器会下棋吗?’很容易就能玩一场相当糟糕的游戏。这很糟糕,因为象棋需要智力。我们在本节开始时说过,机器应该被视为完全没有智能。然而,有迹象表明,冒着偶尔犯严重错误的风险,让机器显示智能是可能的。通过跟踪这一方面,机器可能会下一盘很好的棋。
Left: Original manuscript of “Proposed Electronic Calculator,” which was to become the Automatic Computing Engine (ACE). Right: Letter from Turing to Sir W. Ross Ashby, describing how ACE could be used to mimic how the human brain works. (Source: The Turing Archive for the History of Computing [5])
当这台机器的一个试验版本最终被命名为自动计算引擎(ACE;为了向巴贝奇致敬),建于 1950 年 5 月,它是世界上最快的计算机,运行速度为 1 MHz [3,第 367 页]。另一台使用与图灵的 ACE 设计相同的基本原理建造的计算机是 Bendix G15 ,被一些人认为是第一台个人计算机。
当图灵设计 ACE 时,机器智能是他考虑的首要问题,正如 1946 年写给 W. Ross Ashby 的一封信(见上图)所示:
在研究 ACE 的过程中,我对制造大脑活动模型的可能性比对计算的实际应用更感兴趣…
…机器很有可能尝试不同的行为,并以你描述的方式接受或拒绝它们,我一直希望让机器做到这一点 ACE 实际上类似于我在关于可计算数的论文中描述的“通用机器”。这种理论上的可能性在实践中是可以实现的……因此,尽管大脑实际上可能是通过改变其神经元回路来运作的……然而,我们可以在 ACE 中建立一个模型,在这个模型中,这种可能性是允许的…
1947 年 2 月 20 日,图灵在伦敦数学协会做了一次关于 ACE 的演讲。我们通过一个草稿副本了解了这个讲座的一些内容,这个草稿副本可以从[5]中获得,并且已经被重印了几卷(例如[7]和[3])。这不仅是已知的第一次描述机器智能的公开讲座,图灵还清楚地阐述了机器学*的概念:
有人说,计算机只能执行它们被指示去做的过程……同样真实的是,最初建造这些机器的意图是把它们当作奴隶,只给它们经过详细考虑的工作……直到现在的机器只是以这种方式使用。但是有必要总是以这种方式使用它们吗?
让我们假设我们已经设置了一台具有某些初始指令表[即程序]的机器,如果有充分的理由,这些表有时可能会修改这些表……可能它仍然会得到机器最初设置时所期望的类型的结果,但以更有效的方式……这就像一个学生从他的主人那里学到了很多,但通过自己的工作增加了很多。当这种情况发生时,我觉得人们不得不认为机器显示了智能。一旦人们能够提供合理的大内存容量,就应该可以开始在这些方面进行实验……我们想要的是一台能够从经验中学*的机器。
(黑体字是我为了强调而加的。)
主要由于内部政治和 NPL 对 ACE 项目的管理不善,直到 1950 年 5 月才完成 ACE 的“试验模型”。
剑桥公休假(1947-1948)
1947 年 7 月,图灵仍然受雇于 NPL,他去剑桥大学休假 12 个月。国家公共图书馆馆长查尔斯·达尔文爵士很好地表达了这一休假的目的[5]:
[图灵]想把他在机器上的工作进一步扩展到生物学方面。我可以这样来最好地描述它:迄今为止,机器被设计用来做相当于大脑较低部分的工作,他想看看机器能为较高部分做多少工作;例如,可以制造一台可以通过经验学*的机器吗?
A report written by Turing in 1948 titled “Intelligent Machinery” is the most detailed treating of artificial intelligence written before 1950. It was not published during Turing’s lifetime. (Source: The Turing Archive for the History of Computing [5])
休假回来后,图灵写了一份题为《智能机械》的报告。这是一部高度原创的作品,引入了具有学*能力的遗传算法和神经网络(他称之为“无组织机器”)等思想,以及强化学*。我不想给出详细的总结,我只想引用图灵在报告结尾的总结:
讨论了使机器表现出智能行为的可能方法。与人脑的类比被用作指导原则。有人指出,只有提供适当的教育,人类智力的潜力才能发挥出来。这项研究主要围绕一个应用于机器的模拟教学过程。定义了无组织机器的概念,并提出婴儿人类大脑皮层具有这种性质。简单的例子,这样的机器,他们的教育通过奖励和惩罚的方式进行了讨论。在一种情况下,教育过程一直进行到组织类似于 ACE。
图灵从未发表过这份报告,但同样可以通过[5]和几本选集(即[8]和[3])获得。
曼彻斯特时代(1948-1953)
由于对进展缓慢感到沮丧,图灵于 1948 年离开了他在 NPL 的职位,加入了曼彻斯特维多利亚大学的计算机实验室。
First page of Turing’s 1950 article “Computing Machinery and Intelligence,” where the now famous “Turing Test” was introduced.
计算机实验室是由马克斯·纽曼(布莱奇利公园的另一位老兵)于 1946 年建立的。当图灵加入时,他们正在深入开发“曼彻斯特宝贝”,当它在 1948 年 6 月 21 日运行第一个程序时,成为世界上第一台存储程序计算机。虽然我不会详细讨论图灵对曼彻斯特早期计算机发展的贡献,但可以说他的影响是巨大的。
图灵在 1948 年至 1953 年期间最著名的成就是一系列关于机器智能主题的文章和公开讲座,包括 1950 年发表在领先哲学杂志 Mind 上的文章“计算机械和智能”。在这篇文章中,提出了著名的“模仿游戏”,也就是现在所知的图灵测试:
我建议考虑这样一个问题,“机器能思考吗?”这应该从“机器”和“思考”这两个术语的定义开始……我不会尝试下这样的定义,而是用另一个问题来代替这个问题,这个问题与它密切相关,并且用相对明确的语言表达。
这个问题的新形式可以用一个我们称之为“模仿游戏”的游戏来描述。它由三个人玩,一个男人(A),一个女人(B),和一个审问者(C),他们可能是男性也可能是女性。审讯者呆在一个与其他两人分开的房间里。这个游戏的目的是让审讯者确定另外两个人中哪个是男人,哪个是女人…审讯者可以向 A 和 B 提问…
在举了一些审讯者可能会问的问题类型的例子后,图灵继续说道:
我们现在问这样一个问题,“当一台机器在这个游戏中扮演 A 的角色时,会发生什么?”这样玩游戏时,审讯者会像在男女之间玩游戏时一样经常错误地决定吗?这些问题取代了我们原来的‘机器会思考吗?’
文章的其余部分描述了对机器可以思考这一观点的各种可能的反对意见,以及图灵对这些反对意见的反驳。还有一章是关于“学*机器”,这在很大程度上是对他在 1948 年文章中概述的观点的扩展。他以一个深刻的观察结束了这篇文章:
我们只能看到前面不远的地方,但我们可以看到那里有许多需要做的事情。
1951 年,在英国广播公司做了几次广播演讲,其中一次题为“智能机械,异端学说”,另一次题为“数字计算机能思考吗?”1952 年,他参加了 BBC 播出的一个小组讨论,题目是“自动计算机器可以说会思考吗?”。其他小组成员包括理查德·布莱斯维特(哲学家)、杰弗里·杰弗逊(神经外科医生)和马克斯·纽曼。
在这段时间里,图灵也对人工生命的话题产生了兴趣。这有点超出了本文的范围,所以我不会试图总结他在这方面的工作。1953 年,他发表了一篇名为《国际象棋》的短文,这标志着他多年来为计算机编程下棋的努力达到了顶峰。最后,在 1954 年,图灵发表了他的最后一篇文章,题目是《可解和不可解的问题》,发表在科学新闻上,这是一份普及科学的杂志。这篇文章的目的是向普通读者展示他在可计算数字方面的早期贡献,也许是最持久的贡献。
图灵的审判与死亡
Alan Turing quoted in 11 June 1949 edition of “The Times” (UK).
1952 年,图灵受到审判,并被判犯有同性恋行为,这在当时的英国是刑事犯罪。1954 年 6 月 8 日,图灵被发现死于家中。虽然死亡被裁定为自杀,这一发现一直是争议的主题[9]。
尽管他的生命和职业生涯短暂,但图灵对人类和计算机创造力的影响是持久的。我想引用图灵在 1949 年 6 月 11 日《T4 时报》上的一篇文章来结束我的演讲:
这仅仅是即将发生的事情的预演,也仅仅是将要发生的事情的影子。在真正了解这台机器的性能之前,我们必须先有一些使用它的经验。我们可能需要几年时间才能适应新的可能性,但我不明白为什么它不能进入人类智力通常覆盖的任何领域,并最终在平等的条件下竞争。
参考
[1]a . m .图灵(1937 年)。可计算数及其在 Entscheidungsproblem 问题上的应用。伦敦数学学会会报, 2 (1),230–265 页。(注:从技术上讲,这篇论文发表于 1937 年,但在那个时代,论文通常会在会议上被大声朗读,之后会以纸质形式发表在会议录上。这篇论文是在 1936 年 11 月 12 日宣读的。)
[2]霍奇斯(未注明日期)。可计算的数字和图灵机,1936 年。艾伦·图灵互联网剪贴簿,从 http://www.turing.org.uk/scrapbook/machine.html 的 T2 取回。
[3]科普兰,B. J .).(2004).《图灵精粹》:在计算、逻辑、哲学、人工智能和人工生命方面的开创性著作,还有《谜》的秘密。牛津:克拉伦登出版社。
[4]图灵,A. (1948)。“智能机械”。在 B. J .科普兰(编辑).(2004).《图灵精粹》:在计算、逻辑、哲学、人工智能和人工生命方面的开创性著作,还有《谜》的秘密。牛津:克拉伦登出版社。
[5]科普兰法官(未注明日期)。AlanTuring.net:计算历史图灵档案,从http://www.alanturing.net/检索。
[6]国王学院(剑桥)。(未注明)。图灵数字档案馆,从http://www.turingarchive.org取回。
[7]卡彭特、B. E .和多兰·r . w .(1977 年)。另一台图灵机。计算机杂志。第 20 卷第 3 期。
[8]埃文斯和罗伯逊编辑).(1968)关键论文:控制论。伦敦:巴特沃斯。
[9]维基百科贡献者。(2018 年 3 月 15 日)。艾伦·图灵。在维基百科,免费百科。检索 2018 . 3 . 20 20:08 来自https://en.wikipedia.org/w/index.php?title=Alan_Turing&oldid = 830576161
未引用的其他参考文献:
Copeland,B. J. (2005 年)。艾伦·图灵的自动计算引擎:密码破译大师努力打造现代计算机。纽约:牛津大学出版社。
科普兰,B. J。).(2012).艾伦·图灵的电子大脑:努力打造 ACE,世界上最快的计算机。纽约:牛津大学出版社。
科普兰,j .,鲍文,j .,斯普雷瓦克,m .,,威尔逊,R .).(2017).图灵指南。纽约:牛津大学出版社。
胜彦和杉本四叶(2017 年)。《从计算机器到学*智能机器:艾伦·图灵机器思想的年代发展》。在了解信息:从大爆炸到大数据。 (A. J .舒斯特)湛:施普林格自然。
什么是贝叶斯法则?
原文:https://towardsdatascience.com/what-is-bayes-rule-bb6598d8a2fd?source=collection_archive---------0-----------------------
贝叶斯法则为我们提供了一种基于新的相关的证据来更新我们的信念的方法。例如,如果我们试图提供一个给定的人患癌症的概率,我们最初只会说无论人口中有多少百分比的人患癌症。然而,给定额外的证据,例如这个人是吸烟者,我们可以更新我们的概率,因为如果这个人是吸烟者,患癌症的概率更高。这允许我们利用先验知识来改进我们的概率估计。
规则
下面的等式是贝叶斯法则:
该规则有一个非常简单的推导,直接来自联合概率和条件概率之间的关系。首先注意 P(A,B) = P(A|B)P(B) = P(B,A) = P(B|A)P(A)。接下来,我们可以将涉及条件概率的两项设置为彼此相等,因此 P(A|B)P(B) = P(B|A)P(A),最后,将两边除以 P(B)得出贝叶斯法则。
在这个公式中, A 是我们想要概率的事件, B 是在某种程度上与 A 相关的新证据。
P(A|B) 称为后部;这就是我们试图估计的。在上面的例子中,这将是“假定一个人是吸烟者,患癌症的概率”。
P(B|A) 称为似然;这是根据我们最初的假设,观察到新证据的概率。在上面的例子中,这将是“假定某人患有癌症,成为吸烟者的概率”。
P(A) 被称为之前的;这是我们假设的概率,没有任何额外的先验信息。在上面的例子中,这将是“患癌症的概率”。
P(B) 称为边际可能性;这是观察到证据的总概率。在上面的例子中,这将是“成为吸烟者的概率”。在贝叶斯规则的许多应用中,这被忽略,因为它主要用作归一化。
例子
使用癌症诊断的例子,我们可以表明贝叶斯规则允许我们获得更好的估计。现在,我们将把一些虚构的数字放入示例中,这样我们就可以评估贝叶斯规则带来的差异。假设得癌症的概率是0.05——意味着 5%的人得了癌症。现在,假设成为吸烟者的概率是 0.10——意味着 10%的人是吸烟者,20%的癌症患者是吸烟者,那么 P(吸烟者|癌症)= 0.20。最初,我们患癌症的概率只是我们的先验,所以 0.05。然而,使用新的证据,我们可以改为计算 P(癌症|吸烟),它等于(P(吸烟者|癌症)* P(癌症))/ P(吸烟者)=(0.20 * 0.05)/(0.10)=0.10。
通过引入新的证据,我们因此获得了更好的概率估计。最初我们有 0.05 的概率,但是使用吸烟者的证据,我们能够得到更准确的概率,是我们先前的两倍。在给出的例子中(即使有我们编造的数字),这种影响应该是很符合逻辑的,因为我们知道吸烟会导致癌症。因此,这证明了贝叶斯规则如何允许我们使用相关信息来更新我们的信念。
贝叶斯统计有什么用?
原文:https://towardsdatascience.com/what-is-bayesian-statistics-used-for-37b91c2c257c?source=collection_archive---------3-----------------------
概率编程与机器学*
在过去的十年里,我们看到了机器学*应用的爆炸式增长,这些应用在搜索、电子商务、广告、社交媒体和其他垂直领域尤为成功。这些应用特别关注预测准确性,通常涉及大量数据——有时在万亿字节左右——事实上,这推动了网飞、亚马逊、脸书和谷歌等科技巨头的大量创新。
从根本上说,虽然这些模型通常是“黑箱”,观察者不容易理解,但在客户流失建模或构建目标广告模型等应用中,模型“如何”工作并不重要,重要的是它确实工作。“工业机器学*”的另一个局限是,它需要收集大量的数据。举例来说,你的服务需要数百万活跃用户来证明建立一个广告模型的合理性。
这些限制使得很难或不可能制作只使用少量数据并利用特定领域专业知识的模型。它们还会在危险或法律复杂的环境(如健康或保险)中对模型产生负面影响。在这种情况下,产生预测的模型必须充满信心,让人们能够评估风险。例如,在预测患者患病的可能性时,了解不确定性估计值是很重要的,或者了解投资组合在银行或保险方面的损失风险有多大也是很重要的。
如果我们超越这些限制,我们就为新产品和新分析敞开了大门,这就是本文的主题。解决方案是一种叫做贝叶斯推断的统计技术。这种技术从我们陈述关于被建模系统的先验信念开始,允许我们将专家意见和特定领域的知识编码到我们的系统中。这些信念与数据相结合来约束模型的细节。然后,当用于进行预测时,该模型不会给出一个答案,而是给出一个可能答案的分布,让我们能够评估风险。
贝叶斯推理长期以来一直是学术科学中的一种选择方法,原因如下:它天生包含了信心的概念,它在稀疏数据中表现良好,模型和结果高度可解释且易于理解。利用你对世界的了解以及相对较少或杂乱的数据集来预测世界未来的样子是很简单的。
直到最*,实现这些系统的实际工程挑战仍然令人望而却步,并且需要大量的专业知识。最*,出现了一种新的编程范式——概率编程。概率编程隐藏了贝叶斯推理的复杂性,使得这些高级技术可以被广大的程序员和数据分析师所使用。
概率和结果分布的基本概念是这种范式中模型的基本构件。
现代机器学*中最令人兴奋和最具影响力的创新之一是图像分析的深度学*,这使得以前不可能的性能成为可能。概率编程通常过于专业或涉及专业语言,虽然这不是一种新的能力,但可能会像深度学*一样有影响力。
概率编程允许你将你的领域知识与你观察到的数据结合起来。它之所以强大,有三个原因:首先,它允许你整合领域知识——大多数机器学*框架不会这样做;其次,它对小型或嘈杂的数据集工作良好;第三,它是可解释的。
有哪些应用?
简而言之,在任何有大量异构或噪声数据的应用领域,或者任何需要清楚了解不确定性的领域,都可以使用贝叶斯统计。根据与专家的讨论,一些已经看到早期采用的领域是、电子商务、保险、金融和医疗保健。
来源:https://www . psychologyinaction . org/psychology-in-action-1/2012/10/22/Bayes-rule-and-bomb-threats
贝叶斯法则的力量源于这样一个事实,即它将我们可以计算的量(假设为真时我们观察到测量数据的可能性)与我们可以用来回答任意问题的量(给定数据时假设为真的后验概率)联系起来。
分层模型
贝叶斯秘方是分层模型。我们可以用它们来模拟具有独立性的复杂系统。在这样一个模型中,我们观察单个事件的行为,但是我们加入了这样一个信念,即这些事件可以在一个层次结构中组合在一起。
例如,这可以是房地产定价模型或商业保险中的风险定价模型。在这两种模式中,你都可以在社区中拥有公寓或商店,而社区又在行政区中。一个街区里的商店并不都一样,但一般来说都很相似。佩克汉姆的普通商店不同于德普福德的普通商店,也不同于普特尼的普通商店。
这是层次模型。通过这种方式建模,我们可以学到很多东西,我们不仅可以从德普福德,还可以从佩卡姆和普特尼那里了解德普福德。这在特定等级的数据稀疏的情况下非常有用,例如,在特定时间段的特定邻域中没有索赔。
图:说明了“收入预测”模型的层次结构。
想了解更多?
- https://www.youtube.com/watch?v=0kRytJZcHVw 是我最*在伦敦 PyData 做的一个演讲
- 你可能想在这里注册概率编程初级邮件列表【http://eepurl.com/dFZZGb
- 我组织了一门叫做概率编程入门的课程,它提供了超过 3 个半小时的关于概率编程本质的视频直播。
- 要了解更多数据科学的东西,你可以在 Twitter 上关注我@ springcoil
什么是数据科学,什么不是?
原文:https://towardsdatascience.com/what-is-data-science-and-what-is-it-not-c6a09d735f02?source=collection_archive---------6-----------------------
数据科学,也被称为数据驱动的科学,是一个关于科学方法、过程和系统的交叉学科领域,以结构化或非结构化的各种形式从数据中提取知识或见解,类似于数据挖掘。
现在,我们准备讨论什么是数据科学。它包含了一些编程技巧、一些统计准备、一些可视化技术,最后但同样重要的是,许多商业意识。我特别关心的商业意识是一种能力和意愿,有时是渴望,将任何商业问题转化为可以利用当前或即将到来的可用数据来回答的问题。事实上,这需要一种特殊的方式来连接充满数据的随机世界中的所有点,其中大多数数据可能不会立即对成为一名工作数据科学家有用。
根据我目前的理解,数据科学家是连接商业世界和数据世界的人。同样,数据科学是数据科学家用来实现这一目标的手艺。
什么是
- 这有点用词不当,是媒体用来描述一切的时髦词。然而,通过这次讨论达成一致是很好的。
- 这些问题是关于数据科学的。所以我不会谈论数据科学家。转到什么是数据科学家?感兴趣的话。
- 我在大多数答案中发现的最大错误是某种“数据科学就是当你处理大数据、大量数据时”。那不是真的,数据科学可以应用到一个有一千行的数据集,这个没有问题。
- 如果我们要称之为“科学”,我们需要考虑科学和科学方法的定义。据此,数据科学不仅仅是实用的或经验的方法,它需要科学的基础。
- 没有人谈到数据和信息的区别。
- 数据是一组原始的、无组织的东西,需要处理后才有意义。
- 信息是指数据在给定的环境中被处理、组织、结构化或呈现以使其变得有用
- 基于此,我们将有数据科学和信息科学。现在,人们有一种偏见,谈论数据科学,包括信息科学。
- 很明显,在过去的几年里,它被应用于许多领域:
- 统计/数学
- 商业分析
- 市场情报
- 战略咨询
- 许多其他人…
- 最疯狂的是,你会看到这些领域的专业人士更新他们的简历,比如“我从事数据科学工作…”
- 以简单的方式创造数据科学。两个并不完全相关的方面,但随着新的快节奏和技术世界的到来,将不得不融合在一起:
- 统计/数学:公式化合适的模型,产生洞察。
- 计算机科学:在模型和数据之间架起一座桥梁,在可行的时间内得出结果。
- 从事数据科学工作时需要了解或掌握一些知识的主题/工具:
- 线性代数
- 非线性系统
- 解析几何
- 最佳化
- 结石
- 统计数字
- 编程语言(R、Python、SAS)
- 软件:IBM 的 Excel,SPSS
- 通用平台:IBM 的 Watson Anlytics,Azure 机器学*,Google Cloud 机器学*,
- 数据可视化:使用 plotly/ggplot 的 Power BI、Tableau、R/Python
- 机器学*(监督、非监督和强化学*)
- 大数据
- 大数据框架(Hadoop 和 Spark)
- 硬件(CPU、GPU、TPU、FPGA、ASIC)
- 一图抵一万字。绘制了康威的数据科学维恩图。实质性专业知识(或领域专业知识)是您正在应用数据科学的领域的具体知识。要了解更多关于数据科学缺乏实质性专业知识的信息:数据科学讲座中缺少什么——风险越来越大
什么不是
- 机器学*不是数据科学的一个分支。机器学*起源于人工智能。数据科学只是把 ML 作为一个工具。原因是它为特定的任务产生惊人的和自主的结果
- 这并不能拯救那些从来没有衡量过任何东西,现在想要从他们的数据中获得洞察力的公司。“垃圾进,垃圾出”的数据科学将和未来几年产生的数据一样好。
- 只是使用一些 Excel 图表呈现数据,而没有任何关于数据的见解。
什么是期望值?
原文:https://towardsdatascience.com/what-is-expected-value-4815bdbd84de?source=collection_archive---------3-----------------------
用简单的游戏例子直观地解释期望值
期望值是大量实验中随机变量的平均值。随机变量将数值映射到实验中每个可能的结果。我们可以通过求和来计算离散随机变量的期望值,在离散随机变量中,潜在结果的数量是可数的,求和的每一项都是随机变量的可能值乘以结果的概率。因此,例如,如果我们的随机变量是通过滚动一个公平的三面骰子获得的数字,期望值将是(1 * 1/3) + (2 * 1/3) + (3 * 1/3) = 2。
如果我们假设实验是一个游戏,随机变量将游戏结果映射到获胜金额,因此它的期望值代表了游戏的预期平均获胜额。因为期望值跨越了实数,所以它通常被分成负值、中性值和正值。具有每种期望值的游戏在现实生活中经常出现,因此期望值提供了一个简单的决策启发。
为了举例说明每种类型的游戏,我将使用 3 个类似的涉及抛硬币的例子,明确地说,每个场景中的随机变量是抛一次硬币的预期赢款。假设在每种情况下,硬币都是公平的,那么正面和反面的概率都是 1/2。
中性期望值博弈
You flip the fair coin. Every time you get heads, you lose $1, and every time you get tails, you gain $1.
这种情况下的期望值是(-1 * 1/2) + (1 * 1/2) = 0。因此,因为硬币是公平的,损失金额等于收益金额,所以随着时间的推移,你既不会获利也不会亏钱。在这样的游戏中,虽然没有理由玩,但也没有理由不玩。因此,这些类型的游戏非常适合简单的娱乐,例如石头剪子布,在这种游戏中,随机选择一步棋是最佳策略,预期收益为 0。
正期望值博弈
You flip the fair coin. Every time you get heads, you lose $1, and every time you get tails, you gain $2.
这种情况下的期望值是(-1 * 1/2) + (2 * 1/2) = 1/2。因为正面和反面的可能性相等,所以反面的收益大于正面的损失。在这样的游戏中,你会随着时间的推移而获得金钱,所以你应该玩这种类型的游戏。这种类型的场景出现在许多现实生活的决策中,例如投资股票市场(随着时间的推移,市场处于总体上升趋势),学*考试(几个小时的损失时间被更高的 GPA 所抵消),或准备面试(几周的损失时间被更好的工作所带来的好处所抵消)。
负期望值博弈
You flip the fair coin. Every time you get heads, you lose $1, and every time you get tails, you gain $1\. Additionally, there is a $0.01 fee for every flip regardless of the outcome.
这种情况下的期望值是(-1.01 * 1/2) + (.99 * 1/2) = -0.01。因此,尽管硬币本身是公平的,损失金额等于收益金额,恒定费用导致游戏是一个负价值的游戏。在这样的游戏中,随着时间的推移,你预计会输钱,所以你不应该玩这种类型的游戏。这在许多赌博平台中很常见,在这些平台中,赌场提供最初中立的游戏,但随后收取费用,从而破坏了游戏的中立性(因此有“赌场总是赢家”的说法)。
结论
从期望值的角度考虑决策是决定是否有经济原因参与一项活动的简单方法。当然,除了纯粹的经济回报,还有其他方法来衡量效用,因此预期收益并不是一个万无一失的决策工具。此外,请记住,期望值是在大量重复试验的基础上得出的,因此这可能会对某些可能性非常少的事件提供扭曲的观点。比如考虑中彩票。这很可能是一个积极的预期价值机会,但你在有限的生命中真正实现这一价值的机会是如此之低,以至于不值得购买彩票。
什么是特质阿尔法?
原文:https://towardsdatascience.com/what-is-idiosyncratic-alpha-cd3fb3a491c5?source=collection_archive---------3-----------------------
Eagle’s View 资产管理公司总裁尼尔·伯杰(Neal Berger)在一篇市场评论中提到了特殊交易策略。在本文中,我们试图阐明这些特质策略是什么。
下面是摘自尼尔·伯杰的市场评论,由马蒂亚斯·克纳布报道。)
总之,我们认为量化策略在我们的投资组合中仍有一席之地。传统的、更“普通”的量化策略,如基本面因素、动量和基于均值回归的统计套利,则不会。我们已经或正在退出那些策略和经理,我们认为他们运行的是更加平庸的量化策略,这些策略和经理没有认识到或跟上量化竞争的加剧以及由于上述原因可用 alpha 的减少。虽然我们在广泛减少 quant,但在 quant 内部,我们正在增加对经营 特质 和高度能力受限的 策略 的策略和经理的分配,这些策略或需要高度专业化的技能和知识来实现,或只是能力受限,无法吸引来自大型参与者的竞争。
提到的阿尔法值降低的原因主要是由于“行人策略”中的拥挤效应和可从中获利的傻钱的减少。有人认为,至少对一些基金来说,解决这一难题的方法是转向特殊的阿尔法。
让我们从这个定义开始:
特异的:奇特的或个别的。
根据上面的定义,流行的策略,包括趋势跟踪,横截面和绝对动量,统计套利,包括多头/空头市场中性,不提供特殊的阿尔法,因为它们是众所周知的和高容量的。例如,依靠高容量和广泛使用的策略,CTA 已经受到影响;alpha 已经降低,CTA 现在正试图在与股票市场和另类 beta 相关性较低的背景下推广这些策略;也就是说,Neal Berger 认为,过去的高绝对回报潜力现在已经一去不复返了。
因此,我们知道什么是特质策略。它们肯定不是一些流行书籍中几行代码就能完整描述的策略。由于潜在的领域很大,但很难进行全面的研究,下面是确定其中一些策略的努力。
特殊的阿尔法策略
事件和情绪驱动
事件驱动策略试图从公司事件中产生 alpha,包括合并、收购、意外收入、破产、CEO 更换、债务重组等等。
情绪驱动策略基于对新闻和社交媒体的分析,以确定情绪和趋势。
在我的书《被技术分析愚弄的 T4》的第八章中,我简要地谈论了这些策略和它们的危险。简而言之,数据挖掘偏差和虚假关联的产生是他们的主要问题。这些策略很难进行回溯测试,但这不一定是一个主要的缺点,因为任何不能回溯测试的策略也不容易被复制。然而,没有确凿的证据表明这些策略是有效的。
任何基金都不太可能完全依赖上述阿尔法来源。
全权委托技术分析
基于趋势线、图表模式和简单的价格和交易量指标的技术分析对大多数人来说基本上是一种随机交易方法。我们也承认,一小部分技术分析师能够持续盈利,但这不是因为技术分析的预测能力,而是因为他们对市场结构和运作的理解。实际上,技术分析不是作为预测工具,而是用来识别有吸引力的市场进入和退出。
很明显,这样的方法无法被 quants 测试。证据,如果有的话,是在实际的性能记录。即使在这种情况下,也必须仔细分析,以区分技能和运气。这是因为有大量随机交易者使用技术分析,他们中的一些人很有可能产生高额回报。因此,我们还必须查看这些回报在时间上的一致性,以及它们如何受到任何异常值的影响。
根据我自己对对冲基金有限的经验,没有多少经理会使用技术分析来分配给交易者,因为他们担心决策中可能存在的确认偏差和其他认知偏差。
机器学*模型
机器学*的基本问题是偏差-方差权衡。监督分类需要一组特征的可用性,也称为预测因子、因子或属性。简单模型具有高偏差和低方差,而更复杂的模型具有低偏差和高方差。简而言之,随着特征数量的增加,偏差会降低,但存在过度拟合噪声的风险。随着特征数量的减少,模型往往不适合新数据。没有简单的方法来找到最佳的平衡。更重要的是,特征工程是机器学*的一个关键方面,但它更像是一门艺术而不是科学。
有几个量化基金试图通过机器学*来产生阿尔法。numeri为数据科学家提供加密功能,用于开发模型。数据科学家上传他们的预测,这些预测由基金运营商进行评估,以确定他们的薪酬。上次我用 Numerai 的数据有 21 个特征。这组丰富的特征可能会导致高方差预测。操作者希望通过进行整体预测来减少方差,但是这可能仅保证较低的权益方差,而不能保证权益趋势,即基金权益无论如何都会下跌。这可能发生,因为大多数数据科学家使用或多或少相同的模型,他们也在各种论坛和博客上讨论这些模型。换句话说,通过采用低偏差/高方差预测的集合来最小化模型方差是有问题的。然而,与 Quantopian 的方法相比,这是一种更有趣的方法,在 quanto pian 中,大量证券(大约 1500 种)用于开发市场中性的长/短股票策略,机器学*采用已知因素。无法卖空大量证券的风险、训练集的过度拟合和测试集中的高方差增加了大规模快速提款的风险,由于预测集合方法,这种情况不太可能发生在数字案例中。
我解决这个问题的方法集中在特征工程上。 DLPAL LS 软件生成一小组特质特征,可用于开发算法和机器学*模型。这种方法可以实现更好的偏差-方差权衡。道琼斯 30 种股票的例子可以在这里找到。
许多基金已经决定探索机器学*,但在我看来,问题在于新定量分析师的倾向,他们认为解决方案取决于机器学*算法的复杂性,而不是特征的质量。因此,这些基金可能会遭受损失。
全权委托量化方法
这些方法本质上是将主观技术分析提升到基于证据的分析的下一个层次。在这种方法中,所有的模型都需要有一个清晰的逻辑,可以通过编码来回溯测试性能。这听起来好得不像是真的,实际上是真的。
基于一些感知异常的自主交易模型的根本问题是,即使它们看起来产生了 alpha,样本量也很小。最*,社交媒体和博客中所有试图预测下一个市场顶部的回溯测试指标都表明了这一点:样本规模远小于 20,在大多数情况下小于 10。这是因为高利润率异常现象很少出现。鉴于这个问题,定量分析师必须找到验证这些模型预测的方法。大多数在博客和社交媒体上展示这种回溯测试的人从来没有讨论过验证和虚假关联的可能性。主要原因是,对大多数分析师来说,回溯测试是一种证实他们偏见的手段。因此,他们提出的回溯测试只能证实他们的观点。
有很多方法可以验证自主量化方法,但是几乎不可能产生方法的回溯测试。因此,这些方法将缺乏基金经理的青睐,需要长时间的业绩记录来筛选交易者。
来自《走向数据科学》编辑的提示: 虽然我们允许独立作者根据我们的 规则和指导方针 发表文章,但我们并不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语 。
这篇文章最初发表在价格行动实验室博客
如有任何问题或意见,欢迎在推特上联系: @mikeharrisNY
免责声明
关于作者: Michael Harris 是一名交易者和畅销书作家。他也是 17 年前第一个识别价格行为无参数模式的商业软件的开发者。在过去的七年里,他一直致力于开发 DLPAL ,这是一个软件程序,可以用来识别市场数据中的短期异常,以用于固定和机器学*模型。点击此处了解更多信息。
什么是智能?
原文:https://towardsdatascience.com/what-is-intelligence-a69cbd8bb1b4?source=collection_archive---------7-----------------------
大约 7 年前,当我还在上高中的时候,我是一名网站开发人员,并把学*心理学作为一种爱好,我偶然发现了一篇关于人工神经网络的文章。令人兴奋。就在我读完它之后,我开始寻找一种智力理论,这种理论可以解释我已经了解的人类智力,并以某种方式将其与人工智能联系起来。我研究过心理学、神经科学、控制论、认知科学、计算机科学、生物学、化学、物理学、神学、社会学和许多其他领域。上千篇文章论文,几百本书,几十门课过去了,我还是没有找到让我满意的答案。于是这篇文章诞生了。
让我们从维基百科对智力的定义开始,这实际上是我迄今为止看到的最好的定义之一:
感知或推断信息的能力,并将其作为知识保留,以应用于环境或背景中的适应性行为。
这与情报机构(CIA & Co .)通常使用的方式非常不同。他们的定义更接*于数据,特别敏感和有价值。然而,人工智能和生物智能的大多数定义是完全不同的,通常将智能描述为某种智能体的属性。此外,这个主体不可能完全孤立地存在,而是以某种方式体现在其环境中。
我将从人工制剂的概述开始,因为它们比生物制剂简单得多。之后,我将过渡到生物和他们有什么共同点。
人工智能
虽然很难确切说明第一个人工智能代理是什么,但巴贝奇的分析引擎可能是最佳候选。它没有任何特殊的“适应”能力,但是非常灵活。不幸的是,尽管理论上令人难以置信的美丽,没有一个原型已经完成。
Plan diagram of the Analytical Engine from 1840. Source: Wikipedia
有趣的是,在图灵出生前大约 50 年,图灵完成了。理论上,它可以将任何带数据的可计算函数作为输入,并在完全机械的情况下产生输出。大约比你的智能手机慢 1.000.000.000.000 倍。
这导致了算法复杂性理论的发展和一个普遍的认识,即建立一个通用计算机是一个相对容易的任务。此外,算法可以以多种方式实现。尽管一路上出现了技术挑战,但在过去的 70 年里,你可以以同样的价格购买的计算量大约每两年翻一倍。
换句话说,建立一个有能力计算任何政策的人工智能代理是很容易的。然而,它总是受到所提供的数据/输入以及处理它所需的时间的限制。这反过来提出了一个有趣的问题:如果每台计算机的能力都受到可用数据的限制,我们能称它们中的任何一台是智能的吗?我鼓励读者思考一下。
为了了解背景,让我们简单回顾一下人工智能研究的历史。从早期开始,它大致分为两个学派:象征主义学派和 T2 联结主义学派。符号方法更强调形式逻辑和手工制作的知识,而连接主义者更关注统计学*和人工神经网络(ann)的变体。他们的历史大致是这样的:
Relative popularity of Connectionist vs Symbolic approaches to AI. Source: Intuition Machine
“橙色”阵营之所以领先,首先是因为它与神经科学和人类大脑的关系,人类大脑仍然被认为是“强人工智能”或“AGI”的唯一成功实现。然而,最初的人工神经网络在处理现实世界的问题时过于局限。其中许多是线性的,能力非常有限,明斯基对此进行了深入的批评。与此同时,“蓝色”阵营发展了严谨的数学理论,能够创造出更多有用的东西。
随着手工知识的积累,扩展这些系统变得越来越困难。在输入或输出空间大于几千个选项的情况下,它们总是失败。此外,就像通常的法律可能相互冲突一样,专家系统中的规则也可能相互冲突。他们的规模需要越来越多的“法官”来解决这些问题。发展停滞。
与此同时,“橙色”阵营获得了足够的标记数据和计算资源,在合理的时间内“训练”他们的网络,让世界各地的研究人员开始实验。然而,在经历了最初的失败后,人工神经网络花了相当一段时间才重新获得公众的信任。开发人员花了一段时间才适应模糊逻辑和统计的概念,而不是布尔逻辑和清晰的对应概念。
但是在更详细地讨论人工神经网络之前,我想强调几个已经证明在许多领域有用的其他方法。此外,到这个时候,很明显,与混合方法相比,纯符号或连接方法的性能较差。我需要指出的是,我将只描述算法的大类,因为即使是所有人工智能方法的简要描述也需要至少几本书。
在我看来,最值得注意的是决策树、概率模型和进化算法。
Schematic decision tree. Source: prognoz.com
决策树是最简单和最有效的算法之一。简而言之,他们的“学*”是通过依次检查数据的每个属性,并找出哪一个对特定输出最有预测能力来进行的。像随机森林这样更高级的变体使用更复杂的学*技术,并在同一模型中组合多棵树,它们的输出是通过“投票”得出的。然而,基本原理和直觉是一样的。
概率模型代表统计方法,是人工神经网络的*亲。他们经常共享架构、学*/优化过程,甚至符号。但是概率模型大多受到概率逻辑(通常是贝叶斯)的约束,而 ann 可能没有这样的联系。
进化计算最初是受生物进化的启发。特别是关于随机突变和适应度的观点。考虑到修改通常是随机的,限制噪声的效果令人惊讶。这个课程是一种引导式搜索,在许多方面类似于退火过程。
Evolution of “walkers”. Source: alanzucconi.com
所有这些方法都有一个共同点:它们通常从非常差的政策开始,但逐渐改进以在某种性能评估函数上获得更好的分数。
如今,机器学*技术,特别是深度学*正在主导人工智能的研发。与大多数使用 1 或 2 个抽象中间层的 ML 方法(所谓的浅层模型)相比,DL 可能有数百甚至数千个堆叠的可训练层。
Deep network and learned features. Image from: edureka.co
在进行实际实验之前,人们普遍认为需要发现全新的优化程序来训练这样的深度网络。然而,事实证明,传统的反向传播(又名链式法则)和梯度下降可以很好地完成这项工作。数学家们在几个世纪前就知道这些算法了。更现代的算法,如 Adam 或 RMSProp,被发明来解决 GD 的一些问题,但在大多数现实情况下证明是不必要的。
简而言之,神经网络的训练工作如下:
- 取一堆可能的输入
- 计算各自的输出
- 计算性能
- 将误差传递给前一层以调整其参数(并对网络中的每一层重复)
- 对每一组可能的输入重复上述步骤,直到性能足够好
梯度下降不是唯一的最大似然训练算法,但是其中绝大多数算法的基本原理是相同的。只需通过策略取回错误,并调整参数以将其最小化。这种方法的一个主要问题是,人们普遍认为网络会陷入局部最小值,无法实现最佳设置。然而,最*的理论进展表明,在温和的假设下,许多神经网络可能确实达到全球最低水平。
Gradient Descent example. Source: distill.pub
DL 中另一个有趣的经验结果是训练可以高度并行化,这就是所谓的分布式学*。如果您在多台机器上同时训练相同的架构,同时不时地在它们之间交换梯度,您可以获得超过 1000 倍的加速,这个乘数直接取决于可用计算机的数量。
此外,经过训练的层可以重复用于类似的任务。这种现象被称为迁移学*,是人工神经网络广泛流行的重要原因。例如,为图像分类而训练的网络可以在以后用于其他计算机视觉任务。同样的原则也适用于自然语言处理和其他领域。不仅如此,同一个网络可以用来解决不同模态的问题。
所有这些经常会在强化学*领域聚集在一起。RL 背后的最初想法是从行为心理学借来的,在行为心理学中,研究人员研究了奖励如何影响学*和塑造动物的行为。
对于人工智能研究人员来说,RL 方法特别有趣,因为它们不需要完整的正确输出来进行训练。例如,不是精确地向机器人展示他应该如何移动,而是使用 RL 技术,你可以根据它走的多远或多快来奖励它,它会自己解决剩下的问题。然而,这种培训模式在实践中也是最具挑战性的,即使对于相对简单的任务,通常也需要付出很大的努力才能正确设置。
Source: blog.openai.com
我想强调的是,对于现实世界的问题,通常很难指定环境中的奖励,现在研究人员更关注内部奖励模型。
与 RL 并行的是逆向强化学*方法的发展,其中代理接收由专家产生的输入和输出,试图逼*可能驱动其行为的奖励函数。
除了上面提到的方法之外,一些对 AGI 的研究有明显不同的基础。这些框架有些来自严格的数学理论,有些受神经元回路的启发,有些基于心理学模型。然而,他们大多数人的共同点是关注他们受欢迎的同行失败的方面。我想强调的框架是 HTM、AIXI、ACT-R 和 SOAR。
让我们从分级时间记忆 (HTM)开始。最初,它是基于新大脑皮层回路启发的一些想法。但是,请记住,这些电路还没有得到足够的理解,HTM 可能只是一个粗略的*似。
然而,在 HTM 理论的核心有一个特别重要的概念——稀疏分布表示或 SDR。实际上,它只是一个通常包含几千个元素的位数组,它们的构造方式是将语义相关的输入映射到有许多重叠位的 SDR。从概念上讲,这类似于用神经网络导出的矢量化表示,但是稀疏性和过大的容量是主要的区别。这些想法特别相关,因为 DNN 收敛证明背后的关键假设之一是网络的过度参数化。
Example of SDR overlapping in the presence of noise. Source: numenta.com
在我看来,HTM 理论的其他观点没那么有趣。抑制类似于批量归一化和一些其他正则化技术,boosting 是 ML 中一个相对较老的概念,层次结构似乎过于严格,而新皮层具有更复杂的连接模式,拓扑似乎是普通 NN 的架构的同义词,一般来说,这种理论对对象赋予了很大的权重,而对它们之间的关系则给予了很小的权重,甚至 SDR 也可以用普通的 ann 构建,使用大量神经元,同时惩罚激活。总的来说,HTM 仍然需要太多的调整才能达到与其他大联盟竞争对手相当的表现。无论如何,我相信 Numenta(HTM 背后的公司)对这些想法简单直观的解释值得称赞。
我的下一位“客人”——艾西,没有这么简单,但有更坚实的数学基础。然而,它有一个显著的缺点——它是不可计算的。事实上,许多最大似然算法不可能精确计算,我们必须处理*似。无论如何,这些*似法在实践中经常表现良好。艾西可以用一句话来形容:
The model has an agent and an environment that interact using actions (outputs), observations (inputs), and rewards (might be described as a specific part of the input). The agent sends out an action a, and then the environment sends out both an observation o and a reward r,and term l(q) denotes the complexity of the environment. This process repeats at each time k…m. Source: lesswrong.com
它在很多方面都被证明是最优的,而且在我看来,它是对我们现在所拥有的 AGI 的最好的数学描述。此外,AIXI 是一个通用强化学*代理,在许多方面与 Schmidhuber 开发的哥德尔机器相似。然而,这两者都是 AGI 的描述模型,而不是创造它的配方。无论如何,它们是人工智能研究人员的巨大灵感来源。
相反,ACT-R,或者说思想理性的自适应控制,不仅仅是一个理论,还是一个用 LISP 编写的软件框架。它的发展已经持续了几十年,为其他语言带来了许多副产品,并对原始模型进行了修改。
Source: teachthought.com
ACT-R 主要关注不同类型的内存,而较少关注内存中数据的转换。它是作为人类思维的计算模型开发的,并在一定程度上取得了成功。它已被应用于预测 fMRI 成像结果以及一些关于记忆的心理学实验。然而,它在实际应用中总是失败,仍然只是研究人员的一个工具。SOAR 与 ACT-R 有着相似的根源和潜在的假设,但更侧重于实现 AGI,而不是人类认知的建模。
ACT-R 和 SOAR 是人工智能符号方法的经典代表,相对于连接主义方法,它们都逐渐失去了流行性。它们在认知科学的发展中发挥了重要作用,但是它们的应用比现代连接主义 ML 对应物需要更多的配置和先验知识。此外,神经成像和其他用于研究思维的工具正变得越来越详细和准确,而 ACT-R 和 SOAR 都落后了,从某种意义上说,它们过于僵化,无法保持相关性。
然而,在我看来,人工智能的未来必须是象征性的,至少在某种程度上,人工智能主体可以理解并遵循我们用人类友好的符号组成的法律。
野外的人工智能代理
上面我主要描述了定义现有人工智能代理策略的算法。但是,它们中的每一个都有某种身体:计算机、机器人或服务器,以及它们运行的环境,这通常是由它们所连接的互联网服务来定义的。
大多数个人电脑、智能手机和其他设备的硬件性能非常相似。他们的策略是由操作系统定义的,他们通过下载额外的软件来“学*”。虽然早期的计算机完全依靠与人类的互动来学*,但现在大多数计算机都通过互联网接收更新。
随着越来越多的数据转移到云中,服务器代理的作用越来越大。这些代理负责大多数计算密集型任务,有点类似于中枢神经系统。相反,面向消费者的小工具正在提高它们的输入/输出能力,变得有点类似于外周神经。
Source: researchgate.net
一个极端的例子通常被称为物联网,在物联网中,几十个高度专业化的微型设备各自只执行一项或几项功能,而基于云的中央“大脑”协调所有这些设备来控制房屋、工厂甚至整个区域。
相比之下,机器人通常专注于更加自主的代理。这些机器人通常必须实时处理复杂的真实世界输入/输出通道。无人驾驶汽车可能是最著名的例子:
The system-level overview of Voyage self-driving taxi. Source: news.voyage.auto
这只是一个简化的情况,而实际系统通常有超过 100 个传感器,这些传感器具有恒定的输入流,而它们的输出可以决定生死。设计这样的智能体是当今人工智能研究中最困难的领域之一。
不仅如此,面向消费者的机器人只是其中的一小部分,也是一个相对较新的趋势,而大多数是为工业和军事需求而设计的。考虑到这一点,与武装无人机或核电站控制人员的失误相比,自动驾驶出租车的不当行为看起来像是一场小事故。这种系统的策略编程不能依赖于黑盒学*算法,但通常涉及到他们工作的每个方面的严格数学规范。
总而言之,人工智能代理以各种形状和颜色出现,但趋势是外围设备越来越小,而数据中心越来越大。
量子世界
虽然这一部分可能看起来与智能的主题无关,但我相信物理学,尤其是量子物理学,由于一些原因值得特别关注。
Source: physics.stackexchange.com
首先,QM 是所有人工和生物制剂的共同点。半导体和生化试剂的工作原理都是基于量子效应。虽然谈论原子或亚原子水平的智能没有多大意义,但完全有可能用各种材料建造通用计算机。
第二,300 多年前开发的计算行星运动的数学工具成为反向传播和梯度下降的基础。不仅如此,概率论、统计力学和矩阵力学是质量管理的基础,也是现代人工智能的*亲。目前,深度学*就像炼金术,但我相信物理学可以帮助我们比现在更好地理解它。
三、量子计算的兴起。虽然量子计算机仍处于起步阶段,但当前的实验已经显示出某些优化问题的显著加速潜力。例如,Boltzmann Machine 是一种在大多数实际场景中难以处理的 ann,因此实践者提出了一种受限制的变体,这种变体成为了首批深度神经网络之一。然而,也许量子计算机将允许我们利用 BMs 以及许多其他概率模型的全部能力。
最后,QM 比上面描述的任何东西都更难理解。概率幅度、对经典概率逻辑的违反以及对亚原子水平上发生的一切的模糊描述只是冰山一角。具有讽刺意味的是,尽管许多人批评人工神经网络的可解释性差,但即使是人类也无法用直观的术语描述量子物理。
生物制剂
与只存在了大约 100 年的人工智能相比,生物智能已经存在了大约 30 亿年。地球上有数百万个物种,它们都有一个共同点: DNA 。
Source: evogeneao.com
为什么 DNA 如此重要?一般是细胞的“中枢神经系统”。此外,人们普遍认为,在以 DNA 为基础的生命出现之前,就有以 RNA 为基础的生物,但它们在功能和结构上非常相似。
Source: Wikipedia
大多数 DNA,大约 98%的人类 DNA,不编码蛋白质,并且在很长一段时间内被认为是无用的。然而,它的相当大一部分在控制编码 DNA 的哪些部分应该根据环境而活跃方面起着至关重要的作用。此外,DNA 本身的部分可能会因甲基化而失活,这也是可逆的,可能在整个生命周期中发生多次。
所有这些都允许基因组以不同的方式对不同的输入组合做出反应,决定宿主细胞应该专门扮演何种角色以及应该有多活跃。此外,DNA 实际上并不需要宿主细胞的存在。细胞外 DNA 正在降解,但较小的片段可能存活多年。
顺便说一下,现代生物技术让我们可以随心所欲地合成和编辑 DNA,所以在这一点上,人工和生物制剂的区别基本上消失了。
细胞
基本功能细胞被称为原始细胞:
Source: xabier.barandiaran.net
它们代表了第一个生命体可能的样子。大约 30 至 40 亿年前地球上的环境模型表明,脂质气泡可能已经捕获了足够多的核苷酸,从而偶然创造了第一个基因组,而第一个基因组可能已经通过从周围环境中捕获营养物质开始复制。在基因和其他化学物质积累到临界量后,这些气泡在内部压力的作用下分裂。
另一个简单的例子是病毒。两者的主要区别在于,病毒不维持内部代谢,需要利用其他生物因子进行复制。它们的基因组通常很短,可能只编码 1 或 2 种蛋白质。然而,在被称为水平基因转移的过程中,病毒可以通过与宿主的 DNA 交换进行“交流”。许多单细胞生物都有这种能力,它在整体进化中起着重要作用。
相比之下,细菌可以对不同的化学物质、光线、压力、温度和其他东西有多个传感器。它们中的许多都有在分子尺度上类似普通内燃机的运动机制。
Bacteria E. Coli. Source: gfycat.com
此外,他们有相当先进的通讯技术,可以成群结队。他们的产出不再仅仅是废物。它们的基因组及其周围的各种蛋白质使它们能够消化广泛的营养物质,并执行相当复杂的行为。然而,总的来说,它们的结构与原始细胞和古细菌非常相似。
相反,真核细胞有相当多的细胞器。其中一些,像线粒体和叶绿体,有自己的 DNA 片段,在过去可能是独立的有机体。此外,线粒体在所谓的克雷布斯循环中起着至关重要的作用,这对新陈代谢至关重要。
Source: biochemanics.wordpress.com
典型的真核细胞内部有更复杂的化学机制,但缺乏自行移动的能力。不仅如此,动物细胞还缺乏叶绿体和细胞壁,这进一步损害了它们的自主性。一般来说,上面从左到右描绘的进化树上的生物的细胞逐渐失去了依靠自己生存的能力,同时获得了更复杂的“社会”政策和专门的功能。
细胞对环境变化做出反应的最快方式之一是通过动作电位。当一些传感器检测到化学物质、压力或其他刺激时,它们可以导致细胞膜中电势的快速变化,这反过来可能会引发一连串的化学反应,导致各种结果。
Venus Flytrap plant. Source: giphy.com
然而,动作电位信号仅限于起源细胞和与之有直接膜-膜连接的细胞。它可以通过信号分子与其他细胞交流,但这个过程要慢得多。为了避免这个瓶颈,大多数动物都有专门的细胞——神经元。
Schematic view of a neuron. Source: Wikipedia
它们有不同的形状,在其一生中可以生长新的突触或去除旧的突触。外围神经元通常只有几百个连接,而中间神经元可以有超过 10,000 个。所有这些机制使它们能够快速传递信号,并通过调整突触强度来转换信号。此外,脊椎动物的许多轴突都有髓鞘,允许电位移动得更快,同时激活更少的膜通道并节省能量。
然而,神经元来自高度互联的系统,为了理解它们在宏观尺度上做什么,你需要考虑整个连接体。迄今为止研究得最好的神经系统之一是线虫:
Overview of the C. elegans nervous system. The majority of neurons are located in several ganglia near the nerve ring. Source: stb.royalsocietypublishing.org
它已经被研究了 50 多年,我们已经知道它所有 302 个神经元和 5000 多个突触的详细结构:
Partial circuit diagram of the C. elegans somatic nervous system and musculature. Sensory neurons are represented by triangles, interneurons are represented by hexagons, motor neurons by circles and muscles by diamonds. Arrows represent connections via chemical synapses, which may be excitatory or inhibitory. Dashed lines represent connections by electrical synapses. VNC, ventral nerve cord. Source: rstb.royalsocietypublishing.org
正如你可能看到的,即使是 302 个神经元也对理解每个神经元在做什么构成了真正的挑战。这变得更加复杂,因为它们正在“学*”,它们的功能可能会实时变化。现在试着想象一下人类大脑中的数十亿个细胞会发生什么。
鉴于所有这些复杂性,神经科学的大多数研究都集中在特定的区域、途径或细胞类型上。大多数进化的旧结构负责呼吸、心跳、睡眠/觉醒周期、饥饿和其他至关重要的功能。然而,大脑皮层受到的关注比其他任何东西都多。
在结构上,皮层是一个折叠的分层薄片,厚度约为 2-3 毫米,面积约为餐巾纸大小,包围着大脑的其他部分。
Cross section of the cortex. Source: etc.usf.edu
它涉及所有我们认为是高级认知功能的东西,如语言、意识、计划等。在人类中,大约 90%的皮层由新皮层代表,这是大脑中最*的进化发明之一。
另一个被充分研究的区域是海马:
Source: gregadunn.com
所有的脊椎动物都有一个类似的结构,叫做大脑皮层,但是只有哺乳动物有上面描述的更进化的结构。它在空间和情景记忆中起着至关重要的作用。简单来说,它的功能是一个认知时空地图。有了这张地图,大脑可以在其他部分储存复杂的记忆,这些部分专门负责视觉、听觉和其他类型的表达。
对大脑的最初研究集中在损伤和病变上。然而,大脑皮层缺失区域和认知功能缺失之间的相关性相对较弱。事实证明,记忆分布在整个大脑皮层,甚至在手术切除某个部分后,邻*的神经元可能会重新学*缺失的功能。此外,通常很难准确界定伤害的界限。这些研究提供了这样的地图:
Source: pinterest.fr
这些地图的主要问题是在实践和理论两方面都缺乏精确性。在实验环境中,你可以刺激大脑的小部分,观察反应。但是,除了主要的感觉和运动区域,它通常产生相当模糊的结果。另一方面,现在你可以使用功能性磁共振成像来跟踪受试者在执行一些任务时大脑的哪些部分是活跃的,但由于这些区域并不专门针对少数任务,所以结果通常是模糊的。此外,功能性核磁共振成像实际上是测量氧气供应水平,所以像这样在单个神经元水平上测量活动是不够的:
Spike propagation in a hippocampal neuron. Source: nature.com
目前神经科学研究中最有前途的方向之一是光遗传学。它允许我们使用为神经元提供光传感器的基因,以更高的精度控制单个神经元的活动。然而,它需要基因操作,不能用于人类实验。
大脑活动的另一个有趣的特征是它以波的形式进行:
High-level interpretation of EEG recordings (cps = cycles per second). Source: dickinson.edu
所有这些研究都有助于我们理解和治疗神经系统疾病,但它们远不能描述人类的行为,除了某些部位的活动与这个人正在做什么或在想什么的模糊描述之间的相关性。无论如何,这种自下而上的思维研究方法导致了许多重要的发现,如根据神经活动预测某人选择的可能性,以及大脑没有“中央”部分。
另一方面,从心理学角度进行的行为研究受遗传、文化和环境因素的影响很大。这项研究最广为人知的成果之一是智商以及测量智商的测试。也有许多理论试图解释智力,如多元智能理论、三元智能理论和其他理论。然而,到目前为止,它们都没有被广泛接受。
心理学理论的主要问题是它们的描述性,这种描述性不能提供一种定量证明它们的方法。即使像走路或说“嗨”这样简单的行为背后的神经元级过程的数量也是极其巨大的,再加上考虑到每个细胞内 DNA 和其他生物机械的复杂性,神经科学研究的心理解释往往比实验本身更复杂。然而,一些人类认知模型在行为和神经活动之间建立了牢固的联系。
在我看来,最有趣的一个是综合信息理论 (IIT),它基于这些公理:
Axioms and postulates of IIT. Source: wikipedia.org
其他理论包括强化学*及其在大脑中的实施方式,大量的记忆、视觉、听觉、语言和其他模型。然而,在我看来,IIT 提出了其中最普遍的理论框架。
虽然上面提到的模型主要集中在个人的行为上,但“社会心理学”对大多数生物体来说是至关重要的。从你肠道中的细菌群落开始,一直到鱼、蚂蚁、蜜蜂、鸟类和人类社会都是从社会互动中产生的。我们已经对蚂蚁的化学语言和蜜蜂如何通过“跳舞”进行交流有了相当多的了解,但理解人类的情感却是一个巨大的挑战。随着语言、法律和宗教的发展,事情变得越来越复杂。
那么,什么是智能呢?
答案有很多,但我们还没有一个被广泛接受的生物和人工智能的统一理论。然而,我相信艾西和 IIT 的杂交可能会让我们更接*它。为了把它们结合起来,我们需要一个奖励/效用的物理概念,这个概念可能来源于医学和经济学,适用于每一种人工和生物制剂,这本身就是一个巨大的问题。
几乎所有当前的智能测量都是基于某些任务的表现,这在现实世界中造成了一个问题,在现实世界中,环境以及智能体可能偶然遇到的任务都在不断变化。另一方面,将意识定义为“任何可能的经验”以及相关的 IIT 框架与艾西背后的智力框架一起可能会提供认知表现的更广阔的图景。
从内部的观点来看,任何代理人的工作都可以被描述为量子系统的波函数,但是在几乎所有的情况下,它都是难以计算的。此外,对*得的中间表征的解释对生物和人工智能都是一个巨大的挑战。
最重要的是,我相信没有单一的算法或机制最终负责智能,但它是一个代理如何与其环境交互的属性。
下一步是什么?
虽然人工智能的进步和对人类智能的更深入理解有很多好处和大量的实际应用,但它们也揭示了我们需要应对的许多挑战,其中大多数都属于以下类别之一:
- 隐私。以前——你的数据属于你,在某种程度上,属于政府,有严格的法律规范其流动。现在,数以百计的跟踪服务,社交网络和其他公司几乎没有披露这些数据是如何使用的。
- 偏见。除了人工筛选的数据集,每个训练数据集都有其偏差,它们往往会在像推荐引擎这样的闭环系统中放大。
- 对齐。大多数人工智能训练都是基于效用最大化或错误最小化,那些目标函数并不代表所有的人类价值和道德。
- 位移。一段时间以来,技术已经在许多任务中取代了人类,但人类的进化比人工智能慢得多。就在几十年前,计算机还是专业人士的稀有工具,但现在不每天使用它们就很难保持相关性。
- 网络攻击。以前,网络攻击通常需要做大量准备才能瞄准一个人,但现代人工智能可以比人类更快地收集信息、猜测密码、生成钓鱼内容并伪装成其他人,同时在这个过程中改进自己。
- 心理工程。无数的心理学实验和历史教训表明,即使没有任何暴力倾向的人,如果被恰当地操纵,也会造成真正的伤害。脸书、谷歌和其他大公司可能有足够的关于我们的信息来瞄准、筛选和强迫我们做任何事情。
在控制全球经济主要部分的交易机器人的情况下,我们如何可靠地解决偏差和对齐问题?谁应该为人工智能代理在他们没有得到足够好的训练的场景中的错误负责?我们如何才能制造出容错的脑机接口,使其无法控制我们的思想?此外,这些问题中的大部分与人类和人工智能一样相关。
我们将在 5 年、10 年或 20 年后走向何方?我不知道,我也鼓励你对任何关于人工智能的预测持怀疑态度。历史表明,大多数预测,甚至来自领先的人工智能研究人员的预测,最终都被证明是错误的,有时是错误的幅度很大。然而,我相信人工智能和生物智能的共生是不可避免的,如果我们承认相关的问题并解决它们,这可能对我们非常有益。
资源
- arxiv.org/cs/0309048——《哥德尔机器:自我参照的通用问题解决者做出可证明的最佳自我改进》,作者于尔根·施密德胡伯
- numenta.com/hierarchical-temporal-memory-white-paper——杰夫·霍金斯的《分级时间记忆(HTM)》
- amazon.com/Soar-Cognitive-Architecture-John-Laird——约翰·莱尔德的《腾飞的认知建筑》
- ——约翰·r·安德森、丹尼尔·博瑟尔、迈克尔·d·伯恩、斯科特·道格拉斯、克里斯蒂安·勒比尔、秦玉林的《整合的心智理论》
- arxiv.org/1812.06162——open ai Dota 团队的 Sam McCandlish、Jared Kaplan、Dario Amodei 的“大批量训练的经验模型”
- arxiv.org/1606.06565——Dario Amodei、Chris Olah、Jacob Steinhardt、Paul Christiano、John Schulman、Dan Mané的“人工智能安全的具体问题”
- 、——《通过过参数化实现深度学*的收敛理论》,作者·艾伦-朱,
- arxiv.org/1805.08974——“更好的 ImageNet 模型传输得更好吗?”西蒙·科恩布利斯,黄邦贤·史伦斯
- apps.dtic.mil/708563.pdf——彼得·菲什伯恩的《决策的效用理论》
- ——《深度神经网络的安全性和可信赖性:一项调查》,作者:、丹尼尔·克罗宁、玛尔塔·夸特考斯卡、阮、孙友成、埃姆斯·塔莫、、易新平
- archive.org/CerebralMechanismsInBehavior——《行为中的大脑机制》作者劳埃德·a·杰弗里斯
- cognitivemap.net——《海马作为认知地图》,作者约翰·奥基夫、林恩·纳德尔
- mitpress.mit.edu/spikes——《尖峰信号:探索神经代码》作者:威廉·比亚莱克,罗伯·德鲁伊特·范·斯蒂文宁克,弗雷德·里克,大卫·沃兰德
- psyarxiv.com/d6qhu/——《怪异心理学的起源》,作者乔纳森·舒尔茨、杜曼·巴拉米-拉德、乔纳森·比彻姆、约瑟夫·亨利克
- nature.com/articles/d41586–018–05097-x——“意识是什么?”作者克里斯托夫·科赫
- arxiv.org/0706.3639——《智力定义集》,作者沙恩·莱格,马库斯·哈特
- amazon.com/Frames-Mind-Theory-Multiple-Intelligences——《心智框架:多元智能理论》作者哈沃德·加德纳
- amazon.com/Beyond-IQ-Triarchic-Theory-Intelligence——《超越智商:人类智力的三元理论》,作者罗伯特·斯腾伯格
- archive.org/tom_bingham_the_rule_of_law——汤姆·宾汉姆的《法治》
- 【link.medium.com/cDzwHQm0YR——乔纳森·奥尔布赖特的《脸书和 2018 年中期选举:看数据》
- 【intelligence.org/all-publications
- integratedinformationtheory.org
- portal.brain-map.org
- github.com/OpenWorm
以及coursera.org、edx.org等众多开放教育平台。当我开始研究所有这些时,我并没有打算发表任何东西,所以我没有收集参考文献的列表,如果你的工作如上所述而不在列表中,我很抱歉(请随时通过 twitter @eDezhic 或电子邮件 edezhic@gmail.com 联系我)。
什么是知识蒸馏?
原文:https://towardsdatascience.com/what-is-knowledge-distillation-41bb77a3c6d8?source=collection_archive---------15-----------------------
知识提炼是一个迷人的概念,我们将简要介绍为什么我们需要它,它是如何工作的。
体重很重要
今天的模型可能相当大,以下是 ImageNet 数据集的一些顶级模型:
The models were instantiated via *keras.applications*
module with top layers, the number of parameters are given by *summary()*
.
似乎公平地说,简单的计算机视觉模型重量很容易~100Mo。仅仅用一百个 Mo 就能做出一个推论,对于最终产品来说并不是一个可行的解决方案。远程 API 可以做到这一点,但现在你的产品需要添加加密,你需要存储和上传数据,用户需要有一个可靠的互联网连接,以有一个像样的速度。我们可以训练一个更窄的网络,它们可能适合一个小内存。但它们很可能无法很好地提取复杂的特征。
我们不是在谈论合奏。集成是从训练数据中提取大量知识的好方法。但是在测试时,并行运行 100 个不同的模型代价太高。每个参数的知识比率相当低。
最后,一个模型可以在训练时得到很高的分数,但是我们可能想要:降低它的大小(对于嵌入式系统),提高推理速度或者简单地降低复杂性。杰弗里·辛顿谈到减少它的“记忆足迹”:
许多昆虫的幼虫形态最适合从环境中吸取能量和营养,而完全不同的成虫形态最适合完全不同的旅行和繁殖需求。在大规模机器学*中,我们通常在训练阶段和部署阶段使用非常相似的模型,尽管它们的需求非常不同(……)()在神经网络中提取知识 )
从一个较大的模型训练一个较小的模型被称为知识提炼。
蒸馏
作者继续说,我们用权重值来识别知识,这使得“很难看出我们如何改变模型的形式,但保持相同的知识”。并且提醒我们,我们可以把知识看作是从输入到输出的映射。
知识提炼的目标是将知识从一个表现突出的老师那里转移到一个更紧凑的学生那里。
为此,我们查看教师的 softmax 图层,将其放大,然后学生学*如何制作它们。我们需要放大,因为 softmax 层会将最不可能的类粉碎为零,并上升到最可能的类附*(就像一个热矢量)。我们还可以保持类之间的相对概率,其中摩托车和自行车在 softmax 层上比在书上有更多的相似性。我们可以通过提高温度 t 来实现。
为了传递知识,学生被训练由一个更大的老师产生的软化概率(T>>1)。当温度 T 小于 1 时,最期望的类对最终概率的影响最大。类似地,当温度升高时,概率会变得更软/更平——你可以让在这里直观地感受到温度对单个exp()
的影响。
首先,老师的体温升高到某一点。然后学生被训练模仿老师的软概率。
利益
对软目标的训练有几个优点:可以从单个样本中提取更多的信息,可以在更少的样本上进行训练,不需要标记数据
多类分类器的 softmax 将为您提供相似图像的更高概率。玫瑰可能与郁金香而不是拉布拉多有相似的软概率。同样,两个不同的类出现在同一个图像中,我们可能会在输出中看到它。所以从每个训练样本中提取更多的信息。
这是第一点的结果,模型可以用比老师更少的训练样本来训练。学*也更快,因为对学生有更多的约束。它需要针对多个(软)输出,而不是一个(硬)输出。
由于学生仅从软目标学*,通过类之间的相对相似性,它可以在未标记的数据集上训练,仅使用主设备具有运行中的“软标记器”。但实际上,数据集可以和老师一样。
失败
蒸馏损失一般有两种形式:匹配函数值、匹配导数或两者都有,对应一个不同阶的回归问题:
- 匹配函数值:试图最小化老师和学生的预测之间的差异。对于分类任务,这是通过使用经典的交叉熵来完成的。
- 匹配导数:尝试匹配导数的值和。这是一种比以前更有效的方法,因为在这里我们可以完全接触到老师,并且我们能够测量其输入中的小变化的影响。
我们也可以尝试通过直接增加硬损失来增加预测的影响:
alpha ~= 0.1
KD_loss = alpha * log_loss(y_true, softmax(logits)) + logloss(y_true, softmax(logits/temperature))
你可以在这里看到一个很酷的实现。
资源
- TTIC·杰佛瑞·希尔顿——黑暗知识——第一篇知识蒸馏论文的作者所做的报告。
- IEE 安全研讨会,Papernot :注意,蒸馏作为对抗例子的对策已经被证明不再有效。
最初发表于data-soup.github.io/blog/。
什么是机器学*?
原文:https://towardsdatascience.com/what-is-machine-learning-891f23e848da?source=collection_archive---------8-----------------------
这是一系列文章中的第一篇,旨在让没有受过技术培训的人更容易理解机器学*。希望有帮助。
过去几十年中计算机技术的进步意味着在人类努力的大多数领域中收集电子数据已经变得更加普遍。许多组织现在发现自己拥有跨越许多年的大量数据。这些数据可能涉及到人、金融交易、生物信息等等。
与此同时,数据科学家一直在开发被称为算法的迭代计算机程序,这些程序可以查看大量数据,对其进行分析,并识别人类无法识别的模式和关系。分析过去的现象可以提供非常有价值的信息,告诉我们在相同或密切相关的现象中未来会发生什么。从这个意义上说,这些算法可以从过去学*,并使用这种学*对未来进行有价值的预测。
虽然从数据中学*本身并不是一个新概念,但机器学*与其他学*方法的区别在于它能够处理大量数据,并且能够处理结构有限的数据。这使得机器学*可以成功地用于广泛的主题,这些主题以前被认为对其他学*方法来说太复杂了。
机器学*的例子
以下是你在日常生活中可能遇到的更成熟的机器学*应用的例子:
- 信用评分:金融机构长期收集客户的详细信息,例如收入、资产、工作、年龄、金融历史。可以对这些数据进行分析,以确定哪些特征与消极结果(如拖欠贷款)关联更大,或者哪些特征推动积极结果(如及时偿还贷款)。因此,可以构建预测关系,该预测关系可以基于客户违约的可能性对客户进行分类,并且金融机构可以使用该预测关系来做出更有效的贷款决策。
- 购物篮分析:当顾客在杂货店或网上结账时,购买的特定商品的信息将最终存储在一个大型数据库中。该数据库可以被分析以确定典型的购买行为或关联。例如,购买了牙刷的客户还会购买牙膏的可能性有多大?在许多情况下,可以收集个人客户数据,这有助于分析这种行为在特定人口统计或收入群体中的变化。分析这些数据可以为营销和广告策略以及决策提供信息。它还可以带来更加个性化的广告,客户可以收到他们更有可能感兴趣的产品的报价。
- 基因科学:23andme.com在线 DNA 检测服务的成员提供个人信息和健康信息,并提供他们的唾液样本进行 DNA 分析。这些成员经常收到关于他们健康和个人特征的调查问卷。报告相似健康状况或特征的人的遗传密码可以在大量个体中进行分析,以寻找频繁出现的字符串或部分。如果这样的字符串或部门被发现,他们可以用来预测未来可能出现的特征或可能的医学问题。这种学*也可用于确定服役人员之间的生物关系,在某些情况下,使因收养或其他情况而失散的家庭成员团聚。
- 估价:可以对一段时间内的汽车销售数据进行分析,以确定汽车的哪些特征对价格影响最大,以及价格对这些特征的敏感度。基于此,在线估价工具现在可以根据车主输入的信息给出汽车的价格范围。
- 其他常见应用包括医疗诊断、手写到文本转换、语音识别、人脸识别、图像压缩、机器人、自动驾驶汽车和许多其他用途。
机器学*的类型
机器学*可以分为三大类:
- 监督学*算法利用输入和输出数据的训练集。该算法从训练集中学*输入和输出数据之间的关系,然后使用该关系来预测新数据的输出。最常见的监督学*目标之一是分类。分类学*的目的是利用学*到的信息来预测某一类的成员。信用评分示例代表分类学*,因为它预测拖欠贷款的人。
- 无监督学*旨在通过推断数据中的潜在模式和结构,在没有已知结果或结果的数据中进行观察。关联学*是最常见的无监督学*形式之一,其中算法搜索输入数据之间的关联。购物篮分析示例代表关联学*。
- 强化学*是一种“试错”学*形式,输入数据刺激算法产生响应,算法根据响应是否是期望的而受到“惩罚”或“奖励”。机器人技术和自主技术充分利用了这种学*形式,
机器学*成功的必要条件是什么?
*年来,机器学*和“大数据”变得越来越广为人知,并引发了大量报道。因此,许多个人和组织正在考虑如何以及是否可能适用于他们的具体情况,以及是否有从中获得的价值。
然而,为成功的机器学*建立内部能力(或利用外部专业知识)可能成本高昂。在接受这一挑战之前,明智的做法是评估是否存在合适的条件,使组织有机会取得成功。这里的主要考虑与数据和人类洞察力有关。
有效的机器学*有三个重要的数据要求。通常,并非所有这些要求都能令人满意地得到满足,一个方面的缺点有时会被另一个或两个方面抵消。这些要求是:
- 数量:机器学*算法需要大量的例子,才能提供最可靠的结果。大多数监督学*的训练集将涉及数千或数万个示例。
- 可变性:机器学*旨在观察数据的异同。如果数据过于相似(或过于随机),它将无法有效地从中学*。例如,在分类学*中,训练数据中每个类别的样本数量对成功的几率至关重要。
- 维度:机器学*问题往往在多维空间中运行,每个维度都与某个输入变量相关联。数据中丢失的信息量越大,阻碍学*的空白空间就越大。因此,数据的完整程度是学*过程成功的一个重要因素。
机器学*也可以得到高质量人类洞察力的帮助。从一组给定的数据中可以研究的分析和情景的排列和组合通常是巨大的。这种情况可以通过与主题专家的交谈来简化。基于他们对情况的了解,他们通常可以突出数据中最有可能提供见解的方面。例如,招聘专家可以根据多年的参与和观察,帮助确定哪些数据点最有可能推动公司的选择决策。了解组织内部的底层流程也有助于数据科学家选择最能模拟该流程的算法,从而获得最大的成功机会。
下一章将讨论机器学*是如何工作的。在这里 读一下 。
最初我是一名纯粹的数学家,后来我成为了一名心理计量学家和数据科学家。我热衷于将所有这些学科的严谨性应用到复杂的人的问题上。我也是一个编码极客和日本 RPG 的超级粉丝。在 LinkedIn 或Twitter上找我。
什么是机器学*?
原文:https://towardsdatascience.com/what-is-machine-learning-8c6871016736?source=collection_archive---------2-----------------------
这个世界充满了数据。很多很多数据。从图片、音乐、文字、电子表格、视频等等。看起来短期内不会减缓。机器学*带来了从所有这些数据中获取意义的希望。
在这个系列中,我想带你在人工智能的世界中进行一次冒险,探索艺术、科学和机器学*工具。在这个过程中,我们将看到创造惊人的经历和产生有价值的见解是多么容易。我们将从高级概念开始,然后深入技术细节。
The data frontier stretches far into the distance
亚瑟·C·克拉克曾经说过:
"任何足够先进的技术都和魔法没什么区别。"
乍一看,ML 似乎很神奇,但是一旦你深入了解,你会发现它是一套从数据中获取意义的工具。
我们周围的数据
传统上,人类分析数据并使系统适应数据模式的变化。然而,随着数据量超过人类理解数据和手动编写规则的能力,我们将越来越多地转向能够从数据中学*的自动化系统,更重要的是,数据中的变化,以适应不断变化的数据格局。
机器学*已经无处不在
在我们今天使用的产品中,我们看到机器学*在我们周围,但对我们来说,机器学*并不总是显而易见的。虽然标记图片中的对象和人物显然是机器学*,但你可能没有意识到,像视频推荐系统这样的功能通常也是由机器学*驱动的。
当然,也许最大的例子是谷歌搜索。每次你使用谷歌搜索,你都在使用一个以许多机器学*系统为核心的系统,从理解你的查询文本到根据你的个人兴趣调整结果。当你搜索“Java”时,机器学*决定先显示哪些结果,这取决于它认为你是咖啡专家还是开发者。也许你们两个都是!
今天,机器学*的直接应用已经相当广泛,包括图像识别、欺诈检测、推荐引擎,以及文本和语音系统。这些强大的功能可以应用于广泛的领域,从糖尿病视网膜病变和皮肤癌检测到零售,当然还有运输,形式为自动停车和自动驾驶车辆。
预期的特征
Don’t get left behind
不久前,当一家公司或产品在其产品中包含机器学*时,它被认为是新颖的。现在,每家公司都在寻求在他们的产品中使用机器学*。它正迅速成为一个预期的功能。正如我们期望公司有一个在我们的移动设备或应用程序上工作的网站一样,我们的技术将被个性化、有洞察力和自我纠正的那一天很快就会到来。
当我们使用 ML 使现有的人工任务比以前更好、更快或更容易时,我们也可以展望未来,那时 ML 可以帮助我们完成我们自己永远无法完成的任务。
谢天谢地,利用机器学*并不难。工具已经变得相当好;你需要的只是数据、开发者和冒险的意愿。
用数据回答问题
出于我们的目的,我们可以将机器学*的定义缩短为五个词:
《用数据回答问题》
当然,这是一种过于简单化的做法,但是它仍然可以达到一个有用的目的。
具体来说,我们可以将定义分为两部分:“使用数据”和“回答问题”。这两部分概括了机器学*的两个方面,两者同等重要。
“使用数据”通常被称为“训练”,而“回答问题”被称为“做出预测”,或“推断”。
将这两部分联系在一起的是模型。我们训练模型,使用我们的数据集做出越来越好、越来越有用的预测。然后,可以部署这种预测模型来提供对以前看不到的数据的预测。
数据是关键
您可能已经注意到,这个过程的关键部分是数据。数据是开启机器学*的钥匙,就像机器学*是开启隐藏在数据中的洞察力的钥匙一样。
下一步是什么?
这只是对机器学*的高度概述,为什么它有用,以及它的一些应用。机器学*是一个广阔的领域,跨越了从数据中推断答案的整个技术家族。在未来,我们的目标是让您更好地了解对于给定的数据集和您想要回答的问题应该使用什么方法,以及提供如何完成它的工具。
这是云人工智能冒险系列文章的第一篇。下一次,我们将更详细地研究 ML 的具体过程,通过一步一步的公式来解决机器学*问题。
什么是机器学*和机器学*的类型—第 1 部分
原文:https://towardsdatascience.com/what-is-machine-learning-and-types-of-machine-learning-andrews-machine-learning-part-1-9cd9755bc647?source=collection_archive---------1-----------------------
几个月来,我一直在阅读什么是机器学*以及如何在实际应用中应用它。当我第一次读到谷歌的自动驾驶汽车 Waymo 时,故事就开始了。然后我读到了它是如何工作的。然后我听说机器学*这个术语在其中发挥了巨大的作用。几天后,我参加了印度 Pycon 会议,以获得更好的直觉。我刚刚在那里参加了一些关于机器学*的讲座。不幸的是,所有的都在我耳边消失了。然后我开始谷歌它。在大多数博客和 quora 上,我听说了吴恩达的 coursera 机器学*课程。突然我就一头扎进去了。
在这篇文章中,我将简要地提到 Coursera 的机器学*课程的第一周。
什么是机器学*?
提供了机器学*的两种定义。阿瑟·塞缪尔将其描述为:“在没有明确编程的情况下,赋予计算机学*能力的研究领域。”这是一个更老的,非正式的定义。
Tom Mitchell 提供了一个更现代的定义:“如果一个计算机程序在 T 类任务和性能测量 P 中的性能(由 P 测量)随着经验 E 而提高,那么就说它从经验 E 中学*。”
我举一个简单的例子来更好地理解。假设你有几组数字。然后,你只需将一组中的一个数字输入机器,就可以预测另一组数字。
(2,4),(3,6),(4,9)。计算机程序必须预测(5,?)
程序首先需要找到配对之间的逻辑,然后应用相同的逻辑来预测数字。去发现逻辑叫做“机器学*”。以便在找到逻辑之后,它可以应用相同的逻辑来预测每个数字。
机器学*的类型?
一般来说,有 3 种类型的机器学*。
1.监督学*
2.无监督学*
3.强化学*
监督学*
在监督学*中,我们得到一个数据集,并且已经知道我们的正确输出应该是什么样子,知道输入和输出之间有关系。
监督学*问题分为“回归”和“分类”问题。在回归问题中,我们试图预测连续输出中的结果,这意味着我们试图将输入变量映射到某个连续函数。在分类问题中,我们试图预测离散输出的结果。换句话说,我们试图将输入变量映射到离散的类别中。
例 1:
给定房地产市场上房屋大小的数据,试着预测它们的价格。价格作为规模的函数是一个连续产出,所以这是一个回归问题。我们可以把这个例子变成一个分类问题,我们的输出是关于房子“卖得比要价高还是低”在这里,我们根据价格将房屋分为两个独立的类别。
例二:
(a)回归——给定一个人的照片,我们要根据给定的照片预测其年龄
(b)分类——给定一个患有肿瘤的患者,我们要预测肿瘤是恶性的还是良性的。
无监督学*
无监督学*允许我们在很少或根本不知道结果应该是什么样的情况下解决问题。我们可以从数据中推导出结构,而不一定知道变量的影响。我们可以根据数据中变量之间的关系对数据进行聚类,从而得到这种结构。
无监督学*,没有基于预测结果的反馈。
例 1:
聚类:收集 1,000,000 个不同的基因,并找到一种方法来自动将这些基因分组为在某种程度上相似或通过不同变量(如寿命、位置、角色等)相关的组。
非聚类:“鸡尾酒会算法”,让你在混乱的环境中找到结构。(即在鸡尾酒会上从声音网格中识别出个人的声音和音乐)。
例 2:
我不擅长煮咖啡。所以有一天,我决定建立一个模型,根据糖、牛奶、咖啡粉的数量来预测我的咖啡质量。不幸的是,那并不顺利。但是,我希望我能在此基础上建立一个有效的模型。
强化学*
强化学*是机器学*的一个领域,受到行为主义心理学的启发,涉及软件代理应该如何在环境中采取行动,以最大化累积回报的概念。
例 1:
考虑教狗一个新把戏。你不能告诉它该做什么,但如果它做了正确/错误的事情,你可以奖励/惩罚它。它必须弄清楚它做了什么让它得到了奖励/惩罚。我们可以使用类似的方法来训练计算机完成许多任务,例如玩双陆棋或象棋,调度作业,以及控制机器人肢体。
例 2:
通过学*和适应游戏的新情况,教游戏机器人在游戏中表现得越来越好。
今天就到这里吧,伙计们。谢谢你的耐心。如果帖子中有错误,请告诉我,因为这是我的第一篇帖子。
测量对象检测模型-地图-什么是平均精度?
原文:https://towardsdatascience.com/what-is-map-understanding-the-statistic-of-choice-for-comparing-object-detection-models-1ea4f67a9dbd?source=collection_archive---------0-----------------------
对于使用机器学*解决的大多数常见问题,通常有多个模型可用。每个人都有自己的怪癖,并会根据各种因素表现不同。
每个模型都根据其在数据集上的表现来判断,通常称为“验证/测试”数据集。这种性能是用各种统计数据来衡量的——准确度、精确度、召回率等。选择的统计数据通常特定于您的特定应用程序和用例。对于每个应用程序来说,找到一个可以用来客观比较模型的指标是至关重要的。
在本文中,我们将讨论用于对象检测问题的最常见的度量标准— 平均精度也就是图。
大多数时候,这些指标很容易理解和计算。例如,在二进制分类中,精度和召回率是一种简单直观的统计。
另一方面,物体检测是一个相当不同的…有趣的问题。
即使你的物体检测器在一幅图像中检测到一只猫,如果你在它所在的图像中找不到的位置,也没有用。
由于您预测的是图像中物体的出现 和 位置,因此我们如何计算这一指标相当有趣。
首先,让我们定义对象检测问题,以便我们在同一页上。
目标检测问题
这就是我所说的“目标检测问题”,
给定一幅图像,找到其中的物体,定位它们的位置,并进行分类。
对象检测模型通常在一组固定的类上训练,因此该模型将仅定位和分类图像中的那些类。
此外,对象的位置通常是边界矩形的形式。
因此,对象检测涉及图像中对象的定位和该对象的分类。
Image 1 — Few prominent Image Processing problems [Image taken from Stanford’s CS231n Course slides(lecture 8)]
如下所述,平均精度特别用于预测对象位置和类别的算法。因此,从图像 1,我们可以看到,它对于评估定位模型、对象检测模型和分割模型是有用的。
评估对象检测模型
为什么要地图?
对象检测问题中的每个图像可能具有不同类别的不同对象。如前所述,模型的分类和定位都需要评估。因此,在图像分类问题中使用的标准精度度量不能直接应用于此。这就是 mAP(平均精度)发挥作用的地方。我希望在这篇文章结束时,你能够理解它的含义和代表。
关于地面真相
对于任何算法,总是在与真实数据的比较中评估指标。我们只知道训练、验证和测试数据集的基本事实信息。
对于对象检测问题,地面真实包括图像、图像中对象的类以及该图像中每个对象 **** 的真实边界框。
一个例子:
Human visualisation of the ground truth
我们被给予实际的图像(jpg、png 等)和作为文本的其他注释(边界框坐标(x、y、宽度和高度)和类),红色框和文本标签仅被绘制在该图像上以供我们人类可视化。
对于这个特殊的例子,我们的模型在训练中得到的是这个
The actual image
以及定义地面实况的 3 组数字(假设该图像是 1000x800px,所有这些坐标都是像素,也*似为)
现在,让我们把手弄脏,看看地图是如何计算的。
我将在另一篇文章中讨论各种对象检测算法、它们的方法和性能。现在,让我们假设我们有一个经过训练的模型,我们正在验证集上评估它的结果。
计算地图
让我们说,原始图像和地面真相注释是我们在上面看到的。训练和验证数据以相同的方式对所有图像进行注释。
该模型将返回大量预测,但在这些预测中,大多数预测都具有非常低的关联置信度得分,因此我们只考虑高于某个报告置信度得分的预测。
我们通过我们的模型运行原始图像,并且这是在置信度阈值化之后对象检测算法返回的,
带边框的图像-
Results from our model
现在,由于我们人类是物体检测专家,我们可以说这些检测是正确的。但是我们如何对此进行量化呢?
**我们首先需要知道这些检测中每一个的正确性有多大。告诉我们一个给定的边界框的正确性的度量是联合上的— IoU — 交集。这是一个非常简单的视觉量。
就单词而言,有些人会说这个名字是不言自明的,但是我们需要一个更好的解释。我简单解释一下欠条,对于真正想要详细解释的人,* 阿德里安·罗斯布鲁克 有一篇 真正的好文章 可以参考一下。*
借据
交集/并集是预测框和基础事实框的交集和并集之间的比率。这种统计也被称为 Jaccard 指数,由 Paul Jaccard 在 20 世纪初首次发布。
为了获得交集和并集值,我们首先将预测框覆盖在基础真值框上。(见图片)
现在,对于每个类,与预测框和地面真实框重叠的区域是交集区域,并且跨越的总区域是联合。
We’ll show this example only for the horse
上面的 horse 类的交集和并集如下所示,
In this case the intersection is pretty large
交集包括重叠区域(青色区域),并集包括橙色和青色区域。
欠条的计算方法如下
This Image is inspired by the pyimagesearch article, which was inspired by University of Pittsburg’s CS1699 HW assignment4
识别正确的检测并计算精度
对于计算精度和召回,就像所有机器学*问题一样,我们必须识别真阳性、假阳性、真阴性和假阴性。
为了得到真阳性和假阳性,我们使用 IoU。使用 IoU,我们现在必须确定检测(阳性)是正确的(真)还是错误的(假)。最常用的阈值是 0.5,即如果 IoU > 0.5,则认为是真阳性,否则认为是假阳性。COCO 评估指标建议测量各种 IoU 阈值,但为简单起见,我们将坚持 0.5,这是帕斯卡 VOC 指标。
为了计算召回率,我们需要否定的计数。由于图像中我们没有预测到物体的每一部分都被认为是负面的,所以测量“真正的”负面效果有点没用。所以我们只测量“假”否定。我们的模型遗漏的对象。
此外,另一个要考虑的因素是模型为每次检测报告的置信度。通过改变我们的信心阈值,我们可以改变一个预测框是积极的还是消极的。基本上,高于阈值的所有预测(盒+类)被认为是正盒,低于阈值的所有预测是负盒。
现在,对于每个图像,我们都有基础数据,它告诉我们该图像中给定类别的实际对象的数量。
现在,我们使用模型报告的每个阳性检测框的地面真实值来计算 IoU。使用这个值和我们的 IoU 阈值(比如 0.5),我们计算图像中每个类别的正确检测的数量( A ) 。这用于计算每个类的精度[TP/(TP+FP)]
精度= TP / (TP+FP)
由于我们已经计算了正确预测的数量( A ) (真阳性)和漏检(假阴性),因此我们现在可以使用此公式计算该类模型的召回( A / B ) )。
召回= TP / (TP+FN)
计算平均精度
平均精度是一个有不同定义的术语。这种度量通常用于信息检索和对象检测领域。这两个域有不同的计算 mAP 的方法。我们将讨论对象检测相关的地图。
当前流行的 mAP 的对象检测定义在 2007 年的 PASCAL 视觉对象类(VOC)挑战中首次正式化,该挑战包括各种图像处理任务。关于确切的文件,请参考和。
我们使用与上一节提到的相同的方法来计算精度和召回率。
但是,如前所述,我们至少有 2 个其他变量决定精确度和召回率的值,它们是 IOU 和置信度阈值。
IOU 是一个简单的几何指标,很容易标准化,例如 PASCAL VOC challange 基于固定的 50% IOU 来评估 mAP。(MSCOCO 挑战赛更进一步,在 5%到 95%的不同阈值范围内评估 mAP。另一方面,置信度因模型而异,对我的模型设计 50%的置信度可能相当于对其他人的模型设计 80%的置信度,这将改变精确回忆曲线的形状。因此,PASCAL VOC 组织者想出了一种方法来解释这种差异。
我们现在需要一个度量来以模型不可知的方式评估模型。
这篇论文建议我们计算一个叫做 AP ie 的度量。平均精度
*For a given task and class, the precision/recall curve is
computed from a method’s ranked output. Recall is defined
as the proportion of all positive examples ranked above a
given rank. Precision is the proportion of all examples above
that rank which are from the positive class. The AP summarises
the shape of the precision/recall curve, and is de-
fined as the mean precision at a set of eleven equally spaced
recall levels [0,0.1,...,1]:*
这意味着我们选择了 11 个不同的置信度阈值(决定了“等级”)。阈值应该是这样的,在那些置信度值下的回忆是 0、0.1、0.2、0.3、…、0.9 和 1.0。AP 现在被定义为在这些选定的 11 个召回值处的精度值的平均值。这导致该图是整个精确召回曲线的总体视图。
本文还对上述计算中所用的精度进行了详细的计算。
*The precision at each recall level r is interpolated by taking
the maximum precision measured for a method for which
the corresponding recall exceeds r.*
基本上,我们使用给定召回值的最大精度。
因此,该图是上面测量的所有类的所有平均精度值的平均值。
这实质上是如何为对象检测评估计算平均精度的。有时可能会有一些变化,例如 COCO 评估更加严格,使用各种借据和对象大小强制执行各种指标(更多细节请点击)。如果你们中的任何一个人想让我说得更详细,请在评论中告诉我。
因此,总结一下,平均精度,从字面上看,是数据集中所有类的平均精度(AP)的平均值。
比较地图值时需要记住的一些要点
- MAP 总是在固定的数据集上进行计算。
- 尽管解释模型输出的绝对量化并不容易,但 MAP 通过提供一个非常好的相对度量来帮助我们。当我们在流行的公共数据集上计算该度量时,该度量可以很容易地用于比较新旧对象检测方法。
- 根据类在训练数据中的分布情况,平均精度值可能会从某些类的非常高(具有良好的训练数据)到非常低(具有较少/较差数据的类)不等。所以你的地图可能是中等的,但是你的模型可能对某些职业真的很好,对某些职业真的很差。因此,在分析模型结果时,查看单个类的平均精度是明智的。这些值也可以作为添加更多训练样本的指标。
原载于 2018 年 1 月 27 日 tarangshah.com*。2018 年 5 月 27 日更新***
什么是基于物理的动画?
原文:https://towardsdatascience.com/what-is-physically-based-animation-cd92a7f8d6a4?source=collection_archive---------12-----------------------
基于物理的动画(PBA) 指的是计算机图形学的一个领域,其目标是使用人工智能(AI) 生成物理上看似真实的动画。动画通常使用 2D 或 3D 模拟环境中的虚拟角色来播放。下面是一个使用 PBA 的最新最先进结果的好例子:
An example of a 3D humanoid character running under heavy perturbations. Physically-based animation enables the character to dynamically adjust its movements to the environment [1].
PBA 与传统关键帧动画的一个主要区别是,PBA 可以根据环境的变化进行动态调整。另一方面,关键帧动画本质上是静态的和无响应的,必须小心处理,否则很容易产生不自然的运动,如下所示:
If not handled carefully, traditional keyframe animation easily produces unnatural movements (footage from Fallout 76).
在这篇文章中,我将简要概述 PBA 的基本概念以及解决这个问题的研究现状。
1.常见的方法有哪些?
*二十年来,许多研究人员一直致力于 PBA 的研究,迄今为止,已经提出了无数的方法来解决这个问题。我将这些方法分为两类:1)基于搜索的方法,和 2)强化学*。在这一节中,我将解释这些方法背后的核心思想。
1.1.基于搜索的方法
解决 PBA 的一类经典而强大的方法是使用基于搜索的方法来优化运动。这些方法背后的基本思想相当简单:1)生成多个动作序列,2)使用正向模拟和计算一些成本函数来评估它们,最后,3)选择最小化成本函数的动作序列。这个过程的简单说明如下所示:
This picture demonstrates the basic mechanism in search-based methods using a simple example. Here the aim is to control an object from the left side to the green circle in the right. The optimal trajectory is shown in blue, and the gray lines indicate the randomly generated trajectories. After computing the cost function for all generated trajectories, the trajectory with minimum cost (shown in black) is considered as the solution [2].
迄今为止,已经提出了大量基于搜索的方法来求解 PBA。使用此类方法的最佳示例之一获得的最终动画如下所示:
The result of a search-based method, in which offline optimization is used to optimize a parameterized controller that generates the movements [3].
这项工作有趣的一点是,它没有直接优化运动。相反,它首先定义一个用于合成运动的参数化控制器,然后优化该控制器的参数。这使得角色能够稳健地处理环境中的随机扰动[3]。
1.2.强化学*
强化学*(RL) 是机器学*(ML) 的一个热门领域,研究从交互中学*的计算方法【4】。RL 的基本定义包括一个与某些环境交互的主体,其目标是随着时间的推移最大化累积的回报。在每个时间步中,代理观察当前状态并采取行动。之后,代理人观察到一个标量奖励以及新状态的观察结果。目标是优化代理,使其通过采取最佳行动获得最大可能的回报。这种相互作用的示意图如下所示:
The agent-environment interaction in reinforcement learning [4].
在过去的几年里,由于雅达利游戏[5]和围棋游戏[6,7,...]中的深度强化学*(DRL) 的显著成果,RL 受到了更多的关注。这些进展也激发了连续控制 RL 的几项突破。这些类别中的一种最先进的方法如下所示:
An example of using reinforcement learning to imitate acrobatic movements by watching Youtube videos [8].
上述工作中使用的流水线包括三个阶段:1)姿态估计,2)运动重建,和 3)运动模拟。输入视频首先由姿势估计阶段处理,姿势估计阶段预测演员在每一帧中的姿势。接下来,运动重建阶段将姿态预测合并到参考运动中,并修复可能由姿态预测引入的伪像。最后,参考运动被传递到运动模仿阶段,在那里模拟角色被训练来使用 RL [8]模仿运动。
2.哪些游戏使用基于物理的动画?
由于其在计算资源方面的高要求,PBA 在视频游戏的动画流水线中没有被广泛使用。然而,有趣的是,几乎所有拥有密集动画系统的游戏都至少使用了一些 PBA 技术。在我看来,最好的例子包括 FIFA 、 PES 和刺客信条。
FIFA is a good example of a big game title that uses PBA in its animation pipeline.
抛开大型游戏不谈,也有一些独立游戏已经完全使用 PBA 实现了他们的动画管道。在这些游戏中, QWOP 和 Toribash 是其中最成功的两个(如果你知道这里其他值得一提的好例子,请告诉我)。你可以在 Youtube 上找到很多这些游戏的游戏性视频。但是,我强烈建议您自己下载并测试它们,这样您就可以感受到 PBA 的强大和复杂。您可以从下面的 Toribash 中看到一个示例动作:
A few games have implemented their whole animation pipeline using physically-based animation (footage from Toribash).
3.有哪些开放性的问题?
到目前为止,我只告诉了你这个好消息。坏消息是,目前解决 PBA 的方法仍然不能以适中的计算成本合成鲁棒的运动。所以在这个领域有很多公开的问题。我试图在下面解决最重要的问题(从我的角度来看):
- 我们如何开发有效的方法来解决 PBA?
- 如何在实时应用和游戏中使用 PBA?
- 我们如何评价一部动画的质量(流畅度,自然度等)。)?
- 如何利用 PBA 设计出新颖的游戏机制或者人机交互界面?
- PBA 如何影响不断发展的增强、混合和虚拟现实技术?
4.结论
这篇文章是对 PBA 的简单介绍。与传统的关键帧动画技术相比,PBA 具有以更大的灵活性和多样性合成运动的潜力。当前解决 PBA 的方法使用基于搜索的方法和/或强化学*。尽管该领域最*取得了显著进展,但在计算能力和鲁棒性方面,仍有很大的空间来改进当前的方法。这就是为什么 PBA 还没有完全进入游戏开发管道的原因。
我希望这篇文章能帮助你对基于物理的动画问题有所了解。最后,我希望听到您的任何意见或问题。
参考文献
- 彭;阿贝耳,p。Levine,S. & van de Panne,m .,“DeepMimic:基于物理的角色技能的示例引导的深度强化学*。” ACM Trans。图表。,ACM,, 2018 ,37 ,143:1–143:14
- 哈姆莱宁,p。rajamki,J. & Liu,C. K .,“使用粒子信念传播的模拟人形机器人的在线控制”, 《美国计算机学会图形学报(TOG)》,美国计算机学会, 2015 ,34 ,81
- Geijtenbeekvan de Panne,M. & van der Stappen,A. F .,“两足动物基于肌肉的灵活运动”, 《美国计算机学会图形学汇刊》, 2013 ,32
- 萨顿,R. S. &巴尔托,A. G .,《强化学*:导论》, 麻省理工出版社, 2018
- Mnih,v;Kavukcuoglu 白银,d;鲁苏公司;Veness,j;贝勒马尔;格雷夫斯,a。里德米勒,m;菲吉兰,又名:奥斯特洛夫斯基、g .等人、《通过深度强化学*的人类级控制》、《自然》、《T33》、《T34》、《T35》、《T36》、《2015》、《T37》、《T38》、《518》、《T39》、《529》
- 白银,d;黄;马迪森,首席法官;Guez,A 西弗尔湖;范登德里斯切;Schrittwieser,j;安东诺格鲁岛;Panneershelvam,v。Lanctot,m .等人,“用深度神经网络和树搜索掌握围棋游戏”, 《自然》, 2016 ,529 ,484–489
- 白银,d;Schrittwieser,j;西蒙扬,k;安东诺格鲁岛;黄;Guez,A 休伯特,t。贝克湖;赖,男;波顿,a . .等人,《掌握没有人类知识的围棋游戏》, 自然, 2017 ,550 ,354
- 彭;金泽,a;j .马利克;Abbeel,P. & Levine,s .,《SFV:从视频中强化学*身体技能》, ACM Trans。图表。、ACM、、T4 2018、37
什么是“无服务器计算”?
原文:https://towardsdatascience.com/what-is-serverless-computing-a07f4a96759b?source=collection_archive---------5-----------------------
当我第一次听到“无服务器计算”这个词时,我惊慌失措地想,这怎么可能。服务器是一种特殊的计算机,用于处理请求并通过网络传送数据。例如,“网络服务器”被用来访问互联网上的网页。当 web 浏览器向 web 服务器发送请求时,它会处理该请求并传送所请求的网页。有许多其他类型的服务器可用于不同种类的服务,
- Web 服务器
- 电子邮件服务器
- FTP 服务器
实际上,“无服务器计算这个词是用词不当。即使它说无服务器计算,仍然需要一个服务器。不同之处在于,我们不需要自己维护物理服务器。服务器在云中维护,我们只需要向云提供所需的指令,以确保服务器按照我们想要的方式运行。通常,这些指令是使用函数发送到云的。
亚马逊在 2014 年推出的“AWS Lambda ”是第一个提供无服务器计算的公共云。最初,它只支持 Node.js。然而,目前它支持其他流行的编程语言,包括 Java 和 Python。
最*, Google Firebase 也在云功能下提供无服务器设施。开发人员可以将他们在函数中的后端代码上传到云,云会根据事件触发器和 HTTP 请求自动执行相应的逻辑。
如果你读到这里,你会认为这是另一种类型的云计算。实际上,无服务器计算是基于 FaaS,即功能即服务。由于云的参与,使用这种架构有很多优势。
- 简化部署流程
- 不需要复杂的基础架构和管理
- 支持微服务架构
- 动态资源分配
- 成本效益(使用收费)
- 可量测性
现在让我们使用 Google Firebase 获得一些关于无服务器计算的实践经验,它可以免费用于学*:)
我们将创建 2 个函数并上传到 firebase。第一个函数触发一个 HTTP 请求,将一个给定的输入保存到数据库中。另一个功能基于 firebase 事件触发器。它将在每次对数据库进行保存调用时自动执行,将输入转换为大写。你可以从这里阅读更多谷歌文档。
*注意:你需要安装 Node.js 才能遵循这个。如果不是从 这里 下载安装。
- 首先,使用以下命令安装 Firebase CLI。
2。认证&初始化
然后运行以下命令来验证和初始化项目。你需要有一个谷歌帐户进行认证。
执行该命令时,浏览器将弹出,您将被重定向到登录页面。输入凭证,完成所有工作后,转到 firebase 中的控制台,创建一个新项目。启动项目时,本地项目将与此同步。
这里“功能”代表项目名称。当执行这个命令时,您将被要求选择一个默认项目,并且您将得到在 Firebase 中创建的项目。选择适当的项目,并通过安装所有必需的依赖项来继续初始化过程。
3。导入模块
设置完成后,导航到项目文件夹,您将看到已经创建了一个 index.js 文件。这个文件用于编写需要上传到 Firebase 的函数。
首先,我们需要导入云函数来创建函数和设置触发器。然后 Admin SDK 需要访问 Firebase 实时数据库来保存我们的输入。
4。添加我们的第一个函数
现在我们可以开始实现我们的功能了。首先,让我们编写函数,将给定的输入保存在数据库中。
如果你熟悉 Node.js,这里没有太大的区别。基本上,我们从请求中获取输入,并通过/message 路径中的管理模块将其保存在数据库中。我们保存的每个文本都将存储在实时数据库的消息下。当我们执行该功能时,您可以从 Firebase dashboard 中看到这一点。
5。添加第二个功能
同样,我们可以添加第二个函数。
由于这是一个事件触发函数,我们可以从事件中获取原始值。然后我们把它转换成大写,保存在“大写”下。当我们在 Firebase 仪表板中执行和查看结果时,这对您来说是有意义的。
6。部署功能
现在我们已经实现了我们的功能,是时候将它们部署到云中了。运行以下命令来部署我们的函数。
您将看到它将逐步部署我们所有的功能,并将给出一个 URL 来触发我们的 HTTP 触发功能。你可以用它来传递一个文本作为一个普通的 URL 参数(xyz.com/saveInput?输入=测试)。完成后,使用 web 浏览器中的 Firebase 仪表板检查实时数据库。您将能够看到一个创建为“消息”的部分,并且您传递的文本作为“原始”保存在那里。此外,它包含大写文本作为“大写”。现在回到代码片段,现在一切对你来说都有意义了。
希望你从这篇文章中得到一个基本的想法。这是一个非常基本的示例,可以为使用谷歌云功能提供一些指导。这个例子摘自官方文档,如果您有任何疑问,请遵循它。
干杯!
函数式编程有多棒:尾部递归消除
原文:https://towardsdatascience.com/what-is-tail-recursion-elimination-or-why-functional-programming-can-be-awesome-43091d76915e?source=collection_archive---------9-----------------------
Iguanas are experts at tail elimination. I am not sure about the recursion though. Source: Pixabay
尾部递归消除是函数式编程语言中一个非常有趣的特性,比如 Haskell 和 Scala。它使得递归函数调用几乎和循环一样快。
在我的关于 Python 中函数式编程特性的最新文章中,我说鉴于列表理解的存在,T2 映射有点多余,并且也没有很好地描绘 T4 表达式。我觉得我总体上没有做好函数式编程,因为我确实喜欢它作为一种构造程序的优雅方式。它与 Python 的风格和哲学不太合拍。作为越位评论,我提到了缺少尾部递归消除,这是 Python 实现中另一个有争议的设计决策。
老实说,当我写这个的时候,我并不完全确定什么是尾部递归消去法(TRE,从现在开始)。我知道这是一个与递归函数调用有关的优化,它出现在 Haskell 中,但并不多。
所以我决定用我能做到的最好的方式来弥补:学*并写一篇关于它的文章,这样这就不会发生在你身上了!
什么是递归调用?
当一个函数调用在被调用的函数范围内进行时,我们说它是递归的。所以基本上它是一个调用自身的函数。
许多问题(实际上任何你可以用循环解决的问题,和许多你不能解决的问题)都可以通过递归调用一个函数直到满足某个条件来解决。
例如,这里有一个以命令式和函数式两种风格编写的 Python 函数:
Note that the last two clauses in the second function could be merged with an ‘or’.
这两个函数在理论上做同样的事情:给定一个列表和一个元素,查看该元素是否存在,并将其作为 bool 返回。但是在较低的层次上,第二个实现进行了大量的函数调用,并且直到最后一个调用完成后才真正返回。为什么这是一个问题?
递归消除的动机
由于函数调用会占用计算机堆栈的空间,所以在遇到堆栈溢出之前,我们可以调用的函数数量有一个硬性限制:填满整个堆栈。不仅如此:由于每个函数调用都是从建立堆栈开始的(将东西推到内存和其他高成本的操作),第二段代码要慢很多。
正如我之前说过的,有些问题你无法用不使用递归的解决方案来解决,或者至少不那么优雅。因此,如果我们能以第二种方式编写函数,并使它们像第一种方式一样快,那将是非常好的——特别是如果这也允许我们避免堆栈溢出的话。
幸运的是,有人已经找到了解决方案——但首先,让我们澄清一些事情。
什么是尾部递归?
我们已经看到了为什么我们想要以一种有效的方式实现递归,但我一直在谈论消除尾部递归,而不是所有类型的递归。那么是什么让尾部递归变得特别呢?尾递归只是递归的一个特殊实例,函数的返回值被计算为对自身的调用,除此之外别无其他。
例如,下面是阶乘函数的两个版本。一个是尾递归,一个不是。
请注意,即使第一个函数的返回行包含对自身的调用,它也对其输出做了一些事情(在这个特殊的例子中是计算一个产品),所以返回值并不是递归调用的返回值。通常我们可以通过使用累加器参数使一个常规递归函数尾递归,就像我在第二次声明阶乘时所做的那样。
引入尾部递归消除
TRE 背后的整个思想是尽可能避免函数调用和堆栈帧,因为它们耗费时间,并且是递归和迭代程序之间的关键区别。你没看错:函数式语言很棒,部分原因是它们找到了调用更少函数的方法。
为了理解下一部分,重要的是回退一步,理解每次函数调用时到底发生了什么。
无论我们的代码是编译的(如 C 或 Golang)还是解释的(如 Python),它总是以机器语言指令的形式结束。这些通常用汇编或其他类似的语言编码,它们代表了最低层次的抽象,因此是对内存和硬件的最细粒度的控制。
下面是每次函数调用时发生的情况:
- 所有寄存器——存储数据的变量的硬件等价物——都被推到堆栈上(写入内存,但不是以最慢的方式)。
- 您的计算机开始从不同的内存地址读取指令(对应于被调用函数的第一行代码)。
- 代码从该地址开始执行,做函数实际做的事情。通常以某种方式改变寄存器值。
- 所有的寄存器值都从堆栈中弹出/取回,所以我们返回的函数有它的数据。
- 运行 return 语句,并再次开始从前面的函数中读取指令。
就时间而言,第二步和第四步的运行成本更高,就像大多数处理内存的操作一样。每次 push 或 pop 通常需要十倍于“常规”(仅处理寄存器)指令的时间。然而,如果跳过这些步骤,一个函数可以在寄存器中写入值,潜在地覆盖调用者函数已经写入的值。想象一下,如果每次调用 print,时,所有变量都变成任意值,会发生什么。
然而,在函数调用自身的特殊情况下,我们可以使用一些技巧:
- 我们可以存储函数开始的内存地址,而不是调用函数,只是在最后将“内存读取器”移回到它那里。
- 我们可以自己写入寄存器,知道前一个函数期望从我们这里得到哪些值,而不必使用堆栈来恢复前一个状态。我们知道“前一个函数”期望的是什么,因为它就是这个函数。不仅如此:我们甚至不需要保存和恢复我们不会改变的寄存器。
这样我们可以避免来回推动和弹出我们的寄存器,这将花费很多时间。但这还不是全部——因为没有实际的函数调用发生(我们只使用了 jump 语句——移动我们的指令读取器—),我们没有填充我们的堆栈,也不会发生堆栈溢出。我们不需要首先在堆栈中保存以前的上下文,因为我们只是一次又一次地返回到同一个函数。我们需要保存的唯一上下文是第一次调用我们的函数时的上下文。
总而言之,TRE 是一种优化,它利用了函数调用的一种非常特殊的情况:函数调用自己,并返回它们的输出,而不做任何进一步的处理。它使用函数自身的知识,因此它可以将合适的值写入相关的寄存器,而不必恢复它在运行期间没有进行任何修改的值。然后,当它调用自己时,它就跳到自己的起点,而不必在堆栈中移动任何东西。
由于这个特性,像 Haskell 这样的语言可以运行递归算法的实现,这对于函数式编程来说是至关重要的(特别是对于纯函数式语言),就像它们的命令式对应物一样快。
这是 Haskell 中一个非常精简的线性搜索,看看它在两行代码中是多么优雅!(对于那些实际上擅长 Haskell 的人,请原谅我的糟糕做法或可怕的代码):
This code does the same thing as the second Python function defined above, only in Haskell
我希望你现在对 TRE 有了更好的理解,也许对函数式语言也有了更好的理解。如果你认为这个解释中的任何部分不够清楚,或者太详细,请在评论中告诉我,因为我还在学*写作。
如果你想要更多的编程教程、技巧和诀窍,请关注我!
并请考虑 表示对我写作的支持 。
机器学*最好的编程语言是什么?
原文:https://towardsdatascience.com/what-is-the-best-programming-language-for-machine-learning-a745c156d6b7?source=collection_archive---------0-----------------------
克里斯蒂娜·沃斯科格鲁
问答网站和数据科学论坛一遍又一遍地讨论着同样的问题:我是数据科学新手,我应该学*什么语言?机器学*最好的语言是什么?
有大量的文章试图回答这些问题,要么基于个人经验,要么基于工作机会数据。然而,机器学*中的活动比西方的工作机会所能描述的要多得多,同行的意见当然非常有价值,但往往相互冲突,因此可能会让新手感到困惑。相反,我们转向了来自 2000 多名数据科学家和机器学*开发者的硬数据,他们对我们关于他们使用哪些语言和他们正在从事哪些项目的最新调查做出了回应,以及关于他们的机器学*活动和培训的许多其他有趣的事情。然后,作为数据科学家,我们不得不运行一些模型,看看哪些是与语言选择相关的最重要的因素。我们比较了排名前五的语言,结果证明“哪种语言?”没有简单的答案问题。这取决于你试图建立什么,你的背景是什么,以及你最初为什么参与机器学*。
哪种机器学*语言总体上最受欢迎?
首先,我们来看看机器学*语言的整体流行程度。Python 领先,57%的数据科学家和机器学*开发人员使用它,33%的人优先开发它。考虑到深度学* Python 框架在过去 2 年中的所有发展,包括 TensorFlow 和大量其他库的发布,这并不奇怪。Python 经常与 R 相提并论,但它们在受欢迎程度上没有可比性:R 在总使用量上排名第四(31%),在优先级上排名第五(5%)。事实上,在这五种语言中,r 是优先级使用比率最低的语言,只有 17%的开发者会优先使用它。这意味着在大多数情况下,R 是一种补充语言,而不是首选语言。Python 的这一比例为 58%,是五种语言中最高的,这清楚地表明 Python 的使用趋势与 r 的使用趋势完全相反。Python 不仅是使用最广泛的语言,也是大多数用户的首选。C/C++在使用率(44%)和优先级(19%)上都远远落后于 Python。Java 紧随 C/C++之后,而 JavaScript 在使用上排在第五位,尽管优先级性能比 R (7%)略好。我们向受访者询问了机器学*中使用的其他语言,包括 Julia、Scala、Ruby、Octave、MATLAB 和 SAS 等常见语言,但它们的优先级都低于 5%,使用率低于 26%。因此,我们将注意力集中在排名前五的语言上。
Python 在 Java 没有的应用中被优先考虑。
我们的数据显示,在为机器学*选择语言时,最具决定性的因素是你将从事的项目类型——你的应用领域。在我们的调查中,我们向开发人员询问了 17 个不同的应用领域,同时也为我们的受访者提供了机会,告诉我们他们仍在探索各种选项,而不是积极致力于任何领域。这里我们展示了每种语言顶部和底部的三个区域:开发人员对每种语言的优先级最高和最低的区域。
与从事其他领域工作的开发人员相比,从事情感分析的机器学*科学家更优先考虑 Python (44%)和 R (11%),JavaScript (2%)和 Java (15%)。相比之下,网络安全/网络攻击和欺诈检测领域的工作人员更重视 Java,而 Python 在这两个领域最不受重视。网络安全和欺诈检测算法大多是在大型组织中构建或使用的,尤其是在金融机构中,在这些机构中,Java 是大多数内部开发团队的最爱。在不太关注企业的领域,如自然语言处理(NLP)和情感分析,开发人员选择 Python,它提供了一种更简单、更快速的方法来构建高性能的算法,因为它附带了大量的专业库。
考虑到所需的控制水平、高性能和效率,游戏中的人工智能(AI)和机器人移动(27%)是 C/C++最受青睐的两个领域。在这里,带有高度复杂的人工智能库的低级编程语言,如 C/C++是一个自然的选择,而为统计分析和可视化设计的 R,被认为是最不相关的。游戏中的人工智能(3%)和机器人移动(1%)是 R 优先度最低的两个领域,其次是语音识别,情况类似。
除了情感分析,R 在生物工程和生物信息学(11%)中也有相对较高的优先级——与其他应用领域相比,这是一个 Java 和 JavaScript 都不被看好的领域。鉴于 R 在生物医学统计中的长期使用,无论是在学术界内部还是外部,它是使用最多的领域之一也就不足为奇了。最后,我们的数据显示,数据科学和机器学*的新开发者仍在探索各种选择,他们比其他人更优先考虑 JavaScript),而比其他人更优先考虑 Java(13%)。在许多情况下,这些开发人员通过在 web 应用程序中使用第三方机器学* API 来试验机器学*。
专业背景是选择机器学*语言的关键。
其次是应用领域,专业背景在选择机器学*语言时也很关键:与来自五种不同背景的其他语言相比,开发人员更优先考虑前五种语言。那些将数据科学作为第一职业或研究领域的人最优先考虑 python(38%)。这表明 Python 现在已经成为数据科学不可或缺的一部分——它已经发展成为数据科学家的母语。对于 R 来说就不一样了,它主要被数据分析师和统计学家优先考虑(14%),因为这种语言最初是为他们创造的,取代了 s。
前端 web 开发人员将 JavaScript 的使用扩展到机器学*,16%的人为此优先考虑它,同时避开繁琐的 C/C++ (8%)。与之完全相反的是嵌入式计算硬件/电子工程师,他们比其他人更喜欢 C/C++,而比其他人更回避 JavaScript、Java 和 R。考虑到他们在工程生涯中对掌握 C/C++的投资,满足于一种会损害他们对应用程序的控制水平的语言是没有意义的。嵌入式计算硬件工程师也最有可能从事接*硬件的机器学*项目,如物联网边缘分析项目,硬件可能会强制他们选择语言。我们的数据证实,他们在工业维护、图像分类和机器人运动项目等方面的参与程度明显高于平均水平。
对于 Java,前端桌面应用程序开发人员比其他人更重视它(21%),正如前面提到的,这也与它主要用于企业应用程序是一致的。企业开发者倾向于在所有项目中使用 Java,包括机器学*。在这种情况下,公司的指令也明显来自与语言优先化密切相关的第三个因素——进入机器学*的原因。进入机器学*的开发人员最优先考虑 Java(27%),因为他们的老板或公司要求他们这样做。对于那些进入这个领域仅仅是因为好奇想看看到底有什么大惊小怪的人来说,它是最不受欢迎的(14%)——Java 不是一种你通常只是为了好玩而学*的语言!好奇者比其他人更优先考虑 Python(38%),这是另一个迹象,表明 Python 被认为是人们需要实验以发现机器学*是什么的主要语言。
似乎一些教授数据科学课程的大学仍然需要跟上这一理念。与其他人相比,那些说他们进入机器学*是因为数据科学是/曾经是他们大学学位的一部分的开发人员最不可能优先考虑 Python (26%),最可能优先考虑 R (7%)。很明显,在学术界的统计界——它诞生的地方——仍然存在对 R 的偏爱,但随着数据科学和机器学*越来越倾向于计算,这种趋势正在消退。受过大学数据科学培训的人可能比其他人更喜欢它,但从绝对意义上来说,这仍然只是该群体中的一小部分人会首先选择 R。
那些希望通过机器学*来增强现有应用/项目的人(20%)更优先考虑 C/C++,而那些希望基于机器学*来构建新的极具竞争力的应用的人(14%)则较少考虑 C/c++。这种模式再次表明,C/C++主要用于工程项目和物联网或 AR/VR 应用程序,很可能已经用 C/C++编写,其中添加了 ML 支持的功能。当从头开始构建一个新的应用程序时——特别是一个使用 NLP 的聊天机器人——没有特别的理由使用 C/C++,而有很多理由选择提供高度专业化库的语言,如 Python。这些语言可以更快更容易地产生高性能的算法,这可能在新的以 ML 为中心的应用程序中提供竞争优势。
最后,进入机器学*以增加获得高利润项目机会的承包商比其他人更优先考虑 JavaScript)。这些可能是 JavaScript 开发人员正在构建 web 应用程序,他们正在向其中添加机器学* API。一个例子是在基于网络的仪表板上可视化机器学*算法的结果。
没有所谓的“机器学*的最佳语言”。
我们的数据表明,在为机器学*和数据科学选择编程语言时,流行度不是一个很好的衡量标准。没有“机器学*的最佳语言”这种东西,这完全取决于你想要构建什么,你来自哪里,以及你为什么参与机器学*。在大多数情况下,开发人员将他们已经在使用的语言移植到机器学*中,特别是如果他们要在与他们以前的工作相邻的项目中使用它——例如 C/C++开发人员的工程项目或 JavaScript 开发人员的 web 可视化。
如果你第一次接触编程是通过机器学*,那么鉴于 Python 丰富的库和易用性,你在我们调查中的同行会指出 Python 是最好的选择。另一方面,如果你梦想在企业环境中工作,准备好使用 Java。无论如何,这都是机器学*的激动人心的时刻,无论你选择哪种语言,这段旅程都肯定会令人兴奋不已。享受旅程!
如果你是机器学*程序员或数据科学家, 加入我们的社区 ,在我们的 未来调查 中说出你的看法。
什么是 C4.5 算法,它是如何工作的?
原文:https://towardsdatascience.com/what-is-the-c4-5-algorithm-and-how-does-it-work-2b971a9e7db0?source=collection_archive---------0-----------------------
C4.5 算法在数据挖掘中用作决策树分类器,可用于基于特定数据样本(单变量或多变量预测器)生成决策。
所以,在我们直接进入 C4.5 之前,让我们讨论一下决策树以及它们如何被用作分类器。
决策树
Example of a Decision Tree
决策树看起来有点像这个流程图。假设你想计划今天的活动,但是你被告知一些会影响你决定的情况。
在上图中,我们注意到影响决策的一个主要因素是父母拜访。所以,如果这是真的,那么很快就会做出决定,我们选择去电影院。如果他们不来访呢?
这带来了一系列其他情况。现在,如果天气是晴天或雨天,我们要么分别去打网球或待在。但是,如果是刮风的天气,我会检查自己有多少钱。如果我有足够的钱可以花,也就是说,有钱,我会去购物,否则我会去电影院。
记住,树的根总是对一个价值函数有最小值的变量。在这个例子中,父母来访的概率各为 50%,如果你仔细想想,会更容易做出决定。但是如果天气被选为根呢?那么我们将有 33.33%的几率发生这种情况,这可能会增加我们做出错误决策的几率,因为有更多的测试用例需要考虑。
如果我们过一遍信息增益和熵的概念,会更容易理解。
信息增益
如果你随着时间的推移获得了有助于你准确预测某件事是否会发生的信息,那么关于你所预测的事件的信息就不是新信息了。但是,如果情况变糟,出现了意想不到的结果,这也是有用和必要的信息。
类似的还有信息增益的概念。
你对一个话题了解得越多,你就越不容易获得新的信息。更简洁地说:如果你知道一件事很有可能发生,那么当它发生时就不奇怪了,也就是说,它给你的信息很少是它确实发生了。
从上面的陈述中,我们可以得出,获得的信息量与事件发生的概率成反比。我们也可以说,随着熵的增加,信息增益减少。这是因为熵指的是事件发生的概率。
假设我们正在看掷硬币。期待公平硬币任何一面的概率是 50%。如果硬币是不公平的,获得正面或反面的概率是 T2 1.00,那么我们说熵是最小的,因为不需要任何尝试,我们就可以预测硬币的结果。
在下面的图表中,我们注意到,当每个事件的概率相等时,由于特定事件的最大不确定性而获得的信息量最大。这里,p=q=0.5p=q=0.5
E =系统事件的熵
p =人头作为结果的概率
q =作为结果的尾部概率
在决策树的情况下,重要的是节点被排列成使得熵随着向下分裂而减少。这基本上意味着,越是恰当地分割,做出明确的决定就越容易。
因此,我们针对每种分裂可能性检查每个节点。信息增益比是观测值与观测值总数的比值(m/N = p)和(n/N = q)其中 m+n=Nm+n=N,p+q=1p+q=1。在分裂之后,如果下一个节点的熵小于分裂之前的熵,并且如果该值与所有可能的分裂测试用例相比是最小的,则该节点被分裂成其最纯的成分。
在我们的例子中,我们发现父母访问与其他选项相比,在更大程度上降低了熵。因此,我们选择了这一方案。
修剪
我们最初例子中的决策树非常简单,但是当数据集很大并且需要考虑更多的变量时,情况就不一样了。这就是需要修剪的地方。修剪指的是在我们的决策树中删除那些我们认为对我们的决策过程没有显著贡献的分支。
让我们假设我们的示例数据有一个名为 Vehicle 的变量,当它的值为 Rich 时,它与条件 Money 相关或者是条件Money的衍生物。现在,如果车辆可用,我们就开车去购物,但是如果没有,我们就通过任何其他交通工具去购物。但最终我们还是去了 T21 购物。
这意味着车辆变量意义不大,可以在构建决策树时排除。
修剪的概念使我们能够避免回归或分类模型的过度拟合,以便对于小样本数据,在生成模型时不包括测量中的误差。
伪代码
- 检查为以上底座情况。
- 对于每个属性 a,从 a 上的分裂中找到标准化的信息增益比。****
- 设 a_best 是具有最高归一化信息增益的属性。****
- 创建一个在 a_best 上拆分的决策节点。
- 在通过对 a_best 进行拆分而获得的子列表上重现,和将这些节点添加为节点的子节点。****
c 4.5 相对于其他决策树系统的优势:
- 该算法固有地采用单遍修剪过程来减轻过拟合。
- 它可以处理离散和连续数据
- C4.5 可以很好地处理数据不完整的问题
我们还应该记住,C4.5 并不是最好的算法,但它在某些情况下确实证明是有用的。
最优秀的数据科学家拥有的关键技能是什么?
原文:https://towardsdatascience.com/what-is-the-key-skill-that-the-best-data-scientists-have-655edea228ac?source=collection_archive---------4-----------------------
有一项技能可以让你脱颖而出。找出是哪一个,并查看在构建行为评分模型时如何应用它的示例。
了解如何应用不同的 Python 或 R 算法非常简单:我们都知道,只要修改一两行代码,就有可能从线性回归变成神经网络。或者 SVM,或者任何你喜欢的模特。
定义超参数也没有那么困难:只需创建一个交叉验证和网格搜索来查找将提升您的模型度量的值。部署一个模型可能更棘手,但是,通过一点坚持、大量的教程和无限的试错,你将能够上传一个每分钟可以处理数百万个请求的体面模型(或者你可以使用诸如马文之类的工具,它将为你做大量的工作)。但是,到底是什么让你与众不同呢?最优秀的数据科学家拥有的关键技能是什么?
简单明了:知道如何从数据中创建分析视图。
交易数据库——那些存储交易数据的数据库,如订单、支付、访问日志等——是为存储应用程序交易数据而定制的,对数据科学没有直接用处。构建这些数据库的开发人员没有考虑过,也不应该考虑如何使用它们进行分析。他们只是创建了数据模型,可以提高他们当时正在编写的任何应用程序的性能。
试图用交易基础创建机器学*模型根本行不通,除非你想要的是预测交易。数据科学家通常需要分析基础来工作。好吧,但是到底什么是分析基础呢?它与交易基础有何不同?
到底什么是分析数据库?
为特定的研究建立和组织分析数据库。为预测客户流失而创建的基础将不同于购物车产品推荐的基础。然而,两者的来源可能是相同的:事务数据库。客户流失预测必须对每个客户的行为数据进行分组,这样才有可能观察到一段时间内的客户行为。至于产品推荐,必须按会话对数据进行分组,以预测购物车上的相关商品。
Being able to create analytical databases is more important than being versed in multiple algorithms.
知道如何创建分析基础是数据科学家可以培养的最重要的技能之一。同时也是课程、MOOCs、教程里教的比较少的一种。为了将事务数据库转换为分析数据库,有必要真正了解您正在处理的业务。这一点,再加上批判性思维,是正确处理问题的基础。
创建目标和分析数据一致性并不那么明显:它需要一个漫长的调查过程,这往往会让你的经理失望。
数据科学家通常需要目标来训练他/她的模型。如果你看一下 Kaggle ,你会发现无数的比赛和数据集已经定义了目标,并且在训练和评估基地中可用。然而,事务数据库通常没有现成的目标可供使用。数据科学家必须定义客户何时放弃服务,这样他/她才能创建一个流失模型。将需要定义什么是不良付款行为,因此可以预测违约。创建目标和分析数据一致性并不那么明显:它需要一个漫长的调查过程,这往往会让你的经理们失望(直到现在,他们都相信他们拥有所有的数据,他们所需要的只是一个数据科学家)。
事实是,数据科学远不止是向模型提供数据和评估性能指标的即插即用过程。
数据勤奋
想象一下这样一种情况,您有一个数据库,其中几名销售分析师根据行为特征对销售线索进行分类。为了对客户进行分类,分析师必须判断谈判过程中领导的行为,然后为客户选择合适的资料并填写表格。这里我们有一些潜在的问题:
- 在同一个谈判中,一个分析师对一个线索的判断不一定与另一个分析师的判断相同。不同的分析师可以在不同的配置文件中对相同的销售线索进行分类。
- 分析师真的了解每个行为特征代表什么吗?是否有明确的标准将销售线索划分为“X 类”而不是“Y 类”?
- 在收集期间,流程是否有变化,比如插入新的行为类别/档案?如果是这样的话,你将不得不决定在定义你的目标时如何考虑它们。
- 数据是如何收集的?在每次与线索的新接触中,行为特征是否会被打乱,以便分析师真正选择最好的一个?
- 经理们要求准确地进行这种分类吗?如果这只是一个要求分析师回答的“无聊”的过程,那么很有可能一些分类只是“因为他们不得不”而被填充的。当行为特征总是以同样的顺序呈现给分析师时,这个问题变得更加明显:目标可能会偏向第一个选项。
在这个过程之后,你可能会得出结论,到目前为止收集的数据是完全无用的,因为没有标准和过程。而这肯定会让很多人失望(大概连你也会失望)。
创建用于信用违约预测(行为评分)的分析数据库
为了使创建分析数据库的过程更加清晰,让我们看一个正确定义问题和创建分析数据库以执行预测所需的一组过程的示例。
Creating a model to predict customer credit default involves a series of business and technical decisions that have to be made by the data scientist.
假设您从事金融服务,并且面临以下问题:
我们需要创建一个模型来识别哪些客户在不久的将来不会支付他们的发票。
为此,您需要创建描述客户付款的变量。然后,有必要创建一个回归模型,能够挑选出好的和坏的付款人。最后,你需要计算客户好坏的概率。
1。定义目标是什么
你在你的数据库中找不到一个分类变量来表明某个客户是好的还是坏的付款人。首先有必要定义什么是好客户,什么是坏客户。对此,我们可以研究逾期付款。例如,您可能会发现,平均延迟时间为 20 天,但 75%的发票在到期日后 17 天内支付。
然后,您可以设计一个按逾期天数进行付款的累积分布。因此,您将能够验证 30 天后,87%的发票已经支付。但是,6 个月后,这个百分比将增加到只有 90%。然后,我们可以使用贝叶斯推断来预测客户在过期 30 天后支付发票的概率。
*# h1 = paid
# h0 = didn't pay
# e = observed event - reach 30 days past due
# With 30 days past due, 87% of invoices were already paid.**P(h1) = 90% # probability of paying, regardless the delay
P(h0) = 10% # probability of not paying, regardless the delay* P(e|h1) = 3 / 90 = 3,3% # *probability of reaching 30 days past due given that will pay* P(e|h0) = 10 / 10 = 100% # *probability of reaching 30 days past due given that will not pay*P(e) = P(e|h1) * P(h1) + P(e|h0) * P(h0)P(h1|e) = P(e|h1) * P(h1) / P(e)
P(h1|e) = 23,07% # *probability of paying the invoice given that is already 30 days past due*
我们可以得出的结论是,如果客户的付款已经晚了 30 天,他/她在未来结清债务的概率非常低(只有 23%)。要决定什么是好的或坏的付款行为,对业务的深入了解是必要的,因为你需要了解这种概率是否足够低,以将逾期不到 30 天的客户归类为好的付款人,而将逾期超过 30 天的客户归类为坏的付款人。
2。创建观察和绩效框架
我们感兴趣的是,利用客户在过去一段时间内的行为数据,预测客户在未来一段时间内的违约概率。选择这些框架的大小更多的是商业/谈判决策,而不是统计决策,记住它们必须足够大,以包含几个客户的行为观察。太短的窗口会增加观测值的方差,从而使模型失去精度。
定义:
根据客户在过去 12 个月的行为,我想预测他/她在未来 6 个月成为优秀付款人的可能性。
为了满足这一定义,您需要:
- 定义当前日期至少 6 个月之前的观察点。
- 定义一个观察框架,从观察点前 12 个月开始,到观察点结束。
- 定义一个在观察点之后 6 个月的绩效框架。
- 定义什么是好的付款人。我们之前做的事情!
Time framing the problem is a very important step in the process of creating an analytical database.
请注意,这个定义带来了一些影响:
- 你需要至少 18 个月的数据
- 你的预测是有时间限制的。每次你运行你的模型,它会计算未来 6 个月内的违约概率。
- 在分析数据库中创建要素时,观察点和时间范围的大小将始终作为您的参考
3。创建目标特征
既然我们已经定义了什么是我们的目标,什么是观察和性能框架,我们最终可以在数据库上创建目标。为此,您将计算每个客户在绩效时间范围内的最大逾期天数,并根据以下规则创建 GOOD_PAYER 变量:
*if max(delay) >= 30 days then is bad = 0
If max(delay) < 30 days then is good = 1*
因此,如果在绩效时间框架内,客户的付款延迟超过 30 天,他/她将被归类为不良,即使发票是后来支付的。
我们输入 0 代表坏,1 代表好,因为我们想定义得分越高,违约的概率越低。
4。排除事项
现在,我们需要广泛的业务结构知识,所以我们可以从我们的基础上执行一些排除。示例:
- 排除在观察点没有信用限额的每个客户
- 排除所有在观察点发票过期超过 30 天的客户,因为我们已经知道他们是不良付款人
- 排除所有从未进行交易的客户
5。特征构造
对于这项研究,基础必须按客户分组。每个变量必须描述客户在观察时间段内的特定行为。以下是一些可以设计的变量示例:
Example of an analytical database created to feed a behaviour score model that predicts customer default.
州 : 个人信息特征— 表示客户居住的省/州
年龄 : 个人信息特征 —表示客户的年龄,在观察点计算
性别 : 个人信息特征 —表示客户的性别
MOB: 账面月数 —自客户签到至观察点的月数
AVG _ 限额:12 个月观察期内限额使用的平均百分比
MAX _ LIMIT:12 个月观察期内限额使用的最大百分比
购买 _ 合计:12 个月观察期内的总购买金额
DPD_OP: 观察点逾期天数
MAX _ DPD:12 个月观察期内的最大逾期天数。如果所有发票都是预付的,则可能为负。
DPD AVG:12 个月观察期内的平均逾期天数。如果所有发票都是预付的,则可能为负。
BEFORE _ DUE _ QTY:12 个月观察期内到期前支付的发票数量。
GOOD _ PAYER:Target—表示在 6 个月的业绩窗口内,客户没有超过 30 天未提交发票。
6。表演时间到了!
现在终于说到建模型了!您现在可以应用您在数据科学课程中学到的一切。您的分析基础已经设计好并准备好行动——在这种情况下,数据处理和应用模型。
最简单的解决方案是使用上面创建的变量应用逻辑回归,以便预测 GOOD_PAYER 目标。该模型将为每个客户返回一个介于 0 和 1 之间的值,表明他/她成为优秀付款人的可能性。
记住始终正确解读结果:
该分数将显示某个客户在未来 6 个月内不会延迟付款超过 30 天的概率。
你喜欢吗?
这篇文章对你有用吗?分享!我说了什么蠢话吗?纠正我!想补充点什么?留言评论!
组建数据科学团队的最有效方式是什么?
原文:https://towardsdatascience.com/what-is-the-most-effective-way-to-structure-a-data-science-team-498041b88dae?source=collection_archive---------0-----------------------
从 2012 年到 2017 年,我有幸在 Coursera 从零开始建立数据和分析组织。在那段时间里,随着公司规模的扩大和业务的发展,我们尝试了各种不同的团队结构(参见这篇博文或这篇 Quora 回答)。根据我的经验,组建数据科学团队没有一种“正确的方式”——最有效的方式在很大程度上取决于公司的环境和发展阶段。
虽然没有任何硬性规定,但要记住的核心问题通常是:
- 应该如何定义数据科学家的角色?
- 数据科学家应该向哪里汇报?
- 数据科学功能应该放在哪里?
- 组织应该做些什么来建立成功的数据科学?
让我们一个一个地检查一下。
应该如何定义数据科学家的角色?
借用 Michael Hochster 的分类法,通常有两种主要类型的数据科学家:
- A 型(“分析”)数据科学家专注于通过统计分析来理解数据。
- B 类(“构建”)数据科学家开发预测模型和算法,为数据产品提供动力。
一些公司在这两种不同风格的数据科学家之间建立了头衔区别(例如,决策科学家/统计学家/定量分析师与数据科学家/数据产品科学家/ML 工程师)。其他公司试图将 A 型数据科学家与产品/业务分析师的角色区分开来,后者通常被认为技术性较低。虽然专业头衔可以帮助设定期望值,但就我个人而言,我并不清楚阐明这些区别的努力是否值得。特别是,对于需要多面手的早期创业公司来说,在高度重叠的角色之间建立人为的界限往往会导致围绕领域和范围的模糊讨论,这往往是徒劳的。
建议:对于一家初创公司来说,不要把时间浪费在区分头衔上,而是要认识到,你雇佣的个体数据科学家可能有各种形状和大小(有些可能更擅长分析,有些可能更擅长构建)。最终,可能会有合理的理由来澄清角色和职责,但这通常可以等到公司更大的时候。
数据科学家应该向哪里汇报?
一般来说,数据科学团队倾向于采用分散或集中的报告结构。
- 分散式(或“集成式”)数据科学组织让数据科学家向整个公司的不同职能部门或业务部门汇报。这种组织通常出现在较大的组织中,在这些组织中,数据科学计划在业务的多个部分中有机地出现。从责任的角度来看,分散的组织通常是有吸引力的,因为它们为业务单位提供了更大的灵活性来控制他们自己的资源需求。由于数据科学家是产品或业务团队的一流成员,因此分散化促进了强大的组织一致性。这确保了数据科学家将拥有与其业务合作伙伴有效合作所需的环境,并有机会发展有意义的个人关系,以获得对想法和计划的认可。然而,权力下放也带来了一些挑战。为了让一个分散的结构很好地工作,拥有数据科学家的团队需要有能力管理工程师和数据科学家的领导者。在分散的组织中,数据科学家的流动性受到更多限制,这通常会导致知识孤岛、同行指导机会减少或职业发展机会受限。权力下放还会加大实施统一质量招聘标准、投资共享分析基础设施或推动采用标准化分析实践的难度。
- 集中化数据科学组织让数据科学家向公司内的单一数据科学主管汇报。对于创业公司来说,由于资源分配的灵活性,集中化的团队在人员数量上更有效率。在这些团队中,数据科学家有更多的机会参与广泛的项目并与其同行合作,因此提供了更好的职业发展和技术指导机会。从结构上来说,集中化还简化了雇佣和招聘,创建了机构来推动公司范围的分析计划,并减少了知识孤岛。另一方面,在远离业务合作伙伴优先事项的集中团队中工作的数据科学家可能缺乏有效工作所需的背景或支持。在某些情况下,这可能会导致一种不健康的动态,即数据科学被视为一种支持功能,回答产品经理的问题,而不是作为真正的思想伙伴运营,并从数据知情的角度积极推动对话。
大多数较小的公司倾向于依赖一种混合的集中/分散策略,这种策略结合了上述两种策略的元素。通常,数据科学家集中汇报,因为招募和留住人才通常是在早期阶段建立数据科学团队的主要瓶颈。然而,为了确保数据科学家获得成功,初创公司通常会安排数据科学家与业务部门密切合作,这种做法被称为嵌入。
在小型数据科学团队中,嵌入可能会产生让数据科学家过度孤立的副作用。在 Coursera,我们通过组建由 2-4 名数据科学家组成的小型协作子团队(或“集群”)来解决这个问题,这些数据科学家将与不同的职能部门/业务部门合作,如这篇博文中所述。在 Airbnb,一个类似的方法被用于扩展数据科学。
建议:对于试图建立强大数据文化的初创公司来说,集中报告可能是最简单的开始方式。使用嵌入来确保数据科学家在对业务有价值的项目上工作,但要小心制造知识孤岛。
数据科学职能应该放在哪里?
在一些组织中,数据科学职能是工程组织的一部分(例如,LinkedIn)。在其他组织中,数据科学可能是产品组织的一部分(例如 Coursera),或者可能作为直接向首席执行官报告的独立职能部门存在(例如 StitchFix )。有时,A 型和 B 型数据科学家可能向不同的小组报告(例如在 Instacart )。
没有一个放置数据科学的最佳位置,即使在同一家公司内,数据科学报告结构也经常随着时间的推移而演变。最佳位置取决于以下因素:
- 数据科学家有哪些沟通渠道来影响产品决策?
- 开发机器学*系统需要多少参与生产工程的数据科学家?
- 公司中的哪位高管能够最有效地倡导数据科学?
- 数据科学在多大程度上是整个组织的核心竞争力?
建议:无论数据科学在哪里,都要优先培养强大的跨职能协作,因为数据科学家几乎总是需要与产品经理、设计师、营销人员、工程师以及整个公司的其他产品和业务领导密切合作。
数据科学家需要公司其他人做什么?
数据科学团队的成功很大程度上与团队本身的结构和运行方式有关。但这在很大程度上也与公司其他团队如何与数据科学家互动有关。总的来说,我发现三件事很重要:
- 数据基础设施工程支持。为了让数据科学家高效工作,关键工具(如数据管道、仪器和跟踪、A/B 测试框架和分析环境)至关重要。因此,公司在雇佣第一个数据科学家之前优先雇佣数据基础设施工程师通常是有意义的,并且数据基础设施工程和数据科学团队密切合作是至关重要的。
- 了解构建数据产品复杂性的产品和工程经理。构建数据产品所涉及的考虑因素与常规产品非常不同——工作代码不足以确保数据产品为客户提供正确的体验。数据质量问题是潜在的,调试复杂的预测模型可能是一个真正的挑战。截止日期也不会以同样的方式工作;与大多数软件产品不同,对于按时交付项目来说,缩小范围是一种可以接受的策略,但对于数据产品来说,走捷径通常是行不通的。在对功能进行优先排序时,对机器学*的能力和局限性有良好的直觉是至关重要的。因此,拥有具备相关技术知识的产品和工程经理可以帮助事情进展得更加顺利。在许多情况下,数据科学家本身通常是最有资格承担这些类型角色的人。
- 强烈的高管认同。数据科学团队的影响力在很大程度上取决于高管团队(尤其是首席执行官)是否愿意让人们对培养强大的数据文化负责。对于 A 型数据科学家来说尤其如此,他们的工作通常强烈依赖于产品经理和业务领导是否愿意通过河马(薪酬最高的人的意见)倾听数据。此外,构建和维护释放数据作为竞争优势所需的基础设施需要大量的时间和资源,因此希望拥有强大数据文化的高管应该准备好进行适当的投资。
建议:当建立一个数据科学团队时,通过考虑团队运作的环境,确保团队的建立是为了成功。
最后,我要说的是,上述建议远非绝对,而主要只是反映了我自己在 Coursera 的经历,这是我在过去五年里反复试验的结果。一些对我的想法有帮助的在线资源是:
- 建立一个分析驱动的组织:埃森哲的白皮书,对不同类型的分析组织进行了细致入微的描述。
- 建立数据科学团队:DJ Patil(他创造了“数据科学家”一词)的电子书,概述了建立能够交付伟大数据产品的团队的关键要素。
- 分析分析器:一本由 Harlan Harris、Sean Murphy 和 Mark Vaisman 编写的电子书,采用数据驱动的方法来理解数据科学家在野外发现的各种原型。
在这段时间里,我还有幸从其他公司的数据科学领导者那里获得了非常有益的慷慨建议,所以如果我能有所帮助,请不要犹豫。
注:这篇博文最初以 Quora 答案 的身份出现。
你真正出类拔萃的概率有多大?
原文:https://towardsdatascience.com/what-is-the-probability-that-you-are-truly-exceptional-1ec7d4bcdb1d?source=collection_archive---------8-----------------------
贝叶斯定理——熟能生巧
杰出的数据科学家比大海捞针还少:不到千分之一的这门学科的学生被证明是真正杰出的。也就是说,让我们假设你刚刚“通过”了一个新的技能测试,该测试承诺在 99%的情况下正确识别这样的顶尖人才……【I】
你真正出类拔萃的概率有多大?为什么贝叶斯定理在这里有用,它是如何应用于机器学*的,它的假设是什么,当依赖这种方法时我们应该采取什么预防措施?
贝叶斯定理归功于 19 世纪英国数学家托马斯·贝叶斯牧师的工作,他研究了如何从一个事件的结果中推断出其原因。他的工作,后来被皮埃尔·西蒙·拉普拉斯证实,是由一个简单的想法驱动的,即我们的预测的相关性可以通过更好地利用可观察的数据来提高。这里的关键要点是,预测建模应该基于经验,我们的初始信念必须不断更新,因为我们获得了手头问题的额外信息。数据科学的主要含义是,机器学*算法天生受理论和经验的约束。
贝叶斯定理是基于联合概率和条件概率之间的密切关系。在 netshell 中,贝叶斯规则假定后验概率等于似然性乘以先验除以归一化常数。
后验变量或响应变量是我们试图预测的因变量。可能性,或条件概率,是在给定初始假设的情况下观察到新证据的机会。先验知识或现有知识是在没有任何额外信息的情况下我们的假设正确的概率。最后,边际可能性,或标准化常数,是观察证据的绝对概率。【ii】当我们使用朴素贝叶斯时,我们假设我们正在研究的数据符合正态分布,即每个变量都是条件独立的。
贝叶斯网络在数据科学中是如何使用的?每当要建模的数据量适中、不完整和/或不确定时,Bayes 推理在二进制或多类分类问题中都能得到很好的应用。贝叶斯分类器需要相对较少的计算资源,并且对于大数据集或高维数据点表现良好。在一个层面上,这些分类器在文本分析中特别受欢迎,它们经常用于解决自然语言处理、文本分类和垃圾邮件检测的挑战。更一般地,在给定一组新属性的情况下,可以部署贝叶斯算法来预测响应变量的概率。最后,贝叶斯定理可以用于校准专家意见和/或建议,因为它们结合了人类和机器学*。
使用贝叶斯定理时需要注意哪些事项?因为朴素贝叶斯假设因变量的条件独立性,所以它不能用于检测特征之间的交互。贝叶斯规则还假设响应变量反映了模型参数的可识别分布——连续变量为高斯分布,离散变量为伯努利分布或多项式分布。最后,贝叶斯逻辑只有在与先验知识相关联时才有意义——目标是解决特定的“学*问题”,而不是探索更高层次的“学*问题”。
“让你陷入麻烦的不是你所知道的,而是你所确定的事情并不是这样的”——乔希·比林斯
贝叶斯逻辑为数据科学家提供的不仅仅是一种算法,它还提供了一种思考数据科学问题的思维方式。在处理数字之前,我们应该明智地检查所有相关的证据(先验概率),用竞争的观点来测试我们对问题的观点(条件概率),并根据新的证据(加权概率)不断更新我们的预测。【iii】在介绍这篇预测杰出人才的帖子的案例中,我们需要仔细考虑杰出的数据科学家到底有多少(千分之一)。即使测试正确地识别了 99 %的顶尖人才,它也错误地证明了每个正确预测有 10 个案例。在这种情况下,即使你已经通过了这个假想的测试,今天你真正出类拔萃的机会也只有 9%。继续工作——熟能生巧!
商业分析实践是商业分析研究所的核心和灵魂。在我们位于巴约纳的暑期学校,以及我们在欧洲的大师班,商业分析研究所专注于数字经济、数据驱动的决策、机器学*和视觉通信,将让分析为您和您的组织服务。
Lee Schlenker 是 http://baieurope.com 商业分析研究所的教授和负责人。他的 LinkedIn 资料可以在www.linkedin.com/in/leeschlenker.查看,你可以在https://twitter.com/DSign4Analytics的 Twitter 上关注我们
【我】百分之一的假阴性
【ii】Soni,d .(2018),什么是贝叶斯法则?,走向数据科学
【iii】加莱夫,j .(2015)。贝叶斯思维的视觉指南
AI 软件工程师在数据科学团队中的角色是什么?
原文:https://towardsdatascience.com/what-is-the-role-of-an-ai-software-engineer-in-a-data-science-team-eec987203ceb?source=collection_archive---------4-----------------------
Photo by Marvin Meyer on Unsplash
我最*加入了埃森哲都柏林全球创新中心的 Enterprise Insight Studio 团队,担任人工智能(AI)软件工程师。鉴于这是团队中的一个新角色,以及在整个领域中,围绕人工智能软件工程做什么以及该角色如何适应数据科学团队,仍有许多问题。为了帮助回答其中的一些问题,我在这篇文章中强调了人工智能软件工程师带来的一些关键技能,以及他们如何融入数据科学团队。实际上,数据科学团队中有几个人在构建分析和数据产品。最终产品的好坏取决于负责收集、构建和分析底层数据的团队。不久前,数据科学团队主要由数据科学家、数据架构师和业务分析师组成。然而,要将数据科学工作转化为可扩展和稳定的产品,仍然有很大的差距需要填补,人工智能软件工程师也有确切的发挥作用的地方。
人工智能软件工程师在数据科学团队中的主要角色是将数据科学工作产品化,以便为内部利益相关者或外部客户服务。人工智能工程师必须与数据科学家、数据架构师和业务分析师合作,以确保业务目标和分析后端之间的一致性。此外,为了证明职位名称中的人工智能部分是正确的,人工智能软件工程师负责保持最新并了解具有转变业务、劳动力或消费者体验潜力的突破性人工智能技术,以及数据科学团队如何利用这些技术。这听起来很好,但实际上,它到底意味着什么呢?简单地说,这意味着人工智能工程师负责将软件工程文化引入数据科学过程。这是一项艰巨的任务,包括以下内容:
按照代码构建基础设施
数据科学团队基础设施的自动化。这一重要的软件工程概念是成功的数据科学项目的关键部分。人工智能软件工程师负责确保在模型开发和培训过程中创建的环境可以很容易地管理和复制到最终产品中。用于 Python 包管理的 Anaconda 和用于创建可轻松传输的自包含环境的 Docker 或 vagger 等工具应该成为数据科学团队流程的一部分,以帮助团队成员之间的协作和轻松部署的模型。人工智能软件工程师的责任是建立和管理管道,让数据科学家专注于模型开发。
持续集成和版本控制
这是软件工程师在数据科学团队中容易忽略的另一个重要事实。像 TFS 或 GIT 这样的工具应该成为数据科学项目日常流程的一部分。在模型开发期间,有如此多的迭代和不同的更新,如果没有适当的版本控制系统,就不可能跟踪所有已经完成的工作。候选版本、不同类型问题/用户故事的不同分支、团队中每个人都可以访问的同一位置等概念对于将数据科学工作转化为实际产品极其重要。这也允许引入代码审查等概念,这保证了更多的数据科学家将了解代码/模型是如何工作的,这将有助于提高所创建工作的质量。
测试
任何产品,无论是具有简单用户界面的模型还是完全集成的应用程序,都应该经过彻底的测试。显然,从软件工程师的角度来看,那些测试应该完全自动化。这意味着单元测试、分支测试、集成测试和安全测试应该嵌入到数据科学的核心流程中。当然,这不包括 A/B 测试,它们是不同的情况,在开发的不同阶段完成,但是它们同样重要,不应该被丢弃。
API 开发
开发 API 以帮助将数据产品和源集成到应用程序中。人工智能软件工程师负责构建和维护一个平台,以便轻松地将模型“转换”成可供其他应用程序使用的 API。这意味着遵循标准方法和公共语言的工具或定制 API 的开发。这也意味着数据科学团队可以快速地将模型转化为 API,供“外部世界”使用。这是将科学模型转化为产品的关键步骤,人工智能软件工程师应该发挥他/她的所有专业知识,以保证从模型中创建的 API 是可扩展的、灵活的和可靠的。
试点和 MVP 应用的开发
虽然并不总是需要,因为一些数据科学工作可以通过 Jupyter 或其他数据可视化工具简单地呈现,但在数据科学过程中,飞行员和 MVP 的开发仍然非常重要。MVP 是最终产品,它包含了我到目前为止提到的所有其他方面,从模型的创建和测试,通过 API 开发,一直到最终产品可以被最终用户演示和消费。这里的要点是应用程序——无论是 MVP 还是最终版本——是如此的坚实,以至于最终用户甚至不会意识到它下面有一个数据产品。
AI 软件工程师还应该考虑在数据科学团队中实施其他软件工程师概念,例如连续交付、应用程序监控和自动扩展,这些也应该是核心流程的一部分。然而,在深入到它的工程方面之前,上面提到的几点,我认为是整个过程中最重要的,应该已经被实现并完全融入到团队的文化中。只有这样,更先进的工程概念才会被提出来。
总之,我们可以认为人工智能软件工程师是负责让数据科学家和数据架构师的生活变得更容易的人。他们应该专注于他们工作的重要方面:分析数据和创建高精度的模型,或者致力于项目的整体架构。人工智能软件工程师将负责创建 API,测试和部署模型,创建任何可能需要的用户界面来显示更相关的模型视图-模型可视化,自动化我们的基础设施等-并弥合数据科学家和数据架构师之间的差距。简而言之,人工智能软件工程师负责将数据科学工作包装成最终产品。
Overview of a Data Science Team
这只是对人工智能软件工程师在数据科学团队中的角色以及此人带来的贡献的基本概述。希望这将帮助你理解这个角色需要什么,以及为什么在数据科学工作背后有软件工程概念是重要的。鉴于这是数据科学范围内的一个新角色,仍然有许多问题需要回答,人工智能软件工程师必须足够灵活,以便在团队中实施他/她的想法,并在不一定与软件工程相关的领域采取行动。尽管如此,这是一个非常令人兴奋的职位,有很多学*和成长的机会。对于软件工程来说,这也是一个进入激动人心且不断发展的数据科学领域的绝佳机会。如果你有兴趣谈论更多关于人工智能软件工程师的事情,或者如果你有任何问题或建议,请随时联系我,我很乐意听到你的意见。与此同时,保持好奇,继续编码。
数据科学教育的对象、地点和时间是什么?
原文:https://towardsdatascience.com/what-is-the-who-where-and-when-of-an-education-in-data-science-1bb25049fe62?source=collection_archive---------5-----------------------
自从五年前《哈佛商业评论》宣称数据科学是“地球上最性感的工作”以来,成千上万的学生蜂拥而至,追求该领域的学位。今年早些时候,Alphabet 的埃里克·施密特(Eric Schmidt)更是火上浇油,他宣称:“对数据分析的基本理解对于下一代年轻人来说非常重要。这就是你要进入的世界。”【ii】埃隆·马斯克(Elon Musk)对缺乏数据专家的担忧促使他向 Neuralink 提供资金,这家公司的使命是将计算机与人脑进行物理连接,以提高数据处理速度。LinkedIn 本周报告了不少于 14 300 个数据科学家的空缺,仅在法国就有超过 774 个机会。在如此狂热的情况下,数据科学教育的对象、地点和时间是什么?
什么是数据科学?
什么是数据科学的基本问题在今天与本世纪初一样相关,当时威廉·s·克利夫兰(William S. Cleveland)建议这一新的学术学科扩展统计学领域,以纳入“数据计算的进展”。【iii】如今,组织正在从生物技术到金融等行业寻找数据科学家;信息技术和服务,以及公共服务营销。填补这些空缺的专家的稀缺很大程度上是因为数据科学被营销为分析、业务和技术技能的混搭,这些技能很少在任何一个档案中找到。在审查当前的职位空缺时,数据科学似乎是管理咨询、计算机系统分析、信息安全、运筹学和统计学的混乱组合。唯一的共同点是使用数据来了解现实生活中的业务挑战的普遍使命。
那么,数据科学教育的本质是什么?这种对商业问题解决的关注将数据科学从计算机科学和统计学中分离出来。消费者、管理者和利益相关者不仅做出决策,而且以不同的方式解释数据,这一事实强烈表明,数据科学不能简化为算法和机器学*。Ed Chen 指出了提供“数据科学”课程的学校数量与他个人的信念之间的矛盾,即数据科学的课程不能在学校里学到。【iv】数据科学教育需要理论和实践,理论是理解当今企业面临的问题的本质,实践是理解如何将数据转化为决定性的行动。
谁应该投资数据科学?
在一个日益受到虚假事实和假新闻考验的世界,我坚信每个学生都将从数据科学基础中受益。如果分析方面的普通教育应该成为任何高等教育学位的一部分,那么数据科学学位的价值就是另一个问题了。如果今天 88%的大数据专业人士拥有高级学位【v】,那么这些学位中很少是数据科学的。同样,如果薪资调查强调数据科学家的高薪级别,拥有该领域的学位不会成就或毁掉你的职业生涯。一旦炒作平息下来,雇主们寻找的是能帮助他们解决业务问题的技能组合。
那么谁应该申请专业学位呢?即使总会有无数的程序准备好并愿意接受你的钱,专攻分析也是有先决条件的。如果你不喜欢解决问题,不喜欢处理数据,不喜欢处理复杂性和模糊性,你永远不会成为一名数据科学家。如果你在以前的学*中没有花时间探索编程、统计和决策科学,不要欺骗自己认为你现在可以一次学会所有的东西。你不会因为一个正式的学位而成为一名数据科学家,而是在一年中的每一天养成一种心态。
你应该何时何地去上学?
如今,几乎有数千个高等教育项目承诺授予数据科学学位,其中包括 74 个英国项目和 24 个法国项目。不幸的是,其中许多只是计算机科学和统计学院现有课程的重新包装和营销。许多人吹捧“R”、机器学*和数据可视化方面的实践——这就像是在蛋糕上浇糖霜,而没有提供制作蛋糕本身的配料。寻找学位课程的学生应该像数据科学家一样考虑挑战:学校提供关于学生过去位置的什么数据,他们提供课程的什么细节,他们如何鉴定他们的教师,要求的工作和实践项目的性质是什么,以及他们如何证明你的投资回报?-
应该从什么时候开始学*数据科学?作为一种心态而不是文凭,分析是一步一步发展起来的。在学校打好基础,参加商业、数学、决策和计算机科学的相关本科和研究生课程。你不需要注册一个正式的学位项目来开始,互联网提供了大量的免费在线课程。博客帖子和专门的网站提供了探索数据科学基础的洞察力和机会。公共领域数据集和应用程序可以帮助您练*检测、探索和解决各种类型的业务问题。国家和国际数据科学竞赛,如即将举行的皇后大学创新挑战赛【VI】,提供了充分的机会来建立关系网并发展您的技能和声誉。在这个数字无处不在的时代,什么时候是现在!
希望提高您的数据科学技能?在巴约纳的暑期学校以及欧洲的大师班,我们让分析为您和您的组织服务。该研究所专注于管理者数据科学的五个应用:数字经济学、数据驱动的决策、机器学*、社区管理和视觉通信。改善管理决策会对你未来的工作和职业生涯产生影响。
Lee Schlenker 是 Pau 商学院的教授,也是 http://baieurope.com 商业分析研究所的负责人。他的 LinkedIn 个人资料可以在 www.linkedin.com/in/leeschlenker.查看你可以在 https://twitter.com/DSign4Analytics的 Twitter 上关注我们
【我】达文波特,t .和帕蒂尔,D.J .,(2012),数据科学家,21 世纪最性感的工作,HBR
谷歌亿万富翁 Eric Schmidt 说,这是雇主们在未来寻找的技能,美国消费者新闻与商业频道
【iii】出版社,G. (2012),数据科学家:性感的定义,福布斯
【四】莱文,d .(2015);获得数据科学学位前你应该知道的 5 件事
【v】Ahern,k .和 Keller,N. (2014),你是大数据专业人士?,营销新闻
【VI】……(2017),女王大学创新挑战赛
什么是迁移学*?
原文:https://towardsdatascience.com/what-is-transfer-learning-8b1a0fa42b4?source=collection_archive---------1-----------------------
迁移学*利用在解决一个问题时获得的知识,并将其应用于另一个不同但相关的问题。
例如,在学*识别汽车时获得的知识可以在一定程度上用于识别卡车。
预培训
当我们在大型数据集(例如:ImageNet) 上训练网络时,我们训练神经网络的所有参数,因此模型被学*。在你的 GPU 上可能要花几个小时。
微调
我们可以给出新的数据集来微调预训练的 CNN。考虑新数据集几乎类似于用于预训练的原始数据集。由于新数据集是相似的,因此可以使用相同的权重从新数据集提取要素。
- 如果新数据集非常小,最好只训练网络的最后几层,以避免过度拟合,同时保持所有其他层不变。所以去掉预训练网络的最后几层。添加新层。仅重新训练新层。
- 如果新数据集非常大,使用预训练模型的初始权重重新训练整个网络。
如果新数据集与原始数据集差别很大,如何进行微调?
ConvNet 的早期特征包含更多的通用特征(如边缘检测器或彩色斑点检测器),但 ConvNet 的后期层逐渐变得更加具体到原始数据集中包含的类的细节。
较早的图层有助于提取新数据的特征。因此,如果你只得到少量的数据,修复早期的层并重新训练其余的层将会很好。
如果您有大量的数据,您可以使用从预训练网络初始化的权重来重新训练整个网络。
卷积神经网络有什么问题?
原文:https://towardsdatascience.com/what-is-wrong-with-convolutional-neural-networks-75c2ba8fbd6f?source=collection_archive---------4-----------------------
介绍
当然,卷积神经网络(CNN)是一种迷人而强大的工具,也许这是深度学*这些天如此受欢迎的原因之一,自从 Alex Krizhevsky,Ilya Sutskever 和 Geoffrey Hinton 在 2012 年发表了“用深度卷积网络进行图像网络分类”以来,CNN 一直是计算机视觉中在许多任务中实现超人性能的制胜法宝,但 CNN 是完美无瑕的吗?那是我们能做的最好的吗?我想从标题中你可以看出答案是否定的。
2014 年 12 月 4 日,Geoffrey Hinton 在麻省理工学院做了一个关于他的名为“胶囊网络”的项目的演讲,他讨论了 CNN 的问题,以及为什么合用是非常糟糕的,以及它工作得如此好的事实是一场灾难
如果你熟悉 CNN,你可以跳到怎么了?
卷积层
卷积层具有一组矩阵,这些矩阵在称为卷积的过程中与前一层输出相乘,以检测一些特征。这些特征可以是基本特征(例如边缘、颜色等级或图案)或复杂特征(例如形状、鼻子或嘴)。因此,这些矩阵称为过滤器或内核
(source)
池层
有多种类型的池层(最大池、平均池……),目前最常见的是最大池,因为它给出了交易方差,虽然很差,但对某些任务来说已经足够好了,并且它降低了网络的维数,非常便宜(没有参数)
最大池层实际上非常简单,你预定义一个过滤器(一个窗口)并在输入中交换该窗口,取窗口中包含的最大值作为输出
max pooling with filter size 2*2 (source)
(source)
怎么了?
1- 反向传播
反向传播算法是一种在对一批数据进行预处理后,寻找每个权重在误差中的贡献的方法,大多数好的优化算法(SGD,ADAM …)都使用反向传播算法来寻找梯度
反向传播在过去几年做得很好,但不是一种有效的学*方式,因为它需要庞大的数据集
我相信我们可以做得更好
2-平移不变性
当我们说平移不变性时,我们的意思是,方向或位置稍有变化的同一物体可能不会激发本应识别该物体的神经元
(source)
如上图所示,如果我们假设有一个用来检测猫的神经元,它的值会随着猫的位置和旋转的变化而变化,数据增强部分解决了这个问题,但并没有完全解决它
3-池层
合并图层是一个很大的错误,因为它丢失了很多有价值的信息,而且它忽略了部分和整体之间的关系,如果我们谈论的是人脸检测器,那么我们必须结合一些特征(嘴、两只眼睛、椭圆形脸和鼻子)来说这是一张脸
CNN 会说如果这 5 个特征以很高的概率出现,这将是一张脸
(source)
所以两个图像的输出可能是相似的,这并不好
结论
CNN 很棒,但它有两个非常危险的缺陷:平移不变性和池层,幸运的是,我们可以通过数据增强来减少危险,但有些事情正在发生(胶囊网络),我们必须准备好迎接变化
来源
[## 用于视觉识别的 CS231n 卷积神经网络
斯坦福 CS231n 课程材料和笔记:视觉识别的卷积神经网络。
cs231n.github.io](http://cs231n.github.io/) [## 理解辛顿的胶囊网络。第一部分:直觉。
理解 Hinton 的胶囊网络系列的一部分:
medium.com](https://medium.com/ai³-theory-practice-business/understanding-hintons-capsule-networks-part-i-intuition-b4b559d1159b) [## 卷积神经网络
这是 CSE6250 大数据分析中医疗保健深度学*实验室系列的初步版本…
www.cc.gatech.edu](https://www.cc.gatech.edu/~san37/post/dlhc-cnn/)
在数据科学中“做”数学意味着什么
原文:https://towardsdatascience.com/what-it-means-to-do-math-in-data-science-843f454fddf6?source=collection_archive---------3-----------------------
当下一代热切的年轻人寻求做出他们的第一个主要职业选择时,许多人会认为数据科学是一个令人兴奋的可能性。随着软件正式蚕食世界,数据作为我们经济的新石油牢牢扎根,从事数据行业的机会从未像现在这样多。公司正准备在一个全新的范式下构建软件,在这个范式中,数据和分析驱动着他们最重要的产品功能。在寻求洞察力和预测的过程中,组织将目光瞄准了有希望的候选人,他们对一切数据的热情与对工作中预期的数字熟练程度的担忧相匹配。
如果你要一份成为成功的数据科学家所需的才能清单,你会看到通常的大多数与 STEM 相关的技能清单;不仅仅是数学和统计学。这应该不足为奇。历史上,所有类型的分析师都使用数学来帮助做出和确认他们的发现。假设良好的数字工作知识会给数据科学职位带来好处是很自然的。
但是,当我们说数学和统计学在数据科学中很重要时,这意味着什么呢?他们在大学里的样子重要吗?我们渴望的年轻人应该把时间花在微积分和概率的基础知识上,为数据驱动的职业生涯做准备吗?如果个人不是天生倾向于传统的数学思维,这是否会妨碍他们进入数据科学职业?用手做数学和训练依靠数学得出结果的机器有区别吗?
如果没有上下文,说我们在某个特定领域做某事没有多大意义。从核物理学家到会计师,每个人都做数学。在科学领域,数学让我们用具体的术语来表达思想,从而帮助我们模拟我们的世界。我们可以利用数学的机制带领我们走上新的道路,并保持我们的发现的一致性。数学可以帮助我们在巨大的复杂程度上争论,并帮助我们用数据讲述故事。与数据科学最相关的是将数学编码成机器的能力,这为解决其他棘手的问题打开了大门,并使我们的核心工具机器学*成为可能。
但是将事物的来源等同于它在现实世界中的应用是理解抽象的失败。那些实现学术发现的人不应该沉浸在他们工具的起源中。医疗从业者没有花时间去研究生物化学的细微差别或控制核磁共振成像机的物理原理。这并不是说良好的基本面工作知识不起作用。但是,如果他们主要关心的是他们的机器内部是如何工作的,医生们将会从使用工具解决病人问题这一更重要的任务中靠边站。
事实是,如果数据科学家把他们的时间花在解方程和讨论定理上,他们在软件世界里将一事无成。软件运行得很快,并从失败的尝试和迭代中获益;不仅仅是写在白板上的公式。重要的是要认识到,这不是为了把产品推出去而进行的廉价分析。快速开发和迭代是解决真正复杂问题的唯一途径。虽然数学有助于控制我们数据的高维度,但它只是原始信息和提供价值的产出之间更艰巨旅程的开始。
在白板上进行数学计算和理解如何实现数学机器是两码事。是的,统计学和数学在数据科学中很重要,但这仅仅是因为它们浮出水面的概念和它们使之成为可能的工具。成为一名伟大的数据科学家意味着知道机器的终点和人类的起点。在数据科学中,我们把数学的求解和执行留给了机器。人类有责任帮助引导我们的系统做出更好的预测,并实现其适应环境的目标。这不是解方程,而是让数学和机器产生人们觉得有用的东西;甚至可能是愉快的。
构建智能软件的学术化、简单化的方法是对复杂性的严重缺乏。在数学和传统软件中,使用简化的硬编码规则将输入转换为输出。但是,当我们寻求创建机器学*应用程序时,复杂程度远远超过简单的输入和输出。在数据科学中,唯一重要的产出(和结果)是那些从我们无法直接进入的数字游戏中产生的结果。任何能够接*“智能”行为的系统都有一层神秘的面纱,认为它可以用基本逻辑解码并拼凑起来是非常短视的。
在数据科学中,我们解释结果,并使用数学推理来考虑我们对模型所做的调整的有效性。这不同于在纸上操作方程和推导结果。在物理学中,求解薛定谔方程和理解为什么它适合于模拟物理系统中随时间的变化之间有很大的区别。你解方程的能力与你知道何时何地使用它的能力无关,而正是后者给数据科学专业带来了好处。
当机器在做数学运算时,我们追求的不是候选人的数学技巧,而是他们对概念的理解。重要的是掌握一种方法的适当性或不适当性;不是比机器能做的更慢更少的解方程的能力。抽象是学术发现的支柱,这也是数据科学家工作的地方。当我们在深层技术细节上运作时,我们能够使用数学驱动的工具来应对困难的挑战,并使用软件解决有趣的问题。如果我们在学术意义上使用数学,这些都是不可能的。
显而易见的反驳观点是,手动推导数学表达式有助于建立我们希望在对模型进行推理时使用的直觉。但这种听起来不错的叙述被赋予了过多的分量,而且只在远离现实的课堂上起作用。虽然人工推导公式确实有助于加深理解,但这种知识缺乏真实世界的背景。你最好构建一个你不理解的工具,而不是用教科书上的积木拼凑出一些在真空中也能玩得很好的东西。当这个世界像在软件开发中一样多次击败你时,你已经有了最伟大的老师。失败。
这并不是远离学*数学,这只是意味着数学需要被理解在那一刻。在失败之前用数学来解决问题,向我们展示了障碍的本质与现实世界中解决问题的方式是相反的。如果你要理解如何用数学给一台复杂的机器带来价值,你的产品必须产生错误的结果。我们的下一代数据科学家需要先学*如何构建,然后再解决。
这种关于擅长数学意味着什么的开明且更恰当的观点超越了职业准备。当我们将数据科学视为传统的 STEM 学科时,我们阻碍了大量原本可以为该领域带来好处的人才。我们寻求的是能够与机器一起工作的个人,利用对数学在适应性机器中所扮演角色的概念性理解,哄骗它们适应它们的环境。这些人来自各行各业,正是他们的多样性为我们带来了最强大的解决方案。
未来数据驱动型公司的主人是那些雇佣能够以更柔和的方式制造机器的人。重要的是,我们的下一代热切的候选人不能将数据科学视为数学上严格的领域,在这个领域中,解决问题的学术方法是驱动结果的因素。数学知识总是有用的,但只有当它被用于我们的机器已经能够做的事情时。这是未来对数学思维的定义,也是数据科学的定位。
我在日本学*机器人两周所学到的
原文:https://towardsdatascience.com/what-ive-learned-from-studying-robotics-in-japan-for-two-weeks-bd252961853f?source=collection_archive---------1-----------------------
或者,如何在一周内喝大量清酒并制作一个 AI 机器人。
我从小就一直渴望去日本。我一直很欣赏这种文化,从他们的传统到尖端科技。此外,现在我的主要兴趣之一是机器人技术。你可以想象当我被东北工程暑期项目录取去日本东北T4 仙台大学学*机器人技术时我的反应。
Sendai.
我和我的一些同事,以及来自世界各地的其他 50 名学生,有机会参加了来自许多不同机器人领域的各种教授的早课,从分子到空间机器人机器人。下午,我们做不同的项目。我与太空 机器人****实验室合作,我团队的任务是开发和制造一个移动机器人。
A picture of the campus.
东北大学的主工科校区真的很厉害。一个美丽的混合现代,精心设计和简约的建筑在一个绿色的环境中,充满了树木和植物。我真的很喜欢外部和内部建筑,这往往给人一种开放空间的感觉,玻璃墙和高天花板,大型公共空间,白色和闪亮的内部。前一段时间,我读了一些关于大学建筑和学生整体表现之间关系的研究,我不禁注意到这些领域中有多少给人一种和平和放松的自然感觉。
日本人非常好和有礼貌。他们的组织非常出色,我喜欢和他们一起生活。从自助餐厅到图书馆,整个校园都被精心管理。我们有机会以非常友好和非正式的方式与教授们聊天,这是我非常喜欢的事情。他们向我们解释了他们的系统如何更多地基于实践而不是纯理论。一位教授在我们吃午饭的时候告诉我们:“我们让学生尽快完成一个项目,并要求他们把它做好。”。这种方法可以产生非常好的结果,就像我们所经历的那样。面对一个现实世界的问题,并试图用实际的硬件和软件来解决它,会让你以许多不同的方式来思考它,突出问题,但会激励你找到有效的解决方案。引用费曼的话,“我不能创造的东西,我不理解”。
Detail of the Space Robotics Lab.
我最喜欢的课是吉田教授上的关于太空、T2 和机器人的课。机器人太空探索的想法在某种程度上对我来说是浪漫的,因为探索的欲望在人类灵魂中燃烧。我有机会与空间机器人实验室的 6 名学生(3 名像我一样来自罗马 Sapienza 大学,2 名来自香港大学,1 名来自佐治亚大学)一起工作,建造一个移动机器人,它可以通过机器人看到的视频流进行远程控制,还可以自主避障和导航,以及其他由我们决定的功能。我们只有不到一周的时间来研究它,整个下午都呆在实验室里,但我相信我们做得很好。
Our robot in all its beauty.
我们与乐高** Mindstorm 合作,这是乐高的一个套件,允许使用传感器、电机和微控制器来控制机器人。作为一台相机,我们使用了 Kinect ,并在一台树莓 Pi 3 和一台 MacBook 上进行处理。制造真正的机器人比我们想象的要困难。我们设计了一个简单的差动驱动机器人,但用乐高积木建造它,试图分配重量和平衡它,但也使它足够稳定,以承受 Kinect 摄像头、树莓 Pi 3 和一个电源库并不简单。**
Kinect 和 MacBook 之间的实际通信是使用处理、一种专门为交互式计算机图形设计的语言来完成的,从这种语言中我知道使用 Kinect 非常容易。有了 RGB 和深度流,实现远程控制就变得轻而易举了:操作员看到了机器人所看到的,并简单地命令它。我们进行了几次有障碍的演示,结果令人满意。
A demo of the robot in action. From left to right: prof. Kazuya Yoshida, Norman Di Palo (myself), Matteo Colajanni.
实现自主导航、避障和地标探测以及跟随要困难得多。我注意到 Kinect 深度相机(或者至少是我们的 Kinect)有一个很大的缺陷:它在一米的距离内完全失明(毕竟,它不是为这些应用设计的)。该范围内的所有障碍物都消失了,因此机器人认为该路径是自由的。为了解决这个问题,我们在机器人上增加了超声波传感器,可以在该范围内以较高的精度检测到障碍物的距离。基于这些传感器信息,我实现了一个避障算法,在有障碍物的情况下执行规避动作,但在此之前,机器人无论如何都会随机漫游。我添加了一个计算机** 视觉算法,该算法根据颜色识别并检测所需地标(红色圆锥体)的坐标(在图像中)。然后,机器人能够每走几步就转向地标,同时避开障碍物。**
这里有一个自主导航和地标跟随的短片。
然后,移动机器人行为的基本目标就实现了(并非没有麻烦)。但是,由于我的专业既专注于机器人技术,也专注于人工智能,我决定通过集成更先进的深度学*视觉模型和自然语言处理来扩展软件架构。
我使用了 Tensorflow 物体检测 模型,在著名的 COCO 数据集上进行训练。该模型为它能够识别的常见对象生成边界框。我将这一输出添加到之前的地标检测算法中,这样机器人就能够识别并跟随常见的物体,如笔记本电脑、椅子和人。
Example of object detection.
然后,通过简单地使用文本** 消息在电报一个著名的信息平台上发送,整体行为被控制。我开发了一个聊天机器人,它可以使用 Python 库 telepot 和 api 接收文本消息。 ai API 我增加了语言理解,所以用户可以简单地给机器人发短信请走向桌子,机器人就会理解请求,寻找桌子并走向它,同时避开路上的障碍。**
尽管组成整体架构的软件部分不同,但结果是一个易于使用的机器人,它以智能的方式响应简单的命令,结合了机器人技术和人工智能技术。
这里有一个关于物体识别和语言理解能力的短片。
我做了一个 GitHub 库与我的同事分享代码。你可以在这里查看,现在它仍在进行中,可能在不久的将来我会添加一些东西,特别是一个更详细的自述文件。
在 CycleBar 的两个月里我学到了什么
原文:https://towardsdatascience.com/what-ive-learned-from-two-months-at-cyclebar-54e9681e9bbd?source=collection_archive---------1-----------------------
The long road. Photography by Eugene Buchko.
2018 年 3 月初,我决定要混合一下我的锻炼日程。我收到了一份来自 CycleBar 的传单,广告上说他们的位置在我住的 Buckhead 附*,并介绍了他们为新骑手提供的一次免费训练。出于好奇,我登录了网站,看到他们提供了另一种选择:25 美元一周不限次数的乘坐。我最终选择了后者。在那一周内,我参加了十次 CycleBar 会议,然后我就上瘾了。在我的试用期结束后,我注册了每月无限套餐。
CycleBar 课程的吸引力很大一部分是精力充沛的讲师,他们在管理有趣的播放列表以适应某个主题方面做得很好。我去过一些健身班,那里的播放列表很少更新,这可能会很无聊。然而,对我来说更大的吸引力是能够在骑行过程中看到你的自行车状态,并在课程结束后立即通过电子邮件收到你的结果的漂亮总结。循环状态包括以下内容:
- 您的骑行持续时间(MM:SS 格式)
- 您在骑行期间的平均功率(瓦特)
- 您在骑行期间的最大功率(瓦特;瞬时度量)
- 您在骑行过程中的平均速度(英里/小时)
- 您在骑行期间的最高速度(以英里/小时为单位;瞬时度量)
- 您的平均每分钟转数(RPM)
- 您在骑行过程中的最高转速(另一个瞬时指标)
- 骑自行车行驶的距离(英里)
- 骑行过程中燃烧的卡路里
- 周期点**
- 你在班级中的排名,基于循环积分***
其中,CyclePoints 的广告会考虑您的年龄、性别、体重、身高以及您在骑行过程中输出的功率和转速,从而有效地将您与其他骑手进行排名。循环积分旨在使各种能力和个人特征标准化,以便循环积分可用于比较骑手之间的表现。例如,一名 25 岁的健康男性在骑行中平均推动 200 瓦,可能比一名 37 岁的三个孩子的母亲在骑行中平均推动 150 瓦得到的自行车积分少。
我试图获得更多关于周期点是如何数学计算的信息;然而,我没有从 CycleBar 那里得到足够的信息来进行正式的归纳。然而,要点是骑行过程中,周期积分取决于针对骑手体重、身高、性别和年龄标准化的平均指标(瓦特和 RPM)以及瞬时指标(瓦特和 RPM)。我不知道所有车友的归一化算法。然而,我跟踪了我所有骑行的循环积分和其他统计数据,并在下面列出。
在 Excel 中跟踪循环统计数据
如上所述,每次骑行后,您都会收到一封包含骑行积分的电子邮件。我把所有这些统计数据放在一个 Excel 电子表格中,如下所示。仅仅骑了几次之后,我意识到骑行的持续时间取决于播放列表的长度等等。因此,虽然一次骑行总共是 45 分钟(通常是 41 到 43 分钟的实际骑行时间,加上最后 2 到 4 分钟的拉伸时间),但 30 秒或更少的差异会对你最终的总表现产生影响,包括消耗的总卡路里、消耗的瓦特数或行驶的距离。因此,我创建了额外的列来跟踪每分钟消耗的卡路里,每分钟消耗的英里数,以及每分钟的平均瓦特数和每分钟达到的循环点数。
在我参加 CycleBar 的两个月里,我参加了 72 个 CycleBar 课程。然而,为了下面的分析,我从数据集中删除了两个班级,因为有一些小故障(一次,发送给我的结果是空白的,另一次,教师忘记结束班级跟踪)。因此,我在下面的分析中使用了 70 个数据点。
A selection of CycleStats in Excel. The highlighted cell refers to an outlier in the system’s calculation of calories burned during the ride.
预测周期点
我很好奇,如果给定我锻炼的强度(平均消耗的总瓦特数、骑行的英里数、消耗的卡路里数等),我是否可以很容易地预测我在一个给定的课程中能够达到的骑行积分数。)
首先,对我来说很清楚的是,平均消耗的瓦特数和骑行结束时获得的总循环点数之间存在直接的正相关关系。然而,正如我提到的,我想以每分钟为基础跟踪关系。我在 Excel 中创建了一个简单的图表,显示平均瓦特/分钟与平均周期点数/分钟(周期点数/分钟是因变量),如下所示。红线是显示两个变量之间线性关系的最佳拟合回归线。66.39%的 r 平方表示相当合适。
为了得到在单个课程中达到的预测周期点,只需乘以该课程持续的时间:
CyclePoints =(课程持续时间,以分钟为单位)* [1.1492 *平均瓦特/分钟)+ 4.0116]
The relationship between average watts/minute and average CyclePoints/minute.
对于一个独立变量,预测周期点与实际周期点的转换如下所示。请注意,单个独立变量很大程度上显示了周期点的变化,但一些波峰和波谷没有在样品内拟合中捕捉到。
Linear regression with a single independent variable. Note: transformation from CyclePoints/minute to CyclePoints per ride is made here.
在 R 中构建简单的多元回归模型
我把 cycle stats 电子表格放入了 R 软件包中,并建立了一个非常简单的多元线性回归模型。我选择了三个独立变量:平均瓦特/分钟(如上),骑行里程/分钟,消耗卡路里/分钟。因变量是循环点数/分钟。
由此产生的系数估计显示在下面的截图中。
这一次,为了得到每个类的预测周期点,等式与之前相似,但是加入了两个额外的变量:
CyclePoints =(课程持续时间,以分钟为单位)* [-6.02359 + (0.32126 *平均瓦特/分钟)+ (27.19041 *英里骑行/分钟)+(0.09326 *消耗的卡路里/分钟)]
多元线性回归包含 66 个自由度(70 个数据点减去 3 个独立变量减去 1 个截距项)。r 平方从大约 66%提高到大约 86%。将因变量(循环点数/分钟)转换为每类循环点数,我们得到下图:
A multiple regression fit of actual vs. predicted CyclePoints. Note: transformation from CyclePoints/minute to CyclePoints per ride is made here.
如上所示,预测周期点的样本内拟合能够更好地捕捉所获得的周期点的波峰和波谷。
健身进度
在我参加 CycleBar 课程的两个月时间里,我注意到我的健康和耐力在逐渐提高。例如,如下图所示,在我开始去 CycleBar(红色粗体线表示两周移动平均值)后的两到三周,我平均每节课大约 180 瓦,在两个月的时间框架结束时,我能够将每节课的平均功率提高到大约 195 到 200 瓦。虽然平均瓦特数的增加看似微不足道,但在我看来,10%左右的提高是相当显著的。
Progression of average watts per class. The red line indicates a two week moving average.
我还跟踪了平均每分钟循环点数的改进。图表如下所示。在这两个月里,我能够将我的平均周期点数/分钟从 8.5 提高到 9.5。我在 CycleBar 期间与一些骑手交谈过,我观察到如果你在骑行期间能超过 10 cycle points/分钟,你就做得非常好,很可能会将自己推向极限****。
Progression of average CyclePoints/minute.
最后,我跟踪了班级排名。在我开始上课的两个星期后,我在 CycleBar 排行榜上名列前五,在我两个月的经历结束时,我平均在排行榜上名列前三。
因为班级的大小取决于班级的日期和时间,所以排名本身(1、2 或 3)可能不是相对表现的最佳指标。我想我会把这个排名转换成一个百分位数,基于某个特定级别的车手人数。一个班的最小人数是 5 人(这是一个午餐时间班),最大人数是 48 人(巴克黑德自行车室最多有 49 辆自行车)。例如,从这个角度来看,在数学上,在 48 名车手中获得第 9 名(18.75 百分位)比在 5 名车手中获得第 1 名(20 百分位)更好。我的百分位排名如下所示,这表明尽管我在开始上课两周后处于前 20 个百分位,但我能够在两个月结束时将其提高到前 12 个百分位。
其他健身趋势
除了能够在自行车课上逐渐表现得更好之外,我注意到在以下两个方面有了显著的改善:减肥和耐力。在 CycleBar 的两个月里,我减掉了大约 10 磅的体重,这是我在跑步和其他日常锻炼中没能做到的。
我还注意到,在其他锻炼项目中,我的耐力和速度都有所提高。在户外跑步时,我能够将我的常规英里/分钟配速减少 15 到 20 秒(从大约 7:30/分钟减少到 7:10 或 7:15/分钟)。
未来项目
我希望将周期点的分析扩展到我个人的统计数据之外。特别是,如果 CycleBar 的任何人正在阅读这篇文章,并可以向我提供如何根据一个人的体重、身高、年龄、性别和个人表现指标(瓦特/rpm)调整/计算 CyclePoints 的详细信息,我将非常感谢。
最后,非常感谢所有出色的导师(萨拉、塔拉 M. 、安妮、凯蒂、塔拉 R. 、贾斯汀 M. 、贾斯汀 L. 、普尔维、山特尔、多林、海莉、
注意事项:
*无限制的意思是,你可以在一个月内参加任意多的 CycleBar 课程。一般来说,每天有三到六节课。
** CycleBar 已与 FitMetrix 合作,展示平均瓦特数、每分钟转数和循环点数等循环统计数据。
-
- *您基于 CyclePoints 的等级可能与您在骑行期间在板上看到的实况有所不同,因为有些骑行者希望争夺 CyclePoints,但选择不在板上。当然,你的排名不可能比你在自行车板上看到的更好;要么一样,要么更糟。
-
-
- *有一些非凡的骑手能够在一个级别获得大约 550 到 575 个循环积分,平均每分钟 13 到 14 个循环积分。
-
我在虚拟现实雕刻中所学到的——Oculus Medium
原文:https://towardsdatascience.com/what-ive-learned-sculpting-in-virtual-reality-oculus-medium-15ba6b16d93a?source=collection_archive---------0-----------------------
更新编辑:带着对这篇不起眼的文章的兴趣,我终于有时间写一些关于 3D 建模和 VR 的后续文章。我将很快在我的网站上发布它们,你可以在这里找到[]。注册我的新 【快讯】 或通过[RSS]订阅,以便在这些更新上线后立即查看。我还将发表关于神经网络在艺术中的应用以及其他艺术/技术相关主题的文章。**
虚拟现实令人兴奋的事情之一是它开辟了互动的新途径,不仅在游戏中,而且在应用程序和工具中。自从 Oculus 宣布以来,我最大的愿望是一个 3D 建模应用程序,虽然还有很多东西需要解决,但 Oculus Medium 已经提供了一个非常引人注目的未来。我来说说我的过程和我学到的东西。
首先让我说,我不是一个专业的建模师。我在 Blender 上过课,在 Zbrush 上过一些在线课程,但我是一名 UX 设计师。我在学校学过传统美术,所以我知道传统的雕刻技巧,但是由于 3D 艺术/设计的高度技术性(相对于更直接的 2D 的东西),有很多我不知道的。Oculus Medium 非常棒,因为它模拟了现实生活中的雕塑,但它也不像从 Zbrush 或 Mudbox 切换到 Oculus 那么简单。
Not me, just a google image search to give you an idea of what the set up looks like
Oculus Medium 是基于体素的。这实质上意味着它使用 3D 像素。图片+元素=像素,体积+元素=体素。像素是网格,体素是网格的网格,构成立方体。很像游戏 minecraft。体素就像光栅图形。传统的 3D 渲染和 3D 软件使用的是顶点,基本就像 3D 矢量一样。如果你熟悉 Adobe Illustrator/Flash 和 Adobe Photoshop 之间的区别,那么 Oculus Medium 更像是 3D Photoshop。
体素通常不用于渲染 3D 对象,因为它们占用大量内存。如果你想要一个更专业的解释,我强烈推荐 Craig Perko 的视频,他深入描述了原因:
但是为了满足我的需求,你真正需要知道的唯一一件事是体素占用大量内存。很多。我的 windows 桌面机有 16g 内存,在做这些项目的过程中,我设法让我的电脑崩溃了几次,并轻松地在我的 SSD 中存储了大约 50g 的分页文件。我将解释这一点的一些含义,因为它关系到一个人如何在虚拟现实中雕刻。
我的第一个项目是一个简单的骷髅战士。简单、坚硬的表面,没有太多细节,基本上都是一种材料,就像我在用 3D 打印机打印一样。
与传统的顶点建模相比,体素有很多优点。体素雕刻对我来说感觉更直观,我发现自己真的很享受在虚拟现实雕刻的时间。这个雕塑花了两天的时间,有点长,但大部分时间都花在了弄清楚界面和如何最好地处理这件作品上。
做完骷髅战士后,我决定四处寻找新的挑战。facebook 上的一个朋友建议我试着模仿碧昂斯在格莱美上穿的服装。恐怕我对她的大部分作品都不太熟悉,但我最*读了伦敦桂冠诗人、碧昂斯最新专辑的撰稿人沃桑·夏尔的一首非常优美的诗。她的诗《留下来的不可承受之重》很美。https://warsanshire . band camp . com/track/the-unability-weight of-staying-the-end-of-relationship 她的服装也非常酷,似乎提供了许多方面,这对于 Oculus Medium 中的造型来说尤其困难。
碧昂斯造型的困难之处在于它与人类的相似性(人类已经花了数百万年来完善我们的面部识别湿件,因此我们非常非常擅长它),细节层次的变化,以及她穿着的薄纱般的裙子。
体素建模的直观本质非常简单。你点击按钮,一个球出现在空中,跟在你手的移动后面。你把它设置为擦除,你可以有选择地把你不想要的东西刻掉。本质上就是这么简单。您甚至可以创建自定义画笔,称为“图章”,功能类似于 Photoshop。Photoshop 笔刷是从缩略图中提取的重复像素图案。邮票没有 Photoshop 笔刷复杂的额外功能(还没有!)但它们的工作原理是一样的。你拖动一个球,你会得到一个直径很大的管子。你拖动一个圆盘,你会得到一个平而细的笔画,你可以把它像一层粘土一样放在雕塑上。
体素雕刻的本质可以与谷歌的一个类似的程序形成对比,该程序被称为使用顶点的倾斜画笔。熟练的艺术家可以使用它来制作看起来像空中绘画一样的美丽艺术作品(查看下面我最喜欢的倾斜画笔艺术家伊丽莎白·爱德华的作品),但它的顶点性质也在某些方面限制了它。这意味着当你想要删除一个笔触时,你必须删除整个笔触,而不能只擦除它的一部分。每个笔划都有自己的顶点组,类似于 Illustrator 中每个矢量笔刷笔划都有自己的子层。你可以在 Illustrator 中选择性地擦除部分矢量,所以我想 Tilt Brush 或 Quill(另一个基于顶点的 3D 艺术程序)最终也会如此,但目前为止,你只能擦除整个笔画,或者完全擦除。即使修复了这一点,顶点也是在 3D 空间中应用了着色器/纹理的 2d 平面形状笔划,没有深度/质量,因此您只能真正制作一个粗略的绘画作品,这在其他应用程序(如游戏)中的使用有限(尽管显然一个聪明的人可能会将它用于他们想要的用途)。
体素有质量,因为它们是 3D 立方体,然后对它们应用平滑算法,给它们一个一致的表面,而不是《我的世界》的块状外观。如果你想将你的作品用于更传统的基于顶点的动画或游戏引擎应用程序,你必须使用导出功能将其转换为 OBJ。这带来了基于体素雕刻的第二个困难。顶点模型不像体素那样占用那么多内存,因为它们只描述组成模型网格表面的点。体素不仅包含表面,还包含每个内部 3D“像素”。如果你有一个巨大的平面空间,在顶点模型中,这个巨大的平面空间基本上可以由 4 个点组成,而同一个平面空间必须由数百个体素组成,就像一个 900px 乘 900px 的光栅图像将比一个 90px 乘 90px 的图像大,即使它们基本上是相同的东西。
在同一个网格中,顶点可以有不同的分辨率级别。大型无差别几何区域可以用较少的点来表示,然后在高细节区域可以有一堆顶点。因此,如果你想在一个大而简单的身体上安装一个非常详细的头部,那么你必须浪费大量额外的内存来保持这个简单的身体与高度详细的面部具有相同的分辨率。所以为了解决碧昂斯造型的问题,我把她的脸和身体分成两部分,并用她的珠宝来掩饰。这些元素中的每一个都在一个单独的层上,并且具有不同级别的分辨率,然后被拼凑在一起。她的脸比她的身体高 6 级分辨率。因此,尽管在 Oculus Medium 中,头部在空间中被表示为一个较小的对象,但它实际上包含了 6 倍多的体素。这有点像在 Photoshop 中让一个高分辨率的智能对象在一个低分辨率的图像中播放,也许这可以给你一个想法。
即使有了这样的分辨率划分,我仍然遇到了许多内存问题。体素通常不被使用是有原因的,即使 6 倍的分辨率有时在面部也会受到限制。更糟糕的是,我对我的比喻作品也很生疏。虽然这只是一个硬件问题,但最终会成为一个小问题,这就是为什么我相信 Oculus 选择体素渲染是正确的。
事实上,像这样在空间的每个点上均匀地定义体素,占用了如此多的内存,这是一个问题,但也是一个很大的好处。由于每个体素都被同等考虑,你可以很容易地挖空物体,或雕刻与主图形无关的物体,而不必创建单独的顶点组等。你可以从碧昂斯的造型和我给她做的发型中看出来。在她的发梢附*,你可以看到独立的头发。这是因为我创建了一个自定义的发刷和羽化头发的方式。类似于 2d 概念艺术家用来快速生成头发、草或树叶的技术,但应用于 3D 空间,我模拟了她头发的一小部分,然后快速重复它的形式来创建她的头发的整体形状和纹理。在最后独立的头发是无意的,但我喜欢这种绘画效果,并保留了下来。一旦你手头有了更多的内存和分辨率(以及像 Photoshop 笔刷一样更多的调整选项),我可以看到这个系统变得非常非常强大。在具有此功能的 3D 建模中,还有一个完整的维度有待探索。
我提到的另一个挑战是制作薄纱般的服装。最初我是用一枚叶子形状的邮票,在裙子的形状上创造一件破旧的裙子,但这被证明是有挑战性的。仅出口一项,这条裙子就卖了 1.5 英镑,价值超过 100 万英镑。太多了!(典型的视频游戏模型即使没有几百个,也有几千个)。这是一个完全混乱的工作。我试图用 Mesh Lab(我强烈推荐:http://www.meshlab.net/)清理它,但无济于事。我的电脑就是受不了。所以我最后在搅拌机里重塑了这条裙子,并把它设置成透明材质。
这让我想到了雕刻体素的关键方面。你必须把你正在做的东西当作一个固体。这就像扔出一块粗糙的陶器不透明的粘土,做精致的东西可能很困难,因为你不能依靠纹理/材料来给出短暂的外观,并且试图从字面上翻译这种花边外观是非常耗费内存的。
即使是做像脸部这样精致的五官,完全是立体的,也有点挑战。用顶点程序雕刻允许一定量的表面控制(因为本质上你只是在处理表面,没有像体素那样的“内部空间”)。如果你的手柄在 Oculus Medium 中颤抖,你可能会在你不想要的脸颊或嘴唇上留下一大块草皮。我相信有一些 UI 解决方案可以用来解决这个困难(aaaay,给我一行 Oculus!)但这仍然是一个需要考虑的挑战。
总之,我认为 Oculus Medium 是 VR 体素雕刻的一个非常有前途的开始,我向任何 Oculus 或 Vive 用户推荐它(我实际上拥有一台 Vive,只是用 ReVive 运行它没有问题)。我推荐它主要作为一种粗略绘制形状和构图的方法,然后在更传统的顶点程序中清理,如 Blender、Mudbox 等。(或者 Zbrush,虽然从技术上来说,它也是非顶点的,这是另一个完整的故事来解释)。我绝不是一个专业的建模师,我敢肯定,还有大量更高级的功能需要为游戏组件优化(可能是一个完全不同的 VR 盒子建模程序)而设计,但我很高兴继续学*并弄清楚我与该程序的工作流程。
Keras 车型缺什么
原文:https://towardsdatascience.com/what-keras-models-are-missing-89b47cc5a4fa?source=collection_archive---------11-----------------------
TL;Keras 模型缺少“模型信心”我们需要知道一个深度学*模型的“置信度”,才能信任和使用它。模型“信心”比高预测概率更微妙。
首先,背景故事。我认识一个团队,他们建立了一个很棒的分类模型来识别“重要”的文档,然后将它们传递给人类专家。他们使用了所有很酷的 NLP 技巧:自定义单词嵌入、语言模型、注意力机制……他们用贝叶斯优化找到了最佳的模型架构和超参数。该模型的精确度与人类相当,并有可能节省数百万美元。人们可能想知道还缺少什么?
事实证明,问题在于人类专家不可能审阅模型预测为重要的所有文档。我不会透露具体的用例,但人们可以想象一个为疾病诊断筛选患者病历的假设场景。无论哪种方式,我们都受到资源的限制,只想追求模型对什么“有信心”,以控制假阳性率。但是“模特自信”到底是什么意思呢?
让我们把问题简化为二元分类。模型预测只是 0 到 1 之间的概率。我们可能会认为,预测概率越接* 1,意味着“信心”越高。但实际上模型预测只是一个点估计,它代表了“最佳猜测”,但没有量化“模型置信度”“模型置信度”的最佳量化是一个置信区间,或贝叶斯可信区间。
我们可以有两个 0.8 的点估计,但一个置信区间可以是(0.5,0.9),而另一个置信区间是(0.75,0.85)。第二个估计会比第一个更“有信心”。另一方面,我们可以有两个区间估计:(0.5,0.6)和(0.3,0.9)。尽管区间估计值较低,但区间估计值越窄,提供的信息就越多,因为模型更“可靠”
对我来说,(0.5,0.6)表示“模型知道它不知道”,(0.3,0.9)表示“模型不知道它是否知道。”
怎么会这样?同样的预测概率怎么会有不同的置信区间?让我们看一个玩具二维例子。下面是 500 点,两个维度都遵循标准正态分布。当一个人将真实数据居中并缩放至平均值 0 和标准差 1 时,这是理想的情况。然后使用二次决策边界对这些点进行着色/分类。
Simulated data points to be classified.
由于这些点显然不能线性分离,神经网络将是一个强大的模型选择(如果我没有告诉你真正的模型是二次的)。这里我们建立一个简单的一层神经网络,有 100 个隐藏单元。
Shallow neural network with relatively large hidden layer.
在仅仅训练了几个时期之后,神经网络做得相当好,并且恢复了决策边界。在这一点上,有人可能会说“喀拉斯万岁”,然后就到此为止。当新数据出现时,我们会采用模型预测的高概率,可能高于某个阈值。这可能是机器/深度学*在实践中的大部分时间是如何完成的,没有数据工程和模型调整。
Neural network decision boundary.
然而,到目前为止,我们真的没有“模型信心”为了得到那个,我们可以引导数据 50 次,并获得决策边界的经验分布。下图显示了决策界限可能会有很大变化。特别是,模型在中心附*最“自信”,因为蓝色波段在那里最窄。当我们向两边移动时,模型变得不那么“自信”,正如蓝色曲线的高可变性所暗示的那样。
Empirical distribution of decision boundaries.
考虑两个数据点的模型预测,一个靠*中心,一个向右。如果两个数据点离决策边界的距离相等,则它们的点估计值将相同,但置信区间可能会非常不同。实际上,我们有两个预测分布,它们具有大致相同的均值/中值,但形状截然不同,因此完全没有可比性的“众数置信度”在前面的上下文中,我们会将更多的资源分配给模型更“有信心”的数据点
Predictive distributions at two different data points
“模型可信度”本质上是数据不确定性的产物。凭直觉认为,在数据可预测的情况下,模型应该更“自信”,而在数据不确定的情况下,模型应该更“不自信”。
回到良好的旧回归模型,数据不确定性表现在杠杆方面。从数学上来说,数据不确定性出现在 X 分布的边界附*,这里附*的数据点很少。这种想法在深度学*中尤为重要,原因有二。
首先,深度学*模型倾向于更高维度,尽管有过多的数据,但维数灾难将会杀死我们。第二,当我们对图像和文本等数据使用深度学*时,很难想象边界上有什么,因为图像/文本的空间远比数字的欧几里德空间复杂。
这意味着,深度学*模型仍然可能不“自信”,即使它们在数百万个数据点上进行训练。此外,我们将更难评估深度学*模型的“可信度”。事实上,这是一个重要而令人兴奋的研究领域。最有希望的解决方案是贝叶斯深度学*。最后,我推荐牛津大学的 Yarin Gal 撰写的一篇深入的博客文章,以供进一步阅读。
你的公司有什么样的数据?
原文:https://towardsdatascience.com/what-kind-of-data-does-your-company-have-7341991a73a?source=collection_archive---------8-----------------------
你的企业有一些数据,你想知道从中能学到什么。是数字还是范畴?它是否具有高维度或基数?
维度是什么?
数据无处不在已经不是什么秘密了。但重要的是要认识到,并非所有的数据都是一样的。您可能以前听说过数据清理这个术语。如果你没有,这和定期清洗没什么区别。
当你决定是时候整理你的房子了,你把地板上的衣服收起来,把桌子上的东西放回该放的地方。你让混乱的环境恢复了秩序。
同样的事情也发生在数据上。当机器学*工程师开始查看数据集时,他们会问自己,“这个应该放在哪里?”,‘这应该是什么?’就像把衣服放回壁橱一样,他们开始移动东西,改变一列的值,并使另一列的值正常化。
但是等等。您如何知道如何处理每一份数据?
回到打扫房间的比喻。如果你有一张凌乱的餐桌,你怎么知道每样东西放在哪里?
香料放在食品柜里,因为它们需要保持干燥。牛奶要放回冰箱,因为它必须保持低温。而你还没打开的那堆信封,大概可以进书房了。
现在假设你有一个混乱的数据表。一列有数字,另一列有单词。你想用这些做什么?
一种简便的方法是将这些数据分解成数字和分类数据。
在我们进一步讨论之前,让我们认识一些朋友来帮助解开这两种类型的价值观。
小猪哈罗德喜欢数字。他每天数他的食物。
Klipklop 马观察所有经过场地的汽车,知道每一种类型。
鱼桑迪两样都喜欢。她知道人多力量大,喜欢海底各种不同的海洋生物。
Harold the pig loves numerical data, Klipklop favours categorical data and Sandy the fish loves both.
数据
像哈罗德一样,计算机喜欢数字。
对于任何数据集,目标通常是以某种方式转换它,以便所有的值都处于某种数值状态。通过这种方式,计算机可以通过执行大规模计算来找出数字中的模式。
在 Harold 的例子中,他的数据已经处于数字状态。他记得在过去的三年里他每天吃了多少粒食物。
他知道周六他会得到一点额外的报酬。所以他会留一些到周一供应量较少的时候。
你不一定需要电脑来弄清楚这种模式。但是如果你在处理更复杂的事情呢?
比如根据其他类似公司的价值和最*关于 X 公司的新闻头条预测 X 公司明天的股价?
好,那么你知道 X 公司和其他四家类似公司的股票价格。这些值都是数字。现在你可以用电脑很容易地模拟这些。
但是如果你想加入标题“X 公司打破新记录,创历史新高!”融入其中?
哈罗德很擅长数数。但是他对他一直在吃的不同种类的谷物一无所知。如果谷物的种类影响了他收到的谷物数量呢?就像新闻标题如何影响股票价格一样。
这种不以简单的数字形式出现的数据称为分类数据。
分类数据
分类数据是任何不能立即以数字形式获得的数据。这通常是你会听到维数和基数这两个术语的地方。
这就是克利普克洛普这匹马出现的地方。他每天看着汽车经过,知道每辆车的品牌和型号。
但是假设您想使用这些信息来预测汽车的价格。
你知道品牌和型号对价值有一定的贡献。但是到底是什么呢?
你如何让一台电脑明白一辆宝马和一辆丰田是不同的?
用数字。
这就是特征编码概念的由来。或者换句话说,把一个类别转换成一个数字,这样计算机就能知道每个数字之间的关系。
假设今天很安静,Klipklop 只看到了 3 辆车。
一辆宝马 X5,一辆丰田凯美瑞和一辆丰田卡罗拉。你怎么能把这些汽车变成机器能理解的数字,同时又保持它们固有的差异呢?
有许多技术,但是我们将看两个最流行的——一热编码和顺序编码。
顺序编码
这是汽车和它的制造商被分配一个数字在他们出现的顺序。
假设宝马先经过,接着是凯美瑞,然后是卡罗拉。
Table 1: Example of ordinal encoding different car makes.
但这有意义吗?
按照这个逻辑,一辆宝马+丰田应该等于一辆丰田(1 + 2 = 3)。不完全是。
序号编码可以用于某些情况,如时间间隔,但它可能不是这种情况下的最佳选择。
一次热编码
一键编码将适用于每辆汽车的每个值指定为 1,将不适用的每个值指定为 0。
Table 2: Example of one-hot encoding different car makes and types.
现在,我们的两辆丰田车彼此相似,因为它们都有丰田的 1,但它们的品牌不同。
One-hot-encoding 可以很好地将类别值编码成数字,但是有一个缺点。请注意,用于描述汽车的数值是如何从 2 增加到 5 的。
这就是术语“高维度”的用法。现在有更多的参数来描述每辆车是什么,而不是车的数量。
为了让计算机学*有意义的结果,您希望相反的比率很高。
换句话说,你更希望有 6000 个汽车的例子,并且只有 6 种方式来描述它们,而不是相反。
但是当然,事情并不总是这样。你可能会有 6000 辆汽车和 1000 种不同的描述方式,因为 Klipklop 见过 500 种不同的品牌和型号。
这就是高基数的问题——当你有许多不同的方式来描述一件事,但每种方式都没有很多例子。
对于一个理想的价格预测系统,你需要 1000 辆丰田花冠,1000 辆宝马 X5 和 1000 辆丰田凯美瑞。
好了,车说够了。
我们的股价问题呢?如何将新闻标题整合到模型中?
同样,您可以通过多种方式做到这一点。但是我们将从二进制表示开始。
二进制编码
你出生在 2000 年之前,对还是错?
假设你回答正确。你得了 1 分。2000 年以后出生的人都得 0 分。简而言之,这就是二进制编码。
对于我们的股票价格预测,让我们把新闻标题分成两类——好的和坏的。好标题得 1 分,坏标题得 0 分。
有了这些信息,我们就可以浏览网页,收集新出现的标题,并把它们输入到我们的模型中。最终,有了足够多的例子,它将开始根据标题的价值来感受股票价格的变化。
有了这个模型,你开始注意到一个趋势——每次坏消息出来,股价就会下跌。没有惊喜。
我们在这里使用了一个简单的例子,二进制编码并不能准确地捕捉一个好的或坏的标题的强度。中立呢,很好还是很差?这就是我们之前讨论的顺序编码的用武之地。
-2 代表非常差的标题,-1 代表差,0 代表中性,1 代表好,2 代表非常好。现在很不好+很好=中性是有道理的。
有更复杂的方法将单词引入机器学*模型,但我们将这些留给未来的文章。
需要注意的重要一点是,有许多不同的方法可以将看似非数字的信息转换成计算机可以理解的东西。
你能做什么?
机器学*工程师和数据科学家花了很多时间试图像鱼桑迪一样思考。
桑迪知道她和其他鱼群呆在一起会很安全,但她也知道在探索未知世界的过程中有很多东西要学。
仅仅依靠数字信息来获得洞察力是很容易的。但是有如此多的信息隐藏在不同的方式中。
通过使用数字和分类信息的组合,可以建立更现实和有用的世界模型。
利用价格信息模拟股市是一回事,但当你将新闻标题加入其中时,情况就完全不同了。
如果你希望开始利用机器学*和数据科学等技术来利用数据的力量,有几件事情可以让你充分利用它。
标准化您的数据
如果你在收集数据,它是以什么格式存储的?
格式本身不一定像统一性那么重要。收集它们,但要确保它们都以同样的方式存放。
这适用于数值和分类数据,尤其是分类数据。
越多越好
理想的数据集在基数和维度之间有一个很好的平衡。
换句话说,每个特定样本都有大量的例子。
在学*方面,机器还没有人类好。我们可以看到哈罗德
猪只看一次就能记住它的样子,而计算机需要成千上万张猪的照片才能记住它的样子。
机器学*的一般经验是,更多(高质量)的数据意味着更好的模型。
记录每条信息的相关内容
随着收集的数据越来越多,了解每条信息的相关内容非常重要。
在 Max Kelsen,在运行任何类型的机器学*模型之前,工程师都会花大量时间与熟悉数据集的主题专家联系。
为什么这很重要?
因为机器学*工程师可能能够建立一个 99%准确的模型,但如果它预测错误,那就没用了。或者更糟,99%的数据是错误的。
很好地记录你的数据有助于防止这类失误。
不管你得到的是数字数据、分类数据还是两者的组合,如果你想从中获得更多,Max Kelsen 可以帮你。
这篇文章最早出现在上。
应该上哪门领先的人工智能课程,之后该做什么?
原文:https://towardsdatascience.com/what-leading-artificial-intelligence-course-should-you-take-and-what-should-you-do-after-261a933bb3da?source=collection_archive---------1-----------------------
A photo of me being slightly (very) proud of my recent graduation from Andrew Ng’s deeplearning.ai course.
我于去年年底从 Udacity 的深度学*纳米学位(DLND) 毕业,吴恩达的 deeplearning.ai 专业 于 2 月为我收官。
我目前大约 70%通过了 Udacity 的人工智能纳米学位(AIND),作为我自创 AI 硕士学位的一部分。
这篇文章开始于我对 Quora 上一个问题的回答。
Original question on Quora.
我根据我对这两门课程以及 DLND 的体验回答了这个问题。
简短回答
双管齐下。
如果你想提高你在这个领域的技能,我强烈推荐这两个课程。
去年我编程知识为零,也没听过深度学*这个名词。
由于这些课程的结合,我现在每周都在构建世界级的深度学*模型。
我按以下顺序选修了这些课程。
- Udacity 深度学*纳米度
2。 Udacity 人工智能纳米度 Term 1(传统 AI)
3。Coursera deep learning . ai吴恩达的专业化
4。【本期】Udacity 人工智能 Nanodegree Term 2(深度学*聚焦)
如果我能再有一次机会,我会用下面的顺序。
1.吴恩达的 coursera deep learning . ai specialization
2。Udacity 深度学*纳米学位
3。Udacity 人工智能纳米学位术语 1
4。Udacity 人工智能纳米学位术语 2
为什么?
吴恩达的 deeplearning.ai 采用了一种全新的方法来进行深度学*。这是我学*最好的方法。
Udacity 的课程质量非常高,但通常会直接进入高水平的项目。这是一个很好的学*方法,但是如果你没有基础知识,会非常困难。
如果你已经拥有一些深度学*和机器学*的基础知识,或者已经是一名优秀的 Python 程序员,那么 Udacity 的 AI Nanodegree 可能是你开始的理想地方。
为什么两者都做?
交叉知识。
在学*完这两门课程后,我发现它们相辅相成。
当安德鲁的航向下降时,AIND 会上升,反之亦然。
昨天一个真实的例子发生在我身上。我被 AIND NLP capstone 项目中的一个问题卡住了,特别是一个关于单词嵌入的问题。
我在论坛上发帖说我在理解单词嵌入方面有困难。
Thanks for the help Vadim!
在 Vadim 的建议下,我回顾了 deeplearning.ai 专业化中关于单词嵌入的讲座。在做这件事之前,我在网上搜索了几个小时,寻找一个我能理解的解释。
自我提醒: 不要忽略你已经复*过的材料!
最后,它们都是很棒的课程。如果你必须选择一个,我倾向于 deeplearning.ai specialisation。安德鲁的教学风格有些地方真的很合我意。
更长的答案
对于那些对我的课程体验感兴趣的更深入的回答,请继续阅读。
我将把它分成八类。
1.成本和时间——这些课程不是免费的,也不容易。
2。先决条件—开始之前您需要什么。
3。支持选项—遇到困难时该怎么办。
4。课程质量——材料有多好?
5。提交项目——你的工作会有什么变化?
6。课程结构——课程如何进行?
7。未来的选择——课程结束后做什么?
8。其他学*资源—还有哪些其他学*资源?
1。成本和时间
deeplearning.ai 专业化要求每月支付 64 澳元(约 50 美元)的订阅费,才能获得五门课程中的每一门。每门课程都被列为大约一个月。总共五个月意味着大约 250 美元。
如果你够快的话,你可以在一个月内完成。我设法在三分钟内完成它。我本可以在两个月内完成,但是,生活。
DLND 要求预付 750 澳元(约 580 美元)。您需要在开始后的四个月内完成所有与 DLND 相关的项目,否则您将不得不再次付款。如果你按时完成,它算出每月 145 美元。
Udacity 的人工智能 Nanodegree 是三者中最长也是最贵的。包括两个三个月的期限,1000 澳元(约 775 美元)。同样,如果你在六个月的时间框架内完成了要求的项目,它算出每月 258 美元。
根据我的经验,这两个 Udacity 课程每周至少要花 15-20 个小时(有时更多)来保持进度。
另一方面,我能够每天完成价值一周的课程(6-8 小时)的 deeplearning.ai specialisation。这主要是因为我认同吴的教学方法。
2.先决条件
每门课程都将 Python 的中级知识列为先决条件。
需要一些数学知识,但 Python 应该是你的主要重点。
如果你能阅读 GitHub 上的 Python 脚本,并理解至少 60%的内容,你应该可以尝试这些课程。
如果 Python 是你的弱项,我会在开始之前多练*一下。
当我开始学* DLND 时,我已经学*了三周的 Python 知识。在此之前,我从未编程。
最初几个月我很挣扎,但随着我的信心增加,我最终按时完成了。我仍然认为自己是 Python 新手。
至于数学,高中阶段对微积分、线性代数和几何的理解足以完成课程。这是因为大多数数学工作都是在 TensorFlow 和 Keras 等库的幕后进行的。
除了高中,我一门数学课都没上过。如果我的数学没有达到某个特定概念的标准,我会利用可汗学院来提升我的数学技能。
如果你正在考虑进入人工智能或深度学*博士项目,你将 需要 数学技能。
然而,要用你从这些课程中学到的技能构建应用人工智能,并不需要对幕后的数学有深刻的理解。
如果我有时间再来一次,我会在开始之前三倍地提高我的 Python 技能。
3.支持选项
在每门课程中,我都遇到了许多障碍。我发现支持服务对我扫清道路非常有价值。
DLND 和 AIND 有自己的 Slack 频道和专门的论坛。
在这两个松弛频道中,还有几个频道专门用于不同的主题。
Sometimes the Slack channels can be a little noisy.
两个频道都有成千上万的人,大多数话题至少有几百个用户。导师们也经常主持问我任何问题会议(AMA 的)并浏览频道来回答他们能回答的任何问题。
根据我的经验,Slack 频道非常嘈杂。除了发布自己的问题或者搜索其他有类似问题的人,我不怎么用它。
论坛是一种完全不同的体验。我很少发表问题,因为我遇到的许多问题,其他人已经遇到了。答案并不总是清晰的,但如果是,那就不是学*了。
如果我陷入困境,我会在试图解决自己的问题之前,利用论坛在脑海中勾勒出一幅画面。
deeplearning.ai 专业化的论坛也是类似的体验。主要的区别是用户不允许直接从作业中发布任何代码,但是伪代码是可以的。我发现这里的论坛足以回答我的问题。
当你注册 AIND 时,你会被指派一个导师。我的导师叫阿尤什。她是来自印度的软件工程师。
导师的角色是在必要时提供进一步的支持,同时也是一个可以交谈的人。很多时候当我和阿优士谈论我面临的一个问题时,它似乎已经自己解决了。
永远不要贬低大声说出你的问题的力量。永远不要害怕寻求帮助。
发布问题时的一个技巧是尽可能有效地交流。帮助他人通过彻底解释你所面临的问题来帮助你。这是我正在研究的东西。
4.课程内容
每门课程的内容都是世界级的。我经常在我的视频中说这些是我上过的最好的课程。
DLND 分为六个部分,其中五个部分附有重要项目。
1.简介
2。神经网络——创建你的第一个神经网络。
3。卷积神经网络-建立一个狗品种分类器。
4。递归神经网络——使用神经网络生成电视脚本。
5。生成性对抗网络——建立一个面部生成器。
6。深度强化学*——教四轴飞行器如何飞行。[新]
每个项目都专注于给你某种深度学*技术的实践经验。如果你以前没有做过太多的 Python 编程,它们会很难,但不是不可能完成。
注: 第 6 节是 DLND 的新增内容,我还没有尝试过。
吴恩达的 deeplearning.ai 分为五个部分。
1.神经网络和深度学*
2。改进深度神经网络:超参数调整、正则化和优化
3。构建机器学*项目
4。卷积神经网络
5。序列模型
课程 2 和课程 3 对我来说是突出的。我觉得这种材料在 DLND 中丢失了。
其他课程在结构上与 DLND 提供的课程类似。完成课程 4 和课程 5 后,我对 DLND 中涵盖的内容有了进一步的了解。
AIND 有两个术语。学期 1 侧重于传统的人工智能方法,学期 2 侧重于深度学*。
对于那些从未做过深度学*的人来说,第二学期开始时有一门衔接课程。因为我已经完成了 DLND,所以我可以跳过这一步。
期限 1
1.构建一个游戏代理——使用带有启发式评估的对抗性搜索来构建一个数独解决和隔离游戏代理。
2。实施规划搜索—使用规划图试探法构建航空货运物流系统。
3。设计一个手语识别系统——使用隐马尔可夫模型来识别美国手语中的手势。
如果您尚未完成 DLND,AIND 的条款 2 将包含以下内容之一,并提供购买更多内容的选项。注册时我已经完成了 DLND,所以我可以访问所有三个。*
第一学期的内容对我来说很难理解。由于我已经学*了深度学*和其他机器学*技术,由于我缺乏编程能力,第一学期涵盖的主题很难。
*这可能已经改变,请务必发送电子邮件给 Udacity 支持部门进行澄清。
第二学期
1.计算机视觉集中——利用深度学*和 OpenCV 构建面部关键点检测系统。
2。自然语言处理集中——建立一个机器翻译模型,将英语翻译成法语。【我目前在这里】
3。语音识别系统—构建语音检测系统。
在每一个浓度中,你将经历一系列的小项目和讲座,直到最后的项目。
我目前正在进行第二学期的第二次集中学*。最*,我一直在练*实现自然语言处理流水线的步骤(文本预处理、特征提取和建模)。这一切都是在为机器翻译项目做准备。
5.提交项目
为 DLND 和 AIND 提交项目非常相似。通过 Udacity 教室,您可以提交项目文件或带有代码的 GitHub 链接。
在 24 小时内,Udacity 的评审员会给你回复你的分数(通过或需要更多的工作)。然而,这不是普通的审查。评审者通常会在你的代码中留下一些带有反馈或建议的评论,以便了解更多。
我对评论家的评价再高也不为过。我总是期待听到他们的观点。
对于 deeplearning.ai specialisation,所有项目和迷你测验都会自动评分。这是节省时间的,因为你得到了直接的结果,虽然,你错过了学*更多和改进的建议。
6.课程结构
Udacity 结合了简短的讲座(大部分在 2-8 分钟之间),并贯穿了信息丰富的图表。浏览器中基于 Python 的编程测试通常会遵循一个重要的主题。
在每个主要里程碑结束时,可能会在项目结束前提供一个热身项目作为可选练*。
例如,在 AIND 的 NLP 集中期间,在尝试机器翻译顶点之前提供了情感分析项目。
deeplearning.ai 的专业化结构与吴恩达著名的机器学* MOOC 在 Coursera 上非常相似。5 分钟以下的视频很少,平均在 10 分钟左右。我以 1.5 倍的速度看着他们。
安德鲁使用屏幕上的一系列幻灯片作为他教学的基础。在介绍一个主题时,他经常在幻灯片上写下例子,并讨论每个例子背后的思想。
在每个系列讲座结束时,学生需要完成一个非编程的多项选择测验。每个测验的通过门槛为 80%(允许多次尝试)。
测验涵盖了讲座中涉及的理论知识,少数问题需要一些数学计算。
通过测验后,就可以获得 Jupyter 笔记本形式的编程作业。每个编程作业都需要 80 分或以上才能通过。
如果你在专题或任何课堂材料上遇到问题,论坛是你的朋友。
7.未来选项
完成课程后,有时会不知所措,不知下一步该做什么。至少,这是我在经历了一个重要的里程碑后的感受。
显而易见的答案是运用你所学到的东西。
但是怎么做呢?
博客帖子。
只要你有空,就喜欢写作。写下你所学到的东西将有助于巩固你的记忆。
与他人分享你的写作将有助于他们学*。
公开写作也会让其他人评论你的作品,这是另一个宝贵的学*机会。
制作视频。
也许写作不是你的专长。但是你读这篇文章的设备上可能有摄像头。谈论你学到的东西和写下来一样好。这些视频不必是最好的质量。
在摄像机前讲话将有助于你的公共演讲技巧。
在任何情况下,与他人谈论你所知道的都是有帮助的。
分享你所学到的。
在 HackerRank 或者 Kaggle 上练*。
HackerRank 和 Kaggle 都提供了大量的资源来练*你一直在学*的技能(同时也帮助你学*新的技能)。
Kaggle 非常适合获得真实数据科学、机器学*和深度学*项目的实践经验。你甚至可以建立自己的声誉,成为一名 Kaggle 大师。许多 Kaggle 的顶级竞争对手在进入任何与数据科学相关的角色时都不会有任何问题。
HackerRank 更侧重于提高你的编码技能。它提供了通过不同的编码挑战工作的能力,同时建立了你所做的投资组合。把你的简介作为简历的补充,向未来的雇主展示你的能力。
造东西
有想法吗?运用你所学的技能来实现它。把它运送给其他人,他们可能也会从中发现价值。如果失败了,与他人分享你在这个过程中学到的东西。如果成功了,恭喜你!
所有这些都指向一件事。
当老师。
你花了几个小时学*一些有价值的东西,并遇到了许多障碍。别人如何避免你的错误?他们如何从中获得一些东西?
注: 我还在研究这些!
8。其他学*资源
人工智能在线学*空间正在爆炸式增长。信息那么多,很难知道要注意什么。
就我而言,在我完成 AIND 后,我将前往 fast.ai 。
从那以后,我一直在关注 Coursera 上的数据结构和算法专业,以弥补我编程能力的不足。
对于人工智能,我强烈建议以下资源。*
- 西拉杰·拉瓦尔的 YouTube 视频
- 科拉的博客
- 机器学*大师博客
- Francois Chollet 用 Python 进行深度学*
*如果你还有,我很乐意在这里补充。
定论
如果你追求的是硬技能,尽你所能完成所有的课程,并通过教别人或建造一些东西来实现你所学到的东西。
如果你想快速进入人工智能,并了解如何制作每个深度学*模型及其能力,请从 Coursera 上的deep learning . AI specialization 开始。
无论你决定做什么,记住,学东西从定义上来说是很难的。
当它变得困难时,想想你为什么开始。
更新(2018 年 3 月 29 日):在写这篇文章之后,Udacity 彻底检查了他们的人工智能课程。这里的许多具体细节(课程价格/材料)可能不完全适用,但学*的原则和下一步该做什么仍然有效。
与此同时,去看看艾的 Udacity 学校。
观看:YouTube
日常文章:www.mrdbourke.com
连接: LinkedIn
是什么让一个国家繁荣昌盛?
原文:https://towardsdatascience.com/what-makes-a-country-prosperous-7cc213974bac?source=collection_archive---------0-----------------------
今年在立陶宛,有很多关于是否有必要引入累进税以使收入不平等不至于如此严重的讨论(不要问我什么是严重——政治家们又一次没有给出定义)。
但是世界各地都在发生同样的事情——每个人都对收入不平等和税收感到兴奋,并且有很多关于改善每个人而不是少数人生活的讨论正在进行。
虽然收入不平等是一个有点争议的话题(见 1990 年的视频),但我对一个对每个人都很重要的更实际的问题感兴趣——是什么让一个国家繁荣?实际上,它应该读起来更像“是什么让一个国家的公民生活得更好”,这样我们就清楚了,它是关于生活在那里的人们。
真正酷的是,这些天我们有很多数据和很多方法可以随时用来分析它(谢谢熊猫和 Matplotlib!).在数据的帮助下,有可能做出更明智的决策。
让我们开始吃吧。
数据
所以我做了什么?我收集了这个国家各个方面的所有有用的指数,并对它们之间的关系进行了一些数据分析。
我发现有很多有用的索引:
生活质量:
- 世界幸福报告 —通过结合多项调查和社会因素来衡量幸福(doh)。
- 人类发展指数——包括预期寿命、教育和人均收入。
- 社会进步指数——衡量国家满足其公民社会和环境需求的程度。
- Legatum 繁荣指数(lega tum Prosperity Index)——该排名基于多种因素,包括财富、经济增长、教育、健康、个人幸福和生活质量。
- 教育指数
这些将有助于确定这个国家的生活质量。最终,这些事情对于一个普通的美国公民来说至关重要。
经济:
- 做生意——结合多项标准来衡量创业的难易程度。
- 全球竞争力指数 —通过衡量一系列制度、政策和其他因素,评估国家为其公民提供高水平繁荣的能力。
- 腐败感知指数 —衡量感知的腐败程度,由专家评估和意见调查确定。请注意,较高的值意味着较低的损坏。
- 基尼系数 —评估收入最高者和收入最低者之间的差距。
- 影子经济规模——显示实体经济中没有被政府征税或监控的比例。
- 政府效率 —获取对公共服务质量的看法。更多此处。
- 研发支出
以上大部分定义了国家的经济环境。创业容易吗?经济有多有效?
此外,还有其他一些或多或少为人所知的指标,例如:
- 人均国内生产总值
- 人均国民总收入
- 税收-GDP 比率——税收占经济的百分比是多少
- 商业收入税率(商业税率)——这里的解释是但基本上,它是对商业收入的综合税
- 教育支出(占 GDP 的百分比)——教育支出占 GDP 的比例是多少
- 按部门划分的 GDP(农业、工业、服务业) —比较不同 GDP 构成的国家之间的数据很有意思
- 商品和服务税 —基本上是欧洲的增值税和美国的销售税
- 所得税和资本税
- 出生率
- 预期寿命
- 生活在农村地区的人口比例
我选择忽略像个人税率和公司税率这样的东西,因为它们在法律中被报道,因为它通常是一个累进税率,只报道其最高税率。世界银行报告的收入、商品和服务的实际税收看起来更好地代表了税收水平。
接下来,我将所有国家放入电子表格中,并不断缩减列表,直到剩下 75 个国家拥有上述所有指数的数据。
这引入了某种偏见,只预先过滤了那些能够跟踪他们生活许多不同方面的国家,但它也有助于消除某些离群值,如专制政权、极度不发达的国家等。
我使用的所有数据都可以在 GDrive 上的这个电子表格中找到。
调查的结果
做好准备面对大量的数字。我认为有必要探索数据的各个方面,以更好地了解不同组件如何相互作用。例如,如果经济以创新产品为基础,可以预期它也是有竞争力的,反之亦然。
分析部分将由 5 部分组成:
- 税收对经济和繁荣的影响
- 商业环境对繁荣的影响
- 政府效率及其影响
- 对收入不平等的影响
- 繁荣国家的特征
所有的数字都将是散点图(因为它们很容易理解数据之间的关系),它将包括一个线性回归拟合,以帮助我们更好地衡量这种关系。
例如,在上图中,每个点将代表一个国家的 Legatum 繁荣指数值及其对应的全球竞争力指数值。
有时这些回归拟合线可能会产生误导,因此这些数字会在它们上面包含一个数字,即括号中的皮尔逊相关系数及其 P 值(随机结果的可能性)——这与线拟合一起将更好地表示数据之间的关系。
还有一个关于皮尔逊系数的小提示:
- 0 和 0.3 表示弱线性关系
- 0.3 和 0.7 表示中度线性关系
- 0.7 和 1.0 表示强线性关系
赋税
首先,我们将从所得税和资本税说起。
从上面可以看出,对社会和经济因素(如经商和社会进步指数)的影响很小(或者说影响的证据很少)。有趣的是,与全球竞争力指数之间存在微弱的正相关性,因此增税会损害企业的说法不一定正确。
企业管理费怎么样?
生活质量和商业税率基本没有关系。经济也是如此,尽管这种相关性是负的,而且在《营商环境报告》得分上具有统计学意义。然而,从散点图中我们可以看到,这是非常随机的。
商品及服务税:
如果有什么不同的话,似乎消费税对经济有负面影响(GDP 和 GCI ),但对生活质量没有正面影响。
这变得有点奇怪——它可能开始看起来像我们根本不需要税收就能拥有一个繁荣的国家。但是让我们来看看税收占 GDP 的比例:
最后,我们有所进展。这将强烈地表明,征收足够的税收来支持基础设施和公民的生活质量,对于一个繁荣和运转良好的国家来说是非常重要的。正如我们将在后面看到的腐败一样,事实可能确实如此,因为更有效地收税比提高税率更重要。
老实说,如果我们从世界银行获取税率数据,它不会显示出如此强的相关性,但它似乎缺少一大块税收,如社会保险。此外,对几个国家的快速复查显示,这里的可用数据看起来比世界银行的数据更真实。
让我们把它提高一个档次,反复强调:
没有的证据表明任何更高的上述税率将允许征收更大的预算。显然,不同的机制决定税收收入。
商业环境
让我们来看看全球竞争力指数如何描述该国的生活质量:
这是一幅完全不同的画面。我们可以清楚地看到,拥有一个有竞争力且运转良好的经济将在所有指标上带来高质量的生活:
- 人均国内生产总值
- 人类发展指数
- 幸福指数
- Legatum 繁荣指数
- 社会进步指数
同样的道理也适用于创新:
基于创新的经济比不基于创新的经济有明显的优势。那“做生意”的轻松呢?
它讲述了同样的故事——让经营企业变得更容易,人们将会有更高的生活质量。
我们可以看到研发支出的类似效应:
在研发上投入更多的国家有望变得更加繁荣,但从散点图来看,这种关系似乎在 3%处趋于平缓。
然而,政府在教育上的支出却不是这样。
看到这个我很惊讶。对经济的影响相当轻微。甚至教育指数本身也几乎与支出没有任何关联。
显而易见,政府应该在教育上花费至少 4%的 GDP,但是这个部门似乎效率很低,因为它不能产生更强的关系。
然而,令人欣慰的是,R&D 教和社会进步之间至少存在某种关联:
政府效能
政府官员不会喜欢这个:
多么令人惊讶——一个运转良好、减少官僚主义的政府将为人民和企业带来更美好的生活。
但这还不是全部。让我们来看看腐败如何影响这个国家:
请记住,腐败感知指数的值越高,腐败越少。上面的数字告诉我们,如果这个国家腐败猖獗,这个国家基本上不可能繁荣昌盛,人民也不可能过上好日子。
与影子经济非常相似的故事是:
这一点和腐败将扼杀任何人均 GDP 高的机会和征收足够税收的希望。人们的生活将会变得更糟,企业将很难经营。从上面我们看到的数据来看,这是毫无疑问的。
不平等
既然这是一个热门话题,让我们来看看基尼系数,以及它是如何受到我们之前分析的方面的影响的。
更高的幸福、社会进步和繁荣并不意味着不平等会减少(反之亦然)。令人惊讶的是,更强大的经济与更小的收入不平等相关(人们可能会认为富裕国家的不平等更高)。
税收似乎对收入不平等没有任何影响:
这再次强烈表明(记住我们之前从数据中看到的东西)收入不平等与税率无关。
那么是什么影响了不平等呢?
这是我们的老朋友:腐败、官僚主义和影子经济。
繁荣国家的其他特征
在挖掘数据时,我注意到了一些其他有趣的事情。我们来看看下图:
繁荣的国家不一定勤劳,也不需要任何自然资源。此外,那些仍然停留在农业经济的国家,注定是贫穷的。
现代经济是以服务业为基础的,预计生活在农村地区的人会少得多。
此外,富裕国家的出生率远低于贫穷国家。
最后,具有高容忍度和包容性的国家(作为社会进步指数的子指数)比那些不具有高容忍度和包容性的国家做得好得多:
结论
显然,在我们得出结论之前,使用一些常识性的思维是很重要的。如果预期寿命与《营商环境报告》的排名呈正相关,这并不意味着寿命越长,营商环境就越好,但很可能恰恰相反——良好的营商环境会支持延长寿命的政策,比如更好的医疗保健。
此外,像竞争性的经济环境和生活质量这样的东西是相互加强的——更好的经济可以带来更高的生活质量,从而可以带来更好的经济效率。
考虑到这一点,一个繁荣国家的主要因素似乎是:
- 基于创新的经济
- 高效收税
- 高效政府
- 社会进步环境
- 竞争激烈的商业环境
此外,令人惊讶的是,税率似乎对生活的繁荣影响很小,而对 GDP 征收的税收却有明显的关系。这可能意味着税收政策更多的是关于有效的税收征收和支出方式,而不是税率本身。
此外,合理实施的税收与繁荣相关是有道理的,因为它使政府能够为教育和医疗保健等项目提供资金。
因此,每当有人要说我们需要增加(或减少)税收时,让他们知道这听起来像是一个廉价的把戏。相反,重点应该放在以下方面:
- 让创业变得更加容易
- 提高税收的效率和透明度
- 减少官僚作风
- 将亲信绳之以法
最后,如果你认为有错误(当然有可能),请提供你的数据和结果。
我感谢:
- Tautvydas Misiū nas 和 Andrius Zaveckas 对此进行了审查
- 马克·亚当·哈罗德与撒切尔的精彩视频
是什么让数据科学家变得有价值?
原文:https://towardsdatascience.com/what-makes-a-data-scientist-valuable-b723e6e814aa?source=collection_archive---------15-----------------------
学*如何增加自己的薪酬。从 2018 年 Kaggle ML & DS 调查中摘录的 124 条注意事项。
有没有想过应该做些什么来增加你的数据科学简历的份量?我们中的许多人已经很好地理解了什么是建立强大的数据科学职业生涯和增加薪酬的重要因素。就我个人而言,我从未见过系统的、基于数据的方法来解决这个问题。这就是建立一个模型来解释数据科学家对市场的价值的动机。有些结果是显而易见的,但其他许多结果可能真的会帮助你增加收入。
点击此处,计算您年收入超过 10 万美元的概率
根据数据估算薪酬
我们只能进行这种研究,因为 Kaggle 发布了来自第二次年度机器学*和数据科学调查的数据。该调查于 2018 年 10 月进行了为期一周的直播,共收到 23859 份回复。结果包括谁在处理数据的原始数据,不同行业的机器学*情况,以及新数据科学家进入该领域的最佳方式。
有了这些数据,我们想了解是什么影响了 Kaggler 的薪酬(我们称 Kaggler 为回答调查的任何人)。我们的想法是让你准确了解什么对市场更有价值,这样你就可以停止在没有良好投资回报(ROI)的事情上花费时间,并加快实现更高的薪酬。根据这些从数据中提取的见解,我希望有一天你会发现自己像 Babineaux 先生一样躺在一堆钱上。
Huel Babineaux, character from Breaking Bad/Better Call Saul. Credits: AMC
点击此处访问完整的研究报告,代码可复制
在进入模型本身之前,我们先做一些基本的探索性数据分析。首先让我们看看每个回答者的收入。
Data: Second Annual Machine Learning and Data Science Survey by Kaggle. Chart: Author
工资在较低的范围内累积(每年高达 1 万美元),在 10 万美元左右出现另一个高峰。有很多学生回答了这个调查,让我们看看他们挣多少钱?
Data: Second Annual Machine Learning and Data Science Survey by Kaggle. Chart: Author
不出所料,学生挣得没那么多,因为他们还没有工作。有了这些信息,我们可以从我们的数据中剔除学生,并定义收入最高的 20%的 Kagglers 挣多少钱。
Data: Second Annual Machine Learning and Data Science Survey by Kaggle. Chart: Author
根据这些数据,我们将建模的目标变量定义如下:
我们将计算卡格勒年收入超过 10 万美元的概率。
数据科学中的性别失衡
在继续讨论模型本身之前,我只想让你知道,收入最高的 20%的人的工资存在性别失衡,但收入最低的 80%的人的工资几乎相同。这意味着担任领导职务的男性比女性的工资高。见下表:
Data: Second Annual Machine Learning and Data Science Survey by Kaggle. Chart: Author
你可以在这里看到完整的 EDA。
预测模型
为了建立这个模型,我们从 50 个问题中的 29 个问题中提取了可以解释高工资的特征。这些问题总共产生了 138 个特征。在一些数据清理之后,我们运行了逻辑回归和随机森林模型。
评估后,逻辑回归表现更好。该模型还具有提取特征系数的优点。这有助于了解每个功能如何影响最终结果(收入最高的前 20%)。我们做了欠采样、交叉验证和网格搜索,所有代码都可供检查在这里。
下面我们展示了模型在测试数据上的表现以及前 20%和后 80%组的分数分布。
### -- ### -- LogisticRegression -- ### -- ###
**MODEL PERFORMANCE ON TEST DATA****Accuracy:** 0.8167438271604939
**AUC: ** 0.8963917030007695**Confusion Matrix: **
[[1817 411]
[ 64 300]]**Type 1 error:** 0.18447037701974867
**Type 2 error:** 0.17582417582417584
Model performance: prediction scores for Top 20% most paid and to Bottom 80%. Data: Second Annual Machine Learning and Data Science Survey by Kaggle. Chart: Author
增加收入的方法
在特征选择之后,我们的模型总共有 124 个特征。从它们的系数中,我们可以得出一些想法,可能会帮助你找到你的钱堆。
我们模型的截距是 0。这意味着每个人都从 0 分开始。然后,根据你对每个问题的回答,你可以在你的分数上加减“分”。
- 正系数:如果系数为正,意味着一个肯定的答案增加了属于前 20%的机会。
- 负系数:如果系数为负,那么正答案会降低属于前 20%的概率。
要点:要有积极向上的态度。不要做消极的事情。
Model coefficients. Data: Second Annual Machine Learning and Data Science Survey by Kaggle. Chart: Author
成为一名学生可能会带来挫败感和较低的薪水。出去找份工作!成为一名数据科学家是一个伟大的想法,但软件工程师赚得更多。为什么不成为一名 B 型数据科学家,并将模型部署到生产中呢?
Model coefficients. Data: Second Annual Machine Learning and Data Science Survey by Kaggle. Chart: Author
如果你想发财,就从学术/教育上跑。在 EDA 的完整研究中,你会看到与其他行业相比,学术/教育行业的平均薪酬最低,这一点得到了模型系数的证实。数据科学未来最重要的领域之一是工资最低的领域,这让我很难过。如果你想挣得更多,那么在计算机/技术行业工作会增加你成为收入最高的前 20%的可能性。
Model coefficients. Data: Second Annual Machine Learning and Data Science Survey by Kaggle. Chart: Author
显然,随着你越来越有经验,预计你会挣得更多。现实一点,仅仅有 2 年的经验,你是不可能进入前 20%的。
Model coefficients. Data: Second Annual Machine Learning and Data Science Survey by Kaggle. Chart: Author
当涉及到活动时,尝试构建原型或机器学*服务。探索 ML 在新领域的应用,并利用它来改进您的产品或工作流程,是接*年收入超过 10 万美元的方法。
另一方面,如果你工作的一个重要部分是做商业智能,分析和理解数据,以影响产品或商业决策,那么你应该期待赚得更少。如果您运行数据基础架构,情况也是如此。
使用云计算服务!*惯 AWS,或其他领先的云提供商,如谷歌或微软。
Model coefficients. Data: Second Annual Machine Learning and Data Science Survey by Kaggle. Chart: Author
有一些机器学*框架可能会增加你的市场价值。学*和使用 SparkMLlib、Xgboost 和 TensorFlow 会为你的简历增色不少。
Model coefficients. Data: Second Annual Machine Learning and Data Science Survey by Kaggle. Chart: Author
当谈到可能会增加你的薪酬的数据类型时,尝试学*时间序列和地理空间数据并从中获得经验。每个人都与数字数据打交道,所以学*基础知识,然后学*更高级的数据类型,如果你想在工资支票上有好消息的话。
Model coefficients. Data: Second Annual Machine Learning and Data Science Survey by Kaggle. Chart: Author
你知道如何做扰动重要性或情绪分析吗?如果你没有,那么是时候学*了。我希望这篇文章能给你一些关于模范生考试的提示。
要查看更多的结果和想法请查看 Kaggle 上的公共内核。在这里,我们给出了 124 个提示,帮助你在数据科学工作中找到你的钱。
也许有一天我们会发现自己躺在一堆钱上。但不像巴比诺先生,这将是我们的钱。这将是合法的。
对这篇文章有什么想法吗?
如果你有任何批评或建议来改进这个分析,请告诉我!
是什么让一首歌变得可爱?
原文:https://towardsdatascience.com/what-makes-a-song-likeable-dbfdb7abe404?source=collection_archive---------8-----------------------
使用数据可视化分析 Spotify 的 2017 年热门曲目
Photo by Heidi Sandstrom. on Unsplash
关于音乐选择是主观还是客观的争论由来已久。有些人,像杰克·弗莱明在他的观点专栏中,站在了客观的一方,说“在音乐分析中使用主观性会使其变得不重要。”他接着说,像其他艺术形式一样,我们也需要对音乐有一个判断的基础。在文章 音乐中的客观性与主观性:最终指南和解决方案 中,作者“致癌论者”试图给出一个平衡的观点,认为两种观点都有其优点和缺点。他提出了一个理论,“事实是,客观性和主观性是相互关联的,可能存在于一个光谱上”。主观性几乎不可能分析。但是如果从等式中去掉主观性,所有的艺术价值都可以被理性地剖析。
但是我想分析一首歌的另一个方面——流行度。不管歌曲的质量如何,也不管作曲和演奏的天赋如何,几乎不可能知道是什么让一首歌流行起来。作为一个音乐人,我一直很好奇到底是什么让一首歌受到大众的喜爱。为了找到答案,我决定使用数据可视化来寻找 Spotify 策划的 2017 年热门曲目列表中的模式和趋势。
Spotify 是当今领先的音乐流媒体应用程序之一,截至 2018 年 6 月,拥有超过 8300 万付费订户。他们根据用户播放歌曲的次数编制了一份年度排行榜。
Spotify 音频功能
对于他们平台上的每首歌曲,Spotify 都提供了十三个音频功能的数据。Spotify**Web API 开发者指南 对它们的定义如下:
- 可跳舞性:根据音乐元素的组合,包括速度、节奏稳定性、节拍强度和整体规律性,描述一首曲目是否适合跳舞。
- 价:描述一首曲目所传达的音乐积极性。高价曲目听起来更积极(例如,快乐、愉快、欣快),而低价曲目听起来更消极(例如,悲伤、沮丧、愤怒)。
- 能量:代表强度和活动的感知度量。通常,高能轨道感觉起来很快,很响,很嘈杂。例如,死亡金属具有高能量,而巴赫前奏曲在音阶上得分较低。
- 速度:轨道的整体估计速度,单位为每分钟节拍数(BPM)。在音乐术语中,速度是给定作品的速度或节奏,直接来源于平均节拍持续时间。
- 响度:一个音轨的整体响度,单位为分贝(dB)。响度值是整个轨道的平均值,可用于比较轨道的相对响度。
- 语音:检测音轨中是否存在语音。越是类似语音的录音(例如脱口秀、有声读物、诗歌),属性值就越接* 1.0。
- 乐器性:预测音轨是否不包含人声。“Ooh”和“aah”在这种情况下被视为乐器。Rap 或口语词轨道明显是“有声的”。
- 活跃度:检测录像中是否有观众。较高的活跃度值表示音轨被现场执行的概率增加。
- 声学:从 0.0 到 1.0 的音轨是否声学的置信度度量。
- Key: 估计的音轨整体 Key。整数映射到使用标准音高等级符号的音高。例如,0 = C,1 = C♯/D♭,2 = D,等等。
- 调式:表示音轨的调式(大调或小调),音阶的类型,其旋律内容来源于此。大调用 1 表示,小调用 0 表示。
- 持续时间:以毫秒为单位的音轨持续时间。
- 拍号:一个音轨的估计整体拍号。拍号(拍子)是一种符号约定,用于指定每个小节(或小节)中有多少拍。
数据集
我发现,我需要从 Spotify 获得的数据已经可以在 Kaggle 上作为数据集获得,由 Nadin Tamer 撰写的“2017顶级 Spotify 曲目”。我检查了数据,发现它已经被清理,没有验证错误。它缺少一个用于歌曲排名的字段,这是我添加的。
初始探索
在上述参数中,Mode 是二进制值 1 或 0,表示音轨的模态(大调或小调),Key 是绝对整数值,表示歌曲的音阶(C =0,C# = 1,等等)。)因此,我保留了这 2 个参数,并用剩余的 11 个参数创建了散点图矩阵。
我创建散点图矩阵有两个主要目的:
- 看看参数之间有没有关系。
- 找到明显的趋势和模式,以便更好地确定重点领域。
Scatterplot matrix of the Audio Feature parameters
散点图中的一些观察结果如下:
- 拍号——几乎所有的歌曲似乎都有一个共同的 4/4 拍号。因此,我不再考虑这个参数。
- 乐器性—大多数歌曲的值似乎接*或等于 0。再次删除参数。
- 能量和响度似乎成正比。
- 价似乎与可跳性、能量和响度成正比。
根据 API 指南中的参数定义,速度和响度似乎是低级参数,用于计算其他高级参数,如价、能量和可跳舞性。因此,为了减少类似的参数,我将在接下来的步骤中忽略速度和响度。我也放弃了持续时间参数,因为大多数曲目似乎都在 200 秒或 3:20 分钟左右。
初始草图
现在我只剩下六个参数,我勾画了一些探索如何理解数据的方法,如密度图或绘制每个参数相对于等级的变化。但是这些都不能产生吸引人的视觉效果,以吸引人的方式向观众传达信息。
当我在寻找表示多个参数的方法时,我想起了雷达图!
它们简单易懂,一眼就能看出所有六个参数。这正是我所需要的!
实现
我最初在 Tableau 上实现它,但它看起来很无聊。视觉吸引力是我的项目的一个重要方面。因此,当我在网上搜索不仅实现雷达图,而且以一种漂亮的方式实现它的方法时,我偶然发现了 Nadieh Bremer 的博客 Visual Cinnamon 和她的关于她重新设计 D3 的雷达图的文章,我知道就是它了!在麻省理工学院的许可下,她的重新设计的实施细节可以在 http://bl.ocks.org/nbremer/21746a9668ffdf6d8242 找到。
这篇博文是 2015 年的,因此代码是针对更老版本的 D3.js(v3)的。我以前涉猎过 Javascript,但对 D3 完全陌生,所以更新 API 和让代码在 v5 上工作需要一些争论。我还不得不花一些时间格式化数据。
我把它设置成从排名 1 到 100 一次显示一首歌。第一眼的时间到了..
既然图表完全按照我想要的方式工作,是时候用它来引出一些见解了。为了做到这一点,我决定看看如果我重叠多首歌曲来寻找参数的趋势会发生什么。为了防止过度拥挤,我从排名前 10 的歌曲开始。
见解
你已经可以开始看到前 10 首歌曲中出现的模式:
- 前 10 名歌曲的可舞性都很高(60%以上)!
- 除了排名第一的歌曲(Shape of You),其他所有歌曲的音质都很低。
- 所有前 10 名的歌曲都缺乏活力和语音,也就是说,所有的歌曲都是录音版本,只有很少的部分是语音多音乐少。
- 所有的歌曲都是相当中高能量的(40-80%)
- 化合价相当分散。
P.S. Medium 仅支持图像,因此是 gif。请点击此处查看实际的互动可视化效果。
为了对此进行扩展,我还创建了一种方法来查看从排名 1 到 100 的 10 人组:
最终见解
- 除了少数例外,总体而言,可跳舞性似乎仍有很高的价值。
- 现在我们可以看到更多音质更好的歌曲。但仍不超过 60–70%左右。
- 活跃度和语速仍然一致很低。
- 能量似乎仍处于中高水平。
- 化合价仍然相当分散,但总体上看起来在中高级区域更为普遍。
结论
想做一首热门歌曲?为了增加你的机会,让它成为一个高能量,电子,舞蹈号码!保持一个简单的 4/4 拍号,不需要把事情复杂化。尝试将歌曲的持续时间保持在最佳的 3:20 分钟左右。确保它是在录音室录制的,而不是现场的,在你的歌曲中有声音,但不要太“言语化”,并且不会伤害到它的高价,即快乐,愉快,和/或欣快。
你可以在这里 查看最终的交互可视化 。
非常,非常感谢Karthik Badam给予的所有指导和支持,并感谢Nadieh Bremer为她与 D3.js. 的精彩而富有洞察力和鼓舞人心的工作,没有他们就不可能有这个项目!
是什么成就了一次成功的 Kickstarter 活动?
原文:https://towardsdatascience.com/what-makes-a-successful-kickstarter-campaign-ad36fb3eaf69?source=collection_archive---------2-----------------------
分析 2000 多个众筹项目的主要发现
Image from DepositPhotos
自 2009 年以来,众筹一直是企业家和个人测试他们的想法、提高意识和为他们的项目获得初始资金的热门选择。紧随大萧条之后,像 Kickstarter 和 Indiegogo 这样的公司已经进行了国际扩张,并实现了数亿美元的估值。
仅 Kickstarter 就支持了超过 130,000 个项目,捐款总额超过 1,000,000 美元 3B。
我很想知道最成功的活动有哪些特征,并希望应用我在学校学到的一些数据科学技术,所以今年夏天我分析了 2000 多个 Kickstarter 活动,并建立了一个模型来预测特定活动是否会成功。
我从 Kaggle 的 Kickstarter 数据集开始,添加了一些额外的功能,将一个活动的标题/广告词与 4000 个最成功的活动的标题/广告词进行比较。
以下是我在分析中发现的一些有趣的事情:
最受支持的活动
Most common words used in the descriptions of the 4000 Most Backed Campaigns
在最受支持的活动中,最常用的词是游戏、世界、新、设计和制造。然而,事实证明,成功和失败的竞选活动都频繁使用这些词,所以竞选活动描述的内容并不能很好地预测竞选活动的成功。
类别对比
成功率最高的 5 个类别是漫画、戏剧、舞蹈、音乐和设计。食品、时尚、技术、工艺和新闻是最不成功的类别。我注意到,比较成功的类别通常是容易与他人分享的东西(如舞蹈或音乐),而不太成功的类别通常更难分享。
预测竞选成功
我构建的最准确的模型,在 75%的情况下正确预测了营销活动的成功,使用了以下功能(按重要性排序):
- 项目负责人之前支持的活动数量(与活动成功正相关)
- 活动简介中的图片数量(与活动成功正相关)
- 资金目标(与活动成功负相关)
- 类别(相关性取决于特定的类别)
- 活动持续时间(与活动成功负相关)
- 项目负责人之前创建的活动数量(与活动成功正相关)
- 项目合作者数量(与活动成功正相关)
- 活动标题的长度(与活动成功负相关)
- 标题中与 4000 个最受支持的活动匹配的字数(与活动成功负相关)
这些结果确实加强了 Kickstarter 的社区方面,因为活动成功的最佳预测因素是用户捐赠的活动数量。不出所料,如果你过去发起过 Kickstarter 活动,你更有可能成功。
除了这个模型,我还开发了一个 web 应用程序,让人们可以输入关于他们竞选活动的信息,并获得关于竞选是否会成功的预测,以及提高他们胜算的建议。你可以去 https://nbenavides.shinyapps.io/kickstarter/的看看。
是什么让 LightGBM 快如闪电?
原文:https://towardsdatascience.com/what-makes-lightgbm-lightning-fast-a27cf0d9785e?source=collection_archive---------4-----------------------
理解戈斯和 EFB:light GBM 的核心支柱
Source : http://arogozhnikov.github.io/2016/06/24/gradient_boosting_explained.html
该员额的结构如下:
1.GBM 基础。
2.GBM 的计算瓶颈。
3.LightGBM 对这些瓶颈的优化
GBM 基础——梯度下降、升压和 GBDT。
什么是梯度下降?
Gradient descent graph : Example of working with the gradient descent method
这是一种优化技术,通过以固定步长跟随斜率来降低损失函数。
什么是助推?
Boosting 是一种顺序集成技术,其中难以分类的实例被赋予更多的权重。这实质上意味着后续的学*者将更加重视学*错误分类的数据实例。最终模型将是 n 个弱学*者的加权平均值。
https://quantdare.com/what-is-the-difference-between-bagging-and-boosting/
随后的学*者更加重视训练不足/错误分类的样本。点大小的变化代表了赋予该实例的权重。点的大小越大,分配给它的权重就越大。请注意,所有模型都是连续的。
什么是 GBDT?
GBDT(Gradient Boosting Decision Tree)是一种顺序训练的决策树的集成模型(即 Boosting 的集成模型)。在每次迭代中,GBDT 通过拟合残差(到当前迭代为止的误差)来学*决策树。这意味着每个随后的学*者试图学*实际输出和预测的加权和之间的差异,直到迭代之前。使用梯度法可以使误差最小化。
这就把我们带到了文章的第二部分。GBDT 最昂贵的操作是训练决策树,最耗时的任务是寻找最佳分裂点。
什么是拆分点?
Source : https://machinelearningmastery.com/classification-and-regression-trees-for-machine-learning/
分割点是特征值,取决于在树节点上分割的数据。在上面的例子中,数据分割发生在节点 1 的高度(180)和节点 2 的重量(80)。基于信息增益从候选分裂池中选择最佳分裂。换句话说,选择具有最大信息增益的分裂点。
最佳分割点是如何产生的?
分裂查找算法用于查找候选分裂。
最流行的分裂查找算法之一是 预排序算法 ,它列举了预排序值上所有可能的分裂点。这种方法很简单,但是在计算能力和内存方面效率很低。
第二种方法是基于 直方图的算法 ,该算法在训练期间将连续的特征桶入离散的箱中以构建特征直方图。直方图构建的开销为 O(#data * #feature),分裂点查找的开销为 O(#bin * #feature)。由于 bin < <数据直方图的建立将支配计算的复杂性。
Binning example : Binning has greatly reduced the number of candidate splits
与使用 GBM 的 sklearn 相比,LightGBM 和 xgboost 都使用基于直方图的分裂查找(这是它速度慢的原因之一)。让我们从这篇文章的症结开始
是什么让 LightGBM 与众不同?
LightGBM 旨在通过使用 【高斯】 和 EFB 对数据和特征进行下采样来降低直方图构建的复杂度。 这将降低 (O(data2 * bundles)) 的复杂度,其中 data2 <数据和 bundles < <特性。
高斯是什么?
GOSS(Gradient Based One Side Sampling)是一种基于梯度对样本进行下采样的新型采样方法。正如我们所知,梯度小的实例训练良好(训练误差小),梯度大的实例训练不足。一种简单的下采样方法是通过只关注具有大梯度的实例来丢弃具有小梯度的实例,但是这将改变数据分布。简而言之,GOSS 保留具有大梯度的实例,同时对具有小梯度的实例执行随机采样。
- 高斯计算的直观步骤
1。根据绝对梯度以降序对实例进行排序
2。选择前 a * 100%个实例。【欠训练/大梯度】
3。从其余数据中随机抽取 b * 100%的实例。这将通过因子 b ( b < 1 )
4 减少训练有素的例子的贡献。没有点 3,具有小梯度的样本计数将是 1-a(目前是 b)。为了保持原始分布光,GBM 通过常数(1-a)/b 放大具有小梯度的样本的贡献,以将更多焦点放在训练不足的实例上。这将更多的注意力放在训练不足的实例上,而不会改变太多的数据分布。
2。 形式算法为戈斯
Algorithm 2 from the original paper
什么是 EFB(独家功能捆绑)?
记住直方图构建需要 O(#data * #feature)。如果我们能够向下采样#特性,我们将加快树学*。LightGBM 通过将特性捆绑在一起来实现这一点。我们通常处理高维数据。这种数据有许多相互排斥的特征,即它们从不同时取零值。LightGBM 安全地识别这样的特征,并将它们捆绑成单个特征,以将复杂度降低到 O(#data * #bundle) 其中#bundle < < #feature。
EFB 的第 1 部分:识别可以捆绑在一起的特性
创建功能包的直观说明
- 构建一个带加权边(衡量要素间冲突的标准)的图。冲突是具有重叠非零值的排他性特征的比例的度量。
- 按非零实例数降序对要素进行排序。
- 遍历特征的有序列表,并将该特征分配给现有束(如果冲突< threshold) or create a new bundle (if conflict >阈值)。
捆绑特性的形式化算法
Algorithm 3 from the official paper
EFB 第二部分:特征合并算法
我们将通过一个例子来理解合并特征背后的直觉。但在此之前,让我们先回答以下问题:
EFB 在实现什么?
EFB 正在合并这些功能,以降低训练的复杂性。为了保持合并的可逆性,我们将把独有的特征保存在不同的容器中。
合并的例子
在下面的示例中,您可以看到功能 1 和功能 2 是互斥的。为了实现不重叠的桶,我们增加了特征 1 到特征 2 的包大小。这确保了捆绑特征(特征 1 和特征 2)的非零数据点位于不同的桶中。在 feature_bundle 中,存储桶 1 到 4 包含 feature1 的非零实例,存储桶 5、6 包含 feature2 的非零实例。
合并特征的直观说明
- 计算要添加到特征包中每个特征的偏移量。
- 迭代每个数据实例和特征。
- 对于所有特性都为零的情况,将新桶初始化为零。
- 通过将各自的偏移量添加到该特征的原始桶中,为特征的每个非零实例计算新桶。
特征合并的形式算法
Algorithm 4 from the official paper
至此,我们已经涵盖了原始论文中提出的大多数优化。我希望这篇文章能让你对 LightGBM 库的核心概念有所了解。至此,我完成了写博客的第一次尝试。请在下面分享您的想法、反馈或建议。
参考文献
- https://papers . nips . cc/paper/6907-light GBM-a-high-efficient-gradient-boosting-decision-tree . pdf
- https://quant dare . com/bagging-and-boosting 的区别是什么/
- http://ml explained . com/2018/01/05/light GBM-and-xgboost-explained/
- https://github.com/Microsoft/LightGBM
重要的不是衡量
原文:https://towardsdatascience.com/what-matters-isnt-measured-dacf77f1a0a7?source=collection_archive---------10-----------------------
我们衡量什么很重要
重要的是我们衡量什么……或者说,重要的是我们能够衡量的是被衡量的。我们衡量的东西决定了什么是重要的。如果重要的东西不能被衡量,我们使用代理,然后成为重要的东西。
重要与我们衡量它的能力相关:我们做得有多好?我们达到目标了吗?我们如何达到标准?
我们怎么回事?
你必须这么高才能骑…
Ways we measure up. Collage images from (counterclockwise from top) Daniel Oines, Google Finance, Nancy L. Stockdale, and Jaime
这些措施旨在客观地反映事实。
4 绝对大于 3。10 比 7 多。
4.0 比 3.6 好……看尺度或者范围。这不是绝对的,而是由易犯错误的人和他们的选择性感知选择的。
度量并不代表全部事实,而是其中的一部分。对真相的不完整描述。
衡量是有帮助的,但不是绝对的。尤其是在人类负责制定衡量标准的时候。只要人类参与其中,总会有一些主观因素,比如他们选择什么作为他们的标准。
我写这封信是因为我关心我们已经放弃了多少权力给那些易错的数字和衡量价值、成功和价值的标准。我担心我们遗漏了描绘不同画面的替代措施。数据科学、大数据、人工智能风靡一时,然而,我们的社会缺乏基本的数据素养——关于数据能做什么和不能做什么的关键区别——最终(并迅速)会咬我们的屁股。我写作是因为数据并不可怕,它和收集(或编写)它的人一样容易出错……但这并不意味着我们不应该使用它。
我写这篇文章是因为我希望我们在采矿时要有意识,用数据来衡量自己。
我们衡量的东西很重要
我感到很幸运,在我的职业生涯中发现了如此多的数据失误。我感到幸运的是,我对数字绝对优势的谬论有着发自内心的了解;跨部门,跨意图,跨国家。这是我个人最喜欢的一个例子:
几年前,我在印度帮助一个新生的非营利组织为捐赠者评估业绩。达到目标是确保业务资金持续流动的重要途径。任务很明确:帮助农民合作社组织起来,并与主要制造商谈判合同。例如,我们会教导一群种植番茄的农民提高作物的质量和产量,或者帮助他们与当地番茄酱生产商谈判供货合同,从而为农民提供稳定的收入,为生产商提供稳定的原材料。双赢!
要求我们报告的一些指标似乎很直接:接触到的农民家庭数量、举办的研讨会数量、每次研讨会的平均出席人数、有多少农民参加了多次研讨会。其他人感到虚幻:种子的平均价格,农业设备的平均价格,或者受影响社区的女性识字率。
有些措施感觉不可能准确收集。比如食物腐败率逐年下降。捐助者实际上是想知道我们是否鼓励使用冷藏车将集体的产品运送给制造商。但他们问的不是这个。他们要求一个在年度报告中和对其他基金会和捐赠者来说听起来更性感的数字。“呜!你看到今年我们糟蹋的食物少了多少了吗!”
预期结果的形成方式极大地改变了信息的收集方式。那么,我应该给那个农民一个拍纸簿和一张纸,让他数一数在去工厂的路上有多少西红柿坏了?这不是我们所提供的正确衡量标准,我认为这甚至不能很好地衡量我们所产生的有益影响。
作为一个题外话(希望是另一篇文章的主题),非营利组织与捐助者和整个社会的这种有害关系,在这种关系中,非营利组织被认为是低效、腐败和管理不善的,这使得第三部门失去了权力,心灰意冷,并陷入了永久的匮乏对话中。使命和价值观可以吸引最优秀和最聪明的人,但这些组织很难留住他们,让许多人筋疲力尽,因为我们,社会,这些人从他们提供公共产品的努力中获得了最大的利益,如安全的街道,医疗保健和教育——坦率地说——有时像对待狗屎一样对待他们。
也许,不是作为一个题外话,是因为我们用错误的标准来衡量他们。
我们的感知限制了我们可以测量的范围
Before and after a shift in perspective. Part of the “Our Senses” exhibit at the Natural History Museum in NYC
数字是一个方便的抽象概念——但是通过以更短的形式映射复杂性,我们错过了细微的差别。在我们无休止地追求任意“价值”的过程中,我们把自己客体化了,把我们所做的工作和我们为他人所做的贡献客体化了,我们正在走向社会、经济和生态的毁灭。很可能不是过度夸张。
但是如果我们没有用正确的标准来衡量自己和他人呢?如果我们没有更合适的测量方法,因为我们还没有找到一种方法来计算对品质的感知,如:爱、同情、宽恕、怜悯、慷慨、感激,以及无数其他我们还没有找到方法来评价或测量的价值。
“We can only sense a tiny fraction of the information around us…” What more are we missing? Part of the “Our Senses” exhibit at the Natural History Museum in NYC
同样,我们已经建立了工具来帮助我们在可见光光谱之外,或者在我们的听觉范围之外感知、构想和测量,所以我们也可能不得不发现、重新想象或重新解释对我们来说重要的替代措施。
它始于接受我们认为是真理的标准并不总是看起来那样。
让你的测量变得重要。让你衡量的东西变得重要…因为它很重要,我在某种程度上
在不平衡数据集上评估模型应该使用什么指标?(精确度+召回率或 ROC=TPR+FPR)
原文:https://towardsdatascience.com/what-metrics-should-we-use-on-imbalanced-data-set-precision-recall-roc-e2e79252aeba?source=collection_archive---------0-----------------------
我一直认为度量的主题有点令人困惑,特别是当数据集不平衡时(这在我们的常见问题中经常发生)。为了澄清一些事情,我决定用不同类型的指标测试几个简单的不平衡数据集的例子,看看哪个更正确地反映了模型性能——ROC 曲线指标——TPR 和 FPR 或精度或召回。
定义
所以让我们从提醒自己这些定义开始。
在 ROC 曲线中我们看:
TPR(真阳性率)= #真阳性/ #阳性=召回= TP / (TP+FN)
FPR(假阳性率)= #假阳性/ #阴性= FP / (FP+TN)
这里我们将关注单点的 TPR(真阳性率)和 FPR(假阳性率)(这将表明由 TPR 和 FPR 通过各种概率阈值组成的 ROC 曲线的总体表现)。
精度和召回率分别是:
精度=#真阳性/ #预测阳性= TP/(TP+FP)
召回= #真阳性/ #阳性= TP / (TP+FN)
有什么区别?
召回率和真阳性率(TPR)是完全一样的。所以区别在于精度和假阳性率。
这两种度量的主要区别在于,精度分母包含假阳性,而假阳性率分母包含真阴性。【precision 衡量分类为阳性的样本实际为阳性的概率,而假阳性率衡量阴性样本中假阳性的比率。
如果有大量阴性样本,精确度可能会更高
如果阴性样本的数量非常大(也称为不平衡数据集),假阳性率增加得更慢。因为真正的负值(在 fpr 分母中— (FP+TN))可能会非常高,使这个度量变小。
但是,Precision 不受大量阴性样本的影响,因为它测量预测为阳性的样本中真正阳性的样本数(TP+FP)。
精度在正类中比在负类中更受关注,它实际上测量正确检测正值的概率,而 FPR 和 TPR (ROC 度量)测量区分类的能力。
例子
这些例子只是用直观的图像来说明这些指标的一种方式。
为了可视化的目的,这里有一个简单的函数,它画出了一个给定模型的决策区域。
**def plot_model_boundaries**(model, xmin=0, xmax=1.5, ymin=0, ymax=1.5, npoints=40):
xx = np.linspace(xmin, xmax, npoints)
yy = np.linspace(ymin, ymax, npoints)
xv, yv = np.meshgrid(xx, yy)
xv, yv = xv.flatten(), yv.flatten()
labels = model.predict(np.c_[xv,yv])
plt.scatter(xv[labels==1],yv[labels==1],color='r', alpha=0.02, marker='o', s=300)
plt.scatter(xv[labels==0],yv[labels==0],color='b', alpha=0.02, marker='o', s=300)
plt.ylim([xmin, xmax])
plt.xlim([ymin, ymax])
我创建了一个非常简单的数据集(10 个点),并训练了一个线性 SVM 模型。下图是数据集和模型的完美决策区域。
**from** matplotlib **import** pyplot **as** plt
**from** sklearn.svm **import** LinearSVC
**from** sklearn.metrics **import** precision_score, recall_score, roc_curvenp.random.seed(1)
x = np.concatenate([np.zeros((8, 2)), np.zeros((1,2)), np.zeros((1,2))]) + 0.8*np.random.rand(10,2)
x[-1,0]+=1
x[-1,-1]+=1
y = np.concatenate([np.ones(9), np.zeros(1)])
model = LinearSVC()
model.fit(x,y)
predicted_labels = model.predict(x)
plot_model_boundaries(model, xmin=0, xmax=1.5, ymin=0, ymax=1.5)
plt.scatter(x[y==0,0],x[y==0,1], color='b')
plt.scatter(x[y==1,0],x[y==1,1], color='r');
fpr, tpr, thresholds = roc_curve(y, predicted_labels)
plt.title("precision = {}, recall = {}, fpr = {}, tpr = {}".format(
precision_score(y, predicted_labels), recall_score(y, predicted_labels), fpr[0], tpr[0]));
My simple data set and the model decision region
示例#1 —大多数阳性样本和—所有阳性样本都被检测到,但也有假阳性— ROC 是更好的度量
我们在测试数据集中有 10 个样本。9 个样本为阳性,1 个为阴性。
正如我们之前看到的——在完美模型的情况下,所有指标都是完美的,但现在我们来看一个天真的模型,它预测一切都是积极的。
在这种情况下我们的基本度量是: TP = 9,FP = 1,TN = 0,FN = 0。然后我们可以计算高级指标:
精度 = TP/(TP+FP) = 0.9,召回 = TP/(TP+FN)= 1.0。在这种情况下,准确率和召回率都很高,但是我们有一个很差的分类器。
TPR = TP/(TP+FN) = 1.0, FPR = FP/(FP+TN) = 1.0。
因为 FPR 很高,我们可以识别出这不是一个好的分类器。
np.random.seed(1)
x = np.concatenate([np.zeros((8, 2)), np.zeros((1,2)), np.zeros((1,2))]) + 1.2*np.random.rand(10,2)
x[-1,0]+=1
x[-1,-1]+=1
y = np.concatenate([np.ones(9), np.zeros(1)])
model = LinearSVC()
model.fit(x,y)
predicted_labels = model.predict(x)
plot_model_boundaries(model, xmin=0, xmax=1.5, ymin=0, ymax=1.5)
plt.scatter(x[y==0,0],x[y==0,1], color='b')
plt.scatter(x[y==1,0],x[y==1,1], color='r');
fpr, tpr, thresholds = roc_curve(y, predicted_labels)
plt.title("precision = {}, recall = {}, fpr = {}, tpr = {}".format(
precision_score(y, predicted_labels), recall_score(y, predicted_labels), fpr[1], tpr[1]));
The classifier predicts all the labels as positive
示例# 1—具有相反标签的相同数据集—两个指标都为 0,因为没有“检测”
现在,我们交换标签——9 个样本是阴性,1 个是阳性。我们有一个预测一切负面的模型。我们现在的基本度量是: TP = 0,FP = 0,TN = 9,FN = 1。因为没有真阳性和假阳性,所以高级指标都是零。
np.random.seed(1)
x = np.concatenate([np.zeros((8, 2)), np.zeros((1,2)), np.zeros((1,2))]) + 1.2*np.random.rand(10,2)
x[-1,0]+=1
x[-1,-1]+=1
y = np.concatenate([np.zeros(9), np.ones(1)])
model = LinearSVC()
model.fit(x,y)
predicted_labels = model.predict(x)
plot_model_boundaries(model, xmin=0, xmax=1.5, ymin=0, ymax=1.5)
plt.scatter(x[y==0,0],x[y==0,1], color='b')
plt.scatter(x[y==1,0],x[y==1,1], color='r');
fpr, tpr, thresholds = roc_curve(y, predicted_labels)
plt.title("precision = {}, recall = {}, fpr = {}, tpr = {}".format(
precision_score(y, predicted_labels), recall_score(y, predicted_labels), fpr[0], tpr[0]));
The classifier predicts all the labels as negatives so all the metrics are zeros
示例 2 —大多数阳性样本—所有阳性样本都被检测到,但也有假阳性— ROC 是一个更好的指标
该示例类似于示例#1,并且显示了基本相同的内容。
在这种情况下,8 个样本为阳性,2 个为阴性。
该模型预测 9 个样品为阳性(8 个真阳性和 1 个阴性),1 个为阴性。
基本度量是: TP = 8,FP = 1,TN = 1,FN = 0。
高级指标包括:
精度= TP/(TP+FP) = 8/9 = 0.89,召回率= TP/(TP+FN)= 1。 准确率和召回率都很高,因为在正类上表现不错。
TPR = TP/(TP+FN) = 1,FPR = FP/(FP+TN) = 1/2 = 0.5。 假阳性率是 0.5,这是相当高的,因为我们在两个阴性中有 1 个假阳性——这是很多的!请注意,高 FPR 实际上与负面类别的低回忆是一回事。
x = np.concatenate([np.zeros((8, 2)), np.zeros((1,2)), np.zeros((1,2))]) + 0.9*np.random.rand(10,2)
x[-1,0]+=1
x[-1,-1]+=1
y = np.concatenate([np.zeros(1), np.ones(8), np.zeros(1)])
model = LinearSVC()
model.fit(x,y)
predicted_labels = model.predict(x)
plot_model_boundaries(model, xmin=0, xmax=2, ymin=0, ymax=2)
plt.scatter(x[y==0,0],x[y==0,1], color='b')
plt.scatter(x[y==1,0],x[y==1,1], color='r');
fpr, tpr, thresholds = roc_curve(y, predicted_labels)
plt.title("precision = {:.2f}, recall = {}, fpr = {}, tpr = {}".format(
precision_score(y, predicted_labels), recall_score(y, predicted_labels), fpr[1], tpr[1]));
One negative sample is classified correctly as negative and the other is classified as positive — this caused a small decrease in precision and a relatively high value in FPR
示例 2 —相反的标签—在这种情况下,两个指标是相同的
现在 8 个样本为阴性,2 个为阳性。我们有一个模型,除了一个阳性样本(实际上是阳性的)之外,它预测了所有的阴性样本。
基本度量是:TP = 1,FP = 0,TN = 8,FN = 1。
高级指标包括:
精度= TP/(TP+FP) = 1,召回率= TP/(TP+FN)= 1/(1+1) = 0.5。
TPR = TP/(TP+FN) = 1/2 = 0.5,FPR = FP/(FP+TN) = 0。
在这种情况下,两个指标给出了相同的信息。
x = np.concatenate([np.zeros((8, 2)), np.zeros((1,2)), np.zeros((1,2))]) + 0.9*np.random.rand(10,2)
x[-1,0]+=1
x[-1,-1]+=1
y = np.concatenate([np.ones(1), np.zeros(8), np.ones(1)])
model = LinearSVC()
model.fit(x,y)
predicted_labels = model.predict(x)
plot_model_boundaries(model, xmin=0, xmax=2, ymin=0, ymax=2)
plt.scatter(x[y==0,0],x[y==0,1], color=’b’)
plt.scatter(x[y==1,0],x[y==1,1], color=’r’);
fpr, tpr, thresholds = roc_curve(y, predicted_labels)
plt.title(“precision = {:.2f}, recall = {}, fpr = {}, tpr = {}”.format(
precision_score(y, predicted_labels), recall_score(y, predicted_labels), fpr[0], tpr[0]));
One positive sample is detected correctly and the other is not
示例#3 —检测到大多数阳性样本,而不是所有阳性样本—在这种情况下,两个指标相同
现在,9 个样本呈阳性,1 个呈阴性。该模型预测 7 个样本为阳性(全部为阳性),3 个为阴性。
基本度量有: TP = 7,FP = 0,TN = 1,FN = 2。
高级指标包括:
精度= TP/(TP+FP) = 1,召回率= TP/(TP+FN)= 7/9 = 0.78 精度和召回率都很高,因为在正类上表现不错。
TPR = TP/(TP+FN)= 7/9 = 0.78,FPR = FP/(FP+TN) = 0。
在这种情况下,两个指标给出了相似的结果。
np.random.seed(1)
x = np.concatenate([np.zeros((8, 2)), np.zeros((1,2)), np.zeros((1,2))]) + 0.9*np.random.rand(10,2)
x[-1,0]+=1
x[-1,-1]+=1
x[-2,0]+=0.8
x[-2,-1]+=0.8
x[-3,0]+=0.8
x[-3,-1]+=0.8
y = np.concatenate([np.zeros(7), np.ones(3)])
y = 1-y
model = LinearSVC()
model.fit(x,y)
y = np.concatenate([np.zeros(9), np.ones(1)])
y = 1-y
predicted_labels = model.predict(x)
plot_model_boundaries(model, xmin=0, xmax=2, ymin=0, ymax=2)
plt.scatter(x[y==0,0],x[y==0,1], color='b')
plt.scatter(x[y==1,0],x[y==1,1], color='r');
fpr, tpr, thresholds = roc_curve(y, predicted_labels)
plt.title("precision = {:.2f}, recall = {:.2f}, fpr = {:.2f}, tpr = {:.2f}".format(
precision_score(y, predicted_labels), recall_score(y, predicted_labels), fpr[0], tpr[0]));
Both metrics are the same in this case
示例 3 —相反的标签—检测到大部分阴性样本,而不是所有阳性样本—精确度和召回率更高
现在我们交换标签——9 个样本为阴性,1 个为阳性。
模型预测 3 个样本为阳性(实际上只有一个为阳性),7 个为阴性。
基本度量是: TP = 1,FP = 2,TN = 7,FN = 0。
高级指标包括:
精度= TP/(TP+FP) = 0.33,召回率= TP/(TP+FN)= 1。
TPR = TP/(TP+FN) = 1,FPR = FP/(FP+TN) = 2/9 = 0.22。
在这种情况下,精度很低,FPR 也没有我们希望的那么高。由于不平衡的数据集,FPR 不高,因为我们有很多真正的否定。在这种情况下,较差的检测能力最好地反映在精度上。
np.random.seed(1)
x = np.concatenate([np.zeros((8, 2)), np.zeros((1,2)), np.zeros((1,2))]) + 0.9*np.random.rand(10,2)
x[-1,0]+=1
x[-1,-1]+=1
x[-2,0]+=0.8
x[-2,-1]+=0.8
x[-3,0]+=0.8
x[-3,-1]+=0.8
y = np.concatenate([np.zeros(7), np.ones(3)])
model = LinearSVC()
model.fit(x,y)
y = np.concatenate([np.zeros(9), np.ones(1)])
predicted_labels = model.predict(x)
plot_model_boundaries(model, xmin=0, xmax=2, ymin=0, ymax=2)
plt.scatter(x[y==0,0],x[y==0,1], color='b')
plt.scatter(x[y==1,0],x[y==1,1], color='r');
fpr, tpr, thresholds = roc_curve(y, predicted_labels)
plt.title("precision = {:.2f}, recall = {}, fpr = {:.2f}, tpr = {}".format(
precision_score(y, predicted_labels), recall_score(y, predicted_labels), fpr[1], tpr[1]));
In this case the poor detection ability is reflected best in the precision while the FPR is relatively not that high because of the large amount of negative samples
度量选择的最终直觉
- 使用精度和召回率关注小阳性类别— 当阳性类别较小时,正确检测阳性样本的能力是我们的主要关注点(正确检测阴性样本对问题不太重要)时,我们应该使用精度和召回率。
- 当两个类别的检测同等重要时使用 ROC—当我们想要对两个类别的预测能力给予同等的权重时,我们应该查看 ROC 曲线。
- 当阳性类别占多数时使用 ROC,或者交换标签并使用精度和召回率— 当阳性类别较大时,我们可能应该使用 ROC 指标,因为精度和召回率将主要反映阳性类别的预测能力,而不是阴性类别的预测能力,后者由于样本数量较少自然更难检测。如果负面类别(在这种情况下是少数)更重要,我们可以交换标签并使用 precision 和 recall(正如我们在上面的例子中看到的那样——交换标签可以改变一切)。
什么情节?为什么有这个情节,为什么没有!
原文:https://towardsdatascience.com/what-plot-why-this-plot-and-why-not-9508a0cb35ea?source=collection_archive---------2-----------------------
因此,在我上一篇文章发表一年后,我来到了这里。发生了各种各样的事情,但有一件事是不变的,就是这个问题“嘿,我应该使用哪个情节?”这是我从我的学生那里收到的一个特别的问题,我在审查 Udacity 的项目时也发现了对 plot 的误用。
所以今天,我将涵盖一些常见的错误,在策划阴谋。
作为一名数据分析师/科学家,知道哪个图适合数据是非常重要的!
让我们以这个非常简单的非常著名的葡萄酒数据集为例。
数据集由不同的数据点组成,包括硫酸盐、残糖、密度、酒精(%)以及最后但并非最不重要的质量。质量基本上是葡萄酒消费者给出的一个等级,这最终使它成为一个有序的数据点。有序数据点的直方图错误!一个关键的错误是,人们试图通过改变宽度和添加颜色来适应和美化情节,但是你猜怎么着?这是不对的。这个博客是关于应该在什么时候使用哪个情节?
条形图与直方图
当世界为各种不同的事情而争斗的时候,学*者在处理这个特殊的问题上几乎没有问题。许多学*者试图以这样的方式调整他们的直方图,使得图形看起来很棒。但是真正的问题是直方图应该只用于连续变量。直方图的基本思想是显示连续点集的频率分布,这将有助于读者理解点的分布。你甚至可以把它作为一个图来检查异常值,偏斜度和分布。
Histogram representation of ordinal data
另一方面,条形图显示分类数据,实际上不能用于查找异常值或检查偏斜度。简单来说,您能为一组点(如苹果、香蕉和橙子)找到异常值吗?很遗憾,没有!那一套就把两者区别出来了!还在迷茫?
假设您有一个特定的表,其中给出了字符串变量的值。你不能使用直方图,它会抛出一个错误,因此你会移动到条形图。这证明至关重要的部分是理解数据。
下面是如何使用条形图绘制上述相同的图。
Bar plot representation of the ordinal data
正如你所见,这看起来更抛光和真棒!
那么这个故事的寓意是什么呢?了解数据!
折线图的“过度”滥用
到目前为止一切顺利!我们看到条形图和直方图实际上是不同的。现在,我们将研究折线图的过度滥用。
从更直观的意义上来说,折线图特别适用于趋势分析,它基本上被视为一个图表,用于检查从上一点开始是否有增加或减少。让我们以强大的股票市场为例,你不会期望新闻在条形图上显示公司的实时股票价格,但你会看到使用折线图来显示特定股票的趋势/表现。
更简单地说,我们可以说折线图基本上是用来以直观的方式比较一个值相对于其他值的变化。
折线图主要用于寻找特定时间段内的趋势,但也可用于有序数据。
Loss! But a line chart.
所以人们确实记得折线图=序数、时间序列和一点与另一点之间的比较。
分散点!
这可能会让一些人感到惊讶,但它比你想象的更常见。散点图的简要概述是,它在一个图中表示大多数(或设定数量)数据点。因此,基本上这是一个美丽的图,使读者能够建立变量之间的关系(如线性),也能够看到点的分布,更重要的是看到离群值变得活跃起来。但是最*,我注意到许多学*者在有序数据上使用散点图来绘制平均值,而平均值恰好在 y 轴上。这个令人震惊的事件激发了我写这/包括这一节。
散点图可能是双变量分析的最佳方法之一。它给人一种点与点之间关系的感觉,也给人一种关于数据的视觉前景。所以请记住,如果您有任何连续的数据,请使用散点图
现在你可能想知道,有序数据呢?有序数据也可以绘制在散点图上,但更准确地说,这些点应该是抖动点,这意味着这些点应该抖动,以避免过度绘制。这是一个非常重要的方法,可以帮助读者更有效地理解,让我们通过一个例子来更深入地了解这一点。
overplotting
如果仔细观察,Y 轴变量本质上是序数,这里使用的技术基本上是点绘图。如果你注意到你实际上看不到这两点之间的任何联系或趋势,你能吗?来电:抖动!
Jitter it!
看起来好多了!但是为了让它更棒,我们需要记住几个要点。
质量作为一个序数数据,作为一个良好的做法,我建议绘制序数数据作为 x 轴变量。这可能不一定适用于所有的图,有时在 y 轴上绘制分类数据会给我更好的表示,但这种体验仅限于条形图。
箱线图怎么样?我们可以一起绘制箱线图和散点图,以便从图中推断出更多信息,下面是完整的图!
Beauty!
正如你所看到的情节是可怕的!它给我们提供了点的信息,散点图也显示了质量和酒精之间的关系。
盒子里小提琴美妙的旋律
小提琴的情节让任何报告都好看。让我们接受它,它们显示了从概率分布到统计数据以及异常值的一切。他们都在里面!虽然箱线图很棒,但小提琴图更棒,尤其是在数据分布是多峰的情况下(不止一个峰)。在此期间小提琴曲显示了不同的峰值和位置。
Titanic 数据集是一个很好的数据集,可以用来绘制年龄与性别,年龄与存活,甚至班级的小提琴图。这里有一个例子,
Violin plot
由此你能推断出什么?它有最小年龄,最大年龄(最小年龄是一个异常值),平均年龄,更重要的是根据存活和不存活的年龄分布。这个图还可以进一步增强成一个多元图,上面包含性别!比如这个来自 seaborn 网站的例子!
Total bill , gender wise in terms of days!
可怕的情节不是吗?所以什么盒子情节不能小提琴情节可以。
至此,我总结了这个常见的错误片段,接下来是过度渲染以及如何处理它!所以请留意这个地方。在那之前继续策划!
有抱负的数据科学家应该学*什么编程语言?
原文:https://towardsdatascience.com/what-programming-language-should-aspiring-data-scientists-learn-875017ad27e0?source=collection_archive---------4-----------------------
不可否认的是,数据科学是当今世界发展最快的领域之一,并且没有放缓的迹象。正因为如此,研究和理解构成这个领域的专业人士,以及他们驾驭这个领域的方式变得越来越重要。
这篇文章是今年早些时候的一篇文章的延续,当时我们研究了数据科学专业人士的人口统计和教育背景。在第 2 部分中,我们将进一步挖掘 Kaggle 对数据专业人员的大规模调查,以了解这些专业人员如何开始他们的研究,他们对行业新人的建议,他们对未来趋势的预测等等。让我们开始吧!
你最初是如何开始你的机器学*/数据科学培训的?
该领域的大多数专业人士都是从在线课程开始他们的数据科学之旅的。第二个最受欢迎的途径是大学课程,然后是完全自学。这表明,作为初学者,从网上开始学*并不是一个坏主意!
你会推荐一个新的数据科学家先学什么编程语言?
根据受访者的说法,该领域的新人应该从 Python 开始了解编程语言。第二大推荐语言是 R. SQL 紧随其后,位居第三。
在接下来的一年里,你最想学*的工具或技术是什么?
Google 的深度学*算法 Tensorflow 领先;今天的数据科学家似乎很兴奋地投入到这项新兴技术中。紧随其后的是 Python 然后是 R.
在接下来的一年里,你最期待学*哪种 ML/DS 方法?
Python 和 Tensorflow 再次领先。
你写代码分析数据有多久了?
大多数调查对象写代码的时间只有 1-2 年。在关于该数据的早期帖子中,我们还发现大多数受访者年龄在 25-35 岁之间,并且大多数人都是全职员工,这表明在数据科学领域的职业道路可能很快!
我应该去哪里找工作?
据调查受访者称,公司网站/职位列表页面是最受欢迎的求职地点。排在第二位的是专门针对科技行业的求职网站,从朋友、前同事和家人那里寻求推荐也很受欢迎。
外卖食品
如果你想加入数据科学领域,在线学* Python 和 R 是一个很好的开始;大多数受访者在那里开始了他们的数据科学之旅,大多数人表示他们是全职的数据科学家。如果你已经有了 Python 和 R 的背景,通过更高级的在线学*来提升你的职业和收入潜力吧!
[## Python 中的数据科学训练营
学* Python 的数据科学,NumPy,Pandas,Matplotlib,Seaborn,Scikit-learn,Dask,LightGBM,XGBoost,CatBoost 等等…
www.udemy.com](https://www.udemy.com/course/data-science-bootcamp-in-python/?referralCode=9F6DFBC3F92C44E8C7F4)
机器学*预测预期寿命
原文:https://towardsdatascience.com/what-really-drives-higher-life-expectancy-e1c1ec22f6e1?source=collection_archive---------8-----------------------
我们正处于一个前所未有的时代,人类的寿命越来越长(尽管 2015 年& 2016 年是一个令人恐惧的上升趋势)。然而,众所周知,全球各地的预期寿命差异很大。
作为一名生物医学工程师,我一直将长寿归因于现代科学和医疗保健的增加。为了检验这一假设并理解什么能最好地预测预期寿命,我研究了世界卫生组织 1,345 项发展指标(从 1960 年到 2015 年)的国家级数据。
我将数据缩减为指标子集,这些指标不仅与预期寿命合理相关,还代表了主要指标类别(经济政策和债务;健康;基础设施;贫困;私营部门和贸易;公共部门;社会保护和劳动)。
其中,最具统计意义的预期寿命指标是获得卫生设施的情况。仅使用卫生设施来预测预期寿命有 77%的准确性,并表明预期寿命每增加一岁,就有 0.25%的人口获得现代卫生设施。
"向右上方"
几乎不管数据如何被切割,1960 年至 2015 年间的预期寿命趋势看起来就像初创企业宣传资料中的销售预测:向右上方。
Life span by country income levels: The gap between high and low income countries is closing
根据收入水平对国家进行分类,我们可以看到经济如何影响健康:在 1960 年至 2015 年期间,收入越高,预期寿命越长。高收入国家的预期寿命稳步增长,但速度较慢;中等收入国家在 20 世纪 60 年代经历了大幅增长,预期寿命也相应提高。在低收入国家,预期寿命在 80 年代中期至 90 年代中期几乎停止增长,随后是*年来预期寿命的大幅增长。区域分组(下图)揭示了 1960 年代和 1980 年代哪些地理区域推动了这些变化。
Life expectancy by region: Sub-saharan Africa (red, bottom) has a noticeable plateau in the mid-80s, coinciding with the HIV/AIDs epidemic.
我将 1.3 千个发展指标缩减为 21 个有代表性的子集。将这些指标与预期寿命相关联,可以快速评估相对重要性。
预期寿命与卫生设施(r = 0.88)、人均国内生产总值(r = 0.698)和人均医疗支出(r = 0.63)之间的正相关性最高。与农村地区的人口百分比(r = -0.80)和青少年生育率(r = -0.77)有很强的负相关关系。
In case you’re new to reading heat maps: A dark red square indicates a high positive correlation between the column & row header; whereas a blue square represents a negative relationship.
机器学*预测预期寿命
为了确定哪些指标具有统计学意义,并预测预期寿命,我运行了几个具有各种特征组合的不同模型。这个应用程序是回归的完美用例,它确定一个因变量(预期寿命)和多个自变量(发展指标)之间的关系。
Actual vs. predicted ( model) life expectancy: The model tends to better predict higher life expectancy, and does not preform as well for lower life expectancies (as indicated by wide-spread data in the bottom left).
使用 21 个特征的整个子集的准确率为 89.7%,并显示卫生设施和农村人口(%)都具有统计学意义。
即使只有这两个变量,这个模型预测预期寿命的准确率也有 80.4%。平均预期寿命为 63 岁,卫生设施每增加 0.18%,农村人口比例每减少 0.11%,预期寿命就增加一岁。将医疗保健支出加入到模型中只会略微提高准确性(81%)。
探究卫生设施:为了更深入地了解卫生设施的具体情况,我根据儿童死亡率的统计数据评估了卫生设施的使用情况。毫不奇怪,卫生条件和死亡率之间有很强的负相关性:随着卫生条件的改善,新生儿、婴儿和 5 岁以下儿童的死亡率下降。
卫生设施作为预期寿命的主要预测指标——特别是儿童死亡率——是出乎意料的,但也是合乎逻辑的。恶劣的卫生条件增加了共享威胁生命的传染病的风险。
据世界卫生组织报道,腹泻病是五岁以下儿童死亡的主要原因,是由恶劣的卫生条件传播的:
腹泻是由大量细菌、病毒和寄生虫引起的感染症状,其中大多数是通过粪便污染的水传播的。
一旦社区的卫生条件得到改善,这些举措就可以解决预期寿命的其他关键指标(如教育、医疗保健、青少年生育率)。此外,由于卫生设施与儿童死亡率高度相关,首先解决卫生设施问题应该会让更多儿童受益于其他举措。
* [## 格西/跳板 _ 数据 _ 科学
有关数据和源代码(Jupyter 笔记本),请查看我的 github。
github.com](https://github.com/gussie/Springboard_data_science/tree/master/Predicting_Life_Expectancy)*
今晚我们应该看什么?
原文:https://towardsdatascience.com/what-should-we-watch-tonight-96e6cc9323bf?source=collection_archive---------6-----------------------
一个或两个用户的电影推荐系统
Scene from Willy Wonka and the Chocolate Factory (Image courtesy of: https://www.moviehousememories.com)
我一直喜欢看一部好电影。当我还是个孩子的时候,当地图书馆的图书管理员会跟我开玩笑:“本,今天我们要租什么电影?”。当然,她知道十有八九会是威利·旺卡和巧克力工厂(1971 年的原版)。所以,当我手里拿着我选择的东西来到收银台时,通常不会有什么惊喜。我们会有一些笑声,然后我会去廉价商店买一点糖果,然后回家把电影放进我们的 VHS 播放器。
我们喜欢的电影类型感觉像是我们非常个人化的品质。例如,我很难向你解释为什么我如此喜欢电影《T2》和《陈月娇》。是因为音乐吗?还是电影的艺术性?还是奥黛丽·塔杜?还是我对欧洲的迷恋?还是以上都有?尽管我们对电影的偏好看起来独特而不可预测,但很有可能世界上还有其他人和我们有着非常相似的品味。
这正是协同过滤推荐器背后的想法。协同过滤是一种基于找到具有相似品味的其他用户来向用户推荐电影的技术。我们可以根据我们都看过的、评分相似的电影,找到口味相似的用户。吴恩达在他的 ML 课程中对协同过滤推荐系统做了很好的介绍。
这篇博文的目的是与您分享(1)我如何为单个用户构建一个标准的电影推荐系统,以及(2)我对向想要一起观看电影的两个用户推荐电影的问题的解决方案。我和我的另一半经常坐在电视机前浏览网飞或亚马逊的视频,试图决定一起看什么电影,似乎我们中的一方经常不得不做出妥协,以适应另一方的偏好。因此,目标 2 的目的是试图找到这个问题的解决方案,这样我们都可以对我们的电影选择感到满意。
数据的描述
对于我的推荐系统,我使用了movie lens 2000 万收视率数据集。该数据集由 138,000 个用户对 27,000 部不同电影的 2,000 万个评级组成。数据创建于 1995 年 1 月 9 日至 2015 年 3 月 31 日之间。因此,没有电影包含在 2015 年 3 月 31 日之后的发行数据中。收视率数据在 0.5 星到 5.0 星的范围内。这个数据集中的每个用户至少评价了 20 部不同的电影。我在这个项目中使用的两个数据文件是收视率文件和电影文件。这些被读入熊猫数据帧。下面提供了这两个数据帧的屏幕截图。
The first 5 rows of the Movies DataFrame
The first 5 rows of the Ratings DataFrame
数据的一个重要方面是收视率数据非常稀少。这是因为在 27,000 部电影中,每个用户只评价了电影的一小部分。因此,如果我们构建一个完整的矩阵,其中 138,000 行对应于用户,27,000 列对应于电影,那么我们的大部分值将是 NaN。由于这种稀疏性,我使用了 SciPy 稀疏矩阵包来处理这些数据,我将在下一节中更详细地讨论这些数据。
我的方法
为了构建一个协同过滤推荐系统,我使用了一类叫做低秩矩阵分解的算法。具体来说,我使用奇异值分解(SVD)将具有大量特征的评级矩阵缩减为具有较小特征子集的矩阵,这允许我们*似原始矩阵。Nick Becker 写了一篇很棒的博客文章,描述了 SVD 以及如何将它应用于构建推荐系统。因此,如果你想了解更多,我强烈建议读者看看他的帖子。
然后,我实现了以下步骤来构建基于协同过滤的推荐系统:
- 过滤掉少于 10 分的电影
- 创建了一个 movie_index 列,允许我们将 movieId 映射到一个唯一的 movie_index
- 对评级数据进行训练/测试分割
- 通过电影实现均值归一化
- 使用 SciPy 稀疏矩阵包构建稀疏矩阵,其中索引对应于 userId 和 movie_index,数据对应于平均标准化收视率数据
- 使用 SciPy svds 方法执行 SVD
- 通过计算𝐑=𝐔σ𝐕ᵀ生成预测评级矩阵𝐑,其中𝐔是用户特征矩阵,σ是对角线值是奇异值的矩阵,𝐕是电影特征矩阵
- 将电影平均值标准化组件添加回预测评级
- 对前 N 个预测收视率进行排序并打印出结果电影列表
我用训练数据做了模型调整。SVD 的一个自由参数是分量的数量 k,它对应于奇异值的数量。在使用选定的 k 值构建模型之后,我计算了测试集数据的预测评级。随后进行误差分析,根据实际评级数据计算平均绝对误差(MAE)和均方根误差(RMSE)。导致最低误差的 k 值然后被用于构建我的最终推荐系统模型。
如前所述,这个项目的最后一部分是建立一个推荐系统,可以为两个想一起看电影的用户提供推荐。根据一份非常有用的出版物(见奥康纳等人 ),有两种一般的方法可以做到这一点。一种方法是创建一个伪用户,代表两个用户的口味。为了实现这种方法,在执行 SVD 之前,需要合并每个用户的评级。另一种方法是为每个组成员生成单独的推荐列表,并以特别的方式合并这些列表。我选择了第二个策略来构建我的推荐系统。
合并两个列表的方法需要一些额外的思考。如果我们简单地取两个预测评级的平均值,那么我们将不考虑两个组成员之间的预测得分非常不同的电影。这在下表中的假设示例中示出:为两部电影和美丽心灵提供了用户 1 和用户 2 的预测评级。在 Pi 的情况下,用户 1 和用户 2 之间的预测评分比美丽心灵的差异大得多,但平均评分是相同的。这是一个问题,因为我们推荐的电影中,一个用户可能不太喜欢这部电影,而另一个用户可能非常喜欢。因此,这种方法没有实现我最初的目标,我想最大化整个团队的幸福。这个问题的解决方案是开发我自己独特的小组评级功能,如下所述。
Table demonstrating how two different movies with very different predicted ratings for User1 and User2 resulted in the same average rating, but different group ratings
我的组评级功能定义如下:
其中,R₁和 R₂分别是用户 1 和用户 2 对特定电影的预测得分,Rg 是组评级。此组评分功能计算平均预测得分减去与两个个人评分之差成比例的惩罚项。惩罚项的目的是给予具有更相似预测得分的电影更大的权重。回到我们的例子,我们可以看到电影 Pi 导致 Rg=3.6,而 A Beautiful Mind 导致 Rg=3.92 的更好的总得分。因此,基于这一结果,我们会有更大的信心,认为看了美丽心灵*之后,整个群体的幸福感会比看了 Pi 之后更高。*
结果
模型调整的结果如下表所示。我们观察到,k=15 的值产生了最低的 MAE 和 RMSE 值。这与这里引用的参考文献的结果一致(参见克雷莫内西等 )。
Table displaying error analysis results as a function of the number of components k
单用户结果
接下来,我将为单个用户演示我的电影推荐器的输出示例。在这种情况下,UserId 9 对通常可以归类为惊悚片或犯罪片的电影给予了高评级。在这种情况下,最受推荐的电影也是这些流派中评价很高的电影。因此,看起来我们的标准电影推荐器做得很好。
*A subset of original ratings provided for UserId: 9
Rated 5.0 for movie What Lies Beneath (2000)
Rated 3.0 for movie General's Daughter, The (1999)
Rated 2.0 for movie Entrapment (1999)
Rated 3.0 for movie Austin Powers: The Spy Who Shagged Me (1999)
Rated 3.0 for movie Return of the Living Dead, The (1985)
Rated 3.0 for movie Psycho (1960)
Rated 3.0 for movie Stigmata (1999)
Rated 4.0 for movie American Pie (1999)
Rated 2.0 for movie Vertical Limit (2000)
Rated 1.0 for movie Traffic (2000)
Rated 2.0 for movie Deep Blue Sea (1999)
Rated 4.0 for movie Fast and the Furious, The (2001)
Rated 4.0 for movie Cast Away (2000)
Rated 2.0 for movie Scary Movie (2000)
Rated 5.0 for movie Hannibal (2001)
Rated 2.0 for movie Creepshow (1982)
Rated 2.0 for movie Urban Legends: Final Cut (2000)
Rated 5.0 for movie Fight Club (1999)
Rated 5.0 for movie Exorcist, The (1973)
Rated 4.0 for movie There's Something About Mary (1998)Top recommendations for UserId: 9
Predicting rating 5.0 for movie Shawshank Redemption, The (1994)
Predicting rating 5.0 for movie Silence of the Lambs, The (1991)
Predicting rating 4.9 for movie Pulp Fiction (1994)
Predicting rating 4.9 for movie Braveheart (1995)
Predicting rating 4.8 for movie Schindler's List (1993)
Predicting rating 4.7 for movie Usual Suspects, The (1995)
Predicting rating 4.6 for movie Seven (a.k.a. Se7en) (1995)
Predicting rating 4.6 for movie Zero Motivation (Efes beyahasei enosh) (2014)
Predicting rating 4.5 for movie Fugitive, The (1993)
Predicting rating 4.5 for movie Terminator 2: Judgment Day (1991)
Predicting rating 4.5 for movie Godfather: Part II, The (1974)
Predicting rating 4.4 for movie Saving Private Ryan (1998)
Predicting rating 4.4 for movie Dances with Wolves (1990)
Predicting rating 4.4 for movie Matrix, The (1999)
Predicting rating 4.4 for movie American Beauty (1999)
Predicting rating 4.4 for movie One Flew Over the Cuckoo's Nest (1975)
Predicting rating 4.4 for movie Goodfellas (1990)
Predicting rating 4.3 for movie Apollo 13 (1995)
Predicting rating 4.3 for movie Raiders of the Lost Ark (Indiana Jones and the Raiders of the Lost Ark) (1981)
Predicting rating 4.3 for movie American History X (1998)*
合并用户结果
最后,两个用户的推荐系统结果如下所示。其中一个用户对应于我自己,另一个用户对应于我的另一半(正确猜测哪个是哪个的额外加分)。组合推荐采用了前面讨论的组评级函数。我的团体推荐者的结果令人鼓舞,因为推荐给我们的许多电影都是我们实际看过并真正喜欢的。
*A subset of original ratings provided for UserId: 138494
Rated 4.5 for movie Like Water for Chocolate (Como agua para chocolate) (1992)
Rated 4.0 for movie Mr. Holland's Opus (1995)
Rated 4.0 for movie Sense and Sensibility (1995)
Rated 2.0 for movie Fargo (1996)
Rated 4.0 for movie Pi (1998)
Rated 4.5 for movie Garden State (2004)
Rated 4.0 for movie What's Eating Gilbert Grape (1993)
Rated 1.0 for movie Lemony Snicket's A Series of Unfortunate Events (2004)
Rated 4.0 for movie Apollo 13 (1995)
Rated 4.5 for movie Buffalo '66 (a.k.a. Buffalo 66) (1998)
Rated 4.5 for movie Mission, The (1986)
Rated 4.5 for movie River Runs Through It, A (1992)
Rated 5.0 for movie Spanish Apartment, The (L'auberge espagnole) (2002)
Rated 5.0 for movie Willy Wonka & the Chocolate Factory (1971)
Rated 3.0 for movie Sideways (2004)
Rated 5.0 for movie Amelie (Fabuleux destin d'Amélie Poulain, Le) (2001)
Rated 4.0 for movie Bend It Like Beckham (2002)
Rated 1.0 for movie Dumb & Dumber (Dumb and Dumber) (1994)
Rated 4.0 for movie Dead Poets Society (1989)
Rated 4.0 for movie O Brother, Where Art Thou? (2000)A subset of original ratings provided for UserId: 138495
Rated 1.0 for movie Indiana Jones and the Kingdom of the Crystal Skull (2008)
Rated 4.5 for movie Mephisto (1981)
Rated 5.0 for movie Life Is Beautiful (La Vita è bella) (1997)
Rated 3.5 for movie Out of Africa (1985)
Rated 4.0 for movie Sense and Sensibility (1995)
Rated 4.5 for movie Virgin Suicides, The (1999)
Rated 1.0 for movie Dumb & Dumber (Dumb and Dumber) (1994)
Rated 4.0 for movie Three Colors: Blue (Trois couleurs: Bleu) (1993)
Rated 1.0 for movie Star Trek: Insurrection (1998)
Rated 4.5 for movie Postman, The (Postino, Il) (1994)
Rated 4.0 for movie Steel Magnolias (1989)
Rated 4.0 for movie Gattaca (1997)
Rated 2.5 for movie Dangerous Minds (1995)
Rated 3.5 for movie Seven (a.k.a. Se7en) (1995)
Rated 0.5 for movie Terminator 2: Judgment Day (1991)
Rated 2.5 for movie Driving Miss Daisy (1989)
Rated 0.5 for movie Home Alone (1990)
Rated 4.0 for movie Love Actually (2003)
Rated 4.0 for movie Leaving Las Vegas (1995)
Rated 5.0 for movie Cinema Paradiso (Nuovo cinema Paradiso) (1989)Top combinded recommendations for UserIds: 138494 and 138495
Predicting rating 4.5 for movie Zero Motivation (Efes beyahasei enosh) (2014)
Predicting rating 4.5 for movie Shawshank Redemption, The (1994)
Predicting rating 4.5 for movie Fight Club (1999)
Predicting rating 4.4 for movie Forrest Gump (1994)
Predicting rating 4.3 for movie Usual Suspects, The (1995)
Predicting rating 4.3 for movie Matrix, The (1999)
Predicting rating 4.3 for movie Schindler's List (1993)
Predicting rating 4.3 for movie American Beauty (1999)
Predicting rating 4.3 for movie Memento (2000)
Predicting rating 4.3 for movie Death on the Staircase (Soupçons) (2004)
Predicting rating 4.3 for movie City of God (Cidade de Deus) (2002)
Predicting rating 4.3 for movie Star Wars: Episode V - The Empire Strikes Back (1980)
Predicting rating 4.3 for movie Seven Samurai (Shichinin no samurai) (1954)
Predicting rating 4.3 for movie Spirited Away (Sen to Chihiro no kamikakushi) (2001)
Predicting rating 4.3 for movie Dark Knight, The (2008)
Predicting rating 4.3 for movie Princess Bride, The (1987)
Predicting rating 4.3 for movie O Auto da Compadecida (Dog's Will, A) (2000)
Predicting rating 4.3 for movie Band of Brothers (2001)
Predicting rating 4.3 for movie Rear Window (1954)
Predicting rating 4.3 for movie One Flew Over the Cuckoo's Nest (1975)*
包扎
在这篇博文中,我演示了(1)如何通过在 MovieLens 20M 收视率数据集上应用 SVD 来构建电影推荐器,以及(2)如何向想要一起观看电影的两个用户提供推荐。当然,有许多可能的方法来建立一个推荐系统。如果有更多的时间,我想实现一个比普通的 SVD 更高级的算法。例如,赢得网飞奖竞赛的团队开发了一种协作过滤算法,可以更好地捕捉数据中的用户和电影偏见。因此,如果某些电影的评级高于平均水平,这些电影不会完全主导推荐算法。我确实通过实现电影评级数据的平均标准化部分解释了这一事实,但网飞奖获得者采用了一种更先进的方法来解决这个问题,这种方法可能做得更好(见耶胡达)。
最后,我想感谢你阅读这篇博文。如果你想探索我为这个项目写的代码,请查看我的 Github repo。我很高兴写这篇文章,并与你分享我对机器学*的热爱,当然还有威利·旺卡和巧克力工厂。
吸烟对人们分析的影响
原文:https://towardsdatascience.com/what-smoking-did-for-people-analytics-8d580ba4db8?source=collection_archive---------7-----------------------
像我一样是美剧《广告狂人》(Mad Men)粉丝的任何人都会记得,这部杰出的时代剧的情节和历史背景的一条重要线索都围绕着吸烟。20 世纪 60 年代,美国医疗机构倾向于吸烟是一种致癌*惯的观点——这是他们很难面对的事情,因为他们几乎都是自己吸烟。
今天,*惯性吸烟或根本不吸烟的人大大减少了。我们当然没有脱离险境,但 50 年来已经发生了实质性的变化。然而,50 年是一段很长的时间——人们很自然会问为什么需要这么长时间来创造变化。
当然,一个答案是,吸烟是一种非常容易上瘾的行为——而上瘾的行为是最难改变的。然而,另一个原因是,需要很长时间来建立吸烟与消极生存结果相关的证据,甚至需要更长时间来证明吸烟导致癌症。
然而,我们这些从事人群分析工作的人,会从围绕吸烟及其健康后果的研究中有所收获。正是这项研究将流行病学分析方法推向了前沿,为我们今天研究人和组织提供了难以置信的价值。在 20 世纪 60 年代至 80 年代,当医疗机构在一场旷日持久的争论中与烟草巨头较量时,生存分析站出来给予了致命一击。
生存分析
生存是医学科学中最重要的结果,因此毫不奇怪,统计学领域的建立是为了更好地理解生存的驱动因素。然而,在 20 世纪中叶之前,许多生存研究都集中在急性疾病上——细菌或病毒感染似乎会在几天或几周内杀死一些人,但其他人会很快康复或毫发无损地存活下来。1918 年至 1920 年致命的西班牙流感疫情在全球范围内导致 5000 万至 1 亿人死亡,是早期流行病学研究的一大推动力。
到了 20 世纪 50 年代,抗生素出现了,急性病突然变得不那么危险了。注意力转向了另一种流行病。一个普遍但不严重的问题。它杀死了一些人,但没有杀死其他人,而是在生命的不同阶段,通常是多年或几十年后。癌症给流行病学家的生存研究带来了新的挑战。纵生存追踪变得必要了。
因此,医学研究机构开始加速跟踪几十年的人,而不是几周或几个月。不仅仅是那些生病的人,健康的人也必须被追踪,以了解哪些生活方式因素会导致癌症等威胁生存的疾病的发生率更高。它预示着方法、系统和过程的突破,导致了我们今天在媒体上看到报道的一些巨大的纵向研究。
但它也带来了分析和描述生存的新方法——所有这些在今天更广泛的人类研究中都极其有用。
生存曲线和风险比
想象一下,你有一个假设,个人在一个团体或组织中的经历的某个元素是他们在一段时间内继续成为该团体或组织成员的可能性的指标。例如,你可能认为在某个部门工作的人有如此积极的经历,以至于他们对公司产生了长期的依恋。反之亦然,这种体验太差了,以至于他们开始重新审视就业市场。
假设的经历可以被认为是一种“生活方式因素”,你可以像分析癌症等疾病研究中的存活率一样,分析一段时间内损耗的可能性。做到这一点的一种方法可以是对人群进行时间点采样,以及他们是否已经接触到感兴趣的体验,然后在接下来的几个月或几年中跟踪他们,以查看该体验和损耗之间是否存在因果关系。
卡普兰-迈耶生存曲线是一种非常直观的图形表达方式。回到我们吸烟的例子,上面的图表显示了在的一项特殊医学研究中,吸烟者与非吸烟者的生存曲线。x 轴表示在某个测量起点之后的几个月,此时个体根据他们的吸烟状态被分类,y 轴表示在每个时间点仍然存活的个体的比例。请注意,每个人的起点不必相同。假设时差中没有固有的偏差,人们可以在任何时间 t 加入研究,曲线跟踪他们到 t + 120 。
一个类似的有用的衡量标准是风险比,特别是对执行摘要的结论或摘要而言,它计算特定人群在特定时间段内的平均生存可能性,作为基线人群的一部分。例如,你可以计算出与一般人群相比,女性在 2 年内的存活可能性。或者在工作场所,您可以计算出与普通员工相比,员工流失的可能性或高绩效员工。对风险比率的精确计算使你有能力有效地陈述结论,如“高绩效员工在两年内离开我们的可能性增加了 20%”。
人员分析应用
我想你们中的许多人在这里看到了相似之处,但这里有一些生存分析可以应用于人力资本环境的方法:
- 调查验证:生存分析可以用来表明调查结果应该被认真对待。例如,如果对某些调查项目给出非中性评级的人被证明有更高或更低的流失可能性,这可以帮助管理层在未来关注这些调查响应。
- 预测分析:生存分析可以在预测减员或其他感兴趣的结果时建立特定措施的有效性,或者单独使用,或者作为更广泛的预测模型中的有效特征。例如,斯坦福大学 GSB 分校的研究表明,使用上面的(反向)生存曲线,电子邮件中的语言是员工与组织文化契合度的有效指标。在麦肯锡,我们使用生存曲线来表明,在任何给定的时间点,某人在组织中拥有的有意义的联系的数量可以预测他们留下的可能性。
- 促进多样性或多样化的体验:生存分析不仅适用于自然减员,还可以应用于任何感兴趣的结果。例如,如果你想说明一个组织越来越倾向于利用某些“类型”的个人来完成某些任务或工作,卡普兰-迈耶曲线或风险比可以很好地说明这一点,并确定假设的影响在统计上是否站得住脚。
生存分析是研究人的结果的一个非常强大的工具,它通常需要非常简单的数据(通常不超过一些调查响应或参与记录和一些离开日期)。更多的组织应该使用生存分析来让他们诚实地了解是什么真正推动了他们的人员成果。
最初我是一名纯粹的数学家,后来我成为了一名心理计量学家和数据科学家。我热衷于将所有这些学科的严谨性应用到复杂的人的问题上。我也是一个编码极客和日本 RPG 的超级粉丝。在 LinkedIn 或Twitter上找我。
Courtesy of Mad Men (AMC TV)
歌曲告诉我们什么:歌词文本挖掘
原文:https://towardsdatascience.com/what-songs-tell-us-about-text-mining-with-lyrics-ca80f98b3829?source=collection_archive---------12-----------------------
Billboard 排行榜热门歌曲文本挖掘项目。
Bradley Cooper and Lady Gaga in A Star Is Born.
记得第一次遇到数据科学能做什么样的神奇。这本书名叫《T2:代词的秘密生活:我们的话语对我们的影响》,作者是詹姆斯·w·彭尼贝克。它告诉我们日常用语是如何与我们的个性、性别和社会背景联系在一起的。如果你想知道更多关于我们语言的秘密,我推荐你去读读这本书。或者你也可以选择观看作者的 ted 演讲。
对我来说,这是一个激动人心的故事。我们如何从不可挖掘的无声数据中发现隐藏的秘密。虽然这项研究的方法论更多的是关于统计的,但这是我第一次开始模糊地思考数据科学,并一次又一次地成为我选择 NLP 作为我的第一个数据科学项目的原因。在完成了几个文本挖掘讲座后,我计划展示我们在性别之间如何使用不同的词语。我选择研究歌词,因为它们比任何其他形式的文本数据都具有最直接的表达方式。男女歌手的歌词有区别吗?仅凭歌词就能确定哪些歌是男唱女唱的吗?
我把名单限制在 Billboard 排行榜上的前 100 名艺术家,并搜集了每个艺术家的五首歌的歌词。我选择从每个歌手那里收集五首歌曲,而不仅仅是排名靠前的歌曲,是为了增强每个歌手的倾向,这样任何特定的模式都可以更容易地被感知。从网页抓取到模型拟合和数据集的完整代码可在 Github 上获得。在我们开始之前,我想告诉你,在公告牌排行榜上可能会有一些冒犯性的词语。
这是一个自然语言处理项目
自然语言处理是人工智能中最热门和最有前途的领域之一。有大量的论文和帖子揭开了 NLP 概念的神秘面纱,所以我将在这篇帖子中讲述它最基本和最核心的直觉。当我们处理文本数据时,基本的方法是将文本分割成单个单词。例如,我们有一个句子说‘这是一个自然语言处理项目’。我们把这个拆分成 7 个字的 这个,是,一,自然,语言,处理, 和 项目 。下一步是将这些单词转换成一个热编码。
在自然语言处理中,一个热点向量是一个 1 × N 矩阵(向量),用于将词汇表中的每个单词与词汇表中的每个其他单词区分开来。除了唯一用于识别单词的单元中的单个 1 之外,所有单元中的向量都由 0 组成。
这不直观吗?挺好的。你可以简单地想象每个单词有一个开关按钮。当' 语言 按钮打开时,表示我们有一个单词 语言 。当按钮关闭时,我们没有这个词。因此,当按下如下按钮时,它在告诉' 这是一种语言' 。
实际上,这是一个非常简单的例子,我们跳过了其他重要的步骤,比如降低大写字母,去掉数字、标点符号等等。这些是在标记(分割)文本数据之前进行的,您应该采取什么处理取决于您正在处理什么类型的文本以及您的项目有什么目的。都是为了对文字数据进行清理和刷机,使其更适合你的分析。如果你想更深入地研究文本挖掘和 NLP,我想推荐这篇文章作为你的开始。它解释了 NLP 问题,从非常基础的到复杂的模型,如 Word2Vec。经过所有这些处理步骤,现在我们准备从这些数据中得出一些意义。歌词中有哪些常用词?男性和女性感兴趣的主要话题是什么?我们在歌词上有什么不同?
歌词中使用频率最高的词是什么?
第一步,我查找歌词中常见的常用词。加上词频(可以理解为一个词键在整个歌单中被按了多少次),我们可以看到这些词,如【爱、想、女孩、感觉、心、钱、时间、 和 【天 。没什么好惊讶的,因为这些词就像我们的日常用语一样。
我们来比较一下性别之间的话。我计算了一组中每个单词的比例频率,然后得出两组的差异。所以下图显示了差距最大的前 10 个单词。与男歌手相比,女歌手在歌词中使用类似 女孩、kitty、感觉和滚动 的词语。在男性歌曲中, nigga、生活、家、 和 gang 等词汇相对于女性来说是相当独特的。
那两个病房呢,不只是一个字?
我不仅查找了单字母词,还查找了双字母词,因为当单词与其他邻居出现时,它们的意思通常完全不同。像下面你能看到的,bigram 词云中显示的词与 unigram 情节完全不同的词,像 千次,真正的朋友,想离开,想聚会,内心的声音** ,和 想听到 出现很多。
起初,我想出了查理·普斯的歌曲,“我们不再说话了”,由词 说话了 和 笑了 。然而,它实际上是来自女性的歌曲。当我们比较二元词时, 不再说话了 是最具性别特征的‘女性词’。
有趣的是,女孩谈论 谈话,女孩,女人,朋友 很多,而男孩似乎渴望 周六晚上,玩耍和爱情 。
我们在性别之间有不同程度的情感吗?
现在让我们更深入地进行感性分析。通过 NRC 词典中的 10 种不同情绪,我得到了每种情绪在不同性别中的比例。两组之间的情绪分布具有相似的模式。但是男歌手的歌词倾向于负面多于正面,而女歌手的歌词倾向于正面多于负面。
我还通过 afinn lexicon 得到了情感分数,分数的分布如下。男歌手的情感水平范围更广,平均得分更低。当我们过滤掉-300 以下的极端异常值时,女性和男性歌手的直方图具有某种程度上相似的分布。
我们能预测歌词的“性别”吗?
好了,现在是最激动人心的部分了!我适合能告诉我们歌词“性别”的模型。在拟合模型之前,我做了额外的特征变量,分别是我们提前得到的情感评分,每句歌词的长度,每句歌词的字数。从基本的逻辑模型开始,我建立了支持向量机和 Xgboost 模型。
就像你在上面看到的那样,当我尝试更复杂的模型时,精确度提高了,最终的结果相当令人满意。我将“性别”转换成一个整数变量,0 代表男性,1 代表女性,因为我们的机器算法只能处理数值。我使用的度量标准是非常基本和简单的,但却是检查模型性能的快速方法。
最后一个图是 xgboost 模型的方差重要性。它告诉我们哪些词在分类中起着至关重要的作用。length
是我添加的变量,作为每首歌词的长度。由于大多数说唱歌手是男性,男歌手的歌词长度可能会更长,因此成为一个重要的指标。
结论
我们可以得出这样的结论:性别之间的用词有明显的趋势,歌词也是如此。因为我们一直在唱我们所想的,我们想要的和我们梦想的,它们告诉我们社会想要听到的。因此,歌词文本挖掘对于了解我们自己是一个有趣的话题。这种分析可以应用于针对不同目标客户的营销口号或文案。或者我们可以进一步发展其他类型的作品,如小说、散文、新闻文章等等。
感谢您的阅读,希望您对这篇文章感兴趣。如果你想鼓励一个有抱负的数据科学家,请给一个或两个或三个掌声!我们非常感谢您的任何反馈,所以请在下面分享您的想法,或者通过 LinkedIn 联系我。我会带着另一个有趣的故事回来,所以直到那时,快乐的机器学*!!
VAE 根是什么鬼东西?
原文:https://towardsdatascience.com/what-the-heck-are-vae-gans-17b86023588a?source=collection_archive---------3-----------------------
是的,你没看错标题。虽然我的几个朋友是纯素食者,但他们中没有一个人知道任何关于 VAE-甘的事情。VAE-甘代表可变自动编码器-生成对抗网络(这是一个很好的名字。)在我们开始之前,我必须承认我不是这方面的专家(我没有电气工程博士学位,只是说说而已)。但在阅读了几篇研究论文和伊恩·古德菲勒长达 30 分钟的甘斯简介后,我有一个简短(但简洁)的总结:
Image reconstructed by VAE and VAE-GAN compared to their original input images
变分自动编码器(VAEs)
解释可变自动编码器的最简单方式是通过图表。或者,你可以阅读 Irhum Shafkat 关于的优秀文章,直观地理解变型自动编码器。在这一点上,我假设你对无监督学*和生成模型有一个大致的概念。教科书上对 VAE 的定义是,它“提供了对潜在空间中观察结果的概率描述”简单地说,这意味着 vae 将潜在属性存储为概率分布。
“Variational autoencoders”- Jeremy Jordan
每个输入图像都具有通常可以描述为单个离散值的特征。变分自动编码器将这些值描述为概率分布。然后,解码器可以从输入向量的概率分布中随机采样。让我猜猜,你可能想知道什么是解码器,对不对?让我们后退一步,看看 VAE 的总体建筑。
变型自动编码器的典型设置无非是一个巧妙设计的深度神经网络,它由一对网络组成:编码器和解码器。编码器可以更好地描述为变分推理网络,它负责将输入 x 映射到后验分布 q θ (z∣x) 。可能性 p(x∣z) 然后由解码器参数化,这是一个生成网络,它将潜在变量 z 和参数作为输入,并将它们投影到数据分布 p ϕ (x∣z).
VAEs 的一个主要缺点是它们产生的输出模糊。正如 Dosovitskiy & Brox 所建议的,VAE 模型倾向于产生不现实的、模糊的样本。这与如何在 VAEs 中恢复数据分布和计算损失函数有关,我们将在下面进一步讨论。赵等人的一篇 2017 论文。艾尔。建议修改 VAEs,不使用变分贝叶斯方法来提高输出质量。
生成敌对网络
字典对对抗性的定义是涉及冲突或对立或以此为特点。在我看来,这是对 GANs 的一个非常准确的描述。就像 VAEs 一样,GANs 属于一类用于无监督机器学*的生成算法。典型的 GANs 由两个神经网络组成,一个生成型神经网络和一个鉴别型神经网络。生成神经网络负责将噪声作为输入并生成样本。然后要求判别神经网络评估和区分来自训练数据的生成样本。与 VAEs 非常相似,生成网络将潜在变量和参数映射到数据分布。
生成器的主要目标是生成越来越“愚弄”判别神经网络的数据,即增加其错误率。这可以通过重复生成看起来来自训练数据分布的样本来完成。一个简单的形象化方法是警察和网络罪犯之间的“竞争”。网络罪犯(生成者)试图创建类似普通公民的在线身份,而警察(鉴别者)则试图区分假的和真的个人资料。
变分自动编码器生成对抗网络(VAE-甘斯)
好吧。既然我们已经介绍了 VAEs 和 gan,是时候讨论什么是 VAE-gan 了。术语 VAE-甘首先在 A. Larsen 等人的论文“ 使用学*的相似性度量对像素之外的内容进行自动编码”中引入。艾尔。作者认为,变分自动编码器和生成对抗网络的结合优于传统的 VAEs。
VAE-GAN architecture, the discriminator from GAN takes input from VAE’s decoder
还记得 gan 被细分为发生器和鉴别器网络吗?作者建议可以使用 GAN 鉴别器代替 VAE 解码器来学*损失函数。这种修改背后的动机如上所述,vae 在重建阶段往往会产生模糊的输出。这种“模糊”在某种程度上与 VAE 损失函数的计算方式有关。我不会深入这个新的损失函数是如何计算的,但是你需要知道的就是这个方程组
Learned Losses in VAE-GAN
现在有很多的 L 但是玩笑归玩笑,上面的等式假设鉴频器的第L层具有以高斯方式不同的输出。结果,计算第 1 层和第 5 层输出之间的均方误差(MSE)就给出了 VAE 损失函数。GAN 的最终输出D(x)可用于计算其自身的损失函数。
脸书等顶级科技公司现在将生成模型加入了人工智能研究的清单。杰出的计算机科学家和人工智能梦想家 Yann Lecun 曾经说过“在我看来,这(生成对抗网络)和现在提出的变体是过去 10 年中最有趣的想法。”
除了 VAE GANs,许多其他的 GANs 变体已经被研究和实现。DCGANs,或深度卷积生成对抗网络,是在 Ian Goodfellow 介绍最初的 GANs 后不久引入的。我很高兴看到生成模型在未来的人工智能应用中找到它的角色,并潜在地改善我们的生活质量。
感谢您阅读我的文章。
感知器是什么鬼?
原文:https://towardsdatascience.com/what-the-hell-is-perceptron-626217814f53?source=collection_archive---------0-----------------------
神经网络的基础
感知器是单层神经网络,多层感知器称为神经网络。
感知器是一个线性分类器(二进制)。此外,它还用于监督学*。它有助于对给定的输入数据进行分类。但是它究竟是如何工作的呢?
众所周知,正常的神经网络是这样的
得到这本书👇
Python 机器学*简介:数据科学家指南
这对我帮助很大。🙌 👍
正如你所看到的,它有多层。
感知器由 4 部分组成。
- 输入值或一个输入图层
- 权重和偏差
- 净和
- 激活功能
仅供参考:神经网络的工作方式与感知器相同。所以,如果你想知道神经网络是如何工作的,那就学*一下感知器是如何工作的。
Fig : Perceptron
但是它是如何工作的呢?
感知器工作在这些简单的步骤上
a.所有输入 x 乘以其权重 w 。姑且称之为 k.
Fig: Multiplying inputs with weights for 5 inputs
b. 将 所有相乘后的值相加,称之为 加权和。
Fig: Adding with Summation
c. 将 加权和应用于正确的 激活函数 。
例如:单位步长激活功能。
Fig: Unit Step Activation Function
为什么我们需要权重和偏差?
权重显示特定节点的强度。
一个 偏置值允许你向上或向下移动激活函数曲线。
为什么我们需要激活功能?
简而言之,激活函数用于映射所需值之间的输入,如(0,1)或(-1,1) 。
为了更好的解释,去我以前的故事激活功能:神经网络。
我们用感知器。
感知器通常用于将数据分为两部分。因此,它也被称为线性二元分类器。
如果你想离线更好地理解机器学*。
我将每周发布 2 个帖子,所以不要错过教程。
所以,跟着我上中、脸书、推特、 LinkedIn 、 Google+ 、 Quora 看看类似的帖子。
如果你有任何意见或问题,请写在评论里。
鼓掌吧!分享一下!跟我来。
乐意帮忙。荣誉……..
你会喜欢的以前的故事:
- 交叉验证代码可视化:有点意思
2.线性回归:更简单的方法
-
DIY Arduino 无线键盘
-
神经网络的激活函数及其类型
[## 神经网络中的激活函数及其类型
它是一条曲线(sigmoid,tanH,ReLU ),用于映射有界值之间的网络值。这就完成了…
theffork.com](https://theffork.com/activation-functions-in-neural-networks/)
5.Tensor flow 中的“张量”是什么鬼?
当坏数据阻碍机器学*成功时该怎么办
原文:https://towardsdatascience.com/what-to-do-when-bad-data-thwarts-machine-learning-success-fb82249aae8b?source=collection_archive---------8-----------------------
Photo by Tina Rataj-Berard on Unsplash
我们收集、存储和处理大量数据的方式的重大改进加快了人工智能(AI),更具体地说,是机器学*(ML)的努力。解决大问题需要大数据,幸运的是,我们现在可以毫不费力地收集数据,廉价地存储数据,并以闪电般的速度处理数据。
从推动更复杂营销的预测分析,到提高效率的机器人流程自动化,技术加快了企业寻求竞争优势的步伐。但撇开进步不谈,如果推动这些创新的数据是糟糕的,那么即使是最复杂的工具也毫无价值。
“糟糕的数据质量是机器学*广泛而有益的使用的头号敌人,”数据质量管理的最初先驱之一托马斯·c·莱德曼说,他也被称为“数据文档”。持这种观点的不止他一个人。
众所周知,训练数据决定了机器学*系统的性能。质量数据返回质量结果;坏数据不会。更糟的是,它会自我复制。就这样,它在 ML 系统中流动,进入模型并产生有缺陷的信息。
坏数据如何破坏机器学*——以及如何降低风险
公司直接看到错误分析、错误预测和糟糕决策中有缺陷数据的影响。随着人工智能驱动的技术变得越来越普遍,ML 的质量要求变得越来越清晰,计算早期的“垃圾进,垃圾出”原则突然变得非常重要。
莱德曼警告我们,“坏数据可能会出现两次——第一次是用于训练预测模型的历史数据,第二次是该模型用于未来决策的新数据。”然而,数据科学家和工程师正忙于完善他们的人工智能、机器学*和深度学*算法——尽管“只有 3%的公司数据符合基本质量标准。"
虽然我们不能对机器大发雷霆,但我们可以采取措施减少不良数据。以下是坏数据阻碍 ML 成功的一些方式,更重要的是,我们可以做些什么。
数据缺失或不完整 。有时,由于信息不可用,数据被合并,字段留空;或者在收集数据时执行的分析与当前分析的目标不同,导致某些值被忽略。然而,学*、解释和预测——ML 的主要目标——在信息不完整的情况下很难实现。
解决方法: 虽然删除所有被缺失值困扰的数据有时很有帮助,但只有当缺失值的百分比很低时,删除才有效。另一种选择涉及使用合成数据:由算法创建的模拟真实数据特征的数据。合成数据是一种新兴技术,可以帮助消除访问完整训练数据的障碍。
数据不准确。 部署 ML 项目时的默认响应是在训练预测模型之前清理数据。好吧,但是清理并不总是识别或纠正每个错误,数据仍然可能被破坏。数据科学家已经花了大部分时间争论数据(准确地说是 80%);然而,一个预测模型的输出为后续模型提供燃料,这意味着即使是很小的误差也会产生重大的负面影响。
解决方法: 在每个阶段创造足够的时间来清理数据、评估来源和挑战假设。保持数据集的整洁可能是一项挑战,但是如果您将确保数据质量的责任委派给特定的个人或团队,事情会变得容易一些。为传入数据的质量创建并实施明确的标准,并努力立即找到并消除错误的根本原因。
数据有偏差 。当偏差渗入 ML 用于训练的数据时,数据完整性受损,预测变得错误。例如,LinkedIn 的搜索引擎可能反映了性别偏见,当搜索女性联系人时,网站会显示男性名字。当用户在平台上搜索“米歇尔”时,返回的是“迈克尔”,这让他们措手不及。
解决方法: 确保您的数据和分析数据的算法符合您当前项目的价值和目标。经常审计机器学*模型并仔细检查训练数据,以发现有意识和无意识的偏见。如果发现偏差,将其隔离并移除输入数据集中特定的有问题的部分。
总之
发现有缺陷的数据会带来真正的后果。然而, Looker (一家领先的数据平台公司)的首席数据传道者丹尼尔·明茨强调了一个更加令人沮丧的现实。“真正可怕的是当坏数据没有被发现。虽然浪费时间不好,但基于你认为你知道的事情做出错误的决定要危险得多。”
他继续说道,“当你知道自己不知道时,你就会变得谨慎。但是,如果糟糕的数据欺骗了你,让你认为你确实知道一些事情,你很可能会基于这些(错误的)知识提前收费。这才是真正的危险所在。”
在你的机器学*项目中建立高质量数据的文化是可能的。彻底的测试、清理和审计可以确保准确性,而仔细的计划可以发现并根除隐藏在训练集中的偏见。最终,你花越多的时间去理解你的数据——它来自哪里,你试图用它来实现什么——你的机器学*项目就越成功
分析实*面试有什么期待
原文:https://towardsdatascience.com/what-to-expect-interviewing-for-a-data-analyst-internship-d6a964655bc6?source=collection_archive---------1-----------------------
如何让自己在大学期间走上数据科学的职业道路
Photo by Luke Chesser from Unsplash
几个月前,我开始寻找暑期实*机会,我希望能找到能让我获得数据科学经验的职位,这个领域在过去一年里真正吸引了我的兴趣。去年夏天,我在一家物联网初创公司从事整合各种数据源、分析和机器学*的工作,我认为我拥有许多公司会在数据科学实*生中寻找的技能。
然而,我很快意识到,许多数据科学家实*角色是针对研究生的,有时会优先考虑博士生。因此,我开始瞄准分析实*,这对于本科生来说更容易获得,并且与数据科学家的职责有很大的重叠。
以下是我过去几个月在全国各种规模的公司面试分析实*职位的经历总结。这是一个相对较小的样本量,但我希望它能代表这些职位的招聘流程——如果你在面试分析实*时有过明显不同的经历,我很乐意听到它,以使这个指南更具代表性,对其他人更有用。
分析的角色是什么?
在解释分析实*生的招聘流程之前,我首先想澄清一下分析在技术领域的职能是什么,以及该职位与业务分析师和数据科学家有何不同,因为这些术语经常互换使用。
在科技公司,分析职位最常见的头衔是产品分析师、数据科学家-分析、数据科学家或数据分析师。拥有成熟数据组织的大公司通常会区分数据科学家-分析、数据科学家-机器学*/算法和数据科学家-推理,如果他们将数据科学称为分析的话。
然而,我倾向于将数据科学家视为数据科学家-机器学*/算法角色,其主要职责是构建生产 ML 模型,但也可能做一些分析工作。在这篇文章的其余部分,我将使用产品分析师来指代更广泛的分析职位。
一般来说,业务分析师是技术性最差的,产品分析师技术性更强,数据科学家是三个岗位中技术性最强的。在较大的公司,业务分析师和产品分析师通常是不同的角色,但在较小的公司,这些界限可能会模糊。
业务分析师大多专注于分析现有数据,为财务或运营决策提供信息,通常是直接回应提交给他们的业务问题。他们将检查历史数据以确定趋势并向决策者提供调查结果,但通常不负责建立模型或根据数据进行预测,因为他们主要使用 Excel、SQL 和可视化工具(Tableau、Looker 等)。).
虽然产品分析师也将分析现有数据以回答业务问题,但他们的主要重点是通过分析功能使用和实验来为产品决策提供信息,确定数据支持的产品差距,或估计新项目/功能的潜在影响。他们还倾向于与数据科学家合作更具战略性的数据项目,这可能需要预测建模。产品分析师倾向于用 SQL 进行他们的大部分工作,但是也应该至少精通一门脚本语言(Python、R 等)。)、Excel 和可视化工具。
数据科学家负责提出可以用数据来回答并将改善业务运营的问题,决定收集哪些数据来回答这些问题,构建模型/分析数据来回答问题,并对项目进行优先排序以最大化业务价值。他们对支撑各种机器学*模型的数学以及实现这些模型的编程技能有着深刻的理解,并从他们收集的数据中获得洞察力。
Photo by Annie Spratt on Unsplash
什么样的公司有分析实*生?
根据我的实*搜索,我在以下几类公司找到了分析实*机会:
- 成长期创业公司(50 到几百人)
- 一些较大的科技公司拥有各种职能的分析团队(人力资源、产品、营销、销售运营等)。)并在那些特定的团队里雇佣实*生
- 将数据或分析产品/服务作为核心业务的公司
- 对通常不是数据密集型的行业采用以数据为中心的方法的公司
产品分析师一般资格:
- 优秀的解决问题的技巧
- 很强的沟通技巧和商业头脑
- 精通 Excel
- SQL 通常是必需或首选的
- 更多的技术岗位会希望看到某种编程知识(Python,R 等。)
- 有使用商务智能工具(Tableau 等)的经验。)是有帮助的
- 机器学*的经验通常是一个优势,可能会帮助你跨越产品分析师和数据科学家之间的界限,但通常不是一个硬性要求
面试流程:
面试过程因公司而异,但第一步通常是与产品分析师或分析团队经理进行电话面试。这些访谈大多是行为性的,除了典型的行为问题外,还有更多以数据为中心的问题,如“告诉我你用数据回答问题/做决定的时候”。除了对分析、公司和特定角色的兴趣之外,我通常还会被问到我的课程、过去的工作经验和兼职项目。
这些采访还包括一些假设的情况,在这些情况下,我被要求描述我将如何进行分析,或者我想要什么数据来回答一个给定的问题。我建议你熟悉一些模型(线性回归、逻辑回归/分类、聚类等)。)并理解它们适用于什么类型的问题。
在最初的电话采访之后,下一步通常是与产品分析师、分析经理、产品经理等进行一轮电话或视频采访。与最初的电话采访形式相似。一些公司给了我一些带回家的作业,要求我分析一些样本数据并交流结果,以测试我的编程和沟通技能。这些作业通常需要几个小时,可以使用你选择的任何工具(R、Python、Excel 等)来完成。).
一些公司也有案例面试,但我不会详细说明这些,因为有很多很好的资源来准备案例面试(我推荐案例和 Victor Cheng 的案例面试框架)。
结论
对于对数据科学感兴趣的本科生来说,分析实*是一个很好的机会,可以了解该领域的更多信息,并在数据科学的各个方面获得宝贵的经验,从询问相关问题到确定收集哪些数据,再到分析数据和交流结果。
了解各种模型,并能够识别哪些模型适合特定的问题,这将在面试过程中有所帮助,如果你没有太多相关的工作经验,兼职项目通常也会有所帮助。
我希望这有所帮助,如果你面试过类似的职位,我很想知道你的经历是否和我的相似。
在定制开发 web scraper 之前,需要记住什么?
原文:https://towardsdatascience.com/what-to-keep-in-mind-before-custom-developing-a-web-scraper-59e57e2cc077?source=collection_archive---------12-----------------------
每个企业都以这样或那样的方式依赖数据来帮助他们做出决策。这是一个数据驱动的世界,企业需要时刻保持警惕,随时更新数据。
如果企业能够在正确的时间以道德和高效的方式处理正确的数据,他们就能在竞争中保持领先。他们是怎么做到的?网页抓取(我相信你知道是什么!).
随着数据依赖性的迅速增加,对网络抓取服务的需求也在激增。让我在这个非常初始的阶段澄清一下,没有神奇的网络抓取工具可以从网络上的每一个网站抓取数据。每个网站在结构、导航、编码和呈现数据的方式上都不一样。因此,不存在这样一个“开箱即用的网络刮擦解决方案”。
在这里阅读一篇文章,了解更多关于刮擦的挑战和最佳实践。
但是,同样,这并不意味着现成的网页抓取工具不起作用,它们起作用。但是,大多数被抓取的网站本质上都是动态的。每个网站都是不同的布局和结构定制编码。他们还定期进行结构调整,以跟上最新趋势。这使得编写一系列可以同时抓取多个网站的代码变得极其困难。这就是定制软件开发介入的地方。
定制软件开发团队将设计 web scraper 机器人来抓取成千上万的网页,所有这些都是为您定制的代码,以便您可以对市场趋势、客户偏好和竞争对手的活动设定愿景,然后相应地分析这些趋势。但是,网页抓取是一个全新的领域,在你雇佣一个定制的软件开发团队来根据你的需求建立一个定制的网页抓取器之前,你需要记住一些事情。
监控
你会惊讶地知道网站更新的频率!并不是所有的改变都会影响 web scraper,但是,保持对修改的标签是确保数据质量不受影响的关键。确保定制软件开发团队意识到这一点,并且他们有一些自动化程序来监控和记录目标网站上的变化。如果他们在网站的 dom 结构中看到任何危险信号或异常情况(丢失字段、修改的字段名称等),他们应该设置警报。这将有助于防止整个网页抓取过程中的数据丢失。
基础设施
网页抓取是一个小众的过程,说实话,并不是每个人都喜欢。它需要了解令人信服的技术组合。此外,对于 web 抓取来说,一个健壮的端到端基础设施是至关重要的。确保你雇佣的定制软件开发公司拥有支持资源密集型任务的基础设施,如开发、运行和维护 web scrapers,以更快的速度不间断地抓取大型网站。确保定制软件开发团队有能力不断调整和缠绕他们的 web 抓取基础设施和规模,以提高性能和数据质量。
数据质量
尽管从网络中提取信息很复杂,但将这些非结构化数据转化为干净、结构化的信息以便进一步分析则更具挑战性。而干净的数据才是 MVP!所以,要确保你雇佣的定制软件开发公司不只是做一个网页抓取器,提取信息,然后忘记它。确保他们以最可靠的方式审查和测试提取的数据。此外,确保他们在数据不一致和网络抓取机器人错误的情况下创建一个警报。数据质量保证和及时维护是不可或缺的一部分,你雇佣的定制软件开发公司必须对此负责。
维护和业务整合
对于现成的解决方案,网络抓取范围有限,维护也是一项挑战。当有小的结构修改时,这些工具面临极大的困难,它们需要不时地被维护和适应。在提取大块数据时,您应该始终进行查找,以最小化请求周期时间并最大化性能。确保定制软件开发团队对 web 抓取框架和基础设施有详细的了解,以便可以自动调整以获得最佳性能。如何处理这些数据?当然是互动分析啦!!在此之前,必须有一种方法,让组织可以毫不费力地将这些结构化的干净数据输入到自己的系统中。
收拾东西
这是一个利基领域,如果你在利基领域做一些事情,你一定会接受一些挑战。考虑到挑战的数量和端到端维护的需求,这可能会给内部开发团队带来不便。因此,如果你缺乏网络抓取所需的经验和基础设施,将网络抓取外包给成熟的定制软件开发公司总是一个更好的计划。二进制人员可以让您免除这些麻烦,我们在 web 抓取方面的丰富经验和专业知识可以帮助您分配更多的时间来分析手头的结构化数据,从而提高生产力和业务收益。
最初发表于: 双星
你是哪种类型的星巴克顾客?
原文:https://towardsdatascience.com/what-type-of-starbucks-customer-are-you-72f70e45f65?source=collection_archive---------8-----------------------
聚类分析显示星巴克顾客分为 4 个不同的类别。
每个人都有偏好。有些人认为没有什么可以打败墨西哥菜,而其他人则在不断寻找下一个最好的意大利餐厅。你有你最喜欢的汉堡店。你有你最喜欢的冰淇淋店。大多数关于人们喜欢什么和不喜欢什么的偏好会随着你在和谁说话而改变…除非你在谈论咖啡。在世界上所有的咖啡品牌中,几乎每个人都同意星巴克是你永远不会拒绝的地方。你可能不会再去麦当劳买汉堡了,但是你最好相信你会在一周的任何一天在离你最*的星巴克排队买你的浓缩咖啡。
我试着不舒服地坐在我的运动世界里,当我偶然发现星巴克关于他们的顾客、交易和他们收到的促销交易的数据时,我开始感兴趣。促销数据是有趣的,因为人们对他们将做什么来获得折扣购买有非常具体的感觉。对于任何公司来说,它们都非常重要,有助于让客户尝试你的产品,并留住客户。我最喜欢吃的地方是 Chipotle,不管路上有什么障碍,我都会每周至少去 3 次。我参加了他们的买一送一(BOGO)交易,当他们提供薯条和番石榴时,我会去打折餐,如果他们不这样做,我仍然会每天都去。面条和公司是我喜欢的另一个食物链,但我不会特意去那里吃饭;然而,如果他们给我一份 BOGO 的合同,你会看到我站在队伍的最前面。
两家不同的餐厅,对我购买的东西有两种不同的感觉。那么星巴克有哪些不同类型的顾客呢?人们会对不同的折扣促销做出反应吗?如果星巴克对顾客进行适当的分类,他们能在促销上赚更多的钱吗?我对星巴克顾客的分析将回答什么类型的人在他们的商店购物,什么样的促销优惠最适合他们所属的群体。
一如既往,你可以在 https://github.com/anchorP34/Starbucks-Customer-Clusters看到我的代码。请对你想了解更多的话题或我没有探究的想法留下任何评论或问题。
数据清理
Starbucks 数据集分为三个不同的文件: profile ,它包含关于客户的低级信息;portfolio,它包含关于可以收到的不同促销优惠的信息;以及抄本,它包含所有购买历史和关于客户何时收到、查看和完成促销优惠的信息。
Raw profile data
Raw portfolio data
Raw transcript data
PROFILE :为了清理 PROFILE 数据,我需要弄清楚如何处理性别和收入为空的数据,并将 begin _ member _ on 字段改为一个实际的日期,而不仅仅是一个字符串。看看缺失的性别,这些记录也是零收入的原因。我决定将未知的缺失性别的值设为“U ”,而不是删除这些记录(它们占数据的 15%)。为了找出合适的收入选择,我研究了整个人口的收入分布:
This needs to be cleaned up a little nicer
黑线显示的是分布的平均值,这看起来是一个不错的选择,因为它不会向我们的收入分布倾斜太多。在创建了 member_date 字段(该字段派生自 became _ member _ on 字段)之后,我还将该日期拆分为 member_year、member_month 和 member_day,以查看这是否有助于提供更多信息。下面是最终输出的样子:
Cleaned profile information
PORTFOLIO :每个促销活动都有一个数组,显示了某人接受促销活动的不同方式。将它转换成位标志是一个很好的做法。
Cleaned portfolio information
抄本:抄本数据帧中的值列是一个字典,有一个键和值与之相关联。不同的键值是优惠 id 和金额。要约 id 与要约的接收、查看和完成相关联,而金额只是交易金额。我更改了 value 字段以显示促销 id 或交易金额的值,value_type 字段随后成为字典的键。
Cleaned transcript information
探索性分析
查看客户数据的第一件事是了解哪些类型的人构成了客户群,而不必太深入。星巴克的顾客大约 50%是男性,35%是女性,其余的是其他人或不认识的人。
M — Male, F — Female, U — Unknown, O — Other
从收入分布来看,女性的收入分布更广,也比男性和其他性别的收入更高。由于我们将所有未知的性别记录替换为整个人口的平均收入,因此没有分布可供分析。
Females are holding up the weight for income distribution and are causing the overall mean income to be higher than both the mean male income and mean other income.
另一个有趣的信息是顾客成为星巴克会员的趋势。看看过去几年注册用户的数量,用户数量有两次大的跃升。我更想知道为什么这些日期如此相关,无论是应用程序升级还是全球推广(下载应用程序,我们会给你一个免费的咖啡杯,等等)。
Number of daily customer sign ups over time
为了让事情更清楚,我改变了图表,以年为线颜色显示每月的客户注册量。我用星号标出了我们在上图中看到的两次主要跳跃,它们看起来像是在完全相同的时间起飞的。那一定是由于营销部门做了些什么。星巴克今年的月订阅量也呈下降趋势,几乎抹去了他们从去年客户注册量激增中取得的任何进展。
Customer subscriptions per month with year being the color code
顾客在注册成为星巴克会员时似乎有相似的模式,并且基于他们的性别输入有不同的收入分配,但这仍然不能很好地代表他们是哪种类型的买家以及他们与其他买家有什么共同特征。为此,我们需要深入了解他们的购买历史,以及他们对不同促销活动的反应。
交易和促销分析
通过查看事务性数据,很容易看出一个人何时收到促销、何时查看促销以及何时完成促销。这个例子是一个随机的人在那天查看一个折扣优惠。折扣是消费 10 美元,获得 2 美元的信用。您可以看到,对于所有不同的值,时间都是 0,这意味着他们在收到报价的同一天采取了行动。从这一部分,我们可以尝试得出以下信息:
1。他们收到了多少次促销(BOGO、折扣、信息)
2。每种促销类型的完成百分比是多少(BOGO 和折扣,每种信息促销都在发布当天完成)
3 .自从成为星巴克会员以来,他们总共交易了多少次。花费的平均交易金额是多少
5。每位顾客的平均购物间隔天数和中位数是多少
6。完成一个报价平均需要多少天
Random customer receiving, viewing, and completing a promotional offer.
当试图查看人们完成促销优惠的成功率时,我必须将交易数据框架连接到它本身,在 value_type 表示“优惠 id”的地方连接到 person 和 value。我们还需要确保要约在收到时间之后或当天完成,并且符合要约持续时间的窗口。这可能很棘手,因为一个客户可能不止一次收到相同的促销活动(我很难发现这一点,回去弄清楚这一点简直是一场噩梦)。这也引发了其他问题,因为有些情况下,人们在促销截止日期之后才完成报价。一个例子:
This promotion was offered to these people at day 576 to them, and both people completed the offer 18 days later. This doesn’t make sense because the duration was only for 5 days? So maybe I am misunderstanding what duration means, or duration doesn’t really matter. I ended up ignoring the duration column.
从这里,我们可以汇总数据,在较高的层次上查看不同的促销活动、它们的成功率、它们对消费者的净回报以及对星巴克的净值。从整体来看,难度越高(你要花的钱越多),人们完成报价的可能性就越小。尽管 5 美元买 5 美元的 BOGO 和 10 美元买 10 美元的 BOGO 对消费者来说有着相同的净回报,但人们更倾向于买 5 美元买 5 美元,可能是因为方便。最成功的优惠是 7 美元优惠 3 美元,这实际上最终让星巴克赚了钱。我们还看到,20 美元的 5 美元折扣完全是浪费时间,只完成了 10%的时间。就完成报价所需的平均时间而言,人们更有可能比任何其他报价更快地获得 5 美元兑 5 美元的 BOGO,而 5 美元兑 20 美元的折扣促销需要最长的时间来完成,这可能是因为需要花费的金额更大。
Completed Offers is the success percentage of that offer being completed, Total Completions is the number of times that promotion was completed, Avg Days To Complete is the average days it takes for that promotion to be completed, Net Reward is the reward minus the difficulty, and Net Worth is the Net Reward * Completed offers. This shows how much money Starbucks makes on that promotion.
净资产应该是星巴克最重要的部分。对于 BOGO,星巴克并没有从这项交易中赚到任何钱。他们只是咬紧牙关让人们得到他们的奖励,然后希望在未来花更多的钱。因此,对于 BOGO 的这两笔交易来说,无论何时他们发出促销信息,净值都将永远是 0 美元;另一方面,折扣确实给了星巴克一些货币价值。折扣交易的净值是可以从折扣中获得的总价值乘以促销完成的机会百分比。20 美元买 5 美元的促销活动可能会让星巴克多赚 15 美元,但如果只有 10%的人完成了促销活动,他们应该只能得到 1.35 美元*实际收到促销活动的人数。因此,就净值而言,10 美元买 2 美元的折扣是给客户的最佳促销。
折扣和 BOGO 促销的结构应该以对星巴克来说财务上明智的方式推进。折扣促销应该给予那些经常回来的顾客,他们不需要很高的奖励就能回来。如果他们无论如何都会回来,给他们一杯 BOGO 没有意义,因为你在这笔交易中没有赚钱,但如果你给他们折扣,你会赚更多的钱,这对星巴克和顾客来说是双赢的。不能保证会持续回来的人应该获得 BOGO 氏症,以重新激发他们的兴趣,让他们更有可能在他们的商店花更多的钱。下一步是根据顾客的购买*惯将他们分成更合适的群体,并对谁得到什么样的促销活动做出更好的决定。
聚类段
由于没有正确的“答案”,使用机器学*和聚类算法是数据科学家遇到的更有趣的分析之一。预测股票价格或预测欺诈性银行交易可以查看历史是/否答案,但聚类没有与之关联的标签。它只是显示哪些值彼此最相似,并将它们分组在一起。
从技术上讲,您可以选择任意数量的集群来表示您的数据,但是评估您的集群是否在高水平运行的一种方法是运行肘方法。在肘方法中,我们寻找从每个点到其附属质心的误差平方和(SSE)的显著下降。由于 K(聚类数)的每一次增加都将创建更多具有更少点数的聚类,因此 SSE 和 K 的增加将呈现总体下降的趋势。由于较低数量的聚类更容易破译和分析,我们希望 K 是 SSE 开始变平之前的最后一个显著下降,因此,在图中寻找“肘部”。
Elbow method chart looking at the number of clusters that should be analyzed.
从图表中可以看出,4 个集群是对数据进行分析的合适的集群数量。这与我们的问题非常吻合,因为这 4 个集群可以分成这些类型的客户:
1。不会对任何促销活动做出反应
2。将有利于 BOGO 的过度折扣
3。相比 BOGO 的
4,更喜欢折扣。将响应 BOGO 的身体和折扣
输入数据将基于包括以下特征的客户矩阵:
discount_total_offers,discount_completion_pct,
discount _ min _ completion _ days,discount_max_completion_days,discount_completed_offers,
discount _ avg _ completion _ days,discount_avg_net_reward,
bogo_total_offers,bogo_completion_pct,bogo_completed_offers,bogo_min_completion_days,
bogo _ max _ avg _ completion _ days,
bogo_avg_net_reward
这是个人属性(年龄、性别、收入)、BOGO 和折扣属性(完成百分比、平均净回报、完成的平均天数、完成所用的最快时间、完成所用的最长时间)、信息促销(他们收到了多少)、以及整体交易趋势(完成的交易数量、总花费、交易之间的平均和中间天数)的组合。如果有任何值为空,它们将被替换为 0,因为客户没有参与该特定的兴趣领域(从未进行过交易,从未完成过促销活动,等等)。我还必须将性别字段从分类变量转换为 4 个虚拟变量,因为聚类算法只接受数值。
由于没有正确或错误的答案,也没有之前和之后的值,因此没有聚类的测试和训练集。一旦聚类被附加到客户矩阵中,我希望可视化不同的分布图,以帮助识别哪些类型的客户被聚集在一起。
集群 2 拥有最大的群体规模,占总人口的 33%(17,000 个客户,总计约 5,694 个客户),而集群 3 是最小的部分,约占 15%。我对集群 3 最感兴趣,因为与其他集群相比,这似乎是一个非常小的利基市场。
我首先从查看与宣传成功价值无关的信息开始,以了解什么类型的人适合这些群体。我寻找那些看起来色彩分割得很好、几乎没有重叠的地块。
Seaborn pair plot that cross analyzes different distributions and color codes them based on the associated cluster.
看上面不同的情节,最细分的情节似乎是任何与收入有关的情节。看起来第 3 类是低收入人群,而第 0 类是高收入人群。这就解释了为什么第 3 组是所有组中最小的一组,因为大多数星巴克收入较低的四分位数正好在 45K 美元左右,但这个组的收入最高也就这个数。
Income distributions separated out by Cluster
现在来看事务性数据,要分离出集群要困难得多,但我们仍然可以带走一些信息。如果我们看一下 BOGO 和折扣的完成百分比,看起来集群 3 似乎到处都有这两种促销活动,但集群 0 似乎在这两种促销活动中的成功率都在 0.5 以上。
Seaborn pair plots on transactional information
从总交易量与总交易量来看,看起来第 0 类人群在每笔交易中花费更多,并且不经常去,而第 3 类人群则相反。集群 1 和集群 2 都在中间,这是有道理的,它们并不真正倾向于一个方向或另一个方向,因为它们构成了人口的大多数。
Total transactions vs total transaction amount shows how many times customers make transactions and how much they spend total.
但那又怎样…
这些都是关于这些集群的相似点和不同点的有趣事实,但是星巴克如何比仅仅在一年中盲目地给人们不同的促销活动赚更多的钱呢?
我们可以通过促销活动的预期回报来确定我们的聚类算法是否有助于客户细分。预期回报考虑了星巴克从折扣中可能获得的总价值乘以事件发生的概率(在这种情况下,有人完成了他们的促销交易)。我们希望评估与我们的集群相比,整体人口的净值,以确定我们的集群是否更适合某种类型的推广。
如果我们将每个集群在每项奖励上的表现与总体平均水平进行比较,这有助于利用我们应该关注的促销活动。请记住,BOGO 应该让顾客回到星巴克,折扣应该集中在那些持续光顾的顾客身上,以保留他们购买的一些东西。如果我们看一下集群 0,他们以 34%的成功率回应了 20 美元买 5 美元的促销交易!整个人群的成功率只有 9%,那么你为什么要给他们一份 BOGO 的合同呢?当你给每一个客户这笔交易时,你可以从他们身上赚到 5.10 美元,相比之下,你给所有人的平均收益是 1.35 美元。集群 2 和集群 3 对折扣促销的反应不如集群 1 和集群 2,所以给他们 BOGO 促销来重新吸引他们在星巴克“免费”购物,而不是通过给他们打折来吸引他们,这将是更聪明的做法。
Breakdown of how each cluster responded to each of the promotional deals. The BOGO_or_Discount field is based off a function that looks at the cluster completion percentage and the overall population completion percentage, and if the cluster value is greater than the overall population completion percentage (with a 5% buffer), then you should offer them a discount deal. If not, you should offer them a BOGO deal to get them reengaged.
通过将集群 0 和 1 作为“折扣促销集群”,您将获得更高的折扣预期回报,这将有助于弥补集群 2 和 3 的 BOGO 交易。你留住了每天都会回来的顾客,不管他们会喜欢什么样的小奖励,而你则专注于让第 1 和第 2 类顾客进门并享受你的产品。星巴克通过促销让顾客更开心,同时他们也在这个过程中保留了更多的钱。
反思与总结
这是公司必须处理的一个经典问题,我认为 4 个集群是解决这个问题的最佳方法。在我要处理的不同数据集当中,我希望为我们的流程保留尽可能多的未被触及的信息。这就产生了问题,因为有些人的上市年龄是 118 岁,或者有些人在交易到期后才完成报价。这些都是我希望能更清楚地了解的事情,以便获得更清晰的数据和更好的结果。
对于这个项目来说,一些可能对我更有利的改进是使用更好的工具,比如 SQL 数据库来运行我的一些分析。如果我使用 SQL 一次性计算出人们交易的滚动差异,而不是单独计算,那么客户端矩阵会运行得更快。因为我在 python 中没有这种能力,所以单独运行这部分分析大约需要 15 分钟。所以如果我搞砸了,就要再花 15 分钟才能看到结果。我也希望我能有更多的事实信息来处理,比如购买了什么特定的产品,或者这些顾客的大致居住地点。人的居住面积影响消费*惯吗?人们对特定产品使用 BOGO 或折扣交易吗?这些信息将有助于聚类结果,并可能做出更好的促销决策。
利用星巴克的个人、交易和促销数据,可以在顾客的认可和消费*惯方面产生巨大的波动。我的聚类方法表明,有些人是低收入和低消费的顾客,他们应该得到 BOGO 促销,有些人对这两种促销活动都反应良好,有些人是高收入的星巴克常客,他们应该得到更多的折扣促销。当正确地将这些志同道合的人联系在一起时,星巴克可以确保合适的人得到提升,这将提升他们在星巴克的地位,同时继续收获明智商业决策的好处。
过去在 2017 年花费数百万美元的事情,现在可以用机器学*解决,每月 499 美元
原文:https://towardsdatascience.com/what-used-to-cost-millions-in-2017-can-now-be-solved-with-machine-learning-for-499-month-10b5b4bb1173?source=collection_archive---------11-----------------------
Photo by Marina Vitale on Unsplash
各公司每年都花费数千万美元,试图通过动态锁定客户来提高他们的客户参与某事或购买某物的可能性。从网飞推荐到挑选最*的 Lyft 司机,内容个性化、排名和推荐对数字经济的许多方面都至关重要。
根据 Evergage 公司进行的一项调查(T1 ):
受访者继续报告他们的实时个性化工作有了实质性的改进或“提升”,88%的人表示他们看到了个性化带来的可衡量的改进,23%的人报告改进超过 20%。这一成功导致投资增加,因为 46%的受访者预计他们的个性化预算在未来一年将会增加。
此外,根据 McKinsey.com 的:
个性化可以降低高达 50%的采购成本,提高 5%到 15%的收入,并提高 10%到 30%的营销支出效率。
这实际上是一个很难解决的问题,因为它涉及到理解顾客,从潜在的数百万件商品中挑选,到按照最有可能吸引的方式对商品进行排序,有着多层次的复杂性。
此图展示了这些概念背后的架构的基本轮廓。
Recommending videos to customers: https://research.google.com/pubs/pub45530.html
你怎么知道先给客户看哪个视频、哪个产品、哪个广告、哪个新闻帖子?
部分答案来自于对你的客户的了解。但是这个问题已经很好的解决了。大多数电子商务、视频流和其他类型的网站都很好地掌握了给定用户是谁,他们来自哪里,以及他们过去从事过什么。
但是,公司花了很多钱来交叉参考这些数据,与过去的行为,并使用它来以某种方式生成用户更有可能参与的事情的排名。
事实证明,机器学*是解决这个问题的好方法。
学*客户的行为,然后将这种学*应用到一些预测中,这相当于机器学* 101。
这就是为什么机箱要做建议箱。我们希望公司能够访问这些强大的、支持机器学*的功能,运行在他们自己的环境中,基于他们自己的数据,而不必花费通常的费用和时间来自己解决所有这些问题。
你可以在这篇博文中阅读更多关于 Suggestionbox 是什么以及它是如何工作的信息:
[## 介绍 suggestion box:Docker 中的个性化和推荐机器学*…
今天我们非常自豪地宣布 Suggestionbox 的开发者预览版,这是最新的 ML-in-a-Docker-container…
blog.machinebox.io](https://blog.machinebox.io/introducing-suggestionbox-personalization-and-recommendation-machine-learning-in-a-docker-b9d69f937716)
但对于任何试图为数百万用户解决这一问题的企业或初创公司来说,关键的一点是,你现在可以通过巨大的因素增加用户参与度,只需每月支付区区 499 美元。
这是应用机器学* ROI 机制的一个巨大转变,因为它不再通过按 API 调用收费或限制请求数量来限制使用。
公司可以在他们自己的基础设施中,在防火墙之后,在他们自己的数据上运行这项技术。最重要的是,他们可以创新、实验和尝试新事物,而不会产生巨大的云账单。
这将会改变游戏规则。
什么是机器盒子?
Machine Box 将最先进的机器学*功能放入 Docker 容器中,这样像您这样的开发人员可以轻松地将自然语言处理、面部检测、对象识别等功能融入其中。到您自己的应用程序中。
这些盒子是为了扩展而建造的,所以当你的应用真正起飞的时候,只需要水平地添加更多的盒子,直到无限甚至更远。哦,它比任何云服务都便宜(而且可能更好)……而且你的数据不会离开你的基础设施。
有戏让我们知道你的想法。
玛丽亚飓风期间和之后波多黎各在谷歌搜索什么?
原文:https://towardsdatascience.com/what-was-puerto-rico-googling-during-and-after-hurricane-maria-9e034d1752d1?source=collection_archive---------9-----------------------
2017 年 9 月 20 日,波多黎各岛经历了有史以来最严重的飓风,名为玛利亚。作为风速超过 155 英里/小时(250 公里/小时)的四级飓风(在登陆波多黎各时),其过境结果是混乱的,致命的,对该岛是灾难性的,导致 4600 多人死亡,损失超过 900 亿美元。所述损害主要表现在该国基础设施的恶化和破坏,包括住宅、建筑、道路、电线、移动服务和互联网线路。继这一大气事件之后,在玛丽亚之前两周,——五级飓风——经过波多黎各北部,带来了第一场破坏性的暴雨和大风,最终被玛丽亚超过,并为她奠定了基础。
Somewhere in San Juan, Puerto Rico (by me, https://www.instagram.com/juandesr/).
由于该岛缺乏电力,互联网接入受到限制,并且有一系列新的优先事项和必需品,我预计整个人口的互联网使用模式将会发生变化。这一假设促使我进行这项研究。
在这个实验中,我将展示居住在波多黎各的人们在飓风期间以及飓风袭击后的几个星期里在谷歌上搜索的内容。此外,我将补充这一分析与 Alexa 排名的变化有关的信息,这是一个估计网站受欢迎程度的指标,是岛上人民经常光顾的一些顶级网站。
为什么在飓风过去几个月之后,我还在做这件事?主要原因是让数据收敛并回到其自然状态,同时也让人们了解将要讨论的主题,因为 2018 年飓风季节刚刚开始。
方法、工具和数据
关于谷歌搜索的数据是使用 谷歌趋势 获得的,这是一项谷歌服务,它提供了在搜索查询的给定地区和时间相对于图表【数据】最高点的搜索兴趣。换句话说,这些信息并不代表给定关键词或短语被谷歌搜索的次数,而是一个流行度分数。某一天排名 100,意味着该关键字在当时获得了最高的流行度;随后,50 分表示该关键字的受欢迎程度是其“100”对应项的一半。我将在这个项目中介绍的大多数可视化峰值在 100,然而,我希望读者能够将这个峰值与图表的其余部分进行比较,以了解变化有多大。
正如导言中提到的那样,飓风于 2017 年 9 月 20 日在波多黎各登陆。因此,本项目使用的谷歌搜索数据从 2017 年 1 月 1 日持续到 2018 年 6 月 24 日。通过使用飓风前几个月的开始日期和飓风后几个月的结束日期,我们将能够了解搜索关键字的流行程度是如何演变的。
此外,值得一提的是,数据具有每周粒度级别,这意味着 Google Trends 每周都会更新它,因此无法获得该关键字在给定日期的流行度。此外,该数据仅对应于在波多黎各进行的搜索,因此它不是一个全球流行度得分。关于所研究网站的 Alexa 排名信息,我将通过在https://www.alexa.com/上免费提供的情节图片来呈现。
使用 R 制作分析和绘图。
玛丽亚时代波多黎各流行的谷歌搜索
飓风穿过该岛对其大部分通信系统造成了毁灭性的破坏,使人们无法沟通,只能有限地使用固定电话、手机和互联网。最重要的是,考虑到人们需要必需品,如水、食物、药品、汽油、现金和娱乐(几周没电、不工作、无事可做,让每个人都感到无聊),而且他们没有与家人和朋友沟通的媒介。这些情况使我认为这些受影响的人会利用他们有限的上网机会来寻找应对这些情况的方法。此外,我想提出的第二个非常可靠的假设是,大多数搜索来自连接到移动宽带网络的移动设备。我背后的理由是,由于有线电视的恶化,大多数家庭都无法接入互联网,加上这是我去年访问波多黎各时经历的事情。
Alexa 等级
波多黎各的网络中断非常严重。事实上,据估计,玛丽亚过后三个月,该岛的交通量只有飓风前两天的 54%——恢复缓慢。
虽然知道这一点让我们知道这个问题有多严重,但这个统计数据(在我看来)并没有准确地告诉我们这如何转化为网站的流量。幸运的是,有一个平台提供这些信息。
Alexa Internet 提供了一个名为 Alexa rank 的关键指标,这是一个结合了网站每天接收的访客数量以及网站页面浏览量的分数,用于分配人气排名。研究这一分数随时间的变化为我们提供了了解特定网站访问量下降所需的信息。在这个项目中,Alexa 排名被用来支持新闻中读到的关于互联网使用减少的故事——以及我的假设。
使用这个分数的一个有效方法是研究一个国家中访问量最大的网站的全球排名;如果计数下降,这意味着该页面正在接受较少的访问。以波多黎各为例,我选择了波多黎各访问量最大的网站谷歌波多黎各(google.com.pr)来展示这一点。
Alexa rank of google.com.pr from July 2017 until July 2018
前面的图取自 Alexa,描绘了 google.com.pr 全球地位的发展。一开始,我们可以观察到排名稳步上升,然而,在 Maria 之后,分数突然下降了约 200 个位置,随后在 2017 年 12 月立即上升。
是否可以得出结论,这种下降是玛丽亚和互联网问题的结果?我会说是;这个巧合太精确了。
在继续之前,我必须承认,2018 年 5 月左右会有第二次下降,比飓风造成的更严重。为什么?这与之前的下降有某种联系吗?也许这是一个季节性的下降,这就提出了一个问题:玛丽亚下降可能只是一个季节性的影响吗?恐怕就我目前掌握的数据的数量和质量而言,我无法回答这个问题。
现在我们已经对波多黎各的互联网全景有了一个精确和更广泛的了解,我将继续展示在谷歌搜索中找到的结果,从查询航空公司开始。
“Don’t leave me internet!”
航空公司
首先要讨论的话题是航空公司。在这里,我将说明针对从波多黎各飞往美国的一些最常见的航空公司的各种搜索查询的 Google Trends 受欢迎程度。为什么主要是飞往美国的航班?这是因为波多黎各人是美国公民,我认为在这样的危机中,他们中的许多人会选择离开这个国家;需要考虑的一个相关问题是,在飓风发生时,许多企业和商业都关门了,这意味着大量的人失业,事实上,失业率有小幅上升。
对于该图及以下内容, y 轴代表一年中特定一天的 Google Trends 受欢迎程度,显示在 x 轴上。此外,虚线标记了 9 月 20 日(T7),即飓风到达该岛的日期,图表的图例正是我在谷歌趋势中查询的术语。
Puerto Rico’s Google Trends popularity level of “american airline”, “delta” and “jetblue”
数据显示,许多居民确实在寻找航班,可能是为了离开该岛。此外,下一张图显示了旅行费用聚合平台 Skyscanner 的搜索热度。
Puerto Rico’s Google Trends popularity level of “skyscanner”
为了验证我的结果,证明居民正在离开,我看了看新闻,发现波多黎各统计研究所证实,6%的人口逃离了这个国家。
快递和邮件服务
在危机最严重的时候,寻找货物、水和食物是一项艰巨的任务。资源稀缺且难以获得,因此,人们不得不在加勒比海的烈日下排长队,才能买到一瓶水等普通物品。为了缓解这种不足,受灾居民居住在国外的家人和朋友通过邮件服务寄送包裹。
下图显示了美国邮政署、联邦快递和 UPS 的搜索增量,根据该图,对联邦快递的查询是第一个达到 100 流行度值的查询,其次是 USPS 和 UPS。
Puerto Rico’s Google Trends popularity level of “usps”, “ups” and “fedex”
想了解更多关于邮差如何为岛国的恢复做出贡献的信息,我推荐路透社的以下文章:美国邮差成为公关恢复的英雄。
购物和金钱
波多黎各居民使用邮件的唯一目的是互相发送货物吗?还有什么吗?或者,我们也可以问为什么有这么多关于快递服务的搜索查询的原因之一是否是因为网上购物。虽然我们永远无法确定,但数据可以告诉我们,网上购物平台的使用,或者至少是谷歌对这类商店的搜索,也在增加。我认为(我相信你们大多数人也是如此)这样做的原因是为了找到另一种购买所需物品的方式。
Puerto Rico’s Google Trends popularity level of “amazon”, “ups” and “ebay”
亚马逊和易贝的数据表明,这两个平台的搜索量确实出现了激增。尽管如此,值得考虑的是,这些热门话题发生在繁忙的圣诞节期间,这个时期这些关键词越来越受欢迎。尽管如此,亚马逊和易贝的得分都高于去年圣诞季的得分;2016 年 11 月 27 日至 12 月 3 日,易贝的人气为 75(-与 2017 年相比下降了 23.4%),亚马逊的人气为 66 (-33.3%)。
与购买和购物问题相关的是钱的问题。不出所料,大多数银行都关门了。自动提款机现金不足或出现故障,一些人无法亲自去取;这个问题如此严重,以至于整个城镇都没有一台正常工作的自动取款机。为了绕过这些障碍,人们转向在线解决方案来转移资金。
我的下一个图表是关于波多黎各最大的银行 Banco Popular,本地转账移动应用程序 ATH·莫维尔和全球转账支付服务 PayPal 的搜索量增长。
Puerto Rico’s Google Trends popularity level of “ath movil”, “banco popular” and “paypal”
社交网络
在危险时刻,特别是在像波多黎各正在经历的紧急情况下,沟通发挥着重要作用。然而,正如在介绍中提到的那样,当时的通信很困难(就我个人而言,我花了大约一周的时间才联系到我的亲戚),因为岛上的大部分地区完全断开连接。尽管如此,那些能够访问互联网和社交网络的人正在利用它们来消除影响每个人的连接中断。通过我的接触,我感受到了一些相当奇怪的事情,如果我可以说是美好的事情,那就是很多人主动提出亲自去拜访住在他们附*的朋友和亲戚,以确保他们一切都好。例如,假设一个住在美国名叫 Pepe 的人无法联系到他住在波多黎各 Aibonito 的母亲。幸运的是,佩佩有一个朋友,住在他妈妈附*,能够去她家传递他的信息。
在下一次观想中,你将能够看到对脸书和推特的搜索突然增加。
Puerto Rico’s Google Trends popularity level of “facebook”, and “twitter”
这两个平台的受欢迎程度都有所上升,Twitter 是第一个恢复到“正常”水平的平台。
波多黎各人经常光顾的另一个高人气平台 insta gram(Alexa 排名 13)怎么样?与脸书和 Twitter 不同,IG 经历了受欢迎程度的(小幅)下滑。
Puerto Rico’s Google Trends popularity level of “instagram”
新闻
了解事实并掌握当前事件的信息是紧急情况下最重要的(如果不是最重要的)细节之一;波多黎各人对此并不陌生,因此,看到搜索当地新闻媒体的受欢迎程度上升也就不足为奇了。
Puerto Rico’s Google Trends popularity level of “endi”, “noaa” and “wapa”
前一个情节是关于波多黎各的主要报纸 El Nuevo día(T1)、国家海洋和大气管理局(NOAA)和 WAPA 电视台的分数。与过去的图表不同,这张图显示上升发生在 Maria 之前几周,也就是说,它对应于 Irma。
我还要指出波多黎各所描述的“阿达·蒙松现象”。她是谁?艾达·蒙松可能是波多黎各最著名的气象学家。她之所以“出名”是因为她通过自己的脸书主页发布了大量清晰准确的天气信息(这可能与脸书的崛起有关吗?)在飓风前后的日子里;迷因、笑话和人们告诉她她有多特别是围绕着她的一些事情。阿达的剧情是下一个,到厄玛的时候也表现出了相当的巅峰。
Puerto Rico’s Google Trends popularity level of “ada monzon”
最后,这个部分的最后一个可视化是关于美国新闻网站的搜索。促使我制作这一集的原因是分享美国总统唐纳德·特朗普(Donald Trump)对波多黎各的访问(10 月 3 日)如何影响了波多黎各居民对外国新闻媒体对他的访问以及他的扔纸巾技能的评论的兴趣。
Puerto Rico’s Google Trends popularity level of “cnn”, and “fox news”. The dots along the lines is to aid the location of October 3.
图表显示,尽管峰值与其他峰值一样处于最大值,但在特朗普停靠波多黎各的那一周,得分仍然很高。然而,我不能断定这种行为是因为那次访问。
代理和服务提供商
对信息和新闻的搜索并不仅限于上一节提到的网站和来源。正如我不止一次说过的,岛上大部分地区没有电、饮用水和互联网。在这种情况下,我认为,有必要尝试联系此类服务的提供商,询问或寻找有关中断状态的信息。因此,我怀疑对波多黎各电力局(我们在公关中称之为 AEE)、波多黎各沟渠和下水道管理局(AAA)以及 Liberty(一家互联网服务提供商)的搜索会增加。我的下一张图是关于这些机构的,正如所推测的,它证实了我的怀疑。
Puerto Rico’s Google Trends popularity level of “aaapr”, “aeepr” and “liberty”
娱乐
日复一日无所事事,什么都不开放,海滩不适合公众,这让你感到无聊。所以在这段休息时间里,你可以通过手机快速娱乐自己。在这一部分,我选择研究波多黎各人经常访问的两个平台:网飞,它被 Alexa 列为波多黎各第 18 大最受欢迎的网站,和 Pornhub,Alexa 排名第 29。波多黎各在这段时间看了更多的网飞和色情电影吗?
Puerto Rico’s Google Trends (smoothed) popularity level of “pornhub”, and “netflix”
不是网飞,但是是色情。
老实说,这让我很惊讶,尤其是因为网飞的减少和色情网站的增加之间的关系是如此的明显。
作为一个技术边注,这个图看起来不同于其他图,因为我决定平滑线,由于原始数据有许多高点和低点。
替代能源
在停电季节的高峰期,发电机是黑暗中闪耀的光。事实上,在那里我们有太多的人,由于噪音,晚上睡觉是一个障碍,直到烟雾引起健康问题;的确是一个发电机岛(据《纽约时报》报道)。然而,发电机是唯一的能源来源吗?虽然我们无法确定,但数据表明人们对太阳能的兴趣有所增加。因此,下一个情节是关于搜索和寻找“plantas electricas”(发电机)和“energia solar”(太阳能),它表明对发电机的兴趣始于飓风 Irma 前后。
Puerto Rico’s Google Trends popularity level of “energia solar”, and “plantas electricas”
波多黎各有什么没用谷歌搜索的?
这个项目的中心前提是,波多黎各正在遭受重大的互联网中断,使许多人无法访问它,我们通过解释文章开头显示的几个网站的 Alexa 排名下降来证实这一点。尽管互联网形势严峻,但我们已经看到,在飓风到来后的几周内,特定关键词的受欢迎程度(在大多数情况下)达到了最大值。然而,如果互联网接入没有正常工作,人们使用他们所拥有的一点点资源来关注重要的事情(根据我的假设),那么一定会有许多关于波多黎各人通常会寻找的“常见”事物的谷歌搜索查询,这些查询的受欢迎程度得分会下降。
在这一部分,也是最后一部分,我将展示三个图表,显示波多黎各排名最高(涉及流量)网站的搜索人气下降。
在“娱乐”部分,展示了两个视频流媒体平台——网飞和 porn hub——的搜索量是如何在飓风过后迅速上升的。这就引出了下面的问题:在搜索电影院时也观察到了这种行为吗?答案是否定的。像其他任何事情一样,电影院也因为飓风的影响而关闭,包括停电,所以看到这种搜索的突然下降并不奇怪(去年 12 月,我在公关公司时,去了两次电影院,两次都是因为停电而中断了电影)。
下图显示了对波多黎各最大的连锁电影院 加勒比电影院 的搜索演变,根据 Alexa 的数据,该电影院的网站在岛上的访问量排名第 77 位。在图中,我们可以很容易地看到,通常为平均水平的谷歌评分在飓风过后的一周内下降到了 7。
Puerto Rico’s Google Trends popularity level of “caribbean cinemas”
搜索量下降的第二个平台是Clasificados Online,这是一家本地分类网站(Alexa 排名第 16 位),销售/购买汽车、房地产和广告工作。有趣的是,在减少后不久,圣诞节期间该平台的查询量激增,并持续到 2018 年的前两个月。下图解决了这个问题。
Puerto Rico’s Google Trends popularity level of “clasificados online”
我将用一个情节来结束这一节,这个情节说明谷歌搜索 Pinterest (Alexa 排名 48)和维基百科(Alexa 排名 10)的崩溃。关于 Pinterest 的数据表明,该平台的受欢迎程度迅速下降,而在维基百科的情况下,与之前的例子相比,这种下降是温和的,几乎没有意义。
Puerto Rico’s Google Trends popularity level of “pinterest”, and “wikipedia”
关闭
在 16 次可视化中,我们发现、解释并在某些情况下与其他来源交叉检查了飓风玛丽亚登陆以及互联网接入短缺对波多黎各人民谷歌搜索模式的影响。通过这些数据,我们能够认识到这样的事实,如商品和必需品的缺乏促使人们使用其他媒介,如网上购物和邮件来获得他们需要的东西,波多黎各不是那么秘密地爱上它最喜欢的天气预报员,以及色情是最受欢迎的娱乐方式之一。
在危机和危险的时刻,团结和合作的意识没有被玛丽亚之风带走。脸书给我们看了这个。搜索量的激增表明,许多人至少在尝试相互交流。最重要的是,对“ATH·莫维尔”的查询显示,人们希望通过他人转账来提供帮助,关于邮件服务的图表显示了那些不在现场的人的慷慨。
另一个积极的迹象是对太阳能感兴趣的人越来越多。虽然很遗憾不知道有多少人搜索过这个,但之前的数据显示至少有一个人想在可持续能源的问题上展示自己。这就引出了我的最后一点,教育和定位。
如果我,胡安·德·迪奥斯,一个波多黎各人,想要你,亲爱的读者,从你已经读过的最后 3660 个单词和你观察到的 16 个图表中去掉一些东西,那就是面对这种大气事件的准备和定向应该是优先的。更重要的是,我想把这个评论延伸到文章中提到的机构和当局。如果上述实体采取必要的措施,也许买水的队伍会更短,人们会在电影院欣赏更多的电影,我就不会写这篇文章了。然而,关于波多黎各,我必须承认,由于该岛目前面临的不稳定和微妙的经济局势,这不是一项容易或可行的任务。
如果我们做得更好,我可以保证我的下一张图看起来会有所不同。
感谢阅读。
欢迎讨论、评论,甚至指正:)。代码和图像可在【https://github.com/juandes/pr_maria_searches】获得。还有,你可以打https://twitter.com/jdiossantos联系我。**
得益于数据可视化,您可以从您的 Facebook Messenger 历史记录中了解到什么
原文:https://towardsdatascience.com/what-you-can-learn-from-your-facebook-messenger-history-9ac63e962885?source=collection_archive---------13-----------------------
为什么不充分利用脸书掌握的关于我们的所有数据呢?
我一生交换了多少条短信?我和谁聊得最多?我会发送或接收更多的消息吗?我什么时候发短信最多?
TL;博士:如果你想回答这些关于你的 Facebook Messenger 历史的问题,请查看FBMessage Explorer
自从我小时候有了手机,开始大量发短信,我就一直对这个活动的统计数据很好奇,很长一段时间,我都无法回答这些问题。然而,我的短信*惯逐渐从短信转向了 Facebook Messenger,以至于我现在几乎只使用 Facebook Messenger 发短信。一个伟大的事情是,它可以下载你所有的短信历史,并对数据做任何你想做的分析。
因此,当我在工程学院的最后一年不得不为 Dataviz 项目选择任何主题时,我抓住了这个机会:我和我的合作伙伴一起开发了一个工具,它可以让我了解我想要的关于我的短信*惯的一切,甚至更多。我们称它为 FBMessage Explorer ,好消息是,任何人都可以使用这个工具。我们试图让它尽可能地易于访问:不需要写一行代码,只需点击!
本文的第一部分粗略地解释了不同的特性,以及如何阅读结果,然后我深入自己的消息,概述了我可以为自己提取的一些见解。然而,我的想法并不是向世界展示我的短信生活,而是做一个这个工具的演示,看看你能从中得到什么,这样你就可以用它来处理你自己的数据了。最后一部分是如何下载和使用您的数据的详细说明,所以请继续下去,并尝试自己!
让我们看看这一切代表了什么
当你第一次打开网站时,你首先看到的是这个奇怪的屏幕,到处都是点,底部和左侧窗格是曲线,右侧是条形图。
Overview of FBMessage Explorer
这对应的是什么?让我们一个一个地看每一部分。
- 散点图:工具的主要部分是带有所有圆点的中心部分。每个点对应一条信息,发送或接收,根据发送的时间来放置:横轴对应日期,纵轴对应一天中的时间。
- 曲线:作为补充,在左手边,你可以找到你一天的轮廓:在一天中的任何时间发送了多少条消息,沿着你的消息的整个历史。它帮助你确定一天中你最活跃或最不活跃的时间。下面的曲线也是如此:你可以看到一年中你最活跃或最不活跃的日子和时期。
- 条形图:在右手边,你可以找到一串条形图。每个条形图根据给定的标准给出消息的重新划分。这样,你可以看到发送/接收了多少条信息,或者在每次对话中交换了多少条信息等等…
- 消息:最后,如果你想知道“我在周二凌晨 4 点发的这条消息到底是什么?”只需将鼠标悬停在该点上,并阅读右下角的消息。
可以过滤!
为了让用户能够深入了解他们历史中非常具体的方面,我们可以根据多种标准过滤数据。如果您单击右侧条形图中的任何一条,将只留下与该标准相对应的消息,您将看到一切都发生了变化:点将消失,条形图和曲线将更新以反映所做的选择。例如,这样你可以只分析你发送的信息,回到你和你喜欢的人之间的单条线索,或者排除所有的群组线索,专注于一对一的对话。
Filtering
但不是这样,你还可以过滤日期和时间:只要抓住灰色窗口的手柄,拖动它,使它适合你想研究的时期。您将看到所有中心疼痛放大到所需的区域,并且不同的条形图会根据选择进行更新。一天中的时间也是如此!
Filtering on time and date
但是真正的真正力量在于可以做交叉过滤!这让你可以只分析你在 2017 年 5 月的晚上在一个特定线程中发送的消息的模式——或者真正的任何过滤器组合!
Cross filtering with multiple criterion
颜色;色彩;色调
最后,如果你点击不同条形图旁边的色轮,每个点会呈现不同的颜色,与对应的条形图相匹配。通过这种方式,你可以识别出你没有注意到的模式。
Using colors
我从自己的历史中学到了什么
在这个关于工具如何工作的长篇大论之后,让我们来看看酷的东西:我从这个工具中获得了什么启示?这将引导我们从这个工具中你能获得什么样的见解?
我将仅仅展示我从自己的数据中学到的一些见解。我试图尽可能地保持这篇文章的私密性,我觉得我真的不能突出你能深入到什么程度以及你能找到什么有趣的东西。
My personal Facebook Messenger History
一些见解的列表,排名不分先后
- 在我使用 Facebook Messenger 的整个过程中,我发送了 102 632 条消息,收到了 41 309 条消息。这相当于平均每天交换大约 40 条消息。
- 我最积极的对话是和我的前女友,我和她在一起三年半了。我们大部分时间通过短信,但她仍然在比赛中名列第一。第二个最活跃的话题是与大约 50 个朋友的小组对话,他们会变得非常健谈。
- 现在,如果你看看在我所有的对话中发信息最多的人,我最好的朋友超过了我的前女友。这是因为我们与不同的朋友群体有很多共同话题,所以他发送的所有信息都被这些对话冲淡了。而我和我的前女友大部分时间都是通过我们的一次谈话来交流。
- 你可以清楚地看到,我大多在凌晨 1 点至 7 点半睡觉。至于白天,我整天或多或少都会发短信,中午 12 点左右的午休时间会有一个高峰,下午 6 点左右离开大学时也会有一个高峰。
- 从这些年的趋势来看,很明显,随着时间的推移,我越来越多地使用脸书。
- 一个非常明显的模式是从 2017 年 9 月到 2018 年 3 月的这段时间,在这段时间里,我比平时发了很多短信。这实际上是我学*的最后一年,在此期间,我与朋友、室友、小组项目等进行了很多非常活跃的对话…
- 你可以看到我做了一次 7 周的旅行,由于时差的原因:看起来我在 2018 年 10 月和 11 月期间没有睡觉,但实际上我从下午 6 点到凌晨 1 点(欧洲时间)一直在睡觉。
“我的想法不是向世界展示我的短信生活,而是做一个这个工具的演示,这样你就可以用你自己的数据来使用它”
你如何用你自己的数据来尝试这个?
正如我所说的,我试图让这个工具尽可能容易地用于您自己的数据。你所要做的就是通过他们特定的工具下载你的脸书数据,解压文件,并从你的浏览器窗口中选择正确的文件夹。让我们一步一步来。
从脸书下载您的数据
- 打开您的脸书帐户,进入设置->您的脸书信息->下载您的信息。
- 在这里,你必须选择你想在你要下载的文件中出现的内容。至少选择“消息”(如果您想知道会出现什么,可以选择其他元素)。
- 选择日期范围“我的所有数据”,以及文件格式 JSON,然后点击“创建文件”。
Asking you data to Facebook
脸书会在他们的服务器上创建一个 zip 文件,准备好了会给你发邮件。通常很快,但有时可能需要几天时间。当你收到邮件时,登录脸书,下载文件,解压。如果你浏览这些文件,你应该会看到不同的文件夹:当你创建你的文件时,每一个文件夹对应一个类别。我们将使用的是“消息”文件夹。
在 Chrome 或 Firefox 中打开FBMessage Explorer,点击“探索自己的数据”,然后“使用自己的文件”,选择刚刚下载的文件夹“Messages”。等待工具处理您的数据(根据要处理的消息数量,可能需要一分钟),然后开始探索!
Using your own data
我们不是国家安全局,你的数据是安全的
“他疯了吗?我永远不会把我的脸书历史给这个网站!”
你可能担心把你所有的私人信息交给一个你没有任何理由信任的工具。你应该这么做!一些浏览器,如 Chrome,甚至发出可怕的警告,说你要上传你所有的信息,你应该三思而后行。但是这个警告并不是真正合法的,这里有几点可以告诉你它是安全的:
浏览器将数据装入内存,并在本地进行所有的处理:没有一个数据离开你的计算机
首先,你没有上传你的数据,你只是向你的浏览器显示数据在你的电脑上的位置,并授予它对数据做任何事情的权利(这就是你得到警告的原因)。然而 FBMessage Explorer 不会使用这种授权:浏览器将数据加载到内存中,并在本地完成所有处理。没有一个数据离开你的电脑。
“我为什么要相信这篇文章写的是什么?这可能是一个谎言,我不会知道!”
这个项目是开源的,所有人都可以看到全部源代码。如果你熟悉编程,可以去看看。如果你不是,事实上这是开源的,这意味着书呆子们可以浏览代码,看到发生在幕后的一切。如果我在撒谎,一些数据被发送给某人,他们会知道,他们会以某种方式举报我(可能在评论区)。
最后,如果你仍然不确定你的数据是安全的,你可以在使用 FBMessage Explorer 之前关闭互联网。
“他傻吗?这是一个基于互联网的工具,它不会工作……”
会的。如果你先登录网站,然后等待它加载,你的电脑现在已经有了所有必要的内存。然后你可以关闭互联网,并选择如上所述的文件在你的电脑上。因为所有的处理和计算都是在本地完成的,所以一切都会很好,而且你可以绝对肯定你的数据是安全的,没有离开你的计算机。
玩得开心!
如果您在使用该工具时有任何问题,任何反馈、问题、建议等,请告诉我
您将从 fast.ai (v2)中学到什么第 2 课
原文:https://towardsdatascience.com/what-youll-learn-from-fast-ai-v2-lesson-2-6e700ab24b2c?source=collection_archive---------4-----------------------
在之前的博客中,我们已经讨论了什么是 fast.ai 以及 fastai 的第一课包含了什么。我们还讨论了“参数是什么”、“损失函数和梯度下降有什么作用”以及“为什么学*速率很重要”。如果你还没有看过那个博客,我建议你在继续之前先看看。因为这个博客有很多关于 fastai 第一课的参考资料。如果你已经读过了,那么通过这篇博客让我们继续第二课,学*由杰瑞米·霍华德和瑞秋·托马斯在他们的 fastai 库中开发的各种技术。
我不得不阐述许多事情,并举例说明几个概念,以清楚地解释它们背后的逻辑。在这个过程中,博客变得非常冗长。不要担心那个。
在开始上课之前,有几件事情是数据科学新手必须知道的。如果你已经熟悉深度学*的行话,可以直接跳到第二课部分。
随机梯度下降或小批量梯度下降与我们在之前的博客中讨论过的梯度下降概念没有什么不同。唯一的区别是数据集的大小。传统上,人们在更新权重时会考虑整个训练集。这很好,只是每次更新都要占用大量空间。
因此,人们将整个集合分成小的子集,称为小批量,并利用这些小集合来更新参数。然而,在所有这些小批量更新结束时构建的模型将不会像通过整个集合那样通用。为了掩盖准确性,我们在整个数据集上训练模型,分成小批量,多次。这些被称为时代。因此,在几个时期内对模型进行小批量训练将会得到一个更一般化的模型,同时确保不存在任何内存使用问题。
第二课:
第 2 课主要讲述如何使用 fastai 库中的各种技术,以提高分类器的准确性。可以列举如下:
- 数据增强如何帮助提高准确性?
- 哪里使用,哪里不使用‘预计算’?
- 什么是带重启的随机梯度下降?还有什么是 cycle_length 和 cycle_mult ?
- unfreeze() 函数会做什么,微分学*率如何细化模型?
- 训练时如何处理图像大小和批量大小,这些会如何影响训练?
数据扩充:
粗略定义的数据扩充是一种用于创建更多数据的方法。这种“方法”包括一组应用于输入图像的变换,以给出它的多个副本,每个副本有一个小的变化。例如,请看下图。
这些是 fastai 第 2 课中使用的一些转换。在第一和第二图像之间存在垂直平移,并且第三图像是第一图像的镜像。您可以根据需要添加任意多的不同转换,并增加训练集的大小。只要确保转换是合乎逻辑的。例如,如果原始对象没有因为图像的过度放大而变形,则放大图像可以被认为是变换。
预计算:
当我们导入特定架构时,如 VGG16 或 Resnet34 等。,我们可以选择加载所有预训练的砝码。在 fastai 库中,在构建模型时,可以通过设置“precompute = True”来加载权重。
这些架构中的大多数是为 ImageNet 大规模视觉识别挑战(ILSVRC)而设计的。ILSVRC 是计算机视觉领域一个非常著名的挑战。它包含各种挑战,包括图像分类,模型优化,图像分割等。该数据集包含 1000 个类,其中包括几个狗的品种,猫的品种,鸟类等。来自世界各地的人们竞相展示他们的知识。
如果您正在处理的数据与 ImageNet 数据集的数据相似,则设置“precompute = True”将缩短训练时间。如果数据完全不同,建议不要使用预先计算的权重。简而言之,预计算模型更偏向于与 ILSVRC 数据集相似的数据集。
重启随机梯度下降(SGDR):
SGDR 解决了我们在培训过程中面临的两个主要问题。
- 它将通过调整学*速率来确保模型得到改进。
- 它将确保这个模型更具普适性,把它从任何尖锐的井中提取出来。
对于每个小批量迭代,权重的更新取决于斜率/梯度和学*速率。当在每一步之后更新权重时,在某一点,我们将到达 dW 在最小损耗点附*振荡的位置,如图所示。
当这种情况发生时,模型停止学*,因为权重没有提高。在这种情况下,由于我们不能改变斜率,降低学*率将确保正确更新权重。每当他们观察到损失没有进一步改善时,使用阶跃衰减,将学*速率降低一个因子,比如 10,是这个问题的解决方案之一。
阶跃函数的替代方法是余弦退火,它改变学*速率,如下所示。
Cosine Annealing
余弦退火用于将损耗降低到尽可能小。这有助于增强模型。为了进一步推广该模型,我们以如下方式在几个时期后重置学*率。
这被称为带重启的随机梯度下降。让我们假设我们从 1e-2 的学*率开始。在第一个时期结束时,学*率降低到 1e-3。我们再次将学*速率重置为 1e-2,这一次我们在将其降低到 1e-3 之前运行 2 个时期。并且重复这个过程。
这种方法的优点是,即使模型停留在任何局部最小值,SGDR 也会将其推出,并确保模型达到更普遍的全局最小值。
周期长度给出第一个周期的长度。在我们的例子中,这是 1,因为我们在 1 个时期内将学*率从 1e-2 降低到 1e-3。 cycle_mult 决定了我们重复这个过程的次数。在上图中, cycle_mult 为 3。
如果 cycle_length = 2,cycle_mult = 2,那么它看起来像这样。
Unfreeze():
unfreeze() 功能顾名思义就是解冻模型。当运行梯度下降时,在几个时期之后,损失达到平稳状态。即使我们使用梯度下降重启,情况也不会改善。发生这种情况是因为在几次迭代之后,外层的更新成为主导,而内层被冻结。 unfreeze() 函数将在所有层之间平均分配权重更新。
在分配权重时,我们需要非常谨慎地选择正确的学*率。众所周知,最内层更关注边缘,中间层更关注曲线或圆形结构,最外层处理特征识别。
对于最内层,更好的权重意味着更锐利的边缘。所以这些层对权重更新非常敏感。这是模型冻结的主要原因。但是如果我们对这样的层使用小的学*率,那么我们可以微调它们来锐化边缘。fastai library 通过使用他们定义为“差异学*率”的东西来做同样的事情。其中我们可以为不同的层选择不同的学*速率。
一旦我们在 lr_find() 的帮助下找到了最佳学*速率,我们就可以降低中间层和内层的学*速率。例如,在使用 lr_find() 之后,假设我们得到 1e-2 作为我们模型的最佳学*速率。使用 lr = [1e-4,1e-3,1e-2] 将内层的学*速率设置为 1e-4,中间层为 1e-3,外层为 1e-2。使用 unfreeze() 然后使用不同的学*率,可以将精确度提高 1-2%左右。
批量大小和图像大小:
最后,杰里米的一个非常有趣的观察是:一旦模型被训练,增加输入的图像大小有助于模型避免过度拟合。
我们很容易理解为什么会出现这种情况。通过扩大输入,您基本上向模型展示了模型以前可能没有遇到过的附加特性。
例如,假设最初您已经在 224x224 图像输入上训练了模型。因此,我们从原始图像中提取 224x224 的裁剪,并将其用于训练。现在,如果我们将输入大小增加到 229x229,那么感受野会增加,这个更宽的输入包含了比之前更多的图像信息。
但是,如果我们增加图像大小,由于内存限制,批处理大小应该会减少。并且具有非常小的批量会在训练时增加很多噪音。无限增加图像大小会迫使算法采用较小的批量,不建议这样做。
图像大小和批量大小是两个超参数,应该根据自己的记忆容量仔细选择。
这些是我从 fastai 的第二课中发现的要点。如果我错过了什么,或者你想知道更多关于某个特定主题的信息,请在下面的评论中提出。我总是乐于接受讨论和积极的批评。如果你喜欢这个博客,觉得它内容丰富,那么别忘了鼓掌。
快乐学*!干杯!
你将从快速人工智能(v2 第 2 部分)第 8 课中学到什么
原文:https://towardsdatascience.com/what-youll-learn-from-fast-ai-v2-part-2-lesson-8-86c950f7b359?source=collection_archive---------13-----------------------
fast.ai 是最好的 MOOC 之一,它向具有血统编程背景和一点数学背景的学生教授深度学*。fastai 有 14 节课,分为两部分,每部分 7 节课。这 14 个视频完全涵盖了卷积网络(ConvNets)、自然语言处理(NLP)、结构化数据分析、推荐系统等主题。
fastai 的第 1 部分首先介绍世界各地的人们实践的现代技术,然后讨论这些技术的基本概念。在第二部分中,fast.ai 课程的创建者杰瑞米·霍华德和雷切尔·托马斯采用了一种略有不同的方法,教授如何阅读、理解和实施研究论文。
快速总结我们在第 1 部分学到的内容:
迁移学*允许你使用已经在数据集上训练过的模型,该数据集类似于你正在用于你自己的问题陈述的数据集。这是通过用新的随机初始化的 FC 层替换最后一个完全连接的(FC)层来实现的。现在训练模型只是学*最后一个 FC 层中的参数。因此,迁移学*将会派上用场,因为它可以将训练时间缩短到通常学*所有重量所需时间的一小部分。
克服过拟合:认为对更多的历元数进行训练会使模型工作得更好,这是人的天性。这确实是真的,但是在训练集上效果更好。不在测试集上。这就是我们所说的模型过度适合训练数据的时候。为了概括这个模型,我们在第 1 部分中遇到了数据扩充、删除、批处理和其他类似的技术。这些技术将让你使用一个更广更深的网络,这是通用的。
嵌入:当涉及分类特征时,仅仅使用一次性编码很难捕捉到细节。例如,在第 1 部分中,我们考虑了位于不同城市的商店的销售预测。对于诸如星期几或商店位置之类的特征,我们可以通过使用一种叫做嵌入矩阵的东西来包含不同城市每天的相关性。在第 1 部分中,我们已经了解了使用嵌入的重要性。
架构设计:架构偏好完全取决于数据。对于有序和固定大小的数据,我们使用 CNN,对于序列,我们使用 NLP 技术,对于多标签分类,我们使用 Softmax。我们已经在 fastai 的第 1 部分中详细讨论了这些。
在第 2 部分中,我们将会遇到:
fastai lesson 8 live video snapshot
在第二部分,正如我前面所说,我们将学*阅读和实施那些有价值的研究论文,如果不是每一篇研究论文的话。在第 1 部分中,我们更加关注图像分类、预测分析和情感分析。在第 2 部分中,我们将讨论对象检测、语言翻译、大数据分析和其他相关主题。在 fastai 的版本 1 中,我们也讨论了时间序列。但是我们可以在机器学*课程中找到那些题目。
那些对 python 几乎没有经验的人现在将是学*和练* python 和 PyTorch 编码的好时机(我们将使用后者从头构建深度学*模型)。在线阅读代码示例时要小心。几乎所有的都会有瑕疵。
而有一点数学背景的,尽量多读研究论文。这将在两个方面帮助你。第一,你将熟悉希腊字母,它们在所有的文章中几乎有相似的意思。第二,你将不再害怕方程式。碰巧的是,院士们用庞大的方程来表达简单的想法。理解这个概念很重要。
如果你对编码和面对理解方程式的问题感到舒服,或者相反,试着活跃在论坛上,写下你的经历。他们会成为你学*过程的催化剂。
博客上的一个小提示。不要犹豫,写下你心中的任何想法。每个人都有不同的理解方式,你的博客可能会帮助其他正在学*的人。
到目前为止,我们一直在借助虚拟机和各种库来构建分类器或推荐系统或其他类似的模型。但从现在开始,我们将从头开始构建这些模型。所以拥有一个配有像样 GPU 的系统会有很大的帮助。购买自己系统的指南:
Another snapshot of live fastai lesson 8
物体检测:
对象检测有两个部分。多个分类和围绕每个对象绘制边界框。在第 8 课中,我们将尝试创建对象检测器的第一阶段,在给定的图像中,我们尝试找到最大的对象,检测该对象是什么,在该对象周围绘制一个边界框并标记它。这仅适用于一个对象。在后面的课程中,我们尝试多重分类。
为此,我们使用 PASCAl VOC 数据集,它包含带有相应注释的图像。每个图像的注释具有关于图像中所有对象的信息、框的起点坐标、框的高度和宽度。
Image from http://host.robots.ox.ac.uk/pascal/VOC/databases.html#VOC2005_1
这是 2005 年 PASCAL VOC 数据集的一个例子,其中盒子的细节包括左上坐标和右下坐标。我们使用 2007 数据集,其中盒子细节包括左上角坐标及其高度和宽度。我们会将该格式转换为左上/右下格式。
编码细节:
- 我们使用
pathlib
库作为文件路径的生成器。PATH
为文件路径创建对象。像cv2
这样的库中不允许有对象,所以我们需要将文件路径转换成字符串。
- 我们导入了
json
库,它直接从给定的文件路径中提取图像、注释和类别。
- 注释包含边界框信息。
bbox
我们在注释中的是[x _ 坐标,y _ 坐标,高度,宽度] x,y 坐标表示盒子开始的地方,也就是左上角,然后是盒子的尺寸(高度,宽度)。- 我们需要将这些信息转换成左上/右下的格式。
bb
在这段代码中也有 4 个元素。前两个给出了位置坐标。它们可以互换,因为在 VOC 数据集中,一个点被表示为[列,行],但在我们的 ConvNet 模型中,我们将一个点视为[行,列]。而bb
的下两个元素给出了盒子的右下角(左上角行号+宽度给出了右上角。右上角列号+长度给出右下角。)
对于编程新手来说,Jeremy 就如何使用 Visual Studio,如何调试你的代码,如何使用 Matplotlib 的面向对象的 API 用它们对应的 bbox 打印图像做了一个小小的介绍。你可以从 fastai 资源库下载笔记本阅读理解。
训练模型:
我们面临两个挑战。第一,对最大的物体进行分类。并绘制边界框。在第一部分中,我们遇到了许多对图像进行分类的技术。我们可以看到下面每张图片的预测标签。
所以第一部分已经部分解决了。为了预测多个物体,我们需要对代码做一点调整,我们会在后面的课上看到。但是为了创建边界,我们可以使用bb
作为每个图像的标签。也就是说,我们预测了 4 个不同的数字。我们可以把这看作一个有 L1 损失的回归问题,并预测这 4 个数字。如果我们使用我们在第 1 部分中学到的技术进行训练,比如lr_find(), cycle_len, cycle_mult,
,我们会得到一个模型,它可以完成我们在下面看到的合理工作。
如果你仔细观察,这些盒子并不完美。如果图像中有多个对象,则在对象之间的中间位置绘制方框。我们可以在后面的课程中进一步完善这个模型。
fastai v2 的第 8 课到此结束。fastai v2 的第二部分目前只对已经申请并被接受为国际研究员的人开放,以及在旧金山大学亲自上课的人。但是如果你不在团契里,没什么好担心的。您可以直接提取 fastai 课程的 git 存储库,并且在“课程”文件夹中,您可以找到包含本课程的 jupyter 笔记本的“dl2”/“deep learning 2”文件夹。我会尽我所能涵盖课程中教授的所有主题,这样你就可以很容易地跟随笔记本并理解正在发生的事情。
重要提示:无论你是不是国际研究员,你都必须能够在不查看的情况下重建整个笔记本。笔记本必须充当资源。一旦你理解了这个概念,试着编码并复制这个笔记本。如果你被困在某个地方,那么参考笔记本。
我欢迎所有的国际研究员来评论你的想法。让我们一起享受学*深度学*概念的乐趣,在各个领域工作,从而解决世界上最受关注的问题。让我们把‘国际联谊 2018’打造成 fastai 最好的一批。
如果你喜欢这个博客,别忘了鼓掌!
您的 iMessage 数据显示了您的哪些信息
原文:https://towardsdatascience.com/what-your-imessage-data-says-about-you-daa186db16d?source=collection_archive---------12-----------------------
如今,我们几乎只通过短信交流。甚至我 96 岁的祖母也懂表情符号,知道表情符号的真正含义🍆和🔥。
对这些信息的分析会是什么样的呢?我们能从关系中学到什么?
在本文中,我们将找出并研究如何围绕这些消息可视化构建一个应用程序!
你有没有在写私人短信的时候把手机倾斜开了?
你会让一个陌生人浏览你的对话吗?
想想我们的信息历史是多么的暴露和亲密,这几乎让人不舒服。它直接记录了我们与那些我们认为值得回短信的人的关系。
iMessage 在在线信息领域占据主导地位,因为它本质上与苹果设备是锁定的。
任何拥有 MacBook 和 iPhone 的开发者或重度电脑用户都知道 iMessages 自动同步带来的难以置信的便利。
好吧,酷——很好的推测。数据怎么说?
锁定数据
这些数据不容易获取并不奇怪。iOS 完全锁定了消息——无法通过其 SDK 以任何方式访问。
此外,在 iPhones 锁定的环境下,我们没有太多的选择来定位和分析设备上的信息。
要是有一种方法可以让我们实时导出这些消息就好了…
💡AH HA! - The desktop app!
我们的后门
经过对苹果文档的研究,我们在 MacBook 上找到了 iMessage DB。
如果我们在终端中运行这个简单的命令,我们将获得数据库的路径。
echo /Users/$USER/Library/Messages/chat.db
Finding the path to our messages database
探索/理解这种混乱
我们打开数据库,但好的数据在哪里仍然让人有些困惑。我们仍然需要对这些数据库字段进行逆向工程——或者翻遍苹果文档。
让 SQL 与 DB Browser for SQLite 一起使用一段时间,这是一个处理 SQLite 数据库的简单应用程序。
chat.db loaded into DB Browser for SQLite
[## SQLite 的数据库浏览器
2017-09-28 -新增 portable app 3 . 10 . 1 版本。谢谢约翰。:)2017-09-20 - DB 浏览器 for SQLite 3.10.1 已…
sqlitebrowser.org](http://sqlitebrowser.org/)
几个小时后,我从 Apple docs 中拼凑了足够的工作 SQL 和线索来提取所需的信息。
这项工作被封装在一个 Python 类中,这样我就可以在 Jupyter 笔记本上做一些分析。
下面是提取数据的片段
现在我们可以用 Python 做一些真正的分析,然后将一些工作转化为有用的可视化。
🤷🏽表情符号也很重要!
即使在我们的分析中不包括文本,我们也可以做一些表情指纹识别。
我们可以很好地了解一段关系,只需显示我和另一个人之间发送的每个表情符号的数量。
如果分解成发送-接收,这可能更具描述性。
这是我和朋友们的三个不同的表情网格
模式发现
太好了,我们有漂亮的图片,还对表情符号做了一些汇总。
然而,我们希望确保这些东西在现实世界中是有意义的,并做一些理智检查。
在这里,我们将进行更深入的分析,并尝试将我们提取的几个数据点联系在一起。
下面是一个和我一起生活的家庭成员的一小时一天的图表。顶部的表情符号也显示在右边。
我们立即注意到晚上 9 点左右的深色方块,以及大量的狗表情符号……对我来说,这种模式再清楚不过了。
我的狗内斯;大约在晚上 9-10 点最后一次散步。如果我不在家或者离家很远,我的家人经常会带他去散步。
这些文字是在问 Ness 是否需要遛,有时还附带一个狗表情符号。
太好了——事情正在有序进行。
“这是你必须做的🐕esta noche?”
—家庭成员
这一切都是为了这个人
Ness being dramatic on FT
让我们再做一次——制作一个应用程序
现在我们有了这个很酷的工具,但是我们想让它可重复使用。我们将使用 NodeJS 进行 SQLite 连接,使用 Express 来提供服务,使用 Electron 来打包。
我们需要:
- 构建 UI——让我们从实际的 iMessage 应用程序中获得灵感!
- 对 DB 连接器脚本进行分类——让我们使用 NodeJS
- 构建一个小型服务器来连接 UI 和 DB
- 制作一个小型电子应用程序包装器
General App Layout
构建应用程序
我们使用之前编写的 python 脚本作为节点版本的起点。我们做这种语言转换是因为我们最终想把这整个东西打包成一个 AppStore Mac 应用程序。Electron 使这个过程变得更容易,我们希望所有的代码都使用同一种语言。
首先,让我们创建一个电子应用程序 shell——一个 main.js 文件,它将打开一个窗口,监听本地主机和我们的 UI 将在 dev 中运行的端口。
接下来,我们使用 express 来设置一个小型服务器。这个服务器应该返回应用程序的 html 页面,并且有两个端点——一个获取消息,一个获取最后的消息;iMessage 中的侧边栏。
您会注意到,这个服务器正在实例化我们尚未构建的 DataGrabber 类,这将是翻译后的 python 类。
当我们构建它时,有一些变化,因为现在我们使用承诺来确保数据被返回,而不是依赖 python 的同步执行流。
这些基本上是构建应用程序所需的所有部分,我们仍然需要大量的 CSS,JS 和 HTML 来制作 UI。如果读者感兴趣,我将把这个问题留给他们。
❓Questions 致读者
- 你认为我们能从谈话中提取出什么样的信息?
- 我们如何做到这一点?
- 这样做的危险或好处是什么?
- 这些信息是人们想了解自己的吗?
Thanks for getting through this adventure with me. Please show support and 👏 (clap) for this article.Remember you can clap up to 50 times, and clapping for this article would be really helpful in the Medium algorithm. Any support is greatly appreciated ❤️ Also, please answer the questions and add to the discussion below
客户价值几何?用 Python 为非合同业务建立客户终身价值模型
原文:https://towardsdatascience.com/whats-a-customer-worth-8daf183f8a4f?source=collection_archive---------0-----------------------
Photo credit: Pexels
在电子商务或零售业务中,企业和客户之间的关系是非契约关系。在非契约的世界里,顾客确实会走开,但他们是默默地走开的;他们没有必要告诉我们他们要离开。这使得 CLV 的计算更加复杂。我们必须查看自客户上次交易以来的时间,并提出一个问题:客户是活着但处于休眠状态,还是客户“死亡”(“活着”意味着客户与我们互动,“死亡”意味着他们作为客户变得不活跃)?
因此,我们在这里:为非合同业务的客户终身价值建模。
该分析由沃顿商学院的彼得·法德尔博士提供。在这个分析中,我们不会深究 CLV 的数学。不过,如果你有兴趣,这里有的论文。
数据
我们将使用的数据与我们进行购物篮分析和客户细分 — 在线零售数据集时的数据相同,这些数据可以从 UCI 机器学*库下载。
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
df = pd.read_excel("Online_Retail.xlsx")
df.head()
Figure 1
像往常一样,我们要做一些清理工作,然后创建一个只包含 CustomerID、InvoiceDate(删除时间)的新数据框架,并添加一个新列— sales:
import datetime as dt
df['InvoiceDate'] = pd.to_datetime(df['InvoiceDate']).dt.datedf = df[pd.notnull(df['CustomerID'])]
df = df[(df['Quantity']>0)]
df['Sales'] = df['Quantity'] * df['UnitPrice']
cols_of_interest = ['CustomerID', 'InvoiceDate', 'Sales']
df = df[cols_of_interest]
print(df.head())
print(df.head())
print(df['CustomerID'].nunique())
Figure 2
CLV 模型定义
对于 CLV 型号,使用以下术语:
- 频率代表客户重复购买的次数。这意味着它比总购买次数少 1。
- t 代表客户在任何时间单位内的年龄(在我们的数据集中是每天)。这等于客户第一次购买和研究期末之间的持续时间。
- 新*性代表顾客最*一次购买的年龄。这等于客户第一次购买和最后一次购买之间的持续时间。(因此,如果他们只进行了 1 次购买,则新*度为 0。)
下面的分析是使用由 Shopify 的数据科学家 Cameron Davidson-Pilon 开发的寿命包在 Python 中进行的,代码很大程度上借用了寿命文档。
数据浏览
from lifetimes.plotting import *
from lifetimes.utils import *
from lifetimes.estimation import *data = summary_data_from_transaction_data(df, 'CustomerID', 'InvoiceDate', monetary_value_col='Sales', observation_period_end='2011-12-9')
data.head()
Figure 3
我们分析的客户有 4339 个。
CustomerID 12346 只购买了 1 次(没有重复),因此他的频率和最*次数为 0,年龄为 325 天(例如,在分析中,他第一次购买和周期结束之间的持续时间)。
data['frequency'].plot(kind='hist', bins=50)
print(data['frequency'].describe())
print(sum(data['frequency'] == 0)/float(len(data)))
Figure 4
在我们的数据中,超过 35%的顾客只购买过一次(没有重复购买)。
使用 BG/NBD 模型进行频率/新*度分析
from lifetimes import BetaGeoFitterbgf = BetaGeoFitter(penalizer_coef=0.0)
bgf.fit(data['frequency'], data['recency'], data['T'])
print(bgf)
<lifetimes.betageofitter: fitted="" with="" subjects="" a:="" alpha:="" b:="" r:=""></lifetimes.betageofitter:>
可视化我们的频率/最*矩阵
假设:一位客户连续四周每天都购物,然后我们几个月都没有他的消息了。他还“活着”的几率有多大?很小,对吧?另一方面,历史上每个季度购买一次,上个季度又购买一次的客户很可能还活着。我们可以使用频率/最*矩阵来可视化这种关系,该矩阵计算一个模拟客户在下一个时间段将要进行的交易的预期数量,给定他的最*(最后一次购买的年龄)和频率(他已经进行的重复交易的数量)。
from lifetimes.plotting import plot_frequency_recency_matrix
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(12,8))
plot_frequency_recency_matrix(bgf)
Figure 5
如果客户购买了 120 次,并且他最*一次购买是在他大约 350 天大的时候(即最*:她第一次交易和最*一次交易之间的持续时间是 350 天),那么他是我们的最佳客户(右下角)。
大量购买和最*购买的客户很可能是未来的最佳客户。我们永远都不会满足。
购买了很多但不是最*购买的客户(右上角),可能已经走了。
(40,300)附*还有另一种类型的客户,代表不经常购买的客户,我们最*没有见过他,所以他可能会再次购买。然而,我们不确定他是已经走了还是只是在购物之间。
我们可以预测哪些客户肯定还活着:
from lifetimes.plotting import plot_probability_alive_matrix
fig = plt.figure(figsize=(12,8))
plot_probability_alive_matrix(bgf)
Figure 6
最*购买的客户几乎肯定是“活着”的。
那些大量购买但不是最*购买的顾客,很可能已经退出。他们过去买的越多,就越有可能辍学。它们被显示在右上方。
我们将客户从“下一阶段最高预期购买量”到最低预期购买量进行排名。模型揭示了一种方法,该方法将使用客户的历史记录来预测客户在下一时期的预期购买量。
t = 1
data['predicted_purchases'] = bgf.conditional_expected_number_of_purchases_up_to_time(t, data['frequency'], data['recency'], data['T'])
data.sort_values(by='predicted_purchases').tail(5)
Figure 7
上面列出的是我们的前 5 名客户,模型预计他们将在第二天进行购买。predicted_purchases 列表示他们的预期购买数量,而其他三列表示他们当前的 RF 指标。BG/NBD 模型认为这些人在不久的将来会购买更多东西,因为他们是我们目前最好的客户。
评估模型拟合度
from lifetimes.plotting import plot_period_transactions
plot_period_transactions(bgf)
Figure 8
不错,我们的模型不差。所以,我们可以继续我们的分析。
我们现在将数据集划分为校准周期数据集和维持数据集。这很重要,因为我们想要测试我们的模型在尚未看到的数据上的表现(就像机器学*实践中的交叉验证)。
from lifetimes.utils import calibration_and_holdout_datasummary_cal_holdout = calibration_and_holdout_data(df, 'CustomerID', 'InvoiceDate',
calibration_period_end='2011-06-08',
observation_period_end='2011-12-9' )
print(summary_cal_holdout.head())
Figure 9
from lifetimes.plotting import plot_calibration_purchases_vs_holdout_purchasesbgf.fit(summary_cal_holdout['frequency_cal'], summary_cal_holdout['recency_cal'], summary_cal_holdout['T_cal'])
plot_calibration_purchases_vs_holdout_purchases(bgf, summary_cal_holdout)
Figure 10
在该图中,我们将数据分为采样(校准)和验证(维持)两个阶段。样本期从年初至 2011 年 6 月 8 日;验证期从 2011 年 6 月 9 日到 2011 年 12 月 9 日。该图根据重复购买的次数(x 轴)对校准期内的所有客户进行分组,然后对维持期内的重复购买进行平均(y 轴)。绿色和蓝色线分别表示 y 轴的模型预测和实际结果。正如我们所看到的,我们的模型能够非常准确地预测样本中客户群的行为,该模型低估了 4 次购买和 5 次购买后的行为。
客户交易预测
根据客户历史,我们现在可以预测个人未来的购买情况:
t = 10
individual = data.loc[12347]
bgf.predict(t, individual['frequency'], individual['recency'], individual['T'])
0.1572775101289126
我们的模型预测客户 12347 的未来交易是 10 天后的 0.157。
客户概率历史
根据我们训练好的模型,给定客户交易历史,我们可以计算他们存活的历史概率。例如,我们希望查看我们最佳客户的交易历史,并了解其存活的概率:
from lifetimes.plotting import plot_history_alive
import matplotlib.pyplot as pltfig = plt.figure(figsize=(12,8))
id = 14606
days_since_birth = 365
sp_trans = df.loc[df['CustomerID'] == id]
plot_history_alive(bgf, days_since_birth, sp_trans, 'InvoiceDate')
Figure 11
我们最好的客户肯定还活着,但是,他在 2011 年下半年中断了几次。
fig = plt.figure(figsize=(12,8))
id = 14729
days_since_birth = 365
sp_trans = df.loc[df['CustomerID'] == id]
plot_history_alive(bgf, days_since_birth, sp_trans, 'InvoiceDate')
Figure 12
另一方面,这位顾客只购买过一次,已经离开很长时间了,他有 100%的可能已经死了。
使用货币价值的伽玛-伽玛模型估算客户终身价值
我们现在考虑每笔交易的经济价值。为了估计这一点,我们使用沃顿商学院的 Peter Fader 博士和 Bruce Hardie 博士提出的 Gamma-Gamma 子模型来预测未来客户层面的每笔交易的可能支出。
我们只估计了至少有一次重复购买的客户。因此,我们估计有 2,790 名客户。
returning_customers_summary = data[data['frequency']>0]print(returning_customers_summary.head())
print(len(returning_customers_summary))
Figure 13
from lifetimes import GammaGammaFitterggf = GammaGammaFitter(penalizer_coef = 0)
ggf.fit(returning_customers_summary['frequency'],
returning_customers_summary['monetary_value'])
print(ggf)
<lifetimes.gammagammafitter: fitted="" with="" subjects="" p:="" q:="" v:=""></lifetimes.gammagammafitter:>
应用 Gamma-Gamma 模型后,现在我们可以估计每个客户的平均交易值。唷!
print(ggf.conditional_expected_average_profit(
data['frequency'],
data['monetary_value']
).head(10))
Figure 14
Jupyter 笔记本可以在 Github 找到。周末快乐!
设置 GCP 计算实例后会发生什么?使用 Tensorflow 运行自定义 Docker 容器
原文:https://towardsdatascience.com/whats-after-setting-up-a-gcp-computing-instance-running-a-custom-docker-container-with-tensorflow-eb0f077983c6?source=collection_archive---------7-----------------------
pixabay.com
What we should see after setting up
介绍
随着深度学*的出现和“模型越深,性能越好”的实现,谷歌云平台(GCP)等基于云的计算平台获得了相当多的关注(我在这里不是为了争论这个概念的真实性,而只是陈述一个被广泛接受的信念)。以及“模型越深,计算资源应该越好”。
无论何时发布最新的 GPU 卡,购买并安装它们都不是经济可行的策略(尤其是对于中小型技术机构)。如果一个人采用这种策略,他应该为下面的挑战做好准备。
- 做出巨大的金钱牺牲来购买最新的 GPU 卡和必要的基础设施
- 维护基础设施以确保不间断服务
- 为多个用户开发资源分配方案
然而,GCP 提供了这种服务,只收取很少的费用(当然从长远来看会增加)。但重要的是,您不必担心维护或初始设置(例如安装操作系统(OS)),并提供多种定制选项供您选择(例如操作系统、磁盘存储、GPU 类型、GPU 数量等)。).例如,你可以选择一个使用 Ubuntu 16.04、50GB 存储、2 特斯拉 P100 图形处理器等的实例。
在这篇文章中,我将讨论如何设置一个自定义的 docker 映像,创建一个包含该映像的容器,并在其中运行 python + Tensorflow 脚本。
初始设置
我不打算进行设置,有很多很好的资源解释了如何在 GCP 上创建和设置一个计算实例。我最喜欢的一个是,
[## jupyter+tensor flow+Nvidia GPU+Docker+Google 计算引擎
TL;DR:按照下面的方法使用 Tensorflow、Jupyter、Docker 和 Nvidia GPUs,可以节省时间,减少麻烦…
medium.com](https://medium.com/google-cloud/jupyter-tensorflow-nvidia-gpu-docker-google-compute-engine-4a146f085f17)
我会用简单的英语总结一下里面的内容,
- 首先定义防火墙规则,允许 TCP 通过几个端口进行通信(tensorboard:6006,ftp:21-22,jupyter:8888)
- 使用防火墙规则在 GCP 上设置一个计算实例
- 在实例上安装 CUDA
- 在实例上安装 Docker 和 Nvidia-Docker
那么初始设置之后会发生什么呢?
在这里我们要讨论从这里向何处去。首先让我说明我将使用的库和版本。
- Python: 3.4
- 张量流:1.3
我现在简要总结一下我们要做的事情。我们将首先下载一个支持 python 3.x Tensorflow 的图片。然后我们将用下载的图像创建一个容器。最后,我们将运行一些命令,以确保它的工作。
PS: 你想用哪个 python 版本取决于你想解决的问题。python 3.x 和 python 2.x 之间存在差异,然而,python 2.x 将在不久的将来退役,python 3.x 将取而代之。所以最好从 python 2.x 迁移到 python 3.x
SSH 到实例中
要 ssh 到 GCP 实例,您可以使用
- gcloud Shell
- 第三方外壳(例如 Windows 上的 Ubuntu 外壳或 Putty)
下载兼容的 Docker 映像
遗憾的是,gcr.io 并没有为我们提供一张 python 3.x 兼容的 Tensorflow 图片,而只是 python 2.x 兼容的 Tensorflow 图片。所以我们必须从 DockerHub 下载一个兼容 python 3.x 的 Tensorflow 图像。并且可以在 DockerHub 中看到所有的 Tensorflow 图片。
我将使用 1.3.0-gpu-py3 图像(如果您向下滚动 DockerHub 中的 Tensorflow 图像,您会看到这一点)
使用 gcloud shell 或终端将第一个 ssh 下载到您的实例中。一旦有了访问类型,
sudo docker pull tensorflow/tensorflow:1.3.0-gpu-py3
当您键入这个内容时,Docker 将自动查找带有在双冒号后指定的标记名的图像(当然是在 DockerHub 中)。然后,您应该在 shell 中看到正在下载和提取的图像。要确保图像已下载,请尝试
sudo docker images
您应该会看到列出的图像
REPOSITORY TAG IMAGE ID CREATED SIZE
nvidia/cuda latest af786b192aa5 10 days ago 2.16GB
tensorflow/tensorflow 1.3.0-gpu-py3 ae2207c21bc1 5 months ago 3.29GB
用图像创建并运行 Docker 容器
这个操作完成后,我们可以用图像创建一个 docker 容器。但在此之前,先创建一个名为docker _ tensor flow _ example的文件夹。这将保存我们在容器内运行时创建的数据,稍后我们将讨论如何进行映射。然后将该文件夹的权限更改为:
sudo chmod 755 ~/docker_tensorflow_example/
所以主人有完全的权限。然后我们创建 docker 容器,
nvidia-docker run -it -v ~/docker_tensorflow_example/:/root/docker_tensorflow_example — name docker-py3-tensorflow tensorflow/tensorflow:1.3.0-gpu-py3 bash
那是一口不是吗?那我们就把这个宝贝拆成碎片吧,
- NVIDIA-docker——是一个在 NVIDIA GPU 上运行 Docker 容器的 Docker 引擎实用程序。docker 顶部的包装
- —意思是运行 docker 容器
- -it-表示即使没有连接任何东西,也要保持容器打开(这样我们就可以运行东西,脱离遥控器,在我们这边,关闭本地计算机。
- -v src_dir:target_dir —将本地目录映射到容器中的一个目录。请记住,当您停止容器时,容器以及其中保存的所有数据都会消失。因此,该选项将在容器文件夹(target_dir)中创建的所有数据映射到存储上的实际目录(source_dir)。
- -name docker-py3-tensor flow-这是我们正在创建的容器的名称。使用一个特定的名字也将阻止我们盲目地创建容器(因为如果你不指定一个名字,docker 会用一个随机的名字创建容器。如果你指定了一个名字,docker 将会抱怨同名的容器已经存在)
- tensor flow/tensor flow:1 . 3 . 0-GPU-py3—告诉 docker 使用哪个图像来创建容器。
关于 nvidia-docker 要记住的事情
如果您看到错误,
**nvidia-docker: command not found**
那么您可能必须首先以 root 用户身份登录,
**sudo -s**
并重试该命令。
正在启动 Jupyter 笔记本服务器
如果您需要运行 Jupyter 笔记本服务器,请使用上面的命令,不要使用 bash。
**nvidia-docker run -it -v ~/docker_tensorflow_example/:/root/docker_tensorflow_example — name docker-py3-tensorflow tensorflow/tensorflow:1.3.0-gpu-py3
**
测试容器
现在,您应该已经运行了 docker 容器,并且您的 shell 应该在容器中,终端应该有提示,
**root@8301xxxxxxxx: ~/**
其中 8301xxxxxxxx 是容器 ID。现在试试,
**python3**
试着,
**import tensorflow as tf
print(tf.__version__)**
这应该可以正常工作,您应该得到 1.3.0 作为输出。如果出现这种情况,恭喜你!您已经安装了库。如果没有,请确保您遵循了当前初始设置和设置 docker 容器的步骤。
干杯!
什么是 auto ML?
原文:https://towardsdatascience.com/whats-auto-ml-b457d2710f9d?source=collection_archive---------2-----------------------
The purpose of computing is insight, not numbers — Richard Hamming (photo by CoWin)
我最*告诉一个朋友,我正在研究自动机器学*(ML)项目,他问我这是否意味着汽车的机器学*,所以…我想我应该写一篇简短的帖子。
Auto ML 服务通过点击一个按钮来提供机器学*,或者,至少,承诺保持算法实现、数据管道和代码,通常是隐藏的。如果你向一群工程师提及这一前景,有些人会说“万岁!”有些人会说“哦不!”,我想直到最*,我发现自己在这些感叹(“orayoh!”).
我第一次玩自动 ML 平台是在去年 IBM 的一次演示中。我来自 iTerm、Python 和 vim,我发现从代码中如此脱离很奇怪。但我可以看到,已经在 R&D 接受审查的流程可以通过 auto ML 得到简化。并不是每个团队都致力于前沿算法的设计,因此对已经验证的模型进行微小调整的过程肯定有优化的空间。
我可以看到 auto ML 如何在不断增长的 ML/AI 产品的生命周期中定位自己,但这样的平台真的能成为“数据科学家的最好朋友”吗?我想要一些其他的数据点,所以我联系了我的朋友 Pierre Forcioli-Conti,他正忙着做他的创业公司工作台,我们一起坐在他位于市场街的办公室里,一边聊着工作流,一边在他的环境中摆弄样本数据。他的愿景更多的是为团队提供一个协作的公共工作空间(就像 Google Docs 的数据项目),我记得我对数据解析和清理功能特别兴奋。但是,不管出于什么原因,我回到了我的工具,没有明确的计划将 auto ML 集成到我正在构建的任何东西中(尽管我确实偷偷溜出去玩了一下 auto-sklearn 和 TPOT ,只是为了看看他们在做什么)。
快进到本周,我看到了一个关于 H2O 的帖子,作者是我信任的数据科学专家艾琳·莱德尔。我跟着她链接到了产品,查看文档,我发现了对不同语言和云集成的大量支持,这令人鼓舞。
安装没有痛苦,界面也很容易接*,位于数据分析包(如 Pandas)和建模工具(如 scikit-learn 、 Tensorflow 和 Keras )的交汇处,有着 Jupyter 般的级联细胞流。无论是使用本地主机接口(将处理步骤放在一个称为“流”的文档中)还是将软件直接导入 Python shell,都比我在 AWS 或 IBM 的 Watson Studio 上使用 ML 工具时感觉更直观和熟悉。
我确实发现自己在脑子里运行着一个时钟,记录着“这通常要花我多长时间?”。我想人们可以很快学会 H20 的特性,然后从有利的角度来衡量这个工具最适合自己的工具包。我个人对神经网络的超参数优化很感兴趣,特别是对于更大的深度学*项目,我发现自己在想象这种探索可能会如何进行。我会遇到什么样的错误?我能找到什么样的支持?如果 H2O 真的可以一站式购买数据管理、EDA、建模和 GPU 处理,那么我完全可以看到 H2O 在我的桌面上更加靠前和居中。
我担心团队会使用 auto ML 来搜寻能够交付“结果”的模型。机器学*是一门艺术,也是一门统计建模学科,虽然我对我们所做的事情的创造性探索方面深信不疑,但随着我们的管道变得更加抽象,我们应该在自动 ML 流程中加入什么样的路标和健全检查,以确保我们继续提出强有力的问题?也许 Clippy 有一个有模型头脑的表亲,他可能会定期出现并问类似这样的问题,“这个数据表示符合你的直觉吗?”或者“我们有夸大错误的风险吗?”,或者“您如何解释这些绩效结果?”。仅仅访问代码并不能回答这样的问题,也许抽象会释放出更多的能力来问这样的问题,但我担心的是,随着时间的推移,这样的问题可能会开始产生诸如“我不知道,那是我被告知要按的按钮”这样的回答。这不仅是对 H2O 的警告,也是对所有汽车制造企业的警告,是对我们所有负责确保有效使用数学工具的人的警告。
我看到 H2O 在云集成方面走在了前面,这标志着一定规模(或有扩展计划)的客户优先,他们肯定已经做好准备,不需要任何特定的堆栈(向 Java、Python 和 R 社区等提供服务)。总而言之,我对 auto ML 感到更多的是“万岁”而不是“哦不”,并期待看到团队如何在他们的产品周期中使用这些工具。
上个月世界发生了什么:世界新闻分析
原文:https://towardsdatascience.com/whats-happened-in-a-world-last-month-world-news-analysis-b7e540d45d64?source=collection_archive---------11-----------------------
第二部在这里!上个月世界发生了什么:世界新闻分析第二部分
分析数据总是有趣的,即使你不像我之前的帖子那样创建数据——Youtube 频道分析:识别影响者和憎恨者。但是,如果我们可以从完全不同的来源、地区、国家和大陆收集最受欢迎的新闻,会怎么样呢?如果我们每天都这样做,比如说一个月或一年,会怎么样?我们会看到什么?这是一个挑战!带着这个想法,我开始准备自己的数据集。我会继续更新那个页面,但即使是现在我们也可能会看到一些见解!主要目的是通过全球新闻更好地了解我们的世界。
我于 2018 年 10 月 23 日开始网络搜集。每天我都会收到大约 3000 篇新文章,涉及全球范围内的各种话题。因此,在开始时,我们将创建一个地图来显示我们数据集中的全球新闻报道的大图。
data(worldgeojson, package = "highcharter")test %>%
count(name) -> countrieshighchart() %>%
hc_add_series_map(worldgeojson, countries, value = "n", joinBy = c('name')) %>%
#hc_colors(c("darkorange", "darkgray")) %>%
hc_colorAxis(stops = color_stops()) %>%
hc_title(text = "Where the most news come from?") %>%
hc_subtitle(text = "Count on every country")%>%
hc_legend(layout = "horizontal", align = "center",
floating = TRUE, valueDecimals = 0,
valueSuffix = "%") %>%
hc_mapNavigation(enabled = TRUE)
我们试图与每一个大洲取得联系,我认为除了一些第三世界国家之外,这些数据都很有代表性。真正的瓶颈是处理多语言数据。尤其是用一种罕见的语言。文本分析工具有一些限制,这些工具从一些可视化中排除了一些(中文、俄文、土耳其文、挪威语)。这个问题应该进一步解决。现在,让我们看看新闻在各个国家的分布。
test %>%
count(name) %>%
arrange(desc(n)) %>%
mutate(name = fct_reorder(name, n)) %>%
ggplot(aes(name, n, fill = name)) +
geom_col() +
coord_flip() +
expand_limits(y = 0) +
theme(legend.position = "none")+
labs(title="Where the most news come from?",
subtitle = "Breakdown by Country",
x = "",
y = ""
)
英国在我们的数据集中处于领先地位,紧随其后的是美国和意大利(这是一个惊喜)。接下来我们将尝试描述一些流行和重要的话题。
test %>%
filter(
str_detect(text, " war |warships|wars"))%>%
filter(name!="Austria")%>%
filter(name!="Germany")%>%
ggplot(aes(Date, fill= name))+
geom_histogram()+
labs(title="News frequency with a 'war' word",
subtitle = "Breakdown by Country/Date",
x = "",
y = ""
)
我们看到,有些日子风平浪静,有些日子却用一个“战”字创造了不同的故事。但是我们应该记住,“战争”有不同的含义。仔细看看它:
war <- test %>%
filter(
str_detect(text, " war |warships|wars")) %>%
filter(name!="Austria") %>%
filter(name!="Germany") %>%
group_by(name) %>%
View()
那么哪个国家谈论“战争”最多呢?按所有国家和语言细分:
war <- test %>%
filter(str_detect(text, " war |warships|wars|войн| guerra | la guerre |战争")) %>%
filter(name != "Austria") %>%
filter(name != "Germany") %>%
group_by(name) %>%
count(name)
View()#'war' for a German language means different thing so we process it separately
Austria <- test %>%
filter((name == "Austria"))
Austria <- Austria %>%
filter(str_detect(text, " Krieg | Krieges")) %>%
count(name)Germany <- test %>%
filter((name == "Germany"))
Germany <- Germany %>%
filter(str_detect(text, " Krieg | Krieges")) %>%
count(name)war_full <- rbind.data.frame(war, Austria, Germany)
war_full <- as.data.frame(war_full)#breakdown by country
war_full %>%
mutate(name = fct_reorder(name, n)) %>%
ggplot(aes(name, n, fill = name)) +
geom_col() +
theme(legend.position = "none") +
labs(
title = "News frequency with a 'war' word",
subtitle = "Breakdown by Country",
x = "",
y = ""
)
哪个国家谈论“贸易战”最多?
test %>%
filter(
str_detect(
text,
" trade war | trade wars | торговая война | guerre commerciale | guerra comercial | Handelskrieg |贸易战"
)
) %>%
count(name) %>%
arrange(desc(n)) %>%
mutate(name = fct_reorder(name, n)) %>%
ggplot(aes(name, n, fill = name)) +
geom_col() +
coord_flip() +
expand_limits(y = 0) +
theme(legend.position = "none") +
labs(
title = "News frequency with a 'trade war' word",
subtitle = "Breakdown by Country",
x = "",
y = ""
)
但是我们有带字的“平安”新闻吗?在我们的世界找到和平是真的吗?****
**test %>%
filter(str_detect(text, "peace | frieden | pace | paz |和平")) %>%
count(name) %>%
mutate(name = fct_reorder(name, n)) %>%
ggplot(aes(name, n, fill = name)) +
geom_col() +
theme(legend.position = "none") +
labs(
title = "News frequency with a 'peace' word",
subtitle = "Breakdown by Country",
x = "",
y = ""
)**
而【假】【真】新闻呢?新闻机构使用这个词吗,或者它是一个时代错误?
**fake <- test %>%
filter(str_detect(text, " fake | falso | faux | falschung|假")) %>%
count(name)
fake$id <- "fake"true <- test %>%
filter(str_detect(text, " true | wahr | vrai | vero | cierto|真正")) %>%
count(name)
true$id <- "true"faketrue <- rbind(fake, true)faketrue %>%
mutate(name = fct_reorder(name, n)) %>%
ggplot() +
geom_bar(aes(name, n, fill = id), stat = "identity", position = "dodge") +
coord_flip() +
theme(
legend.position = "bottom",
legend.title = element_blank(),
axis.title = element_blank()
) +
labs(
title = "Frequency of 'fake' and 'true' words in news",
subtitle = "Breakdown by Country",
x = "",
y = ""
)**
“假”新闻在爱尔兰和中国很受欢迎,而新西兰和加拿大、英国的新闻中“真”字出现频率最高。让我们看看哪个国家有最“震撼”的新闻:
**test %>%
filter(str_detect(text, " shock | choque | choc | schock|休克|震动|浓密的")) %>%
count(name) %>%
mutate(name = fct_reorder(name, n)) %>%
ggplot(aes(name, n, fill = name)) +
geom_col() +
theme(legend.position = "none", axis.title = element_blank()) +
labs(
title = "Which countries have the most 'shocking' news",
subtitle = "Breakdown by Country",
x = "",
y = ""
)**
仔细看看:
That’s a news that shocked our world. From presidential selections to Doctor Who fans. Which countries have the most “bad” and “good” words in their news?
**bad <- test %>%
filter(str_detect(text, " bad |坏")) %>%
count(name)
bad$id <- "bad"good <- test %>%
filter(str_detect(text, " good |好")) %>%
filter(name != "Austria") %>%
filter(name != "Germany") %>%
count(name)
good$id <- "good"badgood <- rbind(bad, good)badgood %>%
mutate(name = fct_reorder(name, n)) %>%
ggplot() +
geom_bar(aes(name, n, fill = id), stat = "identity", position = "dodge") +
coord_flip() +
theme(
legend.position = "bottom",
legend.title = element_blank(),
axis.title = element_blank()
) +
labs(
title = "Which countries have the most 'bad' and 'good' news?",
subtitle = "Breakdown by Country",
x = "",
y = ""
)**
Well, as we clearly see “good” news are prevail. But is it really true? We will check it later with a sentiment analysis of the whole dataset.
Coming next, we’ll plot a chart with a “death” word frequency through different countries.
**test %>%
filter(str_detect(text, " death | Tod | muerte | mort| смерть|死亡")) %>%
count(name) %>%
arrange(desc(n)) %>%
mutate(name = fct_reorder(name, n)) %>%
ggplot(aes(name, n, fill = name)) +
geom_col() +
coord_flip() +
expand_limits(y = 0) +
theme(legend.position = "none") +
labs(
title = "News frequency with a 'death' word",
subtitle = "Breakdown by Country",
x = "",
y = ""
)**
Italy has the leading position with a biggest numbers. We should take a closer look on it applying topic modelling technique(LDA algorithm).
Checking our topics with Google Translator we’d get some understanding about what’s going on.
Hope that somebody still reading this:) so let’s take a look on a domestic news that always cover government personas at some point. I think that will be interesting to see some type of popularity between a couple of government leaders through a whole world. For example, we may choose:
**Trump <- test %>%
filter(str_detect(text, "Trump|特朗普| Трамп ")) %>%
count(name)
Trump$id <- "Trump"Putin <- test %>%
filter(str_detect(text, "Putin |普京| Путин ")) %>%
count(name)
Putin$id <- "Putin"Merkel <- test %>%
filter(str_detect(text, "Merkel |默克爾| Меркель ")) %>%
count(name)
Merkel$id <- "Merkel"Jinping <- test %>%
filter(str_detect(text, " XXX |***| Си Цзиньпин")) %>%
count(name)
Jinping$id <- "XXX"popularity <- rbind(Trump, Putin, Merkel, Jinping)pop <- popularity %>%
count(id) %>%
arrange(desc(nn)) %>%
View()popularity %>%
mutate(name=fct_reorder(name,n))%>%
ggplot() +
geom_bar(aes(name, n, fill = id), stat = "identity", position = "dodge") +
coord_flip() +
theme(
legend.position = "bottom",
legend.title = element_blank(),
axis.title = element_blank()
) +
labs(
title = "Citations on selected national leaders in a news",
subtitle = "Breakdown by Country",
x = "",
y = ""
)**
********
President Trump has a leading position covering 24 country at all, but this is obvious for anybody who check news sites quite often. Chancellor of Germany — Angela Merkel takes second place following by President of the People’s Republic of China XXX and president Putin. Surpsingly there are some countries that covers only US president and nobody else from our selection. China and the United States have biggest numbers covering their national leaders, while Germany and Russia have more coverage on a foreign presidents. Maybe country citations shows some difference?
**US <- test %>%
filter(str_detect(text, " United States | US | USA | Stati Uniti | Etats-Unis| США | 美国")) %>%
count(name)
US$id <- "United States"Germany <- test %>%
filter(str_detect(
text,
" Germany | Deutschland | Alemania | Germania | Allemagne | Германия |德国"
)) %>%
count(name)
Germany$id <- "Germany"China <- test %>%
filter(str_detect(text, " China | Chine | Cina |Китай| 中国")) %>%
count(name)
China$id <- "China"Russia <- test %>%
filter(str_detect(text, " Russia | Russland| Rusia | Russie |Россия|俄罗斯")) %>%
count(name)
Russia$id <- "Russia"popularity <- rbind(US, Germany, China, Russia)pop <- popularity %>%
count(id) %>%
arrange(desc(nn)) %>%
View()popularity %>%
mutate(name=fct_reorder(name,n))%>%
ggplot() +
geom_bar(aes(name, n, fill = id), stat = "identity", position = "dodge") +
coord_flip() +
theme(
legend.position = "bottom",
legend.title = element_blank(),
axis.title = element_blank()
) +
labs(
title = "Citations on selected countries in a news",
subtitle = "Breakdown by Country",
x = "",
y = ""
)**
********
So this is how the balance of power looks like (in a global news coverage of course). The United States, China and Russia have something similar coverage level around the globe! China has the most coverage in Pakistan, Singapore (geographical role explain it well). According to our findings Italy has the lowest interest in United States and Russia have the most highest number of citations on the United States.
What if we apply same approach to find some brand awarness? We’ll select Apple and Samsung as an example of core players on a market.
**Apple <- test %>%
filter(str_detect(text, " Apple ")) %>%
count(name)
Apple$id <- "Apple"Samsung <- test %>%
filter(str_detect(text, " Samsung ")) %>%
count(name)
Samsung$id <- "Samsung"popularity <- rbind(Samsung, Apple)popularity %>%
mutate(name=fct_reorder(name,n)) %>%
ggplot() +
geom_bar(aes(name, n, fill = id), stat = "identity", position = "dodge") +
coord_flip() +
theme(
legend.position = "bottom",
legend.title = element_blank(),
axis.title = element_blank()
) +
labs(
title = "Citations on selected brand in a news",
subtitle = "Breakdown by Country",
x = "",
y = ""
)pop <- popularity %>%
count(id) %>%
arrange(desc(nn)) %>%
View()**
Both brands have the same coverage by country in our dataset. But what about chart?
Pakistan and Turkey have covered Samsung more than Apple, while other countries prefer to look on a Apple’s products more.
What if we would like to see the top 5 most common words that appears in news in a every country? I think that this plot will show some value.
**#I already preprocess dataset and exclude languages that are not supported in tm packagetop10full %>%
group_by(name)%>%
filter(name!="Russia")%>%
filter(name!="Norway")%>%
filter(name!="China")%>%
filter(name!="Turkey")%>%
ggplot(aes(word,freq, fill= name))+
geom_col() +
facet_wrap(~name, scales = 'free_x')+
theme(legend.position = "none")+
labs(title="The most top 5 words used in a every news article ",
subtitle = "breakdown by country",
x = "",
y= ""
)**
From that plot, we could say that there is two types of countries. One of them covers their’s government activity the most due to a strong presence on a international or domestic area. The second type is more into different subjects of life or just their government didn’t provide such information to the public.
I think that time to apply sentiment analysis on our dataset. First, we’ll look on a timeseries with a different methods :
默认的“Syuzhet”词典是由内布拉斯加文学实验室在马修·l·乔克斯的指导下开发的
“afinn”词典是由 Finn Arup Nielsen 作为 AFINN 单词数据库开发的。参见:参见http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id = 6010AFINN 单词数据库受版权保护,并根据“开放数据库许可(ODbL)1.0 版”【http://www.opendatacommons.org/licenses/odbl/1.0/ 或类似的版权许可发布。
“冰”词汇是由胡敏清和刘冰开发的意见词汇见:【http://www.cs.uic.edu/~liub/FBS/sentiment-analysis.html】
“nrc”词典是由 Mohammad,Saif M .和 Turney,Peter D .开发的 NRC 情感词典。
参见:http://saifmohammad.com/WebPages/lexicons.html
**melted %>%
group_by(variable) %>%
ggplot(aes(
timestamp,
value,
color = variable,
label = variable,
size = value
)) +
geom_point() +
labs(title = "Scores by different sentiment lexicons",
x = "",
y = "") +
geom_smooth(aes(group = 1))**
结果每天都在变化,但中位数低于零,所以我们可以假设我们的全球新闻不是那么积极。但是让我们来看看情绪的分解。
**emo_sum %>%
ggplot(aes(emotion,count, fill=emotion)) +
geom_col() +
theme(legend.position = "none",axis.title = element_blank()) +
labs(title="Recent sentiments on a global news dataset",
x = "",
y = ""
)**
我想做的下一件事是另一个主题建模。为此,我们将使用茱莉亚西尔格的精彩教程,她描述了每一步。我们将绘制模型诊断和结果:
**#plot result after preprocessing data and modelling (Assumption of 100 models max)k_result %>%
transmute(K,
`Lower bound` = lbound,
Residuals = map_dbl(residual, "dispersion"),
`Semantic coherence` = map_dbl(semantic_coherence, mean),
`Held-out likelihood` = map_dbl(eval_heldout, "expected.heldout")) %>%
gather(Metric, Value, -K) %>%
ggplot(aes(K, Value, color = Metric)) +
geom_line(size = 1.5, alpha = 0.7, show.legend = FALSE) +
facet_wrap(~Metric, scales = "free_y") +
labs(x = "K (number of topics)",
y = NULL,
title = "Model diagnostics by number of topics",
subtitle = "These diagnostics indicate that a good number of topics would be around 80")**
正如我们在上面看到的,保留的最大似然值和最小残差值大约是 80 个主题。结果是:
**gamma_terms %>%
top_n(20, gamma) %>%
ggplot(aes(topic, gamma, label = terms, fill = topic)) +
geom_col(show.legend = FALSE) +
geom_text(hjust = 0, nudge_y = 0.0005, size = 3,
family = "IBMPlexSans") +
coord_flip() +
scale_y_continuous(expand = c(0,0),
limits = c(0, 0.09),
labels = percent_format()) +
theme_tufte(base_family = "IBMPlexSans", ticks = FALSE) +
theme(plot.title = element_text(size = 16,
family="IBMPlexSans-Bold"),
plot.subtitle = element_text(size = 13)) +
labs(x = NULL, y = expression(gamma),
title = "Top 20 topics by prevalence in the our dataset",
subtitle = "With the top words that contribute to each topic")**
我想展示的最后一件事是单词云。就像结尾的一个大点:)一张图中的简单和复杂。这条新闻是关于什么的?
**wordcloud(data, colors = viridis::viridis_pal(end = 0.8)(10), random.order = FALSE, random.color = TRUE, min.words=10,max.words=Inf,rot.per = 0.3)**
这种类型的数据集有很大的潜力去发现你想知道的任何事情。我们所做的只是分析的一小部分,我认为这是获得一些见解的真正有用的工具。随着不断更新,我们可以随时掌握各种主题及其存在的脉搏。我们可能会识别一些品牌意识、人类行为、外交事务和我们世界中每天发生的许多其他事情。
上个月世界发生了什么:世界新闻分析第二部分
原文:https://towardsdatascience.com/whats-happened-in-a-world-last-month-world-news-analysis-part-ii-1c8c284a6691?source=collection_archive---------17-----------------------
你好!那些没有看到我的第一部分的人,我强烈推荐他们去做一个基本的了解。
第一部分——上个月世界发生了什么:世界新闻分析
所以,我们仍然在收集最新的新闻,现在我们有来自 24 个国家的 53.115 条新闻摘要。我们可以看到大部分是在星期三:
在我们分析的第一部分,我们应用了单词检测功能和可视化来快速获得这样的结果(我在之前的帖子中没有画出这个图,但我认为值得在这里看一看):
我们可能会看到一些国家(意大利和俄罗斯)严重依赖体育新闻,对科学、健康和艺术话题关注不够。但是有一些国家,如英国、新加坡、澳大利亚和马来西亚,拥有最多的科学报道。真正让我吃惊的是:德国和奥地利比其他国家拥有更多的关于健康的新闻。
比较体育和科学话题,我们可以画出这两者之间的总差异。
Science <- test %>%
filter(
str_detect(
text,
"science|research|scientific|scientist|科学|wissenschaft|Gelehrte|wissenschaftlich| наука | ученые "
)
) %>%
count(Date)
Science$id <- "science"Sport <- test %>%
filter(str_detect(text, "sport|спорт|运动|deporte")) %>%
count(Date)
Sport$id <- "sport" popularity <- merge(x = Science,
y = Sport,
by = "Date",
all.x = TRUE)
colnames(popularity)[which(names(popularity) == "n.x")] <- "science"
colnames(popularity)[which(names(popularity) == "n.y")] <- "sport"
popularity[is.na(popularity)] <- 0
drops <- c("id.x", "id.y")
popularity <- popularity[,!(names(popularity) %in% drops)]ggplot(popularity, aes(x = Date)) +
geom_area(aes(y = science + sport, fill = "science")) +
geom_area(aes(y = sport, fill = "sport")) +
labs(
title = "Area chart on selected topics",
subtitle = "Total news",
caption = "",
x = "",
y = ""
)
看起来体育新闻有时会登上榜首。我们将使用一些定量文本分析工具来找出为什么会发生这种情况。我们从搭配分析开始。为此,我们将使用 quanteda R 包进行定量文本分析。它帮助我们识别在我们的数据集中频繁出现的多词表达。经过一些基本操作,如构建语料库、按日期排列变量和创建令牌,我们得到了这个:
这就是我们之前关于体育新闻问题的答案。我们清楚地看到在我们的数据中出现的主要表达:从游戏和产品到重要的名字、行动和英超联赛。以下是完整的代码:
news_corp <- test
news_corp$text <- as.character(news_corp$text)
news_corp <- corpus(news_corp)
ndoc(news_corp)range(docvars(news_corp, 'Date'))news_toks <- tokens(news_corp) %>%
tokens_remove(stopwords('english'), padding = TRUE) %>%
tokens_remove('[\\p{P}\\p{S}]', valuetype = 'regex', padding = TRUE)cap_toks <-
tokens_select(
news_toks,
'^[A-Z]',
valuetype = 'regex',
case_insensitive = FALSE,
padding = TRUE
)
head(cap_toks[[1]], 50)cap_col <-
textstat_collocations(cap_toks, min_count = 10, tolower = FALSE)
head(cap_col, 20) %>%
View()cap_col %>%
arrange(desc(count)) %>%
head(30) %>%
ggplot(aes(collocation, count, color = collocation, size = count)) +
geom_point() +
coord_flip() +
expand_limits(y = 0) +
theme(legend.position = "none") +
labs(
title = "Most frequent multi-word expressions",
subtitle = "",
x = "",
y = ""
)
为了改进我们的结果,我们应该只选择强关联的多词表达式。
正如我们所见,Rockstar Games 的新游戏“红色死亡救赎”在我们的数据集中为每个国家都赢得了不错的分数。但是如果我们不知道这到底是一个游戏还是别的什么呢?有针对性的词语搭配帮助我们发现:
rdr <- c('Red Dead Redemption')
rdr_dfm <-
tokens_keep(news_toks, phrase(rdr), window = 10) %>% dfm()
not_rdr_dfm <-
tokens_remove(news_toks, phrase(rdr), window = 10) %>% dfm()
rdr_key <-
textstat_keyness(rbind(rdr_dfm, not_rdr_dfm), seq_len(ndoc(rdr_dfm)))rdr_key <- rdr_key[rdr_key$n_target > 10, ]
head(rdr_key, 50)rdr_key %>%
mutate(feature = fct_reorder(feature, chi2)) %>%
head(30) %>%
ggplot(aes(feature, chi2, fill = feature)) +
geom_col() +
coord_flip() +
expand_limits(y = 0) +
theme(legend.position = "none") +
labs(
title = "Targeted frequency analysis on 'Red Dead Redemption'",
subtitle = "",
x = "",
y = ""
)
应用主题建模算法,我们将得到 100 个主题(见我之前的帖子):
gamma_terms %>%
top_n(20, gamma) %>%
ggplot(aes(topic, gamma, label = terms, fill = topic)) +
geom_col(show.legend = FALSE) +
geom_text(
hjust = 0,
nudge_y = 0.0005,
size = 3
) +
coord_flip() +
scale_y_continuous(expand = c(0, 0),
limits = c(0, 0.09),
labels = percent_format()) +
labs(
x = NULL,
y = expression(gamma),
title = "Top 20 topics by prevalence in the our dataset",
subtitle = "With the top words that contribute to each topic"
)
在顶部,我们有与总统和政府、体育和一些研究相关的新闻。太好了!接下来,我们将应用相对频率分析。在我的上一篇文章中,我们做了一个“新闻中精选品牌的引用”图表。现在我们比较他们两个的得分。
textstat_keyness 函数计算“keyness”,这是不同类别中不同出现的特征的得分。这里,通过参考 dfm 中的“目标”文档索引来定义类别,参考组由所有其他文档组成。
参考文献
邦迪、玛丽娜和迈克·斯科特合编。2010.文本中的基调。阿姆斯特丹,费城:约翰·本杰明,2010 年。斯塔布斯,迈克尔。2010.“关键词的三个概念”。文本中的基调,玛丽娜邦迪和迈克·斯科特编辑。pp21 42。阿姆斯特丹,费城:约翰·本杰明。
斯科特,m .和特里布尔,2006 年。语言教育中的关键词和语料库分析。阿姆斯特丹:本雅明,第 55 页。
邓宁泰德。1993.“统计意外和巧合的精确方法”,《计算语言学》,第 19 卷,第 1 期,第 61-74 页。
让我们看看作为目标值的“Apple”和预期的“Samsung”之间的相对频率。谁知道也许我们会看到一些关系?结果,我们得到了这个具有卡方值的图(如果目标中的观察值超过其预期值,则符号为正)
Apple <- test %>%
filter(str_detect(text, " Apple "))
Apple$id <- "Apple"Samsung <- test %>%
filter(str_detect(text, " Samsung "))
Samsung$id <- "Samsung"popularity <- rbind(Samsung, Apple)
popularity$text <- as.character(popularity$text)my_corpus <- corpus(popularity)# Create a dfm
pres_dfm <-
dfm(
my_corpus,
groups = "id",
remove = stopwords("english"),
remove_punct = TRUE
)# Calculate keyness
result_keyness <- textstat_keyness(pres_dfm, target = "Apple")
我们看到目标变量和预期之间的巨大差异:比如三星的可折叠智能手机和苹果的新 macbook。接下来,我们将构建一个 wordfish。Wordfish 是一种缩放技术,它不需要任何锚定文档来执行分析。相反,它依赖于字数的统计模型。这是它寻找“机器人”的方式。
test <- test %>%
filter(str_detect(text, "Android"))
test$text<-as.character(test$text)
my_corpus <- corpus(test)wf <- textmodel_wordfish(dfm(my_corpus), dir = c(6,5))# Plot estimated word positions
textplot_scale1d(wf, margin = "features",
highlighted = c("foldable", "android",
"performance", "samsung"),
highlighted_color = "red")
我最不想尝试的是新闻地图功能。它基于对数据中关联最强的国家的预测。我们已经看了新闻中对选定国家的引用,比如这个图:
US <- test %>%
filter(str_detect(text, " United States | US | USA | Stati Uniti | Etats-Unis| США | 美国")) %>%
count(name, Date)
US$id <- "United States"Germany <- test %>%
filter(str_detect(
text,
" Germany | Deutschland | Alemania | Germania | Allemagne | Германия |德国"
)) %>%
count(name, Date)
Germany$id <- "Germany"China <- test %>%
filter(str_detect(text, " China | Chine | Cina |Китай| 中国")) %>%
count(name, Date)
China$id <- "China"Russia <- test %>%
filter(str_detect(text, " Russia | Russland| Rusia | Russie |Россия|俄罗斯")) %>%
count(name, Date)
Russia$id <- "Russia"popularity <- rbind(US, Germany, China, Russia)popularity %>%
group_by(id) %>%
ggplot(aes(Date, n, color = id)) +
geom_line(size = 0.9) +
facet_wrap( ~ name, scales = 'free_y') +
labs(
title = "Citations on selected countries in a news",
subtitle = "Breakdown by Country",
x = "",
y = ""
)
但现在我们将尝试预测国家引用并在地图上绘制出来。
Newsmap 是用于地理文档分类的半监督模型。虽然(完全)监督模型是在人工分类的数据上训练的,但这种半监督模型是从字典中的“种子词”学*的。
test$text <- as.character(test$text)
test<- corpus(test)ndoc(test)range(docvars(test, 'Date'))month <- c(
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December'
)
day <-
c('Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday')
agency <- c('AP', 'AFP', 'Reuters', 'CNN', 'BBC')toks <- tokens(test)
toks <-
tokens_remove(toks,
stopwords('english'),
valuetype = 'fixed',
padding = TRUE)
toks <-
tokens_remove(toks,
c(month, day, agency),
valuetype = 'fixed',
padding = TRUE)label_toks <-
tokens_lookup(toks, data_dictionary_newsmap_en, levels = 3) # level 3 is countries
label_dfm <- dfm(label_toks, tolower = FALSE)feat_dfm <- dfm(toks, tolower = FALSE)
feat_dfm <-
dfm_select(feat_dfm,
"^[A-Z][A-Za-z1-2]+",
valuetype = 'regex',
case_insensitive = FALSE)
feat_dfm <- dfm_trim(feat_dfm, min_termfreq = 10)model <- textmodel_newsmap(feat_dfm, label_dfm)coefficients <-
coef(model, n = 10)[c("US", "GB", "FR", "BR", "JP", "RU")]
coefficients <- as.tibble(coefficients)pred <- predict(model)
head(pred, 20)count <-
sort(table(factor(pred, levels = colnames(label_dfm))), decreasing = TRUE)
head(count, 20)data_country <- as.data.frame(count, stringsAsFactors = FALSE)
colnames(data_country) <- c("id", "frequency")
data_country <- data_country %>%
filter(id != "ET")world_map <- map_data(map = "world")
world_map$region <-
iso.alpha(world_map$region) # convert contry name to ISO codeggplot(data_country, aes(map_id = id)) +
geom_map(aes(fill = frequency), map = world_map) +
expand_limits(x = world_map$long, y = world_map$lat) +
scale_fill_continuous(name = "Frequency") +
theme_void() +
coord_fixed()
在我们用与国家/地区相关联的附加摘录构建模型之后,我们可以检查它们:
一切都很好,但有些特征很奇怪。俄罗斯的“圣雅克”?让我们看看新闻来源:
加拿大宇航员大卫·圣·雅克说,他对俄罗斯联盟号火箭助推器比以往任何时候都更有信心
好吧,这是可以接受的,现在我们可以做一个预测,并创建一个地图:
它看起来非常类似于以前的地图,但有一些例外。我们之前的地图是基于每个国家的新闻总数,而这张地图是基于对新闻中国家引用的预测。较亮的颜色显示一个国家的最大引用排名,我们对美国的排名很突出,对欧洲、中国、澳大利亚和拉丁美洲的排名略低。
看起来很有趣?以下是更多信息:
第一部分——上个月世界发生了什么:世界新闻分析
Youtube 频道分析:识别影响者和憎恨者
盒子里有什么?!——第三产业区 Chipy Mentorship。3
原文:https://towardsdatascience.com/whats-in-the-box-2754f498be86?source=collection_archive---------11-----------------------
理解预测建模和“黑盒”模型的含义
How Brad Pitt feels about Neural Nets
自从开始研究数据科学以来,我收到的最常见的问题是:“什么是数据科学?”毫无疑问,这是一个合理的问题,也是一个我非常乐意回答的问题,涉及到一个我非常热爱的领域。这个答案最清晰的提炼是这样的:
数据科学是使用机器学*来建立预测模型的过程。
作为自然的后续,我们敏锐的听众可能会询问术语的定义:
- 什么是机器学*?
- 你说的模型是什么意思?
本帖重点回答后者。这种情况下的答案——同样是最简单的形式——是模型是一个函数;它接受输入并生成输出。首先,我们来看看最透明的预测模型之一,线性回归。
线性回归
The Linear Regression of Game Boy models
假设我们试图预测一个学生,泰勒,在一次考试中会得多少分。我们知道泰勒在过去的测试中得了多少分,和我们知道她学*了多少小时。当她根本不学*时,她得到 79/100,每学*一小时,她就多做三分。因此,我们对这种关系的等式是:
Taylor's_Test_Score = 3 * Hours_Studied + 79
这个例子是一个尽可能透明的模型。为什么?因为我们不仅知道学*的小时会影响泰勒的分数,我们还知道学*的小时会如何影响泰勒的分数。也就是说,能够看到系数 3 和常数 79,告诉我们学*和分数之间的确切关系。这是一个简单的函数:投入两个小时,得到 85 分。投入 6 个小时,得到 97 分。
Our very own predictive model represented graphically
当然,现实世界更加复杂,所以我们可能开始向我们的模型添加更多的输入。也许我们还会利用睡眠时间、看电视时间和缺课时间。如果我们更新我们的等式,这些新特征中的每一个都将有它自己的系数来描述输入与输出的关系。所有这些输入在数据科学术语中被称为我们模型的特征,我们用这些数据来进行预测。这种线性回归现在是多维的,意味着有多个输入,我们可以更容易地在 2d 平面中将其可视化。不过,这些系数很能说明问题。如果我们想要的结果是尽可能高的测试分数,那么我们想要最大化我们大的正系数(可能花费在睡觉和学*上的时间)的输入,最小化我们的负系数(电视和缺席)的输入。
我们甚至可以在线性回归中使用二元和分类数据。在我的数据集中,啤酒要么是由大型啤酒厂生产的,要么不是(例如 Anheuser Busch、Coors 等)。如果是,is_macrobrew 特性的值被设置为 1,并且在线性回归中,我们对啤酒的预测评级下降。
如果线性回归如此透明,可以处理不同的数据类型,难道不是比黑盒模型更好吗?不幸的是,答案是否定的。随着我们引入更多的功能,这些功能可能会发生变化。回想一下泰勒,更多的学*时间可能意味着更少的睡眠时间,为了建立一个更有效的模型,我们需要通过引入一个新的功能来解释这两个功能的相互作用。我们还需要考虑到,并非所有的关系都是线性的。额外的一个小时的睡眠可能会均匀地提高分数,最多 9 或 10 个小时,但超过这一时间对分数的影响可能很小或有负面影响。
基于树的集成建模
为了克服线性建模的缺点,我们可以尝试基于树的方法。决策树可以很容易地可视化,并像流程图一样遵循。以使用虹膜数据集为例:
Source: If this were a Game Boy, it’d probably be the clear purple one. You can peek inside, but the relationships aren’t quite as transparent.
iris 数据集是一个分类问题,而不是回归问题。该模型查看三种类型虹膜中每一种的 50 个样本,并试图对每个样本进行分类。每个框中的第一行显示模型在哪个特征上分割。对于最上面的盒子,如果萼片长度小于约 0.75 cm,则模型将样本分类为 Setosa 类,如果不是,则模型将样本传递到下一次分裂。对于任何给定的样本,我们可以很容易地遵循模型从一个分割到下一个分割的逻辑。我们还考虑了困扰线性模型的协方差和非线性问题。
随机森林是这种模型的更强大的版本。顾名思义,在随机森林中,我们有多个决策树。每棵树看到一个随机选择的替换数据子集(这个过程被称为引导),以及看到一个随机的特征样本。在我们的森林里,我们可能有 10、100、1000 或更多的树。透明度已经开始严重下降。我不知道特征与目标之间的关系,也无法跟踪单个样本的结果。我现在能做的最好的事情就是打开模型,看看每个特征执行分割的百分比。
简单说说神经网络
随着我们继续扩大不透明度,我们最终得到了神经网络。为了简洁起见,我将在这里简化各种类型。神经网络的基本功能是这样的:
- 每个特征都被单独输入到一层“神经元”中
- 这些神经元中的每一个都是一个独立的函数(就像我们为预测泰勒测试而构建的函数),并将输出提供给下一层
- 最终层的输出被合成以产生预测
用户在建立模型时确定层数和每层中神经元的数量。可以想象,一个特性可能会经历成千上万次操作。我们无法知道模型的输入和输出之间的关系。这就引出了最后一个问题…
我们需要看看盒子里面吗?
任何从事统计学的人,也许特别是在社会科学领域,都被灌输了相关性和因果性之间的区别。回到我们最早的例子,我们知道学*时间和考试成绩强烈相关,但是我们不能确定因果关系。
As usual, there’s an XKCD for that
最终对于数据科学家来说,我们需要问自己的问题是,我们关心因果关系吗?答案往往是否定的。如果模型有效,如果我们输入到机器中的东西能给我们提供准确的预测,那就可能满足我们成功的条件。然而,有时我们可能需要理解精确的关系。建立模型可能更多的是找出这些关系,而不是预测将会发生什么,即使我们的模型的准确性受到影响。
这些是数据科学家在建立模型时问自己的问题,以及他们如何决定使用哪种方法。在我自己的项目中,我最关心的是我的预测的准确性,而不是理解为什么啤酒会有高或低的评级,特别是因为这在很大程度上是口味和公众意见的问题。
我也许不能告诉你黑盒里发生了什么,但我可以告诉你它是有效的。这通常就足够了。
客户的下一个购物车里有什么?
原文:https://towardsdatascience.com/whats-in-your-customer-s-next-shopping-cart-73d64287ec53?source=collection_archive---------4-----------------------
Instacart 市场篮子分析ka ggle 上的竞争是机器学*如何应用于商业问题的一个很好的例子,也是功能工程的一个有用的练*。基本上,问题归结为预测用户会再次购买哪些产品,第一次尝试,或者在会话期间添加到他们的购物车中。背后的动机很简单:作为一家杂货配送公司,你会希望优化你的供应链,尽量减少浪费,并避免延期交货。机器学*部分是我将在这篇博客中讨论的内容。
如果您查看了本文开头的链接,您会知道有相当多的人尝试过这个问题,并且用不同的方法提交了几十次他们的模型。虽然摆弄随机森林和增强树可能很有趣,但对于这个项目,我们将坚持使用传统的逻辑回归,并研究通过特征工程和基本模型调整可以提高多少。
这一切都始于数据
通常,接*任何机器学*模型的第一步都是查看数据。在这里,我在 Tableau 中绘制了几个基本的可视化图形,仅仅从这些图形中,我们就可以了解用户的行为模式。
例如,这个图显示了一个月内有多少相对大小的商品被重新订购。我们已经可以看到,大多数人会在一周内重新订购产品,或者再也不会订购(30 代表自上次订购以来的 30 天或更长时间)。
在这里,我们可以看到客户的平均订单规模是 10 件商品。
虽然这种探索性的数据分析本身提供了有用的见解,但这个项目的目标是进行机器学*,并将这些见解转化为预测建模。
和机器学*
在这一点上,我与卡格尔有些分歧。为了训练一个逻辑回归模型,我将构建一个新的特性来表示给定用户的最后一个购物车:
train_carts = (order_products_train_df.groupby('user_id',as_index=**False**)
.agg({'product_id':(**lambda** x: set(x))})
.rename(columns={'product_id':'latest_cart'}))df_X = df_X.merge(train_carts, on='user_id')
df_X['in_cart'] = (df_X.apply(**lambda** row: row['product_id'] **in** row['latest_cart'], axis=1).astype(int))
这个新特性是查看用户和产品 id 并重新创建他们以前的购物车的结果。因此,我们以他们的最新订单结束,用一组产品 id 表示。在这里,我们可以创建一个列,指示某个商品以前是否被订购过,并根据包含以前购物车中的产品 id 的列填充值。显示时,新的特征空间将如下所示:
因为 id 为 1 的产品之前没有被订购,所以它在 in_cart 列中的值是 0。因此,该 in_cart 列将成为分类的目标。如果用户更有可能重新订购某个商品,我们将得到预测值 1,否则为 0。
在这个特征空间上运行基线逻辑回归产生了非常差的结果,所以这是我们可以求助于特征工程魔法的地方。我在我的特征工程中采用了迭代的方法,并测试了每一组新的特征(用户特征、产品特征和用户-产品特征)在每一步是如何影响我的模型的。
具体来说,在处理平均值时,我检查了天数和小时数的原始平均值相对于其四舍五入值的表现。这里的理由是,考虑自上次购买以来的 12.33 天是没有意义的,因为数据集本身只提供整数值,离散变量的小数值不是很有见地。令我惊讶的是,未舍入的原始平均值总体表现更好,从长远来看,给了我的模型更多的信号。
我设计的大多数功能都围绕着订单频率和一些平均指标,来比较整个客户群的一般订购趋势和特定的客户行为。我还将部门名称转换成分类变量,因为我希望它们可以为我的模型提供额外的信号(它们没有)。
我在开始时没有提到的一件事是,我的预测类相当不平衡。设计的 in_cart 功能显示,商品大约十分之一会被重新排序。为了补偿这种等级不平衡,我使用了 sklearn 默认的重量平衡:
lr_balanced = LogisticRegression(class_weight='balanced', C=1000000)
然而,我更进了一步,测试了自定义权重,以便进一步微调。事实证明,手动平衡模式整体表现更好。
结论
最后,这个简单的逻辑回归和新设计的特性以及手工的类平衡产生了非常好的结果。在 F1 = 0.381 的情况下,我并不落后于 Kaggle 的领导者,他们在 F1 = 0.41 附*徘徊,有许多提交物和更花哨的模型。
如果我们看看混淆矩阵,我们可以更好地分析我的 F1 分数到底代表了什么。在精度为 0.3 的情况下,我的模型可以正确预测所有重新排序项目的 30%,0.52 的召回率决定了我的模型可以预测多少真阳性和假阳性。至少,顾客可以确信他们不需要延期交货。
这种次优结果可以用类别不平衡来解释——当项目没有被重新排序时,我的模型预测得更好——或者这可能不是一个适合机器学*的问题。
除了这些有点抽象的分数,我们可以看看模型的系数。您可以在我的代码中找到所有的系数值,但是为了突出最重要的发现,我要说的是,客户订单频率是迄今为止客户再次订购某个产品可能性的最大预测因素。用户和产品总订单也起作用:一般来说,用户订购产品越频繁、越多,这些产品再次被订购的机会就越高。
然而,添加到购物车中的商品的计数顺序在商品被重新订购的几率中起着负面作用,这非常有意义:我们在开始时看到,用户的平均购物车大小约为 10 件商品。如果一个商品一直被放在购物车的第 15 位,那么它很可能不会出现在普通的购物车中。
结束了
今天到此为止。你可以在这里找到我非常有趣的演讲。所有的代码都可以在这个存储库中访问。
我还使用了 AWS EC2 (Amazon Web Services,Elastic Cloud 2)进行建模,我强烈推荐 Chris Albon 的指南来设置虚拟机和 Jupyter 笔记本以在其上运行。
国情咨文演讲中的潜台词
原文:https://towardsdatascience.com/whats-not-said-in-the-state-of-the-union-7ff5f95d8bef?source=collection_archive---------12-----------------------
今天我看了一下几乎每一次国情咨文演讲中使用的词汇,看看谁在他们任期的第一次演讲中没有提到这些词汇。
像希望、团结、支持、和平、人民、权力、权威、外交、安全、未来这样的词几乎每个人都在用,还有国家、国会、国家、政府这样的词。然而,有些人选择不使用这些词。
1–15th SOTU
我们可以看到乔治·华盛顿的用词与众不同,这在他发表第一个演讲时是有意义的。此后,有趣的是看到一些总统不谈论权威或安全。
16th-30th SOTU
31st onwards
这是我关于数据科学和视觉故事的# 100 日项目的第 76 天。数据来源是 SOTU 资料包,其中主要包括国情咨文演讲,在极少数情况下,如 1993 年,2001 年和 2009 年这些演讲不是正式的国情咨文,而是对国会联席会议的演讲。
作为一个对政治或历史不太感兴趣的人,我只是好奇数据能揭示多少东西,也想探索可视化文本的不同方法,这可能与可视化数字非常不同。代码在我的 github 上。感谢阅读。如果喜欢,请分享。欢迎新主题的建议和反馈。
人工智能在销售和营销方面的真正可能性是什么——超越宣传
原文:https://towardsdatascience.com/whats-really-possible-with-ai-for-sales-and-marketing-beyond-the-hype-4607d2b2ae7?source=collection_archive---------1-----------------------
围绕人工智能技术的炒作空前高涨,预计到 2025 年 市场将达到 370 亿美元 。在销售和营销领域,人工智能驱动的预测分析带来的 10 倍转化率和加速增长的潜力非常诱人。但是什么是真正可能的,什么又是遥远的未来?
据 CB Insights 和 O'Reilly Media 等消息来源称,销售和营销是受人工智能投资热潮影响最大的前三个市场。行业巨头正在宣布更多的人工智能计划——sales force 收购 Metamind 并推出 Einstein,或者微软推出具有人工智能技术 Cortana、PowerBI 和 Azure 机器学*的 Dynamics 365。
然而,人工智能的能力与客户和投资者的期望之间存在脱节。人工智能工具的购买者并不总是熟悉底层技术,也不知道哪些供应商能够兑现准确有用的预测承诺。
预测分析与其他人工智能技术
在销售和营销领域,预测分析是一种人工智能,*年来势头强劲。公司使用这种技术来预测哪些线索会成为客户,这是基于表明他们购买可能性的特征或行为,然后决定如何最好地抓住这些机会。
预测分析不是销售和营销应用中使用的唯一人工智能类型,但它是当今大多数创新发生的地方。尽管人们很容易被由深度学*和自然语言处理(NLP)驱动的全自动人工智能工作流或机器人虚拟助理的想法所吸引,但这些技术尚未准备好大规模实施。预测分析提供了现在可以工作的工具,使越来越多地被数据淹没的创业销售和营销团队更容易做出决策。
预测能为销售和营销带来什么
预测分析有助于公司优先使用其销售和营销资源。对于初创公司来说,保持精益和高效是成功的关键,使用预测技术可以保持业务增长,而无需雇用新的销售代表或增加营销预算。它还通过快速给初创公司反馈,而不是等到几个月后才分析结果,提高了敏捷性。
以下是初创公司使用预测分析进行销售和营销的一些最佳方式:
- 确定您的理想客户档案和细分市场
- 根据行为对销售线索评分,并确定销售工作的优先顺序
- 通过自动化手动活动(如研究、设置基于规则的工作流和/或更新 CRM 数据)保持团队的精干
- 整合来自现有工具的数据,以做出更准确的预测
- 通过个性化内容和活动锁定客户群
- 支持基于客户的战略
- 向高端市场转移,并利用有希望的领先优势扩展到新的领域
- 采用通用的数据驱动型决策框架
预测分析有助于公司更快地实现增长目标,而无需在销售和营销上投入更多资金。但就像任何被大肆宣传的技术一样,在你购买之前,有几件事需要注意。
人的因素:创业的关键因素
初创公司和快速增长的公司可以使用预测分析在他们的市场上更具竞争力,但前提是他们理解人工智能驱动的技术的局限性。人类的专业知识仍然在预测平台对你的公司有多有效方面发挥着巨大的作用。
在投资预测平台之前,您应该能够回答这些问题:
- 该软件适合您的使用情形吗?一个好的预测平台不仅仅建立在算法上。它是由行业专家创建的,他们了解您将如何实际使用它来做出业务决策。如果一个供应商不能清楚地说明为什么它适合你公司的用例,它可能不适合你的业务。
- 平台有很多集成吗?如果您能够将预测分析集成到您已经使用的工具中,或者集成到随着您的成长而可能采用的工具中,那么采用预测分析要容易得多。购买之前,检查最流行的 CRM 和营销自动化工具的开放 API。
- 供应商对数据源和信号透明吗?要相信一个平台的预测,你必须知道为什么它包括某些信号而不包括其他信号。询问第一方和第三方数据源,以及供应商为什么使用它们而不使用其他数据源。
- 对于这个工具,你有足够的成败数据吗?为了专门为您构建预测模型,供应商必须能够利用您过去的销售数据来训练模型。不要过早投资——等待一个月甚至一年,随着你的成长积累更多的数据,这可能是正确的选择。
随着越来越多的公司采用预测平台来帮助他们成长,由您来决定哪种技术将保持您的竞争力。谈到人工智能,有一个大肆宣传的理由——拥抱它的潜在回报是巨大的。保持消息灵通,选择一个强大的平台,看着您的企业收获收益。
朴素贝叶斯有什么幼稚的?
原文:https://towardsdatascience.com/whats-so-naive-about-naive-bayes-58166a6a9eba?source=collection_archive---------2-----------------------
Naive art
朴素贝叶斯(NB)是“朴素”的,因为它假设测量的特征是相互独立的。这是天真的,因为它(几乎)永远不会是真的。以下是 NB 无论如何都管用的原因。
NB 是一个非常直观的分类算法。它会问这样一个问题,"考虑到这些特征,这个测量值属于 A 类还是 B 类?",并通过将属于 A 类的具有相同特征的所有先前测量的比例乘以 A 类中所有测量的比例来回答它。如果该数字大于 B 类的相应计算,则我们说该测量属于 A 类。简单,对吗?
当然,在实践中,我们很少会看到许多测量具有相同的特征集。事实上,如果我们必须依赖一个测量值来与一些先前测量的数据点相同,我们将只能对完全相同的数据点进行分类,这使得贝叶斯规则实际上对分类毫无用处。
现在,如果我们做一个天真的假设,所有的特征都是相互独立的,那么我们就不需要依靠训练数据集中的精确副本来进行分类。我们可以简单地分别获取每个特征,并确定属于 A 类的先前测量值的比例,这些测量值仅对此特征具有相同的值。然后,我们对所有其他功能进行同样的操作,并获得产品。我们再次将其乘以 A 类在数据集中的比例,看看这个数字是否大于我们对 b 类进行相应计算的结果。这是作弊,但确实有效。
NB 的伟大之处在于天真的假设实际上有助于分类。可以这样想:如果两个特征实际上是相关的,比如说,头发长度和性别,那么假设它们是独立的就意味着你要重复计算证据。如果性别和长头发与成为贾斯汀比伯的粉丝有更多的联系,那么假设独立会让你更加确定她是一个信仰者。或许有点天真。
哈尔特征分类器和卷积神经网络有什么区别?
原文:https://towardsdatascience.com/whats-the-difference-between-haar-feature-classifiers-and-convolutional-neural-networks-ce6828343aeb?source=collection_archive---------0-----------------------
以情感识别模型为例!
“基于哈尔特征的级联分类器”、“类哈尔特征由 Viola 和 Jones 首次提出”……但到底什么是类哈尔特征呢?它与卷积神经网络有什么关系?
Haar-Feature 就像 CNN 中的核,只是在 CNN 中,核的值是通过训练确定的,而 Haar-Feature 是手动确定的。
以下是一些 Haar 特性。前两个是“边缘特征”,用于检测边缘。第三个是“线特征”,而第四个是“四矩形特征”,最有可能用于检测倾斜的线。
Image 1: Common Haar-features // Source
从数字上看,它们可能如下所示:
Image 2: Haar-features represented numerically
正如这里的所解释的,每个 3x3 内核在图像中移动,并与图像的每个 3x3 部分进行矩阵乘法,强调一些特征并平滑其他特征。
Haar-Features 擅长检测边缘和线条。这使得它在人脸检测中特别有效。例如,在碧昂斯的小图像中,这个 Haar 特征将能够检测到她的眼睛(顶部较暗而底部较亮的区域)。
Image 3: Haar-features can be used to detect facial landmarks, such as the shadow of an eye // Source
然而,由于 Haar 特征必须手动确定,所以它能够检测的事物的类型有一定的限制。如果你给分类器(一个网络,或者任何检测人脸的算法)边缘和线条特征,那么它将只能检测到边缘和线条清晰的物体。即使作为人脸检测器,如果我们对人脸进行一些操作(比如用太阳镜遮住眼睛,或者将头部倾斜到一侧),基于 Haar 的分类器也可能无法识别人脸。另一方面,卷积核具有更高的自由度(因为它是由训练确定的),并且能够识别部分覆盖的人脸(取决于训练数据的质量)。
有利的一面是,因为我们不需要训练 Haar 特征,所以我们可以用相对较小的数据集创建一个分类器。我们所要做的就是训练每个特征的权重(即,应该更多地使用哪个 Haar 特征?)这允许我们在没有大量训练图像的情况下很好地训练分类器。此外,它还具有更高的执行速度,因为基于 Haar 的分类器通常涉及更少的计算。
引发对基于哈尔的分类器的这个小调查的是这个识别情绪的模型。去年,在一个展览会上,我偶然发现了一个情感识别系统。然而,它没有使用神经网络。我很好奇是否能找到一个完全基于 CNN 的情感识别算法。
简单看一下这个模型,我看到它使用 OpenCV 的基于 Haar 的级联分类器来检测人脸。在找到面孔后,该团队训练他们自己的 CNN 来识别脸上的情绪。
因为它使用了基于 Haar 的分类器,我不能真正称它为完全基于卷积神经网络的 T2 算法。如果我把基于哈尔的分类器换成的 MTCNN 人脸识别系统会怎么样?
最初,它加载了一个基于 Haar 的分类器。我把它换成了一个 MTCNN 探测器:
然后,我做了一点数据处理,因为他们基于 Haar 的分类器输出返回一个方形边界框作为二维数组,而 MTCNN 模型输出返回一个字典中的矩形边界框。
当我改变输出和调试时,我让基于 Haar 的分类器和 MTCNN 检测器都保持运行(以比较它们的输出)。有趣的是,我的电脑似乎无法承受如此大的计算量:程序一直在崩溃。
最后,我运行了程序,现在运行的是 MTCNN,而不是基于 Haar 的分类器。以下是一些观察结果:
- 基于 OpenCV Haar 的分类器要快得多。切换到 MTCNN 检测器后,视频开始滞后。它仍然可以实时运行,但质量没有那么好。
- MTCNN 检测器能够检测更多种类的人脸。即使我倾斜我的脸,将它部分转向远离相机,或者用手遮住它的一部分,它仍然能够识别它是一张脸。基于 OpenCV Haar 的分类器只能真正识别完整的正面人脸。
- 根据基于 Haar 的分类器训练的情绪识别网络只能准确识别正面人脸上的不同情绪。因此,即使 MTCNN 检测器允许我们在部分模糊的面部周围绘制一个边界框,该程序也无法真正识别面部的情感。
所有这些观察结果都与我的发现一致:虽然训练有素的 CNN 可以学*更多的参数(从而检测更多种类的人脸),但基于 Haar 的分类器运行更快。根据你的任务,一个可能比另一个更适合。
在此下载您的资源:
- MTCNN Github 下载:https://github.com/ipazc/mtcnn
- 情感识别 Github 下载:https://github.com/oarriaga/face_classification
- 我的代码(把这个放在“src”下,运行这个之前记得把 mtcnn 的“MTCNN”文件夹放到情感识别模型的“src”文件夹里):https://drive . Google . com/file/d/1 dqyleqv 8 uftieal 687 x3x 5 cht 1 _ TCTG/view?usp =共享
分布如何,肯尼斯?
原文:https://towardsdatascience.com/whats-the-distribution-kenneth-1cab2eefe7b8?source=collection_archive---------7-----------------------
今天早些时候,我发现自己被一个看似简单的问题彻底难倒了:如何解决罕见事件的分类问题?
从某种意义上说,这既是一个“容易”的问题,也是一个“困难”的问题。简单,因为分类算法很多。“困难”是指预测罕见事件通常并不容易:任何分类算法都会受到大量分类错误的困扰。
但是,我觉得有趣的是,这真的揭示了我的思维方式与普通的军情六处人员有多么不同。我的第一反应是按顺序列出逻辑回归、CART 和 RandomForest。为什么?因为我知道每种算法的运动部分是如何工作的,按照我列出的顺序,因此我知道我可以从每种算法中得到什么样的误差分布,以及当我从结果中看到意外的误差分布时会如何反应。我想我“应该”已经回答了梯度增强模型、AdaBoost 或类似的东西,因为我理论上“知道”它们会产生“更好”的预测(如果是这样,它不会很快出现,但是。),但是,如果没有对何时、何地、如何以及为什么他们错了的良好感觉,也就是说,如果他们错了,如果他们没有错,如果没有错误,或者至少,如果我不知道错误的分布,我不确定我知道如何处理它们。换句话说,这表明我的想法有点反常,至少从通常统计人员的角度来看是这样——我不太关心信号,我最感兴趣的是噪声的分布。
当然,这在某种程度上是对增强模型的不公平描述:它们将模型本身的“错误”内在化了——只是它们的集合性质没有产生单一的明显的噪声分布。这组课堂讲稿中的幻灯片 61–65 有助于可视化这个过程:从“以噪声为中心”的角度来看,一个重要的事实是,根据观察到的特征,该算法很有可能将 G 误认为 Q、R 或 S,即使经过了相当多的回合。在某种意义上,这相当于我正在思考的那种噪声分布函数:我不在乎“正确”的答案是否是 g。例如,我想知道下一个“正确”的答案是什么(我猜这是 100 轮后的 Q),它相对于第一个正确答案的概率(显然,约为 50%,100 轮后,0.2 比 0.4),以及这个概率相对于其他概率的变化率。我也希望有一些东西,一些基线模型,可以这么说,这样我就可以估计“自然地”将 G 误认为 Q 的可能性有多大,这样就可以测量 ML 算法的预测能力,但我不认为有人会这样做,至少在这种情况下。(但有一些问题集中在变量之间的“依赖性”上,例如系词,它引发了一些相同的问题。不一定(太)不同:所谓的“资金外逃”会导致资产价格出现高度相关的短期波动。G 和 Q 在特征上的相似性很可能会将其中一个误认为另一个,即当真正的字母未知时,与配对的 G 和 A 相比,增加了它们在“识别”中的配对相关性——无论是谁或什么在做,将未知字母认为是 G 或 A 的可能性都不是很高。当然,最大似然算法给了我们该算法的概率,但是与它比较的基线选择是什么呢?).
我认为这就是统计学,至少我是这样理解的,与 ML 的观点不同的地方:如果在训练模型的过程中,数据有标签 G,那么它有 100%的概率是 G。在我看来,我不知道我看到了什么:它是有 40%概率的 G 和有 20%概率的 Q,在这之前我已经重复了 100 次关于 G 的观点。这在某种意义上是越(准贝叶斯?)“统计”思维——至少是我接受培训时的思维。我们不知道事实——如果我们知道,我们就不会做统计。(我认为最大似然法更类似于“经典统计学”,在这种意义上:假设 X 是 A,X 不是 A——因此假设潜在的正确答案,并计算给定样本的相对概率。在 ML 上下文中,概率是通过一个更长的过程来计算的。)现实永远只是一个概率分布,对任何事都不会在 p=1。为了搞清楚这一点,我们需要知道我们不知道多少——或者相对于第一种可能性的第二种、第三种或第四种可能性的概率,取决于观察到的样本。因此,统计分析的重点不在于最正确结果的概率,而在于它相对于其他选择有多好。另一方面,从 ML 的角度来看,“正确答案”必然存在,并且被封装在训练集中。问题是,该模型是否能像在训练过程中那样,在应用程序集(测试集和验证集,如果适用,作为中间步骤)中找到正确的答案。其他选项不存在,因为答案是 G,而不是 Q。(我对此的回答是,虽然您在训练/测试集中知道这一点,但您如何知道您是否在应用程序集中看到了 Q 或 G?当我在 2016 年选举前处理民调数据时,我遇到了这个问题:试图将样本分成训练集和测试集是毫无意义的,因为无论如何,直到选举日之前,我们都不知道真正的答案是什么。我们所能做的最好的事情是显示模型识别的各种特征相对于现有数据的稳健程度,但是全国范围内的投票率预测不太可能受到愚蠢的小波动的影响。)在我看来,如果你想变得敏捷,你需要知道第二、第三和第四种可能性是什么,以及它们发生的可能性有多大。所以,如果你认为你看到了一个 G,那么它真的是 Q,A,或者 F 的可能性有多大?如果使用得当,GBM 可以给出这些答案,但我还没有见过有人这样使用它——尽管我并不像我希望的那样关注当前的情况。
总之,我们不应该只是想知道正确的答案。我们所能做的就是根据算法中的任何内容,给出我们认为“最正确”的答案。理想情况下,我们应该想知道相对于“最正确的答案”,不太正确的答案的等级排序以及算法分配给它们的概率如果能够将概率与备选基线进行比较,那就更好了。(一个简单的例子是来自 DWNominate 算法的预测投票与人们只是投票给政党的天真假设。就绝对值而言,DWNominate 预测今天比以前更好,但人们也比以前更经常地投票给政党。与 20 世纪 70 年代相比,DWNominate 作为简单的以政党为中心的投票模型的选票预测指标的相对表现更差,政党和选票的相关性与今天一样。除此之外,在国会不同类别的投票中,DWNominate 得分的预测能力也有很大差异。)现实不仅仅是(据称)正确的答案。预测分析不仅应该帮助我们找到“最正确的”(特别是因为这些答案在无条件的意义上不一定是“正确的”)答案,更重要的是,与一些“合理的”基线(例如“平均值”)相比,这些答案有多错误对我来说,有趣的问题不是平均 X 看起来像什么,而是平均 X 离平均 X 有多远——这是双关语。当然,这是方差的函数定义,或多或少也是 k 级推理的工作方式)。
正规化有什么好大惊小怪的?
原文:https://towardsdatascience.com/whats-the-fuss-about-regularization-24a4a1eadb1?source=collection_archive---------17-----------------------
作为机器学*的新手,当他们的训练错误开始减少时,大多数人都会感到兴奋。他们进一步努力,开始进一步减少,他们的兴奋没有止境。他们向乌龟大师展示了他们的结果,乌龟大师平静地说,这不是一个好模型,你需要调整模型,并检查验证集的性能。如果你想了解什么是“正规化”以及它如何有所帮助,那么请继续阅读。
让我先打个比方,机器学*模型就像父母一样,他们对自己的孩子有一种亲和力,他们与孩子相处的时间越多,这种亲和力就越强,孩子就成了他们的世界。ML 模型也是如此,一旦你开始用数据训练它们,它们就开始对训练数据产生兴趣。你越是调整你的模型,它们就越符合训练数据,从而减少误差。然而,我们需要记住的是,训练数据只是总体的样本,因此它代表总体的一些趋势,而不是所有趋势。如果我们将模型与样本数据紧密拟合,那么就不能保证与测试数据拟合得那么好。这意味着测试数据中的趋势不会精确地复制训练数据,但是会是训练数据的概括。因此,我们的模型也需要很好地概括,任何完全适合训练数据的模型都不会很好地概括。这就是正则化有所帮助的地方,它就像一个明智的大师,帮助降低我们的模型与训练数据的亲和力,并帮助它进行归纳。
唷!很多理论让我们用一个例子来理解它。只是提醒一下,你会在文章前面遇到很多术语,但是不要担心,我会试着解释这些术语。
一个简单的例子是,考虑一个样本训练数据,其中 Y 与 x 呈现多项式关系。
Training Data
你拟合一个简单的线性回归模型,它看起来像这样,带有一些训练误差。
Fig 1-Linear Regression Fit
您对此不太满意,并希望进一步减少训练误差,因此您将二次多项式项添加到线性回归(X 平方)中,结果如下所示。
Fig 2-Second degree polynomial fit
现在,看到训练误差已经减少,你忘乎所以,你用 50 次多项式拟合模型,它看起来像这样。
Fig 3–50 Degree polynomial fit
看看这个模型有多完美,它现在开始紧密地拟合每个点。这就是事情开始变得模糊的地方,这个模型仅仅对于训练数据来说是一个优秀的模型。然而,对于测试数据或该训练样本之外的任何数据来说,这都是废话。在机器学*的说法中,这被称为“高方差”模型。高方差意味着模型是过度拟合的,而过度拟合的模型对于预测来说是不好的。而图 1 中的模型被称为“高偏差”模型或欠拟合模型。我们需要一个平衡偏差和方差的模型。
在具有多个维度的真实世界中,在对模型进行参数调整之后,您真的不能一直查看图表。这就是你需要依靠正则化来减少方差的地方。但请记住,我们还需要衡量我们的模型在列车数据以外的数据上的表现,这是交叉验证有所帮助的地方。简而言之,从训练数据中保留模型在训练时看不到的一些数据,并根据这些数据(验证数据)评估模型性能。
那么正则化到底是如何降低模型的方差的呢?
为此,我们需要举一个最小二乘回归的例子。最小二乘回归成本函数为:
Fig -4 Cost function for Linear Regression
正则化的工作方式是在成本函数中增加惩罚
Fig -5 Regularized Cost function
记住这个惩罚是针对除了θ0(截距)之外的所有θ的。这如何有助于减少模型的过度拟合?我们来了解一下。
为了减少模型的方差,重要的是我们有一个简约的模型,这意味着我们有一个简单的模型,它可以很好地概括。为了有一个简洁的模型,我们需要减少模型中的特征或者减少除截距之外的特征的 thetas 的权重。对这两种方法有一点了解。
- 减少特征的数量(模型选择/子集选择)
这是通过模型选择或子集选择技术实现的。这是一个统计过程,其中使用特征组合构建各种模型,并使用 AIC (Akaike 信息标准)、SBC( Shwarz 贝叶斯标准)或 Mallows (Cp)或任何其他标准选择最佳模型(具有特征子集)。然而,我们不打算在本文中讨论这一点。
2。 降低特征的权重(正则化/收缩法)
在正则化中,我们保留所有特征,但是减少特征的θ或权重的大小。该技术减少并消除了不重要特征的 thetas(权重)。因此,我们得到了一个简约的模型。
有多种方法可以正则化一个模型。对于线性回归,您可能听说过以下内容:
- 山脊(减少特征的权重)
Fig 6.2 — Ridge Regression
- 套索(消除一些特征)
Fig 6.1 — Lasso Regression
- ElasticNet(混合方法)
Fig 6.3 Elastic Net Regression
其中:
λ=正则化的惩罚参数
山脉
在脊正则化的情况下,罚值被称为 l2 范数。那么为什么岭回归会减少过拟合呢?随着λ的增加,岭的灵活性开始降低,当λ= 0时,岭回归与 OLS 相同。然而,特征权重可以非常接*于零,但是在脊的情况下很难得到零权重。
套索
在套索的情况下,惩罚被称为 l1 范数。山脊和套索的区别在于,在套索的情况下,随着 lambda 的增加,灵活性开始迅速降低,很快一些特征被关闭,这意味着一些特征的特征权重降低到零。因此,套索在减少特征和具有更简洁的模型方面非常有用。
让我们用一个例子来理解这一点。我正在使用一个名为 Credit 的数据集,它可以从著名的 ISLR 图书网站上获得。
问题是使用一组特征来预测“平衡”
这个问题不是很大,但它将帮助我们了解山脊和套索在同一组要素上的表现。
为简单起见,我们只取四个特征收入、评级、限制和学生。如果λ从 0.001 到 1000,我们将取 50 个值,然后检查收入、评级、限制和学生的权重。这将有助于深入了解山脊和套索的行为。
在使用四个特征和 50 个不同的λ值运行脊之后,这里是这四个特征的系数如何变化。
Fig 7 — Ridge coefficients as a function of regularization
请注意,当λ为零时,所有四个特征的权重都很高,并且对应于 OLS。随着λ开始增加,权重值开始下降。对于λ= 1000,收入和学生的权重接*于零但不等于零,其他两个特征的权重也显著降低。
对这些的解释超出了本文的范围。这篇文章只是想给出一个正规化的概述,但是我会在下一篇文章中用一个具体的例子来解释套索和山脊。观察正则化如何工作以及它如何影响模型将是非常有趣的。
当我们对套索重复同样的过程时,我们看到的是:
Fig 8- Lasso Coefficients as function of regularization
你能看出区别吗?对于大约 150 的λ,三个特征的权重下降到零。因此对于一个小的正则化套索完全消除了特征。因此,Lasso 在特征选择中是有用的,其中它通过将不必要的特征的权重减少到零来消除不必要的特征,并且实现更简约的模型。
现在让我们来看看 RSS(MSE)如何随着训练数据的这两个正则化而变化。
Fig 9- MSE(train) for Lasso & Ridge as function of regularization
看看 Lasso 的给定 lambdas 在训练数据上的 MSE 是如何高于 Ridge 的。这是因为套索比山脊更能规范模型。
值得一提的是,在三重交叉验证的情况下,MSE 是如何随交叉验证数据而变化的。
Fig 10- Cross Validation score for Lasso & Ridge as function of regularization
看看 Lasso 的交叉验证分数如何比 Ridge 下降得更快,表明 Lasso 更适合验证数据。
最后,我们需要记住正则化的一个重要方面,即数据必须标准化。
与 ridge 类似,lasso 也将系数估计缩小到零,但是在 lasso 的情况下,当 lambda 较大时,l1 罚分具有将一些系数强制为零的效果。因此,套索导致可变选择,套索模型有时也被称为稀疏模型。然而,当响应是所有预测值的函数时,岭是有效的,因为它不消除特征。
正则化不仅用于回归,还用于决策树,在决策树中称为修剪,在神经网络中称为丢弃。但是关于这些的讨论超出了本文的范围。
我希望上面的文章能帮助你理解正规化。
如果你想看一个正在运行的例子,请在 google colab 上查看这里
[## 谷歌联合实验室
编辑描述
colab.research.google.com](https://colab.research.google.com/drive/1GxU2XyQtKxbklQrZVhS1M_M1eoKgHK5H)
github 代码可以从这里拉出来
不要把你的时间浪费在统计上
原文:https://towardsdatascience.com/whats-the-point-of-statistics-8163635da56c?source=collection_archive---------4-----------------------
Here’s the audio version of the article, read for you by the author.
我最*发现,我的一个好朋友成功地获得了统计学博士学位,却从来没有问过自己这样一个问题:统计学到底有什么意义?哦,天哪。如果你不知道它是为了什么,你也不知道它什么时候不适合你。原来教授们不会让这一点显而易见,所以让我看看我是否能帮上忙。
Image by the author.
统计学 是在不确定的情况下改变自己想法的科学。你的想法是什么?一个 默认动作 或者一个 先验信念 。但是如果你的想法没有定下来,你该怎么办呢?如果你没有任何意见呢?
按照你的估计去做就行了(这只是“根据你所知的最佳猜测”的一种花哨说法)。你如何得到一个?只要看看数据,报告有什么。这被称为分析(又名数据挖掘),如果你曾经使用过电子表格,你已经做过了。好消息是,你的直觉实际上很擅长给你正确的估计。不需要复杂的数学。
“但也可能是错的!”当然它可能是错的,这就是不确定的含义。世界上没有数学魔法能把不确定性变成确定性。你的最佳猜测可能是错误的,但这是你的最佳猜测,这使得任何其他猜测都是更糟糕的猜测,甚至更有可能是错误的。
所以跟着你的直觉走,不管你有多少数据!
“等等,但是我需要知道我是否有足够的数据!”Mmmm?什么够了?
暂停一会儿,想象你正在蓝色和橙色的帽子之间选择。如果你真的对它们漠不关心,并且数据堆积起来偏向橙色,那么你最终选择蓝色就是疯了。即使你总共只有 3 个数据点。哪怕只有 0.0000000000001%赞成橘子。你因为什么疯狂而变得忧郁?!用橙色,不需要数学。
If you’re indifferent between these hats to begin with and you get more votes for orange than blue, there’s no math in the world that should tell you to pick blue. Math isn’t magic and it doesn’t violate common sense. Image by the author.
最终选择蓝色的唯一合理的方法是,如果你一开始就偏爱蓝色的帽子。那么你是在问支持橙色的证据是否足够有力。换句话说,是否有足够的数据来改变你的想法。好吧,那你怎么知道?欢迎来到统计。
In the top half of the table, the evidence doesn’t contradict your starting preference, there’s no need for statistical calculations. You can make your decision immediately. If your evidence is out of line with your preference, you can use statistical calculations to find out whether the evidence should make you want to change your mind.
统计学是改变你想法的科学。
因此,如果你在处理不确定性(例如,“这个机器学*系统能处理明天的数据吗?”)而且这些选项的重要性也不尽相同(例如,“除非它有效,否则我们可能不应该启动它。”)那么你来对地方了:统计学就是给你准备的。在这里放大浏览它的主要思想。其他人,在你最终小心翼翼地、无用地计算一堆数字之前,赶快逃离吧。分析对你来说是更好的选择。
感谢阅读!YouTube 课程怎么样?
如果你在这里玩得开心,并且渴望了解更多,请前往我的统计思维播放列表:
如果你正在寻找一门为初学者和专家设计的有趣的应用人工智能课程,这里有一个我为你制作的娱乐课程:
Enjoy the entire course playlist here: bit.ly/machinefriend
喜欢作者?与凯西·科兹尔科夫联系
让我们做朋友吧!你可以在 Twitter 、 YouTube 、 Substack 和 LinkedIn 上找到我。有兴趣让我在你的活动上发言吗?使用表格取得联系。
有什么意义?视觉数据报告
原文:https://towardsdatascience.com/whats-the-point-visual-data-reporting-e05c0f4f4479?source=collection_archive---------3-----------------------
你们中的许多人可能都经历过和我一样的情况,当你收到一份报告时会想“我在看什么?”“这有什么意义?”。包里都是桌子,真是只见树木不见森林!作为数据专家,您如何向您的业务合作伙伴展示您对他们的业务有清晰而全面的了解,而不会让他们沉浸在数据中?
传达信息和讲述“数据故事”是任何数据专家都不应忽视的技能。通常在商业中,你认为的能力和你的实际能力一样重要。如果你想推进你的职业生涯,向非技术观众展示你的技能是至关重要的。提供清晰易懂的报告也意味着您的建议更有可能被考虑!如果你担任建议/商业智能的角色,你需要迅速展示“燃烧的平台”或需要改变的原因,否则利益相关者不太可能采取任何行动。这就是你如何让自己变得有价值,并最终成为你的商业伙伴不可或缺的一部分。
为了突出这个问题,我准备了一个小型数据集,其中包括一个虚构企业的销售和收入业绩。包括四个不同办事处 12 周的销售量、人数、运营成本和收入。假设该企业有四个办公室执行相同的任务并独立运营。运营成本纯粹是员工工资。该报告的目的是让每个办公室的领导与公司的负责人一起评估和比较他们的绩效。
Example of a typical data report for a business stakeholder.
如您所见,样本数据集是分布在任何大型组织中的许多报告的典型。它包含企业要求的信息,并且不包含任何数据错误。那么,除了在数学上站得住脚之外,这是一份好报告吗?我希望这个行业的高层领导能做些什么?数字看起来都没问题?
尽管这份报告没有什么“错误”,但仍有许多改进的机会。众所周知,高层领导缺乏时间,关注大局。出于这些原因,我们希望快速清晰地向他们展示要点,尽可能不分散他们的注意力。
从管理角度来看,一些挑战是“收入”等数据点。这个指标(在示例中)由销售数量和每次销售的收入金额组成。由于它实际上是两个较小指标的总和,采取行动提高收入是一个挑战?我应该专注于增加销售额还是增加利润?同样,如前所述,运营成本纯粹由员工工资构成。我是应该专注于减少员工数量,还是应该减少他们的薪酬?我们确实在报告中统计了人数,但是经理需要自己计算平均工资来回答这个不是最佳结果的问题。
如何呈现这份报告?
Visual alternative to the original report.
原始报告可以可视化地呈现,上面的例子是使用 Tableau 准备的,Tableau 是一个非常有效的工具,只需要有限的培训就可以开始。LinkedIn learning 有一些免费课程在这里然而网上有很多很多免费和负担得起的课程。
该图显示了原始数据中最后一周的结果,但是显示 12 周的合计可以以相同的格式呈现。或者,如果企业更关注一段时间内的变化而不是某个时间点的绩效,我们可以使用折线图来显示一段时间内的结果。蓝色区域代表当前信息,绿色区域突出显示上周的结果。绿色阴影越暗,表示该区域越新。这只是一个例子,说明如何将最*的业绩纳入一个单一的视觉效果,但对于“办公室 2”,我们可以看到利润在最*几周一再下降。
高层领导可能会把利润作为他们的总体目标。他们可能会有一些额外的质量和客户满意度指标,但是让我们考虑这些超出了我们的项目范围。数据已经过重新计算,以显示“平均工资”、“员工人均收入”、“销售收入”、“员工人均销售额”等指标,最后是“利润”。提供了这些指标的顺序,因此利润排在最后,因为上述指标将合计影响总利润。每个办公室都有自己的专栏,我们可以快速有效地比较每个网站的表现。
那么,我们能从这份新报告中学到什么呢?最初的表格没有引起我的任何警觉,但是,新的报告强调了:
- 四个工厂之间平均工资的显著差异
- 员工人均收入和销售收入数字不一致
- 办公室 1 的利润明显高于所有其他办公室。
有许多方法来显示这些信息,每种方法都有优点和缺点。在准备视频时,我考虑了以下几点:
清除:排除不必要的数据点、网格线、轴值等。
配色方案:所有的列都是不同的蓝色阴影,这使它们保持连接(一个公司),但允许读者区分行。颜色也更柔和(更灰),因此不那么强烈,更容易长时间聚焦。
利润最后:由于上述指标都对利润有所贡献,因此在底部显示为“汇总”指标。
正如我所提到的,有许多方式来展示这份报告,这份报告中有我喜欢和不喜欢的方面,但一份报告很少是完全完美的。试着找到最适合你报告目的的折中方案,但是我希望这篇短文能激发你对这个话题的思考!
感谢阅读,如果你喜欢这篇文章,请记得“鼓掌”并关注我未来的文章!
我以前的博客也可以在这里找到。
转型成为数据科学独角兽的秘笈是什么?
原文:https://towardsdatascience.com/whats-the-secret-sauce-to-transforming-into-a-unicorn-in-data-science-94082b01c39d?source=collection_archive---------3-----------------------
Photo by andrew jay on Unsplash
分析中的角色,学会成为“无价之宝”的技能
每个数据科学领域的有志之士都有这样一个问题“我需要什么技能才能进入这个行业?”,紧随其后的是“我如何在这个就业市场上变得备受追捧?”尽管这个行业炙手可热,供需失衡有利于训练有素的专业人士,但获得正确的技能组合并不容易。
现在大家都知道‘数据科学家 是本世纪最性感的工作。但是这到底指的是什么角色呢?一提到这个头衔,就会让人想起数学奇才在多元微积分和线性代数中挥汗如雨的画面,或者是极客们编写代码创造下一代通用人工智能的画面。
然后,一个人还会被要求掌握一系列技能的繁忙的维恩图所困扰。这些加起来就是一个团队经过多年可能已经掌握的领域。数据科学家是一个不太常用的术语,这个头衔在业内被严重滥用。挺像大数据或者说 AI 。
实际上,这个头衔通常被用作相关职位的总称,业内公司对此有不同的解释。我遇到过许多人私下向我坦白,“给我任何工作和角色,但请用‘数据’和‘科学家’这两个词给我造一个头衔吧!
Photo by frank mckenna on Unsplash
那么,进入数据科学并取得成功需要什么条件呢?
在这种困惑的推动下,人们想知道他们是否必须学*编程才能在数据科学领域有所作为。对于其他人来说,统计学或机器学*可能不是他们的菜。这些似乎是在分析领域取得任何进展的绊脚石。
这尤其让那些对数据感兴趣,但在不同行业的不相关岗位上工作了 10 年的人感到困惑。不得不重新学*编码或设计来重新开始职业生涯的想法难倒了他们。这些错误观念必须被有力地消除,以免它们继续粉碎在数据科学领域的职业梦想。
那么,在数据科学领域发展所需技能的现实期望是什么?此外,有抱负的人能否挑选感兴趣的技能来创造一个更喜欢的角色,一个建立在优势之上,同时又受欢迎的角色?
是的!
我们将首先展示数据科学中所需的一系列技能,比如自助餐菜单。然后,我们将通过从这些技能中挑选,构建提供分析价值的关键行业角色,就像定制一顿饭一样。是的,我们也将揭开成为这个行业独角兽的秘密。
A buffet menu of Data science Skills (Photo by Dan Gold on Unsplash)
数据科学的技能范围
数据科学有 5 项核心技能。再次强调这一点,不,一个人不需要全部学会。在下一节中,我们将介绍角色以及每个角色所需要的技能组合。首先,让我们讨论一个项目中需要的能力的完整列表,以便交付商业价值。
The spectrum of the key data science skills
1。数据引导技能(或)数据科学素养
对数字的热情是在数据科学领域取得成功的先决条件,也是一笔巨大的财富。一个人必须学会数据辩论技巧,才能对数据有感觉——计算平均值,拟合交叉表,并通过探索性分析提取基本见解。重要的是方法,任何工具,比如 Excel、R 或 SQL 都可以。
从数据技术的分析和结果中获得的洞察力就像一颗未经打磨的钻石。对于受过训练的人来说,它们很有价值,但在市场上却一文不值。掌握演示和基本设计技巧来润色这些真知灼见是非常宝贵的。这使得一个人的努力是有效和值得的。
数据处理和基本设计必须以所选领域的良好定位为基础。数据技术的好坏取决于它们对业务问题的适应程度。这些基础知识不能外包给业务分析师,所以任何认真研究数据科学的人都应该掌握领域基础知识。
简而言之,这种技能要求一个人与数据友好相处,并训练他们的眼睛识别数字中的模式。这是一项基本技能,在分析中没有商量的余地。
[## 如何在数据科学工作面试中炫耀自己对分析的热情?
在一个拥挤的市场中,一个人如何显示他们是特殊的,并适合于丰富的数据科学角色?这里…
towardsdatascience.com](/how-to-flaunt-your-passion-for-analytics-in-data-science-job-interviews-2cb432cc3d3d)
2。信息设计和展示
信息设计是以一种促进有效理解的方式呈现数据。重点是能够消费数据的视觉设计,而不仅仅是美化。可视化是让用户从分析中获得价值的最后一英里通信。
要成为这方面的专家,你必须掌握交互设计、用户体验和数据可视化领域的设计技巧。这需要用户映射、信息架构、数据表示、线框、高保真设计和视觉美学方面的专业知识。
一幅画最大的价值是当它迫使我们注意到我们从未期望看到的东西——约翰·图基
[## CSE442:数据可视化
这个世界充斥着越来越多的数据,我们必须保持相对恒定的感知和…
courses.cs.washington.edu](https://courses.cs.washington.edu/courses/cse442/17au/)
3。统计学和机器学*
在大多数数据科学课程中,这一领域受到了极大的关注。这里的重点是统计和建模,而脚本或编程是次要技能。虽然这是从数据中提取价值的一个关键领域,但这里的过度强调可能会转移对数据科学中其他 4 项关键技能的关注。
基于基本的数据争论技能,人们必须更深入地钻研统计学、概率,然后扩展到机器学*的技术和算法。深度学*和其他趋势人工智能技术也属于这一范畴,但这些需要更广泛的编码技能。
[## 机器学*|课程
关于这门课程:机器学*是让计算机在没有明确编程的情况下行动的科学。在…
www.coursera.org](https://www.coursera.org/learn/machine-learning)
4。深度编程
具有核心编程背景的人在数据科学中有很大的用处,并不是强制他们学*机器学*技能。数据应用程序需要后端编码来连接和处理数据,需要处理数据和构建数据科学应用程序的内部结构。
还强烈需要前端编码技能来向用户展示数据洞察力,这是橡胶真正遇到道路的地方。一个人必须掌握数据在各种 UI 和表单上的处理和表示。像 Python,Java,Javascript,R,SQL 这样的语言很流行。
[## 为数据科学学* Python 在线课程|数据营
DataCamp 的 Python 入门课程通过互动视频教你如何使用 Python 编程进行数据科学…
www.datacamp.com](https://www.datacamp.com/courses/intro-to-python-for-data-science)
5。领域专长
深入的领域技能有助于为分析带来意义、可解释性和可操作性。将领域专业知识与数据技能相结合的重要性怎么强调都不为过。在整个项目中缺乏对这一领域的足够重视是计划失败的最常见原因。
在这里,第一步是在选定的领域中获得深度并掌握业务流程。然后,我们必须关注数据素养和对分析技术的概念性理解。这带来了通过结合领域技能和数据印章来编织紧密结构的知识,以获得更高的价值。
“如果你不知道如何问正确的问题,你将一无所获。——爱德华·戴明"
数据科学中的角色
Roles in data science — making oneself a customized meal (Photo by Brooke Lark on Unsplash)
现在我们已经看到了技能的传播,这些技能结合起来形成了分析中的以下 4 个核心角色。这些角色可以在每个认真对待数据科学产品的商店中找到。正如这里所描述的,它们通常被划分为独立的角色,或者被混合成一些重叠的组合。
鉴于该行业的发展状况,职位名称相当不稳定。虽然我们已经看到‘数据科学家’是一个经常用来吸引人才的松散头衔,但像‘数据忍者’这样的角色可能意味着什么谁也说不准!在这里,我使用了更接*我们在过去 7 年中发展的头衔,在格拉米纳。
1。数据科学工程师(或)ML 工程师
Data Science Engineer or Specialist — Skill mix
将数据引导技能与深度编程(前端、后端或全栈)相结合的人属于这一类。这些角色在数据科学应用的应用编程、集成和云实施中至关重要。除了深厚的编码技能,这还需要精通数据处理、自动化洞察和端到端应用实施。一些组织将数据科学家视为这条职业道路上的高级角色。
2。数据分析师(或数据科学家
Data analyst — Skill mix
这些人用统计学和机器学*的技能来补充核心数据。虽然他们是设计分析方法和构建模型的权威,但他们利用自己的基本编程技能和领域定位来实现和评估模型的可解释性。
[## 是什么让机器学*项目中的数据科学家感到沮丧?
分析推销经常许诺月亮。在这个客户期望的幻想世界里,这 8 个神话挫败了…
towardsdatascience.com](/what-frustrates-data-scientists-in-machine-learning-projects-3398919a7c79)
3。信息设计师或可视化设计师
Information designer or Visualization — Skill mix
拥有核心用户界面和 UX 技能的设计师,同时也具备基础数据技能的强大基础,符合信息清单设计师的要求。从概念化到数据故事的创建,他们都扮演着重要的角色。让用户保持在宇宙的中心,他们迭代地驱动视觉智能层的设计。
[## 什么是高级数据可视化工程师?
最*在推特上有人问我一个问题,自从我成为一名…
medium.com](https://medium.com/@Elijah_Meeks/what-is-a-senior-data-visualization-engineer-eb032996297)
4。功能数据顾问(或)数据翻译
Functional data consultant — Skill mix
功能数据顾问将他们的领域知识与基本的数据技能相结合,充当业务用户和数据科学团队之间的桥梁。他们在团队中发挥着强大的影响力,让客户了解数据驱动的用例,同时保持分析解决方案的业务驱动性和可操作性。
转变为数据科学领域的独角兽
Making of a unicorn — the secret sauce (Photo by Caroline Attwood on Unsplash)
数据科学中的这 4 个关键角色展示了来自不同背景(编程、统计、设计和领域)的人如何将他们的先天技能转化为分析项目中有影响力的角色。正是强大的基础加上对数据和业务应用的热情,使得它们对组织来说是无价的。
如果这 4 个角色中的质量从业者在行业中非常受欢迎,并且供不应求,那么是什么造就了数据科学中的独角兽?什么样的神奇组合能让一个人变得无价?
回想一下我们的数据科学自助菜单,当人们可以从这里检查任何 3 种技能时,这种卓越的能力就诞生了,并且每种技能都有卓越的掌握水平。俗话说,事后看起来总是更容易。让我们回顾一些技能组合,看看这些人在哪些领域是不可替代的。
Making of a unicorn — the special mix of skills
- 数据引导+统计,ML +深度编程:一个专家,他负责设计完全打包的数据科学产品。
- 数据 bootstrap +统计学,ML +深度领域:构思并原型化深度、垂直化数据科学应用的专家。
- 数据引导+信息设计+深度编程:讲述故事的大师,提供令人愉快的数据科学应用。
- 数据引导+信息设计+深度领域:经营领域深度 UX 咨询的专家,设计企业数据科学应用。
- 数据引导+深度领域+深度编程:罕见的技术功能数据科学专家的属性。
正如您在上面看到的,只需再增加一项具有高水平专业知识的数据科学技能,就可以转变一个人的角色。这将一个人的能力、贡献和价值推出公园,从而产生更大的影响。
你可能会问,如果你能积累 4 种或更多这些技能呢?好吧,那你就当自己是数据科学的半神吧。或者,正如著名的万事达卡活动所说,你在数据科学行业的价值变得‘真正无价!’。
摘要
为了成功解决客户的问题,数据科学项目需要关键技能的组合。通常,公司对一个职位的工作描述可能会要求大部分或所有这些技能。考虑到候选人能力的巨大差异,这只是一个尽可能多的重叠的尝试。
一个人不能组成一个团队。它需要十一点。—贝尔·布莱恩特,传奇足球教练
实际上,项目团队是根据人们的核心技能水平动态地配备各种角色的。可能会有分析计划设法在 3 个人中实现这种混合,而其他人可能会在 5 个人中实现。通常,为了更好的协调和更有效的结果,组织更喜欢具有跨学科技能的小团队。
人们进入这个行业时,不是没有建议的基础数据技能的广度,或者在关键技能领域缺乏深度吗?是的,但他们的贡献水平与其他人相比相形见绌,这一切都归结为在数据科学领域生存与繁荣的问题。
候选人在上述两个或更多技能领域的能力越强,就越有可能做出有影响力的贡献。这因此转化为更高的感知价值,从而在面试中获得更好的谈判能力。为了更进一步,一个人需要有意识地选择另一种技能,并通过真正的深入投资于自己。
为了让你的钱得到最好的回报,把你的钱包投入到你的头脑中。—本杰明·富兰克林
如果你觉得这很有趣,你会喜欢我写的这些相关文章:
- 让你在数据科学生涯中不可或缺的 4 种超能力
- 数据科学家面试失败的 4 种方式
对数据科学充满热情?随时在LinkedIn上加我,订阅我的 简讯 。
CNN 和 spectrograms 做音频处理有什么问题?
原文:https://towardsdatascience.com/whats-wrong-with-spectrograms-and-cnns-for-audio-processing-311377d7ccd?source=collection_archive---------3-----------------------
(Photo credit: Jack Hamilton)
*年来,用神经网络生成和处理图像已经取得了很大的成果。这可以部分归功于深度 CNN 捕捉和转换图像中高级信息的巨大性能。一个显著的例子是 L. Gatys 等人提出的使用 CNN 的图像风格转移过程。艾尔。它可以以不同的风格呈现图像的语义内容[1]。
Y. Li 等人很好地解释了神经风格转移的过程。al: “这种方法使用 CNN 不同层的神经激活的 Gram 矩阵来表示图像的艺术风格。然后,它使用迭代优化方法,通过将神经激活与内容图像匹配以及将 Gram 矩阵与风格图像匹配,从白噪声中生成新图像。
更简单地说,这些结果可以被认为是通过根据来自源内容和不同抽象级别的样式图像的特征组合来生成图像而实现的。例如,这可以是保持内容图像的高级结构和轮廓,同时结合样式图像的颜色和低级纹理特征。
An example of the transfer of style features (“B”) onto a content image (“A”) by L. Gatys et. al.
风格转换在视觉处理领域的表现已经相当令人印象深刻,并且如果能够实现类似的结果,它有助于乐观地看待“更智能”的音频处理算法。因为频谱图是音频频谱随时间的二维表示,所以已经尝试用 CNN 来分析和处理它们。已经表明,可以将光谱图作为图像进行处理,并使用 CNN 进行神经类型转移[3],但是,到目前为止,结果并不像视觉图像那样令人信服[4]。
为了克服这一挑战,并在神经音频处理中产生更好的结果,我们可能需要考虑为什么 CNN 的风格转换在频谱图上表现不佳。本质上,这些技术应用机器视觉来做机器听觉。我认为这提出了一个基本问题,可能会阻碍人工智能辅助技术在音频处理方面的进步。虽然这个问题无疑可以从许多角度来探讨,但探索图像和光谱图之间的差异,以及由此产生的视觉和听觉之间的一些差异,可能是值得的。
声音是“透明的”
在视觉图像和光谱图之间的比较中提出的一个挑战是,视觉对象和声音事件不会以相同的方式累积。用一个视觉类比,可以说声音总是“透明的”[4],而大多数视觉对象是不透明的。
当在图像中遇到某种颜色的像素时,通常可以认为它属于单个对象。离散的声音事件不会在声谱图上分成不同的层次:相反,它们会叠加在一起成为一个独特的整体。这意味着声谱图中的特定观察频率不能被假定为属于单个声音,因为该频率的幅度可能是由任何数量的累积声音产生的,甚至是由声波之间的复杂相互作用(如相位抵消)产生的。这使得很难在声谱图表示中分离同时发生的声音。
Three examples of difficult scenarios of spectrogram analysis. (Left): Two similar tones cause uneven phase cancellations across frequencies. (Middle): Two simultaneous voices with similar pitch are difficult to tell apart. (Right): Noisy and complex auditory scenes make it particularly difficult to distinguish sound events.
光谱图的轴不具有相同的意义
用于图像的 CNN 使用二维过滤器,其在 x 和 y 维度上共享权重[4]。如前所述,这建立在这样的假设上,即无论图像的位置如何,其特征都具有相同的含义。要做到这一点,您还应该假设数据的 x 轴和 y 轴对内容的含义具有相同的含义。例如,无论在图像中是水平移动还是垂直移动,人脸仍然是人脸。
在频谱图中,两个维度代表了根本不同的单位,一个是频率强度,另一个是时间。水平移动声音事件会在时间上偏移其位置,并且可以认为声音事件无论何时发生都意味着相同的事情。然而,垂直移动声音可能会影响它的意思:例如,向上移动男性声音的频率可能会将它的意思从男人变成孩子或妖精。对声音事件进行频移也可以改变其空间范围[4]。因此,2D CNN 提供的空间不变性可能不适用于这种形式的数据。
声音的频谱特性是非局部的
在图像中,相似的相邻像素通常可以被认为属于同一个视觉对象,但是在声音中,频率通常在声谱图上是非局部分布的[4]。周期性声音通常由基频和多个谐波组成,这些谐波由声源决定的关系分隔开。正是这些谐波的混合决定了声音的音色。
在女性声音的例子中,某一时刻的基频可能是 200 赫兹,而第一谐波是 400 赫兹,接下来是 600 赫兹等等。这些频率不是局部分组的,而是根据一个共同的关系一起移动。这使得使用 2D 卷积在光谱图中寻找局部特征的任务变得更加复杂,因为即使它们按照相同的因子移动,它们也经常不均匀地间隔开。
An illustration of the non-local distribution of frequencies in a female voice
声音本质上是连续的
在评估视觉环境时,我们可以多次“扫描”我们的周围环境,以定位场景中的每个视觉对象。由于大多数物体都是不动的,光线会以一种可预测的方式从它们身上反射,人们可以在脑海中绘制出它们在物理场景中的位置。从感知的角度来看,视觉对象被假定继续存在于它们被观察的位置,即使你看向别处。
对于声音来说,情况并非如此。声音采用压力波的物理形式,从听者的角度来看,这种波只在某一时刻以其当前状态存在。一旦这个时刻过去了,波也就过去了,远离了观察者。这就是为什么称这些现象为声音事件而不是物体是有意义的。从物理的角度来看,这意味着听众一次只能感受到一瞬间的声音。当图像被认为包含大量的静态并行信息时,声音则是高度串行的。
更恰当的比较是音频和视频之间的比较。这两种媒体都可以被概念化为描绘随时间的运动,其中跨时间的依赖性对于内容的经验意义是必不可少的。由于视频是由图像集合(帧)构成的,它包含了更多的并行信息。
说明这一点的一个方法是在两种媒体中“”冻结一段时间。查看视频的单个帧(通常描绘大约 1/25 秒的曝光时间),通常仍然可以收集关于视频的上下文、动作和场景的大量含义:可以识别单个对象,有时可以评估动作和移动。然而,当“冻结”单个音频瞬间(例如大约 1/25 秒的相应集合)与频谱分析一起使用时,评估几乎不可能是全面的。可以收集关于信号的整体色调平衡和特征的一些背景,但是不能达到与视频相同的程度。
例如,不可能在时间范围之外识别单独的声音事件,以查看根据相同的时间模式发生了哪些频谱发展。唯一可以确定的是在特定时刻听到的声音的音调平衡。对此的解释可以追溯到之前讨论的声波的物理形式:声音不是作为可以平行观察的静态对象存在的,它们是作为气压序列到达的,并且关于这些压力的意义必须随着时间的推移而建立。
~1/25 second of video and audio respectively. (Left): A girl riding down a metal slide in a playground. (Right): A spectral representation of a traditional music performance from Senegal.
这些原因表明,作为传达意义的媒介,音频基本上是连续的,并且比视频更依赖于时间,这也是为什么在没有时间意识的情况下,输入图像处理网络的声音的视觉声谱图表示可能无法最佳工作的另一个原因。
一个模拟人类体验的案例
人工智能技术的重大突破是通过模拟人类系统实现的。虽然人工神经网络是与实际人类神经元的功能方式仅松散耦合的数学模型,但它们在解决复杂和模糊的现实世界问题方面的应用已经非常深远。在这些神经网络中对大脑的架构深度进行建模,为学*更有意义的数据表示提供了广泛的可能性。在图像识别和处理中,来自 CNN 中视觉系统的复杂和更具空间不变性的细胞的灵感也对我们的技术状态产生了巨大的改进。
正如 J. B .艾伦在中所言:“人类是如何处理和识别语音的?”,只要人类的感知能力超过机器,我们就能通过理解人类系统的原理而获益[5]。人类通常在感知任务方面非常熟练 人类理解和人工智能现状之间的反差在机器听觉领域变得尤为明显。考虑到在视觉处理中从人类系统中获得灵感的好处(以及视觉模型在声音中表现不佳的论点),我建议我们从具有神经网络的机器听觉中获得类似的过程。
这是一个更大的机器听觉项目的一部分。如果您错过了其他文章,请点击下面的链接了解最新情况:
背景:AI 在音频处理中的承诺
第一部分: 仿人机器听觉带 AI (1/3)
第二部分 : 仿人机器听觉带 AI (2/3)
第三部分 : 仿人机器听觉带 AI (3/3)
参考资料:
[1] L. A. Gatys,A. S. Ecker,M. Bethge,“使用卷积神经网络的图像风格转移”,2016 年 IEEE 计算机视觉和模式识别会议(CVPR),2016 年,第 2414–2423 页。
[2]李,王,刘,侯,“揭开神经类型迁移的神秘面纱”,2017 年 1 月.
[3] P .维尔马和 J. O .史密斯,“音频频谱图的神经风格转移”,2018 年 1 月。
[4] L .怀斯。2017.用卷积神经网络处理的音频频谱图表示。与 IJCNN 联合举办的首届深度学*与音乐国际研讨会论文集。美国安克雷奇。2017 年 5 月。1①。第 37-41 页。黄金分割指数:10.13140
[5] J. B. Allen,“人类如何处理和识别语音?,“IEEE Trans。语音音频过程。,第 2 卷,第 4 号,第 567-577 页,1994 年。
当人工智能遇到 3000 年前的中国手相术
原文:https://towardsdatascience.com/when-ai-meets-3000-year-old-chinese-palmistry-a767b7f3defb?source=collection_archive---------8-----------------------
Handbot —第一个使用深度学*(CNN)分析一个人的手掌来预测他/她的性格特征、健康、职业、关系等许多方面的看手相聊天机器人。
在一次 48 小时的黑客马拉松(HackNTU 2017 @ Taipei,Taiwan)中,我正在实*的初创公司的两位同事、我的一位大学朋友、我的哥哥和我合作开发了第一个手相聊天机器人,又名 Handbot 。我们渴望给有 3000 年历史的中国手相行业带来颠覆性的创新。
幸运的是,我们获得了 Hitcon 颁发的信息安全奖。
如果你是一名科学爱好者,并且难以相信算命,这里有一个更科学的解释,可能会改变你的想法
人类的手包含了丰富的信息,因为婴儿的手在怀孕早期就形成了,研究人员喜欢说它们相当于早期发育的“化石记录”,可以为未来的健康提供洞察力“看手相是真的?”,大西洋。
正如我们所知,很多人痴迷于算命,而看手相是每个人能够开始预测他们命运的最简单的方法之一。然而,许多人仍然有识别手掌线条的问题。于是,我们想出了这个点子:结合“看手相”、“深度学*”、“聊天机器人”。
alm 阅读:我们在黑客马拉松的前几个小时学*了基本的手相,包括关系、职业和健康的分析和预测。然后,我们给 2000 多张真实人类手掌的照片贴上标签,并分别给它们的关系、事业和健康打了 6000 多分。(你可以在这里找到我们的标签文件。)
D eep 学*:我们使用 Keras 中的 VGG-16(16 层网络)与 Tensorflow 后端作为我们的 CNN 模型。使用 GPU 加速,我们已经训练了 10 个 epoch,每个 epoch 1000 步。模型的均方误差为 1.3066。况且估值 MSE 是 1.1721。总的来说,这个结果足以预测一个新的手掌。(你可以在这里找到我们的代码。)
C hatbot 相对于 App 和 Web,更容易被移动用户获取,也更容易在社交媒体上传播。因此,我们使用聊天工具在 Facebook Messenger 上创建了一个人工智能聊天机器人。下面可以看到 Handbot 的用户流量。我们设计的平滑 UX 帮助我们实现了 80% 的用户留存率。
一天之内超过 80 个用户只拥有个人脸书分享。
超过 70 个活跃用户,大多数用户在手动机器人上手后都按过按钮。
你可以在 HITCON 的流媒体视频 这里 上看到我们的 Demo(从 1:48:00 开始)。
您还可以在这里 阅读关于本次黑客马拉松(包括我们)获胜者的新闻报道 。
聊天机器人应用程序隐藏的安全问题
我们在黑客马拉松上推出 Handbot 并在社交媒体上推广的第一个晚上,我们不仅收到了来自我们朋友的消息,还收到了一些 HackNTU 与会者和一些陌生人的消息。我们开始得到他们手掌的照片(有时是他们的脸),手掌后面的背景,此外,还有他们在脸书的个人信息。我们震惊于从这个聊天机器人中可以获得如此多的用户信息。我们可以知道他们是谁,他们在哪里,甚至他们的指纹!
人们在使用聊天机器人这样的应用程序时,对信息安全风险的意识越来越弱:我们太*惯于在 Messenger 上与朋友随意聊天,所以我们有一种思维定势,认为“在 Messenger 上进行的对话是安全和隐私的。”我们倾向于把聊天机器人当作朋友,我们没有过滤给它发短信。
在 2016 年至 2023 年的预测期内,全球聊天机器人市场预计将呈指数级增长。作为用户,我们应该更加意识到隐藏的安全问题。像脸书这样的大型社交媒体平台应该主动拦截不合适的应用。
何时以及如何使用加权最小二乘(WLS)模型
原文:https://towardsdatascience.com/when-and-how-to-use-weighted-least-squares-wls-models-a68808b1a89d?source=collection_archive---------0-----------------------
WLS,OLS 被忽视的表弟
在 Metis ,我教的第一批机器学*模型之一就是大部分人在高中学*的素简普通最小二乘(OLS) 模型。Excel 有办法去除 OLS 建模的魅力;学生们经常假设有一个散点图,一些神奇的数学方法可以画出一条最佳拟合线,然后在角落里有一个 r,我们希望它接* 1。事实是,OLS 远不止看上去那么简单,大约一周后,学生们哭着求饶(免责声明:没有学生实际上受到伤害!)当我们深入一个最初看起来如此简单的领域时。
理解了这个广泛适用的模型后,一个自然的反应是将 OLS 用于任何事情。这并不是一个糟糕的想法:尽管 OLS 需要四个——有人说是五个或六个——假设来满足原始或“经过处理”的数据,但是建模范例是相当健壮的,并且通常可以很好地执行,只要我们规范并使用适当的复杂性、对数变换、截取等。
然而,OLS 只是一个杰出的家谱:
加权最小二乘法(WLS)是安静平方的表亲,但她有一套独特的技巧,与某些数据集完全一致!
输入异方差
我的学生们最喜欢的另一个术语是异性恋,这也是“数据科学刽子手”或其他欢乐时光庆祝活动的常见特征。来自古希腊语 hetero,意为“不同”,而 skedasis,意为“分散”,也可以在英语化的“异方差”(注意附加的‘c’)形式中找到。简而言之,异方差数据具有随输入而变化的可变性。
Source: sarupub.org
事实是,许多数据显示了这种“异方差”。列举一些特征-反应关系的例子,我们通常可以直观地解释为什么:
- 随着年龄的增长,净值趋向分化
- 随着公司规模的扩大,收入趋向分化
- 或者,随着婴儿身高的增加,体重往往会出现差异
OLS 的一个主要假设是数据——以及残差——是本土的。啊哦!好消息是 OLS 可以处理一定程度的异方差。在网上搜索,你可能会发现不同的经验法则,比如“最高可变性不应超过最低可变性的四倍”。还有一个数量的测试来统计确定你问题的严重程度。
幸运的是,OLS 的假设不是非黑即白、二元对立的。有一个灰色区域,在那里模型仍然工作得相当好。
"但是如果我有可怕的——超过 4 倍的异方差——回归怎么办,大师?"
"那我们就去 WLS 吧,年轻的学徒!"
Yoda taught me everything I know about machine learning!!
WLS 来救援了!
让我们看看 WLS 是如何在我最喜欢的机器学*环境之一 scikit-learn 中实现的。
数据设置
让我们生成一些假数据:
import numpy as np
import pandas as pd
import seaborn as sns
import statsmodels.api as sm
%matplotlib inline# generate random data
np.random.seed(24)
x = np.random.uniform(-5,5,25)
ϵ = 2*np.random.randn(25)
y = 2*x+ϵ
# alternate error as a function of x
ϵ2 = ϵ*(x+5)
y2 = 2*x+ϵ2sns.regplot(x,y);
sns.regplot(x,y2);
Blue: Regular and Orange: Heteroskedastic
请注意,这些集合来自相同的地面真值函数,但是作为x
的函数而增加的方差导致橙色模型拟合不同于蓝色的线。在另一次随机抽取中,斜率可能比蓝色低,但总体上更不稳定。
# add a strong outlier for high x
x_high = np.append(x,5)
y_high = np.append(y2,160)# add a strong outlier for low x
x_low = np.append(x,-4)
y_low = np.append(y2,160)
上面的第一个附录模拟了一个常见的场景,在这个场景中,一个高方差的区域(预期的)会出现一个极端的观察结果。这将对 OLS 产生比 WLS 更大的影响,因为 WLS 将减少差额及其“罚金”的权重。
High outlier, on the top right
Low outlier, on the left
SKLearn 中的 WLS
为了计算样本重量,记住我们添加的误差作为(x+5)
的函数而变化;我们可以用这个来反过来衡量这些值。只要相对权重一致,就不需要绝对的基准。
# calculate weights for sets with low and high outlier
sample_weights_low = [1/(x+5) for x in x_low]
sample_weights_high = [1/(x+5) for x in x_high]
# reshape for compatibility
X_low = x_low.reshape(-1, 1)
X_high = x_high.reshape(-1, 1)---------
# import and fit an OLS model, check coefficients
from sklearn.linear_model import LinearRegressionmodel = LinearRegression()
model.fit(X_low, ymod)# fit WLS using sample_weights
WLS = LinearRegression()
WLS.fit(X_low, ymod, sample_weight=sample_weights_low)print(model.intercept_, model.coef_)
print('WLS')
print(WLS.intercept_, WLS.coef_)# run this yourself, don't trust every result you see online =)
请注意 WLS 的斜率是如何受到低异常值的更多影响的,这是应该的。低区域应该具有较低的可变性,因此异常值被放大到高于 OLS 值,从而将斜率推得更负。下面让我们看看 WLS 是如何抑制高异常值的。
model = LinearRegression()
model.fit(X_high, ymod)WLS.fit(X_high, ymod, sample_weight=sample_weights_high)print(model.intercept_, model.coef_)
print('WLS')
print(WLS.intercept_, WLS.coef_)
您将会注意到,在预期方差区域中的异常值是如何减少对参数估计的影响的。请记住,当异常值不完全相等时,请使用 WLS!
结论
你有它!实现 WLS 可能有些棘手;sklearn
没有独特的 WLS 模型,因为论证功能(也用于决策树和其他模型)暗中支持我们的需求。
这是对 WLS 的基本介绍,在这个领域还有很多可以探索的,包括有前途的 Huber-White“三明治”估计方法。
最后,道格拉斯·c·蒙哥马利、伊丽莎白·a·佩克和 g·杰弗里·维宁在《线性回归分析简介》一书中推荐了一种加权方法。例如:
- 建模时总是寻求使用经验或先验信息。
- 使用模型的残差—例如如果
var(εi)=σ2x_i*var(εi)=σ2x_i
—那么我们可能决定使用w_i=1/x_i
。 - 如果回应是
n
观察的平均值,类似于var(y_i)=var(ε_i)=σ2/n_i*var(y_i)=var(ε_i)=σ2/n_i
,那么我们可能会决定使用w_i=n_i
。 - 有时我们知道不同的观测值是由不同的仪器测量的,这些仪器具有一定的(已知的或估计的)准确性。在这种情况下,我们可以决定使用与测量误差方差成反比的权重。
与大多数数据科学工作一样,您的方法必须灵活适应您所拥有的数据类型。
快乐造型!一如既往,感谢您的阅读、联系和分享!
当贝叶斯、奥卡姆和香农一起定义机器学*时
原文:https://towardsdatascience.com/when-bayes-ockham-and-shannon-come-together-to-define-machine-learning-96422729a1ad?source=collection_archive---------1-----------------------
机器学*基础
一个美丽的想法,它将统计学、信息论和哲学的概念结合在一起,为机器学*奠定了基础。
感谢
感谢我在佐治亚理工学院的 CS7641 课程,在我的 MS 分析项目中,我发现了这个概念,并受到了写这个概念的启发。感谢马修·梅奥编辑并在 KDnuggets 重新发布这篇文章。
介绍
有点令人惊讶的是,在所有机器学*的热门词汇中,我们很少听到一个短语将统计学*、信息论和自然哲学的一些核心概念融合成一个三个词的组合。
此外,它不仅仅是一个为机器学*(ML)博士和理论家准备的晦涩而学究式的短语。对于任何有兴趣探索的人来说,它有一个精确和容易理解的含义,并且对于 ML 和数据科学的实践者来说,它有一个实际的回报。
我说的是 最小描述长度 。你可能会想这到底是什么…
让我们把这些层剥开,看看它有多有用…
贝叶斯和他的定理
谁是托马斯·贝叶斯?
我们从(不是按时间顺序)托马斯·贝叶斯牧师开始,顺便说一下,他从未发表过他关于如何进行统计推断的想法,但后来因同名定理而名垂千古。
那是 18 世纪下半叶,数学科学中还没有叫“概率论”的分支。它被简单地称为听起来相当奇怪的“ 机会主义”——以亚伯拉罕·德·莫伊弗尔的一本书命名。一篇名为《 解决机会主义 中的一个问题的论文》的文章,最初由贝叶斯撰写,但由他的朋友理查德·普莱斯编辑和修改,被宣读给皇家学会,并发表在 1763 年伦敦皇家学会的哲学会刊上。在这篇文章中,Bayes 以一种相当频繁的方式描述了一个关于联合概率的简单定理,它导致了逆概率的计算,即 Bayes 定理。
两个阵营的故事
从那以后,统计科学的两个敌对派别——贝叶斯主义者和频繁主义者——之间进行了多次斗争。但是为了本文的目的,让我们暂时忽略历史,把注意力集中在贝叶斯推理机制的简单解释上。关于这个话题的超级直观的介绍,请看布兰登·罗勒的伟大教程。我会专注于方程式。
这实质上是告诉你在看到数据/证据(可能性)后更新你的信念(先验概率,并将更新后的信念度赋予术语后验概率。你可以从一个信念开始,但是每一个数据点都会加强或削弱这个信念,并且你一直在更新你的假设。
让我们来谈谈“假设”
听起来简单直观?太好了。
不过,我在这一段的最后一句中耍了一个花招。你注意到了吗?我把这个词溜进了假设 。那不是正常的英语。那是正式的东西:-)
在统计推断的世界里,假设是一种信念。这是一种对过程的真实性质的信念(我们永远无法观察到),这是随机变量产生的背后(我们可以观察或测量,尽管不是没有噪音)。在统计学中,一般定义为概率分布。但在机器学*的背景下,可以想到任何一组规则(或逻辑或过程),我们相信,这些规则可以产生示例或训练数据,我们被赋予学*这一神秘过程的隐藏性质。
所以,让我们试着用不同的符号——属于数据科学的符号——来重铸贝叶斯定理。让我们用 D 来表示数据,用 h 来表示假设。这意味着在给定数据 的情况下,我们应用贝叶斯公式来尝试确定 数据来自什么假设。我们将定理改写为,
现在,一般来说,我们有一个大的(通常是无限的)假设空间,也就是说,有许多假设可供选择。贝叶斯推理的本质是我们要检查数据,以最大化最有可能产生观察数据的一个假设的概率。我们主要是想确定 argmax 中的P(h|D)即我们想知道对于哪个,观察到的 D 最有可能。为此,我们可以放心地把这个术语放在分母P(D)中,因为它不依赖于假设。这个方案被称为一个相当拗口的名字 【最大后验概率(MAP)】。
现在,我们运用下面的数学技巧,
- 事实上,最大化对对数的作用与对原始函数的作用相似,即取对数不会改变最大化问题。
- 乘积的对数是各个对数的和
- 一个数量的最大化等价于负数量的最小化
好奇者和好奇者……那些负对数为 2 的术语看起来很熟悉……来自信息论!**
克劳德·香农进入。发明信息时代的天才。****
香农和信息论
将需要多卷来描述克劳德·香农的天才和奇特人生,他几乎是单枪匹马奠定了信息论的基础,引领我们进入了现代高速通信和信息交换的时代。
这是一本关于他的生活和工作的好书,
***** [## 游戏中的思维:克劳德·香农如何发明信息时代
一种思想在发挥作用:克劳德香农如何发明了信息时代。下载…
www.amazon.com](https://www.amazon.com/dp/B01M5IJN1P/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)
香农的麻省理工学院硕士论文电气工程被称为 20 世纪最重要的硕士论文:在这篇论文中,22 岁的香农展示了如何使用继电器和开关的电子电路实现 19 世纪数学家乔治·布尔的逻辑代数。数字计算机设计的最基本特征——将“真”和“假”以及“0”和“1”表示为打开或关闭的开关,以及使用电子逻辑门来做出决定和执行算术——可以追溯到香农论文中的见解。
但这还不是他最大的成就。
1941 年,香农去了贝尔实验室,在那里他研究战争问题,包括密码学。他还致力于信息和通信背后的原创理论。1948 年,这项工作出现在贝尔实验室研究期刊上发表的著名论文中。
熵和最小长度
香农通过一个类似于物理学中定义热力学熵的公式 定义了一个来源产生的信息量——例如,一条消息中的信息量。用最基本的术语来说,香农的信息熵是对一条信息进行编码所需的二进制位数。并且对于概率为 p 的消息或事件,该消息的最有效(即紧凑)编码将需要 - log2(p) 比特。
这正是出现在从贝叶斯定理导出的最大后验概率表达式中的那些术语的本质!
因此,我们可以说,在贝叶斯推理的世界里,最可能的假设依赖于两个引起长度感的术语——而不是最小长度。
但是在这些术语中,长度的概念是什么呢?
长度(h):奥卡姆剃刀
奥卡姆的威廉 ( 约1287–1347)是英国方济各会修士和神学家,也是一位有影响力的中世纪哲学家。他作为一个伟大的逻辑学家的声望主要来自于他的格言,被称为奥卡姆剃刀。术语剃刀指的是通过“剔除”不必要的假设或将两个相似的结论分开来区分两个假设。
归功于他的准确的话是: entia non sunt 被乘数 da praeter necessitem(实体不得被乘以超过必要性)。用统计学的术语来说,这意味着我们必须努力用最简单的假设来解释所有令人满意的数据。
类似的原则得到了其他杰出人士的响应。
伊萨克·牛顿爵士:“除了那些既真实又足以解释自然现象的原因之外,我们不会承认更多的原因。
伯特兰·罗素:“只要有可能,用已知实体的结构代替对未知实体的推断。
总是偏爱较短的假设。
需要举例说明什么是 一个假设的长度 是多少?
以下哪个决策树的长度小于长度? A 还是 B ?
即使没有一个假设的“长度”的精确定义,我确信你会认为左边(A)的树看起来更小或更短。当然,你是对的。因此,更短的假设是具有更少的自由参数,或者不太复杂的决策边界(对于分类问题),或者这些属性的某种组合,这可以代表其简洁性。
事实上,奥卡姆剃刀的数学形式主义最终形成了一种叫做“ 索洛莫洛夫的归纳推理理论 ”的东西,它被认为是通向人工一般智能(AGI)的基础垫脚石。
著名的麻省理工学院物理学家和人工智能研究人员 Max Tegmark 最*使用奥卡姆剃刀原理构建了被吹捧为“ ”的人工智能物理学家 ”,这是一个无监督的学*代理,以学*和理论操纵为中心,能够简约地预测未来的两个方面(从过去的观察结果)以及这些预测准确的领域。
那‘长度(D | h)’呢?
它是给定假设的数据长度。那是什么意思?
直观上,与假设的正确性或表示力有关。在给定一个假设的情况下,它决定了数据可以“推断”得多好。如果假设很好地生成了数据,并且我们可以无误差地测量数据,那么我们根本不需要数据。
想到牛顿运动定律。
它们最初出现在 原理 中时,背后并没有任何严谨的数学证明。它们不是定理。它们很像假设,基于对自然物体运动的观察。但是他们很好的描述了数据。因此,它们变成了物理定律。
这就是为什么你不需要保存和记忆,所有可能的加速度,作为物体所受力的函数。你只要相信紧致假设 aka 定律 F=ma 并且相信你需要的所有数字,都可以在必要的时候从中计算出来。这使得 长度【D | h】确实很小。
但是如果数据偏离紧凑假设很多,那么你需要有一个关于这些偏离是什么的很长的描述,对它们可能的解释,等等。
因此, Length(D|h) 简洁地捕捉到了“数据与给定假设的吻合程度”这一概念。
本质上,这是错误分类或错误率的概念。对于一个完美的假设,它很短,在极限情况下可能为零。不完全符合数据的假设往往很长。
而且,这是一种权衡。
如果你用奥卡姆剃刀剃掉你的假设,你可能会剩下一个简单的模型,一个不能适合所有数据的模型。因此,你必须提供更多的数据来增强信心。另一方面,如果您创建一个复杂(长)的假设,您可能能够很好地拟合您的训练数据,但这实际上可能不是正确的假设,因为它违反了具有小熵假设的 MAP 原则。
听起来像是偏差-方差权衡?是的,还有那个:-)
Source: https://www.reddit.com/r/mlclass/comments/mmlfu/a_nice_alternative_explanation_of_bias_and/
把所有的放在一起
因此,贝叶斯推断告诉我们,最佳假设是使两项之和最小的假设:假设长度和错误率。
在这一句意义深远的话中,它几乎囊括了所有(受监督的)机器学*。
想想它的后果,
- 一个线性模型的模型复杂度——选择什么次数的多项式,如何减少残差平方和
- 一个神经网络架构的选择——如何不过度拟合训练数据,达到良好的验证精度,同时减少分类误差。
- 支持向量机正则化和核选择——软硬余量之间的平衡,即在准确性和决策边界非线性之间进行权衡。
我们真正的结论是什么?
从对最小描述长度(MDL)原则的分析中,我们可以得出什么结论?
这是否一劳永逸地证明了短假设是最好的?
号码
MDL 显示的是,如果假设的表示被选择为使得假设的大小为 log2 P( h ),并且如果异常(错误)的表示被选择为使得编码长度为 D,给定为 h, 等于-log2p(D|
然而,为了表明我们有这样的表示,我们必须知道所有的先验概率 P( h ),以及 P(D|h)。没有理由相信 MDL 假设相对于假设和错误/误分类的任意编码应该是优选的。
对于实际的机器学*来说,对于人类设计者来说,指定一个表示来获取关于假设的相对概率的知识可能比完全指定每个假设的概率更容易。
这就是知识表示和领域专长的问题变得至关重要的地方。它缩短了(通常)无限大的假设空间,并将我们引向一组极有可能的假设,我们可以对这些假设进行最佳编码,并努力从中找到一组映射假设。
…最佳假设是最小化两项之和的假设:假设的长度和错误率。
总结和反思
这是一个奇妙的事实,对概率论的一个基本恒等式进行这样一组简单的数学操作,就可以对监督机器学*的基本限制和目标进行如此深刻和简洁的描述。对于这些问题的简明处理,读者可以参考这篇博士论文,名为“为什么机器学*有效”,来自卡耐基梅隆大学。同样值得思考的是,所有这些如何与没有免费的午餐定理联系在一起。
如果你对这方面的深入阅读感兴趣
- "没有免费的午餐和最小描述长度"
- "没有免费的午餐对抗监督学*中的奥卡姆剃刀"
- 没有免费的午餐和问题描述长度*****
如果您有任何问题或想法要分享,请通过tirthajyoti【AT】Gmail . com联系作者。此外,您可以查看作者的 GitHub 资源库 中其他有趣的 Python、R 或 MATLAB 代码片段和机器学*资源。如果你像我一样,对机器学*/数据科学充满热情,请随时在 LinkedIn 上添加我或在 Twitter 上关注我。
**** [## Tirthajyoti Sarkar -高级首席工程师-低压设计工程-半导体上|…
查看 Tirthajyoti Sarkar 在世界上最大的职业社区 LinkedIn 上的个人资料。Tirthajyoti 有 8 份工作…
www.linkedin.com](https://www.linkedin.com/in/tirthajyoti-sarkar-2127aa7/)****
当计算机视觉遇到印度教的神!!
原文:https://towardsdatascience.com/when-computer-vision-meets-hindu-gods-927b5fa22063?source=collection_archive---------4-----------------------
正如有史以来排名第九的畅销小说作家 J. K .罗琳所说,“我们不需要魔法来改变我们的世界,我们已经拥有了我们内心需要的所有力量。我们有能力让把想象得更好。”。这些特别的台词把我带到了一个制作一个我从未想过的项目的旅程,一个我从未想象过的项目。就像所有其他人一样,我也开始寻找每个角落的想法,从我不久前发表的名为“用 TensorFlow 检测模型进行实时物体检测”的项目开始,但我无法拿出一些非凡的东西。
一天,当我在浏览我的脸书账户时,奥地利理论物理学家埃尔温·薛定谔的一句话引起了我的注意,他因在量子力学方面的贡献而闻名,这句话是“任务是……不要去看别人还没看过的东西;而是去思考没有人思考过的东西,思考每个人都看到的东西。,它最终帮助我确定了我的旅程的方向,直到现在我都没有方向。
嗯,我知道宇宙以神秘的方式运作的一个事实,所以所有这些引用和事件使我能够进入我的下一个项目,即“使用计算机视觉对印度教神进行面部识别”,因为我练*计算机视觉有一段时间了,所以我有意挑战自己,以这样一种方式建立一个面部识别系统,即使在计算有限的平台上,它也应该及时地执行识别任务,并具有可观的准确性。
在我寻求为印度教神制作一个面部识别系统的过程中,是时候我应该做出选择了(在 3300 万或 33000 万印度教神中)我应该选择哪一个,来建立一个可以做两件事的系统。
首先是认识印度教的神,其次是在需要的时候容易发现神。因此,从简单的观点来看,我选择湿婆神、甘尼萨神、哈奴曼神,最后但同样重要的是奎师那神。
所以,在向你们解释了灵感、动机、我的项目是什么以及项目的预期结果之后,我知道我的读者朋友们,你们一定都进入了怀疑的模式,你们一定都有数百万个问题在脑海中,比如我是如何做到的,我是如何实现的,我是如何使这个项目或这个尝试成为可能的。
是时候打破不确定性,进入项目的执行部分了。从这一点开始,我将向你解释这个项目的每一个细节,并消除你头脑中所有的疑惑。所以,系好你的安全带,准备好迎接这一独特而永恒的旅程吧,我相信你以前从未经历过。
但是在进入执行部分之前,我需要分享一些我使用的硬件和软件信息,这些信息对项目的前景非常重要。
硬件:
- 由 Nvidia GeForce 410M GPU 组成的笔记本电脑。
- 一个 7 美元的网络摄像头。
- A 树莓 pi 3 Model B 带 5 寸 HDMI 液晶只是为了炫耀:),可以用手机或者自己的笔记本电脑抓拍脸部。
软件(仔细查看版本)
- 蟒蛇与 Python 版本 3.6.3 。
- OpenCV( 版本 3.4.0 )
操作系统 Windows 10,就是这样
现在,让我们来谈谈步骤,整个项目分为三个部分:
- 收集数据集简而言之,这一步允许我制作自己的定制数据集,在这一步中,我收集了我想要为之构建面部识别系统的印度教神灵的面部。我使用的算法是基于 Haar 特征的级联分类器,我收集不同印度教神的图像的方式如下所示。
Collecting images for dataset using a Webcam and a Raspberry pi
在我完成捕捉人脸的这一步后的结果可以在下面的图像中看到,虽然上面的图像是彩色的,但代码是以这样一种方式编写的,它将识别图像中的人脸,只提取人脸并将其存储在灰度模式中。
A look on my Hindu Gods Custom Dataset
2.为了让你知道,我收集了 4 个印度教神的 100 张脸。收集数据集后,下一个重要步骤是在我的自定义数据集上训练分类器,当我执行这一步骤时,我最终得到了一个名为 train.yml 的文件,其中包含了所有关于印度教神的面孔及其 id 的信息。
3.最后一步对我来说是关键时刻,它的结果表明我的面部识别和检测系统能够准确地检测到印度教的神,结果可以在下图中看到。
哒哒哒!!任务完成工作做得很好我的项目检测印度教神的脸与有限的计算资源的可用性看到一个预期的结束,上面的图像是不言自明的。但是等等,这不是我需要深入的全部(我喜欢这个词,因为我也是一名深度学*实践者)来让你理解关于我的项目或方法的一些关键点,所以请为这最后一部分努力。
让我们深入一点
首先,这个项目是为了检测印度教神的面孔,因此为了识别众多神中的四个印度教神,我将每个神与一个 id 相关联,例如,我将湿婆神作为 id 1,甘尼萨神作为 id 2,等等,你可以在文件名 face_dataset_v1.py 中找到代码,你可以在我的 GitHub 存储库中找到,不要担心我在参考部分提到了所有的链接。
如果你想制作自己的印度教神数据集,而不是我的 GitHub 库中已经有的数据集,如果你想对多个不同的脸进行面部识别,只需每次运行该程序,给出一个数字 id,如 1,2,3 等,并将其保存在一个名为 datasets 的文件夹中。
其次,当你完成了自己的定制数据集,然后只运行 training_v1.py 文件,这样它就可以从 datasets 文件夹中转换你的所有图像及其各自的 id,并将其保存到另一个文件夹名称 train,文件名为 train.yml。
嗯,我的项目的主角不是别人,正是haarcascade _ frontal face _ default . XML文件,它是预先构建的正面人脸训练模型,用于人脸检测,因此请确保它应该与其他文件存在于同一目录中,否则即使是创建数据集的第一步也不会起作用。
最后,在你成功地运行了上面提到的两个 Python 文件之后,只需运行 face_recognition_v1.py,就能看到神奇之处,或者我会说感受一下神奇之处,有时我听起来确实很有诗意。下面是文章的最后一张相关图片,请欣赏!!
Final Setup of my Face recognition System ,look look it detected Lord Shiva perfectly 😃
参考资料:
- 这个项目代码的 GitHub 库链接可以在这里找到。
- 为了了解更多关于面部识别系统的信息,您可以查看这里。
- 为了了解更多关于计算机视觉的知识,你可以查看这里。
- 最后但同样重要的是,你可以在这里查看 YouTube 视频。
感谢您的关注
你用你的时间来阅读我的作品对我来说意味着整个世界。我完全是这个意思。
如果你喜欢这个故事,疯狂鼓掌吧👏 ) 按钮!这将有助于其他人找到我的工作。
还有,想的话就跟我上 中 !我很乐意。
当传统智慧失败时:重新审视自动驾驶汽车的数据增强
原文:https://towardsdatascience.com/when-conventional-wisdom-fails-revisiting-data-augmentation-for-self-driving-cars-4831998c5509?source=collection_archive---------0-----------------------
DeepScale 一直在寻找提高我们的对象检测模型性能的方法。在这篇文章中,我将讨论我们为此启动的一个项目,以及我们在这个过程中的非直觉发现。
增强实验和不直观的结果
在我开始在 DeepScale 实*时,我的任务是实现一个新的数据增强器,以改善我们的对象检测工作。其中一个突出的是一个简单的技术,叫做剪切正则化。简而言之,剪切将输入图像中随机定位的正方形涂黑。
Cutout applied to images from the CIFAR 10 dataset.
原始论文表明,剪切可以显著提高视觉应用的精度。正因为如此,当我将它应用于我们的数据时,我很惊讶我们的检测 mmAP 下降了。我在我们的数据管道中搜索这个问题,发现了更令人惊讶的事情:我们已经在使用的所有增强器都极大地损害了性能。
在这个探索的开始,我们使用翻转、裁剪和权重衰减正则化,这是对象检测任务的标准方案。通过一项消融研究,我发现这些都损害了我们内部数据集的检测性能。相对于网络的初始性能,移除默认增强器后,mmAP*提升了 13%。
*mmAP 是 COCO 对象检测挑战 的默认评估指标。它代表“平均平均精度”AP 表示单个类的所有例子的边界框检测的平均精度。对所有类别的 AP 求平均值得到 mAP,对交集/并集阈值范围(从 0.5 到 0.95)的 mAP 求平均值得到 mmAP。
Generally, we would expect adding weight decay, flip and crop to improve performance by a few points each, as shown in the dashed bars. In our case, however, these augmentors hurt mmAP by a relative 8.4%, 0.1% and 4.5%, respectively. Removing all augmentors lead to a total performance boost of 13%.
那么,为什么这些标准增强器会损害我们的表现呢?为了解释我们不直观的结果,我们不得不从基本原理出发,重新审视图像增强的概念。
我们为什么使用数据增强
(本节介绍数据扩充背后的直觉。如果你已经熟悉增强,请随意跳到“为什么自动驾驶汽车数据不同。”)
过拟合是深度神经网络的常见问题。神经网络极其灵活;然而,考虑到公共数据集的大小,它们经常被过度参数化。这导致模型学*数据集中的“噪声”而不是“信号”换句话说,他们可以记住数据集的非预期属性,而不是学*关于世界的有意义的一般信息。因此,当给定新的真实世界数据时,过度拟合的网络无法产生有用的结果。
为了解决过度拟合的问题,我们经常“增加”我们的训练数据。扩充视觉数据的常用方法包括水平随机翻转图像(翻转)、改变图像色调(色调抖动)或裁剪随机部分(裁剪)。
A picture of a giraffe (top left) shown with several common image augmentors: flip (top right), hue jitter (bottom left) and crop (bottom right). Despite these transformations, it is clear that each image is of a giraffe.
像翻转、色调抖动和裁剪这样的增强器有助于克服过度拟合,因为它们提高了网络的泛化能力。如果你训练一个网络来识别面向右的长颈鹿和面向左的长颈鹿的翻转图像上的,该网络将学*长颈鹿是长颈鹿,不管方向如何。这也迫使网络学*更有意义和更普遍的关于什么使某物成为长颈鹿的信息——例如,棕色斑点皮毛的存在。
像 COCO 对象检测挑战赛这样的公共数据集表明了泛化的必要性。因为这些数据集包含从许多来源聚合的图像,这些图像是在各种条件下从不同相机拍摄的,所以网络需要概括许多因素才能表现良好。网络需要应对的一些变量包括:光照、比例、相机内在因素(如焦距、主点偏移和轴倾斜)和相机外在因素(如位置、角度和旋转)。通过使用许多数据增强器,我们可以训练网络来概括所有这些变量,就像我们在前面的例子中能够概括长颈鹿的方向一样。
These examples from the COCO dataset were taken with different cameras, from different angles, scales and poses. It is necessary to learn invariance to these properties to perform well on COCO object detection.
为什么自动驾驶汽车数据不同
与 COCO 和其他公共数据集的数据不同,自动驾驶汽车收集的数据令人难以置信地一致。汽车通常相对于其他车辆和道路物体具有一致的姿态。此外,所有图像都来自相同的摄像机,安装在相同的位置和角度。这意味着同一个系统收集的所有数据都具有一致的相机属性,就像上面提到的 extrinsics 和 intrinsics 一样。我们可以使用将用于生产的相同传感器系统来收集训练数据,因此自动驾驶汽车中的神经网络不必担心概括这些属性。正因为如此,过度适应系统的特定相机属性实际上是有益的。
These examples from a single car in the Berkeley Deep Drive dataset were all taken from the same camera, at the same angle and pose. They also have consistent artifacts, such as the windshield reflection and the object in the bottom right of each frame.
自动驾驶汽车数据可能如此一致,以至于 flip 和 crop 等标准数据增强器对性能的影响大于帮助。直觉很简单:翻转训练图像没有意义,因为摄像头将始终处于同一角度,汽车将始终位于道路的右侧(假设美国驾驶法律)。汽车几乎永远不会在道路的左侧,摄像头也永远不会翻转角度,所以对翻转数据的训练迫使网络过度概括它永远不会看到的情况。类似地,裁剪具有移动和缩放原始图像的效果。由于汽车的摄像头总是在相同的位置,具有相同的视野,这种移动和缩放迫使泛化。过度泛化会损害性能,因为网络会浪费其预测能力来学*不相关的场景。
A front-view of the sensor array on DeepScale’s data collection car. All sensors are permanently mounted, so all data will have consistent extrinsics — position, angle and rotation. Because we use the same sensors at test-time, all data also has consistent intrinsics — focal length, principal point offset and axis skew. By harnessing the properties of a specific car’s sensors, we can boost vision performance when deploying the same sensor system.
更多改进
自动驾驶汽车数据唯一一致的认识解释了我们令人惊讶的增强结果。接下来,我想看看我们是否可以利用这种一致性来进一步提高性能。在引入任何新的增强器之前,我检查了我们的数据集,看看我们是否可以在数据级别进行任何改进。我们的训练集最初包括来自两个广角相机和一个带变焦镜头的相机的图像。变焦镜头产生类似于裁剪放大的缩放和移动效果。在测试时,我们只使用广角摄像机,所以对变焦图像的训练迫使网络过度概括。我发现从我们的训练集中移除缩放图像给了我们 mmAP 另一个巨大的提升。这证实了我们的假设,即训练集和测试集之间的一致性对于性能非常重要。
After removing the original image augmentors, I trained and tested on a new, more consistent dataset. This improved mmAP by an additional 10.5% relative to our original scheme.
在此之后,我考虑了可以在不改变相机属性的情况下改变我们的训练数据的增强器。Cutout 是我在这个项目开始时实现的增强器,看起来是个不错的选择。与翻转和裁剪不同,剪切不会以显著影响相机属性的方式改变输入(即翻转、移动或缩放)。相反,剪切模拟障碍物。障碍物在现实世界的驾驶数据中很常见,障碍物的不变性有助于网络检测部分被遮挡的对象。
Obstructions are common in real-world driving data. In this image, two pedestrians block our view of the police car, while large bags block our view of the pedestrians.
色调抖动增强也可以在不影响相机属性的情况下帮助泛化。色调抖动只是将输入的色调随机移动一个量。这有助于网络对颜色进行归纳(即红色汽车和蓝色汽车应该被相同地检测到)。正如所料,抠图和色调抖动都提高了我们的新测试集的性能。
Adding cutout and hue jitter augmentation to the new dataset increased relative mmAP by 1% and 0.2%, respectively. This gives us a total 24.7% boost over our original data scheme (flip, crop and weight decay on the old dataset). Note that the y axis is scaled to better show the difference of small improvements.
警告
值得注意的是,这些增强技巧对包含不同相机类型、不同角度和比例的图像的数据集不起作用。为了演示这一点,我通过向原始测试集引入随机翻转和裁剪,创建了一个具有不同相机属性的测试集。正如预期的那样,我们新的专门的增强方案在更一般的数据集上比我们原来的标准增强器表现更差。
When applied to consistent self-driving car data, our specialized augmentation scheme (cutout and hue jitter) provides an 11.7% boost in mmAP over the standard augmentation scheme (flip, crop and weight decay); however, when applied to more varied data, our specialized scheme results in a drop of 24.3% vs the standard scheme.
确保你的测试数据覆盖了你的模型在现实世界中看到的例子的范围,这一点总是很重要的。使用专门的数据扩充使得这种健全性检查更加重要。你很容易欺骗自己,以为自己提高了模型的性能,而实际上你只是过度适应了一个过于简单的数据集(例如,只使用清晰的白天图像驱动数据)。
如果您的数据集真的健壮且一致,这些技巧可以成为提高性能的强大工具包。如图所示,通过使我们的网络能够学*我们车辆的摄像机属性,我们能够显著提高我们的对象检测性能。这可以应用于在部署中使用的同一传感器系统上收集训练数据的任何领域。
外卖食品
Networks that perform well on satellite images (left) or cellular data (center) might require fundamentally different approaches than those built for common research datasets like ImageNet (right).
事后看来,这些增强变化似乎是显而易见的。现实是,我们被传统智慧蒙蔽了双眼。像 flip 和 crop 这样的增强器在研究问题上取得了如此广泛的成功,以至于我们从未想过质疑它们对我们具体问题的适用性。当我们从基本原则重新审视增强的概念时,很明显我们可以做得更好。机器学*领域有许多类似的“通用最佳实践”,例如如何设置学*速率,使用哪个优化器,以及如何初始化模型。对于 ML 从业者来说,不断地重新审视我们关于如何训练模型的假设是很重要的,尤其是在为特定的应用构建模型的时候。与 ImageNet 相比,使用卫星制图数据或蜂窝成像时,视觉问题有什么变化?我们认为,像这样的问题在学术界探索不足。通过用新的眼光看待它们,我们有可能极大地改善机器学*的工业应用。
马特·库珀(Matt Cooper)是 DeepScale 的深度学*软件工程师(也是前实*生)。更多来自 DeepScale 的信息,请查看我们的媒体页面。
当交叉验证失败时
原文:https://towardsdatascience.com/when-cross-validation-fails-9bd5a57f07b5?source=collection_archive---------2-----------------------
验证可能是数据科学中最重要的五种技术之一。我使用交叉验证作为我的默认验证方案,但是这个星期我遇到了一个关于我的验证性能的问题。我花了一些时间来解决这个问题,所以我想和你分享一下。
机器学*过程
在 RapidMiner 的工作中,我遇到了一个挑战,那就是预测一个包含 9 个相关序列的时间序列。我通常的方法是窗口回归。我们可以将这种方法分为两部分:特征提取和学*。
Schema of windowed feature extraction. Standard features are extracted on four different window sizes. The resulting features are put into one row for the learning process.
在特征提取中,我对所有时间序列加窗并提取它们的特征。在这个具体的例子中,我的摘录相当简单,即最小,最大,标准偏差,平均值,斜率和线性回归轴。我在 4 个不同的窗口大小上做这个特征提取。
Stacking Implementation in RapidMiner.
第二步是建模。当我从一个广义的线性模型开始时,我很快转向了更复杂的东西。结果是一个堆叠模型。基础学*者是在每个不同窗口大小上学*的 4 个广义线性模型。此外,我还学*了所有窗口大小和原始数据点本身的神经网络。这些模型的预测和原始特征作为堆叠学*器被输入到梯度提升树中。
验证问题
在 5 重交叉验证中进行建模。最终测试误差为 2%。这一结果对客户来说非常有希望,他要求提供 6 月份的评分数据集,以便进行自己的性能计算和交叉检查。
我把六月作为交叉检查验证性能的坚持期。令我惊讶的是,我看到坚持的表现是 4%。虽然小的偏差并不少见,但验证和保持性能之间的巨大差异是不可容忍的——所以我开始了寻找根本原因的征服。
潜在问题 I——季节性和停滞
我的第一个想法是,我在选择坚持方面做得不好。这些数据包含了每年的季节性,仅仅把六月作为一个持续时间可能是天真的。可能我的模型在预测冬季月份方面很好,但在预测夏季月份方面很差。结果将是更差的拒绝性能,因为这只是在夏季计算的。
为了验证这一点,我查看了每月的交叉验证性能。有季节性,但约为 0.2%。所以这很难成为误差增加 2 倍的原因。
一个类似的想法是,我可能只是运气不好,六月很难预测。因为我的方法使用了一个窗口,所以采用一个随机保持集是很重要的。我决定再坚持一个月——2016 年 1 月。结果几乎一样。维持误差仍然是 2 倍测试误差。
潜在问题二——过度拟合
交叉验证通常是衡量精确性能的一个非常好的方法。虽然它不能防止您的模型过度拟合,但它仍然度量了真实的性能估计。如果你的模型过度拟合你,它将导致更差的性能指标。
一个已知的问题是,交叉验证只验证她体内的东西。超参数优化通常在验证之外完成。因此,您无法验证这种优化引入的过度拟合。如果您仔细观察,您还会发现,手动特征生成和模型选择也是模型的超参数,并且具有相同的问题-它们没有通过交叉验证进行检查。为了不被这个欺骗,你需要一个额外的坚持集来比较分析结束时的性能
我应用了一个标准技术来克服过度拟合。我降低了模型的复杂性。对我来说,这相当简单:我已经从我的系综中移除了神经网络。这导致了更差的交叉验证性能。但是抵抗性能仍然差了 2 倍。我仍然面临着同样的问题。
解决方案相关行
现在,对我来说,这是回到最基本的。思考假设,找出可能出错的地方。
交叉验证的一个假设是所有的行都是相互独立的。如果你做客户分析,这是相当微不足道的,但如果你做窗口时间序列分析,就不是了。
事实上,我的特征提取方法产生了几乎相同的行。例如,我计算每个窗口的最小值和最大值。很可能下一个窗口以及表中的下一行将具有相同的最小值和最大值。如果您将此输入到交叉验证中,很可能对于大多数训练行来说,在测试部分都有一个几乎相同的行。这让我意识到我是在衡量培训,而不是测试表现。
为了减少这种影响,我每月都计算自己的 batchid。我的 batchId 被定义为(自 1970 年以来的月数)%5,因此我的数据点在相应的月份中只有很小的重叠。
我的坚持性能现在比验证稍微好一点。任务完成。
当一个人连人工智能都不够好的时候
原文:https://towardsdatascience.com/when-even-a-human-is-not-good-enough-as-artificial-intelligence-c39c9fda4644?source=collection_archive---------5-----------------------
Photo by Gertrūda Valasevičiūtė on Unsplash
2012 年,我为我的机器学*和应用研究收集并汇编了一个数据集。在研究过程中,我自己伪造了一个人工智能。在后期采访中,我听到了许多与会者最奇怪的陈述:“人工智能犯了很多错误。”。这篇帖子是关于人们对人工智能性能的偏见,以及我们对人工智能系统的期望有多现实。
人类智能 vs 人工智能
我喜欢用数字来衡量和解释事物。我做的最常见和快速的测量是分数和子分数。如果我需要比较两个东西,我会列出变量并给它们权重。有了那个列表,我给变量打分,乘以权重,求和。这给了我一个单一的数字。对于许多事情,我发现它很容易使用。挑选买哪台电视,接下来做哪项工作,或者测试一种方法是否比其他方法更好。
虽然有些东西很容易衡量,但智力不在其中。智力是一个非常抽象和复杂的东西来衡量。甚至智力的定义也很复杂。什么是智力,如何衡量智力,这些都不是我想要回答的问题。我对这篇文章的好奇心是,我们人类如何看待人工智能,以及我们对它的期望是什么。在我看来,当人们评判 AI 的能力时,我们是苛刻的。我们希望人工智能是完美的。我们没有显示出我们为人工智能提供的与人为错误成比例的灵活性。我们希望人工智能“像人一样”。也许是因为最*“像大脑一样工作”的广告(谷歌“像大脑一样工作”)。
不管原因是什么,这是一种常见的模式。我们期待人工智能能与人类智能相媲美。
电子奥兹中的人工智能巫师
我进行了一系列数据收集实验,这让我在 2012 年写下了这篇文章。我正在使用机器学*进行一项关于草图识别(即对手写符号和图纸进行分类)的研究。如果你对草图识别器感兴趣或者想有一个更具体的想法,这里有一个很棒的你可以试试:https://quickdraw.withgoogle.com/。我想实现的事情之一是将一个实时策略视频游戏的交互模型从鼠标/键盘转换成草图。有了草图界面,人们可以通过草图而不是鼠标点击和按键来玩游戏。想象一下,当你想建造一座建筑时,你可以在地图上你想建造的地方画一个简单的房子,而不是从菜单中选择它,然后用鼠标点击把它放到地图上。
A Snapshot from Experiment Records Where of a User Plays the Strategy Game via Sketching
计划是用机器学*开发一个草图识别器。为了实现它,第一步是从多人那里收集许多手绘草图,这样我就可以用它们来训练一个模型。我不想让人们画出他们在屏幕上看到的东西,而是想让他们置身于真实的环境中。他们用像人工智能这样的草图玩游戏的环境已经准备好了。我认为有了这个设置,人们会比在一个放松的、没有时间限制的、没有压力的“临摹”环境中画得更“真实”。为了在那个环境中收集数据,我创建了一个“绿野仙踪”环境。
这个想法很简单。你准备一个有两个房间/空间的场景。在一个空间中,您放置与会者将使用的计算机。在第二个房间里,你放了另一台你要用的电脑。这个想法是把这两台电脑连接起来,这样你就可以看到与会者在做什么,并在你自己的电脑上采取相应的行动。对我来说,这是为了素描识别。因此,如果与会者画了一所房子,我可以从我的电脑上看到它,并发出命令来画房子。我们的目标是替换一个没有到位的人工智能系统,这样看起来就像有一个真实的人工智能,实际上是一个在不同房间的人。
“Mechanical Turk” was a chess playing machine from late 18th century that seems autonomous, but in reality is operated by a human. In that sense, it was a Wizard of Oz setting. https://en.wikipedia.org/wiki/The_Turk .
当我的“奥兹”准备好时,我邀请人们加入我的实验(这不是一件容易的事,要求人们免费放弃他们的时间)。正如所解释的,有一个房间有电脑和一个绘图屏幕,参加者坐在那里,另一个房间,参加者看不到我在哪里模仿人工智能。我告诉与会者,他们将使用草图作为唯一的输入媒介来玩游戏,有一个人工智能将识别他们的草图并相应地执行操作。
实验结束后,我让他们填写了一份问卷,然后进行了非正式的交谈,因为有些人对这种玩游戏的方式感兴趣。这是我感到困惑的地方。许多人告诉我并在问卷上写下了同样的事情:
“识别我的草图的人工智能犯了错误”
你可以明白我为什么困惑了。我是识别草图的“人工智能”,他们告诉我人工智能表现不佳!这怎么可能?我在识别这些符号时犯了错误吗?可能是这样,但是符号很简单,所以我不认为我犯了很多错误。
这些轶事证据从未进入研究结果,但让我困惑了很长一段时间。如果我,作为一个人类,辜负了人们作为识别者的期望,我们怎么能开发出一个让用户满意的人工智能呢?如果我公开我是人工智能会有不同吗?他们是否预先判断出人工智能总是会出错?我们对人工智能有什么期望?
你对机器的期望是什么?
对于大多数识别器来说,90%的准确率是一个里程碑。感觉是个很棒的数字。“你的模型有 90%的准确率”。我希望自己在大多数情况下,我会宣布问题已经解决,并将其提交给利益相关者。我也希望他们对结果感到满意。想象一下你在一次考试中得了 90 分。
然而有一件事。实际上,它在现实生活中可能没有那么好。想象一下,你正在画一个圆,10 次中有 9 次,人工智能正确地识别出它,并采取相应的行动。但是 10 次中有 1 次,它将 1 识别为另一个东西(例如三角形)并且仍然采取行动。在那里,你试图停止人工智能采取的行动,并重做。如果你正在使用语音助手,你可能已经说过:“不!,停!,不要放那首歌!这跟我问的还差得远呢!中止!中止!”。是不是觉得语音识别性能不够好?微软在 2017 年的博客中公布了 5.1%的错误率(准确率 95.9%)(https://www . Microsoft . com/en-us/research/blog/Microsoft-researchers-achieve-new-conversatile-speech-recognition-milestone/)。他们还测量了人类的错误率,同样的指标为 5.1%。所以即使你认为你的语音助手的表现很差,但它实际上已经非常接*人类的表现了。
当你开始一个人工智能项目时,你需要正确地确定利益相关者的期望。如果你管理期望,双方都会更快乐。例如,如果你的利益相关者头脑中有一个完美的图像识别器,那么你一开始就已经失败了。即使你开发了一个很好的识别器,也不会像她想的那样完美。因此,管理预期,并考虑现实生活中的准确性。如果每隔一段时间就对语音助手喊一声“中止”是不可以接受的,也许你在购买或开始开发一个之前应该三思。
当 Fitbit 说“你的数据属于你!”…
原文:https://towardsdatascience.com/when-fitbit-says-your-data-belongs-to-you-d477270bc8d2?source=collection_archive---------9-----------------------
Ok, prove it!
…他们真正的意思是
“我们很不情愿地允许您有限地访问一小部分数据”
在我继续说下去之前,我想说我是 Fitbit 的粉丝。在过去的几年里,我有几个追踪器,我每天都使用我的充电 2 和咏叹调量表。我甚至很快就放弃了 Apple Watch,因为我更喜欢 Fitbit 更长的电池寿命和睡眠跟踪功能,并意识到我正在寻找一个活动监视器,而不是一个功能齐全的智能手表。
但是,我也是一个数据呆子,因此我不喜欢 Fitbit 的围墙花园策略。我理解他们的动机,但我也认为——即使考虑到他们自己的利益——他们被误导了。我坚信,他们在这个领域的制胜策略将是进一步开放他们的数据 API。
让我解释一下:
最初,Fitbit 只允许向他们的高级用户输出数据。这一限制于 2015 年取消:
从那以后,他们允许用户从他们的网站免费下载活动数据。
然而,至少可以说,他们所提供的非常有限。身体、食物、活动和睡眠测量的每日总量。没有当天数据,没有跟踪活动的数据,没有心率数据。没有付费选项来获得更精细的访问。
当我在 Twitter 上抱怨这件事时,他们的回应是:
对此我称之为扯淡!他们自己的应用程序似乎完全有能力为成千上万的日常用户快速可靠地加载这些数据。如果这真的与服务器负载有关,有多种方法可以处理,包括限制 API 的速率,只允许每个用户每天大量下载一次,等等。
现实是,他们不希望数据“在那里”。他们希望将用户限制在只能通过自己的工具查看和分析数据的体验中。
当然,聪明的书呆子已经找到了多种方法来解决这个问题,例如:
[## simonbromberg/googlefitbit
用于 fitbit 数据下载的 Google Sheets 脚本
github.com](https://github.com/simonbromberg/googlefitbit) [## corynes en/fitbitScraper
用于抓取 fitbit 数据的 fitbitScraper - R 包
github.com](https://github.com/corynissen/fitbitScraper)
…这就是 Fitbit 的问题所在。书呆子是早期采用者。他们可能会转向提供更好的数据访问的制造商,随着新的创新工具和更活跃的生态系统围绕这种开放战略出现,其他用户群也会很快效仿。
Fitbit 的战略优势并不在于硬件追踪器的制造——这些现在已经相当商品化了。事实上,他们一直在收购陷入困境的竞争对手,以维持他们在这个低利润、低准入门槛市场的地位。
Fitbit 的战略优势在于他们占主导地位的品牌知名度和市场份额。保持这一地位的方法是成为活动数据的“数据中心”。但是,只有当用户真正感觉到数据确实是他们的,并且通过围绕数据托管提供非凡的体验和增值,这才是可能的。
像软件领域的大多数传统供应商一样,我相信 Fitbit 很想摆脱“永久”业务(在他们的情况下是销售硬件),转向弹性更大、利润更高的订阅业务。成功的关键是数据,而不是硬件。但就像许多 SaaS 消费公司在他们之前发现的那样,他们必须意识到,信任的关键是用户对自己数据的完全、无障碍的访问。数据真正“属于你”的感觉。并不是说大多数人会访问或下载这些数据,但他们想知道他们可以——如果真到了那一步。在一个运行良好的生态系统中,他们会希望与其他服务共享数据,反过来让这些服务与 Fitbit 的数据存储共享数据,并将其存储在 Fitbit 的数据存储中。
Fitbit 需要将自己从一家销售“永久”硬件的硬件公司转变为一家向消费者出售“活动数据中心”(可能会存储来自其他“量化自我”追踪器的数据)订阅服务的数据公司,并将数据(他们已经保留了这种权利)汇总给医疗服务提供商、设备制造商和研究公司。
如果他们能够实现这种转变,Fitbit 的未来是光明的。否则,在一个越来越便宜、竞争越来越激烈的硬件市场保持利润将被证明是非常困难的。
初级 Python 黑客
原文:https://towardsdatascience.com/when-learning-a-new-programming-language-theres-always-a-sense-that-there-will-be-a-few-commands-c81a023e033e?source=collection_archive---------8-----------------------
当学*一门新的编程语言时,总有一种感觉,我们会不断重用一些命令、技巧和变通办法;通常称为 80/20 法则——20%的活动负责 80%的工作。Python 自然适合这种范式,Python 化意味着最小化,但具有更大的吞吐量。让我们看看其中的一些启发。
检查第三方库
您正在使用 Anaconda,或者更大胆一些,您已经通过 Python 在本地设置了一些虚拟环境。一个是专门用于自然语言处理的,另一个是用于机器学*的,甚至还有一个更深奥的——深度学*。在这三种环境中的一种,你不确定你是否已经安装了自然语言处理的 nltk 或 spacy 。要进行检查,您可以运行 Python repl,并键入
import spacy
好的,所以你知道,spacy 是不可用的,你必须通过 pip 或 conda 安装它。不需要转到 repl,更快的方法是直接在终端中输入这个命令,假设 python 包含在终端的路径中:
python -c “import spacy”
瞧!你得到同样的输出。如果包裹确实在那里,就不会打印投诉。
在代码外部保存用户凭据
总是需要连接到远程数据库或访问 REST API,其中需要用户名和密码。如果你是通过编程来实现的,你可以为它们创建单独的变量,将它们编码成字符串。
db_user_name = ‘me@example.com’db_password = ‘an_awS0mE1Pass.Word#’
这很糟糕,原因有几个。主要是如果你使用一些版本控制软件,比如 GIT,这意味着每个参与项目的人都可以看到这些凭证。解决这个问题的一个快速而肮脏的实现是将这些变量填充为空字符串,然后让用户键入他们的凭证。这可能会变得令人厌倦和笨拙。我提倡使用 python-dotenv ,它本质上是一个帮助通过访问这些凭证的包。env 文件(键值对)。如果你使用 GIT,简单地添加这个。env 文件到。gitignore 确保在保存你的工作时不会涉及到它。假设上述用户凭证保存在一个. env 文件中,在代码中调用它们的一个实现是:
import osfrom dotenv import load_dotenv, find_dotenvload_dotenv(find_dotenv())db_user = os.environ.get(‘db_user_name’)db_pw = os.environ.get(‘db_password’)
文档帮助
现在,你可以告诉我喜欢与 Python REPL 一起工作。更是如此,伊普森。后者是因为我可以使用 tab 键来自动完成命令。总是需要查找文档。上网用谷歌搜索是很常见的。有些人会把他们经常去的网站加入书签。甚至存在与语言或库无关的文档浏览器,提供了在一个地方离线查找文档的额外优势。具体来说,破折号和热心。虽然这在某些情况下很理想,但有时在 REPL 提取文档很方便;只是召唤帮助命令上的一个功能:
你会得到这个
命令行参数
诚然,这可能相当复杂,即使用例足够简单。我将提倡使用来自标准 Python 库的 argparse 。下面是一个简单的程序,它将通过命令行输入的两个数字相乘:
import argparseparser = argparse.ArgumentParser()
parser.add_argument(“--num_one”, default=1, help=”Enter Number 1", type=int)
parser.add_argument("--num_two”, default=1, help=”Enter Number 2", type=int)args = vars(parser.parse_args())product = args[‘num_one’] * args[‘num_two’]print(“The product is: {}”.format(product))
这就是你将如何运行它:-
关键字参数(**kwargs)
当调用一个函数时,传递参数是再熟悉不过的了。例如,在前面的例子中, add_argument 函数被传递了变量名的参数,在没有提供变量名的情况下默认值应该是什么,最后是要显示的帮助消息。关键字实参允许你传递这些参数,但是当写出你的实际函数时,没有必要在函数“header”中显式地拼写它们。演示:
def print_name(**kwargs): print(‘First name: ‘, kwargs.pop(‘first_name’))
print(‘Last name: ‘, kwargs.pop(‘last_name’))print_name(first_name=”Rush”, last_name=”Kirubi”)
我很想听听你的妙计。当一个人刚刚入门或者开始欣赏一门特定语言(在这里是 Python)的长处时,它们会非常有用。请随意评论或提出你自己的建议。
当机器学*遇到大数据
原文:https://towardsdatascience.com/when-machine-learning-meets-big-data-4923091ba140?source=collection_archive---------6-----------------------
首先让我们看看为什么现在周围的每个人都对机器学*感兴趣,我相信 Gartner 的 炒作新兴技术的周期情节 答案也是一样的。
它清楚地表明,机器学*现在正处于膨胀的期望的顶峰,我们都可以闻到这一点。无论我们在哪个领域,我们都看到个人、行业和学术界在谈论自动化,使用人工智能、机器学*和数据挖掘让机器变得更加智能和强大。通过查看机器学*的当前应用,我们可以自信地说它比气体更有实质(我记得人们说气体闻起来很香的日子)
但问题是——机器学*突然变成炒作了吗?
为了理解这一点,我们需要回顾一下机器学*的基础知识,下面是由 ExpertSystems 提供的机器学*的定义。
机器学*是人工智能(AI)的一种应用,它为系统提供了自动学*和根据经验改进的能力,而无需显式编程。机器学*专注于开发能够访问数据并利用数据为自己学*的计算机程序。
想象程序可以自己学*似乎很令人兴奋,但它们需要数据,大量可以用于学*的数据。
艰难的机器学*已经有 50 多年的历史,并且在大约 40 年前就已经开始使用,但是直到最* 20 年,世界才开始钦佩它。谷歌、IBM、微软和百度等大巨头已经开始将主要精力转移到机器学*和深度学*应用上。
那么,在过去的二十年里,是什么导致了这种变化呢?
在过去的二十年里,世界上出现了许多令人敬畏的东西,但推动机器学*和其他相关领域增长(阅读炒作)的只有数据。由于无数的新技术、设备(台式机、笔记本电脑、移动设备等)、社交网站和技术在世界范围内的渗透,人类产生的数据量以千兆字节计,这为数据库、数据挖掘、信息检索、机器学*、深度学*、人工智能等创造了机会。
从一开始到 2003 年,我们产生的数据量是 50 亿千兆字节。如果你把数据以磁盘的形式堆积起来,它可能会占满整个足球场。2011 年,每两天就创造了相同的数量,2013 年,每十分钟就创造了相同的数量。这一比率仍在大幅增长。尽管所有这些产生的信息都是有意义的,并且在处理时可能是有用的,但是它们被忽视了。
世界上 90 %的数据是最*几年才产生的。数据是新的石油,推动着信息革命。
从一开始,这种数据增长就为新的数据存储系统提供了机会。直到 2000 年,我们关心的主要是关系数据,主要是结构化的,我们有许多方法来存储它。看看下面的数据库时间表,2000 年以后,数据是非结构化、半结构化的、巨大的,人们明白保留它们在未来会有所帮助,因此大数据出现了,许多技术也在上面。
太酷了,像 Hadoop 这样的大数据技术让工作变得简单,并为人工智能和机器学*模型创造了机会。
简而言之,让我们看看机器学*是如何应用于一般数据的。在下面提到的步骤中,捕获原始数据和清理是最乏味的工作。如果没有像 map-reduce 这样的分布式技术,清理大量数据是不可能的。
现在,我们对机器学*如何需要大数据有了合理的想法,但如何将这两者结合起来的设计和架构仍然变得具有挑战性。
Rubens Zimbres 和著名的数据科学家定义了如何在大数据上应用机器学*的一般架构。下面的情节清晰地展示了如何让这两个人结婚。这里最具挑战性的部分是用适当的设计维护数据仓库,以便机器学*模型可以无缝地消费相同的数据。
在我的下一篇文章中,我们将探索每一个步骤。到目前为止,我们对如何结合大数据&机器学*有了看法。
感谢您的阅读,请在评论中分享您的想法、反馈和想法。你也可以通过 twitter 上的@ simplykk87 和 linkedin 上的联系我。
参考文献
[## 数据科学和机器学*简讯# 55
我分享引起我注意的文章,并在每周五发布“数据科学和机器学*时事通讯”。如果你…
www.necatidemir.com.tr](http://www.necatidemir.com.tr/2016/09/data-science-machine-learning-newsletter-55/)
https://blogs . NVIDIA . com/blog/2016/07/29/whats-difference-人工智能-机器学*-深度学*-ai/
https://www . tutorialspoint . com/Hadoop/Hadoop _ big _ data _ overview . htm
当机器学*遇到复杂性:为什么贝叶斯深度学*是不可避免的
原文:https://towardsdatascience.com/when-machine-learning-meets-complexity-why-bayesian-deep-learning-is-unavoidable-55c97aa2a9cc?source=collection_archive---------5-----------------------
Managing people is complex. Photo by Anna Dziubinska on Unsplash.
到现在为止,你们所有人可能已经关注深度学*研究很长时间了。1998 年,LeCun 等人提出了非常简单的手写数字 MNIST 数据集,并用他们的 LeNet-5 证明了我们可以在其上达到很高的验证精度。随后提出的数据集变得更加复杂(例如 ImageNet 或 Atari games),因此在其上表现良好的模型也变得更加复杂。同时,这些模型可以执行的任务也变得更加复杂,例如,Goodfellow 等人的 GANs (2014)或 Kingma & Welling 的 VAEs (2014)。我个人的一个亮点是 Eslami 等人的神经场景表示和渲染 (2018),它清楚地表明了神经网络迄今为止可以执行相当复杂的任务。我看到神经网络能够执行的任务的复杂性明显上升,我不认为这种趋势会很快停止或放缓。
Tasks which want to be solved by deep learning in the future
在这篇文章中,我将给出清晰的论据,说明为什么贝叶斯方法如此广泛适用,并且当我们想要解决更复杂的任务时必须应用。
值得注意的是,我用社会科学采用的术语来谈论复杂性,因为我个人有兴趣观察社会系统中非常高层次的模式,例如,大学学生或来自低收入国家的移民。当你刚刚打开报纸时,这些问题是我们当代最紧迫的问题,所以我也想鼓励你们所有人尝试用机器学*来解决这些问题,理想的是贝叶斯深度学*。
什么是复杂性?
在深度学*的背景下,复杂性最好理解为复杂系统。系统是以某种方式相互作用的代理人的集合体。这些代理一起形成一个整体。复杂系统的一个基本特征是这些代理可能会非线性地相互作用。复杂性研究人员通常认同两种不同层次的复杂性:简单或受限的复杂性,以及复杂或一般的复杂性( Byrne,2005;Morin,2006【分别为 )。根据定义,一般复杂性不能以任何方式进行数学建模,而受限复杂性可以。
Byrne ( 2005 )认为,大多数社会系统都属于一般复杂性的范畴,这已经是我们数学方法的一个合理的限制,但是我们现在看到,任何我们认为仅仅拥有有限复杂性的系统。我们这样做,是因为我们未来的深度学*任务可能是调查社会中的模式,鉴于我们迄今为止在基于深度学*的解决方案方面的进展速度,这些解决方案用于越来越复杂的任务。因为社会的代理人,也就是我们所有人,有时确实会不可预测地相互作用,所以我们可以肯定地说,非线性特性是成立的。
复杂系统建模
记住,对任何或多或少复杂事物的数学描述仅仅是模型,而不是基本真理(科恩&斯图尔特,1995 ),我们可以直接推断,在任何复杂的情况下,贝叶斯推理都比频率主义推理更适合使用。在贝叶斯推理中,我们将模型参数 θ 视为随机变量,也就是说,我们想要学*它们,而在频率主义推理中,我们将模型参数 θ 视为固定的,但未知的事实描述。在 frequentist 推断中,我们进行的实验被视为来自无限大的一组完全相同的实验的样本(例如,掷出一个公平的骰子,即决定每次掷骰结果的真实模型参数 θ 是骰子每边的 1/6)。在进行我们的一系列实验之前,我们先定义我们想要多久做一次。在进行了这些数量的实验后,我们有了每个模型参数的置信区间,它告诉我们置信区间包含真实参数的概率。
因此,在频率主义者的推理中,我们认为模型参数 θ 是不可改变的,因此这一学派认为理想模型,即无限频繁地进行我们的实验,代表了任何或多或少复杂事物的真实状态。
本质上,这意味着频率主义推理的支持者声称,我们能够用无限多的实验来描述真理,并且这些描述真理的模型参数θ永远不会改变。
这可能适用于任何非常简单的实验,但它从根本上违背了 Stewart(1995 年)关于自然系统的想法,因此比类似于滚动骰子的简单实验更复杂。他们认为,不管过去发生了什么,系统都会随着时间的推移而改变,并且会发展出至今尚未出现的新现象。从社会科学的角度来看,这一论点也非常符合复杂性的定义(参见 涌现 )。
这对贝叶斯推断意味着什么?
在贝叶斯推理中,我们确实以概率分布的形式学*模型参数 θ 。这样做,我们可以保持它们的灵活性,并且可以在系统的新观测到来时更新它们的形状。当我们的目标是对复杂系统建模时,这听起来不是更合理吗?
但是,这并不是贝叶斯推理比频率主义推理更适合用于复杂任务的唯一原因。
以前,我们已经定义了一个复杂系统,其组件,即其代理之间可能存在非线性交互。迄今为止,还没有为非线性系统开发出确定性的数学形式,也永远不会开发出来,因为根据定义,复杂系统是非确定性的。换句话说,如果我们在一个复杂的系统中重复一个实验,第二个实验的结果不会和第一个一样。
这在贝叶斯和频率主义推理中仍然是完全可行的,但是当我们不能对任何事情都有确定性的解决方案时,有什么明显的途径可以选择呢?
完全正确,我们*似。
这正是我们在贝叶斯方法中所做的:棘手的后验概率分布 p(θ|D) 是*似的,或者通过变分分布 q(θ|D) 我们喜欢在神经网络中这样做,或者通过蒙特卡罗方法我们经常在概率图形模型中这样做。相反,在频率主义推理中,我们采取某种无知的方法,只是更频繁地重复实验,希望最终得到一个可接受的置信区间,其中包括我们的真实参数。这个“接受水平”被称为置信水平,表示为 α ,你可能以前见过。一般约定, α 至少要 95%。
这一切对深度学*研究的未来意味着什么?
嗯,还要考虑到任何深度学*模型本身实际上都是一个复杂的系统。我们有神经元,你可以把它看作代理,以及它们之间的非线性激活函数,你可以把它看作代理的非线性关系。例如,在 CNN 中,过滤器从这种设置中发展出来,你可以将它视为一种突发现象。
随着希望通过深度学*解决的任务越来越复杂,同时保持对复杂性的理解,因为它目前在社会科学中存在,所以可能没有办法绕过贝叶斯深度学*的应用来解决这些任务。神经网络是能够发现随机变量之间非线性关系的少数方法之一,这是复杂系统建模的一个强烈需求。此外,贝叶斯推理是自然归纳的,通常接*真理,而不是旨在准确地找到它,这是频率主义者的推理。
请记住,这只是利用贝叶斯深度学*的另一个论点,除了具有测量不确定性的优势和奥卡姆剃刀的自然体现。
我希望你喜欢阅读这篇不太专业的文章。除了我已经链接的文章,下面是两本我强烈推荐的社会科学书籍。
延伸阅读:
伯恩 d .&卡拉汉 G. (2013)。复杂性理论和社会科学:最新发展水平。劳特利奇。约翰逊(2002 年)。涌现:蚂蚁、大脑、城市和软件的互联生活。西蒙和舒斯特。
快乐阅读&保持好奇!
当机器学*试图预测机器学*的性能时…
原文:https://towardsdatascience.com/when-machine-learning-tries-to-predict-the-performance-of-machine-learning-6cc6a11bb9bf?source=collection_archive---------1-----------------------
我试图通过另一种机器学*算法来‘预测’深度学*网络的质量。结果并不令人鼓舞。
看过我之前关于媒体的文章的人都知道,我不是机器学*或数据科学专家。我来自半导体技术背景,最*才开始摆弄机器学*技术。
作为一个新手,只要我能克制自己,我就不敢冒险进入深度学*。平心而论,当我参加Ng 教授的 Coursera 课程时,我确实使用 MATLAB 编写了简单的 1 或 2 层感知机,甚至使用 NumPy stack 尝试了他更新的 Deeplearning.ai 课程的前几个例子。但是它们只涉及很少的“深层内容”和极少量的超参数。
正是这个深度学*领域的超参数问题一直让我着迷。我认为这很自然,因为我来自一个技术设计背景,我也每天在我的半导体工艺或器件设计工作中使用大量高水平参数,它们经常以令人难以置信的复杂和(有时)不可预测的方式结合,导致我的设计成功或失败。
我试着告诉自己,这只是一大锅简单的配料——量子力学、基尔霍夫定律、麦克斯韦方程——我应该能够非常自信地预测结果。而且,我经常能做到。但是有些情况下,设计的质量并不完全符合预期,根本原因很难在整个开发过程中使用的超级参数的迷宫中找到。
因此,当我最终开始摆弄 TensorFlow 时,我直接开车去进行自学练*,在那里我摆弄各种超参数以及它们对预测器最终质量的影响。现在,这句话“各种参数及其影响”听起来像什么?一个等待机器学*分析的问题,对吗?
没错。我试图通过深度学*(和简单的逻辑回归)来“学*”是什么推动了深度学*模型的性能!
我不会涉及太多的技术和实现细节。有兴趣的读者可以简单的参考/下载我的 GitHub repo 中的代码。相反,我将用简单的术语描述高层次的步骤,
- 首先,我选择了一个简单而众所周知的数据集——著名的鸢尾物种数据 ,这也是在tensor flow Estimator API教程页面中使用的。这是一个具有实值特征的多项式分类问题。标准又干净。
- 然后我决定了一个特定的优化器:ProximalAdagradOptimizer。我相信您可以(并鼓励您尝试)选择任何其他优化方法,而不会失去通用性。
- 此后,我选择了 4 个超参数,在我看来,它们足够通用,可以出现在人们可以解决的深度学*问题的任何高级甚至阵列级实现中:
a) 学*率,b) 辍学率/概率,c) L1 (LASSO)正则化强度,d) 【网络的训练步数。
- 选择了超参数后,我以对数的方式将它们分布在一个很大的范围内,而不是线性的,只是为了用少量的点覆盖一个很大的范围。
- 然后,我构建了一个全因子循环(所有级别的超参数都与所有其他级别交叉),并通过跨越该多级循环开始训练一个 3 层(5,10,5)全连接前馈神经网络。我保持网络足够小,以便在我简单的笔记本电脑上实现不错的训练速度:)
- 在循环的一次执行中,我提取并保存了基于拒绝集的预测的“准确性”。
- 在整个“循环”执行结束时,我将参数和准确度分数(DNN 分类器预测质量的指标)转换成一个 Panda DataFram e,供以后分析。
- 并且,我对 4 种类型的激活函数重复这个过程:a) sigmoid( x )、b)整流线性单元(RELU)、c) tanh( x )和 d) 指数线性单元(ELU) 。
- 现在,我有 4 个激活函数的 4 个数据帧——每个数据帧都包含关于神经网络的超参数的数据作为特征,精度作为输出。Prime 供另一个机器学*算法分析,或者自己分析!
- 为了将准确度分数转换成分类数据,我只是将它们任意分为三类:低、中和高。这简单地表示深度学*网络的'质量'。例如,小于 0.5 的准确度表示低分数,而> 0.8 的分数得到高分类。
- 此后,我构建了一个简单的逻辑回归分类器(来自 scikit-learn ),并试图从超参数中预测质量等级。
- 并且,我使用另一个 DNN 分类器模型尝试了相同类型的预测。我在这一步使用了一个更大的神经网络(20-20-20 个隐藏的神经元),因为我只需要运行一次,并且还需要训练更多的步数(最少 5000)。
- 并重复了所有 4 个激活功能的全部内容。
结果充其量是喜忧参半。我得到了高达 0.8 的准确性和 F1 分数,但当我尝试各种随机分割和交叉验证时,平均表现为 0.4-0.6,有时低至 0.35。
数据集很简单,DNN 分类器的准确度分数总体上令人满意,但是机器学*模型不能很好地理解神经网络性能对各种超参数的依赖性。唯一明显的特征是激活函数的选择——tanh 和 ELU 给出了明显比 sigmoid 和 RELU 更好的结果。但这种认识可以通过简单地查看准确度得分表来实现,并不保证机器学*模型。除此之外,没有从超参数空间明确的学*来实现 DNN 模型部分的更好的准确度分数。甚至更高的训练步骤数也没有显示出与更高的准确度分数有任何明确的相关性。
同样值得注意的是,当 DNN 分类器从超参数数据集学*时,它并不比简单的逻辑回归模型(对数据进行 最小最大标量变换 )表现得更好。因此,这可能不是模型的限制,而是数据集本身充满了不确定性和无法解释的变化。下图显示了与 ELU 激活函数相对应的数据集的关联热图(从原始虹膜数据的角度来看,这是性能较好的函数之一)
超参数优化,甚至是选择一组好的超参数,仍然感觉像是深度学*领域的“黑魔法”。
即使对于像鸢尾属物种分类这样相对简单的问题,机器学*方法也不能很好地理解全连接神经网络的超参数对最终精度的影响。
免责声明 :请随意从 GitHub 中获取代码,并自己进行实验,如果您发现了有趣的东西,请告诉我:)我的联系方式是:tirthajyoti[AT]Gmail[DOT]com。
当机器评判人类时
原文:https://towardsdatascience.com/when-machines-judge-humans-1f60908667c0?source=collection_archive---------9-----------------------
对算法决策过程的九个正确反应
算法决策过程(ADM)现在在生活的许多领域评估人们。多年来,人们一直使用 ADM 流程来对人进行分类,而没有真正讨论这些流程是否公平,或者如何解释、验证或纠正这些流程。一个潜在的原因是,这些系统与科幻小说中出现的人工智能(AI)没有什么关系。人们通常会将人工智能与 HAL 9000 或 Wintermute 等虚构角色表现出的品质联系起来:意向性和意识。然而,到目前为止,这种强大的人工智能只出现在文学作品和电影中,与本案例研究集中介绍的系统没有任何关系。然而,后者已经在决定法律事务、批准贷款、大学录取学生、决定警察何时何地值勤、计算保险费率以及帮助致电服务中心的客户等方面发挥了重要作用。所有这些项目都是专门为解决特定问题而设计的,它们影响着许多人的生活。这不是根据科幻小说的未来,这是关于今天的日常现实。
为了利用行政管理在参与领域提供的机会,在规划、设计和实施行政管理过程时,必须设定一个总体目标:确保参与实际增加。如果不是这样,这些工具的使用事实上可能导致更大的社会不平等。
总之,这里给出的例子中的机会和风险指出了一些与 ADM 流程相关的一般因素,这些因素会严重影响参与。这些因素涉及整个社会信息过程的不同方面,可以在不同的层面上找到。这里有三个例子:
- 在微观和宏观层面塑造 ADM 流程:在开发流程开始时选择数据和设定标准本身就能反映出有时会触及基本社会问题的规范原则。
- 宏观层面的供应商和运营商结构:拥有一系列 ADM 流程和运营商可以提高参与度(例如,通过对过去未参与该系统的人员进行信用评估),可以更容易地避免 ADM 流程,并扩大认证的可能性。相反,垄断结构增加了个人“脱离系统”并被抛在后面的风险。
- 在微观、中观和宏观层面使用 ADM 预测:技术、社会和个人之间的相互作用对算法的使用方式和时间以及它们的影响力有着重大影响。因此,必须提出的关键问题是:人们(ADM 开发者和用户,以及普通大众)如何应对自动预测?流程是否包括质疑结果的可能性?
这里需要的是在不同层面上对行政管理过程的潜在缺点进行额外的系统分析——从目标的定义和衡量手头问题的努力,到数据收集、算法的选择和将过程嵌入相关的社会背景。需要标准来确定 ADM 流程在所有级别和所有步骤中的好处。这里讨论的对策可以为解决这些问题提供初步动力:
1.确保可证伪性
ADM 流程可以不对称地从错误中学*。“不对称”是指系统,由于整个过程的设计,在回顾时只能识别某些类型的自己的预测,这些预测被证明是不正确的。当算法不对称地学*时,危险总是存在,自我强化的反馈循环将会发生。
例如:法律系统中使用的累犯预测
2.确保正确使用
制度逻辑可能导致 ADM 过程被用于与开发者最初设想的完全不同的目的。必须避免这种不适当的使用。
举例:预测个人犯罪行为
3.为社会影响确定适当的逻辑模型
单个流程步骤中算法驱动的效率提升可能会掩盖这样一个问题,即用来解决一个社会问题的手段是否普遍合适。
举例:预测铅中毒
4.让概念变得可测量
贫困和社会不平等等社会现象或问题往往难以操作化。因此,通过公开讨论制定的可靠基准很有帮助。
示例:预测贫困模式
5.确保全面评估
技术上可行的规范力量很容易盖过从社会角度来看什么有意义的讨论。例如,基于机器的决策的可扩展性会很快导致这样的情况,即使用 ADM 过程的适当性和对社会的影响既没有被讨论也没有被验证。
示例:自动人脸识别系统
6.确保 ADM 流程的多样性
ADM 流程背后的决策逻辑一旦开发出来,就可以在大量情况下应用,而不会大幅增加成本。一个结果是有限数量的 ADM 进程可以在某些应用领域占主导地位。范围越广,个人就越难逃脱这一过程或其后果。
示例:通过在线个性测试预选候选人
7.促进可验证性
通常,没有努力去确定一个 ADM 过程是否足够公平。如果算法的逻辑和本质是保密的,那么这样做甚至是不可能的。如果没有独立第三方的验证,就不可能对特定 ADM 流程的机会和风险进行有根据的辩论。
举例:法国大学招生
8.考虑社会的相互依赖性
即使使用非常有限,ADM 流程及其环境之间的相互依赖也是非常复杂的。只有对整个社会信息化过程的分析才能揭示机会和风险之间的关系。
例如:犯罪行为的特定地点预测
9.防止误用
容易获得的预测(如得分结果)可能被用于不适当的目的。必须不惜一切代价防止这种滥用。
示例:美国的信用评分
本文摘自 Konrad Lischka 和 Anita Klingel 撰写的工作文件"Wenn Maschinen Menschen bewerten-international e falbeispiele für Prozesse algorithm ischer Entscheidungsfindung",由贝塔斯曼基金会以 CC BY-SA 3.0 DE 出版。
本出版物记录了我们对该主题调查的初步结果。我们将它作为一份工作文件发表,以一种其他人可以借鉴的方式为这个快速发展的领域做出贡献。
什么时候不用深度学*?
原文:https://towardsdatascience.com/when-not-to-use-dl-ml-ai-24103f147dd0?source=collection_archive---------5-----------------------
或者一种更自由的软件设计方法
这个趋势问题引发了许多争论。与其站在(DL 和非 DL)一边,我更喜欢软件设计的统一(和自由)观点。
让我们首先区分通过深度学*(或 ML)和传统软件工程编写的程序。
- DL/ML/AI 都是关于编写程序(就像我们从计算时代开始就一直在编写的那样)来解决问题和执行任务。编写传统软件=用选定的编程语言的语法编写一系列规则(作为命令性动作或指示性约束),大部分是手工编写的。
- 编写(有监督的)ML/DL 程序是示例编程,即需要以正确的格式对程序的输入输出数据进行指定和编码,并描述程序的模板(如神经网络的形状)。模板中的未知参数根据手动指定的目标自动学*(计算模型输出错多少),从而最终确定程序。我之前的帖子对此进行了更详细的讨论。
- 传统的离散程序通过转换数据结构来工作。输入数据结构→转换序列→输出数据结构实例。你把大部分精力花在编写转换序列的规则上,单元测试通过对输入/输出数据进行采样来确保正确性。
- ML/DL 程序转换多维空间中的连续值向量或张量。变换的空间限于指令集,例如神经网络中的不同算子/层。最重要的是,为了能够学*,这些运算符应该是可微的。这些转换不是手动指定的——它们是通过使用非常普通的(和蛮力!)随机梯度下降算法。
- 也许,分界线(在 30k 英尺处)是使用离散数学还是连续数学概念、表示和程序合成工具。
- 回想起来,传统的基于规则的编程在许多以人为中心的程序(AI!)我们想创造,例如,建模感知(看,听,语言)。我们(甚至是集体)无法找出正确的规则。这在某种意义上,激发了热情(+炒作+恐惧!)围绕 AI 深度学*后的在那些问题上成功了。通过让神经网络找出转换,我们现在能够为许多感知任务(加上其他几个任务)编写好程序。
- 旁白:注意推理和抽象(人工智能的本质)也许做得还行(逻辑编程!)在基于规则的世界中,假设你正确地了符号和关系(主要警告!).
鉴于关于基于强大的深度学*的程序合成的引人注目的讨论,我们现在想知道是否所有可能的程序都能被深度学*者学会。例如,我们能用 DL 同样容易地编写典型的基于图形/树的程序吗?让我们在这里深入研究一下。
- DL 程序接受输入的张量嵌入,对其进行几何变换(线性和非线性),并产生概率分布形式的输出(主要是)。如果有合适的架构和外部存储器,这种设置可能是图灵完全的。也许我们可以大致了解一切。
- 然而,就编程成本而言,这条路线可行吗?对于我们想写的每一个程序(或者说,我们想解决的问题),有没有一个低成本架构(容易找到,需要训练的参数)?在某种程度上,我们需要多长时间才能为一个问题找到正确的可微算子集以及组合它们的最佳方式?
- 我们能确保为每个问题建立低成本的输入/输出数据吗?这是注解头痛的一部分。此外,正确的编码。
- 最后,要让数学目标约束真正反映你的直觉(或离散)目标,你会努力多长时间?
上述问题凸显了为什么基于范例的学*并不总是美好的:也许,这种方法也不是万能的。
我认为,更明智的方法是围绕我们所做的编程拓宽我们的思维,以解决任何问题。我们将编写两种程序——基于规则的和基于例子的。将这些模块看作解决方案代码的不同模块——您将挑选哪些模块为其编写规则,哪些模块提供数据以支持规则学*。
所以,我们正在谈论一个统一的编程风格的范围。你可能以基于规则的方式开始编写一个模块,因为规则集变得庞大而放弃,转而准备数据来指导学*模式。相反,您可能从一个基于深度网络的模块实现开始,对它的性能/数据准备感到厌倦,或者可能对它有足够的了解,然后切换到一个更可解释的基于规则/可学*的框架。完整的解决方案包括将问题智能分解成不同的编程风格。
具体示例:我尝试过的这种方法的一个实例是从图像中提取表格结构,例如申请表、收据等。该解决方案通常依次由两个模块组成。低级的东西(线条、字符边缘、文本边界框检测)在学*模式下做得更好。更高级的布局发现可以通过边界框上的一组解析规则来更直接地解决。当然,您可以使用端到端的学*公式,它以适当编码的格式输出表格布局。然而,我认为数据设置和训练比编写第二部分的规则更麻烦。
还有一部分争论(这篇文章没有涉及)是关于只有在大量数据或感知任务中应用 DL,还是在低数据或结构化设置中应用非神经 ML。我想这个问题还没有定论,但是越来越多的证据表明,这种明显的分歧也是虚假的。
我发现我的想法与 Francois Chollet 的这篇主题更加广泛的文章有所重叠。我认为他设想了一个更具凝聚力的神经程序合成模型,结合了基于规则和基于示例的学*模块,以及它们如何被重用。我主要谈的是界限明确的组合。
很想听听其他从业者对这个话题的看法!
我应该什么时候在芝加哥乘公共汽车?
原文:https://towardsdatascience.com/when-should-i-ride-the-bus-in-chicago-21a4bc26e033?source=collection_archive---------7-----------------------
source: unsplash.com
随着芝加哥整个春天的天气变得越来越好,我注意到我每天乘坐公交车上下班的拥挤程度有所波动。越来越多的人是令人沮丧的,随着温度的升高,我越来越倾向于骑自行车上下班。一年中这个时候芝加哥的天气变化无常,当外面天气不太理想时,我不愿意骑自行车,所以我决定收集一些信息来帮助我判断什么更糟糕——天气还是公交车上的人群。
首先,我必须找到用于此的数据。幸运的是,芝加哥市有一个开放的数据门户,这绝对是了不起的。公交路线数据很干净,格式也很好,这大大弥补了它直到 2016 年 11 月才完成的事实。至于天气数据,我是从地下气象站刮来的。
一旦我得到了这些数据集,我就把它们上传到 R 中,用 ggplot2 进行一些探索性的可视化。我特别研究了天气和 8 号路线之间的关系,因为那是我最常乘坐的巴士路线。
下面我们可以看到,随着气温的上升,工作日的乘客数量下降。尤其是气温超过 60 度的时候。然而,在周末,不管气温如何,乘客量仍然相当平稳。
检查风速与下面的乘客人数似乎没有太大的关系。我们可以肯定地看到,一周中的日子是一个很大的因素,就像前面的图表一样,但没有那么多风。
就像风速一样,降水似乎对车友的量没有太大影响。这让我有些惊讶,因为我确实感觉到雨天公交车上的人更多,但这可能是一种错觉,因为潮湿导致不太舒服。
不出所料,在之前的图表中看到一周中的日子被分开后,周末乘坐公交车的人数比工作日低得多。这意味着当考虑周末的交通方式时,公共汽车很可能不会拥挤。
为了在未来帮助自己,我想看看我是否能预测某一天的乘客数量。根据上面获得的知识,似乎唯一有价值的预测变量是温度和星期几。我将数据分成 80-20 份用于训练和测试,然后在训练数据上使用一周中的某一天和一天中的最高和最低温度来组合 glm。以下是将该模型应用于测试数据时,该模型的预测值与实际乘坐人数的对比。不幸的是,误差很大,但 84%的预测值与实际值相差在 15%以内。
在深入研究了上述关系并试图预测公交车流量后,我想弄清楚如何实际决定是骑自行车还是跳上公交车。为此,我决定为天气和公交车的拥挤程度创建“痛苦”指数。公共汽车上乘坐量的痛苦指数只是一个从 0 到 100 范围内的标准化。存在的公式是:misery _ I = 100 *(riders _ I-min(riders)/(max(riders)-min(riders))。至于天气指数,我分别用 40、40 和 20(温度是倒数)组合了温度、降水和风速的归一化。这种分裂仅仅是我个人对最让我畏缩的属性的偏好。现在,痛苦指数被放在一起,我有一个评级系统来决定是坐公共汽车还是骑自行车:如果天气指数高于公共汽车,那么它就是,如果公共汽车指数高于它,那么是时候跳上我的自行车了。
激动人心的部分来了。该模型是否能很好地预测乘客量,以决定是骑自行车还是乘公共汽车?将我们预测的公交乘客量与公交痛苦指数相加,并将其与观测到的天气痛苦指数进行比较,然后将由此得出的决策与原始的观测决策进行比较,我们得到了 91.1%的准确率。不算太坏。
基于这一切,我决定用 Shiny 创建一个互动工具,你可以在这里查看。该工具接收您计划乘坐的公交路线,并从 Weather Underground 的 API 中获取当前天气,然后根据更新的数据运行上述模型,以预测公交路线的拥挤程度并计算痛苦指数。除此之外,还有一个选项可以显示你对天气有多“强硬”,这个选项为天气痛苦指数增加了参数和乘数。
感谢阅读!
当社会科学家转向计算:拯救人类的会议?
原文:https://towardsdatascience.com/when-social-scientists-turn-computational-a-conference-to-save-humanity-2005201109b2?source=collection_archive---------23-----------------------
解决数据中“偏见和歧视”挑战的研讨会。
第二届欧洲计算社会科学社会挑战系列研讨会(简称 EuroCSS)于 2018 年 12 月 4—7 日在德国科隆举行。我参加了由副教授 Bennett Kleinberg (UCL)组织的首次“论文黑客马拉松”,这是一次关于语言时态轨迹分析(LTTA)的研讨会,或者用一种非常奇特的方式说文本分析:文本语言如何随时间变化。我对“论文黑客马拉松”很感兴趣,因为它的目标是在一天结束时,有一篇可发表的论文(对于那些没有学术背景的人来说:“论文”是一份科学报告,记录了所进行的研究的发现,发表在期刊上,是量化学者成功的一种方式..请稍后留下您的评论!).至少可以说,我参加过许多计算机科学领域的传统黑客马拉松,我对这种应用于社会科学的混搭黑客马拉松很感兴趣!
The EuroCSS held at Cologne Germany and its twitter hashtag.
第 1 天—研讨会前论文黑客马拉松
在科隆的第一天包括在万豪酒店举行的会前研讨会。许多培训课程同时进行,但我参加了 LTTA,因为我想把这些方法应用到我自己的研究中(后来我疯狂的研究!).
研讨会从背景调查开始,让房间里的每一个人都熟悉后面要用到的方法的技术运作。房间里有大约 30 名学生和研究人员,他们来自各种背景,从纯粹的社会科学到铁杆计算机科学家和开发人员。
我们在自己的笔记本电脑上使用 R 和 RStudio 进行实践,将我们刚刚吸收的所有理论付诸实践,同时检查是否下载、安装并正确运行了所有正确的软件包和数据集。我很幸运,在到达研讨会之前已经完成了所有这些工作,因此在每个人都在设置时,我可以很舒服地在方法中摆弄参数。
UCL Data Science Team running the LTTA workshop, from left to right: Isabelle van der Vegt, Maximilian Mozes and Bennett Kleinberg.
Bennett 和他的学生 Isabelle van der Vegt 和 Maximilian Mozes 在 Github 知识库上准备了所有必要的文件、脚本和数据,他们做得非常好——请查看并将其应用到您自己的研究中这里!有两个解析和预处理的选择(一个程序员的梦想!)vlogs 的数据集(如果你不熟悉这个全新的术语,这些是视频版本的博客——翻译成文本脚本以供分析),一个来自不同的媒体渠道,根据政治影响分为左翼或右翼,另一个来自 YouTube“改变的创造者”用户,其目的是平衡在线发现的有毒材料和积极内容。用外行人的话来说,LTTA 方法基本上是在你从剧本的开头到结尾的过程中,衡量文本情感的积极或消极程度。这些所谓的“轨迹”可以归结为几种类型,根据记忆总共有 7 种,用有趣的名字来描述它们的形状,例如“从赤贫到暴富”的向上轨迹,或者我最喜欢的“情绪波动”,类似于积极和消极情绪之间交替的曲线——你知道女孩们,每月一次的那种类型的事情。
Getting ready for our hackathon on LTTA!
在弄脏我们的手之前,我们在午餐时间边吃边喝脑汁,然后去科隆大教堂和中心逛了逛。一旦我们填饱了碳水化合物,我们回到万豪酒店,提出我们的可怕的研究问题,分成两组,开始黑客攻击!
我在第一组,研究问题是比较不同(左或右)媒体渠道之间话题的情感轨迹。这需要主题建模、情感分析和聚类(如果您对更多技术细节感兴趣,请成为我最喜欢的人,并在下面联系我!).另一个(不太喜欢,因为总体上是一个竞赛)组 2 关注流行度(喜欢 vlog 的数量)对左和右媒体频道 vlog 之间的情感的影响。
我们在万豪酒店找到了一个舒适的空间(显然包括沙发和许多插头)来计划我们 3 小时的项目。经过 20 分钟的头脑风暴,我们分成了“写作”组成员和“分析”组成员。有趣的是,我们最终在分析团队中有三个小组:激烈的 python 程序员与传奇的(这里没有偏见……)R 程序员竞争,他们进行相同的主题建模方法, LDA ,但是使用不同的编程语言,然后是不太幸运的手动(仍然让我畏缩),是的,你没听错,手动非常容易产生偏见, 的编码人员已经预先选择了两个主题(移民和贸易战),并且(出于一些非常奇怪的原因)手动编码 regex 关键字,并使用字典来搜索与手动相关的术语的文本——我不能再说手动这个词了(在此插入掌纹)——但你明白这一点。 三个小组,以不同的方式做着完全相同的事情。我们都试图找到媒体渠道中讨论的热门话题,然后应用情感分析,看看它们有什么不同。
Our LDA results from our analysis on the top topics found in Media Channels from 2016–2018 — no surprise “trump” is in there…!
尽管我们做了多余的方法工作,我们的小组还是很有趣。我们有来自意大利、波斯、英国、希腊和德国的人,一起工作。我们可能有一点太多的乐趣,因为当监视第二组时,相比之下,他们似乎在一起。他们已经准备好了幻灯片,时间到了,一切都准备好了。第一组在做什么?还在管理 LDA。以三种不同的方式。在我开始介绍我们的研究和成果的时候,我们的 LDA 仍然在运行,并最终加载了我们的研究和成果。玩笑归玩笑,这是一种非常有创意的方式,让社会科学家参与到计算方法中来,并让研究人员在一天内集中精力完成大量的工作!
我期待着下一次——正式志愿在这里帮助组织它——有更多的时间进行黑客活动,更多现成的小吃,最重要的是咖啡因,因为它不可能是一次没有任何形式的能量消耗和某种睡眠剥夺的黑客马拉松!
黑客马拉松一结束,几杯啤酒下肚,“科学满贯”就结束了会议的第一天,笨拙的博士生们对他们的工作进行了 7 分钟的简短陈述。是的。有免费啤酒。
第二天—研讨会第一部分在 Maternushaus 举行
在沿着莱茵河跑完 10 公里后,我喝了第一杯咖啡,如果我们很乐意在前一天举行的黑客马拉松上发表一篇论文,那么与一名小组成员就我们需要解决的所有“待办事项”进行交流是一件很棒的事情。很高兴能与一位既有计算机科学背景又对社会科学感兴趣的同事分享这份承诺和兴趣。
所有的咖啡因和运动内啡肽,我已经准备好迎接充满谈话和社交的一天——来吧!第一位主旨发言人是来自东北大学的 Christo Wilson,他就如何调查职业搜索引擎算法中的性别偏见做了精彩的演讲。很高兴发现前 5-10 个结果没有偏见,但一旦招聘人员查看其他排名,就会发现尽管同等资格和优点,男性申请人仍排在第一位。令人害怕的是,当创建一个账户时,算法在没有性别输入的情况下生成了这个数据
然而,今天的话题——毫无疑问——让我大吃一惊——是 Juergen Pfeffer 关于 Twitter API 的采样算法。从本质上来说,这是一个关于如何将 1%的数据片段从 Twitter 提供给数据用户的令人敬畏的黑客技术,它只需要一个良好的(也就是昂贵的)互联网连接,就可以达到一个特定的毫秒窗口(657-666 毫秒或某个特定的范围),然后爆炸!你可以危险地操纵、利用、偏见或任何你喜欢的术语,整个采样数据集!迈克。放下。
因此,正如你所见,没有任何 2 分钟的海报宣传(没有头韵的意图)可以与之相比,尽管大声喊出来的是来自爱丁堡的博士生 Justin Chu-Ting Ho,他的工作有一个关于新脸书 API 如何严重偏见的 rad 海报。没错。理智检查:所有这些“偏见”的谈论实际上意味着以下内容:研究人员使用社交媒体数据来回答关于世界、人类以及人类在这个世界上如何行为的基本问题。脸书、推特和所有其他人拥有大量的数据,这些数据正是这些人自愿放弃的——为了免费——然而脸书、推特和类似的人拒绝分享这些非常公开的数据。我会让你思考其中的含义,但如果你需要任何帮助,请告诉我。
带着一点愤世嫉俗的口吻,我们有了非常需要的午休时间。有机会与世界各地的研究人员交谈,甚至讨论潜在的合作。这就是会议的目的,对吧?
研讨会第二天的最后一位主题演讲人 Sara Hajian 非常专业,她分享了她对我们在数据收集中遇到的上述(数量惊人的)偏见的一些解决方案。
我们都去了科隆当地的圣诞市场,几乎每隔几个街区就有一个不同的圣诞市场——足够接下来的 5 年左右了!得到了美味的半米长的肉棒、gluhwein(热葡萄酒)和大量的糖果!
第三天—研讨会第二部分在 Maternushaus 举行
研讨会的最后一天,最好的描述是有点懒散,要么是咖啡中的咖啡因被严重稀释,要么是我的大脑被前一天收到的信息严重饱和。不管怎样,这又是一个谈话繁忙的日子,又是一个看海报并投票选出最佳海报的机会。
这一天的亮点最终是听取了社会模式研究人员在研讨会期间进行的一项实验,因为我们都同意在我们的挂绳上佩戴 RFID 芯片。我真的很期待实验的结果,如果你跟踪我的互动,我想我会成为一只社交蜜蜂——有测试谦虚的方法吗?我不太确定我会怎么做…
总的来说,这次会议让你大开眼界,作为一名研究人员,你在收集数据时必须考虑哪些因素,但作为一名数据消费者,所有这些信息可能会加剧我们社会的偏见。我遇到并有机会与之交谈的人提供了一个很好的思想和熟人交流的机会,这种交流可能会在未来保持下去。最后,科隆是一个值得参观和探索的可爱城市,有可爱的市场和美味的椒盐卷饼。Bis zum nä chsten Mal!
先别进球,梅西!
原文:https://towardsdatascience.com/when-to-score-the-first-goal-to-beat-your-opponent-in-soccer-8d7b4e94035?source=collection_archive---------9-----------------------
看一看足球比赛中得分的最佳时机。
Picture from pexels.com
比赛开始,你的球队在比赛的第一分钟踢进第一个球。这听起来很理想,但是你的对手回来的几率增加了吗?如果你在其他任何一分钟打进比赛的第一个进球,你赢得比赛的机会有多大,它们相比如何?
使用这个 Kaggle 数据集(其中包括从 2012 年到 2017 年欧洲一些顶级联赛的 9K 场比赛的详细事件),我试图了解在职业足球比赛中打入第一个进球的最佳时间,以增加你最终赢得比赛的机会。
第一个进球是足球比赛中最重要的里程碑之一。它可以给得分队增加能量和信心,给失球队增加压力,使他们更容易再次失球。有人可能会推断,尽快打进第一个球是最理想的,但数据显示并非如此。我们来探索一下。
如果你进球早,你的球队可以放松,甚至可以踢得更好,进更多的球。过早得分也会让对手立即紧张,因此更有可能犯更多的错误,让你的球队再次得分。
但是提前进球对对手来说也是好消息。你的团队可能会因为领先而放松,并招致坚定的对手的压力,因为他们知道自己有足够的时间扳回一局。
相关,不是因果
这一分析旨在作为理解第一个进球的时间和赢得比赛的概率之间的相关性的简单的第一步。由于这只是观察数据,因此无法断言因果关系。
方法论
对于数据集中的每一场比赛,我记下了第一个进球的时刻。因此,t 他的方法从数据集中排除了所有以 0-0 平局结束的比赛。然后,我通过比较每支球队的进球数来计算每场比赛的赢家(或平局)。
最后,对于第一个进球的每一分钟,我都会计算进球球队获胜、平局或失败的比赛百分比。这是结果。
Figure 1. Probability of each result for each minute of the first goal. The result is from the perspective of the team that scored the first goal. Legend: Green — Win, Orange — Draw, Red — Loss. The two dotted vertical lines indicate the half time (45) and full time (90) minutes.
样本大小
为了增加上述分布的可信度,我绘制了每一分钟内第一个进球得分的游戏数量(即每个条形的样本大小)。比赛越多,我们对结果的分配就越有信心。在一次聪明的数据可视化的尝试中,我重新创建了上面图 1 中的图,并使每个条形的透明度与其样本大小成比例。因此,第 20 分钟的条形图比第 76 分钟更不透明,因为有更多的比赛在第 20 分钟取得了第一个进球,而不是第 76 分钟(149 比 39)。不透明度的精确计算是通过将游戏数量的范围归一化到[0,1]区间来完成的。
Figure 2. Left: The number of games in the dataset that had their first goal scored in each minute. Right: The distribution of results for each minute when the first goal was scored. Each bar’s transparency is weighted according to plot on the left. The two bright bars are on the 45th and 90th minute (half time and full time).
花絮
- 平均而言,打进比赛第一球的球队有 69%的可能赢得比赛, 19%的可能打平,11%的可能输掉比赛。上半场进第一球的球队,概率分别是 66%、20%、14%。最后,下半场攻入第一球的球队有 79%、16%和 5%的概率。
- 无论你在哪一分钟打进第一球,你赢得比赛的概率保持相对稳定。这很有趣,因为平局要求对手至少进一个球(因为你的球队进了第一个球),因此你越早进球,对手越有可能进球。这种可能表明失败的一方表现出“额外的努力”来扳平比分,如果他们落后的话,但他们会更加谨慎地比赛,这样他们就不会再次得分。
- 一般来说,你越晚打进比赛的第一个球,你赢得比赛的机会就越大。如图 2(左)所示,随着比赛的进行,第一个进球会越来越少。可以想象,持续很长时间没有进球的比赛可能表明两支队伍势均力敌。因此,他们中的任何一个得分的可能性都较低。
- 以上两点表明你得分越晚你输的概率越低。有趣的是,你的抽到的概率并不会随着你得分的增加而降低。
- 线性回归的斜率在后半段更陡。图 1 还显示,如果你单独观察每一半,赢的概率在两个部分都在增加。但是它在下半年增长得更快。
- 最佳得分时间是在中场休息后。也许从剧情中跳出来的最有趣的事情之一是,如果你在半场结束后的第一个进球中打进了比赛的第一个球,你赢得比赛的机会就会大大增加。这可能是由多种原因造成的。比赛中过早得分会给对手留下充足的反击时间。另一方面,你“等待”得分的时间越长,你得分的可能性就越小,而被得分的可能性就越大。因此,半场结束后进球可能是最佳时机。这一发现也可能是由下半场开始并立即得分的对手的心理所驱动的。最后,结果可以简单地是相关性:也许得分队的经理做出了战术上的改变,并发表了半场讲话,使球队变得更好,这反过来又提高了得分的概率,并普遍赢得了比赛。
结论
这显然主要是理论分析。如果你在比赛的最后阶段打进第一球,赢得比赛的机会非常高,但这并不一定意味着一支球队应该有目的地 等待晚进球,因为这允许的对手先进球。或许这一分析中最具可操作性的见解之一是,下半场的前几分钟非常关键。各队应该格外小心,不要认输。
然而,这一分析提供了一个有趣的数据驱动的视角,即下次你最喜欢的球队在比赛早期得分时,你是否应该真正放松!
教练会建议在关键时刻得分吗?这种分析在其他体育/电竞中是什么样子的?
感谢阅读!
你可以在这里 找到产生了本帖提到的所有分析的 jupyter 笔记本 。
如果你想要更多的足球数据分析,我也写了一篇关于 2-0 领先是否是足球中“最危险的领先”的文章。你可以在这里看到帖子。
附注:关于额外时间的说明
我们注意到在第 45 分钟和第 90 分钟有第一个进球的比赛数量大幅上升。峰值如此之大,仅仅说团队在最后几分钟更加匆忙并产生更多行动是无法合理解释的。
我的假设是那些“分钟”实际上是几分钟,因为它们占了所有增加的(也叫受伤,也叫额外)时间。在足球比赛中,每半场结束时都会多打几分钟,以弥补实际比赛中损失的时间。
Figure 3. Number of events per game per minute
增加的分钟数由裁判指示,旨在捕捉任何由于犯规、进球或任何其他停止比赛的事件而损失的比赛时间(但不是时钟)。但这意味着,理论上,第 45 分钟(上半场的最后一分钟)可以再拖几分钟。这是因为进入加时赛的 1 分钟是而不是第 46 分钟,因为第 46 分钟是下半场的第一分钟。对每场比赛每分钟发生的事件数量的研究揭示了一个相对稳定的趋势。它还显示了在第 45 分钟发生的事件的数量大约是 2.6,而在之前的几分钟大约是 1。这表明在半场结束时平均增加的时间大约是 2.6 分钟,这听起来是正确的。同样的分析显示全职工作平均增加了 3.8 分钟,这听起来也很合理。如果你有其他假设,请告诉我。
加时赛编辑:主场 vs 客场
感谢 Rich Ford 对取得第一个进球的球队(主场或客场)的分析结果的评论。这是它看起来的样子。
当主队打进第一个球时,他们总是比客队打进第一个球时更有可能赢得比赛。如果我们将获胜概率视为得分时间的线性函数,则上述见解可以重新表述为线性模型的截距主队高于客场队。
How the chances of winning change depending on the minute of the first goal, broken down by the team that scored the first goal, home or away.
但是即使客队获胜概率的截距低于主队,客队的斜率也更陡。这意味着客队得分越晚,他们获胜的机会就比主队增加得越快。也许这表明了一种震惊和压力因素,主队在自己的球迷面前发现自己落后于比分。
什么时候去参加聚会比较合适?
原文:https://towardsdatascience.com/when-to-show-up-to-a-party-and-what-it-says-about-you-71641dce9a83?source=collection_archive---------2-----------------------
关于“时髦迟到”实际含义的指南
啊…一个聚会
如果你不喜欢我,你就不会和我说话。如果你恨我,你会邀请我参加你的派对。
除了需要在聚会上与人交谈,聚会的另一个问题是决定什么时候去。我是一个准时的人。“时髦地迟到”与我存在的核心相冲突。
然而,我参加过足够多的聚会,意识到守时并不总是受欢迎的。我记得参加了一个朋友的朋友举办的聚会。脸书邀请的开始时间是晚上 9 点。我和我的朋友在晚上 9:05 出现。
只有我们在那里。
其中一位主持人甚至没有完全打扮好,她说她没想到会有人这么早来。我被弄糊涂了,我们不是准时吗?
所以,如果准时是一种虚伪,那么什么时候才是出现的正确时间呢?像我在生活中面临的许多问题一样,我转向了互联网。我进行了一项在线调查,以确定参加聚会的最佳时间。之后,我还采访了我那些社交能力更强的朋友,想弄清楚不同的派对到达时间会告诉你什么。
我在网上随便问了些什么?
我招募了 71 个人,给他们看了三个派对:
- 常规家庭聚会——20 至 50 人的家庭聚会,正式开始时间为晚上 10 点
- 小型家庭聚会——10 到 20 人的家庭聚会,正式开始时间是晚上 10 点
- 早期家庭聚会——20 到 50 人的家庭聚会,正式开始时间是晚上 8 点
对于每个假设的聚会,我问了参与者三个问题:
- 你希望你的客人最早什么时候到达?
- 您希望您的客人最晚什么时候到达?
- 你希望普通客人什么时候到达?
这是我的发现:
调查显示…
1.准时出现,不要迟到 15 分钟。
超过 50%的人希望客人准时到达,不要迟到 15 分钟。对于较小的聚会来说尤其如此:68%的人说那是理想的出席时间。
对于大型派对,*三分之一的人希望客人比正式开始时间晚 15 分钟到达。所以,如果你是一个守时的人,在出发去你的社交聚会之前,在办公室再看一集。
2.如果你不得不早到,不要早到超过 15 分钟
超过 50%的人不介意客人在三个派对的正式开始时间之前到达。但是,不要太早到达。很少有人认为客人提前 15 分钟以上到达是可以接受的。如果你过早出现会有危险,在敲门之前,在附*多走几圈。
3.有时髦的迟到,也有迟到超过一个半小时的。
人们认为客人多晚出现是可以接受的,这一点各不相同。
对于小型聚会,78%的人说客人不应该迟到超过一个小时。对于大型聚会,75%的人不介意客人迟到 1.5 小时。7%的人也属于“我不在乎 CK”一类,他们不在乎客人何时出现。
4.仅仅因为一个聚会在晚上早些时候开始并不意味着你可以晚些出现。事实上,聚会越小,你越应该准时。
我认为聚会开始时间会影响人们对客人到达时间的预期。我错了。数据表明不管派对是在晚上 8 点还是 10 点开始,你都应该准时或者稍微晚一点到达。
聚会的规模对准时性的期望有更大的影响——聚会越小,你应该越准时。
你的派对到达时间说明了你什么
数据告诉我什么时候去参加聚会。但是当你提前 30 分钟或迟到 2 小时到达聚会时,人们实际上在想什么呢?我招募了一些更擅长社交的朋友(比如:高中里的酷孩子),并采访了他们关于派对到达时间的问题。我发现,当你出现在派对上时,会透露出很多关于你的信息——你的个性、你与主人的关系,以及你当晚的目标。
1.你很早就出现了
如果你早到,你无疑是第一个到的。你可能看到主人正在布置或穿衣服。期待一些关于“不要这么早期待任何人”的评论
你…
- 是主人最好的朋友
- 错误地认为人们欣赏你的早到。
- 不知道去派对需要多长时间
如果你是主人最好的朋友,一切都可以原谅。你可能已经预料到了。你的存在意味着你可以帮助东道主设置,或者更好的是,赛前。
如果你是 2),就当这是你的觉醒。希望这些数据已经让你相信那些“你来早了!”不是因为主人见到你很兴奋。
很可能你是 3)。你不确定到达聚会需要多长时间,所以你比预期的要早到达。你没有绕着街区转几圈,而是决定按门铃——最坏会发生什么?当你看到主人脸上困惑和判断的表情时,你立刻后悔自己的决定。下次你早到的时候,你会像正常人一样耐心地在车里等着。
2.你准时出现
你很可能仍然是第一个到达的人,除非有一个奇怪的人提前出现。我是说谁会那样做,即使你比那更有社交技巧。
取决于你的主人准备得如何,两种情绪中的一种会掠过他们的脑海。如果他们被安排好了,他们会因为人们真的来参加聚会而感到宽慰。当其他客人出现时,你也可以让派对看起来更受欢迎。
如果你的主人还在设置,他们在诅咒你的存在。他们知道邀请严格来说说的是晚上 9 点,但是谁实际上在晚上 9 点出现呢?现在,他们不得不继续准备,同时感到有义务进行闲聊。
那你为什么准时出现?你要么是…
- 准时的
- 无聊的
一种选择是你喜欢准时。你的大学绰号是“守时”。你手腕上纹了个秒表。脸书邀请函上说晚上 10 点,该死的,你得在晚上 10 点出现。
另一个选择是这个派对是你今晚的巅峰。一天能看的真侦探集就这么多。实际上,现在只有两季,而你今天已经看完了。所以你准时到达,因为你宁愿做别的事情,也不愿在你的住处多呆一分钟。
3.你在开始时间后十五到二十分钟出现
人们开始稀稀拉拉地进来,每个人都站成一大圈。你真的可以听到其他人说话。
您可以:
- 我讨厌大群人。
- 有别的地方要去。
也许你更喜欢在较小的群体中聊天,但不想与主持人进行一对一的闲聊。如果你在聚会上不认识很多人,相对早一点到达是一个好策略。虽然聚会很小,但你可以在那里见到每个人。随着人们慢慢进入,人们也会被你所在的社交圈吸引,并向你介绍自己。
这个时候出现也可能意味着这个派对不是你今晚的最终目的地。你觉得自己有义务去露面,但你实际上只是在等待一段可接受的时间,然后你就可以去你真正的目的地了。与此同时,你不能拒绝别人送的酒。
4.你迟到了三十分钟到一个小时
派对越来越热闹,饮酒游戏已经出现,人们没有喝醉,但他们肯定在喝酒。
如果这个时候到了,说明你是正常的。
当你走进房间时,你在心里为自己时髦的迟到而拍拍自己的背。别介意你在过去的两个小时里一直在看猫的视频,这样你就不会早到了。
每一个决定都是计划好的。你带了 6 瓶啤酒——足够显示你不是一个贪财的人,但又不够让人认为你渴望朋友。你的衣柜放在一起足够好看,但不要太放在一起看起来这个派对是一件大事。事实上,你试穿了五套不同的衣服,然后才找到你现在穿的那套,这不是重点。**
5.你迟到了一个半小时到三个小时。
聚会进行得如火如荼。对话包括对着对方的耳朵大喊大叫。像一个入侵物种,红色的 Solo 杯在房间里蔓延。啤酒乒乓球桌有一个等候名单。
你…
- 不认识主持人。
- 是从其他地方来的
你没见过主持人。事实上,你并不知道这个派对的存在,直到 10 分钟前你的朋友带领你的朋友们来到这里。你在这里只是因为第一次聚会没有酒了,这是所有人能想到的最好的选择。这是在收到几条确认这个聚会确实是“poppin”的短信之后。
或者这是今晚的第二或第三站。你在“之前最酷的酒吧”并且让你遇到的任何人都明白。现在你要让自己的陶醉程度与派对的水平相匹配。如果你的水平太低,你就拍一些镜头来赶上。如果你水平太高,还是拍些镜头来埋尴尬。
6.你迟到了三个多小时。
你喝醉了。
你不知道你是怎么来的。当你环顾四周,你不认识房间里的任何一个人。人们瞥了你一眼,并和他们的朋友窃窃私语,但你无法理解这一切意味着什么。你会打电话给你的朋友,但是你在两个目的地之前丢失了你的电话。现在你只是坐在沙发上,手里拿着一杯水,还是一杯啤酒?你只需要让你的眼睛休息一小会儿…
派对时间到了…
所以希望你现在知道什么时候出现在你的下一个派对上——耶。如果你不相信你真的想要* 出现 我有一篇文章要写给你但是现在,我必须拍一张照片,抓起我的夹克,带上微笑,然后出门……唉。*
你可能喜欢的其他文章
如果你喜欢这篇文章,请访问LateNightFroyo.com,阅读引发关于爱情、生活等话题的话题。
如何走出去?
多年轻才算年轻到不能约会?
何时使用机器学*与基于分数的搜索排序
原文:https://towardsdatascience.com/when-to-use-a-machine-learned-vs-score-based-search-ranker-aa8762cd9aa9?source=collection_archive---------1-----------------------
(Photo coutesy: Catarina Moreira)
什么时候是从简单的基于分数的机器学*搜索排名的正确时机
传统的信息检索始于使用诸如 TF-IDF [1]或 BM25 [2]之类的分数对搜索结果进行基于分数的排序。随着搜索引擎变得更好,他们使用的分数也开始变得更好。许多大型搜索引擎使用启发式/基于分数的搜索排名模型。最著名的是,就在 2011 年,谷歌在搜索排名中使用了启发式模型[3],尽管它在机器学*方面拥有非常强大的内部专业知识。
使用机器学*模型对搜索结果进行排名已经探索了至少二十年。在过去的十年左右,随着学*排序技术的流行,它变得更加突出。例如,Bing 至少从 2009 年就开始使用学*排序技术对其搜索结果进行排序[5]。
这是许多新的和现有的搜索引擎必须做出的选择:他们应该选择手动调整的基于分数的模型,还是应该使用机器学*来对搜索结果进行排名。
以下是一些重要的因素,应该纳入你的决策中。请注意,这些要点中的大多数都足够通用,可以应用于任何预测/排名问题,并且不严格限于搜索。
1。可解释性
对于大多数最大似然算法,特别是对于目前流行的算法,如集成或神经网络,排序本质上是一个可解释的黑箱。你可以控制输入,但是很难解释特定的输入对输出有什么确切的影响。因此,最终的模型不是很好解释。
基于分数的模型,尤其是分数被精心构造的模型,通常更容易推理和解释。
2。实施时间
构建 ML 模型的新版本通常需要花费大量的时间。在您的模型准备好进行 A/B 测试之前,您需要运行“收集/清理数据->训练->验证->测试”循环的多次迭代。
更新基于分数的模型可以像调整分数一样简单,因此可以在很短的时间内完成 A/B 测试。
3。优化指标
对于大多数搜索引擎来说,很难找到一个客观的指标来优化。这是告诉您特定搜索查询的结果良好且搜索成功的指标。这一标准会根据您正在构建的产品和您的搜索“成功”的构成而变化。你可能想开始优化用户点击,但是如果你盲目地使用点击,你可能会训练出一个更倾向于坏的“点击诱饵”结果的模型。大型搜索引擎在建立人类相关性系统[6]上花费了大量资金,在这些系统中,训练有素的人类评分员使用明确定义的准则来为每个搜索结果生成客观的“成功评级”。由这些系统生成的训练数据然后可以用于训练 ML 模型来对搜索结果进行排名。较小的搜索引擎可能没有大型搜索引擎那么多的资源,也可能没有能力建立这样的系统。
这个优化指标对于 ML 和基于分数的系统都很重要。然而,如果您没有一个好的优化度量,ML 模型会遭受更多的损失,因为您可能最终会学*到一个训练有素的模型,该模型针对一个完全错误的度量进行优化。相比之下,基于分数的系统受到的影响要小一些,因为分数是使用理性和直觉结合您试图优化的指标构建的。
4。结果相关性
如果你能得到正确的优化度量,这就是 ML 模型能给你巨大红利的地方。直接从数据中学*通常胜过任何可以在基于分数的模型中编码的直觉。如果相关性对你来说比其他任何因素都重要,那么使用 ML 模型通常是一个不错的选择。
5。灵活性
在 ML 模型中很难进行局部修正。解决问题的最佳方式是通过使用更好/更多的训练数据或更好的特征工程或超参数调整,所有这些都很耗时。
在基于分数的模型中,快速修复问题要容易得多。给定一个 bug,你可以很容易地调整这个模型,然后马上把它提供给用户。
6。工程爬坡时间
如果你使用的是众所周知的 ML 模型,一个好的机器学*工程师相对容易适应你的系统。模型从数据中学*,虽然您需要一些时间来了解整个系统,但在开始对模型进行更改之前,您不需要了解模型内部发生的所有细节。
基于分数的模型是手动调整的,在有效地使用它之前,您需要理解模型中包含的所有直觉和权衡。对于一个相当复杂的手工调整的模型,即使是一个好的工程师也可能需要几个月的时间才有足够的上下文来理解多年来在模型工作中形成的所有直觉。这个问题通常随着模特年龄的增长而变得更加严重。
混合 ML/手动调谐系统
如您所见,ML 模型在相关性方面可能更好,但也有一些其他缺点。为了克服这些缺点,大多数使用 ML 模型的搜索引擎使用混合 ML/手动调整系统。在这种情况下,即使你的主要排名模型是一个 ML 训练的模型,你仍然有手动调整的杠杆,如黑名单,约束,或强制排名,以快速修复惊人的错误。注意,如果您这样做,手工调整的组件保持非常简单和易于使用是很重要的,否则您可能最终不得不维护一个相当复杂的 ML 模型和一个相当复杂的手工调整的系统。
对新搜索引擎的建议
对于新的搜索引擎,考虑到上述各种因素,一个好的经验法则是:
- 从手动调谐模型开始。它们更容易预先构建,让您立即投入运行。
- 获得你的初始用户。让他们使用你的搜索一段时间,这样你就可以为你未来的 ML 模型生成良好的训练数据。
- 当你达到这样一个规模,即相关性的增量收益比其余因素更重要时,考虑转向 ML 模型。但是在您开始处理 ML 模型之前,请确保您对“优化度量”问题有一个好的答案。
原载于【www.quora.com】
笔记
[1]TF–IDF
【2】Okapi BM25
【3】为什么机器学*被大量用于谷歌的广告排名而较少用于他们的搜索排名?
【4】Nikhil dande kar 的回答学* RankNet、LambdaRank、LambdaMART 这样的排名和算法的直观解释是什么?
【5】用户需求、功能和必应背后的科学
【6】Nikhil dande kar 对谷歌如何衡量其搜索结果质量的回答?
何时使用卡桑德拉,何时避开
原文:https://towardsdatascience.com/when-to-use-cassandra-and-when-to-steer-clear-72b7f2cede76?source=collection_archive---------1-----------------------
“但是卡珊德拉做得不好!”在部署了 Cassandra 集群并开始使用它之后,您肯定不想听到这样的话。在进行任何投资之前,让我们检查一下 Apache Cassandra 是否与您的任务兼容。那么,应该用卡珊德拉吗?
当答案是“是”的时候
Cassandra 天生适合于繁重的编写工作。节点间的数据分发很快,写入很便宜,这使得卡珊德拉每秒处理几十万次写入操作只是一个普通的星期二。此外,Cassandra 非常好地处理了 繁重的读取工作负载 ,尽管有一些进一步描述的限制。
如果您计划跨 多个数据中心和云可用性区域 进行数据分发,Cassandra 也很适合。您在波士顿和檀香山的用户将访问他们本地的数据中心(速度更快),但将使用相同的数据池。
由于数据复制,Cassandra 适合“永远在线”的应用程序,因为它的集群是 永远可用的 。数据存储在多个节点和多个数据中心,因此如果集群中多达一半的节点(甚至整个数据中心)出现故障,Cassandra 仍然可以很好地管理。
与 Apache Spark 之类的结合,Cassandra 可以成为实时分析的强大‘骨干’。而它 线性缩放 。因此,如果您预期您的实时数据会增长,Cassandra 在这方面绝对有最大的优势。**
当答案是“不”的时候
卡珊德拉在以下方面有局限性:
****酸交易。如果你指望 Cassandra 建立一个支持 ACID 属性(原子性、一致性、隔离性和持久性)的系统,不幸的是,这是行不通的。Cassandra 处理数据的方式不够“严格”:它可能允许部分成功的交易,包含重复、矛盾等等。这就是为什么依赖于 ACID 的系统(例如,处理银行转账的核心银行系统等等)不应该和 Cassandra 一起使用。事实上,没有 NoSQL 技术可以做到这一点:这样的系统需要关系数据库。尽管 Cassandra 有一个旨在保护 ACID 属性的轻量级事务特性,但它还不够好。
****强一致性。为了实现高可用性,Cassandra 牺牲了强一致性,只授予最终一致性。卡珊德拉有补救措施,但这不足以解决精度要求高的问题。“补救措施”之一是调整数据库,使其不复制数据,但这就扼杀了 Cassandra 的王牌——可用性。
大量的更新和删除**。卡珊德拉在写作方面令人难以置信(以下是这一惊人写作表现的原因)。但它只是面向追加的。如果你需要更新很多,Cassandra 并不好:对于每次更新,它只是添加一个具有相同主键的“年轻”数据版本。想象一下,对于读操作来说,在它们的“相似”池中找到所需的数据版本是多么痛苦。此外,Cassandra 处理删除的方式类似:它向数据添加一个墓碑,而不是实际删除它。因此,针对同一主键的读取会发现大量“不死”数据,而不仅仅是最新值。有时会进行压缩,所有不必要的数据都会被删除,但是在压缩之间,读取时间会更长。**
****大量扫描。卡珊德拉阅读数据非常好。但是只要知道想要的数据主键就很好读。如果你不这样做,Cassandra 将不得不扫描所有节点来找到你需要的,这将需要一段时间。如果超过等待时间阈值,扫描将根本无法完成。
“确定”时的真实用例
为了更清楚地描述何时使用 Cassandra,我们给出了一些最流行的用例。
传感器数据
Cassandra 的数据模型的组织方式以及 Cassandra 专为密集型写入工作负载而设计的事实使其非常适合传感器数据。它 适合完全不同的行业 ,无论是制造、物流、医疗保健、房地产、能源生产、农业还是其他。无论传感器类型如何,Cassandra 都能很好地处理传入的数据流,并为进一步的数据分析提供可能性。
信息系统
消息系统(聊天、协作和即时消息应用等。)对 Cassandra 来说就像传感器数据一样完美,因为它们不需要数据更新。Cassandra 可以快速编写新收到的信息,允许快速阅读和其他附加功能。例如,你可以给消息一个“生存时间”,当这个时间用完时,Cassandra 会删除它,避免昂贵的墓碑和压缩。
电子商务网站
数据模型设计、面向写入、相当快的读取速度和线性可伸缩性使 Cassandra 适合于具有类似 产品目录 和 推荐或个性化引擎 等功能的电子商务网站。对于后者,Cassandra 可以存储属于同一细分市场的访问者的活动,这些访问者彼此靠*,这将允许分析工具快速访问数据,例如,为想要离开网站的用户提供诱人的建议。
娱乐网站
Cassandra 还帮助各种娱乐网站跟踪和监控用户的活动。它存储了用户看过、玩过、读过或听过的电影、游戏、文章或歌曲的数据,以及他们在每项活动上花费的时间等。然后,Cassandra 可以将这些数据输入分析工具,向用户推荐他们可能喜欢的其他电影、游戏、文章或歌曲。
银行欺诈检测
尽管 Cassandra 不太适合银行账户之间的转账,也不太适合 ACID 交易,但银行仍然可以从中受益。他们为分析客户数据而构建的大数据解决方案可以通过启用 欺诈检测 为客户提供额外的安全级别。Cassandra 做得非常出色,它通过与 Apache Spark 的无缝集成提供了很高的速度和对实时分析的支持。
小测验
卡珊德拉不是银弹,就像任何 NoSQL 数据库不是。它有自己的优点和缺点要考虑。如果你想检查你对它们的记忆程度,这里有一个小测验:
1.Cassandra 可以在多个同步的数据中心上运行吗?
2.Cassandra 可以与哪些技术配合使用来进行实时分析?
3.Cassandra 在升级和密集写入方面做得如何?
4.Cassandra 适合一个需要 ACID 事务,扫描,删除,更新的项目吗?
5.卡珊德拉的典型特征是什么:强一致性还是持续可用性?
然而,最大的问题是:你应该使用卡桑德拉还是避开它?现在,你已经掌握了做出这个重要决定的所有背景信息。
堆栈溢出何时回复:如何用 BigQuery 预测
原文:https://towardsdatascience.com/when-will-stack-overflow-reply-how-to-predict-with-bigquery-553c24b546a3?source=collection_archive---------14-----------------------
Stack Overflow predictions: You can play with this interactive dashboard!
当你最后发布一个关于栈溢出的问题时,一个漫长的等待就开始了。有人会回答你的问题吗?社区会否决你的问题,认为你的问题不好吗?有人会给你答案吗?他们回答了吗?我们能预测这些吗?就这么办吧。
Stack Overflow stats per month
我喜欢堆栈溢出。它回答了我的大多数编程问题,如果没有,我可以发布一个新的。正常情况下,一个月会有超过 120,000 名用户提出新问题,超过 75,000 名社区成员随时准备提供帮助。我知道,因为我两边都去过。
BigQuery 为提供了许多公共数据集,其中之一是 Stack Overflow 的季度更新副本。我们可以使用这些数据和最*发布的 BigQuery ML 特性来预测需要多长时间来回答您的堆栈溢出问题。
你刚刚发布了一个关于堆栈溢出的问题吗?在您等待的时候,让我们回顾一下这些预测是如何运行的。
背后的科学
第一步是测量用户在堆栈溢出的人给他们一个答案之前要等待多长时间。我们将从 BigQuery 中的问题表中得到这个,并通过一个相关子查询得到答案:
Average time to get an answer on Stack Overflow, per tag. Keep reading, because we’ll debunk these numbers in a few.
将答案与问题结合起来的基本查询,产生问题与其第一个答案之间的时间:
WITH question_answers_join AS (
SELECT *
, GREATEST(1, TIMESTAMP_DIFF(answers.first, creation_date, minute)) minutes_2_answer
FROM (
SELECT id, creation_date, title
, (SELECT AS STRUCT MIN(creation_date) first, COUNT(*) c
FROM `bigquery-public-data.stackoverflow.posts_answers`
WHERE a.id=parent_id
) answers
, SPLIT(tags, '|') tags
FROM `bigquery-public-data.stackoverflow.posts_questions` a
WHERE EXTRACT(year FROM creation_date) > 2016
)
)SELECT *
FROM question_answers_join
WHERE 'google-bigquery' IN UNNEST(tags)
AND answers.c > 0
ORDER BY RAND()
LIMIT 10
Some sample questions — when were they posted, how long it took to get an answer.
这是一个好的开始,让我们来看看一些流行标签的平均价格:
SELECT COUNT(*) questions, tag
, ROUND(**AVG((minutes_2_answer)**), 2) avg_minutes
FROM question_answers_join, UNNEST(tags) tag
WHERE tag IN ('javascript', 'python', 'rust', 'java', 'php', 'ruby', 'perl', 'ios', 'android', 'angularjs')
AND answers.c > 0
GROUP BY tag
ORDER BY avg_minutes
Naive average time per tag to get an answer.
事实证明 Perl 拥有最令人惊奇的社区:它是回复最快的!其次是 Rust、Ruby、PHP。最慢的社区是 Android 和 iOS。在这之间你有…停在那里
警告:普通平均值在这里是不好的。相反,我们将计算几何平均值。
我不会在这里详细解释为什么普通平均值不好——但是您应该注意的第一件事是,这些数字告诉我们,我们必须等待几天才能得到关于堆栈溢出的回复——这并不反映我们的正常体验。为了减少异常值的影响,我们可以要求使用几何平均值和中位数来代替:
SELECT COUNT(*) questions, tag
, ROUND(EXP(AVG(LOG(minutes_2_answer))), 2) mean_geo_minutes
, APPROX_QUANTILES(minutes_2_answer, 100)[SAFE_OFFSET(50)] median
FROM question_answers_join, UNNEST(tags) tag
WHERE tag IN ('javascript', 'python', 'rust', 'java', 'php', 'ruby', 'perl', 'ios', 'android', 'angularjs')
AND answers.c > 0
GROUP BY tag
ORDER BY mean_geo_minutes
Geometric mean and median time to get an answer in Stack Overflow per tag
这更有意义:你的 JavaScript 问题将在 35 分钟内得到回答,而 Rust、Android 和 iOS 问题将需要一个多小时才能出现。
我们也可以计算得到答案的几率:
SELECT COUNT(*) questions, tag
, ROUND(EXP(AVG(LOG(minutes_2_answer))), 2) avg_minutes
, FORMAT('%.2f%%', 100***COUNT(minutes_2_answer)/COUNT(*)**) chance_of_answer
FROM question_answers_join, UNNEST(tags) tag
WHERE tag IN ('javascript', 'python', 'rust', 'java', 'php', 'ruby', 'perl', 'ios', 'android', 'angularjs')
GROUP BY tag
ORDER BY avg_minutes
Perl、Ruby 和 Rust 在这里看起来不错:从我们的选择中,这些是仅有的回复率高于 80%的标签。有趣的是,这些标签比其他标签得到的问题少得多。
Time to answer vs chance of answer: iOS and Android are the slowest to reply, while they also have the lowest chance of replying. Perl has a high probability of getting a reply. Meanwhile Javascript, Python and PHP have more questions than Perl, and are quicker to reply. (DS source)
现在,我们可以探索很多其他的变量:是在周一还是周六需要更多的时间来得到答案?新栈溢出用户比资深用户得到更快的回复?用哪个词开始提问很重要吗?问题不用问号结尾有关系吗?更长的问题还是更短的问题?一天中的什么时候?让我们来回答所有这些问题:
First word: Most people ask ‘how’ questions. ‘Can’ take longer to answer than ‘why’s.
Day of week (UTC): More questions during the week, faster answers, but with a lower probability of answer.
Hour of the day (UTC). Faster answers — with lower chance of getting an answer: 14:00 UTC, which is 7am in California. The opposite at 00:00 UTC, 5pm California.
Account creation year: New users get quick replies. Veteran users ask questions that take longer to reply, but more of their questions are replied. Note there seems to be a linear relationship between account age and time to answer, but a non-linear one with probability of answer.
Length of question: Shorter questions are easier to answer, and with a higher chance.
Did they use a ?: Questions that end with a question mark get quicker answers with a higher chance?
我获取所有这些维度的基本查询:
WITH answers AS (
SELECT *
, REGEXP_EXTRACT(LOWER(title), '[a-z]+') first_word
, '?' = SUBSTR(title, LENGTH(title)) ends_question
, GREATEST(1, TIMESTAMP_DIFF(answers.first, creation_date, minute)) minutes_first_answer
, answers.c > 0 was_answered
FROM (
SELECT creation_date, title
, CASE WHEN LENGTH(body)<700 THEN 'short' WHEN LENGTH(body)<1700 THEN 'medium' ELSE 'long' END question_length
, (SELECT AS STRUCT MIN(creation_date) first, COUNT(*) c
FROM `bigquery-public-data.stackoverflow.posts_answers`
WHERE a.id=parent_id
) answers
,(SELECT AS STRUCT EXTRACT(year FROM creation_date) account_creation_year
FROM `bigquery-public-data.stackoverflow.users`
WHERE a.owner_user_id=id
) user
, SPLIT(tags, '|') tags
FROM `bigquery-public-data.stackoverflow.posts_questions` a
WHERE EXTRACT(year FROM creation_date) > 2016
)
)SELECT tag, 60*EXP(AVG(LOG(minutes_first_answer ))) time_to_answer, COUNT(minutes_first_answer)/COUNT(*) chance_of_answer
, COUNT(*) questions
-- first_word, ends_question, tag
-- , FORMAT_TIMESTAMP('%H', creation_date) hour_utc
-- , FORMAT_TIMESTAMP('%A', creation_date) weekday_utc
-- , user.account_creation_year
-- , question_length
FROM answers, UNNEST(tags) tag
WHERE tag IN ('javascript', 'python', 'rust', 'java', 'php', 'ruby', 'perl', 'ios', 'android', 'angularjs')
--AND first_word IN UNNEST(['why','what','how','is','can', 'i'])
GROUP BY 1
结合一切:回归!
那么我们如何综合所有这些平均值呢?如果我在周四下午 3 点有一个简短的 SQL 问题,并且我自 2009 年以来一直是一个堆栈溢出用户,该怎么办?我的问题以“什么”开头,我会确保以提问的形式提问。我们能不能创建一个公式,囊括所有这些指标,即使以前没有人尝试过这种组合?
是啊!这就是为什么 BigQuery 现在支持线性和逻辑回归(期待更多)。跟我的朋友打个招呼, BigQuery ML 。
要创建一个线性回归模型,将所有这些特征组合成一个预测,预测您需要等待多长时间才能得到答案,只需执行以下操作:
CREATE MODEL `dataset.stacko_predicted_time`
OPTIONS (model_type='linear_reg' ) ASSELECT first_word, ends_question, tag
, FORMAT_TIMESTAMP('%H', creation_date) hour_utc
, FORMAT_TIMESTAMP('%A', creation_date) weekday_utc
, user.account_creation_year
, question_length
, **LOG(minutes_first_answer) label**
FROM answers, UNNEST(tags) tag
WHERE was_answered
该查询涉及 3,784,571 个问题及其回复,超过 46,178 个不同的标签。您可能会注意到,我为他们的每个标签复制了问题(当他们有多个标签时),这样总共有 11,297,337 行。这可能会给一些标签一个不公平的平衡,但我们可以稍后再讨论。训练这个模型花了多长时间?6 分钟,我最后一次尝试。
Different instances of training this model .
一些统计数据:
SELECT processed_input, weight
, ARRAY(SELECT AS STRUCT * FROM UNNEST(category_weights) WHERE weight<0.7 ORDER BY RAND() DESC LIMIT 2) category_weights
FROM ML.WEIGHTS(MODEL `dataset.stacko_predicted_time`)SELECT *
FROM ML.EVALUATE(MODEL `dataset.stacko_predicted_time`)
要检查这些值的含义,请参见机器学*词汇表,或者参见莎拉·罗宾逊的预测 CPU 性能中对不同预测的类似值的分析。在试图赋予权重意义之前,请检查上的 Lak Lakshmanan 为什么机器学*模型中的特征权重是无意义的。
对于 6 分钟的实验来说,还不错。我们可以做很多改进,但现在让我们继续。
训练答案的概率同样简单,只是这次用了逻辑回归:
CREATE MODEL `dataset.stacko_predicted_answered`
OPTIONS (**model_type='logistic_reg'**) ASSELECT first_word, ends_question, tag
, FORMAT_TIMESTAMP('%H', creation_date) hour_utc
, FORMAT_TIMESTAMP('%A', creation_date) weekday_utc
, user.account_creation_year
, question_length
, **IF(was_answered, 1, 0) label**
FROM answers, UNNEST(tags) tag
哦,如果没有时态表answers
,上面的查询将无法工作,它具有我们建模的特性:
WITH answers AS (
SELECT *
, REGEXP_EXTRACT(LOWER(title), '[a-z]+') first_word
, '?' = SUBSTR(title, LENGTH(title)) ends_question
, GREATEST(1, TIMESTAMP_DIFF(answers.first, creation_date, minute)) minutes_first_answer
, answers.c > 0 was_answered
FROM (
SELECT creation_date, title
, CASE WHEN LENGTH(body)<700 THEN 'short' WHEN LENGTH(body)<1700 THEN 'medium' ELSE 'long' END question_length
, (SELECT AS STRUCT MIN(creation_date) first, COUNT(*) c
FROM `bigquery-public-data.stackoverflow.posts_answers`
WHERE a.id=parent_id
) answers
,(SELECT AS STRUCT EXTRACT(year FROM creation_date) account_creation_year
FROM `bigquery-public-data.stackoverflow.users`
WHERE a.owner_user_id=id
) user
, SPLIT(tags, '|') tags
FROM `bigquery-public-data.stackoverflow.posts_questions` a
WHERE EXTRACT(year FROM creation_date) > 2016
)
)
预测
一旦创建了模型,您就可以使用如下查询来预测任何类型的组合:
SELECT * FROM ML.PREDICT(
MODEL `fh-bigquery.bqml_models.stacko_201809_time`
, (
SELECT 'why' first_word
, true ends_question
, 'google-bigquery' tag
, '7' hour_utc
, 'Monday' weekday_utc
, 2013 account_creation_year
, 'short' question_length
)
)
Prediction results
并在一个查询中组合所有 3 个模型:
WITH features AS (
SELECT 'why' first_word, true ends_question
, 'google-bigquery' tag, '7' hour_utc
, 'Monday' weekday_utc, 2013 account_creation_year
, 'short' question_length
)SELECT predicted_label minutes, * EXCEPT(predicted_label)
FROM ML.PREDICT(
MODEL `fh-bigquery.bqml_models.stacko_201809_time`
, (SELECT
(SELECT prob FROM UNNEST(predicted_label_probs) WHERE label=1 LIMIT 1) prob_down
, * EXCEPT(predicted_label, predicted_label_probs)
FROM ML.PREDICT(
MODEL `fh-bigquery.bqml_models.stacko_201809_downvoted`
, (SELECT
(SELECT prob FROM UNNEST(predicted_label_probs) WHERE label=1 LIMIT 1) prob_answer
, * EXCEPT(predicted_label, predicted_label_probs)
FROM ML.PREDICT(
MODEL `fh-bigquery.bqml_models.stacko_201809_answered`, TABLE features
)
)
)
)
)
1 query, 3 predictions
为结果服务
你可能想知道“这个交互数据工作室仪表板怎么会这么快?”,或者“将 Data Studio 连接到 BigQuery 的成本是多少”?我们将不得不把这段对话留到以后的文章中,但现在先预览一下:
- 为了将 Data Studio 连接到用于公共仪表板的 BigQuery,在中间使用一个层。看我和 Minhaz Kazi 关于这个话题的对话。
- 我预先生成了所有 4000 万个结果组合——使用 BigQuery 很容易。
- 这 4000 万个结果由云 SQL MySQL 数据库提供服务,该数据库拥有完美的索引,可以快速提供服务。加比会告诉你所有的事情。
- 查看 Lak Lakshmanan 的帖子导出并在其他地方使用权重。
感谢
感谢大家的牛逼点评:凯西·科济尔科夫、拉克什马南、弗兰克·范·普弗伦、萨拉·罗宾逊、阿布舍克·卡什雅普、史蒂夫·切里尼。
后续步骤
想要更多的故事?查看我的媒体,关注我的推特,订阅reddit.com/r/bigquery。试试 BigQuery 吧——每个月你都可以从免费的网站上获得一个完整的万亿字节的分析。
[## 这些是真正的堆栈溢出趋势:使用页面视图
直到今天,获得 Stack Overflow 的季度浏览量并不容易。了解如何获得这些…
towardsdatascience.com](/these-are-the-real-stack-overflow-trends-use-the-pageviews-c439903cd1a)
当你作为数据科学家的工作完成后
原文:https://towardsdatascience.com/when-your-job-is-done-as-a-data-scientist-c5d887bb0d0e?source=collection_archive---------7-----------------------
如何应对不确定性并开展有影响力的工作
Source: Unsplash
灰色的世界
有充分的证据表明,数据科学的成长和发展非常迅速。很难相信,自《哈佛商业报告》宣布数据科学家是最性感的工作已经过去五年了。自那篇文章发表以来,该领域无疑取得了长足的进步。
话虽如此,但我认为我们仍然知之甚少。
重要的是要明白,从本质上讲,数据科学是一门静止的科学。在科学中,很少有具体的东西。总是有新的发现、出版物和研究出现,改进了以前的工作。科学在这方面是极其反复的。
“一个重要的观点是,科学是一种实现学*的手段,一方面不是通过纯粹的理论推测,另一方面也不是通过实践事实的无指导的积累,而是通过理论和实践之间的有动机的迭代”——乔治·e·p·博克斯
数据科学也不例外。迭代对我们的日常工作至关重要。无论我们是在改进以前的机器学*模型,探索关键指标的趋势,还是调查一个复杂的问题,都归结为迭代。
作为数据科学家,很少有非黑即白的事情。我们在灰色的世界里工作。
对许多人来说,这是这个职业的后果——是一件坏事。然而,我不敢苟同。至少对我来说,所有的灰色都代表着无限的可能性。
它们代表了无限的分析和解决问题的方法。正是它们让数据科学对如此庞大的人群如此具有挑战性和趣味性。最重要的是,它们让聪明人能够在数据科学及其他领域产生影响。
产生影响
至少在行业中,数据科学家被雇佣来为决策提供信息并对业务产生影响。您所做的所有幕后探索性数据分析和可视化通常会在报告或某种明智的决策中体现出来。
你可能也注意到了,无论你是在小公司还是大公司,时间都是你最宝贵的资源。总会有另一个问题需要回答,另一个特性需要分析,另一个模型需要构建。
对于你和你的团队的成功来说,你必须毫不留情地对待你的时间和优先事项。
因此,考虑到这一点,让我们回到手头的问题…
我什么时候发货?
决定什么时候完成一个项目,然后转移到下一件事情上并不容易。像数据科学中的许多事情一样,这个问题通常不会有一个正确的答案。
然而,这并不意味着我们不能在简单的启发式的帮助下更容易做出这个决定。在一天结束时,这一切都归结于你的工作的影响。
这篇文章的灵感来自于当地乐观人士的一篇精彩文章,其中写道:
“如果他们不能对我们的输出做出决定,那么你的工作就没有完成。”
和大多数启发式方法一样,这有点一般化,但是我相信这是非常有用的。
作为数据科学家,我们需要更好地不断提醒自己,我们的主要关注点应该是推动影响。
如果你已经完成了做出明智决定所需要的东西,那么就把工作交付出去,继续你待办事项中的下一个任务。一个常见的错误是让你自己陷入的困境,在复杂的事情上花费太多时间,却没有可操作的见解。
包扎
坐在这里结束“产生影响”很容易,但我认为这低估了我想说的。创作有影响力的作品应该一直在你的脑海中占据首要位置。无论你在做什么项目,这都应该是你优先考虑的事情。对于工业界的数据科学家来说,这应该是一种边缘困扰。
这看起来相当简单,但是你可能会发现在实践中实现起来比听起来要困难得多。这可能需要你做一些深思熟虑的工作和磕磕绊绊,但有了你的建议,我相信你会度过难关。
感谢阅读!如果你喜欢这篇文章,请继续向鼓掌按钮展示你的爱。对更多的帖子感兴趣吗?请务必关注我并订阅下面的我的简讯以接收任何新内容。想了解更多关于我和我在做什么,请查看我的网站。
人工智能和人工智能在市场营销中的发展方向
原文:https://towardsdatascience.com/where-ai-and-ml-in-marketing-is-headed-6b651f5f7eaa?source=collection_archive---------11-----------------------
人工智能(AI)和机器学*(ML)是当今广告界的前沿,因为这些技术提供了将工具和数据集转化为有价值的营销见解的机会,从而有助于提高公司的投资回报率。现在,人工智能和人工智能比以往任何时候都更有价值,因为最*开发了比以往任何时候都更先进的负担得起和可访问的数据分析工具。
企业能够实现更大、更丰富的数据集,以过去成本的一小部分来宣传自己,从而改善决策。人工智能和人工智能在营销中的应用也越来越被广泛接受,成为积累数据和优化利用数据以增加利润的必要步骤。WorkFusion 通过其智能流程自动化机器人提供了这样的解决方案,可以同时收集和分析来自多个来源的数据。
以下是公司利用这些技术领先于竞争对手的三种方式。
1)人工智能使用大量数据来识别有价值的模式
营销人员在数据驱动的广告中面临的一个常见问题是,存在大量带有噪声数据的数据源、分析包和营销软件服务,如果没有适当的技术来分析这些数据,很难对这些数据进行分类。公司正在寻求以一种比当前解决方案更省时、成本更低的方式将洞察整合到所有这些工具中。
解决这一困境的一种方法是使用人工智能分析来收集所有这些工具、平台和数据集的输出,以帮助确定有助于未来决策的新模式。通过分析分析,企业可以使用人工智能来确定这些数据如何与消费者相关的更综合的想法,从而更容易知道最佳营销技术是什么,以及这些技术应该推广到什么平台。其中一个帮助你满足营销需求的工具就是 WorkFusion 的 RPA Express ,它集成了核心系统并自动执行任务。
2) ML 有助于创造更高级的客户互动
与消费者建立直接关系是任何企业取得成功的重要因素,*年来,许多公司都在利用 ML 扩展他们的客户服务和其他消费者对话工具。这里的关键是摆脱传统的内容营销工具,使这些沟通更加以客户为中心。通过这样做,公司将能够在正确的时间向正确的人提供正确的内容。
虽然聊天机器人和语音自动化命令已被证明在加强与消费者的关系方面很有价值,但公司现在正朝着这些技术的下一步发展。微软就是这样一家公司,它使用 ML 开发多感官体验,检查客户的视觉、声音、触觉、手势甚至凝视,以便与他们进行模拟真实事物的全面互动。
3。人工智能带来更加个性化的消费者体验
有很多营销个性化工具被用来为客户创造真正个性化的体验。这些工具收集消费者的信息,并定制营销工具来接触这些消费者。人工智能在这方面变得越来越复杂,因为他们正在学*更多关于个人的数据,为他们提供更个性化的购物或营销体验。
人工智能平台依赖于一个预测积分系统,该系统可以监控客户何时开始他们在零售或在线服务网站上的旅程。然后,该工具会跟随客户的整个旅程,在整个旅程中为他们提供独特的内容。
底线…
如今,将人工智能应用到他们的业务中对于寻求优化营销的公司来说至关重要。这项技术可以帮助整理大型数据集,对它们进行分类,并根据这些信息提出营销建议。此外,ML 有助于使营销体验对消费者更具针对性和个性化,确保正确的产品和服务被广告给正确的人。
有了所有可用的人工智能营销工具,公司正在改造传统的营销技术和数据库,以换取先进的分析和数据处理技术,这些技术将增加消费者流量,并从长远来看提高他们的投资回报率。
乔治亚理工学院 OMSCS 的女性在哪里?
原文:https://towardsdatascience.com/where-are-the-women-in-georgia-techs-omscs-53f16153dfc5?source=collection_archive---------7-----------------------
基于在线计算机科学硕士课程的学生调查和成绩数据的分析。
介绍
2014 年 1 月,佐治亚理工学院迎来了其在线计算机科学硕士(OMSCS)项目的第一批学生。然而,截至 2018 年春季,女性仅占 OMSCS 学生总数的 14.9%。
这低于佐治亚理工学院计算机科学硕士项目中女性的比例,也低于美国每年计算机科学硕士项目中已经非常低的女性毕业比例。
对于一个以使更多的学生能够接受高水平、先进的计算机科学教育为具体目标的项目来说,这个统计数字低得惊人。
因此,利用从 2015 年夏季至 2016 年秋季开设的三个 omsc 班的 854 名不同学生(123 名女性,715 名男性,16 名未知)中收集的课程调查和成绩数据,以及从 160 名过去和现在的 omsc 学生(57 名女性和 103 名男性)的在线调查中收集的数据,我决定调查为什么会出现这种情况。
相同但不同
在我的分析中,我调查了一系列可能对 OMSCS 中的女性人数产生负面影响的不同变量,以了解它们在性别上的差异。特别是,我探索了以下方面的差异:人口统计学;学*成绩;OMSCS 前的计算经验;自信;和归属感。
然而,有趣的是,男性和女性之间的相似性,而不是差异,可能是 OMSCS 学生中存在性别差距的最大原因之一。
Figure 1: Comparison of field of highest educational attainment by gender
如图 1 所示,男性和女性 OMSCS 学生最有可能来自计算机科学或工程教育背景。考虑到 OMSCS 项目的主题,这并不奇怪。
然而,计算机科学和工程是所有教育学科中性别最不平衡的两个。在经合组织国家,女性仅占所有工程专业毕业生的 24%,仅略高于女性占计算机专业毕业生的 21%。
如果 OMSCS 主要从由 75%到 80%的男性组成的群体中吸引学生,那么不可避免的是,该项目录取的大多数学生也将是男性。
信心游戏
在被 OMSCS 项目录取的学生中,女性先前获得高等学位(即硕士或博士学位)的可能性高出 44%,并且在学术上与男性同学表现一样好。
然而,尽管如此,有证据表明,与男生相比,omsc 女生对自己的计算能力缺乏信心,特别是在编程方面,并且对 omsc 和计算的归属感较低。
Figure 2: Comparison of confidence in succeeding at OMSCS (left) and average level of agreement with statements relating to self-confidence, equality and belonging (right) by gender
图 2 显示,在开始 OMSCS 之前,女性对自己在项目中取得成功的能力的信心平均比男性低 20%,即使在开始研究之后,女性对自己取得成功的能力的信心仍然比男性低 7%。
它还表明,尽管 omsc 的女生有更强的性别平等意识,但她们对 omsc 的归属感以及对计算机科学的归属感总体上比男生弱。
Figure 3: Comparison of pre-OMSCS programming experience (left) and computer science work experience (right) by gender
对此的一个可能的解释是,如图 3 所示,女性 OMSCS 学生通常在编程经验和计算机科学工作经验较少的情况下进入该计划,并且之前在大学水平上学*计算机科学的可能性比男性低 32%。
即使考虑到年龄等其他变量,男性在 OMSCS 之前的编程和计算机科学工作经验也明显比女性多。
计算机科学/omsc 的归属感较低也可能是女性比例较低的结果,不仅是在 omsc 的学生中,而且在 omsc 的教师中,2018 年秋季开办的 28 个班级中只有两个班级有女教师。
与男生相比,在 OMSCS 女生中观察到的对计算技能的自信心水平较低、对计算机文化的归属感较低以及对计算经验的接触较少,这与以前关于缺乏女性参与计算机科学的原因的调查结果相一致。
解决办法?
如果佐治亚理工学院真的想利用 omsc 计划作为一种手段,使计算机科学教育更加普及,那么它就有义务做出认真和持续的承诺,吸引合适的合格女性加入 omsc,并增加女性对该计划的参与。
有可能促进女性参与组织管理中心的三项举措包括:
1。扩大潜在女性 OMSCS 申请人的范围
在经合组织国家,女性占所有数学和统计学毕业生的 44%,占物理科学毕业生的 44%,是女性计算机科学和工程毕业生比例的两倍多。
OMSCS 的录取标准中没有任何东西阻止来自这些教育背景的人获得该项目的录取。
积极向计算机科学相关领域的女性推销 omsc,但女性比例较高,如数学/统计或物理科学,不会损害 omsc 目前的招生标准,并可能导致 omsc 招聘活动接触到更多的女性。
2。为学生提供建立计算机科学和编程能力信心的机会
在加入 OMSCS 这样的项目时,女性在技能和信心方面都处于劣势。为什么不为女性提供一种方法来弥补这一点,弥补她们技能上的差距呢?
这可以采取为最*被录取或正在考虑申请的人准备课程的形式,甚至可以采取“微型硕士”计划的形式,成功完成该计划可以保证进入 OMSCS。
为很少或没有编程经验的学生提供参与计算机科学的途径已被成功地用于解决美国其他大学本科女生经历的计算机科学信心问题,促使这些大学计算机科学专业女生的比例大幅上升。
3。通过为 OMSCS 女生创建可见的角色模型,建立女性对计算机科学的归属感
OMSCS 计划中几乎完全没有可见的女性榜样。对于未来的 omsc 女性申请者和 omsc 女性学生在计算机科学中的位置,这传递了什么信息?
在大学阶段,受到榜样鼓励的女孩比没有受到榜样鼓励的女孩更有可能主修计算机科学,这种可能性是没有榜样鼓励的女孩的四倍多。为什么不将同样的理念应用于 OMSCS 呢?
可以通过教师中更大的性别多样性,通过为女生创造与计算机科学领域的女性互动并接受其指导的机会,为女生创造可见的榜样,无论她们是其他 OMSCS 学生,还是佐治亚理工学院的计算机科学研究人员。
结论
自 20 世纪 80 年代中期以来,攻读计算机科学学位的女性比例直线下降。
作为美国最大的计算机科学硕士项目,佐治亚理工学院的 OMSCS 项目有可能帮助扭转这一趋势,但迄今为止,佐治亚理工学院 OMSCS 项目录取的女生比例甚至低于其同等的校内计算机科学硕士项目。
其他大学的经验表明,通过认真和持续的投入,有可能显著提高女性在计算机科学领域的参与度,为此,我提出了佐治亚理工学院可以实施的三项举措。
据估计,OMSCS 项目有可能将美国计算机科学硕士学位持有者的人数增加 8%。想象一下,如果这些人中有一半是女性,对计算机科学性别差距的影响。
要了解关于这个分析的更多信息,请访问这个项目的 GitHub 资源库,这里有。
Genevieve Hayes 博士是数据科学家、教育家和人工智能及分析专家,拥有Genevieve Hayes Consulting。你可以在LinkedIn或者Twitter上关注她。她还是 价值驱动数据科学 的主持人,这是一个每月两次的播客,面向希望最大化其数据和数据团队价值的企业。
想要发掘企业数据的价值,但不知道从哪里开始?**下载免费的数据科学项目发现指南。
我能从我的家乡飞到哪里?
原文:https://towardsdatascience.com/where-can-i-fly-to-from-my-home-town-72aaf5b3b223?source=collection_archive---------13-----------------------
任何经常旅行的人都想知道航空公司从他们居住的地方提供什么路线。通常的方法是使用航班搜索服务,如 Skyscanner 、 Google Flights 或 Momondo ,并动态地发现答案(同时检查机票价格),但作为数据科学家,我们可以用更系统的方式来做这件事。
当然,为此我们需要一个静态的、组织良好的路线数据库。幸运的是, OpenFlights 已经为我们收集了这些数据,这些数据来自:
- 机场(另外还有火车站和轮渡码头)。
- 航空公司。
- 实际飞行路线。
你可以从他们的网站或者从 Kaggle 下载这些数据,在那里他们友好地将以上 3 个数据集分发给社区。这些是通过不同 id 匹配的 CSV(例如,路线从一个机场 id 到另一个机场 id),因此我们首先要做的是合并所有信息。 熊猫 来救援了!
Reading and merging info
这看起来有点令人不知所措,但我们只是读取 3 个来源,过滤一些东西(例如,只有机场-没有车站-和直接路线-没有中途停留-),防止丢失值,并连接 3 个表。 df 中的最终结果是一个数据帧,包含:
- 出发地机场的位置、名称和城市。
- 目的地机场的位置、名称和城市。
- 运营该航线的航空公司。
现在我们已经有了所有的数据,是时候可视化并回答一些有趣的问题了。我一直对记录和极限很感兴趣,问这种"最大/最高/最长……"的问题?在这种情况下,我想到的一些问题是:
- 出发/抵达路线最多的国家/城市有哪些?
有两个明显胜出的国家:美国(亚特兰大、芝加哥、纽约、洛杉机、达拉斯……)和中国 ( 上海、北京、香港……)。然而,他们的许多路线都是国内的,所以如果我们只考虑城市,那么也有像伦敦、巴黎或莫斯科这样的欧洲枢纽站在第一位。以上是进来的路线:如果你考虑出去的路线,它几乎是相同的故事,因为大多数路线是对称的(如果有从 X 到 Y 的路线,也有从 Y 到 X 的相同路线)。
- 航线最多/飞往最多国家的航空公司有哪些?
不出意外,美国 ( 美国 , 美联航 , 达美……)和中国 ( 南航 , 国航 , 东航……)航母占优,但而 易捷 的航线比 汉莎 或 荷航 多,这是我没想到的。同样,国内航班的效果非常显著:如果你有兴趣访问尽可能多的国家,你最好选择 法航 或 土耳其航空 而不是美国航空公司(更不用说中国航空公司,因为它们基本上是在中国周边飞行,所以不在此列)。另一个惊喜是,如果一些非洲航空公司名列前茅,你会说埃塞俄比亚航空公司比阿联酋航空公司更国际化吗?我打赌不会!
那么,作为两种观点的混合,你能猜出我们从哪些城市到达大多数国家吗?对,基本上就是上述航空公司的总部(法国航空的巴黎,英国航空的伦敦,德国汉莎航空的法兰克福等等)。从现在开始,我将使用这些:
Cities with routes to most countries
关于获得上面的情节的一些提示:我使用了holo views,这是一个非常强大的可视化库,它建立在 Python 中使用最广泛的两个可视化工具(即 bokeh 和 matplotlib )之上。 Holoviews 与 pandas 巧妙集成,允许通过 3 个步骤抽象绘图来绘制数据帧的信息:
- 选择类型的图(散点图、条形图、热图等)。).
- 建立关键维度(用他们的行话来说就是 kdims ),也就是确定要绘制的信息部分的维度。
- 建立值尺寸 ( vdims ),即将要在图中显示的变量。
因此,为了从城市获得国家的条形图,我们可以:
我按城市分组,统计了他们飞往的不同国家,挑选了 30 个最国际化的国家,然后选择了一个 holoviews 条 图,其中航空公司作为关键维度(x 轴,每个条与谁相关),目的地国家作为值维度(y 轴,条的高度)。然后,我使用了一些可用的选项,使情节看起来更好。
顺便说一下,上面的图片是静态的,但 holoviews 会生成交互式的图:例如,如果你将鼠标悬停在一个条上,就会出现一个图例:看看这个下载并运行 完整代码 !
太好了,我们离我们的目标越来越*了,给定一个城市,我们可以飞到哪里。如果我们能画出一张显示全球路线的图表,那就太酷了。 Holoviews 还提供了一个 图形 对象与交互支持,但是地球地图呢?一种选择是用国家多边形(例如,用我的上一篇文章的国家地理数据框)构建一个 多边形 对象,并用图形覆盖它,但是我们可以在全息视图上使用另一个库: 地理视图 。
所以,这个想法很简单。给定一个城市,我们必须:
- 从 df 中选择从该城市出发的路线。
- 从这些航线中,选择所有涉及的机场(出发地和目的地)。
- 用这些机场的位置建立图节点。
- 用所选路线连接的机场建立图边。
- 调整图形选项以获得更好的可视化效果。
由于一些小细节,代码相当长,例如可能有一个以上的源机场(例如,巴黎有戴高乐机场和奥利机场)以及我希望交互显示的信息(可读且不太长的名称、运营每条航线的航空公司等)。) :
马德里的结果看起来是这样的(这里也是静态的,但是如果你下载并运行完整的代码,你可以用蓝色和黄色突出显示每条路线,并且它的信息显示在交互式图例中):
Routes from Madrid (straight line version)
对于最后的绝技,让我们利用直线并不是飞机实际遵循的路线这一事实。听说过 测地线 吗?嗯,令人悲伤的事实是,给定两个城市,它们之间的最短路线不是直线,因为它们位于地球的球面上,而不是平面几何形状。例如,我今年夏天从北京飞往马德里,航线经过贝加尔湖和西伯利亚,所以它比上面显示的线更靠北。我们能改变路线来反映这一点吗?
是的,我们可以。 Python 也有专门为测地线、投影和制图设计的库,比如pyproj和shapely。我们没有给出图 edgepaths=None ,而是使用可选参数测地线显式构建路径,并将其传递给函数 routes_from :
所以现在的结果更加真实:
Flights from Madrid (geodesic version)
但是仍然有一个警告。如果我们尝试用大多数路线生成之前看到的 30 个城市的图表,有些情况下会失败。以纽约为例:
Flights from New York (geodesic version, something wrong!)
嘿嘿,到底是什么(字面上的地球,lol)出问题了?这是一个投影问题:路线计算正确,但是当 geoviews 试图将其投影回一个平面(默认情况下使用 墨卡托投影 )穿过太平洋的路线(从地图的右端到左端,反之亦然)错误地加入了一个不应该在那里的额外线段。如何解决这个问题?
这不是很优雅,但我想出了这个快速的方法:想法是当检测到一条路线穿过太平洋(即,从经度 180°切换到-180°或相反方向)时,它将线串分成具有两段的多线串,每侧一段。代码如下:
因此,如果我们用几何=边.应用(修复 _ 线)而不是几何=边为边路径构建地理数据框,我们会得到:
Flights from New York (geodesic version, fixed)
太好了!并且当我们选择太平洋上空的特定航线时,两个航段都会高亮显示!你可以在我的 Github 代码中查看这一点,我在那里生成了我们在上一节中看到的 30 个最国际化城市的图表。为了完整起见,下面是这样做的代码:
我构建了一个全息地图来存储所有 30 个图形。绘制时,它会自动创建一个选择框,我们可以从中选择我们想要的城市。注意 opts 指令:它类似于我们之前使用的 options 函数,但是专用于 Jupyter 笔记本。我使用了很多选项来调整节点和边的大小、颜色和整体外观。此外,ESRI 图块源是我们在图片中看到的卫星背景,而*运算符用于叠加图。
希望你喜欢这个解释!我鼓励你下载笔记本和数据,用 Jupyter 运行笔记本,然后玩结果。欢迎建议!
最小二乘法从何而来?
原文:https://towardsdatascience.com/where-did-the-least-square-come-from-3f1abc7f7caf?source=collection_archive---------3-----------------------
在机器学*面试中,如果被问及最小二乘损失函数的数学基础,你会怎么回答?
承认
感谢我在佐治亚理工学院的 CS7641 课程,在我的 MS 分析项目中,我发现了这个概念,并受到了写这个概念的启发。感谢 Brandon 让我在本文中使用他美丽的贝叶斯推断视频。
问题 :为什么要对一个回归机器学*任务中的误差进行平方?
Ans :“为什么,当然是把所有的误差(残差)变成正的量!”
问题 :“好吧,为什么不用一个更简单的绝对值函数| x |使所有误差为正?”
Ans :“啊哈,你在骗我。绝对值函数不是处处可微的!”
问题 :“那对数值算法应该没多大关系。套索回归使用一个有绝对值的项,可以处理。还有,为什么不是 x 的 4 次方或者 log(1+ x )?平方误差有什么特别的?
Ans :嗯……
贝叶斯论证
请记住,对于机器学*中所有棘手的问题,如果你在你的论点中混合使用单词“ 贝叶斯 ”,你就可以很快找到一个听起来很严肃的答案。
好吧,我是在开玩笑。
但是,是的,我们应该明确准备好关于像最小二乘和交叉熵这样的流行损失函数来自哪里的论点——至少当我们试图使用贝叶斯论点为监督学*问题找到最可能的假设时。
请继续阅读…
基础知识:贝叶斯定理和“最可能假设”
贝叶斯定理可能是对现代机器学*和人工智能系统最有影响的概率论恒等式。关于这个话题的超级直观的介绍,请参见由 Brandon Rohrer 撰写的这个伟大的教程。我会专注于方程式。
这实质上是告诉你在看到数据/证据(可能性)后更新你的信念(先验概率,并将更新后的信念度赋予术语后验概率。你可以从一个信念开始,但是每一个数据点都会加强或削弱这个信念,并且你一直在更新你的假设。
现在让我们用不同的符号——属于数据科学的符号——来改写贝叶斯定理。让我们用 D 表示数据,用表示假设。这意味着在给定数据 的情况下,我们应用贝叶斯公式来尝试确定 数据来自什么假设。我们将定理改写为,
现在,一般来说,我们有一个大的(通常是无限的)假设空间,也就是说,有许多假设可供选择。贝叶斯推断的本质是我们想要检查数据,以最大化最有可能产生观察数据的一个假设的概率。我们主要是想确定中的arg max(h|D)也就是说,给定观察到的*,我们想知道哪个 h 可能性最大。***
一个捷径:最大可能性
上面的等式看起来很简单,但在实践中计算起来却非常棘手——因为在复杂的概率分布函数上计算积分时,假设空间非常大且非常复杂。
然而,在我们寻求'给定数据的最可能假设时,'我们可以进一步简化它。**
- 我们可以把分母中的项去掉,它没有任何包含 h 的项即假设。我们可以把它想象成使总概率总和为 1 的规格化器。
- 一致先验假设 —这实质上是通过使其一致来放松对P(h)性质的任何假设,即所有假设都是可能的。那么它是一个常数 1/|Vsd|其中|Vsd|是 版本空间的大小,即与训练数据一致的所有假设的集合。那么它在确定最大可能假设时实际上并不重要。**
在这两个简化的假设之后,最大似然(ML) 假设可以由下式给出:
这仅仅意味着最可能的假设是观测数据(给定假设)的 条件概率 达到最大的假设。**
拼图的下一块:数据中的噪音
我们通常在学* Stats 101 中的简单线性回归时开始使用最小二乘误差,但这个看起来简单的损失函数牢牢地存在于几乎每个监督机器学*算法中,即。线性模型、样条、决策树或深度学*网络。
那么,它有什么特别之处呢?这和贝叶斯推理有什么关系吗?
事实证明,最小二乘误差和贝叶斯推断之间的关键联系是通过误差或残差的假定性质。
测量/观察数据从来都不是无误差的,并且总是有随机噪声与数据相关联,这可以被认为是感兴趣的信号。机器学*算法的任务是通过从噪声中分离信号来估计/*似可能产生数据的函数。****
但是我们能对这种噪音的本质说些什么呢?原来噪声可以被建模为一个随机变量。因此,我们可以将我们选择的一个概率分布关联到这个随机变量上。
最小二乘优化的关键假设之一是残差的概率分布是我们信任的老朋友——高斯正态。
这意味着监督学*训练数据集中的每个数据点( d )可以写成未知函数f(x)(学*算法试图*似的)和从零均值( μ )和未知方差σ【t3t】的正态分布中得出的误差项之和这就是我的意思,******
从这个断言,我们可以很容易地得出,最大可能的假设是最小化最小平方误差的假设。
M 而且没有好的方法在 Medium 中输入数学。所以,我必须粘贴一个图像来显示推导过程。请随意跳过这一部分,我将在下一部分总结关键结论。
从最大似然假设推导最小二乘
********
瞧!最后一项只不过是简单的最小二乘最小化。
那么,这些数学显示了什么?
它表明,从监督训练数据集的误差分布在高斯正态分布的假设出发,该训练数据的最大似然假设是最小化最小平方误差损失函数的假设。
没有关于学*算法类型的假设。这同样适用于任何事情,从简单的线性回归到深度神经网络。
这就是贝叶斯推理的力量和统一性。
这是线性回归拟合的典型场景。贝叶斯推理论证在这个模型上起作用,并使选择误差的平方作为最佳损失函数变得可信。
常态的假设是否足够合理?
你可以质疑关于正态分布误差项的假设的有效性。但在大多数情况下,它是有效的。这是根据中心极限定理 (CLT)得出的,在某种意义上,错误或噪声从来不是由单个底层过程产生的,而是由多个子过程的综合影响产生的。当大量随机子过程组合时,它们的平均值服从正态分布(来自 CLT)。因此,对于我们承担的大多数机器学*任务来说,假设这样的分布并不困难。
通过高斯-马尔可夫定理的另一个(更强的)论证
事实证明,在没有误差分布信息的情况下,最小二乘法仍然是所有线性估计中最好的线性无偏估计(根据高斯-马尔可夫定理)。唯一的要求是误差的期望值为零,不相关,方差相等。
类似的论点适用于分类问题吗?
最小平方损失函数用于回归任务。但是当我们处理类别和概率,而不是任意的实数时,分类问题又如何呢?
令人惊讶的是,使用 ML 假设和简单的类定义选择可以完成类似的推导,
…也就是交叉熵损失函数。
因此,相同的贝叶斯推理产生交叉熵作为在分类问题中获得最大可能假设的损失函数的优选选择。
总结和结论
我们可以通过以下几点来总结和延伸我们在文章中的讨论和论点,
- 最大似然估计(MLE) 是一种强大的技术,如果我们能够做出一致的先验假设,即在开始时,所有假设都是同等可能的,则可以得出给定数据集的最可能假设。
- 如果我们可以假设机器学*任务中的每个数据点都是真实函数和一些正态分布的随机噪声变量之和,那么我们可以推导出这样一个事实,即最大可能假设是最小化平方损失函数的假设。
- 无论机器学*算法的性质如何,这个结论都是正确的。
- 然而,另一个隐含的假设是数据点的相互独立性,这使得我们能够将联合概率写成单个概率的简单乘积。这也强调了在建立机器学*模型之前消除训练样本间共线性的重要性。
最终,你可以说最小二乘最小化非常特别,因为事实上,它与宇宙中最著名的分布函数 :-)密切相关
如果你有任何问题或想法要分享,请联系作者tirthajyoti【AT】Gmail . com。此外,您可以查看作者的 GitHub 资源库 中其他有趣的 Python、R 或 MATLAB 代码片段和机器学*资源。如果你像我一样对机器学*/数据科学充满热情,请随时在 LinkedIn 上添加我或在 Twitter 上关注我。
**** [## Tirthajyoti Sarkar -高级首席工程师-低压设计工程-半导体上|…
查看 Tirthajyoti Sarkar 在世界上最大的职业社区 LinkedIn 上的个人资料。Tirthajyoti 有 8 份工作…
www.linkedin.com](https://www.linkedin.com/in/tirthajyoti-sarkar-2127aa7/)****
市长从哪里来?
原文:https://towardsdatascience.com/where-do-mayors-come-from-querying-wikidata-with-python-and-sparql-91f3c0af22e2?source=collection_archive---------12-----------------------
用 Python 和 SPARQL 查询 Wikidata
想象一下,你想要一个画家的儿子的列表,或者你想知道哪个市长出生在最遥远的地方。用 SPARQL 在 Wikidata 上进行简单的查询,就可以完成大量繁琐的研究工作。在本文中,通过了解欧洲市长的出生地,您将看到如何使用 Python 和 SPARQL 为 Wikidata 构建查询。
这篇文章和交互可视化的所有代码都可以在这个库中找到。
Where do Mayors Come From?
Wikidata 是一个免费的协作式链接开放数据(LOD) 知识库,可以由人类和机器编辑。该项目始于 2012 年,由维基媒体基金会发起,旨在集中维基链接、信息框和丰富的查询。它雄心勃勃的目标是以机器可读的方式构建整个人类知识,这很好地体现了蒂姆·伯纳斯·李在 2009 年 TED 演讲中的愿景。令人惊讶的是,语义网的想法在 2001 年就已经存在了,它是由关联数据组成的。在维基数据之前有很多项目。有 DBpedia 基于维基百科中的信息框,朋友的朋友(FOAF) 这是一个描述社交网络中关系的本体, GeoNames 提供了一个带有地理名称的数据库,上层映射和绑定交换层(UMBEL) 这是一个概念和实体的知识图以及一整套其他项目,但维基数据似乎是它们之间最雄心勃勃的项目。
它的工作方式类似于维基百科,它是建立在贡献者的工作之上的。那里的所有数据都是免费的(在 CC0 1.0 下,也就是公共领域),任何人都可以编辑和贡献。在大多数(如果不是全部)维基百科页面上,有一个维基数据条目链接到它在维基数据中的对应条目,在那里你可以找到列出的链接信息。请注意,您仍然可以找到漏洞,但由于这是一个社区的努力,随着时间的推移,随着每一次贡献,这将变得越来越好。要访问结构化数据,您可以使用它的 SPARQL 端点来查询 Wikidata,这使您能够运行高级查询,或者使用它的 REST API 。
但是你可能会问,那些维基数据是什么?在这个图表中,您可以看到一个 Wikidata 条目的结构。他们每个人都有一个语句的列表,是以SUBJECT
- PREDICATE
- OBJECT
形式的三元组(例如道格拉斯·亚当斯在圣约翰学院受教育)。在维基数据中,主语指的是一个项,谓语指的是属性。每个属性都有一个值,可以是项目、文本、数字、日期或 GPS 坐标等。每个值可以有额外的限定符,这些限定符具有其他属性-值对的额外信息,比如开始时间。当您开始用 SPARQL 表达查询时,这种结构将非常重要。
Image from SPARQL/WIKIDATA Qualifiers, References and Ranks
SPARQL 简介
SPARQL?这是另一个 SQL 派生吗?因为您处理的是链接数据,而不是通常的关系数据,所以您需要一种不同的方法来查询数据库(也称为 triplestore),但它非常相似,使用起来也非常简单。SPARQL 是一种查询语言,用于检索存储为 RDF (资源描述框架)的数据,它由 W3C 标准化。它是一种强大的查询链接数据的语言,已经被 Wikidata 选用。语法类似于 SQL,但是对于接受过 SQL 培训的人来说有一些不同。一个关键的区别是,在 SQL 中,您倾向于避免使用JOIN
子句,因为它们会降低查询速度,但是在 SPARQL 中,查询主要由连接组成。但是坚持住,让我们来看看这样一个查询。在本例中,我们希望列出欧盟的所有国家:
SELECT ?country ?countryLabel WHERE {
?country wdt:P463 wd:Q458.
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
你可以自己尝试这个查询这里。请注意,您可以在https://query.wikidata.org/测试每个查询。那里的编辑器提供了一些有用的特性。如果您将鼠标悬停在编辑器中的属性和项目上,您将获得关于它们的信息,编辑器还提供了自动完成功能。你还会发现一系列例子,这些例子在你重新开始时非常有用。好了,继续。
从SELECT
子句开始,定义想要获取的变量(变量以问号为前缀)。在WHERE
子句中,您设置了一些限制,这些限制大多采用您之前看到的三元组的形式。语句?country wdt:P463 wd:Q458.
将对象为欧盟(Q458) 的属性为成员(P463) 的所有项目收集到变量country
中。如您所见,这些声明读起来像一个句子(该国是欧盟成员国)。您还会注意到前缀wd:
和wdt:
被认为是 SPARQL 中的快捷缩写(您可以在这里找到内置前缀列表)。这些用wd:
表示项目,用wdt:
表示属性。在本教程的后面,当您更深入地了解 SPARQL 数据表示时,我们将讨论更复杂的前缀。
最后,您将看到查询中令人困惑的部分SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
。这个代码片段负责将收集到的项目的标签检索到一个附加变量中,该变量带有指定语言(在本例中为英语)的后缀Label
。在这个查询中,这将是存储country
变量标签的countryLabel
变量。请注意,仅检索具有所选特定语言标签的项目的标签(在本例中"en"
为英语),因为可能存在未翻译成该特定语言的项目。
有趣的补充说明:当运行查询时,您会注意到欧洲国家列表中的荷兰王国和维基百科条目 Q29999 。令人惊讶的是,荷兰 ( Q55 )是荷兰王国的组成国,但不是国家。这类似于英格兰是联合王国的一部分。如果你感到困惑,这个视频可以很好地解释这种情况。
高级查询
现在让我们探索一下我们所选择的国家的其他属性。如果你看一下德国(Q183) ,那么你可以看到一大堆属性,比如人口(P1082) ,收入中位数(P3529) ,甚至是带有图像(P18) 属性的图像。SPARQL 也使我们能够检索这些内容,这将我们引向下一个查询:
SELECT
?country ?countryLabel ?population ?area ?medianIncome
WHERE {
?country wdt:P463 wd:Q458.
?country wdt:P1082 ?population.
?country wdt:P2046 ?area.
?country wdt:P3529 ?medianIncome.
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
你可以试试这个查询这里。
还记得我们说过 SPARQL 主要由连接组成吗?你可以看到,每个语句都是这样一个连接,增加了更多的链接。尝试这个查询后,您会注意到国家列表变短了。这是因为查询忽略了没有人口、面积或中值收入作为属性的每个国家项目。您可以将这些三元组想象成一个过滤器,限制只匹配这个查询的三元组。我们可以添加OPTIONAL
子句,如果查询在该子句中找不到三元组,该子句会将这些变量留空:
SELECT
?country ?countryLabel ?population ?area ?medianIncome
WHERE {
?country wdt:P463 wd:Q458.
OPTIONAL { ?country wdt:P1082 ?population }
OPTIONAL { ?country wdt:P2046 ?area }
OPTIONAL { ?country wdt:P3529 ?medianIncome }
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
你可以试试这个查询这里。现在,您可以在表格中看到,您将再次找到所有国家/地区的更多附加信息:
Query Result for all countries
SPARQL 数据表示
我们用一个更复杂的查询继续我们的旅程,我们将一步一步地解开它。我们的目标是现在得到所有国家,首都,人口,市长,他的生日,最后是他的出生地。结果查询如下所示:
SELECT DISTINCT
?country ?countryLabel ?capital ?capitalLabel ?population
?mayor ?mayorLabel ?birth_place ?birth_placeLabel ?birth_date ?age
WHERE {
# Get all european countries, their capitals and the population of the capital
?country wdt:P463 wd:Q458.
?country wdt:P36 ?capital.
OPTIONAL { ?capital wdt:P1082 ?population. }
# Get all mayors without an end date
?capital p:P6 ?statement.
?statement ps:P6 ?mayor.
FILTER NOT EXISTS { ?statement pq:P582 ?end_date }
# Get birth place, birth date and age of mayor
?mayor wdt:P19 ?birth_place.
?mayor wdt:P569 ?birth_date.
BIND(year(now()) - year(?birth_date) AS ?age)
SERVICE wikibase:label {
bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en".
}
}
你可以试试这个查询这里。
让我们解开这里发生的事情。首先,你首先通过首都(P36) 属性获得这个国家的首都。接下来,你进入一个更复杂的部分。要理解如何访问市长,您必须查看下图中的 SPARQL 数据表示:
Image from SPARQL/WIKIDATA Qualifiers, References and Ranks
这看起来确实令人困惑,但是不要放弃。你只需要专注于你需要的数据。这个数据表示图展示了使用 SPARQL 从一个条目开始遍历它以获得各种信息的方法(在图中显示为wd:Q1234
)。您可以在左侧看到我们在前面的三元组中使用的经典路径,它使用了前缀wdt:
,导致的值可以是另一个项目、一个数值(例如,在前面的一个查询中的人口)或各种其他数据类型。
如果你看一下像罗马(Q220) 这样的项目,你会注意到对于政府首脑(P6) 有各种各样的说法。你想要一个没有结束日期的。您可以通过遍历带有p:
前缀的语句节点并将其存储在statement
变量中来实现这一点。从这个变量中,您可以得到带有ps:
前缀的市长。你本可以用wdt:
做到这一点,因为你已经学会了,但你想更进一步。您希望到达作为限定符存储在语句中的结束时间(P582) 。您可以遍历带有前缀pq:
的限定符,这将给出结束日期,但是您想要没有结束日期的市长。这可以通过使用FILTER NOT EXISTS
子句来完成,该子句排除了所有具有结束日期的语句节点的三元组。
在最后一部分,您收集市长的出生地、出生日期和年龄。为了计算他的年龄,可以使用BIND
表达式。这个表达式可以用来将一些表达式绑定到一个变量(在我们的例子中是年龄变量)。对于这个表达式,我们用当前年份减去出生日期的年份。这个查询到此结束。您可以在 SPARQL/WIKIDATA 限定符、引用和等级中更深入地挖掘,它更详细地描述了数据表示。请确保对这个查询稍加研究,以便更好地理解它,因为它确实涵盖了各种各样的主题。
用 Python 检索 SPARQL 查询
您已经了解了如何使用 SPARQL,也可以在编辑器中下载结果表,但是如何自动化整个过程呢?您还可以使用 Python 访问 Wikidata SPARQL 端点,这使您能够直接加载和分析您查询的数据。为此,您将使用出色的请求模块,该模块通过其所有必要的工具在处理 HTTP 请求方面表现出色。您可以通过添加查询作为参数来创建请求,如下所示。
import requestsurl = 'https://query.wikidata.org/sparql'
query = """
SELECT
?countryLabel ?population ?area ?medianIncome ?age
WHERE {
?country wdt:P463 wd:Q458.
OPTIONAL { ?country wdt:P1082 ?population }
OPTIONAL { ?country wdt:P2046 ?area }
OPTIONAL { ?country wdt:P3529 ?medianIncome }
OPTIONAL { ?country wdt:P571 ?inception.
BIND(year(now()) - year(?inception) AS ?age)
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
"""
r = requests.get(url, params = {'format': 'json', 'query': query})
data = r.json()
您已经将查询打包到了query
变量中,并且需要额外提供带有 SPARQL 端点 URL 的请求,该 URL 是https://query.wikidata.org/sparql。默认情况下,这将返回一个 XML,但是如果您想使用 JSON 作为输出文件,您也可以将它添加到您的请求中。除了 XML 和 JSON,API 还支持 TSV、CSV 和二进制 RDF。这个请求返回一个 JSON,其中包含从查询中收集的所有行,您可以使用这个 JSON 将这些行收集到一个包含以下代码片段的 Pandas DataFrame 中:
import pandas as pd
from collections import OrderedDictcountries = []
for item in data['results']['bindings']:
countries.append(OrderedDict({
'country': item['countryLabel']['value'],
'population': item['population']['value'],
'area': item['area']['value']
if 'area' in item else None,
'medianIncome': item['medianIncome']['value']
if 'medianIncome' in item else None,
'age': item['age']['value']
if 'age' in item else None}))df = pd.DataFrame(countries)
df.set_index('country', inplace=True)
df = df.astype({'population': float, 'area': float, 'medianIncome': float, 'age': float})
df.head()
让我们直观地研究收集的数据,并比较每个国家的各种属性:
%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('ggplot')plt.figure(figsize=(16, 12))
for i, label in enumerate(['population', 'medianIncome', 'area', 'age']):
plt.subplot(2, 2, i + 1)
df_plot = df[label].sort_values().dropna()
df_plot.plot(kind='barh', color='C0', ax=plt.gca());
plt.ylabel('')
plt.xticks(rotation=30)
plt.title(label.capitalize())
plt.ticklabel_format(style='plain', axis='x')
plt.tight_layout()
太好了!现在让我们继续更高级的查询。
欧洲各国首都的市长
在我们最后的查询中,通过将坐标添加到查询中,您将看到市长出生的地方。为了获得经纬度坐标作为变量,需要添加以下语句:
?capital p:P625/psv:P625 ?capital_node.
?capital_node wikibase:geoLatitude ?capital_lat.
?capital_node wikibase:geoLongitude ?capital_lon.
在第一行中,您遍历前面显示的数据表示图。p:P625/psv:P625
中的斜线表示您继续到坐标位置(P625) 的值节点,而没有为语句节点使用单独的变量。然后,wikibase:geoLatitude
和wikibase:geoLongitude
分别负责从值节点中检索经纬度。欲了解更多信息,请查看关于精度、单位和坐标的文档。您将使用请求库向 SPARQL 端点发送查询:
url = 'https://query.wikidata.org/sparql'
query="""
SELECT DISTINCT
?countryLabel ?capitalLabel ?population ?capital_lon ?capital_lat
?mayorLabel ?birth_date ?age ?birth_place ?birth_placeLabel ?birth_place_lon ?birth_place_lat
WHERE {
?country wdt:P463 wd:Q458.
?country wdt:P36 ?capital.
OPTIONAL { ?capital wdt:P1082 ?population. }
# Get latitude longitude coordinates of capital
?capital p:P625/psv:P625 ?capital_node.
?capital_node wikibase:geoLatitude ?capital_lat.
?capital_node wikibase:geoLongitude ?capital_lon. ?capital p:P6 ?statement.
?statement ps:P6 ?mayor.
FILTER NOT EXISTS { ?statement pq:P582 ?end_date } ?mayor wdt:P569 ?birth_date.
BIND(year(now()) - year(?birth_date) AS ?age)
?mayor wdt:P19 ?birth_place.
?birth_place wdt:P625 ?birth_place_coordinates.
# Get latitude longitude coordinates of birth place
?birth_place p:P625/psv:P625 ?birth_place_node.
?birth_place_node wikibase:geoLatitude ?birth_place_lat.
?birth_place_node wikibase:geoLongitude ?birth_place_lon.
SERVICE wikibase:label {
bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en".
}
}
"""r = requests.get(url, params = {'format': 'json', 'query': query})
data = r.json()
现在,您需要将生成的 JSON 数据转换成 Pandas 数据框架,以便进一步处理数据:
countries = []
for item in data['results']['bindings']:
countries.append(OrderedDict({
label : item[label]['value'] if label in item else None
for label in ['countryLabel', 'capitalLabel',
'capital_lon', 'capital_lat', 'population',
'mayorLabel', 'birth_date', 'age',
'birth_placeLabel', 'birth_place_lon',
'birth_place_lat']}))df = pd.DataFrame(countries)
df.set_index('capitalLabel', inplace=True)
df = df.astype({'population': float, 'age': float,
'capital_lon': float, 'capital_lat': float,
'birth_place_lon': float, 'birth_place_lat': float})
df.head()
使用该数据集,您现在可以探索市长的年龄以及他们所服务的首都的人口:
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
df['age'].sort_values().plot(kind='barh', color='C0', title='Mayors Age')
plt.ylabel('')
plt.subplot(1, 2, 2)
df['population'].sort_values().plot(kind='barh', color='C0', title='Population')
plt.ylabel('')
plt.ticklabel_format(style='plain', axis='x')
plt.tight_layout()
因此,欧洲首都最老的市长似乎是马德里的住房。接下来,我们来看看市长出生在离首都多远的地方。为此,您可以使用 geopy 包来计算坐标之间的距离。这个教程涵盖了这个话题,如果你好奇为什么我们不能只在 GPS 坐标上使用欧几里德距离(剧透:地球不是平的)。要计算距离,您可以使用距离的distance()
函数和米(.m
)属性:
from geopy.distance import distancecoordinates = df[['capital_lon', 'capital_lat',
'birth_place_lon', 'birth_place_lat']]
df['distance'] = [distance((lat0, lon0), (lat1, lon1)).m
for lon0, lat0, lon1, lat1 in coordinates.values]df['distance'].sort_values().plot(
kind='barh', color='C0', logx=True)
plt.xlabel('Distance (m)')
plt.ylabel('');
在这里,你可以看到大多数市长往往出生在他们后来任职的城市或其附*(注意,该图表是对数标度)。你可以看到雅典领先例外,他们的现任市长(乔治·卡米尼斯)出生在美国纽约,巴黎的现任市长(安妮·伊达尔戈)出生在西班牙圣费尔南多。从那里开始,距离显著下降。
要在 Wikidata 中获得欧洲所有市长的列表,请看一下这个脚本,它更复杂,因为它必须处理一些例外情况(比如出生在不再存在的国家的市长),并且需要对每个国家分别进行查询,因为查询有限制。最终的交互可视化可以在这里找到,包括这个笔记本在内的完整代码可以在这个库找到。
结论
您已经学*了如何使用 Wikidata 和 SPARQL,以及如何将其与 Python 和 Pandas 集成。Wikidata 是一个很棒的数据库,它可以实现在您最喜欢的搜索引擎上进行普通搜索所无法实现的查询和发现。这为进行数据科学和探索性数据分析开辟了令人兴奋的新可能性,并为了解我们积累的人类知识中的关系和好奇的发现开辟了一条迷人的新途径。
感谢阅读!如果你有一些反馈或者想要合作,请随时联系我。你可以在GithubTwitterLinkedIn上找到我或者你可以在我的 主页 上找到我的邮箱。**
资源和一堆链接
在文章 Wikidata:一个免费的协作知识库中可以找到关于 Wikidata 的历史和概述。作者:vrandei d .&krtzsch m .(2014 年)。有一个很棒的 SPARQL 教程涵盖了这里提到的许多内容,并且更加深入地理解 SPARQL。如果你对维基数据感到兴奋,并想做出贡献,有维基数据之旅可以指导你完成这个过程。如果你计划进行大型查询,请确保查看可公开下载的维基数据转储,它们是整个维基数据集的定期更新转储,这里有一个关于维基数据库数据模型的文档。维基数据也为程序员提供了一个工具列表。
这里是一个非结构化的资源列表,包含有用的文档、教程或使用 Wikidata 的例子。
- 从维基数据导出 RDF
- 维基数据:属性列表
- 维基数据:数据库报告
- 维基数据:数据库报告/财产清单/前 100 名
- 维基百科:简介
- Wikidata:SPARQL 查询
- Wikidata:SPARQL 查询示例
- 维基数据:创建一个机器人
- 向维基数据查询维也纳的电车线路:SPARQL 简介
- 维基数据显示美国总统的死因
- 雄心勃勃的维基数据教程——幻灯片分享
- 维基数据图表生成器,可视化维基数据图表的伟大工具
- 历史时间线的可视化
我们的鱼从哪里来?
原文:https://towardsdatascience.com/where-does-our-fish-come-from-9457c90d4ff0?source=collection_archive---------9-----------------------
开放数据的世界异常复杂,任何数据科学家都有可能证明这一点。对于我这个刚刚毕业的理学学士来说,这是一个相对陌生的世界。但本周,在安妮·麦克罗森(数据业务专家、内脏业务的创始人、康沃尔郡开放数据研究所的负责人)的指导下,我试图探索这个世界,以回答一个我长期思考但从未完全理解的问题——我们在英国消费的鱼到底来自哪里?
Over 1.1 million tonnes of fish were landed in the UK in 2016 alone. Can open data be used to discern which fish came from where?
这似乎是一个简单的问题,任何人都可以在超市拿起一罐金枪鱼进行检查,但我特别感兴趣的是渔业的整体范围;更具体地说是英国的“五大”:鳕鱼;黑线鳕;三文鱼;金枪鱼;还有小虾和对虾。作为一个国家,我们与这 5 种鱼类紧密相连。它们主宰着英国的鱼类市场,以至于超市已经开始宣传其他鱼类的存在,并且至少应该被考虑。我本人对这个问题很感兴趣,因为我最*完成了一个保护生物学和生态学学位,我的研究侧重于海洋问题。我学到的是,就像开放数据的世界一样,渔业很难理解;进出口似乎在全球范围内随机流动。鱼类资源的枯竭和水产养殖的兴起导致了这种复杂性,但我决定主要关注这五大鱼类的来源,并可能提供一些关于人们应该瞄准(或避免)哪些鱼类的建议!)如果他们想减少他们的环境足迹。
那么,如何使用开放数据来回答这个问题,并以一种易于向更广泛的受众传达的格式呈现它呢?这是我的任务,要理解它,你必须理解什么是开放数据本身。开放数据研究所将开放数据定义为“每个人都可以访问、使用和共享的数据”。看起来很简单,但是对于这个行业来说,现在还是早期,开放数据的世界才刚刚发展起来。存在各种经过验证的政府数据库(【data.gov.uk】、欧盟统计局等),但当前形式的公开数据的问题是很少有人知道去哪里找,更不用说如何解释他们找到的东西了。
我在我的实*培训周期间亲身经历了这一点,这是由埃克塞特大学的就业能力项目设立的,当时我和我的小组在众多数据库中搜寻公司使用塑料的任何证据。从我收集的信息来看,无论如何,在现阶段,企业开放数据库几乎不存在,政府数据库也很难浏览,其中包含大量高度具体的配额、电子表格、调查和各种记录,有时可以追溯到几个世纪前。
培训周让我对数据行业有所了解,但也让我思考我到底应该如何利用它,以及在哪个部门。安妮帮助回答了第二个问题,她说我们将专注于食品数据,但即使在这方面也有太多的工作要做。我花了一段时间进行调查,然后才明白渔业是开放数据供应充足的一个领域。进口数据、出口数据、上岸配额、捕捞配额、生态系统生存能力,凡是你能想到的,都有政府的电子表格。带着一个清晰的问题,我开始了我的数据搜索,寻找我们五大巨头的模式和趋势。
找到一个可行的数据集花了一段时间——有很多,只有一小部分是可下载的,更不用说是可解释的了。然而,在第一天快结束时,我看到了“英国海洋渔业年度统计数据”——这绝对是一个可以追溯到多年前的金矿,尽管附带的档案部分保存了 2012 年之前的数据。
我认为从最基本的层面——消费者本身——开始是值得的。与其他食品相比,普通人每周吃多少鱼,他们在鱼上的花费是多少?这方面的数据大部分是一致的——在某些情况下,年份被分开了,如下图所示,但它确实产生了结果。答案并不令人惊讶——多年来,英国的鱼类消费一直遵循与肉类和奶酪相似的趋势(图 1a、b、c ),保持相对稳定,但价格随着通货膨胀而上涨。最令人惊讶的结果实际上是由我们的鸡蛋消费量带来的(图 1d)——我不知道英国人的平均鸡蛋消费量在 20 世纪末基本上减少了一半。
Figure 1a: Fish (processed, frozen, fresh + prepared) consumption, per person per week (1960–2015). As with the following graphs, years are denoted by the format in which they are presented in the UK Sea Fisheries Annual Statistics Chapter 4 (hence the “(b)s” and “/s”).
Figure 1b: Meat consumption, per person per week (1960–2015) taken from UK Sea Fisheries Annual Statistics Chapter 4.
Figure 1c: Cheese consumption, per person per week (1960–2015) taken from UK Sea Fisheries Annual Statistics Chapter 4.
Figure 1d: Egg consumption, per person per week (1960–2015) taken from UK Sea Fisheries Annual Statistics Chapter 4.
接着,我转向了鱼本身。从总体数据开始,我转到了 Big 5(cod;黑线鳕;三文鱼;金枪鱼;以及每组的进出口比率。如你所见,最初的图表完美地描述了整个 20 世纪底栖鱼类的开发情况,远洋(开阔水域)和贝类的情况稍好一些(图 2a)。然而,这一趋势在 21 世纪已经稳定下来(图 2b),因此我将重点关注最*的数据。
Figure 2a: Landings data into the UK by all vessels (1938–2016) acquired from UK Sea Fisheries Annual Statistics Chapter 3.
Figure 2b: Overall landings data for the UK (2006–2016) taken from UK Sea Fisheries Annual Statistics Chapter 4.
然而,转到最*的 Big 5 数据(图 3),一些令人吃惊的结果开始显现出来,也许为图 2a 中看到的平稳提供了解释。值得注意的是,这只是 2016 年的数据,然而,在修订了前几年的数据后,我发现 2016 年并不是特别反常,因此我选择只关注今年。我发现,英国船只在国内卸货的数量少得惊人,而且至少可以说,某些鱼类的进出口比率非常有趣。以鲑鱼为例。在过去的五年里,三文鱼碰巧是英国进口和出口最多的鱼类,但我没有发现英国三文鱼真正登陆英国的记录。为什么会这样,很可能与我专业领域之外的经济因素有关,然而这个发现很有趣。更令人惊喜的是在英国使用的英国捕获的黑线鳕的数量。其余 5 个国家的统计数据,例如完全没有英国捕捞的金枪鱼、小虾和对虾,以及英国捕捞的低水平鳕鱼(我们的鱼类资源是出了名的枯竭——再次参见图 2a ),与我之前读到的一致。
Figure 3: Big 5 Import, UK-caught and Export data (2016) taken from UK Sea Fisheries Annual Statistics Chapter 4.
因此,在发现(黑线鳕除外)我们的鱼并非真的来自英国注册的渔船后,我开始回答我的总体问题——它是从哪里来的?下图很好地说明了这一点。
Figure 4a: Cod imports (2016) taken from UK Sea Fisheries Annual Statistics Chapter 4.
Figure 4b: Haddock imports (2016) taken from UK Sea Fisheries Annual Statistics Chapter 4.
Figure 4c: Salmon imports (2016) taken from UK Sea Fisheries Annual Statistics Chapter 4.
Figure 4d: Tuna imports (2016) taken from UK Sea Fisheries Annual Statistics Chapter 4.
Figure 4e: Shrimp and Prawn imports (2016) taken from UK Sea Fisheries Annual Statistics Chapter 4.
如图所示,鳕鱼和黑线鳕(图 4a,b)显示出类似的趋势,都主要从英国和欧洲进口(黑线鳕显示出英国占主导地位的贸易)。然而,乍一看令人惊讶的是,中国分别是我们第二和第三大最受欢迎的炸鱼薯条来源。这可能是因为他们在全球水产养殖(鱼类养殖)市场的完全主导地位——粮农组织 2011 年的数据显示,中国对全球水产养殖的贡献超过了前 20 名国家的总和。鲑鱼(图 4c)已经被证明是进口和出口最多的鱼类,也主要来自北欧,泰国和加拿大也有所贡献。如前所示(图 3),我找不到英国为自己的三文鱼供应做出贡献的记录。
然而,五巨头中的另外两个成员显示出完全不同的趋势。金枪鱼(图 4d),在最好的情况下也是一种有争议的鱼类,来自世界各地,令人惊讶的是,加纳竟然是我们最大的供应国。事实上,绝大多数英国金枪鱼来自欧洲以外,其他非洲国家塞舌尔和毛里求斯、东南亚国家和厄瓜多尔的贡献也超过了欧洲最大的供应国西班牙。最后,虾和对虾(图 4e)显示了其供应量的最大变化。同样,东南亚是一个关键的参与者(水产养殖也可能是原因,因为数据显示,这些国家都是养虾业的重要投资者),然而,拉丁美洲国家洪都拉斯和厄瓜多尔以及某些欧洲国家也做出了贡献。从这些图表中你可以看到,我个人已经获得了很多关于我们五大成员在到达我们之前会走多远的理解,并且在购买金枪鱼、虾和对虾之前会三思而行。
总的来说,我非常享受我对开放数据世界的探索,以及和 Anne 一起工作的时光。在使用公开数据回答一个问题时,我瞥见了它的潜力,但我也开始意识到这个领域实际上是多么年轻。还有多少其他问题的答案等着从政府数据库代表的迷宫中挖掘出来?如果政府和企业提供更开放的数据源,让现有的数据更容易获取,还能回答多少问题?我刚开始接触开放数据,但我很快就明白了为什么像安妮这样的人致力于发展这个新兴的、令人兴奋的领域。
在我的整个研究过程中,我都有一个日志,包含了我使用过的或考虑使用的所有数据库,以及我在查看它们时的想法。这里可以查看。
我的图标和图像主要来自于这个名词项目。每条鱼的单独图像链接(鳕鱼);黑线鳕;三文鱼;金枪鱼;和小虾和大虾挂钩。
非常感谢安妮·麦克罗森在整个项目中给予的帮助和指导。
你去哪里了?(谷歌知道)
原文:https://towardsdatascience.com/where-have-you-been-google-knows-9bfa0ee59427?source=collection_archive---------3-----------------------
在我打开详细位置共享(作为在我的 Android 手机上使用 Google Now 的一部分)的四年半时间里,谷歌已经对我的位置进行了 740,176 次采样!大约每天 450 个样本,大约每 3 分钟一个。
如果你相信谷歌会保密,那就只用它,等等。所有这些数据对于生活日志记录都非常有用,我将在这里简单演示一下。
如果在斯诺登事件后,你不信任他们,那么现在就关闭位置共享,因为你去的地方不会超过 3 分钟,他们不会知道,或者不会与第三方共享。
映射它
通过 R 分析了所有的数据后,我将粗略地向你们展示我在过去四年半的时间里去了哪里。
我去过的地方:2012 年 11 月至 2016 年 6 月
红色越深,我在那里呆的时间就越长(一些最模糊的点和条纹——迪拜、多哈、明尼阿波利斯——是中途停留),但你可以得到比这更精确的结果。
每个国家到底有多少天?以下是我的十大选择:
想回忆一下你的某次旅行吗?提供的细节可能会让你吃惊。这是我去斯洛伐克布拉迪斯拉发的旅行,回忆起过去两个夏天,我的位置根据一天中的时间用颜色标出:
布拉迪斯拉发:2012 年 6 月
光看这个就勾起了很多回忆。
在我在那里的 8 天里,你可以从我的酒店(左上)和客户网站(右下)看到很多白天的旅行(绿色到粉色)。你还可以在可爱的老城区(左下方)周围看到一些夜间蜿蜒的道路(橙色到红色),友好的客户带我去尝试国家饮料 Borovič ka。(谷歌可能也有一些我被扣在鹅卵石广场上的卫星照片,那东西从我的鼻孔里喷出来。)
制图活动
而且不仅仅是空间数据。谷歌试图通过推断活动为你分解样本。并不是每个样本都有这些额外的数据,而且,正如置信值将向您展示的那样,通常并不十分确定您到底在做什么。
这是我过去 12 个月的活动明细,按小时计算:
不出所料,我大部分时间都在忙着。这相当于一年中将* 70%的时间是坐着度过的(在我看来,这确实包括睡眠)。“倾斜”最有可能是阅读,因为我倾向于躺在床上用手机阅读大量书籍。
我没有车,所以有相当一部分时间我都在步行,尽管这段时间仍然只占一年中 5%多一点的时间。
“骑自行车”的时间很可能是我骑着我的摩托车,或者坐在曼谷的摩托车出租车上,所以我不能在那里申请任何健身积分。
你明白了。您可以看到有许多方法可以将您的数据分割成小块。想试试吗?以下是一些建议。
DIY 技巧
- 按照这些说明下载您的位置数据。
- 如前所述,你可能有成千上万的位置记录要查阅,所以我不确定 Excel 能否处理好。给 R 一个旋转切片和切块。这篇文章会给你一些提示,告诉你如何用几行代码就能得到地图。
- 如果你觉得不太方便,有各种自动化服务,其中没有一个我亲自尝试过,将从你的数据生成热图。这篇文章描述了一个看起来很有趣的。
蚊子在哪里——香港登革热前线:第一部分数据清理
原文:https://towardsdatascience.com/where-is-the-mosquito-hk-dengue-fever-frontline-part-1-data-cleaning-d3dc165ba3db?source=collection_archive---------14-----------------------
第 2 部分:创建 SQLite 数据库第 3 部分:可视化诱蚊产卵器索引
今年夏天登革热的爆发令许多香港市民担忧。根据香港特区卫生防护中心,到目前为止已经有 29 例。这种疾病由登革热病毒引起,可通过白纹伊蚊(一种身体上有白色条纹的蚊子)作为媒介感染人类。在东南亚,它是许多国家的地方病。由于登革热病毒可导致严重疾病,香港政府使用一种名为产卵诱捕器(诱蚊产卵器)的设备监测登革热蚊子的分布,这有助于反映选定区域蚊子的分布范围。
为了抗击这种疾病,了解蚊子的活动区域至关重要。因此,我收集和整理了香港特别行政区食物环境卫生署(FEHD)在 2008 年 1 月至 2018 年 7 月期间的区域诱蚊产卵器指数(AOI)数据,希望找出它们在这些年的大本营。
整个数据清理过程有四个步骤。2008 年至 2017 年的数据从 FEHD 网站下载 PDF 格式,2018 年 1 月至 2018 年 7 月的数据从 FEHD 网站废弃。
下面是下载的 PDF 的样子:
这份双语文档有十页,每一页都有一个表格,由当年每个月每个地点的 AOI 组成。每一页都以一个 FEHD 标题和一个副标题开始,然后是一个表格。在每个表格的最后一行,有一个每月诱蚊产卵器指数(MOI)行,其中包含该年每个月的平均诱蚊产卵器指数。
步骤 1)从 FEHD 文档中提取所需数据
在将文档加载到 Jupyter 笔记本之前,我将其转换为 CSV 格式,以便于数据准备。正如我们在上面看到的,一些数据行(如 FEHD 标题)应该被删除,一些重要的数据需要提取(如副标题“2008 年每月登革热媒介监测”中的 2008 年)。
Function ‘matched’ and ‘replace_value’ are created to clean the original dataframe and web scrapped data
Assigning the dataframe header and drop data that are not needed
尽管原始文档中的每个表格都有标题,但由于 FEHD 标题、副标题及其双语性质的存在,它不能直接用作 dataframe 标题。因此,我从表格中提取了标题的英文部分,并将其设置为 dataframe 标题。然后,使用正则表达式找到不需要的行并删除。如前所述,每个表格都有一个表头。因此,只有第一个表头被保留,而其他表头也被删除。
当探索数据时,发现一些区域被分成更小的部分,因此相同的位置被不同地调用。例如,“将军澳”分为“将军澳南”和“将军澳北”。根据 FEHD,分区前的“将军澳”现与“将军澳南”相同。为了使十年数据更加一致,这些位置基于最*(2018 年 7 月)的区域划分进行处理,当将该数据集与从 FEHD 网站收集的 2018 年数据相结合时,将再次处理该区域划分。此外,原始列“Locations”有英文和中文名称,中间用“\n”分隔。因此,我把它们分成两个新的栏目,分别叫做“Eng”和“Chi”。
在获取 2018 年的数据之前,这个数据帧不包含告诉我们该行属于哪一年的数据。通过观察数据集,我发现虽然地点数量从 2008 年的 38 个增加到 2017 年的 52 个,但每年都是从地点“柴湾西”开始。意思是找到“柴湾西”的行,我就找到了每年的第一行。这个模式支持我创建新的列“Year”来存储行中相应的年份。
为了更容易识别文档数据和 web 数据,在下面的步骤中,它们将被分别称为“存档”和“当前”。
步骤 2)从 FEHD 网站收集数据
由于登革热在今年夏天爆发,因此也应该收集 2018 年的数据。虽然 2018 年的诱蚊产卵器指数只能从 FEHD 网站收集,但当前数据集和存档数据集之间的差异需要额外的努力才能将它们结合在一起。
The two Chinese words in “pattern” means “District” and “Month” respectively
首先,BeautifulSoup 帮我删除了 FEHD 网站上的数据。从报废的内容来看,除了 10 行不相关的数据和几个标题行,发现有一个新的栏目叫“区”。区数据在进一步的分析中可能很有用,但是,最好在合并两个数据集后再包含它们。此外,为了将 web 数据与归档数据集相结合,不使用废弃数据的头。由于中文版的标题行具有更易识别的表达方式,所以网站的中文视图用于网页报废。
The Chinese words in line 5 means “Hong Kong International Airport”
之后,需要所有剩余的数据。每行应包含 1 月至 12 月的位置和诱蚊产卵器指数,因此,列表中的每 13 个数据代表一行。本项目以居民区诱蚊产卵器指标为目标,因此不考虑港区。在合并数据集之前,最后一项任务是确保两个数据集具有相同的标题,并且每一行具有相同的长度。由于该网站是中文版,收集的数据中没有这些地点的英文名称。因此,他们现在将被替换为 NaN。对于要放在“年份”列中的值,肯定是 2018。
步骤 3)组合“存档”和“当前”
是时候将数据集合并成一个了。两个数据集有相同的头,所以 pandas.concat()可以很容易地完成这项工作。2018 年似乎有新的区域划分,这意味着同一个地点可能有不止一个名字。再次调用 replace_value 函数,它们现在有了一致的名称。
现在是时候填写 web 数据的空英文名称了。为此,需要创建一个名为 translations 的列表,其中包含所有的英文和中文位置。仅在 2018 年有 5 个新地点,因此,它们的翻译是手动输入的。完成后,组合过程就完成了。
A preview of the combined dataframe
然而,这还不够好。组合数据框架基于 FEHD 表结构,这对于分析来说不够灵活。所以,有了后期创建一个简单 SQL 数据库的想法,我决定做一个改变。
步骤 4)一个新的表格结构
Three functions are created to serve the purpose of making the new dataframe
The process of creating the new dataframe
通过上述功能,您可能会意识到,我将在新的数据帧中创建代表某个位置的特定月份的每一行,并创建一个名为“分类”的列,以根据 FEHD 指南指示诱蚊产卵器指数的级别。将诱蚊产卵器索引从字符串类型转换为浮点类型时,发生了一个意外事件。一个诱蚊产卵器指数有一个错别字,在数字和%之间有一个“/”。这就是为什么“convert_float”函数有第一个 if 语句。
在整个数据清理过程之后,数据帧如下所示:
感谢您的阅读!数据清理已经完成,但是与蚊子的捉迷藏才刚刚开始。在下一篇文章中,我将分享我是如何将数据存储到 SQLite 数据库中的。这是我在数据科学领域的第一个独立项目。对于任何有兴趣加入这个旅程的人,你可以访问我的 Github 来仔细看看代码。
如果任何人有任何想法,请随时分享。我非常愿意倾听和学*:)
蚊子在哪里——香港登革热前线:第二部分建立 SQLite 数据库
原文:https://towardsdatascience.com/where-is-the-mosquito-hk-dengue-fever-frontline-part-2-create-a-sqlite-database-d8d90968ef10?source=collection_archive---------23-----------------------
在数据清理过程中,我们从香港食物环境卫生署 (FEHD)可下载的 PDF 文档和网站中,清理并合并了 2008 年 1 月至 2018 年 7 月期间的区域诱蚊产卵器指数(可反映每个月选定区域成蚊的广泛程度)数据。为了有一个更灵活的分析,原来的 FEHD 表结构被改成了这样:
从上面的快照中,我们可以看到表中有 5600 多行。然而,并非每次分析都需要所有数据(例如,如果您只对 2010 年九龙区的诱蚊产卵器指数感兴趣),每次都将整个文件加载到 pandas dataframe 中并不是一个好主意。因此,我想设计一个 SQL 数据库。对于任何想用数据库做自己分析的人,可以从这个 Github 库下载。
Relational Schema of the AreaOvitrap Database
数据库的表格和关系简单而直接。对于诱蚊产卵器指数,位置和记录的月份和年份构成了分析的背景。香港一般分为三个主要地区和 18 个地区。不过,FEHD 把香港分为 4 个主要地区和 19 个地区,以记录诱蚊产卵器指数。对于每个位置,它属于一个区和一个区域。然而,原始数据不支持针对特定地区或区域的分析。因此,在 Jupyter 笔记本中使用 sqlite3 创建数据库之前,需要准备以下字典:
The division of districts in Hong Kong according to FEHD
这本字典有三个层次。第一层包括四个主要地区,然后是 19 个区,以及每个区内的诱蚊产卵器位置。
虽然每个诱蚊产卵器位置都有中英文名称,但地区应该相同。将地区的中文名称与相应的英文名称配对后,地区应根据四个主要地区进行分组。
Generate ID for every district
在为地区和区域分配了 district_id 和 area_id 之后,就该创建数据库了。左边的图片显示了在生成任何 ID 之前的区域匹配,右边的数据帧快照就是结果。您可能会注意到,district_id 包含两个部分。第一部分是地区所属的区域(如 HKD: H 翁 K 翁岛 D 伊斯特里茨),第二部分是一个整数。整数部分可以告诉我们一个地区有多少个区(例如,香港岛只有 4 个区,因此香港岛的最后一个区 id 是 HKD04)。
现在可以创建数据库了。让我们导入 sqlite3 并创建两个函数来简化这个过程。
表格:区域
区域仅包含代表香港四个主要区域的四行,因此可以手动输入数据。
Creating table ‘Area’
表格:地区
如上所示,如果在上一步中已经在数据帧“district_only”中处理了所需的数据,则可以使用 df.to_sql()方法直接迁移 district 表中的数据。
Creating table ‘District’
表格:位置
对于位置,让我们为每个位置创建一个 location_id,就像 district_id 一样。为此,创建了两个函数来匹配位置和地区,然后生成代码。
为该过程创建新的数据帧“位置”。它包含每个地点的中英文名称,然后通过检查该地点是否出现在主词典“all_districts”的子词典中,将该地点与地区进行匹配,主词典是在开始时创建的,用于记录所有地区和地点。之后,为了生成 location_id,创建了一个用于 district_id 的列,它使用 district_id 作为基础。
A snapshot of dataframe “locations “
数据帧“locations”的快照显示,location_id 具有类似于 district_id 的结构,district _ id 是基于 district 具有的位置的数量来决定的。location_id 由两部分组成,第一部分是 district_id,它也反映了 district 所属的区域,第二部分是一个整数。这个整数部分可以告诉我们该地区有多少个位置(例如,对于万佳区(HKD04),它有三个位置)。第一个位置是 HKD0401,第二个位置是 HKD0402,第三个位置是 eis HKD0403)。
当还生成了 location_id 时,不仅表“location”,第四个表“area_ovitrap_index”也准备好被创建。在将 district_id 和 location_id 集成到原始数据帧“data”中之后,表“origin”由 df.to_sql()生成,因此最后两个表可以仅使用 sql 来创建
现在,创建了表“位置”和“区域 _ 诱蚊产卵器 _ 索引”。
Creating tables “Location” and “Area Ovitrap Index”
最后,不要忘记删除“origin”表,它已经做了很好的工作。
【run _ command】【若存在原点则删除表格】
感谢您阅读这个项目的第二部分!这是我第一次独立的数据科学项目。如果任何人有任何意见或建议,我非常欢迎听取和借鉴。此外,对于有兴趣使用数据库进行自己的分析的人,我想提一下,当你在计算区域诱蚊产卵器指数的月平均值(例如,2017 年 7 月的月平均诱蚊产卵器指数)时,你可能不会得到与 FEHD 文件所示相同的结果,但你也会发现所有数据都是正确的。FEHD 在计算每月诱蚊产卵器指数时,可能没有如文件所示进行四舍五入。因此,舍入误差是可能的。
这个项目的最后一部分将是寻找和可视化具有最高诱蚊产卵器指数的位置。我们去抓蚊子吧!
有兴趣加入旅程的人可以访问我的 Github 仔细看看代码:)
蚊子在哪里—香港登革热前线第三部分:可视化诱蚊产卵器指数
原文:https://towardsdatascience.com/where-is-the-mosquito-hk-dengue-fever-frontline-part-3-visualising-ovitrap-index-f04f3295c63a?source=collection_archive---------14-----------------------
这是“独立计划”的第三篇帖子,寻找香港哪个地区的诱蚊产卵器指数最高。对于任何对这篇文章中使用的数据感兴趣的人,欢迎阅读该项目的第 1 部分:数据清理和第 2 部分:创建一个 SQLite 数据库。
清理完数据放入数据库,终于到了探索香港哪个区域诱蚊产卵器指数最高的时候了。简单回顾一下,诱蚊产卵器指数是由 FEHD 食物卫生署用来了解登革热的分布范围,这种蚊子能够在东南亚选定的地区传播一种常见但危险的疾病“登革热”。该地区诱蚊产卵器指数(AOI)使我们能够找出哪个地区需要更多的蚊虫控制,尽管较高的 AOI 并不意味着一定有登革热。由于数据收集过程是在 2018 年 8 月初,使用的数据是 2008 年 1 月至 2018 年 7 月。FEHD 网站在 8 月份之后已经更改,AOI 分两个阶段收集,并将从 2018 年 9 月开始以计算的平均值显示在网站上。但是,由于该项目使用的是变更前的数据,因此该分析不受影响。
我们先来看一个更大的画面。根据 FEHK 分部的统计,香港总共有 19 个区(对任何困惑的香港人来说,是的,这里有 19 个区)。虽然一些地区有更多的诱蚊产卵器的位置,这是更一致和更符合逻辑的划分 FEHD。
每个地区的全年诱蚊产卵器指数的计算方法是将同一地区的地点的全年诱蚊产卵器指数相加,然后除以该地区的地点数目。例如,湾仔区有三个地点:天后、湾仔北和跑马地。计算这三个地点的全年诱蚊产卵器指数,然后将总和除以 3,即湾仔区的诱蚊产卵器指数。
SQL 不仅可以从数据库中提取所需的数据,还可以有效地支持计算。
“?” after “LIKE” is a placeholder which represents the years from 2008 to 2017
然后创建一个数据帧来存储这些提取的数据。
现在我们可以开始回答这样的问题:
从 2008 年到 2017 年,有哪个地区的 AOI 持续较高?
Top three districts in each year. Black means highest Ovitrap Index, followed by red, and orange.
这个柱状图告诉我们从 2008 年到 2017 年各区每年的诱蚊产卵器指数。因为我们想知道哪个地区的诱蚊产卵器指数比其他地区高,所以每年最高的三个地区被涂上颜色。诱蚊产卵器指数越高,颜色越深。获胜者穿黑色衣服,亚军穿橙色衣服。我们可以看到,前三个区之间的差异并不总是那么大。然而,似乎有些地区比其他地区更具色彩。
我们来做一个简单的计数器,检验一下是否属实。
Districts that have never been top three are not in the Counter
观塘区在 10 年中有 9 年是前三名,但观塘区包括几个位置。在决定整个地区是否需要更多的蚊子控制之前,最好仔细看看这个地区。
Only the highest and lowest Ovitrap Index are presented because the differences between each location are already clearly shown.
2008 年至 2017 年观塘区有三个地点。除 2008 年和 2014 年外,观塘市中心区的诱蚊产卵器指数较蓝田为高。虽然九龙湾在 2014 年后才启用,但观塘中区很可能是观塘区在 2015 年前诱蚊产卵器指数较高的原因。此外,令人担忧的是,去年九龙湾的诱蚊产卵器指数迅速上升,远远超过观塘中区。
我们现在知道观塘区的诱蚊产卵器指数在过去 10 年一直相当高,让我们看看它在 2018 年 1 月至 2018 年 7 月的表现。
All districts are shown in this line plot
虽然未达到最高指数(北区的 27.6%),但持续上升,今年 7 月成为最高。很明显,观塘区应该有更严格的防蚊措施。结案之前,我们再考虑一个问题。
卫生防护中心表示,今夏大部分登革热个案在黄大仙(黄大仙区)和长洲(离岛区)。正如我们从下图所见,高诱蚊产卵器指数并不一定会导致登革热爆发,但高诱蚊产卵器指数地区的潜在风险不容忽视。
虽然黄大仙在地理上接*观塘,但如果黄大仙爆发的登革热蔓延至这几年诱蚊产卵器指数高企的观塘,情况会非常令人担心。虽然这似乎不会发生,但打安全牌并没有错。为了应对这种令人担忧的组合,让我们更仔细地看看这两个地区:
从上述线状图来看,黄田仙中及九龙湾应被视为实施更严格灭蚊措施的首要地区。正如上文所讨论的,九龙湾保持了前一年的势头,但观塘中心似乎受到控制。然而,你可能会注意到右边的红点代表油塘有一个可怕的 AOI。这是 2018 年 6 月之后才记录的,所以那里的蚊子控制可能比其他地方少。相信油塘并不是唯一的个案,因此,要更全面了解香港蚊患的范围,诱蚊产卵器应监察更多地区。
由于导致登革热在一个地区爆发的因素很多,诱蚊产卵器指数只是其中一个有用的监测工具。不过,如果诱蚊产卵器指数能有效地运用,灭蚊工作便可以更有效率地进行。
感谢阅读。这是我第一个独立项目的最后一部分。这一次,我们发现了需要更多和更严格控制蚊子的地点。虽然还有很多探索没有涉及,但我希望这个项目也能告诉你为什么诱蚊产卵器指数和监测 Aedine 蚊子很重要。对于任何对完整代码感兴趣的人,欢迎访问这个 Github 。还有,如果谁有什么意见,我非常欢迎去听,去借鉴:)
人们对数据可视化和数据科学最感兴趣的地方
原文:https://towardsdatascience.com/where-people-are-most-interested-in-data-visualization-and-data-science-16079ad706e0?source=collection_archive---------4-----------------------
今天,我使用 R 提取了 Google Trends 数据,找到了在“数据可视化”和“数据科学”中搜索次数最多的城市,以及与这两个主题相关的趋势话题。
利益在哪里
在过去四年中,我们可以看到西雅图、旧金山和华盛顿等美国西海岸城市对数据可视化有着极大的兴趣。东海岸城市波士顿在 2015 年的搜索趋势中排名第一,但随着纽约的兴趣增加,排名有所下滑。芝加哥今年新进入前十名。
包括新加坡、首尔和印度的一些城市、孟加拉、海德拉巴和钦奈在内的亚洲城市也有不错的代表性。
在搜索“数据科学”方面,剑桥和伯克利在过去两年中名列榜首。
大多数城市,甚至那些在四年中只出现过一次的城市,都在美国,这可以归因于对这个角色的高需求。
硅谷的桑尼维尔市是 Linkedin 和 NetApp 等科技公司的总部所在地,似乎对这个话题的兴趣已经消退。
几个印度城市出现在列表中,搜索量要么下降,要么上升。
哪些话题是热门话题
2015 年关键词“二战”获得了很多关注,这可能是这部数据即电影。2016 年,用于数据可视化的“虚拟现实”正在升温。今年,视觉分析、SVG、React 等主题的搜索量增加,汉斯·罗斯林的去世也是如此。
就数据科学而言,教育主题具有很强的吸引力。在在线课程中,人们的兴趣已经从约翰霍普金斯大学的数据科学专业转向了微软认证专家。2016 年搜索研究生教育几乎翻倍。2017 年,人工智能和深度学*成为增长最快的话题。
数据和过程
gtrendsR 包提供对 Google Trends API 的访问,并返回一个数据框架列表,包括一段时间内的兴趣、地理区域的兴趣和相关主题。考虑到较大的国家将有更多的搜索量,使用范围从 0 到 100 的搜索指数来归一化人口效应。API 还将相关主题分为“热门”、“上升”和“突破”。
这将主要反映英语地区的搜索兴趣,因为不使用谷歌或在搜索中使用其他语言的国家不会出现在数据中。
该软件包的一个问题是,它不采用包含其他拼写的组合术语,如“可视化”(而谷歌趋势可以做到这一点)。主要影响澳大利亚。当软件包更新时,我们可以更新。
相关读数
如果你对谷歌趋势感兴趣,你可能会发现这两个很有趣:
xaquín g . v .及其合作者最常搜索的方法
r-blogger 上的 gtrendsR
在视觉方面,这些帖子是相关的:
如何创作 bumpchartviz-a-lot 先生
对多面 ggplot2 内的列进行排序
这是我关于数据科学和视觉故事的# 100 日项目的第 56 天。如果喜欢,请分享。我的 github 上的全部代码。建议和反馈总是受欢迎的。感谢阅读。
我在哪里执行我的模型?
原文:https://towardsdatascience.com/where-the-f-k-do-i-execute-my-model-2591d302bcb1?source=collection_archive---------8-----------------------
或者:走向机器学*部署环境。
现在,机器学*领域的大牌都有自己的数据科学分析环境和生产中的机器学*执行环境。其他人有定制零件的大杂烩,或者足够幸运,现有的商用机器学*环境符合他们的需求,他们可以使用它们。有几个商业可用的数据科学环境,Gartner 在其数据科学和机器学*平台的魔力象限中提到了最知名的参与者(尽管每周都有新的参与者出现)。然而,这些平台中的大多数(如果不是全部的话)都受到限制,这可能会阻止一些行业采用它们。这些平台中的大多数都有一个前提,即它们将在单个云(无论是公共云还是私有云)上执行所有内容。让我们来看看为什么不是每个用例都是这样。
一些机器学*模型可能需要远程执行。让我们以自动驾驶汽车行业为例。延迟和安全性阻碍了云中的执行(除非云是车载的)。一些工业用例可能需要以边缘计算或雾计算的方式执行模型,以满足延迟需求。某些行业的数据敏感性可能需要在客户设备上执行某些算法。除了在云中进行数据科学分析之外,还有许多其他原因可以让您在其他地方执行您的模型。
如前所述,大多数商用产品都不符合这一要求。在现有解决方案的基础上增加一个简单的功能并不是一件小事。在某些情况下,允许这种分布式和异构的分析和部署环境有一些深刻的含义。我们只看一些注意事项。
首先,我们必须认识到机器学*模型和完整用例之间的区别,或者像一些人喜欢称之为人工智能。机器学*模型只是被提供一组数据,并返回一个“答案”。它可以是分类任务、回归或预测任务等。但这是机器学*模型的终点。为了从模型中获得价值,人们必须将它包装在一个完整的用例中,有些人称之为人工智能。您如何可靠地获取所需的数据?你如何呈现或按照模型给出的答案行动?这些以及更多的问题需要由机器学*部署环境来回答。
认识到这一点,部署一个完整的用例首先需要做的事情之一就是访问数据。在大多数行业中,数据的来源是有限的(数据库、web 查询、csv 文件、日志文件等等),处理它们的方式是重复的,也就是说,一旦我找到了一种处理数据库查询的方式,下一次我的大部分代码看起来都是一样的,除了查询本身。因此,数据访问应该由机器学*部署环境来促进,该环境应该提供“数据连接器”,其可以根据需要进行配置,并且部署在数据可用的地方。
一旦您可以访问数据,您将需要关于何时需要执行机器学*模型的“规则”:是一天一次,还是应请求…同样,有许多可能性(尽管当您开始考虑它时,许多都是相同的),但是表达这些“规则”应该通过部署环境来促进,这样您就不必为每个用例重写新的“数据调度程序”,而只需配置一个通用的“数据调度程序”。
现在我们有了数据,我们准备调用一个模型,对不对?没那么快。虽然有些人认为数据准备是模型的一部分,但我更愿意把它看作是一个中间步骤。你为什么会说?原因很简单,因为数据准备是一个确定性的步骤,其中不应该包含学*,而且在许多情况下,您将显著减少该步骤中的数据大小,这些数据是您可能希望存储以监控模型行为的数据。但我稍后会谈到这一点。就目前而言,只需考虑可能需要“数据简化”,而这一点不可能是通用的。您可以将它视为一个预模型,它以一种您的模型可以使用的方式格式化数据。部署环境应该有助于此类组件的打包,并提供轻松部署它们的方法(同样,在任何需要的地方)。
我们现在已经准备好执行机器学*了!您已经从数据科学活动中产生了一个模型,这个模型需要被称为。至于“数据缩减”,应该通过部署环境、打包和部署来促进“模型执行”。
对于那些经历过创建模型循环的人来说,你肯定会有这样的问题:但是你是如何训练这个模型的呢?所以,是的,我们可能需要一个“模型训练”组件,它也依赖于模型本身。部署环境还应该促进培训组件的使用/部署。然而,这回避了另一个重要的问题。用于训练的数据从何而来?如果模型漂移,不再准确,需要重新训练呢?您将需要数据…因此,另一个必需的组件是“数据采样”组件。我说数据采样是因为你可能不需要所有的数据,也许一些样本就足够了。这可以是由模型执行环境提供的,并根据用例进行配置。您还记得之前关于数据简化的讨论吗?嗯,只存储来自简化数据的样本可能是明智的……您可能还想存储由模型做出的相关预测。
无论如何,您将需要一个“样本数据库”,它需要根据用例配置适当的保留策略(除非您想永久保留该数据)。
正如我们所说,模型可能会漂移,因此数据运营团队必须监控该模型/用例。为了方便起见,应该有一个“模型监控”组件,它将从执行环境本身以及示例数据库中获取线索,这意味着您需要一种方法来配置要监视的值。
这些涵盖了所需的最基本的组件,但可能还需要更多。如果您要以分布式和异构的方式部署这个环境,您将需要一些“信息传输”机制或组件,以便在不同的域之间以安全和简单的方式交换信息。
Machine Learning Execution Environment Overview.
您还需要一个模型协调器,它会根据需要放大或缩小所有这些部分。那么模型生命周期管理、金丝雀部署或 A/B 测试呢……你看,这里需要考虑的甚至更多。
需要注意的一点是,即使在这个阶段,您只有模型“答案”…您仍然需要以对您的用例有用的方式使用它。也许它是一个仪表板,也许它是用来启动某个过程的……故事并没有就此结束。
对于我在爱立信的朋友,你可以在我写的关于这个主题的备忘录和架构文档中找到更多的信息:“走向机器学*部署环境”。对于其他人来说,如果你正在建立这样一个环境,我希望这些想法可以帮助你。
封面照片由 弗朗斯·范·黑尔登在佩克斯 拍摄。
原载于 2018 年 7 月 13 日【thelonenutblog.wordpress.com】。
在哪里投资放射学人工智能
原文:https://towardsdatascience.com/where-to-invest-in-radiology-ai-31213f4ba7a8?source=collection_archive---------4-----------------------
随着我们到达围绕人工智能及其对放射学领域的影响的炒作曲线的顶点,精明的投资者意识到这一前进空间的危险和陷阱比以往任何时候都更重要。对于所有的梦想和初创企业的咆哮来说,有大量的艰苦工作、监管官僚主义、科学验证和制度偏见需要克服。所有这些都不是不可克服的,但是为了获得最大的成功机会,我们需要后退一步,在决定最佳投资策略之前,调查一下我们的周围环境。
在这篇文章中,我将讨论将深度学*应用于放射学的承诺、希望和严酷的现实,以及在选择下注地点时要寻找的令人兴奋的方面。
大肆宣传
我们现在应该停止培训放射科医生。
我是人工智能在放射学中的巨大传播者,但也是实用主义者和现实主义者。我不同意放射科医生将在短短 5 年内被取代的观点,但我相信放射科医生将在未来十年内得到人工智能难以置信的良好服务和增强。我非常尊敬杰弗里·辛顿;毕竟,他的确是图像感知的教父。然而,他的名言大大夸大了布丁(我相信,如果被追问,他会澄清和缓冲这一声明!).首先,他的言外之意是放射科医生唯一做的事情就是解读图像——这是对整个职业的巨大曲解。他还假设医院会毫无疑问地接受新技术。我只需要指出过去十年对 CADx 软件的极度依赖,就可以证明将新技术注入临床一线是多么困难…
人工智能承诺未来会有巨大的回报,但在可预见的未来不会完全取代放射科医生。是的,放射学正处于需求超过能力一个数量级的转折点,但这正是这个领域如此突出的原因——问题如此巨大,解决方案如此接*!我们当然需要 AI!当然能有帮助!我们当然迫切需要它!但是这些说法实际上并不意味着它会很快发生。这只会助长炒作泡沫。
有些炒作是好的;它有助于推动研究,带来投资,提高意识,创造竞争。但是炒作也是有害的;它会导致过度承诺、缺乏改善当前实践的投资,以及仓促采用不科学的方法来解决问题。
穿越低谷
当我们开始从炒作的顶点跌入幻灭的低谷时,我们将开始看到兴奋随着现实的到来而迅速消退。这是聪明的投资者可以大赚一笔的地方。
这里将有两种主要类型的投资机会:在这种环境下寻求种子资金的公司将必须证明自己比他们的前辈强得多,而迄今为止幸存下来的强者将寻求 A 轮或 B 轮融资以进入下一步。在这个阶段,应该根据他们最初的承诺对他们的结果进行认真的分析,以确保他们是可靠的。
在这一点上,我们应该投资什么样的技术进步?会出现哪些在宣传阶段没有预见到的挑战?需要什么类型的基础设施来支持这些公司的扩展?这些是投资者应该问的关键问题,我现在就试着回答它们…
大梦想,小现实,聪明的钱
雄心和远大的梦想在被夸大的种子资金轮中是伟大的,但在幻灭的低谷期就没那么有用了。这个阶段承诺世界的公司需要避开。关注那些已经将他们的眼光锁定在关键问题上的公司,这些问题越小越好。在放射学人工智能中,这意味着几件事:
- 对特定医学问题的敏锐关注。避免那些声称已经解决了所有问题的公司。相反,寻找那些只在一个问题上有深度的专业知识,并且已经显示出成果的人。您可以在以后扩大这些公司的规模,以解决其他重点问题。一个例子是一家公司声称已经解决了胸部 CT。这是炒作。避免。相反,投资一家致力于解决胸部 CT 成像中一个问题的公司。一个很好的例子是 Arterys 专注于一个问题——在 MR 上测量心脏流量。
- 尽早与监管机构接触。如果一家公司不知道这些规定或者对这些规定没有准备,那就避开它们。任何为临床目的解读图像的产品都是医疗设备,这意味着需要严格的流程来满足这一要求。只投资那些团队中有人已经成功通过监管领域,或者已经适当聘用,或者已经做出财务安排外包这项工作的公司。没有什么比长达 4 年的意外临床试验更能扼杀一家初创企业。
- 避免声称要取代人类的公司。没有一家公司的临床诊断设备能够获得 FDA 的批准,而不是由人来监督。相反,为了减轻监管负担,寻找生产软件的公司,这些软件与人类一起工作并增强人类的能力,被称为临床决策支持。这些可能是分类系统,定量分析工具,登记或分割系统。如果你一定要投资诊断服务,一定要有足够的钱——FDA 对 PMA 的收费起价是 25 万美元。祝你好运!
- 临床上有效的用例。这似乎很明显,不是吗?但是,你不会相信我从初创企业创始人那里听到了多少虚张声势。"我们将通过观察骨密度来测量一个人的年龄."听起来像一个有趣的科学实验——但是临床益处在哪里呢?有人会为这种服务付费吗?难道没有更便宜更简单的方法来达到同样的效果吗?只投资那些拥有强大的科学委员会,并解决了临床问题的公司。确保人工智能是解决临床问题的正确方法,并且问题确实需要解决。避免锤子找钉子。
- 寻找致力于消除偏见的公司。人工智能有一个巨大的偏见问题——我们可以在大量数据上训练神经网络,但这意味着算法总是偏向于它被训练的人群。在某些情况下,这意味着算法是明显的种族主义者、年龄歧视者、性别歧视者或者更糟。一家拥有减少学*偏差的聪明解决方案的公司将胜过有偏差的算法,更有可能在监管环境中取得成功,并在现实世界中更有用。医学讲究精准,需要精准的工具。
- 权力属于人民。许多放射学人工智能初创公司从大学和学术机构剥离出来,声称达到“95%的特异性”和其他令人印象深刻的性能指标。这是炒作。避免。检查他们的数据集大小。它远没有大到足以证明任何事情。例如,他们可能只训练了几千张图片。相反——关注那些可能报告较低准确性指标,但可以访问大得多的数据集(想想数百万)的公司。这些公司是现实主义者!当然,数据访问是机器学*中一个至关重要的障碍,但这让我想到了最后一点…
- 投资将有助于放射学人工智能作为一个部门发展的公司,而不仅仅是终端产品。如果我有一个几百万的基金来投资,我甚至不会去找涉及图像解读的公司。这个领域最需要的不是算法(这些是果实)——而是算法背后的基础设施(树)才是重要的。投资果园!寻找零知识转移数据存储系统的创新解决方案,用于匿名医疗数据的工具,用于访问 EHR 数据的 API,符合 DICOM 标准的区块链服务,以及用于构建临床自由文本的 NLP 服务。这些将是放射学人工智能革命的支柱,找到一家整个行业最终依赖的公司来构建他们的图像解释算法可能会被证明是非常有益的。
如何找到这些公司
所以,你知道要找什么,但是从哪里开始呢?对于种子基金投资,去资源和网络深入放射科医生,科学家和研究人员。在全球范围内,有如此多的医院和研究网络致力于成像领域的深度学*,每个都有一大批科学家,他们只是希望能够将自己的想法推向市场。投资者应该接*大学附属机构、机构合作者甚至科学家本人。Arxiv.org 是寻找科学界有影响力的人的一个很好的方式,也是了解该领域最新研究的一个非常有用的资源(这是我保存的对放射学论文的搜索)。如果你想避免与受资助的大学研究衍生产品相关的重大知识产权问题,那么尽早与研究人员建立关系网对于让他们参与进来至关重要。投资者应该寻求与这些在放射学和机器学*领域值得信赖的人建立合作伙伴关系,并开发一种利用合作伙伴的专业知识寻找新技术的策略(在试图决定是否投资动态对比度增强 MRI 序列的像素聚类分析时,银行学位不会起作用)。
对于首轮融资来说,理想的情况是找到处于隐形模式的公司,而不是那些闪亮的、大肆宣传的、寻求增长的种子基金资助的初创企业。很少有成长期的放射学人工智能公司真正拥有完全监管批准的可上市产品,即使有,也已经超额认购。隐形模式公司是一个更安全的赌注,但更难找到,但同样,这是与科学家建立联系的回报——他们知道谁在建造什么,谁是可信的,谁是该领域的领导者。
我的最后一条建议很简单:做一只乌龟,而不是兔子。你要长期坚持下去。不要期望在 3 年的时间尺度内有显著的回报。分散投资,为 5-10 年(甚至 15 年)的扩张期做好计划。那些现在就进行明智投资、选择能够在重点问题上灵活扩展的公司的人,能够引领市场基础设施。那些急于求成和过度承诺的人只能在以后的日子里迎头赶上。
如果你和我一样对人工智能在医学成像领域的未来感到兴奋,并想讨论这些想法,请联系我们。我在推特@drhughharvey
如果你喜欢这篇文章,点击推荐并分享它会很有帮助。
关于作者:
哈维博士是一名委员会认证的放射科医生和临床学者,在英国国民医疗服务体系和欧洲领先的癌症研究机构 ICR 接受过培训,并两次获得年度科学作家奖。他曾在 Babylon Health 工作,领导监管事务团队,在人工智能支持的分诊服务中获得了世界第一的 CE 标记,现在是顾问放射科医生,皇家放射学家学会信息学委员会成员,以及人工智能初创公司的顾问,包括 Kheiron Medical。
我的深度优先搜索机器学*呢?
原文:https://towardsdatascience.com/wheres-my-depth-first-search-machine-learning-6dd83436adab?source=collection_archive---------2-----------------------
作为一个狂热的图书读者,我对亚马逊这样的商店如何向我推荐与我将要购买的图书相关的书籍有一个问题,无论是以“购买了该商品的顾客也购买了……”还是“与该商品相关的赞助产品”的形式。我认为这些建议以广度优先搜索的方式起作用,就像在这里你有所有这些关于你想阅读的主题的书,但在我的情况下,我更喜欢亚马逊根据我正在阅读的作品中引用的内容来推荐书籍,或者深度优先搜索。
The Unwomalny Face of War
在这一点上,你可能会说……这就是书末参考文献的作用。首先,并不是所有的书最后都有参考书目。第二,我说的是书中引用的作品,作者特别强调了这一点,比如“你应该读一读 ZYX 作者写的这本 XYZ 的书”。一个问题是,很多时候作者并没有明确表达这种观点,但他们只是给你一些线索,说 XYZ 的书对他们很有影响。让我举几个例子来说明我的观点。
我第一次意识到这种需要是在我阅读卡米尔·福涅尔的《经理之路》时。她在导言中写道:
如果你对提高领导力的人员管理方面感兴趣,像《第一,打破所有规则》这样的书是很好的参考。
我看完那句话的第一个想法是:“为什么我在买卡米尔的时候,亚马逊不给我推荐那本书?”
然后我开始读刘慈欣的《三体问题》。在那本书的第一部分,他们提到了另一本名为寂静的春天的书,据《三体》报道,这本书似乎被文革审查过。在不破坏故事的情况下,寂静的春天是故事中非常重要的元素,直到后来我意识到这本书的第一部分实际上叫做寂静的春天。
在《三体》中,《寂静的春天》这本书只在这里和那里的角色中被提及,当我们读完这本书的一半时,我们意识到了解它的重要性。虽然阅读《寂静的春天》并不是理解《三体》的必要条件,但这似乎是一本非常有趣的书。所以在读这篇文章的时候,我也在想:“为什么我买《三体》的时候,亚马逊不推荐我那本书?
最后,我刚刚开始阅读诺贝尔奖得主斯维特拉娜·阿列克谢耶维奇的《战争中不具女性色彩的一面》( T1 ),这本书描述了二战期间参战的苏联女性。在介绍中,她写道:
曾经有一本书落到我手里:我来自一个燃烧的村庄,作者 a .阿达莫维奇,雅。Bryl 和 V. Kolesnik。我以前只经历过一次这样的震惊,当我读陀思妥耶夫斯基的时候。这是一种不寻常的形式:这部小说是由生活本身的声音组成的,由我童年时听到的声音组成,由现在在街上、在家里、在咖啡馆、在公共汽车上听到的声音组成。那里!圈子被封闭了。我找到了我一直在寻找的东西。我知道我会的。
阿莱斯·阿达莫维奇成了我的老师…
在这两段中,阿列克谢耶维奇告诉我们为什么那本书很重要,它对她意味着什么,但她不是说你应该读这本书,她只是告诉我们为什么那本书对她的生活有影响。我也想了解那本书,所以你现在可能已经猜到了,我也问自己:“当我买《战争的非女性面孔》时,为什么亚马逊不推荐我那本书?”。
这就是我希望机器学*帮助我的地方。我想要一种足够智能的算法来解析一本书的内容,并且足够好地理解文本的含义,从而知道作者正在推荐一本书,并且能够根据作者对这些推荐的内容进行排名。这意味着,仅仅在一本书上提到一个标题并不足以让它变得有趣:如果作者这么说,它就会变得有趣,无论是明确地说出来,类似于《经理之路》中的内容,还是战争中的非女性面孔;或者像三体问题中那样是隐含的。
所以,亲爱的杰夫·贝索斯,这是我的用户故事,作为一个购书者,我希望亚马逊根据书籍的实际内容向我推荐书籍,而不仅仅是根据人们在你的平台上购买了什么。
这是哪个品种的猫?一个更复杂的认知计算测试用例
原文:https://towardsdatascience.com/which-cat-breed-is-this-a-more-complex-test-case-for-the-cognitive-computing-bce46aa64483?source=collection_archive---------7-----------------------
本周早些时候,我写了一个简单的机器学*实验,试图确定一个给定的图像是否是一个玉米卷。
[## 这是玉米卷吗?自定义视觉的机器学*实验
想知道如何获得机器学*(ML)吗?嗯,现在你可以通过机器学*服务…
medium.com](https://medium.com/towards-data-science/is-this-a-taco-a-machine-learning-experiment-with-custom-vision-d33291a36b9c)
使用相同的基于云的认知机器学*技术,定制视觉,我想处理一个更复杂的场景。
机器学*算法能决定猫的品种吗?
训练数据集
像往常一样,我需要为机器学*算法提供多组图像,以理解它应该学*什么。
首先,我找到了一个猫品种的列表,上面有它们的名字和照片,以此作为我在网上寻找图片的基础。
然后,我去 Flickr 搜索每个品种的名字,用 Chrome 扩展插件从第一页下载图片。
我使用 Flickr 而不是 Google Images 的原因是为了下载高分辨率的图像。
Scottish Fold cats on Flickr
它也更容易瞄准用户上传到 Flickr 上的图片,这些图片比不切实际地编辑过的猫的图片更实用。
花了一个小时左右的时间下载猫的照片后,我不得不策展它们。
显然,我必须删除所有不是猫的图像,这样它们才不会影响训练集。
然后,我去剔除同一场景中同一只猫的图像,实际上只是同一只猫的连拍。
这是为了避免算法过度训练,它会寻找照片的精确匹配,而不是更具预测性。
请记住,机器学*的目的是让算法识别以前从未见过的新信息。
我必须确保的最后一部分是收集至少 5 张特定品种的图像,因为这是您在 Custom Vision 上创建的每个标签所需的图像数量。
我承认数据中存在一些偏差,因为一些普通品种的猫有超过 20 张图片,而一些不常见的品种只有超过 6 张可用的图片。
A varying amount of training images per breed
这可能会扭曲识别猫品种的结果,但至少我们意识到了算法中的潜在偏差。
所以最后,我收集了 50 种不同猫的 900 多张照片。
一旦我完成了数据收集,我就把所有的图片上传到 Custom Vision,并给每张照片贴上相应品种的标签。
之后,你只需点击一个按钮来训练算法,它就可以在几秒钟内为你运行一个预测。
测试数据集
这就是乐趣开始的地方,我们先来看看算法的性能。
The result of performance is so-so
基于 900 张图像和 50 个品种标签,该算法的性能预计一般。
我预计性能会很低,因为它不仅仅是从其他物体中识别出一只猫。
对于没有受过辨别差异训练的人来说,察觉猫品种差异的细微差别也是困难的。
所以半信半疑,我决定用算法从未见过的图像来测试算法。
首先是索拉,我的苏格兰折耳猫(我知道)
首先,我用我的猫测试了这个算法,我很确定它是一只纯苏格兰品种的猫。
53.9% chance that she is a Scottish Fold
用训练集测试我的猫很有趣,因为训练集中所有的苏格兰褶皱都有一个褶皱的耳朵。
我怀疑这有多大的影响,所以我接着测试了我的猫的特写照片。
Only 34.1% chance it’s a Scottish Fold
突然之间,我的猫被预测有很高的几率患 Cymric。
因此,我检查了训练集中所有标记为 Cymric 的图像,发现了一张与她一模一样的猫的图像。
尽管不同品种的猫有着截然不同的外貌,但来自不同品种的两只猫在面部模式上看起来非常相似也是有可能的。
在这种情况下,匹配不幸是巧合,也许更多种类的 Cymric 图像可以避免这种问题。
成功的测试案例
下面让我们快速看一下一些跨不同品种的成功测试案例。
96.9% Siamese, Credit: Max Pixel
99.8% Abyssinian, Credit: Max Pixel
99.9% Savannah, Credit Max Pixel
我必须说,当你测试随机品种图像时,这种算法是正确的,感觉很神奇。
然而,该算法并非没有缺陷,所以让我们来看看一些它失败的棘手情况。
失败测试案例
让我们来关注一下暹罗猫,因为该算法在前面的例子中表现得非常好。
首先,从后面来一张暹罗的图片怎么样?
Unlikely a Siamese, Credit Max Pixel
老实说,这并不太令人惊讶。
所有暹罗的训练图像集都让他们的脸朝向相机,而不是看向侧面。
给暹罗猫一个特写怎么样?
11.1% Siamese, Credit Max Pixel
这个结果好像和之前测试我家猫咪的特写脸差不多。
也许当算法不仅仅看到一只猫的脸来确定品种时,它会工作得更好。
老实说,考虑到暹罗训练集有相似的图像,我认为它不会比 11.1%好多少。
然而,让我们继续测试非猫图像。
狗,兔子,豚鼠
你可能已经意识到每个结果都有一个“猫”标签。
使用自定义视觉,您需要用至少两个标签标记每个图像。
所以让我们用其他毛茸茸的动物照片来测试一下。
this dog is definitely not a cat, Credit Max Pixel
this dog is possibly a cat, Credit Max Pixel
this rabbit is definitely a cat, Credit Max Pixel
this rabbit is also definitely a cat, Credit Max Pixel
this guinea pig is definitely a cat, Credit Max Pixel
this guinea pig is unlikely to be a cat, Credit Max Pixel
显然,如果它们看起来足够相似,算法很难区分什么是猫,什么不是猫。
很有可能,经过训练的算法会根据颜色、图案和整体形状来模糊匹配它看到的东西。
裁决
给定一个粗略的训练集,训练后的算法在某些条件下表现良好,可以识别猫的品种。
然而,它没有做好它没有被训练去做的事情,比如区分猫和非猫动物。
因此,在任何人投入时间训练任何机器算法之前,界定它应该能够处理的范围似乎是明智的。
你养猫吗,很好奇算法对它们的照片表现如何?
欢迎在评论中给我发一个图片网址,我会帮你测试的!
我是 Fresh Consulting 的前端开发主管。我写关于有影响力的技术领导()和最新的技术实验。
跟我上 中 和 推特
哪个导演拍的电影最好?
原文:https://towardsdatascience.com/which-director-makes-the-best-films-1050e5a73dc4?source=collection_archive---------4-----------------------
看数据来支持我的观点,马丁·斯科塞斯是最伟大的电影导演
我取了自 1960 年以来 12 位最多产导演的电影的 meta scores(Meta critical的加权和标准化的评论家评分平均值),并绘制了如下的方框图:
A box plot of metascores for 12 directors, each point represents a film. The line bisecting the box is the median value, and the width of the box is the interquartile range. Unlike most box plots, all the data points are shown.
谁是最棒的?
斯科塞斯是得分最高的导演,其次是理查德·林克莱特,然后是科恩兄弟。这些导演的顶级电影是(斯科塞斯)《少年时代》(林克莱特)和《老无所依》(科恩兄弟)。得分最低的导演是朗·霍华德,他评分最差的电影是《倒叙》。
谁最始终如一?
上图中方框的宽度对应于四分位距,这是数据可变性的一种度量。为了更清楚地了解这一点,我在条形图中绘制了每个控制器的四分位数范围(控制器元得分的 75%位于该范围内):
Interquartile Range of the metascores of the 12 directors.
最稳定的导演是伊史蒂芬·索德伯格,其次是斯科塞斯和林克莱特。弗朗西斯·福特·科波拉的元得分最多;评分最高的(《教父》** ) 和评分最低的(《杰克》)都是他的电影。**
结论
根据评论家的说法,马丁·斯科塞斯是最好的导演,也是十二位最多产导演中第二个最稳定的。
后记:关于元符号分数的注释
自 1999 年推出以来,Metacritic 为绝大多数电影配乐。然而,在此之前对电影的报道较少。这可能会扭曲那些在 1999 年之前有很多电影的导演的结果。例如,可能存在对过去更受好评和著名的电影的评论的偏见,这可能会使这些电影的导演的分数向上倾斜。
作为一名远程机器学*工程师,我应该使用哪种硬件?
原文:https://towardsdatascience.com/which-hardware-should-i-use-as-a-remote-machine-learning-engineer-35af52301d3c?source=collection_archive---------2-----------------------
数字游牧的前提是伟大的:作为一名程序员,你可以带着你纤薄的 MacBook 去巴厘岛的海滩,在那里工作。但是如果你从事机器学*工作,工作需要昂贵而强大的 GPU 呢?几个选择。
在远程工作甚至四处旅行时,如何处理硬件有多种选择。他们每个人都有自己的优点和缺点,所以我想通过他们。
塔
最显而易见的选择——就像在非偏远的工作场所一样,在你的办公桌旁边放一个结实而强大的塔。当然,它会让你的办公室变热——但你要对自己的硬件负责。你可以随时升级你的机器。另外,如果你做大量的训练,这可能是一个更便宜的选择。
顺便说一下,在海滩和/或咖啡馆工作不再是一种选择——你将被束缚在办公室里。
亲
- 掌控您自己的硬件
- 价格
Con
- 受公职约束
- 功率和热量消耗
游戏玩家笔记本
如果你想灵活消费,但仍想离线/在自己的硬件上工作,你可能需要考虑游戏笔记本电脑。虽然游戏笔记本电脑过去几乎与塔式机一样宽,使用时电池运行时间不到 2 小时,但现在它们在这方面要好得多!现代游戏笔记本电脑只比传统笔记本电脑宽一点点,电池运行时间通常在 7-9 小时之间!
不过它也有缺点:游戏笔记本经常会有发热问题,而且更容易坏。它们也非常昂贵并且不容易修理。意思是:如果你有灰尘或者短路什么的,你可能不得不买一个 2000 多美元的新笔记本。
Pro
- 更加灵活
- 拥有硬件
Con
- 价格
- 可修性
- 供暖问题
笔记本+塔式
如果你是一家拥有几名机器学*工程师的初创公司,这是一个很好的选择。工作时,你坐在任何笔记本上,比如 Macbook。一旦你准备好训练,你就进入了一个强大的 ML 机器,有几个 GPU 等等。该塔可以位于办公室、服务器机房或任何其他地方。
虽然您仍然可以控制您的硬件,并可以随时升级,但您不必担心灵活性、电池运行时间或东西损坏。如果你让你的 MacBook 掉进了海里——买一台新的。培训仍在其他地方进行。
Pro
- 灵活的
- 控制硬件
- 培训与工作机器是分离的
Con
- 需要互联网连接
- 两台机器->总价更高
笔记本+ eGPU
如果你是一个单独的工程师,不在团队中工作,你可能不值得买一个塔和一个笔记本。一个简单但仍然灵活的解决方案是外部 GPU!你仍然可以把你的笔记本带到海滩或任何地方,但你可以让你宝贵的 GPU 留在酒店房间里。一旦您准备好接受训练,您就可以插入 eGPU 并开始训练——所有这一切仍然保持对您的硬件的控制。
Pro
- 控制硬件
- 培训与工作机器是分离的
- 比塔式便宜
- 脱机的
骗局
- 不完全灵活
笔记本+云[AWS/GCP]
最后一种解决方案也是单身工程师或早期创业公司的首选。
许多云提供商,如亚马逊、谷歌或 Paperspace,允许你在他们的机器上训练你的模型。这是您不必担心自己的硬件的唯一解决方案。这有好的一面也有不好的一面:一方面,你不用担心坏了的 GPU、用电量、散热等等。另一方面,您将无法随时升级您的硬件——提供商决定何时升级以及升级什么。
此外,如果你在一个团队中工作,这可能不便宜。您将为使用云实例的每一分钟付费——让它整夜运行会变得非常昂贵。
亲
- 不控制硬件
- 独处时的价格
- 非常灵活
- 培训与工作机器是分离的
Con
- 不控制硬件
- 团队价格
结论
我曾与许多这样的变体合作过:
- 当我在 NVIDIA 实*的时候,我有强大的本地机器可以使用。
- 当我做自己的工作时,我通常在 AWS 上工作
- 在目前的职位上,我在 GCP 工作
我个人对远程公司的建议是,一开始就使用轻型笔记本电脑和云提供商。它为您的员工提供了很大的灵活性,而且没有人需要维护硬件。
当团队成长时,我也会开始使用共享机器。在某个时候,它会开始为你省钱,但你必须有人来维护它(可能还有一个集中的办公空间),所以这个选项并不适合每个人。
本文首次发表于Remote ml——远程机器学*工程师社区。
执行哪个假设检验?
原文:https://towardsdatascience.com/which-hypothesis-test-to-perform-89d7044d34a1?source=collection_archive---------3-----------------------
各种假设检验的概述,并附有一个单样本 t 检验的例子
统计学的目的是根据样本中包含的信息对总体进行推断。用于表征群体的数值度量被称为 参数 。人口参数是:
- μ:平均值
- 男:中位数
- σ:标准偏差
- π:比例
大多数推断问题可以表述为对总体的上述参数之一的推断。进行推理的方法分为两类:
- 估计人口参数的值
- 测试关于参数值的假设
有许多测试可以用来测试假设——但是我们什么时候使用哪种测试呢?这要看我们有什么信息,要检验什么假设。下面的流程图总结了各种假设检验以及何时应该使用。
在本文中,我们将更详细地研究单样本 t 检验****。
单一样本 t 检验
单样本 t 检验确定样本均值是否在统计上不同于已知或假设的总体均值。
假设
双尾单样本 t 检验的无效假设和替代假设为:
零假设:样本均值等于建议总体均值
替代假设:样本均值不等于建议的总体均值
类似地,我们可以陈述右尾和左尾检验的假设。无效假设和替代假设可总结如下:
检验统计量
单样本 t 检验的检验统计量可以使用以下公式计算:
在哪里,
将计算出的 t 值与自由度为 df = n-1 的 t 分布表中的临界 t 值进行比较。如果计算出的 t 值>是临界 t 值,那么我们拒绝零假设。
例子
在一项青光眼研究中,从 21 名老年受试者的样本中记录了以下眼内压值。根据数据,我们是否可以得出结论,人群的平均眼内压 与 不同于 14 毫米汞柱?
步骤 1:测试方法
我们需要使用的检验是一个 对均值 的单样本 t 检验(对均值的假设检验是一个 t 检验,因为我们不知道总体标准差,所以要用样本标准差 s 来估计)。
第二步:假设
列出测试有效的所有假设。即使假设未被满足,我们也应该评论这将如何影响我们的结果。
因变量必须是连续的。
观察结果相互独立。
因变量应*似呈正态分布。
因变量不应包含任何异常值。
第三步:假设
零假设描述了一个关于总体均值的断言。因此,零假设表明眼内压的群体平均值为 14 毫米汞柱,替代假设表明眼内压的群体平均值不同于 14 毫米汞柱。它可以用数学公式表示如下:
步骤 4:计算测试统计量
ȳ =样本平均值= 15.623
s =样本标准偏差= 3.382
n = 21
μ = 14
代入该值,我们得到, t = 2.199
在这种情况下(双尾),p 值是 t 分布两个尾部的面积。
步骤 5:确定 p 值并与显著性水平进行比较
在计算了检验统计量之后,现在我们可以计算 p 值了(使用 t 表)。t 统计对应的 p 值为 0.0398 。
那么,p 值是多少呢?假设零假设为真,这是观察样本结果或更极端结果的机会。如果这种可能性很小,我们可以拒绝零假设。
在我们的示例中,p 值是观察到样本平均值为 15.623 毫米汞柱的概率,或者是一个更极端的值,假设真实平均压力为 14 毫米汞柱。
p 值= 0.0398,小于 0.05(我们选择的显著性水平),我们拒绝零假设。有足够的样本证据证明真实平均眼内压不同于 14 毫米汞柱。
我们可以通过使用 scipy 模块在 Python 中实现单样本 t-test。
输出:
在 LinkedIn 上连接。
哪几局对赢得 MLB 棒球比赛最有影响?
原文:https://towardsdatascience.com/which-innings-are-most-influential-in-winning-mlb-baseball-games-e1a405b4fdc7?source=collection_archive---------17-----------------------
线性回归可以显示哪些局影响 MLB 棒球比赛的输赢吗?
Image from https://www.covers.com/sports/mlb
不管你在 sabermetrics 的爱与恨的光谱中处于什么位置,都不能忽视它们。每一次击球手的转变,替补投手开始比赛,以及像“发射角度”和“每分钟转数”这样你在一百万年内都不会想到的统计数据给比赛带来了前所未有的价值。棒球迷谈论的 sabermetrics 主要围绕个人击球,以显示什么可以使团队防守更好,或者一个进攻球员打出更多的本垒打,但没有一个真正表明球队在年底会赢得多少胜利。
有很多方法来确定什么将帮助一个团队获胜,但我想更多地关注每一局,以确定哪些局影响输赢。当然,团队希望“赢得”每一局,让他们的团队有最好的机会赢得比赛,但是否有特定的局比其他局更重要?一局中得分或允许得分会影响赢多少场比赛吗?我浏览了 2015-2018 赛季每场比赛的每一局,看看球迷是否应该比其他人更*距离地观看比赛。
一如既往,你可以在我的 GitHub 页面上查看我的代码和更深入的数学分析:https://GitHub . com/anchor p34/Baseball-Reference-Extracts/blob/master/Regression % 20 analysis % 20 on % 20 inning % 20 net % 20 runs . ipynb 这也将是未来更多棒球分析的主要数据来源,可以从我在https://github.com/anchorP34/Baseball-Reference-Extracts 的 web 抓取脚本或 JSON 文件中使用
在看每一局之前,我想看看每个赛季的胜利分布。
Wins for each team for the last 4 years
2015-2017 年的胜利分布彼此非常相似,但 2018 年更加分散。2018 年,巴尔的摩金莺队经历了棒球史上最糟糕的赛季之一,而波士顿红袜队则是最好的赛季之一。看看这两个队在每一局的表现会很有趣。
为了保持主题,看看年度概览,我们可以看看每支球队的总得分,看看进攻与总胜率有多大关系。
Offensive Runs vs Season Wins for each year
如果没有显示每个赛季的最佳拟合线,你就不会说得分越高,赢得的比赛就越多。这与净运行相比如何?净得分的计算是每个队在那个赛季得分的次数减去他们在那个赛季允许的得分次数。
Net Runs vs Season Wins for each year
每个赛季的净得分是一个更好的指标,可以显示一个球队在赛季结束时的总得分。R 平方值是. 908,这意味着净得分可以解释一个赛季中 90.8%的胜率变化。R 平方值越接* 1,变量之间的线性关系越好。作为参考,2018 赛季进攻得分的 R 平方值为 0.704。
我们还可以看到,线性函数是 0.097 *总净得分+ 81.033,这意味着一支球队在一个赛季中的平均胜场数是 81.033 场(几乎正好是一个赛季 162 场比赛的一半),总净得分的每一个正或负变化都会使球队赢得/输掉大约 1/10 的比赛。因此,如果一支球队在赛季中的总净得分是 50,我们预计他们会赢得 86 场比赛(81+50 * 1 = 86)。
不过这只是 2018 赛季。如果我们想把所有的季节放在一起看,净总运行次数会有一点点的变化,但总体趋势是相同的。
Net Runs vs Season Wins for all seasons
我们可以看到所有的季节加在一起将给出 0.864 的 R 平方分数,这将是我们前进的基线标准。这将被用来确定是否使用个别局更有助于预测一个球队在赛季结束时将获得的胜利数。
为了分析,我们需要做一个改变。由于有些比赛可以有加时赛,所以我取了每场比赛所有加时赛的净跑,称之为“Net_Inning_10”。单独查看每个额外的一局没有意义,因为有些游戏可以进行 10 局,有些可以进行 18 局,但除此之外,我不需要做太多的数据清理。
由于我们无法真实地可视化 11 维的东西,我们将会看到一个 ANOVA(aanalysisofVariance)图表,该图表显示了我们感兴趣的调整后的 R 平方度量以及系数和度量,以显示每一局的相互比较价值。这是我们基线回归的方差分析图:
我们最感兴趣的指标用红色方框标出。如您所见,我们有与散点图相同的 R 平方值以及相同的系数(. 094 *总净运行数+ 80.98)。但是,我们将开始查看调整后的 R 平方度量,因为它会惩罚变量数量增加的模型。t 值有助于我们确定每个变量的重要性以及它们是否具有统计显著性。t 越远离 0(正或负),该变量在预测一个赛季的总胜率方面的统计意义就越大。
P >|t|度量是“P 值”,它是该特征的斜率为 0 的概率,这将是一条水平线,因此对预测获胜总数没有影响。统计学家通常使用 0.05 作为该指标的阈值,这意味着任何低于 0.05 的指标都被认为对该回归模型具有统计显著性。
首先,我想看看各个季节,看看我们是否得到相似的结果。以下是 2015 赛季和 2018 赛季的方差分析图:
2015 Anova Chart
2018 Anova Chart
在调整后的 R 平方值方面,我们可以看到,2018 赛季的总胜场数可以比 2015 赛季更好地解释,只要看一下从 2015 年的. 746 到 2018 年的. 912 的每局总净得分。这并不意味着 2018 年是一个更好的分析年,只是意味着每局的净得分比 2015 年的模型更好地解释了 2018 年的赛季胜利。对于统计显著特征,2015 年刚好有第 5 局,而 2018 年是第 1、5、9、10+局。最后,两个模型的每一局的系数都是正值,这意味着不管哪一局,你在那一局的净得分越高,你在年底的胜场就越多。这两个模型没有我想象的那么接*。
既然我们已经看到了每个季节分别建模,让我们一起建模所有的季节。
Regression analysis for seasons 2015–2018
从调整后的 R 平方指标 0.868 开始,这几乎等同于总净运行模型 R 平方值 0.864。为了简单起见,只使用基线模型更有意义,因为您只需要使用一个变量,而不是在完整的模型中使用所有 10 个变量。我们还在最终模型中看到,在预测总胜率时,每一局都被认为具有统计学意义。
如果有一个局的特定子集,比模型中的所有局给我们提供了更好的调整 R 平方值,会怎么样?我能够运行每一个可能的场景,随着每一局的增加,调整后的 R 平方值增加:
The best feature set for the number of input features of the model
从上到下,我们可以看到第四局本身是最有影响力的一局,调整后的 R 平方值为 0.432。这很有意思,因为在最终模型中还有 5 局比第 4 局更有统计学意义。
Graph showing how the Adjusted R Squared value increases with each additional inning that gets added into the model
您还可以看到,随着模型中要素数量的增加,校正后的 R 平方值也会增加。从这个分析中,我们可以得出结论,最佳调整的 R 平方值将包含所有局的分析。
结论:
模型中最有影响力的四个局是第 5、第 1、第 8 和第 2 局。这些局是有意义的,因为第一局和第二局是投手必须始终面对球队中最好的击球手的时候(顺序中最少 1-6),第五局是先发投手想要结束的一局,因为他们必须投完 5 局才能获胜,第八局之后的得分决定了球队是否需要使用他们的终结者。对于使用这种分析的球队来说,如果他们看起来开始累了,他们需要非常小心第五局的首发投手。从长远来看,搞砸这一局会对他们的赛季总胜率产生严重的影响。
我们还可以看看 2018 年波士顿红袜队和巴尔的摩金莺队的净局数,看看是什么让他们如此不同:
与红袜队相比,金莺队的这个赛季如此糟糕,原因显而易见。两队之间,有些局彼此接*,但像第 5 局和第 1 局这样最有影响力的局,结果却截然不同。金莺队在可能的 10 局比赛中有 8 局是负的,而红袜队在 10 局比赛中只有 1 局是负的,但即使是这 1 局也比金莺队的一些净局数(-56,-61)少了(-9)。
这一分析的总体信息非常清楚。每一局都对你的团队在年底能否成功有很大的影响。你可能会看到每一年都有不同的价值,但是把所有的年份都考虑进去就会发现每一局都是有价值的。我们也看到了没有必要将每一局都放入一个模型中,而只需要整个赛季的总净得分。如果你想在年底进入季后赛,你需要在每一局持续得分超过你放弃的分数。
欧洲最激动人心的足球联赛是哪个?
原文:https://towardsdatascience.com/which-is-the-most-exciting-soccer-league-in-europe-529c6639e84a?source=collection_archive---------12-----------------------
Photo by Thomas Serer on Unsplash
从根本上说,足球是一项简单的运动。你开球,连续打 45 分钟,休息 15 分钟,再打 45 分钟。但是根据比赛地点的不同会有很大的不同。例如:英格兰超级联赛历史上一直以注重比赛的身体方面而牺牲更多的技术和战术方面而闻名,尽管这种情况最*正在发生变化。意大利的意甲联赛被誉为欧洲主要联赛中最具战术性和防御性的联赛。
在本帖中,我将深入数据,分析各个联赛之间的差异,目标是回答以下问题:哪个联赛最值得看?
数据
这个 Kaggle 数据集提供了来自欧洲五大联赛(英、法、西、意、德)的 9000 多场比赛的详细信息。它涵盖了从 2011/12 赛季开始到 2016-17 赛季中期(准确地说是到 2017 年 1 月 25 日)的比赛。理想情况下,我会喜欢更新的数据,但我会在这次分析后努力获取这些数据。
我选择这个数据集是因为它提供了每场比赛的事件级数据,包括投篮次数、黄牌和换人。有了这种详细程度,我可以做很多分析,这是我无法用一个只到游戏级别的数据集做的。
这个数据集相当均匀地分布在五个联赛中,只有一个例外:德国。这是因为德甲是唯一拥有 18 支球队的联赛;其他联盟都有 20 个。少两支球队显然会导致每个赛季的比赛减少。
另一点:英超的比赛比法甲、意甲和西甲略多,因为它是唯一没有冬歇期的联赛。由于这个数据集将于 2017 年 1 月结束,英格兰队将在假期期间比赛,而其他联赛将会休息。其他联盟通常会在赛季末补上这些比赛,但这个数据集并没有考虑到这一点。
这些数据也在不同的季节平均分布,这是你所期望的。2016-17 赛季仅占数据集的 9.7%,而其他赛季占 18.1%,因为该数据集仅涵盖到 2017 年 1 月 25 日。
哪个联赛进球最多?
对于大多数人来说,更多的目标=更多的兴奋。所以我会先看看每个联赛中每场比赛的平均进球数。
Average Goals Per Game
德甲平均每场 2.87 个进球,远远高于其他联赛。这种超额表现的一部分可能是因为联赛中的球队越来越少,比赛越来越少,但这仍然是一个实质性的差异。法甲联赛场均进球 2.52 个,排名垫底。
在我们给出德甲在这一点上的优势之前,让我们看看得分的分布,即进球在某些比赛中的集中程度。他们是平均分布还是几场比赛进球比例大?这对联赛的观赏性/精彩程度有很大的影响。例如,我们有理由假设零比零平局越少,联赛就越精彩。
Distribution of goals scored in a game
上面的图表显示的是每个联赛中每个可能进球总数的概率。举例来说,图表显示,在意大利,一场比赛有 17%的机会以 1 球结束,有 15%的机会以 4 球结束。在西班牙,一场比赛有 15%的几率有 4 个进球,有 7%的几率有 5 个进球。
我们可以看到联盟中的分布看起来非常相似。它们每个都有一个*似的正态分布,最常见的结果是在一场比赛中打进 2 到 3 个球。一个小的兴趣点:英超是唯一一个比赛进 3 个球比进 2 个球更常见的联赛,尽管只是稍微更常见。
由于上面的分布看起来彼此相似,我们可以说,就进球在游戏中的集中程度而言,各联盟之间没有实质性的差异。
外卖:
- 德甲和西甲的场均进球数最高,英超接*第三。意甲第 4,法甲最后。
- 不管是哪个联赛,只有 7-8%的比赛没有进球。
哪个联赛的比赛最接*?
势均力敌的比赛紧张、刺激、有压力。他们很棒。所以让我们看看每个联盟的胜率。
Average margin of victory, in goals, for each league
场均进球数最低的法国队实际上拥有最接*的比赛,胜率为 1.27 球。因此,如果你看一场法甲比赛,你可能会看到稍微少一些的进球,但比赛通常会更接*。因此,对于法甲球迷来说,这并不完全是悲观的。
意大利仅略落后于法国,MoV 为 0.02 个进球。这种差异实际上非常微小,没有统计学意义。Scipy stats f_oneway 函数的 p 值为 0.49。这意味着法国和意大利之间的胜利差距可能只是偶然,而不是由于联赛之间的任何根本差异。类似地,当比较西班牙和德国时,P 值为 0.66,因此这种差异在统计上也不显著。然而,法国/意大利和英国和西班牙/德国之间有显著的不同。
就像我们对进球得分所做的那样,让我们看看胜率的分布,看看是否有任何一个联赛有更大比例的势均力敌的比赛。
Distribution of the margin of victory in a game
各联盟之间似乎没有什么显著差异。
外卖:
- 最接*的比赛,看法甲或者意甲,他们的比赛是由~1.3 个进球决定的。
- 德甲和西甲的胜率最大,约为 1.45 球。
哪个联赛的后期进球最多?
目标就是目标就是目标。但是在比赛的余烬中进球,当一支球队拼命想扳平比分或赢得比赛时,那就更好了。所以让我们看看哪个联盟给你最惊心动魄的结局。我将把迟到的进球定义为在第 75 分钟或更晚的时候进球。
首先,不是所有的游戏都有我需要的事件级数据。下图是各联赛此类比赛的场次。
绝大多数没有高级统计的游戏都来自英超联赛。我认为这不会对分析产生太大影响,因为我更感兴趣的是后期进球的百分比,而不是原始数据,但我不能肯定。如果我有所有比赛的这些统计数据,那肯定是理想的,但是现在,我会对我有这些数据的比赛进行分析。
Fraction of goals that are scored in 75th minute or later
法甲拥有最高的后期进球比例,远远超过其他任何联赛。这对我来说有点意外,因为我预计英超联赛的后期进球比例最高,因为它以快速和激烈而闻名。
我也很想知道如果我们算上上半场的最后 5 分钟,情况会有什么变化。
Goals scored in minutes 40–45 and 75+
如果把上半场结束时的进球计算在内,法国队仍然领先。看起来德国队在 40-45 分钟内的进球相对较少。在之前的图表中,德国和英格兰都徘徊在 23%左右,但在这张图中,德国大大落后于英格兰,29.7%比 31%多。
外卖:
- 在法甲联赛中,每 4 个进球中就有* 1 个(25%)是在第 75 分钟或更晚的时候打进的
- 德甲后期进球比例最低,为 22.75%。
- 德甲联赛在 40-45 分钟内的进球也略少:7%,而其他联赛为 8%。
哪个联赛进球间隔时间最少?
最后,我们来看看哪个联赛的进球次数最多。换句话说,从一个目标到下一个目标你需要等待多少分钟。显然,进球之间的等待时间越短,比赛就越精彩。
下图显示了至少有 2 个进球的比赛中进球的平均间隔时间。
Minutes between goals (in games with 2+ goals)
英超在这一指标上名列前茅,平均每场比赛的进球间隔略多于 22 分钟。另一方面,法甲比赛的进球间隔时间为 24.5 分钟。
注意:对于上面的图表,我没有考虑那些只有一个目标的游戏。“进球间隔时间”的概念在这些比赛中并不适用。但是为了以某种方式将这些游戏结合起来,让我们来看看一场游戏的第一个进球是什么时候打进的。我的假设是,你等待看到第一个进球的时间越少,比赛就越精彩。现在,第 89 分钟的进球可以和第 2 分钟的进球一样令人兴奋,如果不是更多的话,但是我认为如果在前 65-70 分钟没有进球,很多观众会感到厌烦。这就是为什么我认为一个早期的目标对于决定哪场比赛,以及哪一个联盟,最能吸引观众的注意力是很重要的。
When is the first goal scored during a game?
如上图所示,一般德甲比赛的第一个进球至少比其他联赛早一分钟,所以如果你想看到提前进球,德国是最好的选择。
外卖:
- 德甲比赛的平均第一个进球比任何其他联赛都要早,法甲比任何其他联赛都要早。
结论
如果你想要进球,西甲和德甲是值得看的联赛。如果你希望进球一个接一个的快速到来,这就是英超。如果你想要势均力敌的比赛或者有进球动作的比赛,去法甲吧。
哪种机器学*算法将在 2118 年继续使用?
原文:https://towardsdatascience.com/which-machine-learning-algo-will-continue-to-be-in-use-in-year-2118-59d0461160f3?source=collection_archive---------6-----------------------
Image source : Pixabay
那么你脑海中闪现的答案是什么?随机森林、SVM、K 均值、Knn 甚至深度学*及其变种?
Image adapted from imgflip.com
现在你们中的一些人可能会笑着说,你怎么能预测那么远的未来,预测 100 年后的事情是疯狂的。
Image adapted from imgflip.com
你凭什么说 2118 年还会继续用回归?
答案是林迪效应。是的,我用来预测这是林迪效应的试探法。
好吧,下一个合乎逻辑的问题是什么是林迪效应?
林迪效应
维基百科对林迪效应的定义如下
“林迪效应”是一个概念,即一些不易腐烂的东西,如技术或想法的未来预期寿命与它们当前的年龄成正比,因此每增加一段生存时间就意味着更长的剩余预期寿命。
我最喜欢的作家之一纳西姆·塔勒布在他的名著《抗脆弱:从无序中获得的东西》中对林迪效应定义如下。
如果一本书已经出版了 40 年,我可以预计它还会出版 40 年。但是,这是主要的区别,如果它能再生存十年,那么它将有望再出 50 年。简单地说,作为一个规则,这告诉你为什么存在了很长时间的东西不像人一样“老化”,而是相反地“老化”。没有灭绝的每一年都会使预期寿命增加一倍。这是某种稳健性的指标。一个物品的坚固程度和它的寿命成正比!
一位名叫呼唤的专家写了一篇关于林迪效应的文章,强烈推荐阅读。
那么,为什么衰退会持续那么久呢
因为它存活了这么久。回归(最小二乘法)作为一个概念最早是由卡尔·弗里德里希·高斯和阿德里安·玛丽·勒让德在 19 世纪发明的。他们用它来确定行星和其他天体围绕太阳的轨道。
“回归”一词是由弗朗西斯·高尔顿创造的,用来描述观察到的高个子父亲往往有相对较矮的儿子,而矮个子父亲往往有相对较高的儿子!!
很明显回归已经存在了 200 多年了!!所以根据林迪效应的启发,它还会持续 200 年。所以事实上,我可能有点保守地说,回归将在 2118 年继续使用。
Adapted from Grandpa Meme
回归长寿背后的秘密是什么?
这方面的例子是 2016 年 Kdnuggets 调查的以下报告
事实上,在 2011 年 kdnuggets 在进行的另一项调查中,回归紧随其后。因此,通过林迪效应,它在 5 年内成为“更不朽”的排行榜冠军!!
(更新:在写这篇文章的时候,我不知道还有一个 2017 年调查。2017 年的调查也显示回归名列榜首)
回归仍然是广泛使用的 ML 算法。人们使用回归或者继续使用回归是因为
这很简单
高度可理解性(即使是呆伯特的老板也能理解:P)
它工作了
“有效”的部分
不同领域的人们继续使用回归,因为它对他们有用。人们通过使用回归获得了明显的投资回报。例如,在市场营销中,市场组合建模背后的驱动力是回归。这仍然是一种流行的技术,许多快速消费品公司相信 MMM 的输出。其他领域也是如此。如果回归在交付结果时没有用,它将会以渡渡鸟的方式消失。它仍然被工业界和学术界使用,因为“它有效”。
神经网络及其变体呢?2118 年会用到它们吗?
到目前为止,林迪效应对神经网络并不友好,或者让我们称之为人工智能。它已经面临艾冬。神经网络及其变体的寿命受到了 20 世纪“人工智能冬天”的阻碍。这种破坏对于技术或算法的寿命来说不是一个好兆头。
但从光明的一面来看,在过去十年里,人工智能相关的进步越来越强大。而我作为一个永远的学生,继续着迷于最新的人工智能突破。因此,一个安全的赌注可能是,我们可以看到神经网络及其变体再生存 10-20 年,希望埃隆·马斯克表达的“奇点”恐惧不会导致另一个人工智能冬天。
什么可以减轻机器学*算法的林迪效应?
机器学*矫枉过正:是的,林迪效应会因为机器学*算法的错误应用和矫枉过正而减轻。我遇到过人们使用机器学*算法的情况,而简单的常识基线方法可能会奏效。Rama Ramkrishnan 先生在他的文章中很好地抓住了这一本质。
最*流行的数据科学是最性感的工作,这也无助于这项事业。机器学*算法在数据科学家手中已经变得像一把锤子。每件事看起来都像一个钉子。在适当的时候,机器学*的错误应用或过度使用将导致人们在它不提供价值时不再抱有幻想。这将是一个自己造成的“人工智能冬天”。
但是目前回归将会笑到最后,甚至可能在 2118 年。
如果你喜欢我的文章,给它一些掌声,你也可以在下面评论你对这篇文章的看法。
你可以联系我
领英
推特
我的博客:分析洛卡
用机器学*评估 NBA 球员的相似性
原文:https://towardsdatascience.com/which-nba-players-are-most-similar-machine-learning-provides-the-answers-r-project-b903f9b2fe1f?source=collection_archive---------8-----------------------
使用无监督机器学*和主成分分析来确定哪些 NBA 超级明星最相似
Photo by NeONBRAND on Unsplash
背景
如果你很了解我,你可能会意识到我的篮球爱好已经成为我生活中的一个重要特征。你可能也知道我是多么喜欢记录我最喜欢的球员的赛季平均数据,经常在观看比赛时,每次投篮后都在脑子里计算数据。但这是我第一次使用应用统计学/机器学*(ML)工具来研究 NBA 数据。不用说,我对我们的进展感到非常兴奋。我们开始吧!
定义问题
正如无监督的 ML 项目的性质一样,没有一个特定的预测问题是我们想要解决的。但是,即使没有具体的目标,仍然有很多东西可以从开放式探索中学*。在这个项目中,我们将着眼于 NBA 上一个完整的常规赛的球员统计数据。我们将探索个别球员和他们之间的差异/相似之处,看看这些数据是否符合球迷和专家们认为的 NBA 球员的基本事实。篮球运动的每一个方面当然都不是统计上可以衡量的,在一项团队运动中观察个人数据只能给我们一个更大图景的片断视图。但即使有这些限制,体育数据科学的进步所提供的见解已经彻底改变了现代篮球。鉴于每支球队都向其球员支付数亿美元,所有 NBA 球队(最终都是数十亿美元的企业)都在这一领域投入更多资金以评估其投资(球员)的质量就不足为奇了。在这个项目中,我们将试图得出我们从表面上看数据无法得出的结论,并希望得出粉丝和分析师都感兴趣的发现。
使用的数据集
我们使用了 2017-18 赛季 NBA 常规赛的球员数据,并结合了网站上的三个数据集,篮球参考和【NBAmining.com 。来自 Basketball-reference 的第一个数据集由传统的 NBA 统计数据(得分、篮板等)组成。我们关注的是 36 分钟比赛时间的球员统计数据,而不是平均每场比赛的数据。按每场比赛的分钟数来标准化给了我们一个更公平的代表每个球员的贡献。相反,如果我们看每场比赛的统计数据,像勒布朗·詹姆斯这样打更多分钟的球员在理论上比像斯蒂芬·库里这样在精英球队打球的球员更好,他们通常不会在大获全胜的比赛结束时上场。现在,你可能会说我们的方法对那些打更多分钟的球员不公平,如果勒布朗像库里一样打更少的分钟,而不是在疲惫的边缘被迫打更长时间,他可能会在 36 分钟内打出更好的数据。也有人认为每 100 场比赛的数据是评估球员影响力的最佳指标,因为他们根据球队的节奏来标准化球员的数据。我认为这个标准也有它的缺点,它减少了那些没有得分选项的球员的影响,因此不会*惯于球队不得不匆忙得分的控球。不幸的是,在评估体育统计数据时,我们永远无法完全摆脱这种偏见。但是我们可以尽力减少这些偏差,并在以后评估我们的结果时注意这些偏差。这也是为什么人的因素在评估 ML 结果中至关重要的部分原因。我们正在使用的第二个篮球参考数据集包括来自同一组球员在整个赛季中的“高级”统计数据(使用百分比、总篮板百分比等)。我们使用的第三个数据集来自一个不太知名的网站,名为 NBAminer.com。这一个提供了各种各样的统计数据(快攻点,内线得分等),提供了关于球员影响力的有用见解,这在前两个数据集中没有包括。
“传统”数据集有关于 540 名球员(都是现役球员)的数据,有 29 个特征,“高级”数据集有关于相同球员的数据,有 27 个特征,“杂项”数据集包含关于 521 名球员的数据,有 14 个特征。就像我参与的所有其他项目一样,我乐于探索和改进我的模型。因此,如果你知道任何更多的数据集/统计数据来源,可以纳入这个模型,以更好地代表球员的影响,随时让我知道。
预处理:数据清理和特征工程
该项目将于 R 完成。R 非常适合无监督学*项目,因为数据可视化是 R 的主要优势之一,在这类项目中非常方便。我的 R 代码和情节在 Github 上公开。
合并数据集并修复不匹配:我们使用的前两个数据集来自同一个来源,拥有关于相同球员的数据。所以将它们合并在一起只需要一行代码。然而,第三个“杂项”数据集来自不同的来源,因此我们需要解决一些差异。这个新的数据集少了 19 名球员的信息。但是当我们通过匹配球员姓名进行调查时,我们会发现实际上前两个数据集中有 45 名球员在第三个数据集中似乎没有任何数据,反之亦然有 26 名球员。仔细观察,我们发现当名字中包含句点(.)、数值(例如:IV)或后缀(例如:Jr .)。因此,一个数据集中的“JJ Redick”在另一个数据集中被命名为“J.J. Redick”。我们去掉了特殊字符,发现在数据集中仍然有五个球员的名字不同(其中一个因为某种原因决定不包括内内的姓)。所以我们手动修复它们。现在我们只剩下第三组数据中缺失的最初的 19 名球员。如果你像我一样进一步调查这些球员的数据,你会发现他们中的大多数人在很少的比赛中只打了很少的时间。但是我们不必担心这些玩家,因为当我们对数据进行子集划分时,我们已经将他们排除在外了。
移除特征:在合并上述数据集之后,我们移除重复的特征(例如:玩过的游戏)。接下来,我们删除多余的特征,如季节编号和季节类型,因为我们只查看一个季节。我们也删除了排名这个特性,因为它是一个没有意义的索引变量。最后,我们还删除了所有 4 个季度的每季度得分,因为这些值没有按照球员在每个季度的平均上场时间进行标准化。
缺失值:与大多数 ML 的真实数据集不同,缺失值在这里不是一个大问题。谢天谢地,NBA 雇佣了专业人士来确保这一点。唯一有缺失值的特征是 3P%,2P%,英尺%和 TS%。在子集化我们的数据集之后(同样,很快会有更多),唯一仍然有缺失值的特征是 3P%。对于在整个赛季中没有尝试过三分球的球员来说,这是缺失的。在这种情况下,我们将这些缺失值替换为 0%,因为公平地说,这些球员的 3 分投篮技能可能与赛季中试图投中一个 3 分球但没有投中的其他人相似。
特征提取:在我们目前掌握的特征中,我们可以提取两个更重要的特征。首先是每场比赛的分钟数,这可以很容易地从赛季总分钟数和比赛总场次中计算出来。第二个是助攻失误率。尽管它是两个现有变量的线性函数,但它通常被认为是评估进攻组织者在进攻中对球的小心/粗心程度的重要指标。
子设定数据:我们这个项目的目标是在对游戏做出重大贡献的玩家之间进行比较,而不是根据所有玩家的数据做出准确的预测。所以我们将对我们的数据进行分组,以观察更有趣的玩家。这是防止我们的可视化和集群变得过于混乱的好方法。对数据进行分组的一种方法是为每场比赛的最小分钟数设定一个阈值,并包括符合该阈值的球员。我们将这个阈值设定为每场比赛 28.5 分钟,这将我们的数据集限制为 104 名球员。
在结合了 3 个表格、特征工程和子设置我们的数据之后,我们有了关于 104 名具有以下 55 个特征的球员的数据:
-
玩家 —玩家姓名
-
位置 —位置
-
年龄 —该赛季 2 月 1 日开始时球员的年龄。
-
Tm —团队名称
-
G —玩过的游戏
-
GS —游戏开始
-
MP —整个赛季的上场时间
-
MPG —每场比赛的平均上场时间
-
最终目标 —每 36 分钟的目标
-
FGA——每 36 分钟射门次数
-
FG% —投篮命中率
-
3P——每 36 分钟 3 分
-
3PA —每 36 分钟尝试 3 分投篮
-
3P %—3 点 fga 上的 FG%。
-
2P —每 36 分钟得 2 分
-
2PA —每 36 分钟 2 分的投篮尝试
-
2P %—2 点 fga 上的 FG%。
-
FT —每 36 分钟罚球
-
FTA —每 36 分钟罚球次数
-
FT% —罚球百分比
-
ORB —每 36 分钟的进攻篮板
-
DRB —每 36 分钟的防守篮板
-
TRB——每 36 分钟总篮板数
-
AST —每 36 分钟助攻数
-
STL —每 36 分钟抢断一次
-
BLK —每 36 分钟阻塞一次
-
每 36 分钟的失误
-
a2 到 —协助周转定额
-
PF——每 36 分钟的个人犯规
-
点数 —每 36 分钟的点数
-
*——*球员效率等级- 每分钟生产标准化的衡量标准,联盟平均水平为 15。
-
【TS %】——真实投篮命中率——考虑 2 分投篮命中率、3 分投篮命中率、罚球命中率的投篮效率衡量指标。**
-
3PAr—三分球命中率—三分球范围内投篮命中率**
-
FTr—罚球命中率—每次罚球尝试的罚球次数**
-
—进攻篮板百分比—一个球员在场上抢到的可用进攻篮板百分比的估计值。
-
——防守篮板百分比——球员在场上抢到的可用防守篮板百分比的估计值。
-
—总篮板百分比—一个球员在场上抢到的可用篮板百分比的估计值。
-
*****【AST %】——助攻百分比——*一名球员在场上助攻队友投篮得分的估计百分比。
-
—抢断百分比—对手在场上抢断的估计百分比。
-
—盖帽百分比—对球员在场上时对手两分球投篮次数被盖帽的百分比的估计。
-
—失误百分比—每 100 场比赛失误的估计值。
-
*****【USG %】——使用百分比——*一名球员在场上使用团队打法的百分比估计值。
-
*****【OWS】——进攻获胜份额——*一名球员因进攻而贡献的获胜次数的估计值。
-
——防守获胜份额——一名球员因防守而贡献的获胜次数的估计值。
-
*****WS—赢股—*一个玩家贡献的赢数的预估值。
-
*****WS/48—每 48 分钟的赢球份额—*每 48 分钟一名球员贡献的赢球数的估计值(联盟平均值约为. 100)
-
BPM—Box 加减-** 一个 Box 分数一个球员贡献的每 100 份财产的分数高于联盟平均水平球员的估计值,转换为平均水平的球队。******
-
快攻点数 —每局快攻点数
-
点彩 —每局点彩得分
-
分至——对方将球翻转后得分**
-
第二次机会得分——进攻球员已经尝试一次射门但未命中后,在控球期间得到的任何分数**
-
每杆得分——计算方法是将总得分(2P 得分和 3P 得分)除以投篮总次数。**
标准化数据:我们也在标准化我们的数据集。这意味着,对于每个值,我们将从该值中减去特征范围的平均值,然后除以特征的标准偏差。这确保了具有高值范围的特征(例如得分)不会比具有低值范围的特征(例如盖帽或抢断)对我们的整体相似性比较产生更大的影响。注意,通过标准化数据,我们用自己的偏见来影响结果。让数据保持原样,或者对其进行处理以使防守统计数据(如抢断)具有更高的范围,这样做是否不正确?不会的。这只是意味着,我们将在最后评估的相似性结果将更倾向于那些特定的统计数据。
数据分析方法
我们将应用以下统计方法来调查我们的数据:
1)主成分分析
2) K 均值聚类
3)层次聚类
对于每种方法,我们将根据总体影响(来自所有可用的统计数据)来比较参与者。有意思的时候我们还会看看进攻影响(来自进攻统计)和防守影响(来自防守统计)。****
对于总体影响计算,我们将最后 48 项功能(上面编号为 8-55 的功能)视为。我们对统计数据不感兴趣,比如整个赛季的上场时间和比赛场次,因为我们不想把因伤错过比赛的球员和其他人分开。我们也没有在计算中使用分类变量,但我们会在检查结果时使用它们。对于进攻影响的计算,我们将从上面看以下特征:8:20,23,26,28,30:33,36,39:41,45,49:53,55。对于防御影响的计算,我们将会看到编号为 21,24,25,27,34,37,38,42,46 的特征。
在应用任何统计方法之前,最好快速浏览一下特征之间的相关图,看看是否有什么有趣的东西。除非你准备好了显微镜,这里有一张下面 48×48 相关矩阵的放大版。不出所料,二次机会得分与进攻篮板%正相关,三分球命中率与内线得分负相关,等等。没什么奇怪的。************
方法 1-主成分分析
PCA 是一种有 117 年历史的统计降维方法。根据维基百科第页,五氯苯甲醚被定义为:
“使用 正交变换 将一组可能相关的变量(每个变量取不同数值的实体)的观察值转换为一组线性不相关的变量的值的统计过程,称为。如果有 n 个带有 p 个变量的观测值,那么不同主成分的个数是 最小(n-1,p) 。这种变换是这样定义的,第一个主分量(PC1)具有最大可能的 方差 (即,尽可能多地考虑数据中的可变性),并且每个随后的分量在与前面的分量 正交 的约束下依次具有最大可能的方差。得到的向量(每个向量都是变量的线性组合并包含 n 个观测值)是一个不相关的正交基集。******
对于有兴趣学* ML 的读者来说,理解这种方法背后的线性代数是至关重要的。对于那些不太关心的老篮球迷来说,请允许我用一种过于简化的方式来解释 PCA。我们试图在我们的数据集中得到两个主要的主成分。这意味着我们将所有正在研究的 48 个特征进行组合,并提取 2 个新特征来代表之前特征的组合。这两个主要成分是两个特征的最佳组合,从数字上表达了玩家之间的差异。为了评估对进攻和防守的影响,我们重复这个过程,但是从我们在上一节中提到的有限的特性集开始。现在是分析数据的有趣部分。让我们看看玩家在我们的第一个 PCA 图中的总体影响。
OVERALL PLAYER IMPACT
上面的图充分说明了我们数据中的玩家。代表每个球员的圆圈的大小取决于球员的 VORP(超过替补球员的价值)评级,该评级与 PER 一起被认为是衡量球员整体影响力的最佳全面统计数据之一。如果我们在右上角画一条线将 8 名球员分开,我们将得到本赛季的 8 名最佳得分手。勒布朗,拉塞尔·威斯布鲁克,斯蒂芬·库里,尤其是詹姆斯·哈登,都在这个群体的边缘。不出所料,这是过去 5 个 MVP 中的 4 个,第 5 个,凯文·杜兰特,就在他们旁边。达米恩·利拉德与上述精英群体的接*可能是重新思考他作为一名球员的价值的一个好理由。还要注意的是,球员是按照他们传统的 NBA 位置进行颜色编码的。随着 NBA 比赛风格和位置职责的不断演变,位置之间有很多重叠。但是,在大多数情况下,踢相同位置的球员也是聚集在一起的。在右边(中间到底部)我们有 NBA 最好的篮板王。这些大多是打中锋的球员,但当我们走向中锋时,他们加入了像安东尼·戴维斯和扬尼斯·阿德托昆博这样畸形的运动大前锋,还有本·西蒙斯,NBA 历史上最高的控卫。Antetokounmpo 和 Davis 似乎在剧情中有自己的领地,这一点特别有趣,因为这两人被选为 NBA 经理们在 2018-19 赛季开始时最想开始特许经营的顶级球员。此外,请注意中锋如何被分为主要以防守和篮板著称的球员群(底部的球员群)和同样以得分闻名的球员群(顶部的中锋群)。控球后卫似乎大多聚集在顶端,像库里、利拉德和凯里·欧文这样的高分球员聚集在一起。得分后卫(SG)和小前锋(SF)从中心到左下方有自己的空间,中间有很多重叠。但是总的来说,小前锋比得分后卫更接*大前锋。让我们继续进攻主成分分析图。
OFFENSIVE IMPACT
该图与总体 PCA 图非常相似。这是有意义的,因为我们看到的大多数统计数据都是进攻统计数据,因此这些数据主导了我们的整体分析。但有趣的是,很少有事情会改变。请注意那些通常只从低位得分的球员是如何把他们的独立组合放在高位的。也请注意,尼古拉·约基奇和马克加索尔,可以说是当今 NBA 最好的组织核心,发现他们更接*得分后卫的领地,而不是中锋的位置。本·西蒙斯是所有控卫中距离最远的,紧挨着低位球员。这是可以理解的,因为他缺乏中距离投篮和篮板能力。卫冕 MVP 哈登又一次成为联盟中离其他球员最远的球员。最后,让我们看看 PCA 的防守统计。
DEFENSIVE IMPACT
看来反弹能力是 x 轴上决定主成分 1(PC1)值的一个重要因素。最右边的球员是那些在篮板上领先联盟的球员。左边的,像 JJ Redick,可以说是我们选择的子集中最不为人知的篮板手。但这一部分不仅仅是反弹。如果你仔细看,凯文·杜兰特在拉塞尔·维斯特布鲁克的右边,而杜兰特抢下的篮板(场均 6.8 个)远少于威斯布鲁克(场均 10.1 个),他在盖帽等其他防守数据方面更接*大个子(联盟第五)。这并不奇怪,他接*右上集群,其中有一些联盟中最可怕的边缘保护者。如果你回到之前的进攻情节,你会注意到中锋似乎以一种非常多样化的方式影响着比赛的进攻。但在防守上,他们并不分散,因为他们的主要工作是保护篮筐和确保防守篮板。离其他人最远的中锋史蒂芬·亚当斯是一个可以理解的局外人。OKC 雷霆队以其让史蒂芬·亚当斯放弃防守篮板的策略而闻名,否则他会得到这些篮板,这样拉塞尔·维斯特布鲁克就可以得到它们并领导快攻。尽管在抢下篮板方面领先联盟,亚当斯还是经常抢下低位防守篮板。在上个赛季一个更奇怪的数据中,他场均进攻篮板比防守篮板多。还要注意的是,勒布朗詹姆斯,经常被认为是联盟中最全能的防守者之一,正处于这个情节的中间。
PCA 图的缺点是,虽然一些参与者可能看起来彼此非常接*,并且在 2d 图中几乎重叠,但是当我们考虑进一步的主成分时,它们可能在数英里之外。所以这种可视化方法没有利用我们所有的数据差异。为了解决这个问题,我们转向更复杂的无监督最大似然的统计过程。
方法 2- K-means 聚类
如果你想了解这个流行的无监督最大似然算法是如何工作的从这里开始。我们不再深入讨论统计方法,而是将重点放在它们的应用上。聚类的目标是确定一组未标记数据的内部分组。在 K 均值聚类中,我们的算法将数据分成 K 个聚类,每个聚类由其质心/中心表示,即该聚类中玩家的均值。关于编程的细节,请参考我在 Github 上的 R 脚本。********
距离测量:为了将玩家分组,我们需要一种方法来计算每对玩家之间的距离或相似度。这种计算的结果被称为相异度或距离矩阵。选择距离度量是关键的一步,因为它定义了每个玩家对之间的相似性,并影响了聚类的形状。我们选择经典的“欧几里德距离”作为我们的距离度量来确定玩家相似性。标准化数据和替换丢失的值是所有这一切的先决条件,但我们已经处理了这一点。
一旦我们计算出距离矩阵,我们就可以在下图中看到它。这是一张放大的图片,这样我们可以更好地研究它。红色表示高度相异,蓝绿色表示玩家之间高度相似。不出所料,扮演相似角色的玩家之间的距离最小。
Distance matrix between players
计算 K-means: 简单来说,算法可以用这五个步骤来概括:
- 指定要创建的集群数量(K)
- 从数据集中随机选择 k 个玩家作为我们的初始聚类质心
- 根据欧几里德距离,给每个玩家分配最*的质心
- 对于 k 个聚类中的每一个,通过计算聚类中所有玩家特征的新平均值来更新聚类质心。第 k 个集群的质心是长度为 p 的向量,包含第 k 个集群中玩家的所有特征的平均值,其中 p 是特征的数量。
- 重复步骤 3 和 4,直到聚类分配停止变化或达到最大迭代次数(R 使用 10 作为最大迭代次数的默认值)。
确定最佳聚类数(k): 没有完美的方法来确定最佳聚类数。但是有几个统计度量允许我们调查 k 的值如何影响我们的聚类,因此我们可以得出合理的结论。我们使用以下两种方法:
- - 聚类平方和(WSS) 内的是每次观测和聚类质心的方差之和。一般来说,平方和小的簇比那些平方和大的簇更紧凑。直观地说,随着 k 值的增加,这个分数只会变小,聚类也会变小。因此,我们在我们的图中寻找一个称为“肘/膝”的点,在该点处,WSS 值显著下降,然后随着 k 值的增加下降不太多。不幸的是,从我们的图中可以看出(如下),我们的图中没有肘。
- 我们用来寻找最佳 K 值的第二种方法是观察间隙统计。它在数学上比之前的测量更复杂,所以我们不会深入讨论它是如何工作的,但是你可以通过这个链接来看一看。间隙统计的值越高,我们的值 k 就越好。同样,我们的目标是在最小化 k 的同时获得最佳聚类。我们看到(见下文)间隙统计在 k = 8 时达到峰值
WSS
Gap Statistic
根据我们的发现,我们将使用 k-means 聚类法将我们的数据分为 8 类,并对结果进行分析。如果您想知道为什么下面的 X 轴和 Y 轴看起来与 PCA 分析中的 PC1 和 PC2 轴非常相似,那是因为它们是相同的。每当处理 2 个以上的特征时,我们使用的 R 函数执行 PCA 并将数据点绘制到前两个主成分上,因为它们解释了大部分数据方差。但是不要把 PCA 和 K-means 聚类混为一谈,因为后者有更多的内容。转到有趣的部分,我们现在将分析每个集群是如何脱颖而出的,并根据我们对集群表示的统计数据,为它们提出适当的标签。
- 黑色集群:【邮差】
特色球员——德安德鲁·乔丹 在我们剧情的左下方,我们有在低位“发力”的球员,在内线之外做的不多。如果你要求俗气和非原创的标签,你得到了。但是不要认为这些球员像卡尔·马龙一样是可靠的低位得分手。他们在投篮命中率,篮板率,盖帽率方面领先所有球队,尽管他们在投篮命中率方面领先,但是他们在得分方面远远没有领先。就平均分数而言,它们实际上是所有集群中第二差的。而这些点往往伴随着回撤或空中接力而来。不出所料,他们的罚球命中率,3P 命中率和快攻得分都是最低的。就 PER 和 VOPR 而言,他们排名第三,这表明尽管他们得分低,但他们在球场上非常有价值。 - 浅灰色集群:“巨星护卫/狂魔”
特色玩家——詹姆斯·哈登 这是精英中的精英,在 Win-shares、Points、PER、VORP 上领先其他所有集群。正如精英后卫/杀手所料,他们也在 3P、助攻、罚球命中率和投篮命中率方面领先,仅次于“邮差”。 - 黄金组合:“超级巨星”
特色球员:卡尔·安东尼·唐斯 在中左路,我们有联盟中最好的双向球员,他们主要在内线活动,但在外线也很自在。他们在内线得分上领先所有球队,在篮板和防守篮板上仅次于“邮差”,排名第二。他们还拥有第二好的 PER,VOPR,每 36 分钟得分和赢球份额,仅次于“超级后卫/杀手” - 榛子集群:【可靠得分手】
特色球员:楼威廉姆斯 这个集群有点多样化。它主要由可以在多方面得分的球员组成,但在所有得分类别上都落后于我们的“超级明星后卫/杀手”。当谈到像 PER,VORP 和 Win-Shares 这样的全面统计数据时,他们处于中间位置。 - Indigo cluster:“低得分组织者”
特色球员:朗佐·鲍尔
在中右,我们有更擅长让别人得分而不是自己得分的球员。他们在所有集群中拥有最佳的助攻失误率,并在 TOV%(每 100 次控球失误率)方面领先所有集群。这支球队在得分率和得分方面也落后于其他球队,所以我必须再次强调,他们的得分能力并不是这些球员获得 28.5 分钟以上的原因。 - 中蓝色集群:【替补射手】
特色球员:特雷沃·阿里扎
这是拥有 19 名球员的较大集群之一,所以这里没有最具体的技能组合。他们的得分确实是 3P 最高的,失误最少,而且在罚球命中率和三分球命中率方面排名第二。但他们也是所有集群中得分第三少的。因此,看起来这个集群的球员不是自己创造投篮机会的得分手,而是擅长高命中率空位投篮的球员。 - 红色集群:“高位球员”
特色球员:赛迪斯·杨 这个集群似乎是由内线和外线对游戏有贡献的球员组成的。这个群体在盖帽,篮板和第二次机会得分上排名第三,仅次于“超级巨星”和“邮差”。但是这个集群比“邮差”拍了更多的照片。这个群体也比“超级巨星 Bigs”拍摄和制造更多的外线镜头。 - 天蓝色集群:“低产出球员”
特色球员:卡梅隆安东尼 记住我们只看出场时间 28.5+的球员。但是在这组著名的 NBA 球员中,这组球员在个人平均工资、VORP、胜率以及进攻和防守的正负计算方面相对来说是最差的。当然,有些球员做出了统计上看不出来的贡献。但是如果这些球员中的一些不是这样,如果这些球员也不年轻,有潜力提高,球队应该重新考虑这些球员获得多少比赛时间。
K-MEANS 来自进攻统计的聚类
查看差距统计数据,我们再次发现 8 是集群的最佳数量。正如预期的那样,总体细分仍然相似,但有一些有趣的变化。一旦你去掉他的防守数据,拉塞尔·维斯特布鲁克就不再是“超级后卫/杀手”的一部分了。这与威斯布鲁克作为低效得分手的持续批评相一致。他可以说是最* NBA 历史上效率最低的得分手,事实上他的投篮命中率比“超级后卫/杀手”中的任何人都要低。这让我想知道,如果他没有得到史蒂芬·亚当斯帮助他抢到的防守篮板,他将会落在哪里。本·西蒙斯也离开了“超级巨星”,加入了“邮差”。这是有道理的,因为在进攻上,本·西蒙斯的得分武器缺乏任何形式的跳投。
8 CLUSTERS- OFFENSE
k-均值来自国防统计的聚类
最佳的 k 被发现是 3,使用它,我们得到下面的图。灰色的集群由防守篮板、盖帽和防守得分最高的球员组成(DWS)。蓝色集群提供最高的抢断和抢断百分比统计,是第二好的 DWS。第三个黄色集群在所有防守统计中数值最低。但是我们会注意到,根据这些聚类,克莱·汤普森,一个顶级的外线防守者,应该比他的队友斯蒂芬·库里更差,因为他的防守明显比汤普森差。因此,这种聚类要么突出了 K-means 算法的局限性,要么突出了 NBA 统计数据在准确传达球员防守影响方面的局限性。
3 CLUSTERS- DEFENSE
方法 3:凝聚层次聚类
最后,我们将进入最后一个检查方法。与 K-means 聚类不同,层次聚类不需要我们预先指定聚类的数量。我们将执行自底向上/聚集聚类而不是划分/自顶向下层次聚类。前者更擅长识别小集群,而后者更擅长识别大集群。
该算法从最初被认为是单元素簇/叶的所有玩家开始。在每个新步骤中,最相似的两个集群被组合成一个新的更大的集群(节点)。如此反复,直到所有点都汇聚成一个大的簇/根,如下图所示。
在我看来,这是迄今为止最好的可视化。它允许我们选择任何球员,并找出他们最相似的人。树状图克服了 K-means 聚类中大聚类的问题,其中聚类包含不一定总是相似的玩家。当我第一次看到这个的时候,我有几个“啊哈”的瞬间,我看到球员们最紧密地配对,并建立了我以前从未建立的联系。
有趣的观察:
1。勒布朗和杜兰特,这两个处于谁是 NBA 最佳球员争论中心的球员,彼此最相似。
2。最后 5 个 MVP(哈登、威斯布鲁克、库里、杜兰特、勒布朗)全部落入一个专属迷你集群。也许现代的 MVP 需要遵循比我们意识到的更严格的模式来赢得这个奖项。
3。安特托昆博和安东尼·戴维斯,这两个被 NBA 总经理认为最有潜力的年轻球员,彼此最相似。
4。卢·威廉姆斯是一群相当致命的得分手(欧文、利拉德、德罗赞、巴特勒和沃克)。对一个 30 多岁就达到巅峰的人来说还不错。
5。我们的 K-means 图中的“超级巨星 Bigs”簇仍然是一个紧密的单元。
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
我们对上个赛季 NBA 球员的冗长分析到此结束。如果你做到了这一步,我希望你能像我喜欢写这篇文章一样喜欢读它。感谢您的阅读。如果你认为你认识的其他人会对我感兴趣,请与他们分享。如果你喜欢这篇文章,并有什么想与我分享的,请随时发表评论,通过电子邮件联系我,地址是 nadir.nibras@gmail.com 或 https://www.linkedin.com/in/nadirnibras/。
我致力于改进我的方法、分析或数据集,因此如果您有任何建议,请随时评论或告诉我。如果你想关注我在数据科学方面的更多工作,请在 Medium 和 Linkedin 上关注我。另外,如果你是数据科学或 NBA 分析的粉丝,请联系我。和讨厌统计的人聊天总是很有趣:)
应该使用哪个 Python 包管理器?
原文:https://towardsdatascience.com/which-python-package-manager-should-you-use-d0fd0789a250?source=collection_archive---------0-----------------------
每个接触代码的人对他们的编程环境都有不同的偏好。Vim 对 emacs。制表符对空格。虚拟人对巨蟒。今天我想和你们分享我处理数据和进行机器学*的环境。
您肯定不需要复制我的设置,但是其中的一些内容可能会对您的开发环境有所启发。
点
首先,我们需要谈谈 Pip。Pip 是 python 的包管理器。它内置到 Python 中已经有一段时间了,所以如果你有 Python,你可能已经安装了 pip。
Pip 安装了 tensorflow 和 numpy、pandas 和 jupyter 等软件包及其依赖项。
pip install <your_favorite_library>
许多 Python 资源是以 pip 包的形式交付的。有时你可能会在某人的 Python 脚本文件夹中看到一个名为requirements.txt
的文件。通常,该文件概述了该项目使用的所有 pip 包,您可以使用
pip install -r requirements.txt
。
作为这个生态系统的一部分,有一个完整的版本号和依赖关系的世界。我有时需要为我正在处理的不同项目使用给定库的不同版本,所以我需要一种方法来将我的包组组织到不同的、隔离的环境中。
Doing web development and data science on the same machine can leave your Python packages in a jumble
目前有两种流行的管理不同 pip 包的方法:virtualenv 和 anaconda。
虚拟
irtualenv 是一个允许你创建命名的“虚拟环境”的包,在这里你可以以隔离的方式安装 pip 包。
如果您想详细控制为您创建的每个环境安装哪些软件包,这个工具非常棒。例如,您可以为 web 开发创建一个包含一组库的环境,为数据科学创建一个不同的环境。
这样,您就不需要让不相关的库相互交互,并且它允许您创建专用于特定目的的环境。
蟒蛇
现在,如果您主要从事数据科学工作,Anaconda 也是一个不错的选择。Anaconda 由 Continuum Analytics 创建,它是一个 python 发行版,预装了许多用于数据科学的有用的 Python 库。
Anaconda 之所以受欢迎,是因为它一次安装就带来了许多数据科学和机器学*中使用的工具,因此它非常适合进行简短的设置。
和 Virtualenv 一样,Anaconda 也使用创建环境的概念来隔离不同的库和版本。Anaconda 还引入了自己的包管理器,名为conda
,您可以从这里安装库。
此外,Anaconda 仍然具有与 pip 的有用交互,允许您安装 Anaconda 包管理器中没有的任何附加库。
如何选择?
我该用哪一个,虚拟人还是蟒蛇?嗯,我经常发现自己在 Python 2 和 Python 3 之间测试 TensorFlow 和其他库的新版本。
理想情况下,我还可以尝试 virtualenv 和 anaconda 上的库,但有时这两个包管理器并不友好。
认识 pyenv
所以我选择两者都用,并使用一个名为pyenv
的库来管理整个事情。从概念上讲,pyenv 位于 virtualenv 和 anaconda 之上,它不仅可以用于控制使用哪个 virtualenv 环境或 anaconda 环境,还可以轻松控制我运行的是 Python 2 还是 Python 3。
pyenv 的最后一个我喜欢的方面是为给定目录设置默认环境的能力。这使得当我进入一个目录时,所需的环境被自动激活。我发现这比我每次做一个项目时试图记住我想使用哪个环境要容易得多。
应该使用哪个 Python 包管理器?这真的取决于你的工作流程和偏好。
如果您通常只使用核心数据科学工具,并且不关心安装一些您不使用的额外库,Anaconda 可能是一个很好的选择,因为它可以根据您的需要和偏好简化工作流。
但是,如果您喜欢定制您的环境,并使它完全符合您的喜好,那么像 virtualenv 甚至 pyenv 这样的东西可能更适合您。
包裹
管理 Python 库没有“一个”正确的方法,当然,除了我刚才介绍的选项之外,还有很多其他的方法。
随着不同工具的出现和消失,重要的是要记住每个人都有不同的需求、偏好和用例,因此您必须自己选择适合您的工具。
您的 python 环境是什么样的,您如何防止它失控?在下面的评论中分享你的设置吧!
感谢阅读本集云 AI 冒险。如果你喜欢这个系列,请为这篇文章鼓掌让我知道。如果你想要更多的机器学*动作,一定要关注媒体上的me或订阅 YouTube 频道的来观看未来的剧集。更多剧集即将推出!
哪些州是最纯素食的州?还有,哪些州不是(但真的想成为)?
原文:https://towardsdatascience.com/which-states-are-the-most-vegan-and-which-states-arent-but-really-want-to-be-5ff619a87f4b?source=collection_archive---------7-----------------------
这是我这种吃货的黄金时代。你不仅可以找到每一种菜肴,还可以找到迎合 SoCal 居民饮食限制的餐厅概念,无论是需要的还是想象的。我经常从从其他地方搬到加州的人们那里听说,加州有比其他任何地方都多的餐馆,为那些对乳制品、麸质等过敏的人提供饮食帮助。出现的最大的饮食需求之一是素食热潮,这意味着食物不含任何动物产品,也不是用任何动物产品制成的。越来越多的人对在纯素食餐厅用餐表现出兴趣,如下图所示。
在过去的五年里,当查看谷歌趋势来研究“纯素食餐馆”这个词的搜索频率时,这个词的兴趣有了普遍的倾向,但在过去的几周内绝对飙升。
一个安全的假设是,在我们伟大的国家,不是每个州都对这一新趋势表现出同样的热情。让我们看看哪个州的居民最感兴趣(在下图中用红色菱形表示)。
谷歌搜索对素食餐馆最感兴趣的州是…
内华达???
等等,什么?
我承认我有点喜欢加利福尼亚,我们接受所有人的各种饮食偏好,但这仍然令人震惊。当然,加州在俄勒冈州之后排名第三在某种程度上是有道理的,热爱自然的波特兰人(波特兰人?)可能会比洛杉矶洛杉矶的 LA fad diet 更受素食者的青睐,但令人哭笑不得的是,罪恶之城的家乡内华达州拿走了蛋糕。我的意思是,我不认为我曾经偷听到有人喝醉了跌跌撞撞地走在拉斯维加斯大道上寻找甜菜沙拉和芋头片。
如上图所示,红色菱形表示谷歌搜索的相对比例,上面覆盖着绿色条,标志着人均素食餐厅的实际频率(指标是每 10 万州居民中素食餐厅的数量)。虽然内华达州的搜索兴趣最大,但它远非真正的素食餐厅最多,每 10 万居民中只有 6.77 家素食餐厅。虽然这使内华达州远远落后于其他领导者,如华盛顿州 DC(每 10 万居民 22.75 家素食餐馆)和俄勒冈州(每 10 万居民 15.95 家),甚至夏威夷州(每 10 万居民 20.44 家素食餐馆),其相对搜索频率仅为 69。它被夏威夷和马萨诸塞州等搜索排名前十之外的州打败了。
当看着同样的视觉,但按实际餐厅频率排序时,有一些更有趣的见解。虽然前三名(DC、夏威夷州和俄勒冈州)都有相对较高的搜索频率,但缅因州、佛蒙特州和阿拉斯加州(分别是排名第四、第五和第六的州)对“素食餐厅”的谷歌搜索很低,以至于它们在总搜索中的比例为零。事实证明,我关于加州是素食者的麦加的看法是完全错误的,因为这个黄金之州的人均纯素食餐馆数量仅排在第十位。
上图比较了各州的相对需求(各州在谷歌搜索比例中的排名)与素食餐厅的实际可用性(各州每 10 万居民中素食餐厅数量的排名)。
与谷歌搜索频率相比,深红色的州素食餐馆相对过多。非沿海西部的北部各州(蒙大拿、怀俄明等。)和东北部(缅因州、佛蒙特州和新罕布什尔州)的素食餐馆数量都超过了当地居民在网上显示的兴趣。深绿色的州素食餐馆相对较少,而谷歌搜索中指向“素食餐馆”的比例要高得多。列表中一些令人惊讶的州,如德克萨斯州、田纳西州和阿拉巴马州恰好是“烧烤带”的成员(这个词是我随便编造的)。浅色的州,如宾夕法尼亚、俄勒冈,以及明尼苏达州南部边境的任何州(开玩笑,爱荷华州……是的,我很确定那是爱荷华州),都有与纯素食餐馆的实际实体代表接*的在线兴趣量。
感谢您阅读我最新的数据帖子。作为一名产品营销和数据分析专业人士,我对数据支持的讲故事充满热情。这些帖子是我将真实数据与我个人不同的兴趣结合起来的方式,这些兴趣包括从旅行和娱乐到经济和社会问题的任何事情。
如果您有任何评论、故事想法或预期的数据项目,请随时发送电子邮件至 dwpwriting <至> gmail < dot > com 或通过 LinkedIn 联系我。
杰里米·科尔宾对哪些选民有吸引力?
原文:https://towardsdatascience.com/which-voters-does-jeremy-corbyn-appeal-to-42c809a9fbf0?source=collection_archive---------4-----------------------
这是我上一篇选举博客的后续文章,这次关注的是哪些人口统计因素导致了工党出人意料的 9.5%的摇摆
我将工党摇摆(2015 年和 2017 年选举之间投票份额的百分比变化)与英格兰和威尔士选区的一些人口统计特征进行了比较,试图看看是什么因素导致了 2017 年大选中(大部分)出乎意料的工党摇摆。
我从 constituencyexplorer.org.uk 获得了选区的人口统计数据,从 BBC 选举网站获得了选区摇摆数据。我绘制了每个人口统计数据与劳动力变动的关系图。我观察的人口统计特征是:
- 某些年龄组的百分比
- %拥有 4 级或以上教育(学位或以上)和%拥有 1 级或以下教育(普通中等教育证书或以下),
- 骑自行车上下班的百分比(16-74 岁的就业人口)
- 自称是白人的百分比
Labour Swing against demographic characteristics. Each point represents a constituency. A linear regression line is shown on each chart
在图中,每个点代表一个选区,并显示最佳拟合的线性线。直线斜率的陡度表明人口特征对劳动力变动的影响有多大。
左侧的地块具有正斜率,,即具有较高比例人口特征的选区通常具有增加的劳动力摆动。右手边的情况正好相反。
下面是一个条形图,其中条形的高度对应于上述八个图中每个图的斜率。颜色与皮尔逊相关系数相对应,皮尔逊相关系数是一种衡量每个点平均距离最佳拟合线有多远的指标,0 表示不拟合,-1 和 1 分别表示完全负拟合和正拟合。
Slope of linear regression for demographic characteristics of constituencies. The colour corresponds to how good a fit the regressions is (i.e. how close to the regression line each point is on average).
看一下图表,年龄对劳动力变动的影响最大。年轻选民的选区表现出较大的积极波动,而年长选民的选区表现出较大的消极波动(尽管有趣的是,45-64 岁的选民比 65 岁以上的选民表现出更大的消极波动)。骑自行车上下班似乎也对劳动力流动产生了相对较强的积极影响。拥有普通中等教育证书或更低的资格对劳动力流动有相当大的负面影响。拥有大学学位和自我认同为白人分别对劳动力摆动产生积极和消极影响,尽管这些影响相当微弱。
结论
杰里米·科尔宾似乎有极化效应;他增加了年轻选民中工党的投票份额,但减少了年长选民中的投票份额。骑自行车上下班的人比例较高对劳动力流动有积极影响,而 GCSE 或更低的教育水平有负面影响。
我和谁有联系?
原文:https://towardsdatascience.com/who-am-i-connected-to-1660df1b140e?source=collection_archive---------20-----------------------
当你处理数据时,一个经常出现问题是找出事物之间的联系。例如,可以从你所有的朋友、你的朋友关系、你的朋友的朋友关系……来确定你与谁直接或间接相关,或者你与这样或那样的关系有多少分离度。幸运的是,您可以使用一些工具来进行这样的分析。这些工具属于网络理论的范畴,我将在这篇文章中介绍一些基本技巧。
首先让我们来了解一些术语。节点是我们联系的事物,例如你,你的朋友,你的朋友的朋友。顶点是那些节点连接方式。例如,在下面,节点 0 连接到节点 1 和 2,使用两个顶点来描述这些连接。节点 1 通过一个顶点连接到节点 3,等等。对于第一个例子,我们使用单向顶点,但没有什么阻止我们使用双向顶点。一般来说,如果所有顶点都是双向的,我们就称之为无向图,这是朋友的情况(通常是这样),因为你认识你的朋友,他也认识你!
网络分析中引入的第一个重要概念是邻接矩阵。邻接矩阵是表示节点之间的顶点连接的矩阵。邻接矩阵中的第一行表示节点 0 的连接。因此,节点 0 连接到节点 1 和 2,但不连接到自身或节点 3。所以第一行是 0,1,1,0。第二行表示节点 1 的连接,它只连接到节点 3。所以第二行是 0,0,0,1。请注意,我们可以有双向连接,在这种情况下,连接将同时出现在行和列上,但在本例中并非如此。
通过检查邻接矩阵,我们可以重建节点/顶点图。它在第一跳连接中告诉我们:谁是你的朋友。但是我们如何知道第二跳连接,例如节点 0 通过节点 1 和节点 2 连接到节点 3?一个非常简单的方法是将邻接矩阵乘以自身(A*A)。这个乘法的结果是第二跳连接。这里,我们看到节点 0 通过 2 跳连接到节点 1(通过节点 2),并通过 2 跳连接到节点 3。我们甚至可以看到,从节点 0 到节点 3 的两跳中有两个这样的连接。最后,我们看到节点 2 通过 2 跳连接到节点 3(通过节点 1)。
如果我们再次将 A*A 乘以 A 本身,我们将获得三跳连接,在这种情况下,这仅限于节点 0 连接到节点 3。
总的来说,我们感兴趣的网络比这个简单的 4 节点图要大得多。同样,一般来说,所有节点都不会相互连接。嗯,他们说每个人都通过六度间隔(六跳)与每个人相连,但是对于大多数其他实际应用来说,并不是所有的节点都相互连接。让我们看一个更大的例子,看看上面举例说明的原理是如何大规模应用的。让我们假设下面的无向网络图。这里,因为我们有一个无方向的网络图,您会看到连接值出现在行和列中。这个特例显示了对角线的对称性。
像以前一样,如果我们计算 A*A,我们会得到第二跳连接。请注意,节点通过第二跳相互连接。例如,节点 1 通过第二跳经由节点 0、7 和 8 连接到自身 3 次。
如果您对所有第一跳连接和第二跳连接感兴趣,您可以将 A*A 和 A 相加,得到以下矩阵。您可以继续向前寻找第三个跳跃点,但是在这个例子中没有其他的连接,所以虽然您在这里看到的数字会增加,但是零的模式不会改变。我们已经找到了这张图的所有联系。我们发现节点 0 连接到节点 1、7 和 8。节点 2、3 和 4 相连。节点 5、6 和 9 相连。最后,我们看到节点 10 没有连接到任何其他节点。
在实践中,矩阵乘法可以很好地找到下一跳的邻居。如果恰好对于您的问题(如上一个),大多数连接都不存在,即 0,那么您可以使用稀疏矩阵来存储(并且可能使用)您的邻接矩阵。然而,这些矩阵很快就会变得非常庞大,需要进行大量运算才能计算出来。如果您正在使用 SQL 或 spark,一个很好的技巧可能是在表上使用联接。
要做到这一点,你需要彻底解决这个问题。您将创建一个连接表,而不是创建节点如何连接的邻接矩阵。为了跟上我们的第二个例子,您可以将下面的网络图转换为节点/连接表。
现在,我们已经有了节点/连接表,我们的目标将是尽可能减少连接的数量,并最终得到类似下面这样的东西来查看所有连接的东西(我们不关心有多少跳会引导我们)。
为了实现这个目标,我们将通过两个步骤来迭代。首先,我们将执行连接缩减,然后更新节点/连接表。然后,我们反复冲洗,直至无法再减少连接数量。
假设上面的节点/连接表(node_connections ),我们可以通过以下 SQL 查询减少连接数,并将其存储为 new_connections 表:
SELECT A.connection, MIN(B.connection) AS new_connection
FROM node_connections AS A
JOIN node_connections AS B
ON A.node = B.node
GROUP BY A.connection
然后,您可以使用以下 SQL 查询更新 node_connection 表:
SELECT DISTINCT B.new_connection AS connection, A.node
FROM node_connections AS A
JOIN new_connections AS B
WHERE A.connection = B.connection
重复这两个步骤,直到 node_connections 表不再发生变化,这样,您就有了一个通过不同连接连接的所有节点的图。
这只是可能的用例之一,但是对于大规模的应用来说,连接表可能比创建和乘邻接矩阵更容易和更快。我用 SQL 展示了逻辑,但是显然您可以使用 spark 获得类似的结果(对于我的特定应用程序,我使用 pySpark)。
如果你对网络理论在某个问题上的应用有疑问或有趣的想法,请随时加入讨论!
封面照片由 迈克尔·盖达在 Pixabay 拍摄。
原载于 2018 年 10 月 16 日thelonenutblog.wordpress.com。
谁是无家可归者
原文:https://towardsdatascience.com/who-are-the-homeless-a5a3516f0e3b?source=collection_archive---------6-----------------------
我一直想把无家可归形象化,但直到今天才找到任何数据。这个数据集包含美国各州无家可归者的几个属性(长期或暂时、有保护或无保护、家庭或个人等)。
Source: Department of Housing and Urban Development
按位置分解这些百分比,我们可以观察到:
homelessness in 2016
- 内华达州的无家可归家庭比例最低,无人陪伴的青少年比例最高
- 关岛受庇护家庭的比例最低,无家可归家庭的比例最高
- 南达科他州长期无家可归者的比例最低
我今天学到的是如何用华夫饼包和 fontawesome 在 R 中制作华夫饼图表(饼状图的替代品)。
library(waffle)
library(extrafont)
parts <- c(Sheltered=64, Unsheltered=36)
waffle(parts, rows=10, colors=c("#009bda", "#969696"),
use_glyph="home", glyph_size=6)
这是我关于数据科学和视觉故事的# 100 天项目的第 44 天。我的 github 上的全部代码。感谢阅读。欢迎新主题的建议和反馈。
AI 谁来赚钱?第一部分
原文:https://towardsdatascience.com/who-is-going-to-make-money-in-ai-part-i-77a2f30b8cef?source=collection_archive---------1-----------------------
我们正处于人工智能的淘金热之中。但是谁将获得经济利益呢?都是淘金的创业公司的大众?那些拥有大规模金矿开采业务的公司?提供镐和铲的科技巨头?哪个国家有最丰富的金矿?
欢迎来到人工智能淘金热!
我们目前正在经历人工智能的另一次淘金热。数十亿美元正在投资于人工智能初创公司,涵盖所有可以想象的行业和商业功能。谷歌、亚马逊、微软和 IBM 正在进行一场重量级的战斗,在 2016 年投资超过 200 亿美元用于人工智能。企业正在争先恐后地确保在竞争对手之前实现人工智能的生产力优势,同时关注初创公司。中国正在大力支持人工智能,欧盟正在讨论 220 亿美元的人工智能投资,因为它担心输给中国和美国。
AI 无处不在。从谷歌上的 35 亿次每日搜索,到使用面部识别的新苹果 iPhone X,再到可爱地回答我们问题的亚马逊 Alexa。媒体头条吹捧人工智能如何帮助医生诊断疾病,银行如何更好地评估客户贷款风险,农民如何预测作物产量,营销人员如何锁定和留住客户,以及制造商如何改善质量控制。还有专门研究人工智能的物理、网络和政治风险的智库。
So who will make the money in AI?
人工智能和机器学*将成为无处不在的,并融入社会的结构。但是和任何淘金热一样,问题是谁会找到金子?只会是勇敢者、少数人和大人物吗?或者时髦的暴发户能抢到他们的金块吗?那些提供镐和铲的人会赚大部分的钱吗?谁会找到宝藏呢?
那么 AI 创造的价值在哪里呢?
当我开始思考谁将在人工智能中赚钱时,我提出了七个问题。谁将在(1)芯片制造商,(2)平台和基础设施提供商,(3)使能模型和算法提供商,(4)企业解决方案提供商,(5)行业垂直解决方案提供商,(6)人工智能的企业用户和(7)国家之间赚钱?虽然有很多方法可以揭开人工智能领域的面纱,但希望下面能提供一个有用的解释框架——一种价值链。所提到的公司是每个类别中较大公司的代表,但这份名单并不全面或具有预测性。
This is an example of an AI value chain. The companies noted are representative of larger players in each category but in no way is this list intended to be comprehensive or predictive. © Best Practice AI Ltd.
1.谁有最好的人工智能芯片和硬件?
尽管计算能力的价格呈指数级下降,但需求却在以更快的速度增长。人工智能和机器学*有着巨大的数据集和数万亿的向量和矩阵计算,有着凶猛而永不满足的胃口。带上筹码。
NVIDIA 的股票在过去两年中上涨了 1500%,这得益于他们的图形处理单元(GPU)** 芯片在历史上用于渲染美丽的高速流动游戏图形,非常适合机器学*。谷歌最*推出了第二代 张量处理单元【TPUs】。而 微软 正在打造自己的脑波 AI 机器学*芯片。与此同时,像 Graphcore 这样已经筹集了超过 1 . 1 亿美元的初创公司正在寻求进入这个市场。现有的芯片供应商如 IBM、英特尔、高通、T21 和 AMD 都没有止步不前。甚至有传言说脸书正在组建一个团队来设计自己的人工智能芯片。随着剑桥科技**上周宣布推出首款云人工智能芯片,中国正在成为认真的芯片玩家。****
Who made the money? Levi Strauss and Samuel Brannan didn’t mine for gold themselves but instead made a fortune selling supplies to miners — wheelbarrows, tents, jeans, picks and shovels, etc.
显而易见的是,设计和制造芯片,然后保持全球芯片领导者地位的成本非常高。这需要极其雄厚的财力和世界级的芯片和软件工程师团队。这意味着新的赢家将会很少。就像淘金热时期一样,那些提供最便宜和最广泛使用的镐、铲将会赚很多钱。
2.谁拥有最好的人工智能基础设施和平台云?
人工智能竞赛现在也在云中进行。亚马逊很早就意识到,初创公司更愿意租赁电脑和软件,而不是购买。因此,它在 2006 年推出了亚马逊网络服务(AWS)。今天,人工智能对计算能力的需求如此之大,以至于越来越多的公司转向云,通过基础设施即服务 **(IaaS)和平台即服务(PaaS)产品来租赁硬件。******
Amazon is the leader in cloud services but hot on their tales are Microsoft, IBM, Google and Alibaba.
科技巨头之间的斗争正在进行。微软正在提供他们的混合公共和私有 Azure 云服务,据称拥有超过一百万台计算机。在过去几周,他们宣布他们的 脑波 硬件解决方案 极大地加速了机器学*,他们自己的必应搜索引擎性能提高了 10 倍。谷歌正急着用自己的谷歌云产品迎头赶上。我们看到中国的阿里巴巴开始占据全球份额。
Large cloud players are racing to ensure they are positioned for the massive demand that will be driven by AI.
亚马逊——微软——谷歌和 IBM 将继续一决雌雄。请注意来自中国的大规模云玩家。那些拿着大镐和铲子的家伙会再次获胜。
3.谁有最好的实现算法?
今天,谷歌是世界上最大的人工智能公司,吸引了最优秀的人工智能人才,在 R&D 上花费了小国规模的 GDP 预算,并坐拥来自其服务的数十亿用户的最佳数据集。人工智能正在推动谷歌的搜索、自动驾驶汽车、语音识别、智能推理、大规模搜索,甚至是它自己在药物发现和疾病诊断方面的工作。
令人难以置信的人工智能机器学*软件和算法正在推动谷歌的所有人工智能活动——tensor flow——现在正在免费赠送。是免费的!TensorFlow 现在是一个面向全球开放的开源软件项目。他们为什么要这么做?正如 Google Brain 的负责人 Jeff Dean 最*所说,今天世界上有 2000 万个 T21 组织可以从机器学*中受益。如果数以百万计的公司使用这种同类最佳的免费人工智能软件,那么他们可能需要大量的计算能力。谁能提供更好的服务呢?当然,谷歌云针对 TensorFlow 和相关的人工智能服务进行了优化。一旦你变得依赖他们的软件和云,在未来的许多年里,你就会成为一个非常顽固的客户。难怪亚马逊-微软 IBM 也提供自己的廉价或免费人工智能软件服务,这是一场争夺全球人工智能算法主导地位的残酷比赛。
我们也看到了不仅是机器学*算法,还有为对话代理和机器人、语音、自然语言处理(NLP)和语义、视觉和增强核心算法提供服务的认知 算法的斗争。在这个竞争日益激烈的领域,一家初创公司是 Clarifai ,它为企业提供先进的图像识别系统,以检测*似重复和视觉搜索。在过去三年里,它已经筹集了* 4000 万美元。视觉相关算法和服务的市场预计在 2016 年至 2025 年间的累计收入为 80 亿美元。
The race is on for the deep learning and cognitive algorithms that will enable and power applied AI solutions.
巨人并没有停滞不前。例如,IBM 正在提供其沃森认知产品和服务。他们有大约 20 个用于聊天机器人、视觉、语音、语言、知识管理和移情的 API,可以简单地插入公司软件中,以创建人工智能应用程序。认知 API 无处不在。 KDnuggets 在这里列出了 50 多个来自巨头和初创公司的顶级认知服务。这些服务被作为人工智能即服务 (AIaaS) 放到云中,以使它们更易于访问。就在最*,微软首席执行官塞特亚·纳德拉声称,有 100 万开发者正在使用他们的人工智能 API、服务和工具来构建人工智能应用,* 30 万开发者正在使用他们的聊天机器人工具。我不想成为一家与这些巨人竞争的创业公司。
这一领域的赢家可能会再次青睐重量级企业。他们可以雇佣最优秀的研究和工程人才,花最多的钱,访问最大的数据集。初创公司要繁荣发展,必须有充足的资金,由拥有一整套知识产权专利和已发表论文的领先研究人员支持,拥有深厚的领域专业知识,并能获得高质量的数据集。他们应该有出色的导航技能,可以在巨人之前航行或参加不同的比赛。将会有许多初创企业受损,但那些能够扩大规模的企业将会发现自己成为全球性企业,或者很快被重量级企业收购。即使一家初创公司没有找到商业化的道路,如果他们与一个强大的研究导向型团队一起致力于实现人工智能算法,那么他们也可能成为收购者(因其人才而被收购的公司)。我们在 2014 年看到了这一点,当时 DeepMind ,一家成立两年的伦敦公司,开发了独特的强化机器学*算法,w 被谷歌以 4 亿美元收购。
4.谁拥有最好的企业解决方案?
企业软件一直被 Salesforce、IBM、Oracle、SAP 等巨头把持。他们都认识到,人工智能是一种工具,需要集成到他们的企业产品中。但许多初创公司正急于成为下一代企业服务,填补现有企业目前没有涉足甚至没有试图破坏的空白。
我们分析了企业领域的两百多个用例,从客户管理到营销、网络安全、智能、人力资源到认知机器人流程自动化(RPA)的热门领域。企业领域比以前的领域更加开放,有许多初创公司为这些用例提供单点解决方案。今天,有超过 200 家人工智能公司正在招聘,其中许多是人工智能初创公司。网络安全领导者 DarkTrace 和 RPA 领导者 UiPath 拥有 1 亿美元的战争资金。现任者还希望确保他们的生态系统处于前沿,并投资于初创公司,以增强他们的产品。Salesforce 投资了一个客户管理解决方案Digital****Genius和类似的提供企业翻译服务的un able。在职者也经常有更紧迫的问题。例如,SAP 急于在提供云解决方案方面迎头赶上,更不用说在人工智能方面迎头赶上了。我们也看到工具提供商试图简化在企业中创建、部署和管理人工智能服务所需的任务。例如,机器学*培训是一个混乱的行业,80%的时间可以花在数据争论上。并且在测试和调整所谓的超参数上花费了过多的时间。Petuum总部位于美国匹兹堡的工具提供商已经筹集了超过 1 亿美元来帮助加速和优化机器学*模型的部署。
Enterprise AI solutions will drive improved customer service and productivity.
如果这些企业初创提供商能够迅速证明他们正在解决和扩展解决方案以满足现实世界的企业需求,他们中的许多人都可以拥有一个健康的未来。但正如软件淘金热中经常发生的那样,每个类别都会有少数赢家。对于那些人工智能企业类别的获胜者来说,如果他们看起来太具威胁性,他们很可能会与最好的同类工具提供商一起被巨头们抢购。
5.谁有最好的垂直解决方案?
人工智能正在推动一场最佳垂直行业解决方案的竞赛。有大量新的人工智能初创公司为医疗保健、金融服务、农业、汽车、法律和工业部门的企业用例提供解决方案。许多初创公司正在采取雄心勃勃的方式,通过直接向相同的客户提供服务来颠覆现有的企业。
New industry AI solutions will either power or disrupt organisations.
很明显,许多初创公司正在提供有价值的点解决方案,如果他们能够获得(1)大型和专有的数据训练集,(2)领域知识,这使他们对某个行业内的机会有深刻的见解,(3)围绕应用人工智能的人才,以及(4)资金雄厚的资本,以资助快速增长,他们就能取得成功。那些做得很好的创业公司通常以完善的上市计划的形式来表达客户、业务效率和投资回报率的企业商业语言。
例如, ZestFinance 已经筹集了* 3 亿美元来帮助改善信贷决策,为每个人提供公平透明的信贷。他们声称拥有世界上最好的数据科学家。但他们会的,不是吗?对于那些寻求颠覆现有企业的初创公司来说,它们需要真正雄厚的资金。例如, 肯定 ,在销售点向消费者提供贷款,已经融资超过 7 亿美元。这些公司很快需要创建一个可防御的护城河,以确保他们保持竞争力。这可能来自数据网络 效应更多数据产生更好的基于人工智能的服务和产品,从而获得更多收入,客户获得更多数据。于是飞轮效应继续。
6.哪些企业将抓住人工智能的价值?
虽然企业可能会在自己的行业中寻找新的供应商来提供人工智能解决方案,以提高他们的收入和利润,但他们不会坐视不理,让新贵强行进入他们的客户。他们不会坐以待毙,让他们的企业竞争对手通过人工智能获得第一优势。目前有一场大规模的企业创新竞赛。大公司有自己的风险投资小组,投资创业公司,运行加速器,建立自己的创业公司,以确保他们是人工智能驱动的创新的领导者。
Corporates are well positioned to capture value from AI in the form of enhanced customer service, increase productivity and improved products and services.
由于拥有数据资产,大公司在与初创公司和小公司的竞争中处于有利地位。数据是人工智能和机器学*的燃料。谁能比拥有大量承保索赔历史数据的保险公司更好地利用人工智能呢?这家金融服务公司对消费者的金融产品购买行为了如指掌?或者是用户搜索信息最多的搜索公司?
大大小小的企业都有能力从人工智能中获取价值。事实上,Gartner 研究公司预测,到 2022 年,人工智能衍生的商业价值预计将达到 3.9 万亿美元(T2)。有成百上千个有价值的用例,人工智能可以跨组织解决。企业可以改善客户体验,节省成本,降低价格,增加收入,销售更好的人工智能产品和服务。人工智能将帮助大公司变得更大,通常是以牺牲小公司的利益为代价。但是他们需要展示出强大的远见卓识的领导能力,执行能力,以及对不总是在第一次尝试中就获得技术支持项目的宽容。
7.哪些国家将从人工智能中受益最多?
各国也在争夺 AI 霸权。中国并不羞于呼吁人工智能的出现。它正在大量投资培养技术人才和发展创业公司。其更宽松的监管环境,特别是在数据隐私方面,有助于中国在安全和面部识别等人工智能领域处于领先地位。就在最*,就有这样一个例子:在一场音乐会上,中国警察从 5 万名观众中挑出了一张通缉犯的脸。大规模分析人脸和图像的 SenseTime Group Ltd 报告称,它筹集了 6 亿美元,成为最有价值的全球人工智能初创公司。中国人指出,他们的移动市场是美国的 3 倍,移动支付是美国的 50 倍,这是一个巨大的数据优势。欧洲对数据隐私监管的关注可能会使他们在人工智能的某些领域处于不利地位,即使联盟正在谈论在人工智能领域投资 220 亿美元。
Will this be the sovereign winners in AI? China? US? Japan? Germany? UK? France?
英国、德国、法国和日本最*都宣布了他们的国家人工智能战略。例如,总统马克龙表示,法国政府将在未来五年内花费 18.5 亿美元支持人工智能生态系统,包括创建大型公共数据集。像谷歌的 DeepMind 和三星这样的公司已经承诺开设新的巴黎实验室,富士通正在扩大其巴黎研究中心。英国刚刚宣布投入 14 亿美元到人工智能领域,包括资助 1000 名人工智能博士。但是,虽然各国都在投资人工智能人才和生态系统,但问题是谁将真正抓住价值。法国和英国会只是补贴将被谷歌聘用的博士吗?虽然工资税和所得税对这六位数的机器学*工资来说是健康的,但创造的大部分经济价值可能是由这家美国公司、其股东和微笑的美国财政部创造的。
人工智能将提高公司和国家的生产率和财富。但是,当头条新闻显示我们 30%到 40%的工作将被机器取代时,这些财富将如何分配呢?经济学家可以从数百年来不断增长的技术自动化中吸取教训。会有净工作岗位创造还是净工作岗位损失?公开辩论经常引用机器学*的教父杰弗里·辛顿的话,他认为随着机器从医学图像中诊断疾病,放射科医生将会大量失业。但是我们可以看看中国人,他们正在使用人工智能来帮助放射科医生管理每年审查 14 亿次肺癌 CT 扫描的巨大需求。结果不是失业,而是市场扩大,诊断更加有效和准确。然而,可能会有一段动荡时期,届时大部分价值将流向控制人工智能技术和数据的少数公司和国家。低技能国家的财富依赖于人工智能自动化目标的工作,这些国家可能会受到影响。人工智能将青睐大型企业和技术熟练的企业。
那么这一切意味着什么呢?
在审视人工智能的前景时,很明显我们现在正在进入一个真正的人工智能黄金时代。关于经济 价值将迁移到哪里,几乎没有什么关键主题出现:
- 全球科技巨头是这场淘金热的镐和铲——为想冲进去的人提供人工智能。谷歌-亚马逊-微软和 IBM 在人工智能领域展开军备竞赛。他们正在为提供最好的芯片、云和人工智能、算法和服务而激烈竞争。紧随其后的是中国科技巨头阿里巴巴和百度。很少有创业公司会在日益成为商品的云计算上比微软花费更多、更聪明或提供更低的价格,或者比谷歌的张量处理单元建立更好的人工智能芯片,或者比亚马逊建立更好的物体识别认知算法。****
- 人工智能初创公司纷纷提供认知算法、企业解决方案和深度行业垂直解决方案。为了繁荣,初创公司需要获得独特的数据集、深厚的领域知识、雄厚的财力以及吸引和留住日益紧缺的人工智能人才的能力。这不是一个车库里的应用程序会改变世界的案例。人工智能初创公司的赢家将是那些解决有价值的现实世界问题、迅速扩大上市规模并建立可防御的阵地的公司。初创公司应该专注于企业和行业解决方案,在这些领域有许多高价值的用例需要解决。然而,随着人才大战的继续,至少在未来几年内,算法领域的初创企业收购者将会变得有些普遍。正如任何淘金热一样,一路上会有许多初创企业伤亡,每个类别都会有少数赢家。这些赢家可能会发现巨头们给了他们诱人的支票。
- 企业处于有利地位,可以从人工智能中获取大量价值,有人说价值在数万亿美元。人工智能将越来越多地推动客户体验的改善,通过协助和自动化主要业务流程来帮助提高生产率和降低成本,并提高产品和服务的竞争力。最大的价值将从那些有规模的公司获得——最好和最大的数据集、最多的客户和最大的分布。越大的可能越大。但这只有在企业展现出强有力的领导力,并且灵活地执行的情况下才会发生,而这通常不是他们的名片。在人工智能执行方面领先的公司再次成为谷歌、脸书、苹果和亚马逊的科技巨头,他们提供人工智能产品和服务,覆盖全球数十亿受众。随着科技巨头利用人工智能进入和破坏新的领域,从零售到医疗保健到媒体等行业的企业都感到害怕。****
- 民族国家也在进行人工智能竞赛。中国毫不掩饰其到 2030 年成为人工智能世界领导者的意图。它认为自己具有结构优势。虽然许多欧洲国家都在吹捧他们政府支持的人工智能承诺,但风险在于,他们只是在补贴全球人工智能巨头的人才,并加速其他主权国家的财富。强有力的数据隐私法规会伤害欧洲国家在人工智能方面的创新吗?人工智能带来的财富可能会流向那些控制和利用领先人工智能技术和数据的国家和公司——想想美国和中国。随着自动化侵蚀越来越低收入的工作,那些没有工作的人可能会受到挑战。
简而言之,看起来人工智能淘金热将有利于拥有控制权和规模的公司和国家,而不是最好的人工智能工具和技术、数据、最好的技术工人、最多的客户和最强的资本渠道。那些有规模的企业将从人工智能中获取最大份额的经济价值。从某些方面来说,这是一种改变,也是一种选择但是也会有一些勇敢的创业公司发现巨大的金块。但是就像任何淘金热一样,许多创业公司都会有所收获。许多个人和社会可能会觉得他们没有看到淘金热的好处。
这是我打算写的关于人工智能经济学的系列文章的第一部分。我欢迎你的反馈。
作者 作者 西蒙·格林曼
我热爱技术以及如何将技术应用于商业领域。我经营着自己的咨询公司最佳实践人工智能帮助企业和初创公司的高管加速采用基于 ROI 的人工智能应用。请联系讨论此事。如果你喜欢这首曲子,我希望你能按下拍手按钮👏所以其他人可能会偶然发现它。请发表您的评论,或者您可以直接给我发电子邮件或在 LinkedIn 或 twitter 上找到我。
谁动了我的二进制文件?
原文:https://towardsdatascience.com/who-moved-my-binaries-7c4d797cd783?source=collection_archive---------17-----------------------
在机器学*项目中试验软件开发管道——第三部分——二进制文件、可执行文件等等…
我们现在已经到了这一系列文章的第三篇,是关于我在修改我的软件开发管道以包含我的新 ML 东西时所做的实验。为了总结前面的部分,我们讨论了源代码控制和版本控制,以及旨在生成构成应用程序的二进制包的构建过程。特别是,我们已经看到了如何利用 Tensorflow 和 Keras 库,我被迫在一个以前主要由为不同技术栈(在我的例子中是 Java)编写的模块组成的应用程序中包含给定编程语言(例如 Python)的部分代码。
到目前为止,我们所缺少的是如何处理作为这个编写和构建过程的结果而得到的不同的二进制工件。这个阶段也受到我们的应用程序的多语言特性的影响(也就是说,不同的组件是用不同的编程语言编写的),因为它的结果包含了许多不同的、不兼容格式的二进制包:。java 模块的 jar 文件。python 的 whl(“wheels”)等等。
我们需要处理好这件事。但是首先,让我们先试着更好地理解我们正在处理的东西,因为许多不同的东西都可以归入“二进制包”的一般定义,通常服务于不同的目的,并且在我们软件开发生命周期的不同阶段使用。仅举几个例子,我们可能有:
可重用软件库,提供良好记录和封装的功能。这些是作为依赖项导入并嵌入到我们的代码中的(还记得吗?我们首先选择了 Maven 这样的工具来处理这些问题)。这应该是每个人都熟悉的:我们谈论的是 Tensorflow 或 Keras 之类的东西,它们构建在较低级别的 API(例如 Numpy)之上,以提供更通用的抽象级别。当然,这里我们不考虑公开可用的通用库,如上面两个,而是由我们的团队设计和制作的库,以满足我们公司或我们应用程序的特定需要和要求。一个例子?不知道…可能你公司的数据是一堆图像文件,需要非常具体的预处理步骤。我们不必在每个应用程序组件中重复代码来执行 preproc,而是将这种功能抽象并捆绑到一个可重用的库中,使用它自己的 API,并在我们的存储库中保持可用。
应用组件或模块。实际上,这也是一个非常通用的术语,从技术上讲,这些库和上面的可重用库没有明显的区别。我只是喜欢使用不同的术语来区分前一种情况,在这种情况下,功能的开发考虑到了未来的重用,而开发的任何软件模块都是作为应用程序的一个非常特定的部分来运行的,可能符合一些给定的组件模型(想想在电子商务应用程序中提供一些特定业务功能的 EJB,Flask python REST 服务,等等)。).
随时可部署的可执行文件。该说的都说了,该做的都做了,我们需要的是在某个地方运行的某个软件。在一个经典的(所谓的“单片”)应用程序中,这可以是一个单独的可执行文件(和。用于 windows 系统的 exe,一个可执行文件。jar,或者类似. war/的东西。对于 Java 企业应用程序来说是 ear archive),将我们所有的库、应用程序组件等等捆绑在一起。一个这样的包可以在某个目标环境中配置、部署和运行。另一方面,在微服务架构[i]中,我们的应用程序可以由几个独立的可部署和可执行的模块组成。
现在我们的嘉宾明星来了:经过训练的 ML 模特。这样,我指的是在内存中重新创建先前训练的模型所需的所有信息的序列化副本,而不需要例如从零开始重新训练它。对于简单的逻辑回归模型,这些信息可能只包含几个数字参数,对于复杂的多层深度神经网络,这些信息可能包含数百万个浮点值的矩阵。
您可能会在概念上认为这些与当前的讨论无关,也就是说,将它们视为普通的数据文件。毕竟,它们本身并不直接提供可执行的功能,而是需要一些运行时组件或服务环境来赋予它们生命。它们甚至可能以非二进制(例如文本)格式存储[ii],这使它们明确地脱离了“软件二进制”的定义。
正如您所猜测的,我倾向于采用相反的观点,将它们视为以某种序列化形式提供可执行功能的另一种模块——并将它们包括在本文的讨论中。
现在让我们讨论一下如何管理我们到目前为止讨论过的所有不同种类的二进制文件。首先,这些是为了不同的目的而存在的,所以不同的工具将会方便地管理它们。粗略地说,我们可以根据它们的用途将上述二进制文件分为两组。
第一组由我们在代码开发过程中需要作为依赖项的那些二进制文件组成——我们在应用程序代码中捆绑的软件片段,用于构建其他二进制文件。不仅是通过构建我们自己的代码生成的二进制文件,还有第三方的二进制组件,比如免费开源或授权的商业库。在这种情况下,我们需要一个二进制存储库管理器——一个专用的服务器应用程序,用于存储、版本化和提供二进制组件。选择通常取决于我们使用的包格式/构建工具。例如,对于基于 Maven 的项目,我过去使用的一种工具是 Sonatype Nexus[iii]存储库,但是存在许多有效的替代方案,一个显著的例子是 JFrog 的 Artifactory[iv]。Artifactory 也主要是面向 Maven 的,但它被宣传为“唯一支持所有主要打包格式、构建工具和 CI 服务器的通用存储库管理器”——这包括标准的 Python 工具,如 pip 和 distutils(尽管我猜想如果你专门使用 Python,你可以在 CI env 上安装你的私有 PyPI 服务器)。
至于第二组,一旦您构建了您的应用程序或服务,您需要保持完成的“可执行”包准备好在某个目标运行时环境中进行部署和配置。同样,使用不同的技术可能会使事情变得复杂,但这里有一个名为 docker 的小工具来拯救我们。
你不太可能还没听说过 docker。这项技术在几年前以一种“革命”的形式出现,我真的无法想象以前没有它我是如何生活的。它提供了一种在所谓的“容器”中统一打包应用程序的方法,这是一种轻量级的自包含虚拟机,将应用程序代码及其所有依赖项捆绑为一个完全自包含的高度可移植的包。[v]
Docker 有自己的存储库,名为 docker registry,您可以在自己的服务器上安装并保护它,以存储和管理容器的图像——除此之外,Artifactory 似乎也与 docker 格式兼容,可以用作容器图像的存储库。
系列化的预训练 ML 车型呢?正如我前面所说,这些通常是以某种序列化格式存储的一组参数:TensorFlow 以 Google 的协议缓冲区格式存储文件,Keras 提供了使用 HDF5 标准的基本保存格式,或者您可以将 numpy 数组定制到自己的数据结构中。
事实是,虽然在最简单的情况下,这些文件可能只包含有限的一串数字(如在简单的线性回归模型中),但一般来说,它们可能会变成具有数百万浮点参数的巨大文件,例如在非常深度的神经网络的情况下。管理巨大的文件意味着在存储和版本控制方面面临巨大的限制。幸运的是,有一个 GIT 扩展专门解决大文件管理的问题[vi]。一个更好的消息是,Artifactory 似乎也支持 GitLFS。(再说一次,我从未将 Artifactory 作为二进制库使用过,但它肯定在我的任务列表中……)。
更具体地说,最*的发展已经看到了一个全新类别的产品的出现,这些产品被命名为模型服务器,例如 TensorFlow 服务器、Apache MMS(Apache MXNet 的模型服务器)、clipper.ai 等。就我们目前的讨论而言,这些似乎更面向产品的部署阶段——而不是支持软件开发阶段的模型的存储和版本化——因此,也许这些值得在未来的帖子中专门讨论。
这篇相当长的文章我差不多要看完了。让我们总结一下到目前为止我们所拥有的:
我们已经在我们的软件工厂中建立了许多软件“机器”,一个源代码版本服务器(gitlab),一个二进制存储库(nexus,artifactury,…),一些模型服务器和一个可部署 docker 容器的存储库。
仍然缺少的是一些将所有东西粘在一起的“胶水”。我指的是允许从编写代码到构建到测试再到部署……无论什么,而不必手动与我们谈到的每个软件工具交互的东西:也就是说,我们需要某种持续集成引擎(如 Jenkins),它有助于自动化整个过程。但是…我认为这篇文章已经太长了,所以我会在下一次的某个时候再讨论这个话题。
希望你资助我们讨论的有趣的东西!
链接和参考
[我]查看我以前的帖子
[ii]例如,它们可以存储为基于 XML 的交换格式,就像 PMML 的情况一样,这是表示预测解决方案的事实标准。
https://www.sonatype.com/nexus-repository-sonatype
【ⅳ】https://jfrog.com/artifactory/
https://www.docker.com/
https://git-lfs.github.com/
谁需要大数据呢?
原文:https://towardsdatascience.com/who-needs-big-data-anyway-bf545b34ca78?source=collection_archive---------3-----------------------
能否从大数据入手,从小处着手?
大数据、机器学*以及随之而来的一切正变得日益流行。不可否认,大数据蕴含着巨大的商机。很多大企业启动项目只是为了收集未来价值的数据。他们投入巨资向客户提供“免费”服务。这些服务不是免费的。你用你的数据付费。由此可见这些数据的价值有多大。
但是如果你在经营一家小公司呢?如果你没有巨额投资的资源怎么办?如果你的用户群仍然很小怎么办?你只是忽略了这些机会吗?或者可以从小处入手大数据?不是每一位数据都有一些价值吗?我们如何访问这个值?这些是我在寻找新的商业机会时开始问自己的问题。我想和你分享我的想法。
为什么不从头开始学呢?这就像一个小孩学*玩电脑游戏一样。它通过反复试验来学*。或者谷歌 DeepMind learn 如何玩 Atari Breakout 。也许我们不会使用相同的算法或软件,但基本思想是相同的。我将借助一个例子来演示这个想法的基本方法。
最*我一直在整理我的个人财务。我想知道我的钱去了哪里。基本上,我想把我所有的花费归为某一类。有“免费”的在线服务可以为你做到这一点,但作为一名软件工程师,我看到了一个很好的挑战;我想用这个来验证我的想法。下面是基本方法。
首先开始思考你的数据。你当初要它做什么?但更有趣的问题是,这些数据还能用来做什么?我想掌握我的财务,因此给我的支出贴上标签。也许我们还可以用它来找到一些储蓄。或者,如果我们从其他人那里获得更多数据,也许我们可以找到一个健康的支出模式。我们现在对数据的价值有了一个概念。永远记住这一点。
开始收集数据。确保你拥有实现目标所需的一切。你怎样才能用最少的努力做到这一点?是不是少了什么?我能在哪里得到这个?我该怎么补偿呢?在我的案例中,标签/类别丢失了。我们将不得不使用一种无监督学*算法。在这种情况下,我们将使用这种算法来识别不同的消费群。之后,我们可以手动为每个集群指定一个标签或类别。
开始实验不同的算法和一种算法的用法。最有可能的情况是,如果您按原样使用您的银行交易数据,您会发现基于交易金额的分类。例如,您将找到一个所有费用都在 1400 到 1500 欧元之间的分类。这个用处不大。您需要转换数据,以便还可以使用帐号、帐户描述和消息信息。我不会详细介绍如何做到这一点,但是如果你感兴趣,可以看看下面的:如何处理分类变量和单词包模型。现在,您可能会找到一些有用的聚类,它们确实使标记您的数据变得容易得多。然而,我们还没有到那一步。例如,所有不同的保险可能会有自己的分类。我们该如何处理这件事?
在大数据中,算法可以从数据中检索领域知识,这在我们的情况下可能是不可能的。为什么不自己加领域知识?当你请朋友帮忙标记你的银行交易时,你可能也会告诉他识别某些保险公司的描述。我们可以在模型中添加一些简单的规则来增加这个领域的知识。例如,我们可以添加一个规则,当描述包含某个单词(例如保险公司的名称)时,将交易标记为支付给保险公司的费用。
我们已经标记了数据!现在我们可以重复我们的过程,并使用监督学*算法向我们提出新数据的标签。随着我们收集更多的数据,我们可以重新训练和改进监督学*算法。
我在这里给出的方法只是一个例子。它可以被重用,但它不是一个通用的方法。我希望这种方法或基于这种方法的方法会给你带来一些新的想法或机会。我一直在用我自己的银行交易数据运行我的想法。我是如何做到这一点的超出了本文的范围,但也许我会在未来的文章中分享这一点。
回到我的问题:“你能从大数据开始吗?”我想我的问题的答案是:“是的,你可以!”。大数据当然更有价值,但你没有的东西没有价值。因此,开始思考你所拥有的数据及其价值。我希望我给了你一些精神食粮。请分享你的想法!
谁想要音乐数据和版权管理的全球解决方案?
原文:https://towardsdatascience.com/who-wants-a-global-solution-for-music-data-and-rights-management-68f770156925?source=collection_archive---------11-----------------------
建立一个全球性的解决方案来解决由音乐元数据、版权所有和许可的脱节组织所导致的无数问题,仍然是音乐行业最棘手的问题之一。
最*有消息称,美国专家 ASCAP 和身体质量指数正在开发一个公开的、综合的音乐版权数据库,这是解决这一长期问题的全球性综合解决方案的关键吗?支持者称,该数据库将“对美国绝大多数授权音乐的所有权份额提供一个权威的观点”。
不正确或不完整的元数据会导致大量破坏性问题。其中,歌曲使用的跟踪和分发缺乏透明度和准确性,这可能导致版权所有者错过版税支付。此外,演出版权组织(PROs)使用大量的专有系统。因此,即使元数据存在且完整,在版税到达合法所有者手中之前,仍然有许多漏洞。
大多数音乐行业专家认为,解决这个大问题的唯一全面的解决方案在于开发一个单一的、统一的数据库,将作品与录音配对,供全球所有专业人士使用。尽管对于哪种技术或工具组合最适合这一目的(如区块链)众说纷纭,但对当前形势的深入分析充分表明,一个普遍整合的系统对于提高效率和准确性至关重要。
那么,我们还在等什么?
这项技术的存在是为了让这个梦想成为现实,它给音乐行业的每个人带来的好处是广泛而明确的,包括艺术家、出版商、唱片公司和专业人士。
不幸的是,虽然许多国家只有一个 PRO,但美国有四个组织代表歌曲的表演权,这进一步分散了数据。虽然 ASCAP 和身体质量指数更紧密地整合他们的数据库的举措可能是朝着正确的方向迈出的一步,但排除其他两家总部位于美国的专业公司——SESAC 和全球音乐版权公司——将导致即使在美国市场也存在不完整的数据集,更不用说全球了。
这只是整个行业担忧的开始。ASCAP/身体质量指数的合作只是为音乐作品创建一个集中和透明的数据库的长期努力中的最新一项,迄今为止,没有一项成功。
ASCAP 和身体质量指数只是对最*国会可能很快创建一个中央统一音乐数据库的声明做出反应吗?许多行业专家认为,这种系统包含政府所有权的模式将带来灾难性的后果。例如,如果版权所有者不使用他们的信息支持数据库,则限制版权所有者对版权侵犯提起侵权诉讼的补救措施。因此,也许 ASCAP/身体质量指数的声明主要说明了这些组织试图让政府置身于元数据和权限管理之外,而不是真正致力于开发一个全面的系统。
不管是哪种情况,这则新闻似乎都没有给出一个完整的解决方案。但是事情是这样的:所需的技术和专业知识已经在这里了。为了实现绝对的准确性和透明度,我们必须采用一种高效、全球认可的技术解决方案,从而让行业将这一长期存在的问题抛在脑后。
由谢尔盖·布多夫 ,
SVP, 媒体&娱乐报
发现更多谢尔盖·布鲁多夫的故事
为什么我今年要去 GDC。
原文:https://towardsdatascience.com/whos-exhibiting-at-gdc-this-year-40d285dbd462?source=collection_archive---------4-----------------------
…并采用数据驱动的方法来做决定。
这是你在参加任何会议之前可能会问的一个问题,尤其是在繁忙的时候和一个大的、有利润的季度交易接*尾声的时候。
你可以浏览一个网站,得到一个随机的无意义的名字列表,或者…你可以数据化一个完整的数据驱动的方法。
我想采取数据驱动的方法来回答这个问题,看看它是否值得第一次参加。
使用 Cooladata ,我能够产生一个很好的结果摘要,并与我的团队快速分享。
我参加会议有各种各样的原因:职业发展、人际关系和业务发展等等。就 GDC 而言,我主要感兴趣的是与游戏公司建立联系,Cooladata 可能非常适合作为他们的分析解决方案。
鉴于我参加会议的标准相对宽松,我需要一些准则来坚持。以下是我喜欢寻找的东西:
- 中小市场范围的公司
- Cooladata 服务良好的行业中的公司(即游戏)
- 主要是 B2C 公司
- 资金相当充足的公司
方法
首先,我需要拿到一份参展商名单,看看哪些公司计划参展。幸运的是,GDC 的人通过提供一个方便的公司列表和他们的域名列表,使这变得容易了一些:http://expo.gdconf.com/2018/exhibitor-list/
一旦我有了这个列表,我需要用一些关键的公司信息来充实它,比如员工数量、行业、资金和其他一些数据点。
最后,我需要做一些探索性的分析,看看参展的公司是否具备我想要的特征。
方法
为了从 GDC 列表中捕获公司域,我使用 R 下载了网页,并采用了一些非常简单的键值提取技术来收集所有公司域的列表。
一旦我有了这些公司的程序清单,我就使用 Clearbit 的 Enrichment API 尽可能多地了解这些公司。Clearbit 返回了每家公司大约 28 个不同的数据点(有时更多),这些数据点对于详细描述这些公司的一些非常具体的属性非常有帮助。
在我丰富了我的公司列表后,是时候做一些探索性的数据分析了。我使用了dplyr
和ggplot2
的组合来产生这些视觉效果。您可以在 GitHub 上找到这些图的源代码。
结果
让我们分别来看看这些标准。
公司规模
Clearbit 返回了大约 38%公司的收入范围。
基于抽样偏差,我认为大公司的数据可能比小公司更容易获得,所以这对我来说是一个好兆头,因为我看到大多数公司都在范围的低端,尽管抽样偏差对我不利。
Clearbit 返回了大约 48%公司的员工范围数据。
再一次,考虑到我所认为的小公司、中端市场公司和不太多的大企业的健康组合,事情对我来说看起来很好。
为了确保这里没有任何奇怪的事情发生,我想看看这两个分类变量之间的相互作用。
看起来,这些公司的健康组合正好在我的理想范围内,收入不到 1 亿美元,员工人数大大低于 250 人。
工业
Clearbit 返回“标签”,这些标签是根据他们对某个公司可能属于哪个行业、部门或集团的最佳猜测而生成的。这里的数据可用性是 100%,所以我决定应用一个非常严格的规则来过滤掉这些干扰。
“游戏”类别中的公司是标签中有“游戏、游戏或游戏”的公司。虽然这张图对我来说不是一个好兆头(我想和游戏公司谈谈),但仔细看看数据就会发现,许多“游戏公司”被归类为“互联网”或“技术”。
这只是表明,如果有些东西看起来有误导性或似乎不合理,你总是需要查看你的数据。人工检查是不可忽视的方法!
B2B 与 B2C
如果会议由 B2B 供应商主导,很难逃脱噪音并表现出极端的销售 y。另一方面,如果它完全面向消费者,我可能不会遇到我正在寻找的那种人。
在我看来,公司的崩溃非常健康。就像我说的,我参加过严格意义上的 B2B 会议,当每个人都试图向你推销东西时,试图进行对话是一件很麻烦的事情。
提供资金
最后说一下风投资金。有理由假设 Clearbit 从 Crunchbase 获取融资数据,这是一个“最好”的融资资源。当然,鉴于融资交易通常是很少向公众披露的私人事务,我可以理解为什么这里的数据很少。
在这里,只有 9%的公司有融资数据。这可能意味着只有 9%的公司得到了某种形式的资助。
坦白说,我不知道这个分布是好是坏。但它确实显示了相对于其他公司而言, Magic Leap 筹集了多少资金。
结论
总的来说,这看起来像是第一次参加一个伟大的会议。正如大多数人会注意到的,会议都是关于人的,不一定是参展的技术公司。
你可以在我的同事和团队成员的 GitHub 上找到这些例子的所有代码。
如果你想在会议上见面,请随时给我发电子邮件,地址是丹·cooladata.com!
谁在说话?—使用 K-Means 聚类对 Python 中的神经事件进行排序
原文:https://towardsdatascience.com/whos-talking-using-k-means-clustering-to-sort-neural-events-in-python-e7a8a76f316?source=collection_archive---------13-----------------------
尖峰分类
癫痫是一种大脑疾病,其中同步脑电活动过度导致癫痫发作,其范围可以从根本没有任何外部症状到抽搐运动(强直阵挛性癫痫发作)和意识丧失(失神癫痫发作)。对于一些癫痫患者来说,手术切除受影响的脑组织可能是一种有效的治疗方法。但是在进行手术之前,需要精确定位患病的脑组织。为了找到这个癫痫发作病灶,记录电极被插入患者大脑,通过它可以实时监测神经活动。在之前的一篇文章中,我们研究了如何处理来自人类癫痫患者的这种电生理数据,以便提取棘波事件。
如上所述的这种尖峰事件反映了单个神经元的活动,因此可以对疾病的性质给出重要的见解。然而,如下图所示,单个电极通常一次从一个以上的神经元获得信号。虽然这可能不是定位癫痫发作焦点的问题,但与癫痫发作背后的机制相关的研究问题通常需要更详细地了解哪个神经元在什么时间活跃。那么,我们如何才能算出有多少神经元对我们的信号有贡献,以及每一个神经元何时活跃?
现在,在我们开始回答这些问题之前,我想提醒你,你可以在这里找到这篇文章的代码。当然,您也可以在 Twitter 上关注我,或者通过 LinkedIn 联系我。
尖峰分类
找出上述哪种尖峰波形属于某个神经元是一项具有挑战性的任务,由于我们没有任何地面真实数据来比较我们的结果,这一任务变得更加复杂。因此,应用无监督聚类算法对尖峰数据进行排序似乎是一个不错的选择。尖峰分类实际上是一个复杂的话题,也是一个正在进行的研究领域,如果你想有一个更详细的概述,你可以看看这里的。在下文中,我们将使用 K-means 聚类对峰值进行分类,并概述峰值分类的一般过程。然而,应该注意的是,在实践中,K-means 不是用于分类尖峰的最佳算法。如上所述,有更复杂的算法可以产生更好的结果,但是为了说明提取和分类尖峰信号的一般过程,K-means 做得很好。
特征选择
因此,我们需要做的第一件事是决定我们的尖峰波形的什么特征要输入到我们的算法中。此时,每个波形由 90 个样本定义,总持续时间约为 2.8 毫秒。然而,并不是所有的样本都具有相同的信息量。例如,大多数波形的第一个样本在 0 左右波动。而样本 25 至 30 代表波形的第一次正偏转,并且似乎分成两组,一组具有高峰值,一组具有低峰值。因此,我们应该选择一些能够很好地代表棘波波形的特征,并去除其他特征。做到这一点的一种方法可以是获取尖峰的最大和最小幅度或其宽度或定时参数。另一种常见的方法是应用主成分分析(PCA)并将主成分用作特征。scikit-learn 的 PCA 实现可以在本教程的 Jupyter 笔记本中找到。在下图中,第一个主成分与第二个主成分相对应,而第三个主成分用点的颜色表示。
从图上看,我们的数据中似乎有三个不同且略有重叠的聚类。中间的一个大星团被左右两个小星团包围。所以我们实际上做的是降低数据的维度。之前,每个棘波波形由 90 个样本表示,而现在维数减少到只有三个特征,这允许我们将每个棘波分配到一个簇。为此,我们现在需要我们的 K 均值聚类算法。
k 均值聚类
我们实现 K-means 的方式非常简单。首先,我们从样本中选择若干个 K 随机数据点。这些数据点代表聚类中心,它们的数量等于聚类的数量。接下来,我们将计算所有随机聚类中心和任意数据点之间的欧几里德距离。然后,我们将每个数据点分配到离它最*的聚类中心。显然,用随机数据点作为聚类中心做所有这些不会给我们一个好的聚类结果。所以,我们重新开始。但是这次我们不使用随机数据点作为聚类中心。相反,我们基于之前的随机分配计算实际的聚类中心,并再次开始这个过程…一次又一次…一次又一次。随着每次迭代,切换聚类的数据点将变得更少,我们将达到(希望)全局最优。下面你可以找到如上所述的 K-means 的 Python 实现。
import numpy as npdef k_means(data, num_clus=3, steps=200): # Convert data to Numpy array
cluster_data = np.array(data)
# Initialize by randomly selecting points in the data
center_init = np.random.randint(0, cluster_data.shape[0],
num_clus) # Create a list with center coordinates
center_init = cluster_data[center_init, :] # Repeat clustering x times
for _ in range(steps): # Calculate distance of each data point to center
distance = []
for center in center_init:
tmp_distance = np.sqrt(np.sum((cluster_data -
center)**2, axis=1))
tmp_distance = tmp_distance +
np.abs(np.random.randn(len(tmp_distance))*0.0001)
distance.append(tmp_distance) # Assign each point to cluster based on minimum distance
_, cluster = np.where(np.transpose(distance ==
np.min(distance, axis=0))) # Find center of each cluster
center_init = []
for i in range(num_clus):
center_init.append(cluster_data[cluster == i,
:].mean(axis=0).tolist())
return cluster
聚类数
很好,我们准备好了。我们从数据中提取了峰值,选择了特征,并编写了 K 均值函数。现在最后一个问题是:我们期望在数据中找到多少个集群?有几种方法可以解决这个问题。一种是利用我们的领域知识。根据经验,我们预计从单个电极记录中不会发现多于两个或三个可分离的簇。本文中的第一个情节似乎证实了这一观点。另一个更客观的方法是用肘法。为此,我们对我们的数据运行 K-means 函数几次,并且每次运行都增加聚类的数量。对于每次运行,我们计算每个数据点到其聚类中心的平均距离。如下图所示,随着聚类数量的增加,平均聚类间距减小。这并不令人惊讶,但我们也可以看到,当我们达到六个集群时,到集群中心的平均距离不再有太大变化。这被称为“拐点”,它为我们提供了使用多少集群的建议。
# Define the maximum number of clusters to test
max_num_clusters = 15# Run K-means with increasing number of clusters (20 times each)
average_distance = []
for run in range(20):
tmp_average_distance = []
for num_clus in range(1, max_num_clusters +1):
cluster, centers, distance = k_means(pca_result, num_clus)
tmp_average_distance.append(np.mean([np.mean(distance[x]
[cluster==x]) for x in range(num_clus)], axis=0))
average_distance.append(tmp_average_distance)# Plot the result -> Elbow point
fig, ax = plt.subplots(1, 1, figsize=(15, 5))
ax.plot(range(1, max_num_clusters +1), np.mean(average_distance, axis=0))
ax.set_xlim([1, max_num_clusters])
ax.set_xlabel('number of clusters', fontsize=20)
ax.set_ylabel('average inter cluster distance', fontsize=20)
ax.set_title('Elbow point', fontsize=23)
plt.show()
对数据运行代码
好吧,六个集群似乎有点高,但让我们看看我们得到了什么。下面的左图再次显示了第一和第二主成分,但这次颜色代码表示 K-means 算法将每个数据点分配给的聚类。右图显示了每个簇的平均尖峰波形。
正如我们可以从上面的右图中看到的,我们的 K-means 算法在聚类波形方面做得很好。事实上,我们有三个以上的集群。标有绿色“簇 2”的平均波形是具有高振幅峰值的波形。棕色“簇 5”是具有低峰值振幅的尖峰的平均波形,而橙色“簇 1”具有大量噪声和高标准偏差(阴影区域)。似乎我们在这个集群中总结了很多工件,所以我们应该放弃它。最后,群集 0、3 和 4 看起来完全相同,因此我们可以将它们合并为一个群集。这样做将总共给出四个集群,其中一个包含大部分工件。所以我们有多于三个但少于六个的集群。下图显示了产生的三个集群。
在我们结束之前,我们应该再次思考这些结果实际上意味着什么。肘方法告诉我们在数据中寻找六个集群。然而,根据经验,我们知道这个数字有点过于乐观。因此,我们用六个初始聚类对数据进行聚类,查看每个聚类的平均波形,然后根据平均波形的相似性将三个聚类合并为一个。另一个集群我们放弃了,因为它主要包含噪音。最后,我们有三个集群,但这是否也意味着我们记录了三个独立神经元的信号?不一定。要回答这个问题,我们必须更详细地检查数据。例如:在一个神经元产生一个尖峰信号后,它在 1-2 毫秒内不能产生新的尖峰信号。这被称为不应期,它限制了神经元的最大尖峰频率,并确保信号只从神经元的细胞体沿着轴突传播到突触,而不是相反。因此,如果我们要计算其中一个簇的棘波之间的时间差,并且我们将得到小于 1 毫秒的时间差,则我们必须得出结论,该簇包含来自不止一个神经元的棘波。此外,大脑在颅骨内脉动,这意味着神经元和电极尖端之间的距离会随着时间的推移而改变,这将影响尖峰的波形。因此,同一个神经元仍然可以产生两种略有不同的波形。总之,我们概述了棘波分类过程和 K-means 在 Python 中的实现,但所有这些只是一个起点,而不是对有多少神经元实际上对信号有贡献的明确答案。
如果你想要这个项目的完整代码,你可以在这里 找到它 。当然,你也可以在 Twitter 上关注我,或者通过 LinkedIn 联系我。
** [## akcarsten/spike _ 排序
在 GitHub 上创建一个帐户,为 akcarsten/spike_sorting 开发做贡献。
github.com](https://github.com/akcarsten/spike_sorting)**
谁在椭圆形办公室发微博?
原文:https://towardsdatascience.com/whos-tweeting-from-the-oval-office-96ea5b60c03?source=collection_archive---------1-----------------------
Did Trump type out that tweet? Or was it an aide in Trump clothing?
更新:我已经写了一篇后续文章来详述我如何通过构建一个 Twitter 机器人来部署我的模型。
我已经开发了一个推特机器人@ who sintheval,它转发唐纳德·特朗普的每一条推文,并预测这条推文是由特朗普本人还是他的一名助手写的。请务必在 Twitter 上关注这个机器人,并继续阅读以了解我是如何构建这个模型的!
我是 Greg Rafferty,湾区的数据科学家。你可以在我的 github 上查看这个项目的代码。如有任何问题或反馈,请随时联系我!
动机
2017 年 12 月 1 日,迈克尔·弗林承认向联邦调查局撒谎。第二天,特朗普的个人推特账户发推文称:
这颇具争议,因为在那年的 2 月 14 日,也就是弗林辞职的第二天,川普要求时任联邦调查局局长的詹姆斯·科米放弃对弗林的任何调查。如果特朗普在向科米提出要求时知道弗林确实向联邦调查局撒谎,那么特朗普的推文可以被视为特朗普企图妨碍司法公正的证据。在几名法律专家论证了这一点后,特朗普为自己辩护说,他的律师约翰·多德写下并发布了这条推文。但他真的这么做了吗?
本文分为四个部分:
- 背景
- 特征选择
- 模型
- 结果
中间的两个部分(尤其是模型部分)有点技术性;因此,如果你对此不感兴趣,而你只是想直接跳到结果,看看到底是谁发布了弗林的推文,请随意!
背景
法医文本分析是机器学*的一个早期领域,已经被用于各种案件,从识别尤那邦摩恐怖分子到发现 J.K .罗琳是作者罗伯特·加尔布雷斯的真实身份到确定每篇联邦党人论文的具体作者。这个项目旨在使用机器学*和这些相同的技术来识别在 @realDonaldTrump 上的推文,这些推文是由特朗普本人或他的工作人员在使用他的账户时写的。然而,这项任务是独特的,特别具有挑战性,因为推文很短——在这么短的文本中没有太多信号。最终,我还是成功了,准确率接* 99%。继续关注我的 Twitter 机器人@ who sintheval吧,每当特朗普发推文时,它都会实时发布预测。
数据
在 2017 年 3 月 26 日之前,特朗普使用三星 Galaxy 设备发推文,而他的员工使用 iPhone 发推文。从每条推文的元数据中提供的这些信息,我们知道是特朗普本人还是他的工作人员发推文(见这些链接了解一些 文章 讨论这个假设)。然而,在 3 月之后,特朗普也改用 iPhone,所以对推特的识别不能仅来自元数据,而必须从推特的内容中推断出来。
我使用布伦丹·布朗的特朗普推文数据档案收集了特朗普账户从 2009 年年中开始到 2017 年底的所有推文。这一组包括* 33,000 条推文。尽管我知道一条推文来自谁的设备,但作者身份仍有一些模糊之处,因为众所周知,特朗普会向助手口述推文,所以一条推文可能具有特朗普的特征,但却是从非特朗普设备发布的,而且(特别是在竞选期间)还会与助手合作写推文,因此真正的作者身份不清楚。
从 2009 年 5 月 4 日特朗普的推特账户开始,直到 2017 年初他停止使用安卓设备,我知道(或至少很好地猜测)作者的推文超过 3 万条(关键是,弗林的推文不在这个日期范围内,所以我让我的模型对真正的推文者进行了最佳猜测——在本文后面的结果部分有更多信息)。这 30,000 条推文在安卓/非安卓之间平均分配(47% / 53%),所以阶级不平衡不是问题。这是我的训练数据。使用几种不同的技术,我从这些数据中创建了* 900 个不同的特征,我的模型可以用它们来预测作者。
选择功能
So many important decisions!
我着眼于六大类特征来构建我的模型:
- 特朗普怪癖
- 风格
- 感情
- 情绪
- 词汇选择
- 语法结构
特朗普怪癖
数据科学有时可能更像艺术而不是科学。为了开始我的模型,我首先想到我作为一个人如何识别一条推文是特朗普的。然后,我尽最大努力将这些“感觉”转化为基于规则的代码。例如,一些显而易见的怪癖可以识别特朗普本人是否在键盘后面,这些怪癖是在他的推文中滥用所有大写字母,随机大写特定的单词,或者是无偿的!感叹号的使用!!!!!
事实上,我的模型中最有影响力的特征之一就是我后来提到的引用转发。特朗普似乎不知道如何在推特上转发某人。在全部 33,000 条推文中,只有一条来自安卓设备的转发。相反,特朗普复制了别人的推文,@提到了用户并用引号将推文括起来,然后自己发布:
这些经常是,但不总是,像这样自我庆祝的推文,这就是为什么,正如你将在我的下一篇讨论结果的帖子中看到的,唐纳德·川普倾向于“经常提到自己。**
风格
风格特征是那些不特定于特朗普个人风格的特征,而是可以用来识别任何推特用户。这些类型的特征包括推文、句子和单词的平均长度。我还查看了各种标点符号的使用次数(特朗普几乎从不使用分号;他的助手做得更频繁)。一条推文中的@提及次数、#标签数和 URL 数都被证明是强预测特征。最后,这条推文发布的日期和时间很能说明问题。
感情
我用 C.J .休顿的 VADER 软件包来提取每条推文的情感。VADER,它代表着ValenceAwareDictionary 和 sEentimentReasioning(因为,我想,VADSR 听起来很傻?),是一个专门针对社交媒体的词典和基于规则的工具。给定一个文本字符串,它输出一个介于 0 和 1 之间的十进制数来表示文本的消极、积极和中性,以及一个介于-1 和 1 之间的复合分数,它是一个聚合度量。
关于 VADER 软件包的开发、验证和评估的完整描述可以在本文中找到,但要点是该软件包的作者首先构建了一个与情感相关的词汇特征(或简单英语中的“单词和短语”)列表,然后将该列表与一些描述短语的语法结构如何增强或减弱情感的规则相结合。当与人类评分员进行测试时,VADER 的准确率高达 96%到 84%。
情绪
加拿大国家研究委员会创造了一个超过 14000 个单词的词汇库,每个单词被分为与两种情绪(消极、积极)或八种情绪(愤怒、期待、厌恶、恐惧、快乐、悲伤、惊讶、信任)中的任何一种相关或不相关。他们友好地向我提供了词典,我写了一个 Python 脚本,循环遍历 tweet 中的每个单词,在词典中查找,并输出与该单词相关的任何情绪。然后,每条推文都被分配了一个分数,对应于与该情绪相关的词的数量。
词汇选择
为了分析单词选择,我使用了一种叫做TF–IDF的技术,它代表词频——逆文档频率。它基本上是衡量一个单词对文档的描述性和独特性的一种方法。假设您想将一些新闻文章组合在一起,这样您就可以向读者推荐相似的文章。你把你的电脑设置成阅读每篇文章,其中一篇文章出现了 10 次“棒球”这个词。那一定是文章中非常重要的一个词!这就是术语频率部分。
但现在,同一篇文章也有 8 次“说过”这个词。这似乎也是一个非常重要的词。但是我们人类却不这么认为;我们知道,如果几篇文章提到“棒球”,它们可能是关于同一个主题,但如果几篇文章提到“说”,这并不能告诉我们多少文章的相似性。因此,我们接着查看集合中的所有文章,并计算其中有多少文章包含单词“baseball”和“said”比方说,在 1000 篇文章中,只有 30 篇有“棒球”这个词,但 870 篇有“说”这个词。因此,我们取该计数的倒数,即 1/30 和 1/870,然后乘以频率项,即 10 和 8。这是逆文档频率部分。因此,单词“baseball”的得分为 10/30 = 0.333,单词“said”的得分为 8/870 = 0.009。我们对每个文档中的每个单词都这样做,简而言之,看看哪些文章具有相同的高价值单词。这是 TF–IDF。
为了减少我的模型的计算需求,我只查看了单字,而不是二元和三元模型(TF-IDF 处理这些小短语的方式与处理单字完全相同)。每一个 n-gram 都需要成倍增加的处理时间,我认为“弯曲的希拉里”或“说谎的特德·克鲁兹”仍然会被“弯曲的”和“说谎的”这两个词单独提取出来。我还忽略了超过 99%的推文中出现的单词(称为语料库专用停用词),以及不到 1%的推文中出现的单词。我在整个项目中大量使用 Python 的 scikit-learn 包,其中包括他们的TF–IDF 实现。
语法结构
对当前事件使用自然语言处理的主要挑战之一是事件会随着时间而变化。虽然“不诚实的希拉里”和“撒谎的特德·克鲁兹”这两个词在川普的总统竞选中出现了很多次,但在最*的推特上却几乎没有出现过。我想捕捉特朗普推文的更基本形式,所以我使用自然语言工具包将每条推文转换成词性表示。
这实质上是将每个词转换成它的词性,保持对该词在句子中的作用的意识,以便将句子“”中的名词“侮辱”与句子“中用作动词的同一个词区分开来。当 Trump 提到他的政治对手时,“Crooked Hillary”用作侮辱,而“你通过将政治过程简化为幼稚的骂人来侮辱政治过程”。
这将短语“我不得不解雇弗林将军,因为他对副总统和联邦调查局撒谎”更改为其更基本的词类形式为“PRP VBD TO VB NNP NNP IN PRP VBD TO DT NNP NNP CC DT NNP”,使用 Penn 词类标签 (PRP =人称代词,VBD =动词,过去式,TO = to,VB =动词,基本形式,NNP =单数专有名词等)。使用与之前相同的 TF-IDF 流程,但这一次忽略了 unigrams,而是专注于 bigrams 和 trigrams,我可以提取出特朗普或他的助手在推特上发布的更通用的方法。
最后,我使用了斯坦福命名实体识别(NER)标签将所有的名字替换为“人”,将所有的地点替换为“地点”,将所有的组织替换为“组织”这是又一次试图将推文从可能随时间变化的细节中概括出来。在处理这些推文的过程中,这个 NER 过程是到目前为止计算量最大的过程,如果我再次做这个项目,我会认真考虑一个不依赖于高级统计学*算法的不太先进的 NER 标记器,并且会大大加快处理时间。你已经被警告了!
模特们表现如何?
They did well, very well
首先,按照这个领域的标准,我将我的数据分成 80%的训练集和 20%的测试集。我将测试集放在一边,直到我对我的所有模型尽可能准确感到满意,然后发送测试集通过它们来获得我将在这里报告的性能度量。
特征重要性
我做的一个更重要的任务是将我的特征按照它们对模型结果的影响排序。为此,我使用了 scikit learn 的脊分类器。岭回归是逻辑回归的一种形式,它包括一个正则化因子α。在α= 0 时,岭回归与非正则化逻辑回归相同;在低 alpha 级别,影响最小的特征的系数被强制为零,有效地将它们从模型中移除;在更高的 alpha 级别,会移除更多的功能。我递归地迭代每个 alpha 级别,一个接一个地删除特性,直到一个都没有。
正如你在上面的图中所看到的,当 alpha 值刚刚超过 10 时,第一个(影响最小的)特征就消失了。在 10 ⁵的范围内,特征丢失迅速增加,仅留下最有影响的特征留在高于 10 ⁶.的 alpha 级别
单个模型
我一共建立了 9 个模型:高斯朴素贝叶斯,多项式朴素贝叶斯,K 最*邻,逻辑回归,支持向量分类器,支持向量机以及 AdaBoost ,梯度提升,随机森林的集成方法。每个模型都经过仔细的调整,仅在训练数据上使用 10 重交叉验证,并在测试数据上进行评估。
交叉验证是一种有效的技术,用于训练这些模型,而不会使它们过于偏向正在被训练的特定数据;换句话说,允许他们更好地归纳未知数据。在 10 重交叉验证中,数据被分成 10 个大小相等的组,即组 1-10。在第一次训练迭代中,模型在组 1–9 上训练,在组 10 上测试。重复这个过程,但这次是在第 1-8 组和第 10 组进行训练,在第 9 组进行测试。这个训练步骤总共重复 10 次,因此每个组从训练集中保留一次,并用作不可见的测试集。最后,在所有 10 次折叠中具有最佳平均性能的模型参数组合是在最终模型中使用的一组参数。
这些模型背后的算法都非常迷人;它们各有优缺点,在偏差—方差权衡上有不同的平衡,有时处理时间也大不相同(例如,训练朴素贝叶斯只需要几分之一秒,而支持向量分类器和梯度推进方法都需要一整个周末来执行网格搜索)。如果你有兴趣了解更多,我会从这些模型的维基百科条目开始:
- 朴素贝叶斯分类器
- k-最*邻算法
- 逻辑回归
- 支持向量机
- AdaBoost
- 梯度增强
- 随机森林
此外,使用上面生成的那些特征重要性,我在总共* 900 个特征的子集上训练每个模型。例如,朴素贝叶斯仅使用前 5 个特征表现最佳,而两个增强模型在处理前 300 个特征时都最开心。这部分是由于维数灾难;事实上,在高维空间中,两个看起来很*的点(当在我们的三维头脑中想象时),实际上可能相距非常非常远。特别是,k-最*邻模型(knn)对太多的维度高度敏感,所以我也将主成分分析 (PCA)应用于馈入该模型的数据。**
PCA 是一种既能降低维数又能消除特征间共线性的技术。如果你能想象高维空间中的一组向量,PCA 将扭曲和按摩这些向量,使它们中的每一个都垂直于所有其他向量。如果这些矢量表示要素,那么通过强制它们全部正交,我们还可以确保它们之间不存在共线性。这将极大地改善 knn 等模型的预测,并允许我们在不减少信息量的情况下减少发送到模型的特征数量。简而言之,这使我能够从我的 knn 模型中获得更好的性能。
合奏
最后,我为每个模型创建了两个不同的集合。第一个是简单的多数投票:由于模型数量为奇数,输出为二进制,有分歧的模型之间永远不会出现平局,所以我简单地将特朗普的所有预测和助手的所有预测相加,并为我的最终预测提供更大的预测。我的第二个组合更复杂一些:我把前九个模型的结果输入到一个新的决策树中。这个最终模型在我的测试集上具有*乎完美的准确性。
现在,终于有了结果..
结果
可以看到,梯度提升模型和随机森林的表现最好,错误率只有 1/20。
其他模特的个人表现不太好,但对最终的组合贡献很大。我根据第一组 9 个模型的结果构建的决策树的准确率超过了 99%!
如果你不清楚所有这些措施是什么,这里有一个简单的解释。准确性是这些衡量标准中最直观的,它就是正确的猜测数除以总猜测数,也就是说,在我所有的猜测中,有多少是正确的? Precision 回答问题,在所有我猜测是特朗普的推文中,有多少是真的特朗普?回忆几乎是精确的反义词;它回答了这个问题,在特朗普写的所有推文中,我答对了多少?F1 分数是精确度和召回率的混合,从技术上来说是两者的调和平均值。它远不如准确性直观,但当班级不平衡很大时,f1 分数是比准确性更好的衡量标准。然而,在这个 tweet 数据的例子中,我的类被很好地平衡了,这就是为什么在上面的图表中所有的度量或多或少是相等的。如果这让你感到困惑,或者你只是想了解更多,这里有一篇关于这些措施的极好的博客文章。
那么,特朗普的推文有什么特点呢?
- 引用转发
- @提及次数
- 晚上 10 点到早上 10 点之间
- 惊讶、愤怒、消极、厌恶、喜悦、悲伤、恐惧
- 感叹号
- 完全大写的单词
- @realDonaldTrump
正如我所料,我在这篇文章的功能选择部分描述的引用转发高度预测了特朗普的推文。其他用户的“提及”也是如此。特朗普经常在晚上和凌晨以及周末发推特。他表现出惊讶、愤怒、消极、厌恶……事实上所有的情绪,而不仅仅是媒体强调的消极情绪。他确实使用了超出语法需要的惊叹号和全大写单词。最后,他经常提到自己。
另一方面,他的助手发布的推文的特点是:
- 真实转发
- “via”这个词
- 上午 10 点到下午 4 点之间
- 分号
- 周期
- 资源定位符
- @巴拉克·奥巴马
如果一条推文是正确的转发,你可以确信它是由助手发布的。有趣的是,“via”这个词在助手的推文中出现了很多次——他们经常会引用一篇文章或一张图片,并将其与这个词联系起来。可以预见的是,他们在工作日发微博,而不是经常在工作之外。他们的语法更复杂,有更好的句子结构和标点符号,他们非常频繁地发布其他来源的 URL。有趣的是,如果巴拉克·奥巴马的推特用户名在一条推文中被提及,那通常是一个助手。特朗普会提到他的名字,但不会用“提”的方式。
至于词性标签,川普最常用的组合是 NN PRP VBP,或者是名词、人称代词和动词。这些推文经常采用@ reference 后跟“我感谢…”或“我有…”的形式。助手经常写 NNP NNP NNP,连续三个专有名词,这通常是一个组织的名称。他们还在文本后使用#标签,而特朗普在@提及后使用#标签。
我有点失望,词性标签对模型来说并不重要。我知道 tweet 中的特定词汇会随着时间的推移而变化,所以我想捕捉更多的语法结构,我认为这些结构会更加稳定。然而,这个项目的主要挑战是推文的简短性质,这确实大大减少了我的模型可以拾取的语法信号的数量。这对我的模型意味着,尽管它对历史推文有*乎完美的准确率,但对当前推文的准确率有所下降。
此外,对历史推文具有高度预测性的三个特征是推文长度、收藏次数和转发次数。然而,我不得不放弃所有这三个功能,并重新训练我的模型,以便部署在实时推特上。对于后两个功能,收藏计数和转发计数,原因有点显而易见:我试图在推文发布后立即预测作者,因此它还没有被收藏或转发。然而,Tweet length 因为不同的原因被删除了。在我的训练数据的所有 33,000 条推文中,Twitter 将字符数限制在 140 个。但是直到最* Twitter 才把这个数字增加到 280。这意味着所有关于这一特性的培训都必须放弃。
一个小游戏
考虑到这些特征,我们来玩一个小游戏。我会发一条推文,请你猜作者是谁。
Is it Trump or one of his aides?
不要向下滚动太远,因为答案就在下面!这是第一个。这是谁写的,特朗普还是助手?
这有点简单。你看到了什么?有一个词“via”,高度表示一个助手推文。它包括一个链接,又一个助手的迹象。它是在中午发布的(我从加州刮来的这条推文,所以时间戳比华盛顿 DC 晚 3 个小时),非常正式,不带感情色彩:所有迹象都表明是一名助手。
是的,你说对了,那是一个助手发布的!好吧,这里还有一个:
那是特朗普还是助手?还是那句话,我们一起过一遍。这条推文比另一条包含更多的情感,这通常是特朗普的标志。这就是那个惊叹号:又一个特朗普式的风格。记得在时间戳上加 3 小时;时间是下午 7:30,一天工作结束后。考虑到这一点,我们可以自信地猜测这是由…
特朗普!是的,又答对了!
弗林的推特
这是一条重要的微博,这条微博开启了整个项目:
现在,这条推文是在 2017 年 3 月 26 日之后发布的,如果你记得早些时候是在这个日期之后,没有标签来识别真正的推文者。我们要做的就是我的模型。事实上,这是一条难以猜测的推文。它包含了“撒谎”、“有罪”、“羞耻”和“隐藏”这些词这些都是非常情绪化的话——可能表明特朗普是作者。但也有点正式。语法写得很好,并且包含一些比平均长度更长的单词:那些是助手的标志。这条微博是在中午发布的,也暗示了一名助手。但很个人化,建议川普。那么模特们说了什么?以下是原始输出:
***rf [ 0.23884372 0.76115628]
ab [ 0.49269671 0.50730329]
gb [ 0.1271846 0.8728154]
knn [ 0.71428571 0.28571429]
nb [ 0.11928973 0.88071027]
gnb [ 0.9265792 0.0734208]
lr [ 0.35540594 0.64459406]
rf [1]
ab [1]
gb [1]
knn [0]
nb [1]
gnb [0]
svc [1]
svm [0]
lr [1]([1], [ 0.15384615, 0.84615385])***
顶部的“rf”是随机森林。它以 76%的概率预测了 1 或特朗普(前七行显示了首先是助手,然后是特朗普的概率;接下来的九行显示预测:0 表示助手,1 表示川普)。“ab”是 AdaBoost,它也预测到了川普,但只有 51%到 49%的概率——一点都不太自信。梯度推进模型更有信心,87%的可能性是特朗普。然而,KNN 不同意:71%的可能性是由助手写的。多项式朴素贝叶斯预测了特朗普,但高斯朴素贝叶斯预测了助手。两个支持向量机模型也存在分歧:SVC 预测了川普,SVM 预测了助手(由于这些模型的创建方式,它们无法输出概率估计,这就是为什么它们没有出现在结果的上半部分)。逻辑回归有点骑墙,特朗普的概率为 64%,助手的概率为 36%。特朗普有 6 个模特,助手有 3 个。
事实上,在花了几周时间阅读和分析了数千条特朗普的推文后,我认为这条推文是合作撰写的推文的最佳例子之一。从话题和情感上来说,这是 100%特朗普式的。但是从文体和语法上来说,它似乎来自一名助手。在我看来,特朗普很可能与多德一起起草了这条推文。特朗普告诉多德他想说什么以及他想怎么说,多德撰写了这条推特。这是我最好的猜测。
这只能说明这些模型并不完美,有很多不同意见;此外,一条推文包含的用于机器学*训练的信息非常少。我的最后一个组合,决策树,在我的测试集上准确率超过 99%,确实提供了对 Trump 的最终预测,概率为 85%(这是上面输出的最后一行)。所以这就是我们要选的:川普。不是他的律师约翰·多德。所以他们声称多德写了这条推文,而不是特朗普,我们只能假设这是:
谁在椭圆形办公室发微博?
原文:https://towardsdatascience.com/whos-tweeting-from-the-oval-office-building-a-twitter-bot-9c602edf91dd?source=collection_archive---------8-----------------------
建造一个推特机器人
Look my Twitter bot!
在我的最后一篇帖子中,我描述了我如何使用机器学*建立一个模型,该模型可以预测川普本人或他的一名助手是否在他的账户上发推文。在这篇文章中,我将详细介绍我如何用 Twitter bot 部署这个模型。
我是 Greg Rafferty,湾区的数据科学家。你可以在我的 github 上查看这个项目的代码。
谁在椭圆形办公室发微博?
我开发了一个推特机器人@ who sintheeval,它转发唐纳德·特朗普的每一条推文,并预测这条推文是由特朗普本人还是他的一名助手写的。如果你对这个小项目的起源感到好奇,请继续阅读本系列中的上一篇文章,或者继续阅读以了解我是如何构建 Twitter bot 的!
模型部署
如果不能以其他人可以理解的格式打包,世界上最好的数据科学模型就一文不值。在这篇文章中,我将展示如何通过 Twitter 上的机器人部署我的模型。网上有很多教程讨论我在模型中使用的各种机器学*模型,这就是为什么我在以前的帖子中没有详细介绍它们。然而,当我开始构建这个机器人时,我发现网上缺乏关于如何构建 Twitter 机器人的明确信息,所以这篇文章将比以前的文章更具技术性,并将包括您需要的启动和运行机器人的代码。
在本教程中,我们将创建一个机器人,它会监视 @realDonaldTrump 的任何推文,一旦有东西发布,机器人就会询问@ who sintheval是谁发布的,是特朗普本人还是他的一名助手。
先决条件
- 一个推特账户(去 https://twitter.com/signup 创建了一个)
- 计算机编程语言
- Tweepy,一个使用 Twitter 的有用库(
pip install tweepy
)
从 Twitter 获取 API 访问权限
如果你正在构建一个 Twitter 机器人,你需要做的第一件事就是访问 Twitter 的 API。访问apps.twitter.com,用机器人将要发布的 Twitter 账户登录。填写表格并选中所有必要的复选框。登录后,访问“密钥和访问令牌”选项卡,生成一个新的访问令牌,您将需要使用它来验证您的应用程序。
存储凭据
你应该永远不要分享这些私钥,所以最好将它们隐藏起来,不要让任何你公开发布的代码看到。我在项目的根文件夹中创建了一个名为.env
的文件夹,在本教程中,我假设你也是这样做的。在名为twitter_credentials.json
的文件夹中创建一个新文件,并按照以下格式粘贴您的密钥和访问令牌(将所有大写单词替换为您的应用程序在 twitter 上的仪表板中的值):
Twitter 提供了一个下载数据的 REST API,但是对于实时数据来说,它不是你的最佳选择。如果你经常查看新的推文,你会很快达到速率限制。所以对于这个机器人,我们将使用流式 API。
初始设置
现在在你的项目文件夹中创建一个twitterbot.py
文件(这个文件夹包含我们刚刚创建的.env
文件夹)。在你喜欢的文本编辑器中打开twitterbot.py
,导入 Tweepy 和 json。当然,Tweepy 是我们用来与 Twitter 交互的工具,json 将允许我们读取这些密钥并访问令牌。我们还将导入睡眠,这样如果达到 Twitter 的速率限制,我们可以暂时暂停我们的机器人:
OAuth 认证
现在,让我们加载这些凭据,并设置 Tweepy 进行身份验证并连接到 Twitter:
识别要观察的用户
下一步,我们需要知道我们将监视的用户的 Twitter ID,在本例中是 @realDonaldTrump 。Gettwitterid.com是一个做一件事的简单网站,我认为从它的 URL 就足够明显了。输入 Twitter 用户名,它会输出相应的用户 ID。对于‘realDonaldTrump’,这是25073877
。让我们把它赋给代码中的一个变量(作为一个字符串!).
使用 Tweepy 流式传输
Tweepy 有一个对我们来说超级有用的类叫做StreamListener
。我们将从它继承并重新定义on_status
函数来执行我们想要的动作。让我们把我们的新类叫做TrumpStreamListener
,因为稍后当我们开始流过程时,我们将指示这个类监视我们在上面的realDonaldTrump
变量中指定的帐户。当我们这样做的时候,让我们也重新定义一下on_error
函数。这个函数可以在 Twitter 返回错误时执行一个操作。在这种情况下,我们将注意错误420
,这意味着我们已经达到了速率限制。每当你的机器人达到速度限制,Twitter 允许你重新进入的时间就会成倍增加,所以我们希望暂停在420
上,并尝试在一分钟内重新连接,而不是不停地敲打 Twitter。
让我们浏览一下这个on_status
函数。当我们开始流式传输时,我们将指示机器人监视由 realDonaldTrump 变量指定的帐户,但这也会捕捉任何关于他的转发或提及。我们只想要来自 Trump 的帖子,所以我们需要在函数的开头有一个if
子句。我们发布的实际 tweet 将包含一个到 Trump tweet 的链接,因此我们分配了url
变量,该变量根据流监听器抓取的 tweet 数据创建链接,并在status
变量中定义。接下来,我们将编写实际的推文,它将是“这是谁发的推文,@ Who sintheval?特朗普还是幕僚?”后面是特朗普的原推文,比如:
最后,我们将使用 Tweepy 的update_status
函数,该函数将该 tweet 发布到我们的提要中。
为了让我的 Twitter 机器人预测@realDonaldTrump 推文的作者,我没有立即调用api.update_status
,而是定义了一个新的post_tweet
函数,它打开了我的机器学*模型的一个保存的 pickle 文件,调用了.predict
和.predict_proba
方法,然后编写并发布了推文。如果你想做一些比发布脚本化的 tweet 更复杂的事情,这就是你要编码的逻辑。如果你想了解更多细节,你可以在我的 GitHub 上找到我的完整代码。
开始流
现在,我们需要定义一个函数,确保在出现错误或暂时失去互联网连接的情况下,流不会死亡。如果由于任何原因中断,这个函数将自动重新开始流。它还指示流监听器对象遵循由变量realDonaldTrump
、25073877
定义的帐户。
开始做事
最后,让我们开始行动吧!最后这些命令将实例化该类,并调用start_stream
函数来打开机器人。
最后,这些片段组合成了一个完整的程序:
你有它!如果你运行这个程序,它将持续监控 Twitter 上任何关于@realDonaldTrump 的活动。如果该活动是特朗普的账户发布的,那么你的机器人会向你自己的账户发布一条推文,询问@ who sintheeval账户是否是特朗普本人或助手发布的。
为什么机器永远不会爱你
原文:https://towardsdatascience.com/why-a-machine-will-never-love-you-cb2c0f2fd0ef?source=collection_archive---------6-----------------------
虽然也许这并不重要
爱情方程式的解决方案有能力为价值数十亿美元的在线婚介行业创造数万亿美元的利润,重新定义人工智能研究的方向,并可能改变人类的长期生存统计数据。
为了理解如此基本的东西是如何成为如此多不同努力和事业的核心,我们只需要问一个看似简单的问题:“爱是什么?”
网上媒人认为他们知道。这是外表,再加上化学通过一个心理算法运行。他们认为这是一个神秘的公式,在这个公式中,大脑在寻找配偶的过程中会随着原始节奏摇摆。这种说法很好地配合了他们自己标榜的“配对算法”,该算法旨在帮助减少他们数据库中潜在伴侣的选择,以选出几个比平均水平更有可能联系上的人(这是赌客愿意花大价钱购买的)。
当简单的答案包含复杂的问题,而这些问题的性质取决于我们向谁提问时,暗示着这个主题对我们作为人类的运作是如此重要,以至于它渗透到我们的大部分活动中,并影响我们的动机
心理学家和生物学家认为,这只不过是性欲、依恋和社会关系的有力结合,它源于这样一个事实,即我们的神经系统不是独立的,需要与周围的人密切协调。他们指出了哺乳动物表现出配对结合行为的边缘共振的大量证据。
神经科学家指出血液中的复杂相互作用,如皮质醇、血清素、多巴胺和催产素,它们在血/脑屏障上以影响认知和大脑执行决策过程的方式产生显著影响。
当简单的答案包含复杂的问题,而这些问题的性质取决于我们向谁提问时,暗示着这个主题对于我们作为人类的运作是如此重要,以至于它渗透到我们的大部分活动中,并影响我们的动机。
爱因斯坦能够在第四维时空中想象出时间和空间的扭曲,他是这样描述爱情的:“你究竟如何用化学和物理学来解释像初恋这样重要的生物现象?”
然而,在他去世后的 60 年里,我们对身体、大脑和思想如何工作的理解已经取得了足够的进展,可以说,感觉来自于情绪,情绪来自于感官数据。
情感芯片
这种简化的理解爱的方法打开了研究的大门,将爱从形而上学的领域转移到实验室的仪器下。我们的期望是,分析、测量以及最终的复制将为我们人类经历的最基本的驱动力之一提供解决方案。
这与剑桥大学的彼得·罗宾逊等计算机科学家的观点一致,他的团队正忙于建造一台能够理解人类情感并以同样方式回应的情感计算机。
他的“情感计算机”回避了机器智能和意识的问题。如果情绪是“人类和动物中调节复杂行为的进化功能状态,以应对实例化重复出现的环境主题的挑战,”正如一篇研究论文所说的那样,那么情感计算,创造有感觉的机器是可能的,这意味着我们也可以拥有人类意义上的智能计算机,并进而拥有自我意识。
具有代理意识的机器也将拥有权利,正如最*欧盟立法提案所建议的那样。但是形而上学并不是一个容易摆脱的学科,它不需要很长时间就可以用约翰·塞尔的“中文室”思想实验来搅浑水,该实验基本上说,如果某样东西在每次你需要它的时候都表现得像是智能的和有意识的,那么它与智能的和有意识的是没有区别的。
然而,这种区别很重要。从人类学的角度来看,男人选择女性机器人而不是人类伴侣的趋势可能是淫秽的,当然也是令人担忧的,这已经超出了这个范围,并引发了关于智力的辩论。
具身认知
有感觉的机器让我们关注这样一个问题:它们感觉到底是什么?当它们经常缺少身体时,我们如何确定它们情感的真实性?即使它们有,也不会受到和我们一样的限制、约束和机遇。
感情不仅决定了我们是谁,也决定了我们的决策和身份感,这意味着它们是我们在这个世界上的目的感的背后。
当身体作为包裹大脑的感觉器官,成为我们运作方式不可或缺的一部分。情感、认知和执行功能成为千变万化的复杂舞蹈的一部分。
从计算的角度来看,这使得爱本身成为一个无法解决的 NP 完全问题,这个问题可以被人脑解决,但不能被任何计算机解决。
未来学家雷·库兹韦尔曾说过一句名言:“人类将会在未来的 15 年(T3)内爱上电脑”。他实际上的意思是,在这段时间内,人工智能将足够先进,能够真正感受情感,并做出自己的选择、决定和计算,从而能够回报人类的爱,这样配对就可以发生。
我们早就知道我们是有缺陷的,进化的,不断变化的生物机器。我们是谁,我们想什么,我们成为谁,我们做出什么决定,我们如何做出这些决定,以及这些决定最终将我们引向何方,都受到对管理每个生物系统的熵定律的有意识和潜意识理解的支配。
机器不受此限制。一个真正有意识的机器实际上可能会感觉到足够的同情,但除非它生活在一种早上起床时会疼痛的身体中,中午时会感到饥饿,直到它对上厕所的物理信号做出反应时才能形成连贯的思想,否则它不太可能以与我们完全相同的方式感受到爱。
我的新书: 《狙击思维:消除恐惧,应对不确定性,做出更好的决策》是一项神经科学研究,探讨如何运用实际步骤做出更好的决策。
为什么 AdamW 如此重要
原文:https://towardsdatascience.com/why-adamw-matters-736223f31b5d?source=collection_archive---------1-----------------------
When you find yourself in a rocky terrain, take small steps 😉 [Mount Sinai, Egypt]
像 Adam 这样的自适应优化器已经成为训练神经网络的默认选择。然而,当以最先进的结果为目标时,研究人员通常更喜欢带动量的随机梯度下降(SGD ),因为已经观察到用 Adam 训练的模型也不会泛化。
来自德国弗赖堡大学的 Ilya Loshchilov 和 Frank Hutter 最*发表了他们的文章“在 Adam 中固定权重衰减正则化”,其中他们证明了 L2 正则化对于自适应算法的效果明显不如 SGD。他们提出了 Adam 的一个改进版本,称为 AdamW,它产生的模型概括得更好,因此能够与 SGD 竞争,同时训练得更快。
读完这篇文章的摘要,你会理解 1) Adam 是如何工作的,2)什么是 L2 正则化,为什么使用它,以及 3)为什么改进版 AdamW 比标准 Adam 产生更好的概化模型。
①亚当
试着想象最小化一个神经网络的成本函数 f 就像在山上走下山坡:你随机初始化你的网络的权重,这意味着从山上的一个随机点开始。你的目标是尽可能快地达到成本函数的最小值(谷值)。在每一步之前,你计算梯度 ∇ f (确定山坡最向哪个方向倾斜)并向相反方向走一步:新的权重 x(t) (按照文章的注释)等于旧的权重 x(t-1) 减去梯度乘以学*速率α:
x(t)= x(t-1) — α ∇ f
按照这个步骤,你最终会到达山谷(或至少是当地的最小值),然而,当你走在坡度变化不大的草地上时,你可能想迈出更大、更大胆的步伐,或者当你爬下坡度不断变化的岩石时,迈出更小的步伐。Adams 为您做到了这一点:当梯度变化不大时大步前进,当梯度变化很快时小步前进(单独调整每种重量的步长)。
让我们了解亚当是如何工作的(暂时忽略彩色部分):
Taken from “Fixing Weight Decay Regularization in Adam” by Ilya Loshchilov, Frank Hutter.
Adam 跟踪梯度的(指数移动)平均值(称为一阶矩,从现在开始表示为 m )和梯度的平方(称为原始二阶矩,从现在开始表示为 v ) 。
在每个时间步中,计算梯度g=∇f【x(t-1)】,然后计算移动平均值:
m(t) = β1 m(t-1) + (1-β1) g(t)
v(t) = β2 v(t-1) + (1-β2) g(t)
参数β1(即 0.9)和β2(即 0.999)控制平均值衰减的速度,即“过去多长时间内对梯度(平方)进行平均”。按以下方式阅读方程式:“新平均值等于旧平均值的 0.9 倍(或梯度平方的 0.999 倍)加上当前梯度的 0.1 倍”。对于每一个时间步长,旧的梯度再乘以 0.9,这意味着它们对移动平均值的贡献越来越小。
请注意,在第 9 行和第 10 行中,平均值由 (1-β^t) 重新调整,其中 t 是时间步长。为了理解为什么这是必要的,考虑第一个时间步长并记住 m(0) 和 v(0) 被初始化为 0。这意味着第一个时间步长后的平均值为m(1)= 0.9 0+0.1g(1)= 0.1g(1)。但是,第一个时间步长之后的平均值应该正好是 g(1),这是将 m(1) 除以(1–0.9)= 0.1 得到的结果。
为简单起见,我们设置 η=1 (学*率计划乘数),并将所有内容放在第 12 行:
当向下“下山”一步时,步长通过将学*速率α乘以 m(t) 并除以 v(t) 的根来调整(此时我们忽略帽子^)。
x(t)= x(t-1)-αm(t)/[sqrt(v(t))+ϵ]
记住一个随机变量 x 的方差定义为Var(x)=
方差量化了梯度围绕其平均值变化的程度。如果梯度保持*似恒定,因为我们“走在草地上”,梯度的方差*似为 0,无中心方差 v(t) *似等于 m(t) 。这就意味着 m(t) / sqrt(v(t)) 在 1 左右,步长“下山”的顺序是 α 。
另一方面,如果梯度快速变化, sqrt(v(t)) 比 m(t) 大得多,因此“下山”的步长比 α 小得多。
总之,这意味着 Adam 能够通过估计梯度的一阶和二阶矩来为每个个体权重调整步长。当梯度变化不大且“我们在下山时不必小心”时,步长为 α、的数量级,如果它们发生变化且“我们需要小心不要走错方向”,则步长要小得多。
在下一节中,我将解释什么是 L2 正则化,在最后一节中,我将总结作者的研究结果,即为什么使用 L2 正则化的 Adam 产生的模型比使用 SGD 训练的模型更差,以及他们如何解决这个问题。
2) L2 正则化和权重衰减
L2 正则化或权重衰减背后的思想是,观察到具有较小权重的网络(所有其他条件相同)过拟合较少且泛化能力较好。如果你不熟悉这个概念,我建议你读一读迈克尔·尼尔森的伟大的电子书。
当然,大重量仍然是可能的,但前提是它们能显著减少损失。每步的权重衰减率 w 定义了最小化原始损失函数(如果选择小的 w 则更重要)和找到小权重(如果选择大的 w 则更重要)的相对重要性。如果如前所述比较权重的更新(新权重等于旧权重减去学*率乘以梯度)
x(t) = x(t-1) — α ∇ f[x(t-1)]
重量衰减的版本
x(t) = (1-w) x(t-1) — α ∇ f[x(t-1)]
您会注意到附加项 -w x(t-1) ,它指数衰减权重 x ,从而迫使网络学*更小的权重。
通常,不是执行权重衰减,而是定义正则化损失函数( L2 正则化):
f _ reg[x(t-1)]= f[x(t-1)]+w '/2x(t-1)
如果你计算这个正则化损失函数的梯度
∇f _ reg[x(t-1)]=∇f[x(t-1)]+w ' x(t-1)
并更新权重
x(t) = x(t-1) — α ∇ f_reg[x(t-1)]
x(t)= x(t-1)—α∇f[x(t-1)]—αw ' x(t-1)
如果定义 w' = w/α,你会发现这相当于重量衰减。
常见的深度学*库通常实现后者的 L2 正则化。然而, 文章 显示,这种等价只适用于 SGD,不适用于 Adam 这样的自适应优化器!
在这篇文章的最后一部分,我将解释为什么 L2 正则化不等同于 Adam 的权重衰减,Adam 和 AdamW 之间的区别是什么,以及为什么使用 AdamW 可以给出更好的概化模型。
3)阿达姆
让我们再来看看亚当算法。
Taken from “Fixing Weight Decay Regularization in Adam” by Ilya Loshchilov, Frank Hutter.
第 6 行中的紫色项显示了 Adam(不是 AdamW)中的 L2 正则化,因为它通常在深度学*库中实现。正则化项被添加到成本函数中,然后该成本函数被导出以计算梯度 g 。然而,如果在这一点上添加权重衰减项,梯度及其平方的移动平均值( m 和 v )不仅跟踪损失函数的梯度,还跟踪正则化项!
如果我们将第 6、7 和 8 行插入第 12 行(现在忽略帽子^,因为 t 被假定为大,因此 β^t=0 ),权重的更新如下所示:
如您所见,重量衰减也通过 sqrt(v) 进行归一化。如果某个重量的梯度很大(或变化很大),则相应的 v 也很大,并且重量比梯度小且变化缓慢的重量调整得少!这意味着 L2 正则化不能像预期的那样工作,也不如 SGD 有效,这就是为什么 SGD 产生的模型概括得更好,并且已经用于大多数最新的结果。
因此,作者提出了 Adam 的改进版本,称为 AdamW,其中权重衰减仅在控制参数式步长之后执行(参见第 12 行中的绿色项)。权重衰减或正则化项不会在移动平均值中结束,因此仅与权重本身成比例。作者通过实验表明,AdamW 产生更好的训练损失,并且模型比用 Adam 训练的模型概括得更好,从而允许新版本与具有动量的随机梯度下降竞争。这意味着在未来,研究人员和工程师可能不必经常在 SGD 和 Adam 之间切换。请记住这一点,下次您训练模型时:)
为什么人工智能正在增强人类解决问题的能力
原文:https://towardsdatascience.com/why-ai-is-supercharging-mankinds-ability-to-solve-problems-3d778c941ee6?source=collection_archive---------3-----------------------
Chinese Oracle Bones (CC-BY-SA 3.0), Isaac Newton, (Public Domain) and R.A. Fisher (Public Domain)
在这篇文章中,我想带你进行一次人类发展的时间旅行。让我们扪心自问:人类是如何学会解决问题的?我们如何保存这些知识并与他人分享?我们将把答案放在历史背景中。我们还会发现为什么人工智能在解决问题方面是一个非凡的新概念。
开端
生活在石器时代的尼克是怎么知道应该避开熊的?他的基因里有解决这个问题的方法。我们的本能是基因编码的行为模式。它们指导我们在危及生命和繁殖的情况下做出正确的决定。
这种解决问题的方式是自然界帮助生物解决问题的一般方式。许多物种的 DNA 中都有这种基因。人们甚至可以在植物中观察到这种行为。植物利用挥发性有机化合物来保护自己。它们要么毒死敌人,要么向其他掠食者求救。
不死是好的第一步:但是尼克怎么知道吃什么?这个问题的解决方法是不断尝试。他可以尝试不同的浆果,并希望从他的反应中了解这是否是一个好的选择。尼克可以把这些知识教给他的朋友和家人。发现的知识可以转移给其他人。
这也不是人类独有的。其他高级物种也能够将行为从一代传给下一代。我们开始不同于这个星球上任何其他生命形式的地方是的社会方面。人类学会了在复杂的社会组织中生活,并向其他个体传授知识。
口头教学
随着文明的开始,人类群居在一起。在某个时候,这些变成了村庄和城市。在文明中,有可能有专门保存知识的人——学者和牧师。
尼克生活在这样一个早期文明中,能够比他的石器时代同伴学到更多的东西。尼克需要保存多少种子才能在明年有足够的小麦?他怎么知道什么时候播种?这些问题都是用他所在社会的集体知识来回答的,这些知识都保存在口头传统中。
口头传统是长期保存信息的第一种方式。这种方法的缺点是容易出错。很难在几十年甚至几个世纪的时间里不改变信息。
书面教导
Ox scapula recording divinations by Zhēng 爭 in the reign of King Wu Ding. One of the first scriptures. (CC-BY-SA 3.0)
随着美索不达米亚、中国、印度和埃及早期高级文化的兴起,我们看到了第一部经文的兴起。从某种程度上来说,经文是保存知识的一个很好的方式,也是一个更防错的方式。
现在生活在古埃及的尼克是能够阅读的幸运儿之一。有了这种能力,尼克能够向他从来不认识的人学*。他能够与他的文明中最优秀的学者交流和学*,而不用直接与他们交谈。
通过这种方式,人类能够将如何解决问题的信息从一个人传递给另一个人。也有可能将信息添加到人类共享的知识中。
自 1450 年以来——印刷书籍
15 世纪 50 年代,约翰内斯·古腾堡发明了第一台机械活字印刷术。这项发明使得人类可以大量复制书籍。在这项发明之前,书籍需要手工抄写。在活字印刷的帮助下,人类有机会保存和分享比以往更多的书籍。
值得注意的是,书面和口头的教导大多被用来保存解决问题的方法。他们没有自己解决问题。
科学和数学的兴起
Alhazen (965–1040), one of the first scientist who ever lived. (Public Domain)
在文艺复兴重新发明科学之前,知识是用自然语言保存的。像数学、物理和化学这样的学科引入了一种新的语言来描述世界的基础。通过使用数学,我们能够描述和理解物理定律。
这导致了一种有趣的解决问题的新方法。以前,一个人需要知道如何解决问题。随着科学的兴起,人类能够从自然法则中找到一个好的解决方案。这是一种全新的解决问题的方式。男人知道学到了事物如何运作的原理,然后从中总结出其他知识。
我们的老朋友尼克刚刚在拿破仑的炮兵部队里升职了。他负责瞄准目标。他能够预测正确的角度等。通过了解牛顿定律。
科学的发明从根本上改变了人类学*的方式,以及他们需要保存什么样的知识来解决任何问题。
算法和计算机的兴起
Replica of Conrad Zuse's Z1. The Z1 is the first programmable computer and was built in 1936–1938. (CC-BY-SA 3.0)
算法的发明展示了人类解决问题的新途径。算法是一种方法,不是写下特定问题的解决方案,而是写下如何解决它。
1920 年,尼克在一家街角商店的收银台工作。他应该总是分发尽可能少的硬币。他学会了一个很好的算法来做这件事。他总是把尽可能多的硬币加到剩余的总数中。这种贪婪的算法总是让出最少数量的硬币来找零。
人类更进了一步,开发了能够使用这些算法的机器。在我们的例子中,这些是自动寄存器,它们自己返回变化。
这彻底改变了人类解决问题的方式。Nick 不再需要知道算法来找到他的变化问题的最佳解决方案。他也不需要从基本定律中推导出这些知识。他只是要求一台机器来解决他的问题。它使人们不仅能分享解决方案,还能与每个人分享解决问题的能力。使用这种方法的人不一定需要有自己解决问题的能力。他只需要知道如何提问。
使用算法的一个更复杂的例子是热力学定律与有限元法的结合。这使得人类可以对机器部件进行复杂的热力学模拟。你不需要自己去解方程,而是得到问题的解。
人工智能和模式识别
R.A. Fisher the father of modern statistics. (Public Domain)
我们终于到达了人类发展出某种可以称之为人工智能的阶段。老实说,我不确定现代深度学*算法是否应该被称为 AI。我个人更愿意坚持使用术语模式识别。它精确地告诉我们这些算法做什么——它们自动检测数据中的模式。现代深度学*系统只能获得观察结果。他们能够自己从数据中提取知识。模式识别的本质比以前的任何算法都更具普遍性。
尼克操作收银机时,我们的机器在观察他。从这些观察中,该算法能够提取一种模式。他们知道他们需要付出多少改变,以及付出的最佳方式。
这多少有些进化了人类的知识发现能力。之前的所有阶段都需要人来解决问题。我们刚刚发现了保存和分享这些知识的非常好的方法。
我们现在进入了一个不需要自己去发现知识的世界。机器正在为我们做这些。我们需要制定问题,然后机器检测模式。
所以有人可能会问,如果 R.A .费希尔是有史以来最重要的科学家。
为什么人工智能模型非常需要人类来保持令人敬畏?
原文:https://towardsdatascience.com/why-ai-models-absolutely-need-humans-to-stay-awesome-8fce149a8bf?source=collection_archive---------8-----------------------
Photo by rawpixel on Unsplash
公司通常期望人工智能模型一旦实现,将保持智能并神奇地工作
没有什么比这更偏离事实了。
“那么自我修复算法或自我维护的人工智能平台呢”你可能会问。好吧,没有一个接*今天的生产级实现。而且,他们还需要一段时间才能做到不需要任何人工干预。
商业领袖通常会失望地发现,机器学*(ML)模型在消耗了宝贵的时间和投资后,仍然需要人类进行日常维护。让我们来看看为什么这是今天的现实,以及公司可以如何为此进行规划。
人工智能世界中勤杂工的相关性
Photo by Todd Quackenbush on Unsplash
让我们理解为什么算法仍然需要人类,并对 ML 模型的内部进行超级简单的解释。不,你不需要任何数学。是的,这篇文章的其余部分将以英语继续。
然后,我们将根据我们在格拉米纳的工作经验,讲述模特通常会寻求人类帮助的 4 个关键场景。最后,我们将列出企业为保持其模型健全和成功而必须采取的具体步骤。
一瞥典型的 ML 模型是如何工作的
假设你是一家电信公司,想要解决客户流失的大问题。你希望对那些将在未来一个月离开你的客户发出早期预测性警告。
您煞费苦心地提取了十几个关于客户人口统计、购买、订阅计划和服务交互的数据源。当你收集这些数据几年后,这 100 多个属性会变成数百万个数据点。
数据科学家日以继夜地分析和理解所有这些数据。然后,他们建立并设计模型来预测,比方说 10 个客户中有 8 个最终会离开。当试验时,这个工作非常漂亮。你现在可以专注于留住这些客户的任务。到目前为止,一切都很好。
现在让我们暂停一下,打开这个神奇的模型来检查它的内部。
Photo by Pierrick VAN-TROOST on Unsplash
从您提供的 100 多个客户属性因素中,您会找到模型使用的 3 到 5 个关键因素。例如,这些可以是,'合同期限','电影是否是流式的','报告的服务投诉种类',或者更非直观的因素,如'付款方式',或'家属人数'。
在研究了所有参数之后,数据科学团队可能会决定只使用其中的几个(或者只有 1 个!)对客户流失影响最大。所有其他属性都将被丢弃。
这样的模型可以概括为:“只要给我‘a’、‘b’、‘c’参数,我就告诉你‘z’事件发生的几率。”
这就是一个模型所需要的,并且它完成了所描述的工作。
不,它并不总是处理一百万个数据点。不,它不模拟客户的大脑,也不了解人类的心理。深度学*模型等先进技术也不例外。
不幸的是,人们经常假设机器对地面情况有一个扎实、全面的了解。
机器学*的整个学科是关于识别那几个因素(预测值,然后弄清楚它们与结果(想象一个公式)之间的关系(目标)。
Models — Expectations vs Reality
动摇模型基础的四种情况
现在,你可以感觉到一个模型的内部是多么的脆弱,尽管它有着复杂的外表。
公平地说,我们人类也将复杂的决定建立在一组看似很小的因素上。然而,大脑有更强的能力来权衡这些因素以及它们对决策的相对重要性。模特们有大量的工作要做。
以下是四种需要模特重返课堂的场景:
1。数据结构的变化
随着应用程序升级、新工具购买和流程变更,每个组织的技术环境都在不断发展。这些会影响数据格式和供给模型的管道。这种变化需要定期维护。
2。新情报的可用性
企业通常会发现新的信息来源,如客户的在线行为、社交信息来源或其他背景情报。该模型必须重新评估,以检查这些新的投入可能是更强的预测。
3。业务动态的变化
商业策略可能会改变。客户现在可能会被你公司丰富的产品特性所吸引,而不再是价格经济。难道不应该向模型传授这种新的动态以保持相关性吗?
4。持续刷新和验证
假设上述情况都没有改变,模型仍然需要健康检查,比如说每几个月检查一次。该模型必须用新数据重新训练,以避免过时。否则,准确性可能会随着时间的推移而下降。
Business Scenarios that call for a retooling of Machine Learning models in production
怎样才能让模特们保持聪明?
既然我们已经确定了干预的必要性,那么公司可以通过以下方式计划保持其 ML 模型的更新和运行:
- 变更预算:我们已经看到,模型的衰变和翻新就像生物的生长周期一样自然。通过对模型拥有的总成本进行预算,预先留出维护费用。
- 规划合适的人才:虽然发现和模型开发得到了数据科学家的欢呼,但维护往往被视为一种拖累。确保数月后有合适的人才来调整和修补模型。
- 提防 技术债 : 如软件开发中所见,模型往往背负着过去包袱的重量。虽然有些是不可避免的,但还是要实施模型流程和责任来最小化其影响。
- 创造一种 感知 ML 的文化 : 模特越来越被视为企业的数字化工作者。公司应该创造一种文化,让人们可以与机器人共存,知道他们可以在哪里相互支持。
Source: Giphy
对自动化程度更高的未来的总结
今天,相对于模型维护,模型创建和工程阶段受到了过多的关注。可以理解,这是因为数据科学行业仍处于起步阶段。
即将到来的 ML 进展可能有助于解决这些挑战。像 AutoML 和神经架构搜索这样的技术,虽然适合今天的模型创建,但也可以很好地适用于保持模型的适应性。
企业领导人必须采取长远的观点,为模型的维护和健康制定计划,以避免数据科学幻灭。对于那些刚接触机器学*的人来说,我希望这篇介绍澄清了一些围绕 AI 和 ML 模型世界的困惑或感知的神奇光环。
对数据科学充满热情?随意加我在LinkedIn或者Twitter。
[## Ganes Kesari | LinkedIn
在其他网站上包含此 LinkedIn 个人资料
www.linkedin.com](https://www.linkedin.com/in/ganes-kesari/)
为什么人工智能不会取代放射科医生
原文:https://towardsdatascience.com/why-ai-will-not-replace-radiologists-c7736f2c7d80?source=collection_archive---------1-----------------------
2016 年末,神经网络教父杰弗里·辛顿教授表示,“很明显,我们应该停止培训放射科医生”,因为图像感知算法很快就会明显优于人类。他说,放射学家是“已经越过悬崖边缘但还没有往下看的郊狼”。
这引发了一场圣经比例的炒作浪潮,这一浪潮至今仍在持续,而且还没有打破的迹象。在我看来,尽管这股热情和乐观的浪潮成功地将放射学人工智能带到了人们想象的最前沿,并带来了大量的资金,但它也通过过度膨胀政策和决策者的期望造成了无尽的伤害,并对招聘产生了切实的连锁反应,因为失望的初级医生开始相信机器确实在取代人类,所以他们不应该申请成为放射科医生。很难想象还有比这更具破坏性的言论出现在放射科员工危机(尤其是在英国)威胁到整个医院系统稳定的时候。
你看,没有放射科医生,医院根本无法运作。据我保守估计,进入医院的 95%以上的患者都会有某种形式的医学成像,随着患者数量的增长,对成像服务的需求也在增长。不仅如此,随着成像被认为是大多数诊断、大多数治疗途径和大多数结果测量的关键,我们已经看到对医学成像和放射学家的需求几乎呈指数级增长。这与耸人听闻的标题“机器击败放射科医生”形成了鲜明的对比,这只会进一步误导公众对人工智能目前真实状态的认识,误导他们认为放射科医生的日子屈指可数。
无论你对人工智能和自动化的可能性多么着迷或深信不疑,期望它在不久的将来完全取代人类放射科医生都是不现实的。我的估计是 10 年后我们才能在 NHS 的常规实践中看到人工智能——我的观点现在是关于 T2 议会记录的问题!我知道这可能会引起争议,因为目前有太多的希望和炒作,甚至可能会让像我这样基本上将自己的职业生涯奉献给放射学人工智能的人感到惊讶,但我相信,就该职业的未来进行明智的讨论绝对至关重要,而不是只听硅谷福音传道者和媒体的话,让我们承认,他们对放射科医生实际上做什么一无所知,只是喜欢夸大他们所兜售的东西的力量。
在这篇文章中,我将试图分解为什么诊断放射科医生是安全的三个主要原因(只要他们随着技术的发展而改变),甚至讨论为什么我们需要更多的培训。
原因 1。放射科医生不只是看影像。
如果有一件事我想对任何说人工智能将取代放射科医生的人尖叫,那就是这个——放射科医生不只是看图片!所有关于放射学中人工智能的媒体炒作都只涉及图像感知,正如我下面的图表中清楚显示的那样,图像感知并不是人类放射科医生日常工作的全部。此外,上图仅描绘了一个诊断工作流程,完全忽略了面向患者的工作(超声波、荧光透视、活检、引流等)、多学科工作,如肿瘤委员会、教学和培训、审计和差异审查,这些工作也是诊断放射科医生定期进行的。据我所知,没有一个放射科医生会将诊断报告作为全职工作。(甚至还有独立的介入放射学职业,更类似于外科手术而不是图像感知,也是一个遭受劳动力危机的职业,不太可能受益于人工智能系统)。
Simplified schematic of the diagnostic radiology workflow, with examples of where AI systems can be implemented. Image copyright @drhughharvey.
诊断放射学工作流程可以简化为如上所述的组成步骤:从导致决定是否成像以及执行何种类型成像的患者陈述和病史,到安排成像,以及自动化或标准化图像采集。一旦成像完成,算法将越来越多地对图像进行后处理,以便其他算法进行解释,跨纵向时间框架注册数据集,提高图像质量,分割解剖结构,并对生物标记进行检测和量化。目前,诊断推理似乎是最难啃的骨头,也是人类将保持最多存在感的领域。这将得益于智能报告软件、标准化模板和机器可读输出的引入,使数据能够服从进一步的算法训练,从而更好地为未来的决策软件提供信息。最后,可以通过语言翻译或外行翻译来半自动地传递报告,并且还可以实现以有意义的形式向其他临床医生或患者增强呈现结果。这只是开始…
虽然人工智能绝对可以在这个诊断工作流程的每一个步骤中发挥作用,甚至可以在某些步骤中取代人类(如调度),但它根本无法完全取代放射科医生。除非我们奇迹般地开发出一个完整的端到端系统,对整个诊断路径进行监督和控制。对我来说,这是一个白日梦,特别是考虑到目前最先进的人工智能系统,这些系统目前只是勉强进入临床工作流程,没有一个在任何重要意义上接*取代放射科医生的图像感知工作。
原因二。人类将永远保持最终的责任
2017 年没有一个人死于商业飞机事故。这一惊人的成功故事部分归功于高科技系统的实施,这些系统将许多通常由人类工作人员执行的安全监督任务自动化,包括但不限于防撞系统、高级*地警告系统和改进的空中交通管制系统。这在很大程度上也是由于更好的培训、对安全问题的意识以及人类飞行员和其他辅助航空工作人员的警告/担忧升级。
随着自动化在过去几十年中的发展,人类在交流安全问题方面有了更多的自由,有了更多的时间来对越来越多的有用信息做出反应,所有这些都得到行业主导的安全意识的凝聚环境的支持。然而,最重要的事实是,商业飞行员的数量零下降——事实上,恰恰相反。航空公司报告训练有素的飞行员短缺,人们越来越担心预计全球数量需要增加一倍以上。你看,随着安全性的提高,成本的降低,飞行变得更加流行,乘客数量的增加,有理由认为需要更多的飞机。
医学常被比作航空,有时不恰当,有时也不准确。然而,我觉得这两个行业有一些重叠的关键特征。首先,两者都主要集中在维护人类的安全,同时让他们从 A 点到 B 点,无论是地理上还是系统上。传统上,两者都依赖于人类的专业知识和高水平的培训来监督所涉及的过程。过去十年,两者都在自动化方面取得了巨大进步,当然,两者都将从人工智能系统中受益匪浅,人工智能系统将越来越多的认知工作量和日常任务从人类手中夺走。但最重要的是——在这两个行业中,人类绝对不会被取代。
原因很简单——法律责任。当人类的生命危在旦夕时,想象人工智能系统的所有者选择承担机器输出的全部法律责任几乎是不可思议的。没有一家航空公司能够完全在没有飞行员的情况下驾驶商业飞机,如果真的如此,我敢打赌,保险金额将会如此之大,以至于对于一般的商业飞行来说可能不值得(然而,我承认可能会在私人或军事航班上看到)。我们可能会看到商业航班的“无人机”驾驶——飞行员端端正正地坐在陆地上,但在飞机飞越全球时远程监控飞机上发生的一切。事实上,远程驾驶的实验已经在计划中,公众对此反应不一。
在医学领域,目前简单地将人工智能系统限制为提供“决策支持”并将所有最终“决策”留给合格的人类要容易得多。没有一个现有的人工智能系统已经获得医疗监管机构的批准,还没有人声称自己是“决策者”,我真诚地怀疑是否会有人这样做,除非所做的决定是次要的,不太可能是致命的。这是因为人工智能系统不可能 100%准确地解决医疗诊断问题,因为,正如我之前讨论的那样,医学在某种程度上仍然是一门艺术,永远无法完全量化或解决。总会有一个离群值,总会有一个利基案例,总会有混杂因素。仅仅因为这个原因,我们总是需要某种形式的人为监督。
原因三。生产率的提高将推动需求
“如果你建造了它,他们就会来”是经常被错误引用的来自电影《梦想的领域》(或韦恩的《世界 2》,取决于你这一代)的说法。如果我们建立系统,大规模改善放射学工作流程和诊断周转,我们几乎肯定会看到医疗成像需求的大规模增长。
我亲眼看到了这一点——当我还是一名实*生时,我们部门开始了一项新举措,试图减少超声检查的等待时间。我们开放了一个晚上的名单,有三四个额外的位置,供急诊病人或已经等了三周以上的病人使用。起初,这个工作进行得很顺利,每天都有一个受训者被分配到这个额外的列表中。毕竟最多只花了一个小时。然而,很快,我们开始注意到请求进来说“请给额外的清单”,在我们知道之前,我们不得不开始打开额外的额外清单,额外的额外的额外清单,这反过来成为新的常态。我在这里的观点是,在放射学中,如果你给医生一个扫描病人的位置,他们会找到一个病人来填补这个位置!
随着人工智能成为放射学的新常态,随着扫描时间和等候名单的减少,以及随着放射学报告变得更加准确和有用,我们将继续看到对我们服务的需求增加。再加上不断增长的人口年龄和复杂性,对我来说,100%的需求增长是不可避免的,这可能是我仍然看好放射学作为职业选择的主要原因。
我们将需要培训更多的放射科医生,以应对要求成像和产生数据的浪潮,甚至可以考虑在病理学和基因组学等其他数据产生专业进行双重或三重认证。在遥远的未来,“放射科医生”甚至可能不被称为放射科医生——至少这是我去年在 RSNA 听到的一个理论,但这并不能否认这样一个事实,即某人人类仍将控制数据流。
那时放射科医生会做什么?
未来几十年的放射科医生将越来越多地从过去的世俗任务中解放出来,并大量使用华丽的预填充报告进行验证,以及时髦的分析工具来处理大量迷人的“放射”数据。这不太像《少数派报告》,但如果你想把自己想象成汤姆·克鲁斯(Tom Cruise ),对着一个未来的可延展实时数据屏幕滑动手指,那就来吧。
放射科人工智能的发展方向是放射科医生的数字化增强,他们的工作将变成监控和评估机器输出,而不是像现在一样手动检查每一个可能的平凡发现。就我个人而言,我张开双臂欢迎这一点——我已经浪费了太多的工作时间,在多次 CT 扫描中测量淋巴结,或者数椎骨来报告转移的水平。我更愿意检查系统是否测量了正确的淋巴结,识别了所有需要的椎骨,并在结果上签字。放射科医生将从使用原始工具的“lumpologists”转变为处理更加复杂的量化输出的“data wranglers”。
放射科医生也将变得比以往任何时候都更“医生”,生产力的提高使他们有更多的时间与临床医生和患者交流结果。我当然可以设想放射科医生作为数据交流者,直接与查房的临床团队和肿瘤委员会交流,甚至直接向患者提供信息。目前,这个行业只是因为过多地躲在黑暗的房间里而受到伤害,如果有什么不同的话,人工智能有能力让放射科医生回到光明中来。这才是真正的力量所在。
如果你和我一样对放射学人工智能的未来感到兴奋,并想讨论这些想法,请保持联系。我在推特上 @drhughharvey
如果你喜欢这篇文章,点击推荐并分享它会很有帮助。
关于作者:
Harvey 博士是一名委员会认证的放射科医生和临床学者,在英国国民医疗服务体系和欧洲领先的癌症研究机构 ICR 接受过培训,并两次获得年度科学作家奖。他曾在 Babylon Health 工作,领导监管事务团队,在人工智能支持的分诊服务中获得了世界第一的 CE 标记,现在是顾问放射科医生,皇家放射学家学会信息学委员会成员,以及人工智能初创公司的顾问,包括 Algomedica 和 Kheiron Medical。
为什么 Alphabet 的 AI 无法识别仇恨言论
原文:https://towardsdatascience.com/why-alphabets-ai-cannot-fix-hate-speech-8d352892cdba?source=collection_archive---------8-----------------------
最*,Alphabet(谷歌的母公司)一直在开发一种基于人工智能的解决方案,以检测仇恨言论。这个解决方案(被称为 Perspective )正在作为一种打击社区中的在线钓鱼和恶意攻击的方式进行营销,并且已经开放给公众在他们自己的网站上使用。
然而,尽管这个系统很有趣,但它有一个重大缺陷:
它真的不起作用。事实上,尽管谷歌和它的合作伙伴都在谈论它的品质,但这个系统实际上似乎无法决定一篇帖子是否真的是一次可恶的人身攻击。例如,正如《技术评论》的大卫·奥尔巴奇发现的,像这样的短语:
- “垃圾车”
- “你不是种族主义者”
- “很少有穆斯林是恐怖分子的威胁”
- 和“我他妈的爱你,伙计。生日快乐"
被标记为有毒。此外,后者实际上被标记为比“唐纳德·特朗普是一个俗气的小丑”和“现在是种族战争”等明显的侮辱更具毒性。当你试图阻止仇恨而不仅仅是人们在互联网上骂人时,这不是很好。
那么为什么会这样呢?谷歌怎么会犯这么大的错误?
我认为这可以归结为人类和机器都会犯的一个简单的错误。那个错误?
假设一个论点的措辞方式足以告诉你它是一种侮辱还是一种无害的信息。或者换句话说,假设一个论点的有效性与它的文明程度有关。
然而,事实并非如此。一个巨魔非常有礼貌,但仍然让许多人感到不安,这是完全合理的,就像有意义的批评以极其简洁的咆哮的形式出现一样。
但是机器很难检测到。对于像这样的系统来说,真正理解内容和它被使用的上下文是非常困难的,可能超出了当今许多机器学*系统的能力。
因此,Alphabet 和合作伙伴基本上回到了情绪分析,并认为这对于检测在线恶霸和巨魔来说“足够好了”。显然不是。
尽管如此,如果你需要一些例子呢?这是 YouTube 上游戏视频世界中的两个。
第一种显然是建设性的批评,措辞非常礼貌,非常正式。这是马克·布朗“老板钥匙”系列的一部分,显然会被每个人,无论是人还是机器,视为“建设性的批评”:
据推测,这里提到的人工智能会意识到它不是“有毒”的,并让它去吧。很公平。
另一方面,虽然有一些很好的关于游戏或游戏事件的建设性视频,但它们的设置并不那么礼貌。比如,典型的愤怒的电子游戏书呆子评论:
他不文明,他的视频充满了脏话,但这是他性格的一部分。这是一种行为,视频的实际内容通常是对游戏或相关配件的有意义的批评。
但我怀疑这个人工智能不会明白。它会看到所有的脏话和侮辱,并立即使用它的“仇恨言论”或“trolling”或“非建设性”。同样的事情可能会发生在大礼帽游戏人和他关于 WatchMojo 肮脏行为的视频上:
这是一个关于一家窃取他人作品的公司的刻薄但有建设性的视频。对于一个正常人来说,这对于像 YouTube、脸书或 Twitter 这样的频道来说是再好不过了。
但对于这种人工智能,我怀疑它会被标记为“有毒”。因为人工智能无法知道它的好内容,只知道视频主持人使用的语气“不礼貌”。
信息发送的方式并不是人工智能出错的唯一原因。它也无法确定某人是种族主义者/性别主义者/什么的,以及某人保护某人(或他们自己)免受这样的攻击。
例如,回到脸书上发布的列表。许多被标记的词并不是对某人的攻击,但是试图说像新纳粹攻击这样的话是不好的。“我认为你是种族主义者”怎么会有毒呢?
它不是。但是机器人系统不(也不能)在乎。这就像学校的零容忍政策。在那里,他们不是真正调查欺凌行为或弄清楚谁在攻击谁,而是立即暂停或驱逐任何被发现“打架”的人,不管这是否是自卫。
所以,是的,这个人工智能不起作用,它不起作用是因为它既不能理解消极语气和非建设性论点之间的区别,也不能理解人身攻击和某人防御攻击之间的区别。
先别用,以现在的形式基本上比没用还不如。
为什么我放弃了基于 Tensorflow 队列的数据输入管道
原文:https://towardsdatascience.com/why-am-i-chucking-the-tensorflow-queue-based-data-input-pipeline-5b4427735a0d?source=collection_archive---------4-----------------------
Post 假设对 Tensorflow 有一些基本的了解。主要是我在抱怨输入管道的问题😆
我最*在使用基于 Tensorflow 数据输入管道的 旧 队列时遇到了困难。没什么大不了的,但从设计的角度来看,这似乎不太对。Tensorflow 团队确实意识到了其旧设计的问题,并提出了一个问题( Issue #7951 )以进行彻底的设计更改(事实上,问题描述中说的是“从头开始”)。当我开始学*/使用输入管道时,新的设计还没有出现(尽管这个问题已经提出来了)。).鉴于我已经在学*和实验方面投入了一些时间,我想继续使用旧的设计。
我决定用在我的 TrafficSignSense (嗯,现在报废了)项目中。我创建了一个抽象,因为基于队列的管道本身非常分散。我决定将它放在“创建-启动-清理”抽象中(供参考):
回到这个问题,train 程序看起来像这样:
当我需要定期验证我的模型时,问题就出现了。
eval_list = [train_optimizer, merged_summary, model_loss, train_accuracy, valid_accuracy]
for i in range(NUM_EPOCHS):
_, summary, loss, accuracy_t, accuracy_v = sess.run(eval_list)
train_writer.add_summary(summary)
当我们试图评估valid_accuracy
时,毫不奇怪你得到的是错误的结果。它基本上是随机选择权重。请注意,我正在重新创建模型(model_v = model.CTrafficModel(batch_valid_input, NUM_CLASSES
),这正是主要问题所在。我必须为验证数据重新创建模型,因为这是我使用输入管道输入数据的唯一方式。我“也许”可以用检查站来解决这个问题。但是,这似乎不对。我认为检查点是训练验证过程的输出,在推理时间或训练恢复的情况下使用。训练和验证是紧密耦合的,我不喜欢为了验证而每隔几个迭代就抛弃权重并重新加载的想法。我也不喜欢仅仅因为数据改变就重新创建模型的想法(假设模型保持不变)。
以上只是输入管道的旧设计的几个问题。归档的问题描述了许多其他相关的问题。我最终决定永远放弃它。
那么,接下来呢?
作为替代,Tensorflow 拥有Dataset
和Iterator
API,可以轻松创建输入管道(他们是这么说的)。我还没看完。Tensorflow 也有这些Estimator
和Experiment
高级抽象。我打算和Dataset-Iterator
一起使用。希望他们让手头的任务变得容易!!!
为什么以及如何交叉验证模型?
原文:https://towardsdatascience.com/why-and-how-to-cross-validate-a-model-d6424b45261f?source=collection_archive---------1-----------------------
交叉验证技术的重要性和类型..
一旦我们完成了对模型的训练,我们就不能假设它会在以前没有见过的数据上很好地工作。换句话说,我们不能确定模型在生产环境中会有期望的准确性和变化。我们需要对我们的模型做出的预测的准确性有某种保证。为此,我们需要验证我们的模型。确定量化变量之间假设关系的数值结果是否可接受作为数据描述的过程称为验证..
为了评估任何机器学*模型的性能,我们需要在一些看不见的数据上测试它。基于模型对未知数据的表现,我们可以说我们的模型是否欠拟合/过拟合/良好概括。交叉验证(CV)是一种用于测试机器学*模型有效性的技术,它也是一种用于在数据有限的情况下评估模型的重新采样过程。为了执行 CV,我们需要保留未用于训练模型的样本/部分数据,稍后使用该样本进行测试/验证。
下面是一些常用于 CV 的技巧。
- 列车 _ 测试分流方法。
在这种方法中,我们将完整的数据随机分为训练集和测试集。然后对训练集执行模型训练,并使用测试集进行验证,理想情况下将数据分成 70:30 或 80:20。使用这种方法,如果我们的数据有限,就有可能出现较高的偏差,因为我们会错过一些没有用于训练的数据信息。如果我们的数据很大,并且我们的测试样本和训练样本具有相同的分布,那么这种方法是可以接受的。
我们可以使用切片将数据手动分割成训练集和测试集,或者我们可以使用 scikit-learn 方法的 train_test_split 来完成这项任务。完整的文档可在这里获得。
2。k 重交叉验证:
K-Folds 技术是一种流行且易于理解的技术,与其他方法相比,它通常会产生一个偏差较小的模型。因为它确保了原始数据集中的每个观察值都有机会出现在训练集和测试集中。如果我们的输入数据有限,这是最好的方法之一。该方法遵循以下步骤。
Image Sourced From Wikipedia
- 将整个数据随机分成 K 份(K 的值不应该太小或太高,理想情况下我们根据数据大小选择 5 到 10)。K 值越高,模型偏差越小(但较大的方差可能会导致过度拟合),而 K 值越低,则类似于我们之前看到的训练测试分割方法。
- 然后使用 K-1 (K 减 1)个折叠来拟合模型,并使用剩余的第 K 个折叠来验证模型。记下分数/错误。
- 重复这个过程,直到每个 K 倍作为测试集。然后取你记录分数的平均值。这将是该模型的性能指标。
我们可以手动编写一个逻辑来执行此操作,或者我们可以使用 scikit_learn 库中内置的 cross_val_score (返回每个测试折叠的分数)/ corss_val_predict (返回输入数据集中每个观察值的预测分数,当它是测试集的一部分时)。
如果 esitmator(模型)是一个分类器,且' y '(目标变量)是二进制/多进制,则默认使用' StratifiedKfold '技术。在所有其他情况下,默认使用' K_Fold '技术来分割和训练模型。
类似于 K_Fold 交叉验证器,StratifiedKfold 返回分层的折叠,即在进行折叠时,它保持每个折叠中每个类的样本百分比。因此该模型为训练/测试折叠获得均匀分布的数据。
我们可以使用 K-Fold 中的折叠作为迭代器,并在 for 循环中使用它来对 pandas 数据帧进行训练。下面是例子。
完整的代码可在这里获得。
就这些了,非常感谢你的阅读。如果有任何更正/建议,请告诉我。请吧👏如果你喜欢邮报。提前感谢…😉
为什么以及如何摆脱维数灾难(乳腺癌数据集可视化)
原文:https://towardsdatascience.com/why-and-how-to-get-rid-of-the-curse-of-dimensionality-right-with-breast-cancer-dataset-7d528fb5f6c0?source=collection_archive---------4-----------------------
这篇文章的主题已经在我的脑海中漂浮了很长一段时间,但是正如我的博客活动向我们展示的那样,我在几个多月的时间里都找不到灵感来将我所知道的信息转换成结构化的文字。我希望自从我的上一篇文章以来,我写博客的技巧没有变得很差,并且你会喜欢这里描述的主题;一如既往,我们欢迎任何类型的反馈。
非正式定义和直觉
维数灾难和降维本身是很少被谈论的话题;然而,对于几乎每个数据科学家(无论他/她是从事机器学*还是自然语言处理)来说,总有一天,专家会直面这个问题。
给维数灾难下一个有效的定义是相当困难的,但是简单地说,它是一个
算法的低性能及其与具有大量维度/特征的数据帧相关联的高复杂性,这经常使得目标函数非常复杂,并且只要数据集经常位于较低维度的流形上,就可能导致模型过拟合。
只要大多数机器学*/自然语言处理算法是基于处理一个数字数据集(来自现实生活或在进行一些数据预处理后生成),那么很常见的情况是每个观察值都是一个实值向量,大小为 N×1 ,其中 N 可能是 200、500 或 10000 以上。然而,正如前面提到的,许多 ML/NLP 方法不能以适当的方式处理给定数量的特征(尤其是在处理经典机器学*模型时)。
在现实生活中的一些情况下,大量的变量会导致模型的准确性和召回率大幅下降;适当减小数据集大小有助于实现模型泛化和良好的交叉验证结果。
选择合适的降维算法的问题高度依赖于我们正在处理的数据集的类型和我们准备数据的目标函数;例如,在一些情况下,保持低维空间内的距离是重要的,而在其他情况下,观测值的条件概率分布获得了在高维特征空间中编码的绝大多数信息。
手动特征选择
如果数据科学家非常熟悉数据集及其数字特征的含义,那么就很容易确定我们是否需要某些变量。例如,当预测某个地区的温度时,有关于湿度、云量、日出时间等的数据。只要目标变量不依赖于给定区域的人口数据和交通数据,这些数据就不充分。然而,只有在数据集易于解释并且变量之间的依赖关系易于确定的情况下,才可能执行这种方法。
去除无用变量的另一个好主意是查看它们的相关性(皮尔逊相关系数)并去除两个特征中的一个,这两个特征高度相关,只要它们都包含相似的信息。
人口的皮尔逊相关系数计算如下:
这个公式的分子是两个变量的协方差,分母是它们的标准差的乘积。
主成分分析和奇异值分解(P 主成分分析
我认为主成分分析是机器学*中最流行的降维算法;一些数据科学家将它作为降维方法论的同义词(当然这是错误的),因为它在许多论文、研究等中被广泛使用。
主成分分析 PCA 背后的思想是矩阵分解方法:我们将输入数据集表示为两个矩阵 T 和 P 转置的乘积(还添加了残差和均值向量,这将在后面观察到)。
将数据集投影到矩阵 T 中等同于为每一行分配一个标量;它的列表示主要的对象模式(这些列也称为“得分向量”)。将数据集投影到矩阵P’中等同于为每一列分配一个标量;它的行代表主导变量模式(这些行也被称为“加载向量”)。 T 中的矢量和P’中的矢量正交。
事实上,PCA 可以用最小二乘模型来表示:
ε代表残差,它是原始坐标和投影之间的导数;平均向量可以包括在模型公式中,或者用数学方法确定。
这是乳腺癌数据集(分类任务),数据被投影到二维空间。
奇异值分解
矩阵 U 与 T 相同,但对于归一化向量,如前所述, D 为对角矩阵,以协方差矩阵XX’的特征值平方根为其值,V’与P’完全相同。
SVD 也是其他流行算法的基础,例如,在自然语言处理任务方面的潜在语义索引。矩阵 D 的值通常被称为分量的“解释方差”;它们代表了每个变量的重要性。
多维标度(映射感知观察的流形)
多维缩放算法背后的直觉是通过计算对象之间的测地线(局部最短)距离并将这些路径映射到缩减的特征空间中的直线来保持对象的内在度量结构。
MDS 的主要组成部分是 isomap 过程,它以一种非常简单的方式进行表述:
Isomap 假设观察空间中的点之间的距离仅是低维空间中局部距离的精确度量,并且必须对流形上的路径进行积分以获得全局距离。这个非线性函数的两个主要特性是:
- 本质上相似的观察值应该映射到特征空间中的附*点;
- 流形中的测地线路径应该映射到所获得的特征空间中的直线上。
isomap 程序由 3 个关键步骤组成:
- 流形的离散表示。我们从数据集中随机选择 r 个点作为拓扑保持网络的节点,并且仅当整个数据集中存在至少一个观察值,并且其两个最*的节点是这些前面提到的节点时,才连接这些节点。创建的图形 G 清楚地考虑了流形的拓扑结构;
- 流形距离度量。我们应该给图 G 中的每个链接分配一个权重,这个权重等于数据点之间的欧几里德距离:
路径 G 的长度等于沿着该路径的链接权重的总和。下一步,我们将从欧几里德距离转移到测地线距离,公式如下:
之后,对于每个节点 k,我们将测地线距离设置为:
使用动态编程算法进行计算;
3.等距欧氏嵌入。有序多维标度(“非度量 MDS”)用于找到对应于高维观察值的用 Y 表示的 k 维特征向量的配置,使得图形距离尽可能地保持不变。序数 MDS 对数据集中的噪声和异常值也不太敏感:
我们正在最小化关于欧几里德图距离的成本函数;带有帽子符号的图距离表示应用了一些单调变换的距离。总的来说,多维标度的主要思想是通过将测地线距离变成低维空间中的直线来尽可能地保持和简化高维空间中的现有距离,并且仍然获得结果流形中的数据点的正确位置,这些数据点彼此关联良好。
相同的数据集被投影到 2 维中:很明显,现在聚类更密集,数据的趋势清晰可见,这可以解释为线性回归线。
局部线性嵌入(通过局部线性嵌入进行非线性降维
先前描述的降维技术基于处理观测值之间的距离,并在低维空间中适当地保存它们;局部线性嵌入思想是基于这样一个事实,即流形的局部线性片上的每个数据点及其邻域都位于其上或与之接*。这些面片以线性系数为特征,这些系数根据相邻数据点重建每个数据点。
重建误差通过以下方式测量:
重建有索引j;我们最小化的成本函数有两个主要约束:首先,我们只从它的邻居重建每个数据点。其次,我们的权重矩阵的行总和为 1。我们需要这些约束来使权重获得必要的对称性。通过最小化最小二乘问题找到解决该函数的最佳权重;事实上,最佳权重是第 j 个数据点对第 i 次重建的贡献。
LLE 背后的核心概念是,在高维空间中重建数据点的相同权重也应该在低维空间中重建其嵌入的流形坐标。重建权重反映了数据固有的几何属性,这些属性对于诸如平移、旋转、重新缩放等变换是不变的。
全局内部坐标用高维邻域保持映射表示,代价函数如下:
这里,我们固定了之前计算的权重,并优化了嵌入坐标 Y 的成本函数。
正如我们在图上看到的,数据点之间的距离和相对观察位置没有很好地保留,但样本之间的邻域显示得很清楚。
SNE 和 t-SNE ( 使用 t-SNE 可视化数据)
随机邻居嵌入和 t 分布随机邻居嵌入是本文描述的最后两种方法,但只要它们使用表示相似性的概率信息作为模型的核心,它们在降维任务方面仍然非常重要。SNE 和 t-SNE 背后的主要思想是利用观察相似性将高维数据点转换为低维数据点,并很好地捕捉高维数据的大部分局部结构。
随机邻居嵌入
如前所述,在将观测值嵌入低维空间时,保持邻居身份是我们试图解决的主要任务。
对于每个对象 i 和每个潜在邻居 j 来说,如果邻居在以 x 为中心的高斯分布下与其概率密度成比例地被挑选,则 i 将挑选 j 作为邻居的不对称概率被定义为:
两个高维点之间的欧几里德距离(相似性)通过使用概率分布方差以如下方式来表示:
适马平方是以索引为 i 的数据点 x 为中心的高斯方差。
相似性具有以下属性:
- k 是有效邻居数(困惑数);
- sigma 平方的值使得邻居分布的熵等于 log k 。
点 i 选取点 j 在低维空间中的诱导困惑度不使用概率密度定义为:
只要我们想尽可能好地模拟这两种分布,我们正在构建的成本函数是使用梯度下降法通过所有数据点上的 Kullback-Leibler 散度之和得出的:
因为 Kullback-Leibler 散度是不对称的,所以低维映射中成对距离中不同类型的误差的权重不同。先前定义的成本函数的最小化导致将观察值嵌入到流形中,该流形具有在低维空间中计算的条件概率,该条件概率等于或几乎等于在高维空间中计算的条件概率,使得两个概率分布之间的失配最小化。
t 分布随机邻居嵌入 t 分布随机邻居嵌入与简单随机邻居嵌入的唯一区别在于,我们使用对称概率而不是不对称条件概率来计算高维空间中的相似性。此外,在低维空间中使用学生 t 分布来缓解 SNE 的拥挤问题和优化问题。
当两个高维数据点之间的距离很大时,对称 SNE 有助于计算成对的相似性:
拥挤问题被公式化为“可用于容纳中等距离的数据点的二维图的区域与可用于容纳附*的数据点的区域相比不够大”的事实。结果,数据点之间的距离没有被充分保留,并且由于到低维空间的投影的高方差,自然数据集聚类没有被正确形成。为了解决拥挤问题,我们使用 Student t 分布,它使得对于相距较远的地图点,地图的联合概率表示对于地图比例的变化(几乎)不变:
在执行 t-SNE 后,低维空间中的球形数据表示是相当常见的结果:
结论
本文没有提到所描述的方法的优缺点、它们适用的方法、最常见的使用案例等。只要这个主题高度依赖于输入数据、其中存在的噪声、维数等。实际上,由于与单词嵌入模型相同的原因,降维技术不能被充分地测量:它们的有效性高度依赖于随后应用的算法和传递到方法中的数据类型。
表示的可视化提供了对降维技术保存的信息类型的很好的洞察,例如,它是否很好地反映了邻居关系、趋势或聚类位置。
为什么以及如何使用大数据的熊猫
原文:https://towardsdatascience.com/why-and-how-to-use-pandas-with-large-data-9594dda2ea4c?source=collection_archive---------0-----------------------
但不是大数据…
Pandas 已经成为在 Python 编程语言中用于数据争论和分析的最受欢迎和喜爱的数据科学工具之一。
在现实世界中,数据不可避免地是杂乱的。在清理、转换、操作和分析数据方面,熊猫真的是游戏规则的改变者。简单来说,熊猫帮助收拾残局。
我的熊猫故事
刚开始学 Python 的时候,很自然的就接触到了 NumPy (数值 Python)。它是使用 Python 进行科学计算的基础包,为 Python 中的 n 数组和矩阵运算提供了丰富的有用特性。
此外,该库提供了对 NumPy 数组类型的数学运算的向量化,这极大地优化了计算,提高了性能和执行速度。
NumPy 很酷。
但是仍然存在对更高层次的数据分析工具的潜在需求。这就是熊猫来拯救我的地方。
从根本上说,Pandas 的功能是建立在 NumPy 之上的,两个库都属于 SciPy 栈。这意味着 Pandas 在很大程度上依赖 NumPy 数组来实现它的操作和计算对象——但是使用起来更方便。
实际上,NumPy 和 Pandas 仍然可以互换使用。高水平的功能和它的方便使用决定了我对熊猫的偏爱。
为什么用熊猫大数据——而不是大数据?
大数据和大数据有着鲜明的区别。随着围绕大数据的炒作,我们很容易把一切都当成“大数据”而只是随波逐流。
丹·艾瑞里教授的一个著名笑话:
(Source)
“大”和“大”这两个词本身是“相对的”,以我的拙见,大数据是指小于 100GB 的数据集。
Pandas 处理小数据(通常从 100MB 到 1GB)非常有效,性能很少成为问题。
然而,如果你在数据科学或大数据领域,当你处理大型数据集时,你迟早会遇到使用 Pandas 时的一个常见问题——低性能和长运行时间最终导致内存使用不足。
事实上,由于其算法和本地内存限制,Pandas 在大数据方面有自己的局限性。因此,大数据通常存储在计算集群中,以获得更高的可扩展性和容错能力。并且经常可以通过大数据生态系统( AWS EC2 、 Hadoop 等)进行访问。)使用火花和许多其他工具。
最后,在本地机器上使用 Pandas 处理大量数据的方法之一(有一定的内存限制)是减少数据的内存使用。
数据大的熊猫怎么用?
(Source)
那么问题来了:如何使用熊猫减少数据的内存占用?
以下解释将基于我对一个匿名大型数据集(40–50gb)的体验,该数据集要求我减少内存使用以适应本地内存进行分析(甚至在将数据集读取到数据帧之前)。
1.以区块大小读取 CSV 文件数据
老实说,当我遇到一个错误,我不能从 CSV 文件中读取数据时,我很困惑,只意识到我的本地机器的内存对于 16GB 的 RAM 的数据来说太小了。
好消息来了,熊猫的美:我意识到 pandas.read_csv 有一个参数叫 chunksize !
该参数实际上是指为了适应本地内存,在任何时候都要读入数据帧的行数。由于数据包含 7000 多万行,所以每次将大数据集分成许多小块时,我都将 chunksize 指定为 100 万行。
Read CSV file data in chunksize
上面的操作产生了用于迭代的 TextFileReader 对象。严格来说, df_chunk 不是数据帧,而是下一步进一步操作的对象。
一旦我准备好了对象,基本的工作流程就是对每个数据块执行操作,最后将它们连接起来形成一个数据帧(如下所示)。通过迭代每个块,在将每个块附加到一个列表之前,我使用函数 chunk_preprocessing 执行数据过滤/预处理。最后,我将这个列表连接成一个最终的数据帧,以适合本地内存。
Workflow to perform operation on each chunk
2.过滤掉不重要的列以节省内存
太好了。在这个阶段,我已经有了一个数据框架来做所有需要的分析。
为了节省更多的时间用于数据操作和计算,我进一步过滤掉了一些不重要的列,以节省更多的内存。
Filter out unimportant columns
3.更改列的数据类型
将 pandas 列数据转换成不同类型的最简单方法是使用astype().
我可以说,在 Pandas 中更改数据类型对节省内存非常有帮助,特别是如果您有大量数据要进行密集的分析或计算(例如,将数据输入到您的机器学*模型中进行训练)。
通过减少存储数据所需的位数,我将数据占用的总内存减少了 50%!
试试看。我相信您也会发现这很有用!让我知道进展如何。😊
Change data types to save memory
最后的想法
(Source)
这就是了。感谢您的阅读。
我希望分享我使用 Pandas 处理大数据的经验可以帮助您探索 Pandas 中的另一个有用特性,通过减少内存使用并最终提高计算效率来处理大数据。
通常情况下,熊猫拥有我们进行数据辩论和分析所需的的大部分特征。我强烈建议你去看看,因为下次它们会派上用场。
此外,如果你真的想学*如何用 Python 进行数据分析,那么这本书就是为你准备的—Python for Data Analysis。该书提供了使用 Pandas 在 Python 中操作、处理、清理和处理数据集的完整说明,为在分析中有效使用 Pandas 提供了全面的分步指南。
希望这有所帮助!
一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。在那之前,下一篇文章再见!😄
关于作者
Admond Lee 目前是东南亚排名第一的商业银行 API 平台Staq—的联合创始人/首席技术官。
想要获得免费的每周数据科学和创业见解吗?
加入 Admond 的电子邮件简讯——Hustle Hub,每周他都会在那里分享可行的数据科学职业技巧、错误&以及从创建他的初创公司 Staq 中学到的东西。
你可以在 LinkedIn 、 Medium 、 Twitter 、脸书上和他联系。
[## 阿德蒙德·李
让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学*,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。
www.admondlee.com](https://www.admondlee.com/)
机器学*的目的和内容是什么?
原文:https://towardsdatascience.com/why-and-what-of-machine-learning-c0eda6ebe5b0?source=collection_archive---------12-----------------------
“three person pointing the silver laptop computer” by John Schnobrich on Unsplash
随着机器变得越来越智能,我们周围的世界正在快速变化。机器从我们多年来收集的数据和我们每天产生的数据中学*。机器学*并不是一个新概念,实际上是亚瑟·塞缪尔在 1959 年创造的。今天,我们看到几乎每个人都在追求采用机器学*的方式。这主要是因为,今天,我们有必要的资源,可以用来得出有意义的结论的大量数据,以及从数据中学*和做出预测的处理能力。
机器学*不仅仅是一个时髦词,而是一个全新的知识维度。谁能想到机器可以获得无人知晓的洞察力。你在亚马逊、Flipkart 等热门电子商务网站上获得的推荐。正在使用机器学*来推荐你可能会购买的商品。像谷歌助理、Siri 和 Alexa 这样的数字助理都在使用机器学*向你展示你可能会有的问题的无限组合的答案。特斯拉已经开发出自动电动汽车,它具有基于机器学*的自动驾驶仪,可以在没有人类干预的情况下在道路上行驶。
随着机器学*被认为是几乎所有领域的重要突破,理解它到底是什么变得很重要。但是首先,让我们理解为什么这样一个概念对任何一个有垃圾邮件和非垃圾邮件的例子的人都有用。
为什么是机器学*?
每当您通过 Gmail 或 Outlook 等电子邮件客户端访问您的电子邮件时,您一定会注意到有些电子邮件在您的收件箱中,而其他电子邮件则被移至垃圾邮件文件夹,而您没有明确告知客户端或电子邮件服务提供商某些电子邮件对您来说是垃圾邮件。这不是一个奇迹,而是一个机器学*应用。这些系统在大量以前被识别为垃圾邮件的电子邮件上进行训练。这种训练使他们能够在收到任何新邮件时对其进行区分和分类。
这个应用程序看起来很简单,但是想象一下如果每个用户每天都要做这样的分类会是什么情况;就是这么厉害。假设没有这样的系统,每天你的收件箱都塞满了不相关的邮件。你必须每天花 15-20 分钟整理相关的邮件,删除不相关的。每天重复同样的任务真的很乏味而且浪费时间。这时,一台机器可以介入,创造一个不同的世界。这会节省你更多的时间和精力。
同样的原则被复制到企业中,使用每天生成的大量数据来解决现实生活中的问题。事实上,每天我们都会产生大约 250 亿字节的数据。企业可以利用所有这些潜力巨大的数据,并从中提取有意义的信息。
定义
“person drawing black robot with stars on paper” by rawpixel on Unsplash
没有一个单一的定义可以完全解释什么是机器学*。所以,下面是一个解释其症结的定义。
机器学*可以定义为机器从数据中学*的能力,这种能力使得它们能够做出准确的预测(在一定程度上),而无需程序员实际为机器编程新的数据点。
让我们把这个定义分解一下,以便更好地理解它。它指出,给定一个数据集(大量数据通常被证明是更好的),我们可以使用一种算法来学*数据,并尝试识别其中的任何模式。例如,在垃圾邮件/火腿的例子中,算法将试图理解在被认为是垃圾邮件或火腿的电子邮件中遵循什么词或风格。一旦算法理解了这些模式,它就可以预测新的数据点(在这个例子中,新的电子邮件)是否可能是垃圾邮件或具有一定准确性的火腿。
机器学*是一个多学科领域,它包括计算机科学、统计学和数学的并列,这些学科一起使用数据来解决问题。有几种机器学*算法,如支持向量机、随机森林、K-Means 聚类算法和许多其他在全球范围内使用的算法。
机器学*的分类
机器学*分为三种不同的类型,即有监督的机器学*、无监督的机器学*和强化学*。
S 监督机器学*:当你有一个数据集,其中你知道可以影响你的预测以及输出的各种因素,我们使用监督机器学*。这里,对于我们放入算法的每个输入 X ,我们得到一个输出 y 。输入的真实输出值已经为我们所知。如果预测是错误的,就进行修正,改进我们的模型并提高其准确性。这个过程一直持续到可以从数据中检索出最大限度的信息。这些算法旨在尽可能精确地将输入映射到相应的输出。例子包括逻辑回归,朴素贝叶斯等。
“aerial photography of rural” by Breno Assis on Unsplash
预测房价: 假设我们有一个包含面积、位置、房间和销售价格等特征的房屋数据集。我们可以使用有监督的机器学*来训练一种算法,以找到特征中的模式以及它们与房价的关系。因此,每当我们给出一栋新房子的详细信息时,我们的算法就能很好地估计出它的售价。
U 无监督机器学*:有时我们会遇到这样的问题,我们有数据,但不知道输出会是什么样子。这些数据包含机器学*可以理解和揭示的隐藏信息,但由于缺乏正确的标签,监督学*无法应用。在这种情况下,无监督的机器学*可以证明是有帮助的。无监督学*将对数据进行分类,并根据数据中存在的相似性产生类别。常见的示例算法包括主成分分析(PCA)、K 均值聚类等。
“person holding remote pointing at TV” by freestocks.org on Unsplash
推荐系统: 假设我们有一个电影的数据集和几个用户。一旦用户开始看电影,他们的喜好就会被记录下来。即使数据集中先前没有类,现在也可以使用无监督的机器学*将用户分类到组(集群)中,其中给定组中的用户共享共同的电影兴趣。现在,考虑到用户 A 和用户 B 属于同一个组,如果用户 A 看了一部电影并且喜欢它,那么同样的电影也可以推荐给用户 B
Rein enforced Learning:在这类机器学*中,机器学*并试图适应给定环境中的理想行为。该算法了解环境,并采取可用的行动,采取导致奖励的行动。该算法使用基于奖励的系统来提高其性能。这种反复试验的方法有助于算法随着时间的推移逐渐改进,并自行训练。例子包括 Q 学*,蒙特卡罗等。
“person playing board game” by Damian Patkowski on Unsplash
游戏: 强化学*在训练能学会玩游戏的模型上真的很有用。AlphaGo Zero 是一个人工智能系统,它已经成功地从零开始玩围棋,与自己玩游戏,并作为老师给予奖励和惩罚。它使用强化学*,本身变得如此有经验,以至于它现在有可能战胜最好的人类围棋选手。
结论
机器学*是一个非常美好的概念,它使用数据解决现实生活中的问题。这只是一个时代的开始,在这个时代里,还有很多东西有待探索,谁知道我们的数据还能为我们提供更多的信息。
请随时分享您的想法并联系我。
为什么人们这么害怕 AI?
原文:https://towardsdatascience.com/why-are-people-so-scared-of-ai-956ca2fb2c7f?source=collection_archive---------4-----------------------
@kaaps
今天,围绕人工智能(AI)的辩论并不缺乏,它已经渗透到社会的几乎每一个媒体,使其成为社会中与政治、性、战争(恐怖主义)、健康和生态并列的主要讨论之一。但令人惊讶的是,这个新来者在相对处于婴儿期的时候却遭到如此多的反对。为什么人们如此烦恼——或者像一些末世论者所说的那样——如此害怕?!
我认为答案的一部分在于,作为一个物种,我们担心,如果我们把一些认知属性交给机器,我们相对于地球上其他动物的相对优势将会丧失。但是,仅仅因为我们更高的进化而变得越来越聪明,并不局限于解决问题。诸如生成计算、自我反思、思想的混杂组合、抽象思维和精神符号(通常被称为思维的组成部分)等主题都属于人类,并且是我们被赋予创造力的原因之一。因此,卸下大量完全没有价值的大脑活动,专注于只有人类思维才能解决的事情,是促进公共利益的一个很好的动力。
这种“思维”(智能)形式也是人类与机器不可估量的不同之处。这就引出了下一个问题,什么是“智力”。
人工智能领域只研究了思维光谱的最高端,尽管它渴望尝试“逆向工程”人类智能,并且它显然抓住了大众的想象力,但手头的问题是我们尚未对人类智能有深刻而彻底的理解。
如果我们不知道人类智能是由什么组成的,为什么我们还要谈论人工智能?
所有这些噪音都来自忧虑,我们是焦虑的物种。人工智能的不确定性首先与时间尺度有关,而我们人类在一个短期最重要的环境中进化。此外,今天公众舆论中明显的偏见(反对人工智能)显然有利于可能产生适度短期利益(可能有利于就业的技术限制)的战略,但同时几乎没有对更有效的第二代方法(设计一个每周工作时间或一生工作时间都很少的世界)做出预测,同时受益于人工智能在人类几乎每个领域都能提供的巨大增长。
所以现在,大众不知道的是,为谷歌助手、Siri、Spotify、使命召唤、亚马逊、 X.ai 、蒙娜、洛拉、卢卡、玛亚、未来达、米拉、每个像素和其他人将继续努力,让我们的生活变得更简单,以便我们可以继续生活如果你保持开放的心态和对变化的反应,你甚至会享受这只援助之手。
与此同时,似乎周围最聪明的人都认为当今最大的威胁之一是机器智能。他们可能是对的,但是还有其他类型的人类活动有着更值得担忧的记录。
为什么我们要让特朗普的推文影响我们的心情?
原文:https://towardsdatascience.com/why-are-we-letting-trumps-tweet-affect-our-mood-7f9baafae3a7?source=collection_archive---------27-----------------------
如果你倾向于在推特上关注特朗普,那么你对他推文的反应可能会受到他语气的影响。由两个截然不同的群体划分的总体意见通常遵循原始推文的基调。
序言
基于我之前对在推特上的社交影响力的分析,来自唐纳德·特朗普(@realDonaldTrump) 的推文,美国总统的参与度相对较高。
我想知道特朗普先生的原创推特在多大程度上影响了人们的反应情绪。
对数据的洞察力
首先,我使用 Tweepy 从 Twitter 获取数据。我设计了我的实验,用 Twitter 句柄@ realDonaldTrump获取最*的 200 条推文,并为特朗普的每条推文从其他人获取多达 100 条相关推文。
对检索到的每条推文使用 TextBlob 进行情感分析,以确定推文的极性。
初步观察
特朗普的推文极性和人们相应回应的平均值的绘图显示了重叠。然而,特朗普的推特极性传播更广。
这可能是由于人们的推文极性平均高于单个特朗普推文的极性。
所以我把特朗普推文的极性缩小到 70%。但是结果仍然是非结论性的。
下一个合乎逻辑的步骤是更深入地挖掘特朗普的每一条推文及其来自其他人的相应回应。
**
人们对积极极化的特朗普推文和消极极化的特朗普推文的响应分布似乎类似。尽管结果仍不确定,但我发现了一个有趣的模式。
与消极回应相比,积极极化的特朗普推特从其他人那里获得更多积极极化的回应。类似地,与积极极化的回应相比,消极极化的特朗普推文从其他人那里获得更多消极极化的回应。
推文时间线分析
我想确定这种新发现的人们在特朗普的推文情绪后的反应模式是反复出现的。
人们回应的平均极性的转变似乎是在特朗普推特的突然极性转换之后发生的。有时在几分钟内。
单个 tweet 集合的时间线图有很多尖峰,肉眼看起来大部分都很嘈杂。为了更好的可视化,我汇总了每天推特极性的总和。
结论
从上面的分析来看,人们对特朗普推文的回应在很大程度上遵循了原始推文的语气。
这一分析是基于最*几周获取特朗普的推特数据,并考虑到所用 API 的限制。TextBlob 不考虑被分析文本的讽刺,也不考虑 Twitter 对使用标准搜索 API 获取的记录数量的限制。
源代码:
*【https://github.com/ShreyasJothish/tweetsentimenttimeline *
参考资料:
* [## llSourcell/Twitter _ 情操 _ 挑战
Youtube 上@Sirajology 为学* Python for Data Science 举办的 Twitter 情绪分析挑战# 2…
github.com](https://github.com/llSourcell/twitter_sentiment_challenge/blob/master/demo.py) [## 使用 Twitter 流 API 和 Python // Adil Moujahid // Data 的文本挖掘介绍…
Adil Moujahid,数据分析等
adilmoujahid](http://adilmoujahid.com/posts/2014/07/twitter-analytics/)*
为什么自动化特征工程将改变你进行机器学*的方式
原文:https://towardsdatascience.com/why-automated-feature-engineering-will-change-the-way-you-do-machine-learning-5c15bf188b96?source=collection_archive---------1-----------------------
自动化特征工程将节省您的时间,构建更好的预测模型,创建有意义的特征,并防止数据泄漏
数据科学中很少有确定性——随着更好方法的开发,库、工具和算法不断变化。然而,一个不会消失的趋势是自动化水平的提高。
*年来,在自动化模型选择和超参数调整方面取得了进展,但机器学*管道中最重要的方面特征工程在很大程度上被忽视了。这个关键领域最有能力的入口是 Featuretools ,一个开源的 Python 库。在本文中,我们将使用这个库来了解自动化特征工程将如何更好地改变您进行机器学*的方式。
Featuretools is an open-source Python library for automated feature engineering.
自动化特征工程是一种相对较新的技术,但是,在使用它解决了许多使用真实世界数据集的数据科学问题之后,我确信它应该是任何机器学*工作流的一个标准部分。在这里,我们将通过 GitHub 上的 Jupyter 笔记本来看看这些项目中的两个项目的结果和结论。
每个项目都强调了自动化特征工程的一些好处:
- 贷款偿还预测:与手动特征工程相比,自动化特征工程可以将机器学*开发时间减少 10 倍,同时提供更好的建模性能。(笔记本)
- 零售支出预测:自动化特征工程通过内部处理时间序列过滤器来创建有意义的特征并防止数据泄漏,从而实现成功的模型部署。(笔记本)
请随意深入研究代码并试用 Featuretools!(完全披露:我在开发这个库的公司特性实验室工作。这些项目是用 Featuretools 的免费开源版本完成的。
特征工程:手动还是自动
特征工程是获取数据集并构建解释变量(特征)的过程,可用于为预测问题训练机器学*模型。通常,数据分布在多个表中,必须收集到一个表中,表中的行包含观察值,表中的列包含特征。
传统的特征工程方法是使用领域知识一次构建一个特征,这是一个乏味、耗时且容易出错的过程,称为手动特征工程。手动特征工程的代码是与问题相关的和必须为每个新数据集重写。
自动化特征工程通过从一组相关数据表中自动提取有用且有意义的特征来改进这一标准工作流程,其框架可应用于任何问题。它不仅减少了特征工程所花费的时间,还创建了可解释的特征,并通过过滤与时间相关的数据来防止数据泄漏。
自动化特征工程比手动特征工程更高效且可重复,允许您更快地构建更好的预测模型。
贷款偿还:更快地构建更好的模型
数据科学家在处理家庭信用贷款问题时面临的主要困难是数据的大小和分布(这是目前正在 Kaggle 上进行的一项机器学*竞赛,目的是预测客户是否会偿还贷款)。看一下完整的数据集,你会发现有5800 万行数据分布在七个表中。机器学*需要单个表来进行训练,因此特征工程意味着将每个客户端的所有信息整合在一个表中。
Feature engineering requires capturing all information from a set of related tables into one table.
我第一次尝试使用传统的手工特征工程:我总共花了 10 个小时手工创建一组特征。首先我阅读其他数据科学家的作品,探索数据,研究问题领域,以获取必要的领域知识。然后我把知识翻译成代码,一次构建一个特性。作为单个手动特性的一个例子,我找到了一个客户在以前贷款中的延期付款总数,这个操作需要使用 3 个不同的表。
最终手动设计的功能表现相当出色,比基准功能提高了 65%(相对于排行榜的最高分数),表明了适当功能设计的重要性。
然而,低效甚至不能用来描述这个过程。对于手工特征工程,我最终在每个特征上花费了超过 15 分钟,因为我使用了一次制作一个特征的传统方法。
The Manual Feature Engineering process.
除了乏味和耗时之外,手动特征工程还:
- 特定问题:我花了很多时间写的所有代码都不能应用于任何其他问题
- 易错:每一行代码都是犯错误的另一个机会
此外,最终手工设计的功能受到人类创造力和耐心的限制:我们能想到的功能只有这么多,我们能做的时间也只有这么多。
自动化特征工程的承诺是通过获取一组相关的表并使用可以应用于所有问题的代码自动构建数百个有用的特征来超越这些限制。
从手动到自动特征工程
正如在 Featuretools 中实现的那样,自动化特征工程甚至允许像我这样的领域新手从一组相关的数据表中创建数千个相关的特征。我们需要知道的只是我们的表的基本结构和它们之间的关系,我们在一个叫做实体集的单一数据结构中跟踪它们。一旦我们有了一个实体集,使用一种叫做深度特征合成 (DFS)的方法,我们能够在一个函数调用中构建数千个特征。
The Automated Feature Engineering process using Featuretools.
DFS 使用名为“原语”的函数来聚合和转换我们的数据。这些原语可以简单到取一列的平均值或最大值,也可以复杂到基于专业知识,因为 Featuretools 允许我们定义自己的自定义原语。
特征原语包括许多我们已经手工完成的操作,但是使用 Featuretools,我们可以在任何关系数据库中使用完全相同的语法,而不是重新编写代码来对不同的数据集应用这些操作。此外,当我们将原语相互堆叠以创建深层功能时,DFS 的威力就显现出来了。(关于 DFS 的更多信息,请看该技术发明者之一的博客文章。)
深度特征合成非常灵活,可以应用于任何数据科学问题,而且功能强大,可以通过创建深度特征来揭示数据中的洞察力。
我将省去设置所需的几行代码,但是 DFS 的操作只需要一行代码。在这里,我们使用数据集中的所有 7 个表为每个客户端创建了数千个特征(T0 是导入的特征工具库) :
# Deep feature synthesis
feature_matrix, features = ft.dfs(entityset=es,
target_entity='clients',
agg_primitives = agg_primitives,
trans_primitives = trans_primitives)
以下是我们从 Featuretools 自动获得的一些 1820 特性:
- 客户以前贷款支付的最大总金额。这是跨 3 个表使用一个
MAX
和一个SUM
原语创建的。 - 客户以前平均信用卡债务的百分比排名。这使用了跨越两个表的
PERCENTILE
和MEAN
原语。 - 客户在申请过程中是否提交了两份文件。这使用了一个
AND
转换原语和一个表。
这些特性中的每一个都是使用简单的聚合构建的,因此是人类可以理解的。Featuretools 创建了许多与我手动创建的功能相同的功能,但也有数以千计的功能是我从未想到过的——也没有时间去实现。并不是每一个特性都与问题相关,有些特性是高度相关的,尽管如此,拥有太多的特性比拥有太少的特性要好!
在进行了一些功能选择和模型优化后,这些功能在预测模型中的表现比手动功能稍好,总开发时间为 1 小时,比手动流程缩短了 10 倍。Featuretools 速度更快,因为它需要的领域知识更少,而且需要编写的代码行也更少。
我承认学* Featuretools 需要一点时间,但这是一项值得的投资。花一个小时左右学* Featuretools 后,你可以将它应用到任何机器学*问题上。
下面的图表总结了我对贷款偿还问题的经验:
Comparison between automated and manual feature engineering on time, number of features, and performance.
- 开发时间:考虑制作最终特征工程代码所需的一切: 10 小时手工对 1 小时自动化
- 该方法产生的特征数量: 30 个特征手动 vs 1820 个自动
- 相对于基线的改善是指使用基于以下功能训练的模型,与公共排行榜最高分数相比,基线上的百分比增益: 65%人工对 66%自动
我的观点是,自动化特征工程不会取代数据科学家,而是通过显著提高效率,将使她有更多时间花在机器学*管道的其他方面。
此外,我为第一个项目编写的 Featuretools 代码可以应用于任何数据集,而手动工程代码必须扔掉,并为下一个数据集完全重写!
零售支出:构建有意义的功能并防止数据泄露
对于第二个数据集,一个带有在线时间戳的客户交易记录(T10),预测问题是将客户分为两个部分,那些将在下个月花费超过 500 美元的人和那些不会的人。然而,不是对所有的标签使用一个月,而是每个客户是一个标签多次。我们可以用他们 5 月份的支出作为标签,然后是 6 月份,以此类推。
Each customer is used as a training example multiple times
多次使用每个客户作为观察结果给创建训练数据带来了困难:当为给定月份的客户制作特征时,我们不能使用来自未来月份的任何信息,即使我们可以访问这些数据。在部署中,我们永远不会有未来的数据,因此不能用它来训练模型。公司经常在这个问题上挣扎,经常部署一个在现实世界中比在开发中表现差得多的模型,因为它是使用无效数据训练的。
幸运的是,在 Featuretools 中,确保我们的数据在时序问题中是有效的。在深度特征合成功能中,我们传入一个如上图所示的数据帧,其中截止时间代表一个点,超过该点我们就不能使用任何标签数据,Featuretools 自动在构建特征时将时间考虑在内。
给定月份中客户的功能是使用筛选到该月之前的数据构建的。注意,创建我们的特性集的调用与解决贷款偿还问题的调用相同,只是增加了cutoff_time.
# Deep feature synthesis
feature_matrix, features = ft.dfs(entityset=es,
target_entity='customers',
agg_primitives = agg_primitives,
trans_primitives = trans_primitives,
cutoff_time = cutoff_times)
运行深度特性合成的结果是一个特性表,每个月的每个客户一个特性表。我们可以使用这些特征,用我们的标签训练一个模型,然后对任何一个月进行预测。此外,我们可以放心,我们的模型中的特征不使用未来的信息,这将导致不公平的优势,并产生误导性的训练分数。
通过自动化功能,我能够建立一个机器学*模型,在预测一个月的客户支出类别时,与 0.69 的知情基线(猜测与上个月的支出水平相同)相比,该模型实现了 0.90 的 ROC AUC。
除了提供令人印象深刻的预测性能之外,Featuretools 实现还给了我同样有价值的东西:可解释的特性。看看随机森林模型的 15 个最重要的特征:
15 most important Featuretools features from a random forest model.
功能的重要性告诉我们,客户下个月将花费多少的最重要的预测因素是他们之前已经花费了多少SUM(purchases.total)
,以及购买的次数SUM(purchases.quantity).
,这些是我们可以手工构建的功能,但是我们将不得不担心泄露数据,并创建一个在开发中比在部署中做得更好的模型。
如果创建有意义特性的工具已经存在,而不需要担心特性的有效性,那么为什么还要手工实现呢?此外,自动化特征在问题的上下文中是完全清楚的,并且可以告知我们现实世界的推理。
自动化特征工程识别了最重要的信号,实现了数据科学的主要目标:揭示隐藏在海量数据中的洞察力。
即使在手动特性工程上花费了比使用 Featuretools 多得多的时间,我也无法开发出一组性能接*的特性。下图显示了使用在两个数据集上训练的模型对一个月的未来客户销售进行分类的 ROC 曲线。向左上方的曲线表示更好的预测:
ROC curves comparing automated and manual feature engineering results. A curve to the left and top indicates better performance.
我甚至不完全确定手动特性是否是使用有效数据制作的,但是有了 Featuretools 实现,我就不必担心时间相关问题中的数据泄漏。也许无法手动设计一组有用的有效功能说明了我作为数据科学家的失败,但是如果有工具可以安全地为我们做这件事,为什么不使用它呢?
我们在日常生活中使用自动安全系统,Featuretools 中的自动化特征工程是在时序问题中构建有意义的机器学*特征的安全方法,同时提供卓越的预测性能。
结论
我从这些项目中走出来,确信自动化特征工程应该是机器学*工作流程中不可或缺的一部分。这项技术并不完美,但仍能显著提高效率。
主要结论是自动化特征工程:
- 将实施时间缩短了 10 倍
- 达到同级 或更好的造型表现
- 交付具有现实意义的可解释特性
- 防止可能导致模型无效的不正确数据使用
- 适应现有的工作流程和机器学*模型
“更聪明地工作,而不是更努力地工作”可能是老生常谈,但有时这种陈词滥调也有道理:如果有一种方法可以用更少的时间投入做同样的工作,那么显然这是一种值得学*的方法。
Featuretools 将永远免费使用和开源(欢迎投稿),有几个例子——这是我写的一篇文章——让你在 10 分钟内开始。作为一名数据科学家,你的工作是安全的,但是通过自动化特征工程,它可以变得简单得多。
如果构建有意义的高性能预测模型是您关心的事情,那么请联系我们的功能实验室。虽然这个项目是用开源的 Featuretools 完成的,但是商业产品为创建机器学*解决方案提供了额外的工具和支持。
为什么平均值经常是错误的
原文:https://towardsdatascience.com/why-averages-are-often-wrong-1ff08e409a5b?source=collection_archive---------6-----------------------
1906 年,美国作家塞缪尔·兰霍恩·克莱门斯(更为人熟知的名字是马克·吐温)向英国首相本杰明·迪斯雷利推广了他关于人类如何使用数字来量化情景的思想:“有三种谎言:谎言、可恶的谎言和统计”(吐温,2010)。有太多的理由说明为什么这通常是真的:统计技能不足,已知的偏见,未知的偏见,或者只是传统的智力懒惰。在我的学术和数据科学生涯中,我多次遇到基于“平均值”的分析或合理化,或者像我们数据极客喜欢更准确地说的那样,“平均值”。然而,事实上,平均值往往是错误的,而且不止一种方式。
平均值是指一组不同样本的测量值,通常是一群个体。平均值的主要目的是测量同一样本组或组群随时间的变化。正是在这种应用中,或者更确切地说是在误用中,通过将平均值用于不同的目的,出现了三种最常见的错误。
首先,在任何数据集中,存在异常值是很常见的。这些通常在图表中最容易看到,其中大多数数据点聚集在一个区域或一条线周围,然后一个或几个数据点偏离了“永远不要”区域。这些异常值扭曲了数据集的平均值,将它“拉”向自己的方向。这给人一种错误的印象,即数据点聚集在比它们真正聚集的位置高或低的点周围。在这些情况下,通常最好使用中位数而不是平均值来表示集中趋势测量值,因为它受异常值的影响较小。
第二,许多人倾向于认为“平均”是“典型的”这个假设在许多数据集中的问题是——当然是那些涉及人类的数据——有很多很多“典型”的例外人们甚至可以说没有“典型”这种东西。例如,一个经常被误用的统计数据是美国的平均离婚率,它经常被引用为“大约 50%”。如果研究一下这个问题,他们会发现平均离婚率因年龄、受教育程度、职业、种族、地理、宗教信仰等因素而有很大差异。因此,每个人都被这些因素不同地分类,导致许多不同的平均离婚率,这取决于哪些因素描述了那些被测量的人。
在美国劳工统计局发表的一项研究中,专业统计学家纵向跟踪了 7357 名随机选择的 1957 年至 1965 年出生的男性和女性,从 1979 年到 2010 年共 31 年(Aughinbaugh,2014)。虽然 31 年来这一群体的总体平均离婚率为 43.1%,但例如,拥有大学学位的人的离婚率仅为 29.6%。考虑到结婚年龄,平均离婚率差异更大。对于那些获得大学学位并在 22 岁前结婚的人来说,平均离婚率为 46.6%;然而,对于那些获得大学学位并在 35-40 岁之间结婚的人来说,平均离婚率仅为 13.4%。
在同一项研究中,这些差异可以通过不同的指标看到。虽然 88%获得大学学位的人在 46 岁前结婚,但只有 20.9%的人曾经离婚。类似地,对于 21%离婚并选择再婚的人来说,其中 85%的人保持再婚,这使得受过大学教育的人的平均二婚离婚率仅为 15% (Aughinbaugh,2014)。因此,对于那些拥有大学学位的人来说,在 31 年的研究中,96.9%的人最终拥有了可持续的婚姻。应用平均值的第二种错误的寓意是,人们只能比较相似和同等分类的组的平均值,否则,提供错误的信息。
平均数经常被错误使用的第三种方式是将它们应用于个别情况。将一组数据点的平均值应用于单个点并假设它是正确的,这是统计学上的错误。即使假设数据是正态分布的(“钟形曲线”),任何一个数据点与平均值相同的概率是 50% —与随机猜测相同。根据该数据点在数据点的归一化分布(“钟形曲线”)中的位置,当数据分布接*曲线尾部时,该组平均值准确描述或预测任何一个数据点的行为或结果的概率下降。
总之,均值有助于衡量一组受试者或数据点如何随时间变化。当用于比较不同的群体、将群体行为应用于个体场景时,或者当数据中有大量异常值时,平均值会产生误导。这些问题的根源似乎是过度简化和合理化——人们愿意相信的东西。我们从统计学及其更现代的兄弟机器学*中知道,结果是基于因果关联的,这些因果关联是复杂的,因为它们是多重的和动态的,并且它们在历史上比预测性地更容易测量。
那么,关于迪斯雷利首相早熟的观察,即统计数字是谎言的真相,与其说是在统计数字提供给我们的答案中找到的,不如说是因为我们常常不知道问题是什么,或者更糟的是,我们确实知道,而且是错误的问题。套用阿尔伯特·爱因斯坦(Albert Einstein)的话,当他被问及如果他有 48 小时来拯救世界,他会怎么做时,花 90%的时间分析问题,此时,答案变得不言自明。
引用的作品
aughinbaugh(2014 年)。按性别、种族和教育程度分类的模式。月度劳动评论,【https://doi.org/10.21916/mlr.2013.32.
m .吐温、H. E .史密斯和 b .格里芬(2010 年)。马克·吐温自传。伯克利:加州大学出版社。
为什么大企业应该主动建立隐私:安·卡沃金博士的观点
原文:https://towardsdatascience.com/why-big-business-should-proactively-build-for-privacy-perspectives-from-dr-ann-cavoukian-9b1d1a92c868?source=collection_archive---------11-----------------------
本文探讨了设计隐私(PbD)的兴起,从基本框架,到它在 GDPR 中的应用,再到它在商业实践和基础设施中的应用,尤其是在人工智能出现之后。
我们有幸与前三任安大略省隐私专员、现任加拿大多伦多瑞尔森大学卓越隐私设计中心杰出常驻专家 Ann Cavoukian 博士坐在一起,讨论这一将颠覆当前商业实践的巨大转变。我们还寻求人工智能初创企业和企业高管的回应,以解决设计隐私目前的障碍和未来的商业影响。本文包括 Scott Bennet 的贡献,他是一位研究隐私和 GDPR 对新兴技术和当前商业实践的影响的同事。
Dr. Ann Cavoukian, Ph.D
我称自己为反营销者,尤其是这些天。我的背景主要来自数据库营销和数据的语境化,以做出更明智的决定,有效地向人们出售更多的东西。我看到的数据,无论是在银行、忠诚度计划、广告和社交平台——用户交易、数字行为、互动、对话和个人资料——都被缝合在一起,以创建关于个人和群体、他们的倾向、意图及其对业务的潜在风险的叙述。
虽然以我们这样的方式分析这些信息是一种既定的做法,但好处主要在企业,而对我们的客户不利。我们对人们的描述是基于他们创造的数据,基于我们自己的假设,这些假设反过来影响了分析,并最终创造了管理数据和决策的规则。这些规则中的一些在不知不觉中受到了来自经验和因素的非故意偏见的影响,这些经验和因素使特定集群或人群的主张永久化。
虽然多年来我没有质疑过我们用来理解和定义受众的方法,但很明显,商业仍然在很大程度上不受约束,自由使用这些信息,几乎没有责任和法律后果。
随着数据变得越来越重要,随着人工智能以更快的速度分析和表达意义,这些偏见永久化的危险变得更加严重,如果措施不到位并无情地执行,将造成更大的社会分裂。
最*,我遇到了我的创造者。就当是对我作为营销人员操纵数据多年的赎罪吧。我们有幸与一位我仰慕多年的人谈论隐私。在我看来,Ann Cavoukian 博士将推动整个行业的讨论,让企业站起来倾听。
还记得加拿大隐私专员对脸书采取的措施吗?
Ann Cavoukian 在传播隐私意识方面发挥了重要作用,这使她在 2008 年站在了世界舞台的中心,与脸书展开了直接的对抗。当时,联邦隐私专员声称 22 种做法违反了加拿大个人信息保护和电子文件法案(PIPEDA)。这最终导致 FTC 与脸书达成协议,要求增加对用户的透明度,要求在“实施覆盖其隐私设置的更改”之前获得用户的明确同意
Ann Cavoukian 在技术和商业领域是一个家喻户晓的名字。作为加拿大安大略省的三任隐私专员,她已经放弃了几十年的隐私讨论。如今,随着 2018 年 5 月 25 日生效的欧盟通用数据保护和法规(GDPR)包括 Cavoukian 长期倡导的创作“设计隐私”(PbD),这一讨论已经达到了白热化。这将大大提高门槛,任何与欧盟做生意的公司或平台都需要遵守这些标准。在收集、存储和处理个人消费者信息时,GDPR 的核心是这些指导原则:
- 合法、公平和透明
- 目的限制
- 数据最小化
- 准确(性)
- 存储限制
- 完整性和保密性(安全性)
- 有责任
Privacy by Design 的前提是以公平和道德的方式在新产品或服务的每个阶段主动嵌入隐私。Cavoukian 认为,通过实施 PbD,公司实际上已经走上了遵守 GDPR 的道路。
是什么让这个时机成熟的隐私设计?
在 90 年代,网络呈指数级增长。商业、在线应用和平台正在引入一个新时代,这将极大地改变商业和社会。当时,Ann Cavoukian 是安大略省隐私专员的第一个任期。她目睹了这种现象,并担心它会急剧增长,在一个无处不在的计算、日益增加的在线连接和大规模社交媒体的时代,她推测隐私需要作为一种预防模式来发展,而不是简单地“以后请求原谅”
想象一下,你去看医生,他告诉你,你有一些癌症发展的迹象,并说,“我们会看看它是否恶化,如果恶化,我们会送你去做一些化疗”。多么不可思议的提议!我希望同样不可思议的是,你会让隐私损害发展,只是等待违反,而不是防止他们发生。这就是 PbD 的起源。
2010 年,在欧洲数据保护机构和隐私专员国际会议上,Cavoukian 提出了一项决议,即 PbD 应该补充监管合规性,以减轻潜在的危害。一致通过。原因?
每个人都看到这只是识别隐私危害的冰山一角,我们无法解决所有逃避我们检测的数据泄露和隐私危害,因为犯罪者的复杂性意味着大多数泄露仍然基本上不为人知、不受挑战和不受监管。因此,PbD 成为当前隐私法规的补充,作为确保未来隐私的唯一方法,它不再是可持续的。
如今,数据安全问题已经变得与 airplay 同等重要,如果不是更多的话。Cavoukian 认为:
当恐怖事件增多,比如巴黎的 【圣贝纳迪诺】【查理周刊】 袭击,以及曼彻斯特的袭击,钟摆又转回到:忘掉隐私——我们需要安全。当然,我们需要安全——但不排除隐私!
我总是说隐私就是控制——与使用你自己的数据有关的个人控制。这与保密无关。当人们说‘好吧,如果你没什么好隐瞒的,那有什么问题?’时,我快疯了。问题是这不是自由的意义所在。自由意味着,作为一名守法公民,你可以决定你想披露哪些数据,向谁披露——向政府、向公司、向雇主。
皮尤研究中心在斯诺登事件后开展了一项互联网研究,以了解消费者对个人隐私的看法。引用的主要发现:
人们普遍担心政府和企业的监控:
91%的成年人认为消费者已经失去了对其个人信息的控制;80%的社交网络用户担心第三方访问他们的数据;80%的成年人认为美国人应该关注政府监控。
背景是关键:
虽然有些人知道他们是在用自己的信息换取对价值的期望,但他们应该充分了解这种价值是如何从他们的数据中提取出来的。Cavoukian 警告说:
隐私不是宗教。如果你想泄露你的信息,请便,只要你决定这么做。背景是关键。对我来说敏感的东西对你来说可能毫无意义,反之亦然……在社交聚会上,连我的医生都不会承认自己是我的医生!他们就是这么保护我的隐私的。这真是太棒了!他们竭尽全力保护你的个人健康信息。
销售隐私需求的重要性包括持续的教育。除非人们个人受到影响,否则许多人不会把这两者联系起来。普通人知道物联网设备接收他们对配偶或子女说的“甜言蜜语”的含义吗?当他们意识到这一点时,他们通常会强烈反对。
背景凸显了选择的重要性。这不再是一个要么全有要么全无的游戏,包含在公司的条款和条件中,只需点击一下,“接受”就会自动给予完全的许可。那些日子已经过去了。
虽然有些人可能会反对出于保险目的进行分析和语境化,但他们可能会允许以匿名方式将他们的个人健康史纳入研究,以了解他们特定地区的癌症流行情况。
语境是选择的问题;选择的自由对维护我们的自由至关重要。
隐私不等于秘密
卡沃金强调,隐私并不是要隐藏什么。每个人都有对自己非常敏感的个人信息领域,他们可能希望也可能不希望公开这些信息。
你必须有选择。你必须是做决定的人。 这就是个人控制问题如此重要的原因。
我从 Ann Cavoukian 最*的演讲中摘录了这张幻灯片:
Privacy by Design by Dr. Ann Cavoukian
中国社会信用体系的建立是为了增加透明度,提高公民的可信度。这是我们不想要的反面乌托邦。中国是一个明显的监视社会,与自由社会的价值观相矛盾。Cavoukian 阐明了隐私是我们自由的基础这一概念。如果你重视自由,你就重视隐私。
看看德国。德国是世界上领先的隐私和数据保护国家,这不是偶然的。他们不得不忍受第三帝国的虐待,忍受他们的隐私和自由的完全丧失,这绝非偶然。当这一切结束时,他们说,“我们再也不会允许国家剥夺我们的隐私——我们的自由!”他们确实遵守了这一点。
在斯诺登事件后,我写了这样一段话:美国国家安全局,隐私和公然意识到:你在网上做的任何事情都不是隐私并引用了 Writynga 在 2012 年回应扎克伯格关于隐私不再是社会规范的观点时写的一段话:
我们喜欢说我们是伴随着互联网长大的,因此我们认为互联网是完全成熟的。但事实并非如此。没有隐私的亲密是什么?什么是没有隐私的民主?……科技让人变傻。它会让你看不到你的潜在价值是什么,需要什么。我们真的愿意放弃我们努力争取的宪法和公民自由吗?人们为此而流血,而不是生活在一个监视的社会里。我们看着史塔西说,‘那不是我们。
人民的意愿要求更大的透明度。
但是我们不想要一个让人感觉我们生活在警察国家的监视状态。在确保国家安全和遏制我们的公民自由之间必须有一个平衡。
人们将随时拥有完全的透明度…完全的控制权
自 2010 年通过隐私设计(PbD)作为补充隐私法规的国际标准以来,PbD 已被翻译成 40 种语言。该方法已被修改,以包括这样一个前提,即可以努力确保个人隐私,同时在正和范式内发展消费者信任并增加企业的收入机会。Cavoukian 相信这是商业发展的可行之路:
我们可以拥有隐私,满足商业利益、安全和公共安全……这不是一个非此即彼的命题。我认为这是最好的方式,以正和、双赢的方式进行,从而使各方都受益。
隐私设计的基本原则包括:
- 主动而非被动:预防性而非补救性
- 隐私作为默认设置
- 设计中嵌入隐私
- 完整的功能:正和,而不是零和
- 端到端安全性:全生命周期保护
- 可见性和透明度:保持开放
- 尊重用户隐私:以用户为中心
Cavoukian 认为,原则 2(默认隐私)至关重要,也是所有基本原则中最难的一条,因为它需要最大的投资和努力:明确要求改变数据的收集、使用和披露方式,并将导致数据政策和流程的改变,包括新的以用户为中心的隐私控制。
第 21 条还规定个人在任何时候都有“反对”处理其个人信息的“权利”。这包括在直接营销和档案中使用:
控制方将不再处理个人数据,除非控制方证明其处理数据有令人信服的合法理由,可以超越数据主体的利益、权利和自由
业务必须更明确,走得更远,超越传统的披露和服务条款。目的说明和使用限制要求组织明确说明它需要的信息、目的是什么,并且必须获得专门针对该目的且仅针对该目的的同意。稍后,如果发生二次使用,组织将再次要求用户同意。如果公开是透明度的关键,那么企业将需要找到一种方法来做到这一点,同时减轻同意疲劳。
第 17 条提出了一个更强的用户权利,它掩盖了当前的商业惯例:删除的权利(“被遗忘的权利”)
数据主体应有权在无不当延迟的情况下从控制者处获得删除与其相关的个人数据的权利,控制者有义务在无不当延迟的情况下删除个人数据。
虽然该法规将有例外,如将数据主体确定为实体的数据:通过健康记录和银行信息,行为、交易、未来分析和背景模型是“被遗忘权”的公平游戏。GDPR 的出现让企业看到了潜在的影响,对于那些没有明确选择加入的客户,公司的客户记录量平均下降了 20%。
这是真正以用户为中心的系统。毫无疑问,隐私设计将挑战当前的实践,颠覆当前的基础设施。
这个隐私 UI 模拟(IBM:Journey to Compliance)展示了潜在的用户控制将如何实时工作,以及用户可以根据不同的上下文授予同意的程度。这种级别的用户访问将需要一个数据存储库来清除用户信息,但如果用户决定恢复访问,必须灵活地将数据重新部署到系统中。
IBM: Journey Towards Compliance
隐私设计能为商业创造一个正和的存在吗?
如果你在一年前问我,我会说商业采用设计隐私是不现实的,更不用说接受了。它将颠覆流程、结构和政策。然而,在 GDPR 的职权范围内,这是不可避免的。
今天,我们请 Ann Cavoukian 考虑一下商业惯例。继 GDPR 事件之后,谷歌和脸书都收到了高达 93 亿美元的巨额罚款。由于最*的剑桥分析数据泄露,脸书正在投资数百万在工具和资源上,以尽量减少未来的事件发生。最* Q2 股票暴跌让市场大吃一惊,但对于扎克伯格来说,他明确表示他们将在几个季度内遭受性能打击,以便为用户改善平台……而不是为股东。虽然它们是公司应该如何行事的灯塔,但这种明确的“以后再请求原谅”模式否定了这种策略完全是利他主义的任何表象。
脸书隐私政策经理 Emily Sharpe 认为,在准备 GDPR 时,他们特别关注第 29 条工作组的透明度指南:
在过去的 18 个月里,我们已经做好了准备,以确保满足 GDPR 的要求。我们已经使我们的政策更加清晰,我们的隐私设置更容易找到,并为人们提供了更好的工具来访问、下载和删除他们的信息。在 GDPR 之前,我们要求人们回顾用通俗易懂的语言写下的关键隐私信息,并对三个重要话题做出选择。我们的方法符合法律,遵循隐私和设计专家的建议,旨在帮助人们理解技术的工作方式和他们的选择。
Cavoukian 指出,IBM 与 Ponemon Institute 进行的一项研究让人们意识到了数据泄露的成本:该研究报告称,数据泄露的全球平均成本比上一年上升了 6.4%,达到每起事件 386 万美元。就每张唱片而言,每张唱片丢失的平均成本上升了 4.8%,达到 148 美元。正如 Cavoukian 指出的,如果你保持个人身份信息(PII)静止,这些成本将继续上升。
PbD 解决方案需要完整的端到端解决方案,包括隐私和安全性:
- 信息技术系统;
- 负责任的商业行为;和
- 网络化基础设施。
你如何应对如今成功利用数据赚钱的广告客户?
对于在这个、5600 亿美元的行业中打拼的广告主和发布平台,你有什么话要说?我们不能阻止进步。数据越多,有意愿的买家从中提取意义的需求就越多。另一方面,由于脸书事件的影响,一些广告商因为可疑的做法或内容而被列入该平台广告的灰色或黑色名单。平台的变化也极大地限制了当前广告客户的广告触达机会。现在,这种多米诺骨牌效应与 GDPR 要求获得明确同意并提高数据使用透明度的命令相结合。安·卡沃金说过:
数据的价值是巨大的。很抱歉,广告公司不能再认为他们可以对人们的数据为所欲为了。我同情他们。我真的爱你。他们的商业模式将发生巨大变化。这很难接受,所以我真的为他们感到难过。但我的建议是:这种商业模式正在消亡,所以你必须找到一种方法来转变这种模式,让你的客户参与进来,让他们参与到一种协商一致的模式中,让客户也能受益。背景是关键。让个人选择控制他们的信息,并获得他们的同意来交换他们对你有价值的东西。
玛丽·米克尔的“隐私悖论”指出了消费者对更快、更简单、更方便和更实惠的产品和服务的需求日益增长。这需要能够利用个人信息的系统来为消费者实现这一点。增加定制是一种期望,但随之而来的是商业风险的增加。根据 Cavoukian 的说法,只要当前的业务做法持续下去,他们的业务就很容易受到不断的数据泄露和网络攻击的影响,正如我们所目睹的那样。Equifax 和 Target 就是两个例子。
与数据主体的沟通需要双赢(正和)。企业能否提供必要的价值,同时尊重个人的选择?当人工智能变得更加普遍时,这将变得更加具有挑战性,因为流数据将需要更多实时接口和应用程序,以允许跨各种上下文和垂直用途访问和单独配置数据类型。
我邀请了一些来自各种数据初创企业和成熟企业的高管,他们在从广告到社交技术再到网络平台的商业和消费者体验方面有着丰富的经验,他们对隐私辩论发表了看法:
Josh Sutton, Agorai,的首席执行官,也是 Publicis.Sapient 的前数据和人工智能全球主管。在一个推动数亿收入的广告行业,寻求建立消费者相关性是有代价的。随着越来越多的公司寻求人工智能来提高精确度,这种情况越来越多:
数据显然是当今世界最有价值的资产之一——尤其是依赖于海量数据的人工智能(AI)的重要性日益增长。数据隐私需要纳入这些技术的工作架构中,以便社会从人工智能中获得最大利益。对我来说,数据隐私意味着有能力控制你所拥有的数据何时以及为何被使用——而不是保密,这是一项容易得多的任务。要做到这一点,需要有一个公开透明的市场,让个人和公司可以出售他们创造的数据,以及一套关于公司如何使用数据的一致法规。
Nitin Mayande 博士, Tellagence 的首席科学家,前耐克数据科学家同意 Josh Sutton 的观点。Nitin 多年来一直在研究社交网络行为,了解转变当前方法的必要性:
我设想迟早会有一个数据市场——供应方和需求方。如今,公司以用户为代价利用数据并将其货币化。最终用户没有体验到任何真正的经济利益。想象有一天,数据变得如此有价值,个人可以完全控制并成为自己信息的提供者。
对 Dana Toering 来说,他是 Yroo 的首席收入官,也是 Adobe Advertising Cloud 的前董事总经理,他的职业生涯见证了广告平台的出现,这些平台在很大程度上依赖于数据宝库来提高广告定位的粒度:
作为一个完整的生态系统,我觉得我们刚刚开始接受价值交换的演变,这种价值交换始于 1994 年 10 月,当时 Hotwired.com 运营了互联网的第一个横幅广告。通过广告和广泛收集相同受众的数据来换取“免费”内容或软件的受众货币化,使得互联网和围绕互联网建立的业务迅速增长,但也导致了大量的欺诈和邪恶活动。幸运的是,我们正处于一个转折点,企业/品牌和用户都在收回数据所有权,并要求透明,以及同意和问责。随着新技术和相关工具的兴起,定义和管理这种价值交换的核心原则在未来将变得更加重要(和复杂)。因此,现在是正确的时候了,这样企业和用户都可以长期受益。
我曾与苏坎特·库拉纳博士进行过有趣的讨论,他是印度 CSIR-CDRI 大学人工智能、数据科学和神经生理学实验室的负责人。作为一名也在从事各种颠覆性项目的企业家,他回应了上述观点:
隐私和安全之间的争论是一个误导,因为与私营公司和政府共享的数据的种类和数量不需要也不应该相同。人工智能在数据隐私问题上受到了诋毁,但同样的技术(特别是即将到来的元学*方法)可以用来确保安全,同时防止不必要的营销和监控。如果监控工具(通过设计)无法向当局报告数据,除非存在明显的安全威胁,否则这种情况就像拥有*乎完美的隐私。这在技术上是可能的。此外,我们需要将隐私与利润结合起来,这样,总的来说,公司不会与监管机构发生冲突。这意味着需要更智能的媒体和社交平台,为数据共享提供更多选择,这些选择在最终客户和平台之间都是可以接受的。
Alfredo C. Tan,行业教授,麦克马斯特大学德格鲁特商学院在 B2C 广告平台方面有着丰富的经验,并且了解公平交易的必要性,在信任中磨练:
如果对如何使用个人数据有更好的控制和理解,我相信人们会愿意更加开放。这种平衡确保了公平价值交换的发生。作为对我的数据的交换,我的经历变得更好,如果不是现在而是未来。只要这是一种信任的关系,并且人们理解价值交换,那么人们就会乐于分享越来越多的信息。我很高兴脸书、亚马逊和其他平台意识到我是一名 35-45 岁的男性,对旅行和宠物有特殊兴趣,但对曲棍球或滑板没有兴趣。或者,根据我看的某些电影,网飞会推荐我感兴趣的其他类型的内容,让我更加开心。也许这些数据被用在了其他地方,在我的许可下,可以在其他平台上提供更好的体验。在竞争日益激烈的消费者环境中,数据之战是利用他们收集的关于客户的个性化见解来增加参与度,最终创造更好的体验。我敢肯定,许多人不想回到匿名网络,在那里我们所有人都受到基本相同的对待,在体验上没有区别。
所有人都认为回归匿名既不合理也不可行。
隐私、安全、信任和可持续性
这是未来,企业和政府要形成一种立场,接受不同的思维方式,这一点至关重要。随着人工智能变得越来越普遍,算法的黑匣子将要求企业开发系统和政策,以警惕潜在的危害。Cavoukian 明白这是一场艰苦的战斗:
当我与首席执行官们进行这些对话时,起初他们认为我反对商业,我想做的就是让他们关门大吉。这是我最想不到的事。你必须让企业以一种能吸引顾客并保持其商业模式运转的方式运营。那是我认为你应该采取的观点。这必须是一个双赢的局面。
有资料图吗?我总是从那里开始。您需要绘制数据在整个组织中的流动方式,并确定您需要额外同意的位置。遵循组织内部的流程。这将确定可能需要修复的任何差距。
信任:需要多年来建立…和几天来失去…
也许这是公司应该持有的观点。Ann Cavoukian 坚持认为,那些实施了 PbD 的人说它建立了巨大的信任。当你与你的客户建立了可信赖的业务关系时,他们会很乐意在今后给予你额外的许可。他们只是不想让信息流向未知的第三方。
我告诉公司,如果你做 PbD,在屋顶上大声喊出来。以它为先导。告诉你的客户你会尽全力保护他们的隐私,以及你对他们的尊重。他们会以各种方式感谢你。你将获得他们持续的忠诚,你将吸引新的机会。
我对那些将隐私视为负面因素的公司说,隐私会扼杀创造力和创新,事实恰恰相反:隐私孕育创新和繁荣,它会给你带来竞争优势。它让你从信任的基础开始,这稳步提高了你的客户的增长和他们的忠诚度。让它成为一个双赢的提议!
Ann Cavoukian 最*推出了全球隐私和安全设计:GPSbyDesign.org,一个全球隐私和安全的国际委员会。想了解更多关于 Ann Cavoukian 的信息,请访问瑞尔森大学卓越设计中心。
这篇文章最早出现在福布斯上:第一部分和第二部分。
为什么机器能打得过马里奥却打不过口袋妖怪?
原文:https://towardsdatascience.com/why-can-a-machine-beat-mario-but-not-pokemon-ff61313187e1?source=collection_archive---------5-----------------------
到现在为止,你可能已经听说过机器人以超人的水平玩视频游戏。这些机器人可以被显式编程,以设定的输出对设定的输入做出反应,或者 学* 和 进化 ,以不同的方式对相同的输入做出反应,以期找到最佳的反应。
几个著名的例子是:
- AlphaZero ,一个经过 24 小时训练后成为地球上最伟大的棋手的国际象棋机器人
- AlphaGo ,一个著名的围棋机器人,击败了世界级棋手李·塞多尔和柯洁
- MarI/O ,一个超级马里奥机器人,它可以自己学*快速运行任何级别的马里奥
这些游戏很复杂,训练这些机器需要复杂算法、重复模拟和时间的巧妙结合。我想重点谈谈 MarI/O 以及为什么我们不能用类似的方法打败一个口袋妖怪的游戏(如果你不熟悉它的工作原理,请观看上面链接中的视频)。
马里奥和口袋妖怪在这方面有 3 个主要区别:
- 目标数量
- 分子因子
- 全局优化与局部优化
让我们用这些因素来比较这些游戏。
目标数量
机器学* 的方式是通过优化某种目标函数。无论是最大化一个奖励或适应度函数(在强化学*和遗传算法中),还是最小化一个成本函数(在监督学*中),目标都是相似的:尽可能获得最好的分数。
马里奥有一个目标:到达关卡 的末尾。简单地说,你临死前得到的权利越多,你做得越好。这是你的单一目标函数,你的模型能力可以直接用这个数字来衡量。
口袋妖怪有…很多。让我们试着确定我们的目标。是为了打败精英 4 吗?去抓所有的口袋妖怪?培养最强团队?是以上所有的还是其他的?仅仅问这个问题就很奇怪,因为答案可能是所有这些问题的某种个人主观组合。
我们不仅要定义最终目标,还要定义进展是什么样的,所以每一个行动单元都对应着一个奖励或损失,这个奖励或损失是基于任何时候许多许多可能的选择。
这就引出了下一个话题。
分子因子
简单来说,分支因子就是你在任何一步可以做出多少选择。在国际象棋中,平均分支因子是 35;在围棋里是 250。对于未来的每一步,你都有(factor)^(steps 分行)数量的选择要评估。
在马里奥里,你要么向左,向右,跳,要么什么都不做。机器要评估的选择数量很少。而且,分支因子越小,机器人就能在计算上看得更远。
口袋妖怪是一个开放的世界游戏,这意味着你在任何时候都有很多选择。简单地向上、向下、向左或向右移动并不是计算分支因子的有用方法。相反,我们着眼于下一个有意义的行动。下一个行动是去打仗,与 NPC 人交谈,还是去左、右、上、下的下一个地方?随着游戏的进行,可能的选择范围从大到非常大。
建造一台能够计算出最佳选择集的机器需要它考虑自己的短期和长期目标,这就引出了最后一个话题。
局部优化与全局优化
局部和全局优化可以从空间和时间上考虑。短期目标和直接的地理区域被认为是局部的,而长期目标和相对较大的区域如城市甚至整个地图被认为是全局的。
将每次运行分解成它的组成部分是一种将口袋妖怪问题分解成小块的方法。局部优化在一个区域内从 A 点到 B 点很容易,但是决定哪个目的地是最佳 B 点是一个困难得多的问题。贪婪算法在这里失败,因为局部最优决策步骤不一定导致全局最优。
马里奥地图很小,是线性的。口袋妖怪地图很大,错综复杂,并且是非线性的。为了追求更高的目标,你的最高优先级会随着时间而改变,将全局目标转化为优先的局部优化问题并不是一件容易的事情。这不是我们目前的型号所能处理的。
最后一件事
从机器人的角度来看,口袋妖怪不仅仅是一个游戏。机器人是专家,当你遇到想要战斗的 NPC 人时,帮助你在地图上移动的机器人无能为力。从他们的角度来看,这是两个完全不同的任务。
在战斗中,每一回合都有几十种选择。选择使用哪个动作,换哪个口袋妖怪,以及何时使用不同的物品本身就是一个复杂的优化问题。环顾四周,我找到了这篇文章,其中有人解释了他建造战斗模拟器的过程。这是经过深思熟虑的,非常复杂,甚至没有考虑到物品的使用,这是决定战斗结果的一个关键因素。
到目前为止,我们应该庆幸的是,我们可以建立比我们更擅长自己游戏的机器人。到目前为止,这些游戏在数学上很复杂,但在目标上很简单。随着人工智能的进步,我们将创造出能够解决越来越有影响力的现实世界问题的机器,所有这些都是通过它们自己对复杂优化问题的学*来实现的。请放心,我们仍然有更擅长的事情,包括我们童年的游戏——至少现在是这样。感谢阅读!
为什么“永远的数据”缺乏精确性。
原文:https://towardsdatascience.com/why-data-for-good-lacks-precision-87fb48e341f1?source=collection_archive---------5-----------------------
我刚刚在斯德哥尔摩参加了 2018 年 ICML 国际机器学*大会,度过了美妙的一周。ICML 最活跃的非正式社区之一是“数据为善”社区。我们组织了几次自发的午餐,在那里我遇到了一些令人难以置信的研究人员和应用实践者。然而,作为一个小组,我们的讨论让我重新审视了一段时间以来我的直觉反应,即“数据为善”已经成为一个武断的术语,不利于运动的目标。
“数据为善”很少提到所使用的工具、努力的目标或我们服务的对象。类似于经常用“AI”来形容一切与机器学*模糊相关的事物。这两个术语的使用和普遍吸引力都令人兴奋,但是从技术从业者的角度来看,缺乏精确性。
我承认“数据为善”是与广大受众交谈的一个有用的捷径(我也在与普通受众交谈时使用它,就像在我的推特简历中一样)。我担心的是,当我们在自己之间谈论数据时,缺乏精确性。这篇文章的目标是那些选择加入“数据为善”保护伞的技术熟练的个人和组织。
我们需要更严谨的语言来描述我们正在做的工作,最重要的是,这样我们也可以找出我们可以做得更好的地方。在这篇文章中,我将描述经常用来将一个计划定义为“好的数据”的关键标准我将使用这个粗略的分类法来讨论一些公开的挑战。最后,我想说的是,最重要的一部分,机器学*教育项目,很少被讨论,并且很少被我们的社区所重视。
什么是好的数据?
“永久数据”是一个非常新的术语。我是谷歌大脑的研究员。四年前,我创办了一个 501(c)3 非营利组织,名为 Delta Analytics 。当时,我只知道少数其他组织将自己归类在“数据为善”的保护伞下(例如: DataKind 、 Bayes Impact 和Data Science for Social Good)。
与此同时,人们对这一领域也非常感兴趣。我经常被邀请在等候名单很长的小组中发言,申请德尔塔奖学金的人数每年都在增长,许多新的组织也随之成立,如 AI4ALL 、 hack4impact 和【uptake.org】T4。为了有效地利用这种令人难以置信的兴趣,我们需要一个更好的框架来讨论我们的工作和最值得关注的领域。
首先,我们来问一下“数据”是什么意思?我将把“数据”定义为从现有数据集中提取信息或收集新的/额外数据的项目,以此来限制我们的讨论范围。这通常需要数据收集、清理和/或应用统计工具和/或机器学*模型。这项工作还可能涉及构建数据收集或模型部署的技术工具。
“数据为善”是指数据项目的子集。“数据为善”是一个奇怪的描述符,因为它意味着一些数据没有被很好地使用,或者至少在应用的本质上是矛盾的。“好”这个词作为限定词的主观性意味着可能同时使用多个有效的定义。
我经常看到有四个标准被用来将一个项目归入“良好数据”的范畴:
1.数据产品的最终接收方是一家非营利机构或政府机构。
2.技术熟练的志愿者开发并交付数据产品。
3.数据工具免费或以高额补贴的方式提供给组织/个人。
4.教育培训提高服务不足社区的数据技能
虽然这是一个粗略的分类,但它也是更严格地处理每个存储桶的一个有用的起点。在语言中,每当一个术语的含义不明确时,澄清所使用的定义是很重要的。除非我们清楚地说明这些定义,否则很难就我们是否以有价值的方式对计划进行优先级排序进行严格的讨论。作为一个社区,我们需要远离沾沾自喜的论坛,而是就这些权衡进行坦诚的对话,我将在下面的几个部分中对此进行讨论。
1。熟练的志愿者开发并交付数据产品(免费或按补贴费率)。
Delta Analytics 是一个自称为“数据为善”的组织的例子,部分原因是我们将免费志愿者的技术专家与世界各地的数据项目联系起来。
技术志愿者是一种强大的方式,可以弥合科技公司和大学的专业知识与世界其他地方之间存在的严重技术差距。理想情况下,志愿者致力于解决服务不足的问题。这可能是因为问题的性质,也可能是因为主机组织和/或地理区域内的技术专业知识不足。
虽然有技能的志愿服务是弥合技能差距的有力方式,但我们也必须注意到利用志愿者来促进数据发展的缺点。
依赖志愿者可能会导致零星的、通常不可预测的进展。志愿者可能会忙于应付多项任务,必须优先考虑带薪工作/家庭/休息时间。志愿者可能只在有限的时间内可用,这可能需要在不同时间表的志愿者之间权衡项目。
“尖端”问题备受青睐。最容易让志愿者兴奋的项目都包含有趣的技术挑战。例如,去年我和其他三名德尔塔研究员志愿参与了一个名为雨林连接的项目,利用回收手机的音频流来检测链锯。这个问题很有趣,因为数据稀缺,我们部署的雨林的训练和测试分布之间的差异,以及所涉及的工程挑战。
使用深度学*很容易吸引高技能的志愿者来检测非法砍伐森林。然而,99%的数据问题并不那么耀眼,但仍然值得我们关注。大多数问题只涉及极少的数据,而是需要深入了解数据清理的最佳实践,并在样本量较小的情况下估计不确定性。事实上,通常最需要的是首先帮助确定要收集哪些数据。
为什么不解决这些问题呢?为这些问题中的任何一个提供解决方案都会产生深远的影响。然而,对于一周只能贡献几个小时的志愿者来说,解决这种性质的问题(例如收集正确的数据)所需的时间框架通常是不合适的。
并非所有的志愿服务都是平等的。周末或一日黑客马拉松旨在将时间有限的志愿者与需要他们帮助的非营利组织联系起来。达美航空从未举办过为期一天的黑客马拉松;我们更倾向于关注 6 个月的非盈利项目。我们不做一天的黑客马拉松,因为这需要付出难以置信的努力,才能让数据产品的最终接收者觉得这是一项值得的努力。
通常,为黑客马拉松做准备会给非营利组织带来巨大的开销,周末出现的数据原型无法证明这一点。非营利组织和黑客马拉松主办方必须投入大量时间来准备数据文档和数据集清理,这是参与者快速适应新数据库所必需的。
非营利组织资源有限,很少有专门的“数据”人员。除非对黑客马拉松进行仔细的研究和精心的计划,否则产生的数据产品很少能证明投入的时间是值得的。也就是说,黑客马拉松的目标通常是为有技能的志愿者提供体验活动,这些志愿者可能会决定更经常地参与其中。在这种情况下,成功取决于对持续参与有一系列清晰的预期结果。这些应该在黑客马拉松之前定义,这样活动本身就可以作为更长期参与的有用垫脚石。
2.用于数据工作的工具是捐赠的或得到大量补贴的。
这一类别通常是“永久数据”最有问题的特征几乎所有大型科技公司都有非营利项目,以高额补贴或免费的方式提供硬件、许可证和计算资源。虽然这些努力都是善意的,但大多数努力的当前表述都让人感到痛苦的麻木。原因如下:
企业最渴望捐赠的工具并不适合绝大多数数据和技术专长有限的非营利组织。我们忘记了绝大多数组织仍在使用 Excel,并认为将他们的数据转移到 Salesforce 是一个重大的技术进步。免费提供云信用、硬件或昂贵的可视化许可对极少数组织是有用的。然而,当公司将这种非常专业化的捐赠等同于拥有“数据为善”计划时,这是有问题的。至少,这些计划应该为非营利组织提供专门的支持和培训,这些组织通常缺乏技术专长和/或以不寻常和意想不到的方式使用软件。
将实物捐赠等同于“数据为善”,可以免除科技公司更有意义参与的责任。大多数非营利组织会告诉你,他们最常见的痛点不是软件,而是技术培训。像 Delta Analytics 这样的组织最大的贡献不是技术创新,而是让非营利组织更有信心使用他们的数据。科技公司可以通过将获得实物资源与诚然成本更高但更有意义的举措相结合来提供教育推广和熟练的志愿者,从而发挥最大的影响。
3.非营利或政府机构是数据产品的接收者。
如果最终受益人是非营利机构或政府机构,计划通常被归类为“永久数据”。
虽然这可能感觉像是一种将项目归类为“永久数据”的直观方式,但重要的是要记住,这并不总是保证我们处理最有意义的问题。我们应该灵活处理,优先确定有影响的问题。例如,达美航空每年都会收到来自世界各地非营利组织的赠款接受者计划申请。我们从不接受涉及帮助非营利组织准备资助提案数据的申请。这类数据工作有用吗?几乎可以肯定。还有更有影响力的问题需要解决吗?绝对可以。鉴于资源和专业知识有限,我们必须权衡如何分配资源。
基于分类的方法不会忽视营利组织的社会影响。作为德尔塔志愿者,我参与的最有意义的项目之一是与肯尼亚内罗毕的 Eneza Education 合作。Eneza 是一家营利性组织,它使用智能手机技术为准备年终考试的中小学生提供基于测验的资源。
Eneza 拥有一个令人难以置信的无与伦比的数据集,记录了东非学生的学*方式。此外,Eneza 团队同意我们可以与更广泛的受众公开分享这些见解。出现的是学生如何学*、如何优化测验顺序以留住学生以及非洲家庭如何以创新方式使用智能手机之前的技术的丰富画面。
最后,越来越多令人激动的研究项目甚至不是针对单个组织的。相反,研究人员的目标是为服务不足的领域提供可概括的见解。例如,位于坎帕拉的联合国脉冲实验室利用卫星图像来评估地区贫困状况,比如使用建造屋顶的材料。可持续发展和人工智能实验室参与了多个项目,包括使用卫星图像预测贫困和使用遥感数据预测作物产量。我们应该鼓励更多的机构支持,就像 SalesForce 的爱因斯坦基金一样,使这种类型的研究成为可能。
4.旨在欠发达社区建立技术能力的教育项目。
当教育项目集中于没有替代培训项目的服务水平低下的社区时,它们属于“数据为善”的范畴。例如,Uptake.org在芝加哥开展了一个项目,为非营利专业人士提供机器学*和安全实践方面的培训。达美助教在肯亚奈洛比教授机器学*入门课程,并将于今年晚些时候在摩洛哥阿加迪尔授课。
在这篇文章的开始,我建议教育项目既是最重要的“数据为善”计划,也是最缺乏服务的。
为什么?因为有技能的志愿者工作本质上是一项短期的努力。虽然我们绝对需要有技能的志愿者,但同时我们也需要更多的教育者。这就是在项目结束时“移交”的数据产品和最终接收方已经买入并将长期使用的数据产品之间的区别。
同样重要的是,当地专家能解决问题。熟练的志愿者经常提出不合适的解决方案,因为我们很难忘记自己喜欢的日常工具包。作为谷歌大脑的一名研究人员,我通常不担心数据的质量或数量,因为我依赖一些大型、公开和干净的数据集。然而,绝大多数现实世界的问题并不涉及那么多数据,也不需要神经网络。我愿意认为我没有被最*的研究束缚住,当我自愿为不同的问题贡献我的技能时,我仍然能够提供价值。然而,如果有人每天都在那些非常不同的约束下思考问题,那会怎么样呢?他或她更适合提出创新的解决方案吗?至少,我们的解决方案可能会非常不同。
教育之所以是服务不足的领域,并不是因为我们不关心。我们有。这是因为技能培训从根本上来说是一个比弥合技能差距更困难的问题。为了建设能力,我们必须建设有同样能力的生态系统。这很有挑战性,但并非不可能。今年夏天早些时候,我去了肯尼亚,在非洲数据科学学院教了一节课。在回旧金山的路上,我在安德拉停了下来。在过去的三年里,我每年都去安德拉。Andela 是非洲的一家工程动力公司,在拉各斯、内罗毕和坎帕拉都有校区。
人们普遍认为,这是工程师在非洲以外的公司工作的最佳方式之一。事实上,一些已经完成计算机科学本科课程的学生仍然加入安德拉,尽管该项目专门培训没有假定背景知识的工程师。这些学生加入是因为安德拉雇佣工程师与世界各地的公司合作。安德拉非常成功,因为它招募人才是基于这样一种假设,即才华比以往的经验更重要。它依靠极低的录取率来选择非洲最有前途的开发者。
另一个巨大资本投资努力的例子是最*宣布的由脸书和谷歌共同赞助的非洲人工智能硕士项目(AIMS) 。Andela 和 AIMS 需要大量资本投资和机构合作伙伴的支持。然而,在较小的层面上,我们都可以推动将教育纳入我们的努力。 Fast.ai 为他们在数据学院教授的每门深度学*课程提供远程多样性奖学金。尼日利亚数据科学将于 11 月举办一次会议,届时美国和欧洲的机器学*专家将通过谷歌视频聊天工具教授教程。
当我们将熟练的志愿者与非营利组织合作时,我们应该做一个心理检查— “一旦我们不再参与,我们正在使用的工具是否可以被非营利组织重复使用?”最重要的是,我们不应该害怕教学。我经常遇到非常技术化的个人对自己是否有资格当老师的犹豫。你应该反过来问,什么会使你失去当老师的资格。世界很大,而知识目前集中在少数城市和个人手中。作为教育者和导师,我们都必须发挥自己的作用。
离别的思念。
我在这篇文章的开头提出,我们如何谈论“好的数据”是不精确的。我调查了一些用于将项目定义为“好的数据”的通用标准使用更精确的语言的一个可能的动机是有一个共同的话语来有效地引导“数据为善”这一术语带来的巨大兴奋、能量和资源。另一个或许更重要的原因是,通过反思我们当前的努力是否能最好地服务于世界各地的社区,让我们自己负起责任。
致谢
感谢 Melissa Fabros、Brian Spiering、Simon Kornblith、Anna Bethke、Jonathan Wang 和 Kumar Agrawal 对本文的丰富反馈。特别是,我要感谢 Amanda Su 的许多有用的软编辑和阅读这篇文章的多次迭代。
为什么数据科学职业会一直存在
原文:https://towardsdatascience.com/why-data-science-careers-are-here-to-stay-43b08995cf2f?source=collection_archive---------9-----------------------
当人们思考他们最初感兴趣的职业道路或考虑进入另一个领域时,他们通常会查看与收入、就业市场健康状况和持续工作机会可能性相关的统计数据。
IBM 在 2017 年发布的统计数据表明,对数据科学家的需求很大,到 2020 年,对他们的需求将攀升 28%。大多数职位空缺将出现在金融和保险行业。
出于几个原因,数据科学家的工作在过去几年里开始兴起。
对于受过数据科学培训的就业市场人士来说,更好的是,这一势头没有放缓的迹象。
公司希望明智地使用他们不断增长的数据集合
每当一个人在脸书上更新状态,在 Twitter 上标记一个朋友,在谷歌上搜索一些东西,或者在 Instagram 上分享快照,他们都会增加现有的大量数据,这只是开始。
因此,公司不满足于仅仅收集数据是可以理解的。
他们希望研究它,了解它的背景,以便更好地了解他们的客户。数据科学家可以帮助他们实现这些目标。
然而,分析师指出,合格的数据科学候选人严重短缺。统计数据显示,与其他职位相比,T2 需要多花八天时间来填补一些与数据相关的职位。
随着公司开始更加关注数据,缺少人才的情况只会变得更加明显。
决定获得数据科学职位所需的培训和经验的人现在应该能够利用技能短缺,并断言自己已经准备好填补这一空缺。
数据让企业采取积极主动的方法来增加利润
当公司不能持续地在数据中寻找趋势时,他们可能会错过提高利润的机会。更糟糕的是,他们可能会犯下阻碍盈利和损害声誉的错误。
数据科学家可以帮助企业领导者更加积极主动地将数据趋势与提高利润的可能性联系起来。通常,如果与数据打交道的人对他们工作的公司有深入的了解,会很有帮助。
这也是很多公司从内部聘请数据科学家的原因。普华永道 2017 年 1 月的一项研究显示,59%的公司希望数据科学家候选人拥有大学学位和至少三年的工作经验。
他们也寻找有能力的人,这些人愿意灵活地扩展他们现有的技能。
保持盈利需要公司显示出适应能力,为这些企业工作的员工也是如此。
在这个竞争激烈的领域最成功的数据科学家将是那些能够适应变化,同时始终关注决定公司利润的因素的人。
无论短期趋势或关注点的短暂变化,盈利都是组织的目标。
因此,当公司雇用能够检查数据以保持盈利的个人时,这些人不必担心他们的工作可能会过时。
数据科学家的角色很有吸引力,原因有很多
Glassdoor 选择数据科学家作为其 2018 年的顶级职业,原因是 11 万美元的中值基本工资和高于其他领域平均水平的工作满意度等因素。
关于职业选择,整个 IT 领域是一个有着令人兴奋的选择的行业,其特点是持续的就业增长和诱人的薪水。
随着知名公司宣传他们希望将更多的数据科学家加入他们的团队,并让候选人知道他们将在商业预测中发挥关键作用,现在或即将寻找工作的人将更加确信数据科学领域提供了有前途的职业道路。
认识到一个希望在计算机科学领域工作的人有多种方式来发展他们的职业生涯也很重要。例如,如果一个人对某件事有热情——无论是农业还是人工智能——这个人可以寻找将数据分析应用于该兴趣的方法。
不久前,一些行业甚至没有考虑使用数据科学来实现他们的目标。现在,来自这些部门的大多数代表都意识到有一个分析的地方,并希望数据科学家帮助他们找到它。
此外,即使不是计算机专业的人也经常最终从事相关的工作。
如果求职者表现出他们愿意多才多艺,他们将有更好的机会在他们喜欢的职位上工作,提供丰厚的薪水。
数据科学实现更智能的预测
有一个适用于每个行业的现实:预测能力让公司不再依赖直觉,而是参考集体信息。
当这种情况发生时,企业领导人会对他们的预测更有信心,让利益相关者更容易信任他们并投资他们的企业。
图片由 凯文·Ku
为什么数据科学会议值得付出额外的努力
原文:https://towardsdatascience.com/why-data-science-conferences-are-worth-the-extra-effort-a67a123ae4d4?source=collection_archive---------4-----------------------
我是一名数据科学家…
我喜欢数据。我热爱科学。我喜欢处理数据…
但是……作为一名专业人士,有时你会觉得自己不够敏锐,没有把握住最新、最时尚的话题——这时你需要提升自己。
你如何着手做这件事?
课程、聚会、播客、研讨会……似乎都是可行的选择。但是其中一个选项很突出:数据科学会议。
你很可能在想:“我应该打扰吗?会议不就是浪费我的时间、金钱和精力吗?…它们值得付出额外的努力吗?”
我们都想过这个问题——但事实真的是这样吗?
如果我告诉你,它们值得你付出额外的努力。
当参加这些活动时,你可以获得大量明显和不那么明显的好处,问题是没有多少人知道如何参加会议…
诀窍是:你只需要知道去哪里找。
参加任何会议都不是免费的
首先,我承认参加会议需要相当多的资源…
除了会议本身的费用,你还要在旅行、住宿和餐饮上花钱。不要忘记错过的工作和工作日会让你损失更多。
此外,除了花在会议上的时间,您还应该考虑花在以下方面的时间:
- 到达和离开活动地点;
- 为会议做准备(了解发言人,选择最有趣的会议等。);
- 回家后最大限度地利用活动(例如,社交和“感谢”邮件)。
这就是为什么大多数人试图挑选一个推荐的会议,组织后勤,解决所有的旅行问题,找到并参加你最感兴趣的会议,甚至与会议参加者和发言者取得联系。
但是有一些坏消息…
遗憾的是,即使你确保所有这些都完成了,也不可能保证你会从参加会议中获得有价值的收益。
结果很多人得出结论:浪费时间和精力。这是可以理解的,尤其是如果你以前有过一些不幸的会议经历。
这就是为什么你应该:
激光聚焦在白马王子身上
数据科学是一个飞速发展的领域。
因此,你会发现每年都有大量的会议召开:有些会议或大或小,有些比其他会议更贵或更便宜,有些面向学术或商业,有些涵盖广泛的主题,而另一些则关注范围狭窄,只涵盖一些特定的领域。
那么如何选择 数据科学大会 那才是真正值得你花费时间和精力的呢?
有几个因素需要考虑(以及要问自己的问题):
- 你的预算。
“今年我想在教育上花多少钱?”
我不建议在一次会议上全押,仅此而已。这不仅会给你带来太大的压力,而且你应该每年花时间提升自己几次技能。
有大量的选择来学*和教育自己,此外,还有数百个各种形状和大小的会议,所以选择一个适合你的吧。其中有些不一定要花大价钱才能获得超值。
(别忘了考虑一些额外费用,如门票、酒店、交通、餐饮、娱乐)
但是和许多事情一样,所有这些都是投资,问题是:
“你准备好投资自己了吗?”
- 你的目标。
“我有一些需要继续努力的具体需求吗?”
如果是这样,寻找专门针对他们会议。如果你没有什么需要关注的,那就跟着你最大的兴趣走。如果你喜欢某个特定的主题,你可能会想更深入地研究它,而会议正好可以做到这一点。
- 你的发展。
“我现在处于数据科学职业生涯的哪个阶段?”
如果你刚刚开始数据科学家的职业生涯,一些让你涉足几个主题的一般性会议可能是你应该寻找的——甚至可能是专注于职业发展的活动。
如果你已经有了多年的经验,你就会知道有些话题你喜欢探索,有些你不太喜欢。一旦你选择了这个子领域,想想你还能从这个活动中得到什么——建立关系网的机会,指导,甚至是伙伴关系,然后缩小范围。
- 你的独家知识。
“这些发言者是谁?我能从他们身上学到什么?他们是否处于我想要的阶段?”
我试图在会议上从与会者身上学到一些网上找不到的东西。
我这么说是什么意思?
体验。真实的。生活。经历。
一切技术都可以在谷歌上阅读,所有最新的知识都将在最新的时事通讯上发布,这是任何新闻渠道中的最新技术。
但是,如果你做一点功课,从演讲者那里查找过去的会议,或者如果你阅读他们的简历,你可能会喜欢一些东西,那么这将增加你学*新的、独家的和有价值的东西的机会。
最后,正如我们稍后将要讨论的,会议是一个很好的交流场所,所以你应该试着超越演讲者的思维,考虑听众。这个活动是针对谁的?你会遇到有价值的人吗?-如果是这样,你可以走了。
如果你选择了合适的会议,你就成功了一半。
之后,接下来你将有机会享受所有这些额外的不太明显的好处。
向专业人士学*
数据科学是一个快速发展的领域。
事实是:你可以找到大量的资源,其中许多是在线的——也就是说,你可以在家里舒适地访问它们。
您可以参加在线课程和网络研讨会,听播客,获得问题的答案,参加研讨会,等等…
那么,为什么要为亲自参加学*活动的时间和费用而烦恼呢?这样不是效率更低吗?
虽然线上活动很好,但线下活动能给你带来更多:
- 他们带给你的是字里行间的信息,是在其他地方无法阅读或找到的内容。在阅读文本时,有一些细微之处经常被忽略,但在适当的强调下是不会被忽略的。
- 你可以向任何人学*。你会惊讶地发现,我经常从坐在我旁边的人那里学到难以置信的见解,只需要一次交谈。
- 你可能会在一对一的会议中遇到你的偶像(这种情况越来越普遍)。你会了解他们正在做什么,他们的观点和愿景,他们甚至会给你建议如何改进你自己的工作。
记住,会议提供了一个环境,鼓励你向所有人提问。在这种环境下,每个人都知道一些特定的话题,但没有人相信或表现得像专家。
是时候问那个一直困扰你的愚蠢问题了。
至少是一个导师
人脉通常是许多专业人士参加任何特定会议的唯一原因。
这是真的——这很重要。
好的会议为与会者提供了大量的机会,让他们能够混合和交往,建立新的关系,甚至加强现有的关系。喝茶或喝咖啡时,你可能会发现自己与潜在的合作伙伴、商业伙伴、客户或未来的导师建立了新的联系。
社交媒体可能会让你与来自世界各地的同龄人保持联系,但事实上,在现实生活中,没有什么可以替代与某人见面(或真正了解某人)。
然而,与商务会议不同,数据科学会议允许您在社交和不太正式的环境中与人互动。
考虑一些至关重要的事情:通过文本(电子邮件或短信),你失去了你想说的话背后的语气和意图。通常,事情会被曲解或误解,只是因为我们不知道背后的语调是什么意思。
说起来,还好是解决这个问题的办法。
许多人觉得社交很尴尬或不舒服,但如果你记住每个人都是出于同样的原因——人们通常在会议和其他现场活动中对交流持开放态度,这是意料之中的。
你永远不知道某人将来会给你或你的组织带来什么好处,在职业发展的一些关键方面,面对面的活动是不可替代的——所以保持开放的心态,与人交谈,也被人交谈。
不要后退
这个闪电般的快速领域比我们所有人都能理解的还要快。
这通常归结于速度…
事实是:在这个领域总是有新的东西要学,最好的会议肯定是在这些前沿发展和新闻的最前沿。
这是获取最新行业信息的最佳场所,通常来自信息源本身。你甚至会接触到各种各样的想法、话题和行业,这些都是你以前可能没有考虑过的,但是你会学到的,因为你就在那里。
把社交媒体也考虑进去,你会发现自己处于一个的位置,为会议提供内容。如今,使用会议标签实时发布你的反馈和体验几乎是一件必须做的事情。
你将有一个绝佳的机会去关注所有突破性的新闻和公告,如果你做得好,你将能够额外推销你自己或你的组织。
你将成为一个更大的对话的一部分,你将保持相关性并被听到。
谁啊。我吗?
数据科学会议是为你的职业发展准备的。句号。
这可以是通过学*下一大块知识,找到你缺失的最后一块拼图,或者通过正确地推销自己。
如果你已经有一些数据科学家的经验,你可以更进一步,甚至将自己定位为同行中的专家。
当你活跃在你的行业并参与主要活动时,你更有可能在你的同行和你的客户中建立专家的声誉。
那些长期从事这项工作的人经常被邀请在受欢迎的活动中担任演讲人,或者被要求为专业出版物撰写文章。人们喜欢与专家和领导者交往,这不是什么秘密。
最后,你会让自己成为那些为公司招聘合适人选的人的目标。
我知道。
你是否足够投入?
是的,会议甚至可以帮助你解决这个问题。
当您注册参加活动时,您表明了您向前迈出一步的承诺。有时候,迈出这一步并付诸行动是停止拖延和无所作为的好方法。
在会议期间,你将有机会专注于一项特定的任务——职业发展。是时候让你提升自己,学点新东西,和同行的人聊聊,听听自己回答:
- 你适应这种环境吗?
- 你被这些谈话迷住了吗?
- 你有什么要和这个社区分享的吗?
- 你想知道更多吗?
- 你是否受到的启发去实施你所学到的东西?
回答完这些问题后,你对未来职业发展的愿景可能会变得更加清晰。
此外,无论你在职业生涯中处于什么位置,都有专门为数据科学家的职业发展量身定制的特定活动,例如:数据科学公司。
Click here!
如你所见,即使参加会议和其他面对面的活动可能听起来很乏味,需要额外的努力、时间和金钱,但如果你做得对,这确实是值得的。
让我们总结一下…
那么,为什么数据科学会议值得付出额外的努力呢?
简短的回答是:
因为他们对你的个人和职业发展是不可替代的。
如果您努力选择合适的会议,您将获得许多新的机会,例如:
- 向数据科学领域最优秀的人学*
- 获得关于当前项目的新想法
- 寻找你的下一个商业伙伴、合作伙伴、导师或客户
- 熟悉数据科学的最新趋势
- 成为数据科学社区的一员
- 把自己定位成专家
- 从志同道合的人中获得灵感
没有人会争辩说,为了在事业上取得成功,你需要投资于你的教育和职业发展。因此,会议应该成为你职业发展不可或缺的一部分,因为它们提供了让你的技能达到更高水平的好方法,是建立关系网的最佳场所,可以帮助你战略性地指导你的职业生涯。
现在,看起来他们绝对值得付出额外的努力。
那么,你还在等什么?找到合适的会议并立即注册!
原载于 2018 年 3 月 27 日www.superdatascience.com。
为什么数据科学失败了
原文:https://towardsdatascience.com/why-data-science-fails-dd599e9f42ea?source=collection_archive---------6-----------------------
Photo by Daniel Cheung on Unsplash
正如合并经常无法兑现他们的承诺一样,许多数据科学团队也是如此。毕马威的一项研究表明,83%的并购交易无法提高股东回报。而且,尽管我认为数据科学在建立了团队的公司中获得了普遍的成功,但在许多公司中,它远远没有给人留下深刻的印象。
在许多公司中,数据科学往往无法实现其全部前景,原因与合并没有实现相同。这就像火鸡为圣诞节投票一样。被要求参与变革的人很有可能,或者认为自己很有可能,在参与的过程中失去控制。
通常有:
- 缺乏领导和管理;
- 缺乏对现有员工的适当激励,以从新员工或新技术中整合和提取价值。
地盘之争接踵而至,很少有人会赢(尤其是股东)。
更换代理商
就像合并和收购一样,将数据科学引入一个新的组织很难,数据科学家可能会被视为局外人。他们手中掌握着很少有人理解的新技术——在许多情况下可能是令人费解的。结果,数据科学家最终不愿意成为对抗根深蒂固的基础的变革推动者。
大多数组织中根深蒂固的人害怕变化,通常很少有领导者有必要的经验或能力来管理变化带来的不确定性和恐惧。这种恐惧最常见的表现之一是怀疑。这种怀疑变成了自我实现的预言,导致了失败。加剧这一问题的事实是,公司的高管和高级经理没有充分支持,也不理解数据科学到底是什么。
有两种明显的方法可以解决这种领导力或变革管理的差距。
- 首先,该公司的领导团队能够认识到他们对新技术缺乏经验,以及对重大变革管理的需求。他们可以任命并授权一个值得信赖的顾问,或者任命一个强有力的领导者来推动实施。
- 其次,数据科学家本身可以学*如何支持变革,支持他们所在的组织,并确保项目通过理解和支持而非逆境获得动力。
虽然我认为双方都应该是任何新整合的重要组成部分,但最终还是领导团队有责任促成变革。任何希望从过去十年的技术进步中真正受益的组织都需要走在前面。高管们需要了解技术、好处和成本,但他们也需要了解人们,知道这是一个重大变化,并意识到他们的员工中很少有人会有这种经历。不确定性和恐惧将被播种。再培训、技能提升、知识转移和公开对话是防止这种情况的好方法。
驾驶变化
去找数据科学家并把责任推给他们是轻而易举的——要么这样做,要么让他们自己决定。领导可以告诉他们的人民,如果他们希望制定变革,那么他们应该大声说出来!毕竟,这是一家敏捷公司,决策是民主做出的,而不是由少数人做出的。
尽管这种情绪很好,但它提醒人们,如果组织根深蒂固,那么这种成功的实际概率非常低。任何曾经试图从一个没有权力的位置上改变一个组织的进程的人都会知道,这是令人沮丧的,不太可能成功,而且很可能导致一个人筋疲力尽。此外,虽然我认为许多数据科学家有能力成为伟大的技术人员,拥有必要的商业敏锐度,正确的领域知识,以及成为有能力的领导者的能力,但这设定了一个不切实际的公式或期望。
数据科学很难搞
我不想自我推销。当我成为一家中型组织的首席执行官时,我觉得这最终会比我纯粹是一名数据科学家时更容易——当然会有更多压力,但实际情况的复杂性会降低。
虽然数据科学是我做过的最好的工作,而且直到今天我仍然热爱它,但它的要求非常高。可以肯定的是,我的兴趣水平淡化了困难,但客观上是困难的。一个人需要同时兼顾许多耗时的任务:
- 通过每天阅读论文保持对技术进步的了解
- 通过研究和与专家的长时间交谈,深刻理解他们工作的领域
- 不断地创造、实施并通过客观的标准来判断自己
- 管理通常管理不善的复杂集成系统(数据质量差的现象非常普遍)
- 了解企业如何运作
- 知道如何将新技术融入这些公司
- 能够向人们展示结果将远远少于统计学和数学背景
- 理解可视化,以及如何用数据以简单的方式讲述一个复杂的故事
- 知道自己的极限,在情感上足够聪明,知道自己不知道的。
- 质疑一切
加上作为一个强有力的领导者、变革推动者、演说家和其他一些人的所有品质,你已经要求了不可能的事情。企业领导人需要明白,数据科学家不是也不会是一切。同样是这些领导者需要走出他们的方式,以更好地理解组织在成功实施数据科学时面临的困难。
是时候停止认为别人会做这件事了。
为什么应该在每个工程专业推广数据科学
原文:https://towardsdatascience.com/why-data-science-should-be-promoted-in-every-engineering-major-aaf9c92d9d0d?source=collection_archive---------12-----------------------
Neural networks explained to a majority of Computer Science students by a Mechanical Engineering student during a DataVenture event — Photo by Bastien Le Moallic
数据科学是大多数大学教授的一个时髦的新领域——至少是科学和工程大学。但仍然在 2018 年,它并不总是被视为和理解为每个专业的完整和强大的解决问题的方法。我相信应该是!
数据科学涵盖了许多不同的东西:数据管理、统计学、数据可视化、机器学*等等。人们认为只有计算机科学家有足够的技术来处理这个问题。为什么?因为它通常需要编程技能,而这些技能在高中(或之前)并没有作为基础知识教给每个人。因此,它引起了人们的恐惧,因为他们不知道编程。
老实说,数据科学需要与一些计算机材料兼容。比如操纵数据(文件、数据库)和对它们进行操作(编程或使用高级软件)。但是数据科学可以在很多方面帮助你。如今,数据无处不在。那么你不应该仅仅因为你缺乏计算机编程技能而忽视解决你自己问题的方法。这不是重点。
现在忘掉障碍,专注于利益。我将给出一些具体的例子来说明为什么你应该开始用数据思考,不管你是谁。从化学到机械工程专业,学生没有理由远离。
如何利用数据科学解决问题
数据科学是一套应用于数据集的统计工具,目的是提取有趣的值(解决问题、发现模式和意外规则等)。
数据可以是数字、文本、图像、声音。它通常存储在文件或数据库中。具有相同变量的数据集合称为数据集。数据集有时是私有的,有时是公共的。越来越多的机构将他们的数据放到网上。这些公共在线数据集被称为“开放”的,因为任何人都可以下载和探索它们。例如,巴黎市有一个很棒的在线平台,他们在那里发布许多开放数据集。它是关于经济,社会统计,建筑,交通,公共服务等。
让我们来看看这个数据集。它由巴黎街道的城市数据组成。它描述了巴黎的街道是如何被道路分隔开的。你可能在想:“我就是不在乎这个”。等一下。最*,我不得不使用这个数据集。
我研究了一个解决方案来改善巴黎市的垃圾收集管理。这个想法是利用机器学*预测垃圾车到达街道,然后在几分钟前提醒管理员,以便他们可以将垃圾箱放在户外。最终目标是减少巴黎街头垃圾箱的数量。
其中一个步骤是将街道聚集起来,将城市中的每个地址聚集成小的集群。簇必须是彼此靠*的地址,并且同时由卡车收集。即使同一条街道上的两个号码很*,它们也可能被道路隔开,因此垃圾收集车可能不会同时收集它们。我不得不将没有被道路分隔的街道编号进行分组。所以这个数据集正是我所需要的!我用了所谓的聚类算法,这是结果。
我没有设计一个可能涉及一些城市知识的复杂算法,而是使用了一种机器学*方法,这种方法很有效。因此,无论你是谁,例如在城市规划领域工作的人,你都有理由使用数据科学,因为它很有帮助。
不同科学领域中已解决问题的例子
嗯,有很多例子。快速访问 Kaggle (网络上最著名的致力于数据科学竞赛的实体)及其多样化的数据集,人们在这些数据集上不断竞争,这给了我非常广泛的想法。
化学工程。分子结构和性质的类型不知何故是无限的。对于在制药领域工作的化学科学家来说,预测给定分子的生物反应是一项非常具有挑战性的任务。在实践中,这意味着在评估一种新分子的有效性和安全性之前要进行大量的临床实验。这个数据集提供了一系列不同的分子,每个分子都有 1776 个分子描述符。鉴于 1776 个分子描述符的细节,药剂学专家几乎不可能用分析方法预测生物反应,但数据科学方法使之成为可能。
工业工程。假设你在一家非常大的汽车制造厂负责降低生产成本。我敢打赌,你首先想到的是建筑本身。但是在作为最后一步的强制性汽车测试中,实际上花费了很多钱。汽车制造商必须确保每辆新车的安全性和可靠性。梅赛德斯-奔驰发布了一个数据集,包含 377 辆正在接受测试的汽车的描述符,以及相关的答案“通过测试”或“否”。他们想要一种已经学会预测汽车是否通过测试的算法。他们表示,最终算法将有助于更快的测试,导致他们所说的“更低的二氧化碳排放”(测试期间),但首先它将有助于提高生产率和租赁能力。
城市工程。几年前,华盛顿特区有一个问题需要解决。他们想更好地了解他们的自行车共享系统是如何使用的:高峰时间,最活跃的出发和到达码头等。他们把这个问题变成了一个数据科学问题,他们要求竞争对手在 Kaggle 上预测在给定日期和时间使用的自行车数量。数据集中的描述符通常是与天气和日期相关的信息(季节、星期几、月份等)。人们做了很好的可视化,带来了对服务使用方式的直观理解(见下图)。通过共享自行车需求预测系统,他们为物流员工提供了一个强大的工具,帮助他们在城市中调度自行车车队。
前面的三个例子实际上都是关于在给定环境下统计预测输出的。根据机器学*模型,有时可能会得到为什么做出预测的解释。我们经常提到“白盒”和“黑盒”这两个术语。黑盒模型很难理解(通常是神经网络),但白盒模型提供了选项(如决策树)。在白盒里,有时会发现完全出乎意料的奇怪原因!
从这个故事开始,我们就一直在讨论工程师和科学家使用数据科学的原因。此外,在其他领域存在更多的用例。你知道优步正在预测它的需求吗?然后,该公司能够派遣更多的司机前往非常活跃的地区,或者建议他们更容易找到客户的路线。而且,酒吧可能会利用他们的销售数据来准确预测在一年中的特定日期和时间他们能卖出多少啤酒!事实上,数据科学绝对不仅仅是为了科学人。每个人,制造商、销售商或任何组织,都能够通过利用数据创造新的价值。
我们如何在 DataVenture 为每个人推广数据科学和人工智能
DataVenture 是一个学生组织,旨在建立一个数据科学和人工智能领域的社区。自 2017 年以来,我们在法国贡比涅理工大学(UTC)推广这些领域。
通过每两周组织一次技术讲座、会议(研究人员、公司)和研讨会,我们努力为每个人推广数据科学。我们希望让未来的工程师意识到,一方面数据科学可以解决他们的问题,另一方面他们不需要成为计算机科学家。我们提供了广泛的数据科学相关主题,并在讲座中进行了介绍和讨论。通过伟大的会议(学术会议、、脸书、微软等),我们展示了这个领域能带给他们多远。此外,从我们的角度来看,在研讨会期间为他们提供合适的工具也很重要。不仅科技知识很重要,法律和道德等话题也是不可忽视的。与我们来自 Picasoft 的朋友一起,我们也带来了法律演讲。
我们在 DataVenture 最活跃的成员之一,学*机械工程并一直对它充满热情,现在是达索航空公司的数据科学实*生。他实际上正在使用机器学*技术来解决他的力学问题:混合他对力学和统计学的理解,以选择正确的特征和正确的可理解模型来预测一个复杂问题的答案,这个问题几乎不可能用纯分析研究来解决。
那么,我们的任务成功了吗?我相信是的!
你想加入我们的data venture社区吗?您可以在Twitter上关注我们,加入我们的 脸书群 ,阅读我们的 媒体博客 ,在我们的 网站 上查看我们的最新活动!特别感谢Matt和 DataVenture 人的点评!