TowardsDataScience 博客中文翻译 2016~2018(三十五)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

应用人工智能帮助人们戒烟:早期结果

原文:https://towardsdatascience.com/applying-artificial-intelligence-to-help-people-quit-smoking-early-results-a3e5581d560?source=collection_archive---------3-----------------------

注意:报告的所有数据均来自实际用户,经过净化以保护其个人信息。我们的数据收集和报告系统旨在保护用户个人信息的隐私。

TL;博士:我们要让世界摆脱吸烟,这很有挑战性,但我们有一个计划,需要你的帮助。在 报名 cue.kiwi.ai

你最后一次考虑戒烟是什么时候?如果你像世界上 10 亿吸烟者中的任何一个,那很可能是今年。如果你碰巧有一个智能手表,我们可能有办法证明它的购买,我们的应用程序 Cue 是你减少吸烟的冠军

保持任何习惯的一个关键部分是一致性和易用性。如果改变我的饮食习惯需要我随身携带一个写字板,记录我吃的所有东西,那么我正在改变两个习惯:1)吃得更健康 2)记录饮食…这在一个谷歌搜索一个东西要花更长时间(0.59 秒)的世界里是相当困难的

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

Illustrative Typical Behaviour Change Apps/Products

当我们开始制作减少吸烟的软件时,我们有两个关键原则:1)它不能让用户做更多的工作 2)它必须提供超越新奇阶段的好处…我们不会编造虚荣指标

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

  1. Machine Learning to deliver an extremely personalized experience, that drives actual benefit

我们已经将类似的思维应用于跟踪香烟;我们开发了一种算法,可以自动检测你何时吸烟。我们的应用程序是你的冠军,它通过对平均吸烟间隔时间进行微小但持续的改进来推动你戒烟

kiwi . ai 和 Cue 背景:

四年前,我们制作了第一个追踪你吸烟时的原型,这里有一个开源项目的链接;当时还没有技术和市场的采用,我们也不打算为吸烟定制可穿戴设备……所以我们等待着

在那段时间里,我们开发并授权了运动识别软件,该软件使用嵌入式神经网络以低功耗、高精度地跟踪运动。从那时起,我们已经支持了 20 多个客户,包括大型技术公司的大品牌,如 IBM、OEM 设备制造商、机器人公司和医疗保健提供商

我们经常会考虑一些用例,这些用例将会为消费者实质性地解决问题,让他们的健康状况变得更好,为他们省钱,让他们更快乐。也许这是因为我们仍然处于可穿戴设备的早期阶段,但我们仍然需要给消费者一个佩戴可穿戴设备的理由

减少吸烟

吸烟是一个真正的问题。它杀死人,花费医疗系统一吨,对除了卖香烟的人之外的所有玩家都是可怕的

这也是一个难以解决的问题,否则我们仍然不会有世界各地的十亿烟民,他们每年至少尝试戒烟一次,但收效甚微

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

Kiwi is on a mission to make the lives of at least a billion people happier and healthier

这是一种能带来实实在在的健康和经济利益的产品,例如,如果它起作用,你知道,你会感觉+看起来更好,每个人(包括你爱的人、银行账户、医生……都更开心),这是使用手表应用程序比使用电话能提供好 10 倍的东西

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

Cue App for Android Wear

这也有助于我们团队中的两个人是吸烟者,所以我们有第一批豚鼠来测试我们软件的最早版本。在与数百名客户交谈后(这很容易,因为他们通常在建筑物外闲逛),我们继续完善设计、功能和用户体验

我们最近运行了一个初始用户组,基于我们的目标人口统计,但我们不知道的人。我们发现我们的朋友过于担心我们的感受

我们测试的第一个假设是,人们是否真的会比平时等待更长的时间来抽下一支烟。在我们应用程序的第一版中(由于我们在动作识别方面的工作,自动跟踪率达到 99%),我们对一个人群进行了 30 天的采样

以下是我们目前收集的数据的简要概述:

要点: 人们会比平时等待 更长时间,他们 经常在下午 3 点 吸烟,每天的吸烟模式变化很大(毕竟人生是不可预测的),而 总的趋势是一致地减少吸烟 如果部署了一个 极其个性化的计划 来减少吸烟

**Hypothesis 1: Do People Wait for Suggested Cigarette Time?**Before Suggested Time: 0359
After Suggested Time: 1049
Total Cigarettes : 1408**Answer so far: YES**

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

Most Common Time To Smoke (3PM “coffee break”)

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

Our Market Test User Base : Wide Variations on a Daily Basis

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

Up to 50% Reduction Across 3 month Period Over a Testing Sample User Base

验证我们的假设

这就是我们需要你帮助的地方;我们在多伦多的一个小组中进行了本地测试,每个小组都成功实现了高达 50%的减排。

我们现在希望将我们的应用程序推广到尽可能大的群体中;人们进一步测试,并帮助我们进一步完善我们的产品,以杜绝吸烟

该应用程序的习惯改变部分通过积分鼓励你为下次吸烟多等几分钟,这些积分可以让你在星巴克/优步获得奖励,双赢!我们已经请了一些最好的戒烟专家来找出我们计划中的漏洞,他们都鼓励我们继续这个项目。但是没有什么比 10,000 个更健康的用户更能证实一个假设,所以我们需要你的帮助

如果你吸烟,请注册或者通过与吸烟的朋友分享来帮助你。只需轻点几下鼠标,你就能让某人的生活发生巨大变化

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

Cue Product Screenshots

技术方面

这篇文章的剩余部分将讨论我们产品的机器学习方面,包括

  1. 识别每个人独特的运动模式&从所有其他动作中辨别吸烟[自动分类]
  2. 基于个人和综合数据预测一个人何时会吸烟

自动分类:最佳用户体验

我们发现最好的用户体验是用户不需要做任何事情,仍然感觉他们在赢。为了在吸烟时做到这一点,我们需要想出一种方法来自动检测用户何时吸烟。我们通过使用带有动作识别的 kiwi 工具包来实现这一点,就像我们如何计算步数一样,我们检测手到嘴的运动来确定一个人何时吸烟

重要的一点是我们所有的分类算法都在手表上运行;因此,一旦应用程序被下载,没有连接到您的手机或互联网需要让它工作!

神经网络用于分离可能重叠的动作,如举起物体、举手行走或热情交谈

这是一个在线性判别分析中展示这种分离的奇特图表:

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

How Smoking Separates From Walking and Other Movements

预测一个人何时可能吸烟

为了更好地帮助人们将吸烟的间隔时间推得越来越长;需要预测你预期的下一支烟会是什么时候,从这里我们稍微增加一点时间来保持行为改变的微妙影响

下面是一周内人们每天吸烟的情况:

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

See how there are breaks each day and Saturday and Sunday are a bit later than weekdays

预测以及为什么这是有价值的

类似于能够自动检测一个人何时吸烟,可以应用一种方法来预测用户一天中何时吸烟,像大多数模型问题一样,挑战是如何获得干净的数据,并确保您有一个相关的基准。例如,卷积神经网络可以用于照片,其中不同的 RGB 信号可以分离,以定义带标签的猫和狗照片之间的差异。这如何应用于一天中的几个数据点,比如吸烟次数?

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

Feature Separation For Predicting a Person’s Next Smoke

我们所做的是生成特征,以在我们的整个用户群中进行归纳,从而找到有区别的信息,上图显示了三个特征的示例:

功能 1:当前和上一次 cig 之间的时间
功能 2:当前星期几,格式:[0…6] - >周一…太阳
特征 3:当前时间,格式:格式

使用这些特征,我们能够得出最近 30 分钟或 60 分钟的预测;有了这个,我们可以帮助用户先发制人,通过散步、玩游戏或喝咖啡来控制下次吸烟的冲动,以后还会有更多!

如果你吸烟,请注册或者通过与吸烟的朋友分享来帮助你。只需轻点几下鼠标,你就能让某人的生活发生巨大变化

阿里·纳瓦布约翰·大卫·奇布克以及戴夫·金马哈茂德·埃尔萨夫塔维撰写

附言:我们将尽力回答你的问题,并在本帖中分享常见问题

常见问题:

  1. 这款应用能在 iPhones 上使用吗?可以,但是你需要一个智能手表来和你的 iPhone 配对
  2. app 准备好了吗?是的,这叫谷歌 Play 商店提示。它目前处于测试阶段,所以我们需要邀请您访问它
  3. 我如何联系 Kiwi,我想提供帮助,我想为我的公司/团队运行一个程序?是最好的联系方式,如果你愿意参与我们会超级开心
  4. 这款应用有什么风险吗?这是测试版产品,每周都会更新,所以有时会出错。也有可能该应用程序对特定类型的用户不立即起作用,这有助于我们改进它
  5. 会消耗我很多手表电池吗?不会。原因有两个:1)我们的动作识别算法已经过一些世界领先公司的低功耗测试;2)我们针对每个人的吸烟模式进行优化,从而减少电池消耗
  6. 我的吸烟模式是独特的,例如,我在斋月禁食,它仍然对我有效吗?是的,我们的产品是成为你教练的软件,只有当它对你的生活非常个性化时才会有用,所以如果你连续一个月在日出和日落时抽两支烟,它会相应地适应
  7. 我已经戒烟了,这个应用程序会有帮助吗?如果你已经放弃了,请不要再开始。如果你不幸故态复萌,我们会努力让你下一次的戒烟尝试变得更好
  8. 该应用程序可以与 vapes 和电子烟一起使用吗?是的。请报名。我们将对蒸发设备进行单独研究,并将您添加到等候名单中
  9. 这款应用的价格是多少?该应用程序对市场调查的参与者免费
  10. 你如何为我的吸烟数据保密?kiwi . ai 上的所有项目包括 Cue 都遵守我们公司的隐私政策,可在https://kiwi.ai/#/privacy获得

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

将伦理应用于算法

原文:https://towardsdatascience.com/applying-ethics-to-algorithms-3703b0f9dcf4?source=collection_archive---------11-----------------------

这篇文章是由 GovEx 博客 整合而来的 ,做了一些小的编辑。

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

Photo credit: Josh Riemer via unsplash

当我受雇于我的第一份政府工作时,我必须签署许多文件。其中一些表格表明我已经阅读了市的利益冲突法和相关的道德规范。起初,我并不理解它们的重要性,但随着我在公务员队伍中的职业生涯的继续,我见证了一些人如何破坏公众的信任,从轻微的违规到公然的腐败。随着我被提升到更高的职位,拥有更大的权力,我不仅仅需要签署表格承认我阅读了道德声明;我还必须接受背景调查,手写超过 100 页的问题答案,包括我个人财务的例行披露。随着我获得纳税人资金和决策权的机会增加,评估我的可信度的努力也在增加(当然,滥用这两者的可能性也在增加)。为了让政府运作良好,重要的是“我们人民”相信这种权力不会被滥用。这些工具保护了我、政府,最重要的是,保护了我所服务的公众。

几十年来,政府一直在使用技术来更准确地跟踪事情,使事情更有效率,并做出基于事实的决策。今天,我们正在进入一个新时代,政府领导人越来越多地将决策权从人转向技术,特别是随着人工智能(AI)的兴起。然而, 我们并没有像调查我们赋予权力 的人那样仔细地调查技术工具。这部分是因为我们没有希望我们的技术遵循的一套明确的道德规范(例如,“平等对待每个人”与“公平对待每个人”)。但这也部分是因为政府领导人没有获得持续和系统地调查人工智能的工具,以了解它可能在哪里成功或失败。从社交媒体社交服务我们每天都听到算法如何破坏人们的生活并进一步加剧不信任的故事——通常是在那些已经被边缘化的人群中。

这就是为什么 Joy Bonaguro、Miriam McKinney、Dave Anderson、Jane Wiseman 和我自二月份以来所完成的工作如此重要。2018 年 9 月 16 日,周日,在纽约市的 Data for Good Exchange (D4GX)上,我们公开发布了我们的 政府伦理和算法工具包(其他也是!) 。该工具包旨在帮助政府管理人员描述将权力转移给自动化工具的相关风险,并有望妥善管理这些风险。这是我们的第一步,我们预计将会有一段漫长的路要走,才能将我们应用于人类的道德原则应用于我们的技术。

在 D4GX,我们举办了一个研讨会,邀请参与者将工具包应用到他们正在处理的问题或我们提供的示例场景中。在房间里呆了一个小时后,我们从参与者那里收集了很多很好的反馈,非常感谢我们一起进行的对话。我们已经收集了由此产生的建议,并将在不久的将来将它们应用到工具包中。下个月,我们将在 2018 MetroLab 峰会上与政府领导及其学术合作伙伴举办类似的研讨会。我们期待着更多的反馈,但更重要的是,我们希望那些参加研讨会的人能够在他们与我们一起度过的时间之外,继续将该工具包应用到他们的项目中…

毕竟,维护道德标准不仅仅要求人们填写表格并签字;它要求在怀疑存在伤害时进行调查——无论是有意还是无意。这需要认识到公众信任何时受到损害,并找出如何恢复这种信任。因此,这个工具包不仅仅是一个在人工智能项目开始时要完成的清单。更确切地说,它是一个“活的指南”,在该技术仍处于公共服务阶段时,可以持续地用于对话和管理实践。

我们还认为,该工具包的应用范围远远超出了公共部门,只需做一些调整…例如,医疗从业者在使用像 IBM Watson Health 这样的解决方案来帮助诊断和治疗患者时,可以应用该工具包的一个版本。风险投资公司可以使用不同的版本,确保他们的自动化投资不仅符合他们的组织使命和价值观,也符合他们将影响的社区的使命和价值观。大型科技公司甚至可能使用不同的版本来思考他们的产品如何可能无意中导致更多的过滤泡沫或更深的边缘化。

如果您对使用该工具包感兴趣并需要帮助,我们很乐意提供帮助!请在govex@jhu.edu联系,访问 GovEx 联系页面,或在推特上找到我们。当然,你也可以通过工具包网站联系我们,https://ethicstoolkit.ai/

将 GANs 应用于超分辨率

原文:https://towardsdatascience.com/applying-gans-to-super-resolution-59224763f960?source=collection_archive---------17-----------------------

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

SRGAN Results from Ledig et al. [3]

生成对抗网络在深度学习中有很多应用。使用 GANs 可以更好地解决的一个有趣问题是超分辨率。超分辨率是一项将图像从 90 x 90 的低分辨率尺寸放大到 360 x 360 的高分辨率尺寸的任务。在本例中,90 x 90 到 360 x 360 表示放大倍数为 4 倍。

超分辨率的一个解决方案是训练深度卷积网络,该网络接收数据,其中输入是低分辨率补丁,标记的输出是高分辨率补丁。这不同于许多监督学习问题,其中输出是 1 或 0 或者类预测的向量。在这种情况下,输出是一个图像。这些网络通过一系列卷积、全连接或转置卷积层从低分辨率面片学习到高分辨率面片的映射。例如,该网络可以获取一个 30 x 30 的低分辨率面片,对其进行几次卷积,使特征图类似于 22 x 22 x 64,将其展平为一个矢量,应用几个完全连接的层,对其进行整形,最后通过转置卷积层将其上采样为 30 x 30 的高分辨率面片。

这样做的一个问题是很难设计一个有效的损失函数。用于此目的的常见损失函数是网络输出面片和地面实况高分辨率面片之间的 MSE(均方误差)。这个损失函数的一个解决方案是使用 Johnson 等人开发的感知损失函数[1]。该损失函数是通过取网络输出面片和高分辨率面片之间的 VGG 网络[2]的高层中的特征映射激活的差异来计算的。因此,特征图激活被表示为感知损失度量。

Ledig 等人[3]证明,GANs 进一步改善了这种损失函数的发展。除了感知的、内容的损失之外,还增加了对抗性的损失,以进一步将图像推向自然的图像流形。GAN 框架被集成以表示由生成器创建的面片是否类似于高分辨率面片的基本事实集合。然后,通过对抗损失以及感知损失(由来自输出补片和地面真实补片的 VGG 特征图激活的差异表示)来计算发生器网络的误差。

看到如何使用多个损失函数来优化神经网络是非常有趣的。在这种情况下,每个损失函数都提供了对问题的独特视角。感谢您的阅读,如果您对这个话题感兴趣,请查看下面的论文!

参考文献:

[1]实时风格转换和超分辨率的感知损失。贾斯廷·约翰逊,亚历山大阿拉希,李菲菲。

[2]用于大规模图像识别的非常深的卷积网络。卡伦·西蒙扬,安德鲁·塞斯曼。

[3]使用生成式对抗网络的照片级单幅图像超分辨率。Christian Ledig、Lucas Theis、Ferenc Huszar、Jose Caballero、、Alejandro Acosta、Andrew Aitken、Alykhan Tejani、Johannes Totz、、史久镛。

逻辑回归在 PubMed 中的应用

原文:https://towardsdatascience.com/applying-logistic-regression-to-pubmed-45856503a52b?source=collection_archive---------24-----------------------

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

“该指南是权威性的。现实往往是不准确的。”

――道格拉斯·亚当斯,《银河系漫游指南》

在我的上一篇文章中,我们研究了如何从 PubMed 收集的大量医学文章中获得有意义的见解,PubMed 是一个免费的生物医学和生命科学文献档案库。这一次,我们将继续与医学文章合作,创造一些完全不同的东西。我们将使用监督机器学习来识别特定主题的文章。

由于数据科学家是一个长时间保持坐姿的人(你现在可能正在伸直你的背),我决定建立一个文本分类模型来预测一篇文章是否是关于肌肉骨骼疾病的。

为了实现这一点,我们将需要一个带标签的数据集,它将包含等量的关于肌肉骨骼疾病和其他医学状况的文章。一种方法是遵循这些简单的步骤。

收集文章

这很简单。物品存放在这里。我们只需要下载合理数量的文件并解压。

解析 XML 文件

像上次一样,我们将使用这个漂亮的 Python 解析器从文件中获取必要的数据。

#return list of dictionariesdicts_out = pp.parse_medline_xml('data/pubmed19n0001.xml.gz', year_info_only=False, nlm_category=False)

因此,每篇文章都将由一个包含所有基本属性的字典来表示,如标题、摘要、pmid、作者、期刊、出版日期等。幸运的是,在我们的小实验中,我们真正需要的两样东西是摘要和网格术语。

处理网格术语

你会问我,这些术语是什么?MeSH(医学主题词)是美国国家医学图书馆的受控词汇词库,用于为 PubMed 检索文章。本质上,它是一个按层次排列的医学术语词汇表,每个医学术语都有一个唯一的 ID。由于 MeSH 经常用于描述 PubMed 的期刊文章的主题内容,我们可以使用 MeSH 术语作为一篇文章是否是关于肌肉骨骼疾病的良好指标。

当然,我们可以从 MeSH 官方网站手动收集与肌肉骨骼疾病相关的 MeSH 术语,然而,对此有一个更简单的解决方案。你可以在 NLM 网站上找到一个名为 d2019.bin 的 ASCII 文件,其中有完整的网格术语列表。如您所见,该文件的结构很难处理。这是一个网状记录的样子。

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

MeSH record

我们需要做的就是收集属于网格树的期望部分(C05)的所有网格 id。为此,我们将查看词汇表中的所有记录,并获取树位置(表示为“MN”)以 C05 开始的所有记录的网格 id(表示为“UI”)。注意,一些网格术语可能有几个树位置。

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

MeSH IDs related to Musculoskeletal Diseases (a fraction of a full list)

好了,现在我们准备好给数据集加标签了。假设我们的文章已经存储在数据库中(假设 MongoDB ),通过检查一篇文章是否具有属于新收集的 C05 网格 id 列表的网格 id,很容易对它们进行标记。完成这项任务的有效方法是使用 Celery 来并行处理工作。

接下来是激动人心的部分

为了将给定的抽象分类到这两个类别中的一个,我们将建立一个逻辑回归模型。但是首先,我们需要改变摘要的表示。我们将使用通用语句编码器将每个摘要编码成一个高维向量。通用句子编码器是在大型语料库上预先训练的,可以用于各种任务(情感分析、分类等)。该模型以单词、句子或段落作为输入,并输出 512 维向量。

最后,我们将使用 Python 的 scikit-learn 库来拟合 Logistic 回归模型并进行预测。

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

Confusion matrix

看起来我们做得很好。混淆矩阵表明,我们的模型在 84%的情况下正确预测了肌肉骨骼疾病的摘要。其他主题的摘要在 86%的情况下被正确预测。

结论

由于医学文献通常使用相似的术语,并且有大量的文章描述了一种以上的疾病,因此很难达到 100%的准确性。然而,这个例子告诉我们,建立一个可靠的分类模型并使用它来准确地识别特定主题的医学文章是可能的。随着科学出版物的数量每年增长越来越快,使用机器学习来促进搜索并自动将小麦从谷壳中分离出来变得越来越重要。

应用机器学习对无监督文本文档进行分类

原文:https://towardsdatascience.com/applying-machine-learning-to-classify-an-unsupervised-text-document-e7bb6265f52?source=collection_archive---------3-----------------------

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

Fig: Text Classification

文本分类是一个问题,其中我们有一组固定的类/类别,并且任何给定的文本都被分配到这些类别之一。相比之下,文本聚类的任务是将一组未标记的文本分组,使得同一组中的文本(称为)彼此之间比其他簇中的文本更相似。

在这里,我自己创建了一个文档,其中包含两种与板球旅行相关的句子。

**document** = [“This is the most beautiful place in the world.”, “This man has more skills to show in cricket than any other game.”, “Hi there! how was your ladakh trip last month?”, “There was a player who had scored 200+ runs in single cricket innings in his career.”, “I have got the opportunity to travel to Paris next year for my internship.”, “May be he is better than you in batting but you are much better than him in bowling.”, “That was really a great day for me when I was there at Lavasa for the whole night.”, “That’s exactly I wanted to become, a highest ratting batsmen ever with top scores.”, “Does it really matter wether you go to Thailand or Goa, its just you have spend your holidays.”, “Why don’t you go to Switzerland next year for your 25th Wedding anniversary?”, “Travel is fatal to prejudice, bigotry, and narrow mindedness., and many of our people need it sorely on these accounts.”, “Stop worrying about the potholes in the road and enjoy the journey.”, “No cricket team in the world depends on one or two players. The team always plays to win.”, “Cricket is a team game. If you want fame for yourself, go play an individual game.”, “Because in the end, you won’t remember the time you spent working in the office or mowing your lawn. Climb that goddamn mountain.”, “Isn’t cricket supposed to be a team sport? I feel people should decide first whether cricket is a team game or an individual sport.”]

创建上面的文档是为了展示如何将句子分为两个不同的类别,因为这里只提到了两种句子。

因此,我们现在需要导入必要的库,我们开始吧:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
import numpy as np
import pandas as pd

这里我们使用了 TfidfVectorizer。那么什么是 TF-IDF 呢?

在信息检索或文本挖掘中,术语频率-逆文档频率也称为 tf-idf,是一种众所周知的评估文档中单词重要性的方法。tf-idf 也是将信息的文本表示转换成向量空间模型(VSM)的一种非常有趣的方式。

谷歌已经在用 TF*IDF(或者 TF-IDF,TFIDF,TF。IDF,艺术家原名 Prince)作为你的内容的排名因素已经很长时间了,因为搜索引擎似乎更注重词频而不是计算关键词。

TFIDF 是一种信息检索技术,它衡量术语的频率(TF)及其逆文档频率(IDF)。每个单词或术语都有其各自的 TF 和 IDF 得分。一项的 TF 和 IDF 得分的乘积称为该项的 TFIDF 权重。

TFIDF 算法用于对任何内容中的关键字进行加权,并根据该关键字在文档中出现的次数为其分配重要性。更重要的是,它检查关键字在整个网络中的相关性,这被称为语料库*。

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

TF-IDF weights formula

我们必须使用 TfidfVectorizer 类创建矢量器,以适应和转换我们创建的文档:

vectorizer = TfidfVectorizer(stop_words='english')
X = vectorizer.fit_transform(document)

我们现在需要理解我们将在文本文档中使用的 K-means 算法。

K-means 是解决众所周知的聚类问题的最简单的无监督学习算法之一。该过程遵循一种简单且容易的方式,通过先验固定的一定数量的聚类(假设 k 个聚类)来对给定数据集进行分类。主要思想是定义 k 个质心,每个聚类一个。因为不同的位置会导致不同的结果,所以这些质心应该被巧妙的放置。因此,更好的选择是将它们放置在尽可能远离彼此的地方。下一步是获取属于给定数据集的每个点,并将其与最近的质心相关联。当没有点悬而未决时,第一步完成,早期分组完成。在这一点上,我们需要重新计算 k 个新的质心作为上一步得到的聚类的重心。在我们有了这 k 个新质心之后,必须在相同的数据集点和最近的新质心之间进行新的绑定。

我们现在将在下面的矢量化文档中实现 k-means 聚类算法:

true_k = 2
model = KMeans(n_clusters=true_k, init='k-means++', max_iter=100, n_init=1)
model.fit(X)

我们将获得以下输出:

Out[5]: 
KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=100,
    n_clusters=2, n_init=1, n_jobs=1, precompute_distances='auto',
    random_state=None, tol=0.0001, verbose=0)

现在执行下面的代码来获得质心和特征

order_centroids = model.cluster_centers_.argsort()[:, ::-1]
terms = vectorizer.get_feature_names()

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

Centroids

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

terms

现在我们可以打印出它们所属的簇的质心

for i in range(true_k):
 print(“Cluster %d:” % i),
 for ind in order_centroids[i, :10]:
 print(‘ %s’ % terms[ind])

我们将得到下面的输出

**Cluster 0:**
 better
 game
 ladakh
 month
 hi
 trip
 stop
 journey
 worrying
 highest
**Cluster 1:**
 cricket
 team
 world
 year
 really
 game
 travel
 place
 beautiful
 skills

我们现在可以预测文本句子,这可以告诉我们该句子属于哪个簇

print(“\n”)
print(“Prediction”)
X = vectorizer.transform([“Nothing is easy in cricket. Maybe when you watch it on TV, it looks easy. But it is not. You have to use your brain and time the ball.”])
predicted = model.predict(X)
print(predicted)

这将产生以下输出:

Prediction
[1]

因此,这里我们得到了预测为[1],这意味着它属于与板球相关的集群 1,因此我们的测试句子也在谈论板球的事实。所以我们的预测是正确的。我们也可以用其他句子来测试一下,看看这个是否有效。这个模型并不总是能给你准确的结果,但是为了得到更准确的结果,我们需要更多的数据或更多的文本来改进我们的模型并提供更好的结果。

因此,我们已经建立了我们的第一个文本分类器,它可以预测句子属于哪个类/簇。所以我希望你喜欢这篇文章,请不要忘记在评论区留下你的评论和疑问。也请让我知道,如果你在这里发现任何改进的地方,那将是非常可观的。

你也可以给我发一封关于 vishabh1010@gmail.com 的电子邮件,或者打电话+919538160491 给我。也可以通过 linkedin 联系我。

将机器学习应用于 DevOps

原文:https://towardsdatascience.com/applying-machine-learning-to-devops-5fb7d69ac366?source=collection_archive---------2-----------------------

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

本文是一篇客座博客,作者:安迪·曼,首席技术顾问,Splunk供稿:杰夫·斯潘塞,高级工程师, Splunk

DevOps 和机器学习(ML)之间存在强大的协同作用——以及相关的能力,如预测分析、IT 运营分析(ITOA)、算法 IT 运营(AIOps)和人工智能(AI)。

从概念上讲,ML 代表了 Gene Kim 的“持续学习文化”的编纂和加速。使用 ML DevOps,团队可以挖掘大量复杂的数据集,检测模式和反模式,发现新的见解,迭代和细化查询,并持续重复—所有这些都以“计算机速度”进行。

同样,ML 在许多方面是下一代自动化,建立在约翰·威利斯和达蒙·爱德华兹为“CAMS”开出的处方之上。通过自动化,DevOps 实现了更快的 SDLC,但对于正常人的理解来说,SDLC 太不透明、太分散、太动态、太短暂。但是像自动化一样,ML 独特地处理由新的交付过程和下一代可组合、原子化和扩展的应用程序产生的速度、数量和各种数据。

在实践中,将 ML 应用于 DevOps 的一些关键示例包括:

跟踪应用交付

来自“DevOps 工具”的活动数据(如吉拉、Git、Jenkins、SonarQube、Puppet、Ansible 等。)提供交付过程的可见性。应用 ML 可以发现数据中的异常——大量的代码、长的构建时间、缓慢的发布率、延迟的代码检入——来识别软件开发的许多【浪费】,包括镀金、部分工作、低效的资源配置、过多的任务切换或者过程减慢。

确保应用质量

通过分析测试工具的输出,ML 可以智能地检查 QA 结果,检测新的错误,并基于发现有效地构建测试模式库。这种由机器驱动的对“已知良好版本”的理解有助于确保对每一个版本进行全面的测试,即使是新的缺陷,从而提高交付的应用程序的质量。

保护应用交付

用户行为模式可以像指纹一样独一无二。将 ML 应用于开发和运营用户行为有助于识别可能代表恶意活动的异常。例如,对敏感回购、自动化例程、部署活动、测试执行、系统配置等的异常访问模式可以快速突出用户使用“已知的不良”模式(无论是有意还是无意),如编写后门程序、部署未经授权的代码或窃取知识产权。

管理生产

分析生产中的应用程序是机器学习真正发挥作用的地方,因为有更大的数据量、用户数量、交易等。与开发或测试相比,这发生在生产阶段。DevOps 团队可以使用 ML 来分析“正常”模式——用户量、资源利用率、事务吞吐量等。—随后检测“异常”模式(例如 DDOS 情况、内存泄漏、竞争情况等。).

管理警报风暴

ML 的一个简单、实用、高价值的用途是管理生产系统中出现的大量警报。这可以简单到 ML 分组相关警报(例如,通过公共交易 ID;一组公共服务器;或者公共子网)。或者可能更复杂,例如随着时间的推移“训练”系统来识别“已知良好”和“已知不良”警报。这使得过滤能够减少警报风暴和警报疲劳。

故障排除和分类分析

这是当今 ML 技术大放异彩的另一个领域。ML 可以自动检测,甚至开始智能分类“已知问题”,甚至一些未知问题。例如,ML 工具可以检测“正常”处理中的异常,然后进一步分析发布日志,将这个问题与新的配置或部署相关联。其他自动化工具可以使用 ML 来提醒操作,打开票证(或聊天窗口),并将其分配给正确的资源。随着时间的推移,ML 甚至可以提出最佳的解决方案!

防止生产故障

在预防故障方面,ML 可以远远超越直线产能规划。ML 可以映射已知的良好利用模式,以预测例如期望性能水平的最佳配置;有多少客户会使用新功能;新促销的基础设施要求;或者断电会如何影响客户参与。ML 在系统和应用程序中发现了不透明的“早期迹象”,使运营部门能够以比一般响应时间更快的速度开始补救或避免问题。

分析业务影响

理解代码发布对业务目标的影响对于开发运维的成功至关重要。通过综合和分析真实用户指标,ML 系统可以检测好的和坏的模式,以便在应用程序出现问题时向编码人员和业务团队等提供“早期预警系统”(例如,通过早期报告购物车放弃增加或缩短的买家旅程);或者非常成功(例如,通过早期检测高用户注册或点击率)。

当然,对于 ML 来说还没有简单的按钮。智力、经验、创造力和勤奋是不可替代的。但是我们今天已经看到了很多这样的应用,随着我们继续拓展边界,天空就是极限

迁移学习在自然语言处理和计算机视觉中的应用

原文:https://towardsdatascience.com/applying-transfer-learning-in-nlp-and-cv-d4aaddd7ca90?source=collection_archive---------0-----------------------

在这篇博文中,我将讨论迁移学习的两个应用。我将概述自然语言处理和计算机视觉领域的例子。

这篇博文是迁移学习系列的第二篇。可以找第一篇博文,里面解释了迁移学习的基本概念,这里

自然语言处理

我之前的一篇博文讨论了现在很多 NLP 管道是如何使用单词嵌入的。与一次性编码相比,这些单词嵌入是一种更具信息性的单词表示方式。它们被广泛使用,并且存在不同的变体。典型地,这些变体在它们所源自的语料库中是不同的,例如维基百科、新闻文章等。,以及嵌入模型的差异。了解这些模型和语料库的背景对于了解单词嵌入的迁移学习是否合理是很重要的。人们通常不会把单词嵌入的使用称为迁移学习,但我不同意,因为它与计算机视觉中的迁移学习有相似之处。本质上,使用单词嵌入意味着您正在使用特征或嵌入网络将单词转换为信息向量。

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

Different approaches exist to represent words in NLP (a word embedding like representation on the left and a BoW like representation on the right). With word embeddings a machine learning model can leverage the relationships that exist between different words.

即使 word2vec 已经 4 岁了,但它仍然是一种非常有影响力的单词嵌入方法。另一方面,最近的方法如 FastText 已经使单词嵌入在许多语言中可用。与单词包方法相比,来自 word2vec 或 FastText 的嵌入是一个重大进步。然而,它们的有用性通常是由问题域决定的。

假设您正在为销售人员构建一个新闻推荐服务。销售人员希望收到对他们销售的产品感兴趣的公司的消息。新闻文章中使用的词汇通常是相当通用的,这意味着所使用的词汇受到大多数单词嵌入的支持(取决于它们被训练的语料库)。此外,如果你让销售人员收集他们连续几周阅读的新闻文章,那么你马上就会有一个大的带标签的语料库。通过能够重用单词嵌入,推荐引擎的性能可能会比简单的 BoW 模型好得多。

另一方面,设想你要对法律合同进行话题分类。不是任何类型的法律合同,而是竞争法背景下的法国法律合同。这些类型的数据集通常没有标记,或者只有有限的一组标记文档可用。下一节将描述为什么开箱即用的迁移学习在这种情况下只能让您到此为止:

  • 词汇外(OOV)单词是在训练期间没有见过的单词。虽然 word2vec 和 FastText 是在例如 Wikipedia 或其他 copora 上训练的,但是使用的词汇是有限的。在训练中,不经常出现的单词经常被忽略。这意味着竞争法法律合同中的特定领域词语可能因此得不到支持。当使用预先训练的单词嵌入时,通常检查 OOV 单词并用 UNK 记号(未知单词记号)替换它们,并且所有这些单词被分配相同的向量。如果语料库是特定于领域的,这是非常无效的,因为特定于领域的单词通常具有很多含义。如果大部分(有意义的)单词被 UNK 代币代替,那么模型将不能学到很多东西。
  • 标准预训练单词嵌入的替代方法是在大型无监督文档集上微调嵌入。请注意,这只是在有大量文档可用时的一个选项。这意味着,如果你有一个大的竞争法语料库,你可以从其他更一般的单词的预训练单词嵌入开始,训练特定领域单词的单词嵌入。通常,从预先训练的单词嵌入开始会加快整个过程,并且会使训练你自己的单词嵌入更容易。注意,使用开箱即用的单词嵌入仍然比较困难,并且需要一些关于如何为单词嵌入训练准备语料库的知识。

我强烈建议你阅读这篇关于单词嵌入现状的优秀博文。在处理有限数量的数据时,考虑这篇博客中提到的问题和解决方案是创建健壮的 NLP 系统和单词嵌入的关键。

Gensim、spacy 和 FastText 是三个很好的框架,允许您在机器学习应用程序中快速使用单词嵌入。此外,它们还支持自定义单词嵌入的训练。查看这个 gensim ,这个 spacy 或者这个 FastText 教程了解更多!

计算机视觉中的迁移学习

深度学习方法已经在计算机视觉领域取得了重大成功。而不是必须手动定义特定于问题的特征,例如,梯度方向直方图(HoG)特征、颜色特征等。,深度学习允许从业者训练以原始图像作为输入的模型。

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

Based on the type of problem, different types of HOG features need to be defined. These are one class of visual features that can be used in computer vision. Note the similarity with the features that extracted by convolutional networks below.

要素定义的原始复杂性现在已经转向定义网络的复杂性。虽然体系结构经常被重用,但是在构建网络体系结构时没有单一的策略。通常,深度学习技术已经被发明并应用于对巨大数据集的研究设置中(如 ImagenetMS Coco )。为了提高这些大型数据集的性能,研究人员提出了深度和复杂性不断增加的网络架构。这些架构导致具有数百万参数的模型(通常)不可扩展到小型图像数据集。在少于 5000 个图像的数据集上训练诸如 ResNet 或 VGG 网的架构只会导致显著的过度拟合。最近的深度学习趋势带来了重大进步,但似乎只有小数据集的数据科学家被冷落了。

事实证明,深度学习网络学习分层的特征表示(见这篇博文by distilt)。这意味着较低级别的层学习较低级别的特征,例如边缘,而较高级别的层学习较高级别的、但不可解释的概念,例如形状。当在不同的数据集上训练网络时,也会出现这种等级要素表示的想法,这表明它们可以在不同的问题域中重复使用。

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

Being able to distinguish lines and shapes (left) from an image makes it easier to determine if something is a ‘car’ than having to start from the raw pixel values. Transfer learning allows you to leverage learned patterns from other computer vision models.

当在计算机视觉问题上使用迁移学习时,使用两种方法。

  • 首先,如果有相当数量的图片(每类超过 1,000 张图片),您可以使用在不同数据集上训练的模型的权重来初始化新模型。在训练过程中,您将保持一定数量的层(通常是第一个卷积层)不变,并优化更高层的参数。目标是减少需要优化的参数数量,同时重用较低级别的层。无论问题领域如何,较低级别的层最有可能是相似的,并且模型必须能够自由地将较高级别的层组合在一起,具体到问题。
  • 第二,如果只有很少的图片可用,Keras 的 API 允许你加载预训练的网络,并在训练期间保持几个层不变。在下一节中,我将再次讨论两个用例,分别是迁移学习有用的情况和无用的情况。

想象一下,在野生动物保护领域工作,您想要对出现在实时摄像机画面上的不同动物进行分类。尤其是如果你正在尝试监测濒临灭绝的物种,你可能无法收集大量的标记数据。假设预训练的网络通常在广泛的概念领域(从食物到动物和物体)上被训练,使用预训练的网络作为特征或初始化器肯定是一个选项。

另一方面,假设您需要为肿瘤学家分析放射图像。这些图像不是典型的猫狗图像,因为它们是对病人进行扫描的输出。这些图像虽然被转换为 RGB 图像,但通常以灰色阴影显示扫描结果。虽然预训练的网络能够从 RGB 图像中检测形状和边缘,但是它们很可能很难检测射线照相图像上的形状和边缘,因为这些形状和边缘不在预训练模型的训练数据中。此外,在医疗场景中,标记的数据量通常很低。有几种技术可以利用(潜在丰富的)未标记数据,但它们通常需要更多的工作和微调。通常,这些技术试图通过迭代训练每一层来重建图像(使用卷积和反卷积层),从而预先训练分类网络的权重。这些技术和预训练网络的组合通常用于改善收敛。

上面提到的计算机视觉中的两种方法都依赖于一个重要的假设:在原始数据集中提取的模式在新数据集的上下文中是有用的。这种有用性很难量化,但它是一个需要考虑的重要假设。地震、超光谱甚至医学图像与 ImageNet 中的图像相似度有限。然而,确定图像包含哪个交通标志依赖于相当相似的模式。理解计算机视觉问题域对于成功应用计算机视觉至关重要。通过了解模型的背景(数据集、技术等。)用于迁移学习,您可以避免在实验中浪费时间,并专注于微调那些可能产生影响的模型。

如果你有任何问题,我很乐意在评论中阅读。如果你想收到我博客上的更新,请在 MediumTwitter 上关注我!

If you have any questions, I’ll be happy to read them in the comments. Follow me on Medium or Twitter if you want to receive updates on my blog posts!

多标签分类方法

原文:https://towardsdatascience.com/approaches-to-multi-label-classification-1cf981ff2108?source=collection_archive---------7-----------------------

图像的多标签分类处理图像可能属于一个以上类别的情况。例如,下图在同一张照片中有一列火车、一个女人、一个女孩和一个按摩浴缸。

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

Photo Credit: Open Image Dataset V4 (License)

有多种方法可以解决这个问题。第一种方法是二元分类法。在这种方法中,我们可以使用“k”个独立的二元分类器,对应于我们数据中的 k 个类。

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

这种方法的最后一层是由 k 个独立的 sigmoid(后勤)激活。类别预测基于物流层的阈值。

这种方法易于理解和训练。然而,这种方法有一个缺点。我们忽略了标签之间的语义关系。例如“人脸”和女人是相关的。人面和少女也是。

标签关系编码的多标签分类

有多种方法来编码标签之间的语义关系。在这篇笔记中,我描述了 3 个不同的想法。

第一种方法是使用图表来创建标签关系。这种标签关系可以是先验知识(参见参考文献[1]、[3])。例如,基于先验知识的分层图可以对“人脸”是“女人”和“女孩”的双亲这一事实进行编码。这种方法可以扩展到创建复杂的结构。例如,我们可以对排斥的概念进行编码——人脸不能是猴子,或者重叠——女人可以既是母亲又是孩子。这种方法的主要问题是处理图形的复杂性,经过一段时间后,它变得专用于特定的域,而不能扩展到其他域。

第二种方法是独立地从数据中学习标签关系。参考文献[2]中有一个早期的例子。标签关系由贝叶斯网络或马尔可夫网络捕获。贝叶斯网络也是一个图形。它可以是无环图形模型,其中每个节点代表一个标签,有向边代表一个标签对另一个标签的概率依赖性。这种图的参数通常可以通过最大似然估计来学习。使用这些图形模型的一个大挑战是理解模型结构的问题。众所周知,贝叶斯网络的精确推理和结构估计都是 NP 难问题。参见参考此处

我们将考虑的最后一种方法是用于多标签图像分类的统一 CNN-RNN 框架,它有效地学习标签之间的语义关系。这种方法的一个很好的参考是王江和团队的论文[4]。在这种方法中,RNN 模型学习联合低维图像-标签嵌入来建模图像和标签之间的语义相关性。图像嵌入向量由深度 CNN 生成。

在这种联合嵌入中,多个标签的概率作为所有标签上的有序预测路径被顺序计算。参考文献[4]中的一张图片给出了关于该架构的良好直觉。

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

RNN-CNN architecture from reference [4]

结论

图像分类问题的最终解决方案取决于问题的性质和标签相互依赖的性质。对于标签的相互依赖性很复杂的领域,RNN 和 CNN 的联合方法似乎很有希望。当我开始进行多标签分类的实验时,我将报告这里描述的方法的性能度量。

[1]魏碧,James T. Kwok Mandatory:层次多标签分类中的叶节点预测(链接

[2]郭玉红,顾穗成:使用条件依赖网络的多标签分类(链接)

[3]贾登等。艾尔。:使用标签关系图的大规模对象分类(链接

[4]王江等人艾尔。:CNN-RNN:多标签图像分类的统一框架(链接)

用神经网络逼近工业机器人的动态模型

原文:https://towardsdatascience.com/approximating-dynamic-models-of-industrial-robots-with-neural-networks-2474d1a2eecd?source=collection_archive---------5-----------------------

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

Standard 6-axes industrial robot

工业机器人的运动控制器通常为每个关节轴生成两个循环设定值:位置参考值和扭矩前馈值。轴设定位置由运动学模型计算,而电机转矩由动力学模型计算。

然而,虽然运动学模型通常更容易实现,并且基于众所周知的参数,但是动态模型更复杂,并且基于通常未知并且必须识别的参数(例如惯性、摩擦)。此外,动态模型可能无法准确描述机械结构的所有物理属性,因为并非所有的影响都被考虑到,或者因为一些影响太难建模。例如,通常不考虑关节的弹性行为。

设计一个试图预测现实的固定模型的替代方案是让机器人自己学习其自身动力学的特征。简单的监督学习算法可以理解不同机械结构的特征,并成功地取代动态模型的标准实现。

这种技术可以应用于以下情况:

特定运动结构的动态模型未知或过于复杂,无法进行分析描述。

可用的动态模型过于简单,无法高精度地预测现实。

此外,由于学习算法可以很容易地在线训练(即,当机器人运动时),机器人可以适应动态中长期不可预测的变化(例如,由于机械磨损而增加的摩擦,或者由于负载转移而改变的惯性)。

控制结构

每个机器人轴的控制结构由一个闭环 PID 和一个开环扭矩前馈组成。

计算前馈值的标准方法是求解一个逆动力学函数 D-1,根据当前设置的关节位置(α)、速度和加速度计算电机扭矩(τ):

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

Inverse dynamics

该方程通常通过拉格朗日或牛顿-欧拉方法求解,通常假设为刚体结构。模型的参数是离线确定的,不会随时间变化。

我们现在试图用一个序列神经网络形式的函数逼近器来代替动态模型。

网络通过训练集学习机械结构的动力学,训练集由每个轴的三个特征(位置、速度和加速度)和一个目标标签(扭矩)组成。线下和线上培训都可以。

一旦网络经过训练,它就可以用于实时预测电机扭矩值,这些值将作为前馈控制信号发送到伺服驱动器的电流环路。

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

Controller structure including an online learning function approximator

所使用的神经网络的结构非常简单,包括:

每个轴的设定位置、速度和加速度的一个输入层。

两个全连接的隐藏层,每层 100 个单元,ReLU 激活函数和随机初始化的权重。

一个输出层,每个轴有一个线性单位,代表预测的电机扭矩。

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

Neural network architecture for a 6-axis robot

对于 6 轴机器人,这种特定的网络配置总共需要 12606 个参数。

培训过程

网络训练目前是在完全监督下进行的。强化学习技术(如政策梯度)可用于进一步优化结果的质量,并将在今后的工作中进行研究。

第一个学习步骤包括离线训练,使用机器人运动期间捕获的大量标记数据。单个数据示例包含三个特征(轴位置、速度和加速度)和每个轴的一个目标标签(电机扭矩)。

特别是,编码器位置和电机扭矩在运动过程中被同时记录。然后通过微分从位置计算轴的速度和加速度。

为了使学习过程在输入数据中更加快速和一致,所有特征都以标准缩放形式进行预处理:零均值和单位方差。以下示例显示了为单个轴记录的数据。

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

Recorded features of a training set for a single axis after passing through a standard scaler

使用 RMSprop 优化器实现训练过程,初始学习率为 1e-4。评估的损失函数是标准的最小平方误差。

出于交叉验证的目的,随机抽取 10%的训练数据子集。然后应用常见的正则化技术来减少验证损失:

-学习率衰减:防止目标最优值附近的振荡,并在学习阶段结束时提高精度。

-网络架构:每个隐藏层 100 个单元,以折衷网络容量和训练时间。

-批量大小:随机梯度下降的 200 个样本的小批量。

-早期停止:训练集循环 120 个时期,直到验证损失开始稳定,并且训练停止以避免网络过度拟合。

一旦离线学习到最佳权重,该网络就可以用于实时预测。此外,培训还可以以在线形式继续,以提供适应网络的行为。

扭矩预测

训练好的权重用于根据每个轴的输入状态循环预测电机转矩。

给定网络的浅架构和小层尺寸,矩阵乘法的简单实现仅需要几秒的计算时间就足以实时运行。

与 sigmoid 和 tanh 替代方案相比,ReLU 非线性对于实时计算也是最佳的。

输入数据(轴位置、速度和加速度)与训练中使用的相同系数成比例,然后输入网络。输出预测扭矩值循环发送到伺服驱动器,作为电流回路的前馈值。

出于安全原因,在预测值过高的情况下,扭矩限制器处于活动状态。

结果

用不同的动态结构对神经网络进行测试,并将其转矩预测值与实际电机值进行比较。

惯性恒定的单轴

第一次测试是在具有恒定惯性负载的单轴系统上进行的,并且将标准 FF 模型作为比较基准。

该网络是在 2000 个小样本上训练的。下图比较了实际电机扭矩与标准 FF 模型和神经网络的预测值。在这种情况下,没有前馈被发送到驱动器。

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

Comparison between single axis motor torque values: actual (green), standard FF (purple), NN predicted (red)

预测的扭矩值是相似的,尽管标准 FF 模型提供了真实动态的更详细的表示。

具有可变惯性的单轴

第二项测试也是在单轴系统上进行的,但这次是在不对称的垂直载荷下进行的,这导致惯性根据轴的位置而变化。通过观察对轴定位误差的影响来检查结果的质量。

下图比较了实际电机扭矩和神经网络的预测值。在这种情况下,没有前馈被发送到驱动器。

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

Comparison between single axis motor torque values with variable inertia load: actual (green) and NN predicted (red)

接下来的步骤是将预测的扭矩作为前馈值发送到驱动器:当轴移动时,滞后误差的减少是明显可见的,尤其是在加速阶段。

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

Comparison between axis positioning error values: without torque feed-forward (green) and after applying the NN feed-forward (red)

六轴机器人

最后一次测试是在一个 6ax 铰接机器人上进行的,其有效载荷为 8 千克。

这种情况下的神经网络有 18 个输入单元和 6 个输出值。由于运动链的原因,该系统是高度非线性的,并且每个轴的扭矩取决于所有其他轴的动态状态。

经过一组约 10000 个样本的短期离线训练后,该网络已经能够以相当好的近似值预测每个电机的扭矩值,如下图所示,这是在随机运动期间记录的。

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

Comparison between torque values of the six motors of an articulated robotic arm: actual values (green) and predicted by the NN (red)

使用更深的网络和更大的训练集可能会获得更详细的预测质量。

结论

一个简单的具有两个隐层的前向传播神经网络被测试作为函数逼近器来学习不同运动结构的动态模型。

实际结果表明,即使具有这样浅的架构和小的训练集,网络也可以提供足够好的预测,以允许减少每个轴的定位误差。

该技术显然不是要取代众所周知的结构的动态模型,但它在模型不可用或不够精确的一些应用中具有非常有趣的潜力。

几个优点是:

-它可以应用于任何用户定义的运动学,甚至是具有几个关节的高度复杂的运动学(神经网络的容量可能必须相应地增加)

-它可以预测难以分析建模的影响

-它可以适应力学中与时间相关的变化

另一方面,最明显的缺点是网络的内部结构不是人类可读的:任何关于机械动力学的学习信息都无法提取。

使用 Numpy 近似积分[黎曼/梯形/辛普森/自适应/蒙特卡罗积分]

原文:https://towardsdatascience.com/approximating-integrals-using-numpy-riemann-trapeze-simpsons-adaptive-monte-carlo-f37e3940985f?source=collection_archive---------12-----------------------

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

GIf from this website

积分逼近是计算机科学中非常重要的任务(甚至涉及到神经网络)。今天我想实现不同的积分近似方法。

我们将要使用的功能

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

all of the images are from wolframalpha

总的来说,我们要近似四个不同函数的积分

1\. integral from -8 to 6     x dx = 1890
2\. integral from -10 to 120 (x^2 + 100 - x^5) dx = -497663244000
3\. integral from -10 to 23   sqrt(x) dx = 2/3 (23 sqrt(23) + 10 i sqrt(10))≈73.5361 + 21.0819 i
4\. integral from 0 to pi     x sin(x^2) dx = sin^2(π^2/2)≈0.9513

如上所述,我们已经可以看到解析解的结果。

近似方法

黎曼积分

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

吊架集成

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

辛普森积分

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

适应性整合

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

蒙特卡罗积分

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

如上所述,我们将使用五种不同的方法来估计积分。顺便提一下,在这五种方法中,有四种(除了自适应积分)有一个作为样本数的超参数。增加该值将导致更好的积分近似,

功能 1

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

自适应积分得到了最精确的积分值,其他方法要么低估了,要么高估了。(当然,随着样本数量的增加,它会变得更加精确。)

功能 2

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

对于这个函数,自适应积分方法低估了大量的积分值。

功能 3

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

除了自适应积分法之外,对于少量数据点,其他方法总体上做得相当好。

功能 4

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

有趣的是正弦函数也有类似的结果。

交互代码

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

要访问这篇文章的代码,请点击这里

惊人的资源

Paper from this website

video from this website

最后的话

这是一次很好的回顾,也是一次很好的编程实践。当我摆弄数值时,很明显蒙特卡罗方法积分是一种强有力的方法,但它需要更多的时间来正确收敛。

如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站。

参考

  1. (2018).maths . qmul . AC . uk . 2018 年 12 月 1 日检索,来自http://www . maths . qmul . AC . uk/~ wj/mth 5110/notes/MAS 235 _ lecture notes 1 . pdf
  2. 傅立叶系列 GIF 在 GIPHY 上查找和分享。(2018).吉菲。检索于 2018 年 12 月 1 日,来自https://giphy.com/gifs/fourier-series-HqZuL4RWgf2ms
  3. 面向 Noobs 的 Python 蒙特卡罗集成。(2018).YouTube。检索于 2018 年 12 月 1 日,来自 https://www.youtube.com/watch?v=WAf0rqwAvgg
  4. 蝙蝠侠集成雷欧索斯。(2018).Leios.github.io .检索于 2018 年 12 月 1 日,来自 https://leios.github.io/Batman_Montecarlo
  5. Dhamdhere,m . Sundararajan 和 q . Yan(2018 年)。一个神经元有多重要?。Arxiv.org。检索于 2018 年 12 月 1 日,来自https://arxiv.org/abs/1805.12233

四月版:强化学习

原文:https://towardsdatascience.com/april-edition-reinforcement-learning-e82cfba4d9c2?source=collection_archive---------6-----------------------

9 篇必读文章

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

各种强化学习算法介绍(第一部分第二部分)

by 黃功詳 Steeve Huang — 20 min read.

强化学习(RL)是指一种机器学习方法,在这种方法中,智能体在下一个时间步接收延迟奖励,以评估其先前的行为。它主要用于游戏(如雅达利、马里奥),性能与人类相当甚至超过人类。

在现实世界中学习和表演

通过Eugenio culrciello—6 分钟阅读。

为了与复杂的环境互动,生命体需要产生一个“正确”的动作序列,以实现延迟的未来回报。这些生命实体,或者说行动者,能够感知环境,并对环境和代理先前历史的一系列状态做出反应。

具有 Keras + OpenAI 的强化学习( DQNs演员-评论家模型)

Yash Patel — 24 分钟读取。

让我们想象一下我们用作训练数据的完全随机序列。任何两个序列都极不可能彼此高度重叠,因为它们完全是随机生成的。

论文再现:深层神经进化

Adrien Lucas Ecoffet——20 分钟阅读。

在这篇文章中,我们复制了最近的优步论文“深度神经进化:遗传算法是训练深度神经网络进行强化学习的竞争性替代方法”,该论文令人惊讶地表明,在诸如 Atari 游戏等研究充分的问题上,简单的遗传算法有时比明显先进的强化学习算法表现得更好。

用于基于模型的强化学习的具有随机输入的贝叶斯神经网络

何塞米格尔埃尔南德斯洛巴托 — 9 分钟阅读。

我在这里描述我们最近的 ICLR 论文[1] [ 代码 ] [ 谈话) ],它介绍了一种基于模型的强化学习的新方法。这项工作的主要作者是 Stefan Depeweg,他是慕尼黑技术大学的一名博士生,我是他的共同导师。

模拟器:应用深度强化学习的关键培训环境

由 Cyrill Glockner — 4 分钟读取。

深度强化学习(DRL)是目前人工智能中最令人兴奋的领域之一。现在还为时尚早,但这种技术可以应用于明显且服务不足的市场:希望自动化或优化工业系统和流程效率的企业(包括制造、能源、HVAC、机器人和供应链系统)。

让机器人学会如何移动(简介第一部分第二部分)

诺曼·迪帕洛 — 20 分钟阅读

当想到人工智能时,许多人脑海中浮现的流行图像通常是某种类人机器人,可能穿着闪亮优雅的白色身体,正在下棋或做其他事情。在许多著名的案例中,科幻故事将人工智能描述为体现在机器人中,或者更广泛地说,体现在合成体中。

强化学习可以使用更多的监督吗?

由科迪·玛丽·怀尔德 — 6 分钟阅读。

当我最初读到这篇论文的标题通过预测未来来学习行动时,我满怀希望地认为,它将为一个问题添加一个令人信服的解决方案,这个问题我已经思考了一段时间:在头脑中没有具体目标的情况下,是否有可能教授一个强化学习模型来了解世界。

盗匪进行推荐系统优化

由詹妮尔·罗兰·查姆利 — 7 分钟读完。

任何在亚马逊上购物、在 Spotify 上听音乐、或者在网飞上浏览值得狂欢的电视连续剧的人都体验过个性化推荐。公司使用推荐系统来增加客户参与度和收入。

我们也感谢最近加入我们的所有伟大的新作家,乔纳森·巴拉班克里斯汀·凯尔勒雅各布·茨威格陈伟哲大卫·霍尔茨阿德里安·卢卡斯·艾柯菲哈德里恩吉达尼洛·佩纳拉胡尔·戴夫天空 b 穆罕默德·萨拉赫·马哈茂德德文·‘肉’·加夫尼克里斯·迪南哈里桑卡尔·哈里达斯博士优素福·阿克坦大卫·派恩斯索哈姆·西尔马泰奥·朗切蒂劳拉·费多鲁克以及许多其他人。 我们邀请你看看他们的简介,看看他们的工作。

四月版:走向深度学习

原文:https://towardsdatascience.com/april-edition-towards-deep-learning-aa2a81e48185?source=collection_archive---------5-----------------------

你需要阅读的 12 篇深度学习文章。

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

对于 TDS 来说,到目前为止,2017 年是深度学习年。我们现在拥有一个信息丰富和投机性文章的宝库,但谁有时间在我们的档案中搜寻深度学习的踪迹呢?

我们知道我们的读者都是忙碌的专业人士,所以我们收集了一些顶级文章来帮助你从初学者到专家。

第一步

初学者深度学习作者 Shehzad Noor Taus Priyo (6 分钟阅读),

深度学习的线性代数小抄作者布伦丹·福特纳 (8 分钟阅读)

深度学习的基础数学作者图沙尔·古普塔 (7 分钟阅读)

深度学习硬件作者Eugenio culrciello(6 分钟阅读)

爬山

神经网络架构作者Eugenio culrciello(14 分钟阅读),

给深度学习增加不确定性作者 Motoki Wu (6 分钟阅读),

管道、思维导图和卷积神经网络作者 Naoki Shibuya (11 分钟阅读),

深度学习:反向传播图沙尔·古普塔 (6 分钟读取)

站在山顶

打开神经网络黑盒——感知器作者梅加伦·迭戈·费尔南德斯 (6 分钟阅读)

构建自己的深度学习盒子 Brendan Fortuner (9 分钟阅读)

通过深度学习生成文本Dmitri Iourovitski (5 分钟阅读)

LSTM 举例使用张量流作者罗威尔·阿蒂恩萨 (6 分钟阅读)

我们也感谢最近加入我们的所有伟大的新作家,安娜斯塔西娅·阿诺希娜卢西恩·利塔阿尤什·查达加利纳·德格蒂亚列娃维韦克·亚达夫克里斯蒂安·拉米雷斯本·曼阿内克·达斯普拉桑娜·帕拉苏拉马我们的名册上有 70 多位作家,太多了,无法在此一一列举,但我们向他们每一位表示感谢。我们邀请你看看他们的简介,看看他们的工作。

对话式人工智能聊天机器人——架构概述

原文:https://towardsdatascience.com/architecture-overview-of-a-conversational-ai-chat-bot-4ef3dfefd52e?source=collection_archive---------0-----------------------

这篇文章的目的是给出一个典型的架构概述,以建立一个对话式人工智能聊天机器人。我们将详细回顾架构和各自的组件(本文中引用的架构和术语大多来自我对rasa-core开源软件的理解)。

所以让我们开始吧…

正如本文标题所示,主要方面是—

  1. 它是一个聊天机器人——在本文中,为了简单起见,假设用户将输入文本,机器人将以文本的形式用适当的消息作出响应(因此,我们将不涉及 ASR、语音识别、语音到文本、文本到语音等方面。,根据需要,无论如何都可以使用这些组件增强以下架构

2。这是对话! —这是什么意思?机器人应该以某种方式维护对话的状态,并在当前上下文中响应用户请求(也称为。它需要是上下文感知的)。例如,假设对话流程是这样的——

  • 用户——明天天气怎么样?
  • 明天大部分时间是多云,有小雨。
  • 用户——后天怎么样?(因此,当提出这个问题时,机器人应该记住,这次对话的最近上下文是关于实体“天气”(而不是交通拥堵或预订可用性之类的其他东西,假设它们出现在之前的对话中)。

**3。**这是一个 **AI / ML 驱动的架构:**该模型根据提供的训练数据学习动作(不像传统的基于状态机的架构,它是基于为对话的每个可能状态编码所有可能的 if-else 条件。)

这是一个聊天机器人架构的高级概述。

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

Chatbot architecture — image copyright@ Ravindra Kompella

在我们浏览流程时,我将参考上图中的组件。首先,让我们看看在对话流程的任何给定时刻,我们需要什么来决定适当的回应?

  1. 我们需要知道用户的意图——我们称之为 意图 。意图的几个例子是——“请求天气”、“请求餐馆”等。上例中的意图是“请求天气”。
  2. 我们需要知道请求中的具体意图(我们称它们为 实体 ),例如——什么时候?,哪里?,有多少?等等。,分别对应于从用户请求中提取关于日期时间、位置、数字的信息。这里的日期时间、位置、数字都是 的实体 。引用上面的天气示例,实体可以是“日期时间”(用户提供的信息)和位置(注意,位置不必是用户提供的显式输入,并且如果没有指定,将根据默认的用户位置来确定)。

意图和实体一起将有助于对天气服务进行相应的 API 调用并检索结果,我们将在后面看到。

现在参考上图,代表 NLU 组件( 【自然语言理解】 ) 的方框有助于从用户请求中提取意图和实体。

NLU 成分成分—

  • 一个有监督的意图分类模型,以各种句子作为输入,以意图作为目标进行训练。通常,线性 SVM 将足以作为意图分类模型。
  • 实体提取模型—这可以是预训练的模型,如 Spacy 或 StanfordNLP 库(或),也可以使用一些概率模型,如 CRF(条件随机场)进行训练。

3.现在,由于我们的是一个对话式人工智能机器人,我们需要跟踪迄今为止发生的对话,以预测适当的反应。为此,我们需要一个 dictionary 对象,它可以持久存储有关当前意图、当前实体的信息,以及用户对 bot 之前的问题、bot 之前的操作、API 调用结果(如果有)提供的持久存储信息。这些信息将构成我们输入的 **X,**特征向量。对话模型将要被训练的目标 y、 将是“next _ action”(next _ action可以简单地是对应于我们在训练数据中定义的每个动作的独热码编码向量)。

然后,这将我们带到下一个问题——我们如何获得我们的特征向量的训练值,输入 X

  • 正如我们从 NLU 组件中看到的那样,获取关于意图和实体的信息非常简单。
  • 获取剩余的值()信息,用户将提供给机器人之前的问题、机器人之前的动作、API 调用的结果等。,)有点棘手,这里是对话管理器组件接管的地方。这些特征值将需要从用户将以用户和机器人之间的 样本对话 的形式定义的训练数据中提取。这些 样本对话 应该以这样一种方式准备,即它们在假装既是用户又是机器人的同时,捕捉大多数可能的对话流。

注意— 如果计划从头开始构建示例对话,那么一个推荐的方法是使用一种叫做 **交互式学习的方法。该模型使用该反馈来改进其对下一次的预测(这类似于强化学习技术,其中该模型因其正确的预测而得到奖励)。

这里我就不赘述提取每个特征值的细节了。它可以从我在上面提供的 rasa-core link 的文档中引用。因此,假设我们以所需的格式从样本对话中提取了所有所需的特征值,那么我们可以训练一个像 LSTM 和 softmax 这样的人工智能模型来预测 next_action。 参考上图,这就是’对话管理’组件的作用。为什么 LSTM 更合适?—如上所述,我们希望我们的模型能够感知上下文,并回顾对话历史来预测 next_action。 这类似于时间序列模型(请参见我的另一篇 LSTM 时间序列文章),因此可以在 LSTM 模型的内存状态中得到最好的捕捉。我们想要回顾的对话历史的数量可以是模型的可配置的超参数。

现在, next_action 的预测值可以是这样的—

  • 用适当的消息响应用户
  • 从数据库中检索一些数据(如果我们有的话)
  • 进行一次 API 调用,得到一些符合意图的结果。

如果恰好是 API 调用/数据检索,则控制流句柄将保留在“对话管理”组件中,该组件将进一步使用/保持该信息,以再次预测 next_action、 。对话管理器将基于该动作和检索的结果更新其当前状态,以进行下一次预测。一旦 next_action 对应于对用户的响应,那么**‘消息生成器’**组件就会接管。

消息生成器组件由几个用户定义的模板组成(模板只是带有一些占位符的句子,视情况而定),这些模板映射到动作名称。因此,根据对话管理器预测的动作,调用相应的模板消息。如果模板需要填充一些占位符值,对话管理器也会将这些值传递给生成器。然后,向用户显示适当的消息,机器人进入等待模式,监听用户输入。

基因模型比随机抽样好吗?

原文:https://towardsdatascience.com/are-genetic-models-better-than-random-sampling-8c678002d392?source=collection_archive---------12-----------------------

下面描述的整个实验的代码和结果可以在我的 GitHub 页面找到,作为 Jupyter 笔记本 。使用的基因模型库,py Charles,是我创建的开源项目。还有一个更基础的版本, 查尔斯 ,用 Scala 写的。

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

基因模型总是让我兴奋的事情之一,尽管我不确定我能解释为什么。我猜这是利用自然选择本身的想法,通过让不同的可选解决方案交配、繁殖和变异来寻找给定问题的最佳可能解决方案。但也许这是因为无论这个想法听起来多么激动人心,我都找不到这个概念的任何实际用途——因为学习过程只是试图优化输入,而不是将输入映射到输出的函数。

所以想象一下,当我发现有一篇论文声称基因模型可以用来优化神经网络的结构时,我有多高兴。但是,当我向我有机会与之交谈的另一位数据科学家提出这个想法时,他声称他在研究期间有机会检查基因模型——并表示他发现基因模型就像随机选择解决方案并采取最佳方案一样好。我觉得应该由我来捍卫基因模型和它们的名字,并证明进化比随机进化更好——所以我决定验证这一点。**TL;—**我输了。

设计实验

这样的实验首先需要的是数据。我需要一些我能处理的简单的东西,所以我决定使用众所周知的泰坦尼克号数据集

接下来:决定我将要工作的空间和界限。这意味着我需要决定哪些可能的架构是有效的候选。我提到的论文,以及我阅读的其他讨论,表明在许多情况下,多达 2 个隐藏层的神经网络应该足够了。这篇论文还引用了另一篇文章,声称给定 N 个样本和 m 个输出节点,应该足以学习这些数据的节点数量由下式给出:

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

对于第一个隐藏层,以及:

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

对于第二个隐藏层。我已经决定这些将是我的上限,而第一层的下限将是 3(没有特殊的原因),第二层的下限将是 0(意味着只有一个隐藏层的架构)。由于这是一个二元分类网络, m=2 。另外,我只使用了 70%的数据进行训练,所以 N=623 。这产生了*【3,75】【0,50】分别作为第一和第二隐藏层边界——这给出了 3723 种可能的架构。这是很多,因为我需要计算这个实验的每个可能的选项。所以我决定,既然两个输出节点基本上是相反的概率,我可以忽略一个,用 m=1 ,这样就产生了这些边界:【3,72】【0,14】—*所以现在我有 1050 种可能的架构。还是很多,但是比以前少多了。

我需要选择的最后一件事是,我应该用什么指标来衡量网络。经过深思熟虑,我决定使用 ROC 曲线下面积(有时简称为 AUC)而不是精确度。

实验时间!

我做的第一件事是计算架构空间中所有可能架构的 AUC。我的 MacBook Pro 花了大约 18 个小时来计算所有 1050 种可能性——下面是结果:

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

AUC scores for all 1050 possible architectures

现在是训练遗传模型的时候了,设置一些数字:我已经决定将种群规模设置为 8,最大代数为 10,提前停止的耐心为 2 代(意思是,如果模型在两代后不能击败它的最佳解决方案,它将停止)。我还决定训练模型 5 次,然后平均结果。模型的强度函数(有时称为适应度函数)被确定为:

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

这将保证即使 AUC 分数最小的提升也会对其解决方案的生存几率产生重大影响。如果你现在已经读过这篇文章,你可能已经注意到我使用了一个不同的强度函数。7) —但这并没有太大的不同:我只是简单地使用了一个非线性误差,并且没有牺牲准确性( s=0 )。

结果

平均遗传模型 AUC 得分为 0.891,它平均进化了 3 代——这意味着它平均计算出 8+(37)=29 个不同的解(8 个初始解和每代 7 个解,因为每代的最佳解也会继承到下一代,参见 PyChrales 文档中的精英比率*)。在 1050 个可能的解决方案中,54 个等于或优于通过模型获得的 AUC 分数,占整个解决方案空间的 5.1%。它们的分布如下:

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

a histogram of all AUC values in the solutions space. In red: solutions which are equal or better than the averaged AUC of the Genetic Model

但是这就足够好了吗?这是否意味着遗传模型会比随机抽样表现得更好?让我们看看:在尝试了 n 次次后,得到更好解决方案的概率由下式给出:

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

如果我们画出 p(n) 我们会得到这样的结果:

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

很明显,对于 n=29 ,我们得到 p=0.8 ,这意味着当简单地随机抽样解决方案空间时,有 80%的机会获得更好的架构。事实上, p > 0.5 对于任何 n≥13 ,所以一个遗传模型必须只扫描最多 12 个不同的溶液(并达到相同的 AUC 分数)才能比随机抽样更好。不幸的是,我重试时没有成功。

结论

这看起来很有希望——但是基因模型在这个案例中失败了。虽然这只是一次尝试,因此我不能说我已经证明了遗传模型确实不如随机采样——我将承认,除非得到证明,否则我可能不会用它们来确定我的下一个神经网络的架构。但这确实让我思考一些问题——我们人类进化了这么多,是因为我们是最适者吗——还是可能是任何其他物种,我们只是运气好而已。嗯,我想我们永远也不会知道:-)

参考

[1] D .斯塔塔基斯,“有多少隐藏层和节点?”,国际遥感杂志,第 30 卷第 8 期,2009 年 4 月( PDF )

是机器有偏见还是我们对机器有偏见?

原文:https://towardsdatascience.com/are-machines-biased-or-are-we-biased-against-machines-17982310152b?source=collection_archive---------4-----------------------

一位数据科学家对 ProPublica 关于犯罪预测算法偏差的研究的看法

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

Algorithms: the new boogeyman.

ProPublica 最近发表了一篇谴责在刑事司法系统中使用算法的文章。“机器偏见”这篇文章记录了司法判决过程中预测算法的使用,以及这些算法表现出的令人不安的种族偏见。报告者表明,这些算法系统地低估了白人罪犯的累犯率,高估了黑人罪犯的累犯率。这具有重要的后果,因为累犯——罪犯未来犯罪的倾向——是决定刑期和改造要求的一个重要因素。

正如可以预测的那样(没有任何算法),对这篇文章的反应是压倒性的批评在刑事司法中使用数据科学。虽然这项研究是新闻业的一个重要部分,但我担心它对算法使用的寒蝉效应可能会产生与减轻种族偏见的相反的效果。不幸的是,ProPublica 的文章本身利用了我们的许多认知偏见,这可能最终加剧他们希望解决的问题。

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

ProPublica’s main findings: Prediction algorithms fail differently for black defendants

量化和显著性偏差

理解预测算法如何不同地影响种族无疑是重要的。然而,更重要的问题——尤其是在公共政策的背景下——是算法的性能如何与其他替代方案相比较(当前的基线是特殊的人类判断)。标题“算法有偏见”的含义与“算法比人类更少偏见,更准确”的含义大相径庭(尽管两者可能同时成立)。

算法的缺点是它们实际上量化了它们的预测,这使得我们能够首先对它们的偏差进行事后评估。人类在许多领域做出预测,但他们很少把预测写在纸上,并让任何人在事后分析。当科学家们实际分析了人类预测准确性的数据后,发现它们非常糟糕,并且受到多种类型的偏见的影响。(见 Philip Tetlock 的著作关于所谓的“专家”在预测方面有多糟糕。)

[## 菲利普·泰特洛克在魔鬼经济学电台

众所周知,专家和学者不擅长预测,部分原因是他们不会因为预测失误而受到惩罚…

freakonomics.com](http://freakonomics.com/podcast/how-to-be-less-terrible-at-predicting-the-future-a-new-freakonomics-radio-podcast/)

事前算法预测数据的可用性意味着我们比其他(也许更有害)类型的偏差更容易意识到算法偏差。因此,我们对算法的判断受制于显著性偏差,这扭曲了我们做出客观决策的能力。

我对累犯算法的种族偏见和人类法官的种族偏见之间的比较更感兴趣。(幸运的是,刑事司法是一个实际记录数据和结果的领域,因此可以进行这样的比较——我在看你们这些犯罪学研究生。)对所有可用选项进行比较,将让我们做出比一篇声称算法是新恶魔的文章更明智的决定。

算法厌恶

沃顿商学院(Wharton School)的伯克利·迪特沃斯(Berkeley Dietvorst)最近的研究也表明,我们对算法错误的判断比人类犯同样的错误更严厉。在他的论文“算法厌恶:人们在看到算法出错后错误地避免使用算法”中,Dietvorst 和合著者描述了即使当算法在客观上比人类更擅长决策时,我们在看到它们失败后也避免使用它们。然而,当我们看到人类以同样的方式失败时,我们更容易合理化他们的缺点,原谅他们的错误。

[## 这就是为什么人们相信人类对算法的判断

hbr.org](https://hbr.org/2015/02/heres-why-people-trust-human-judgment-over-algorithms)

算法厌恶可能是对 ProPublica 文章反应的核心。当算法出错时(在这种情况下,当算法错误地获得黑人和白人之间的再犯率时),人们会非常苛刻。即使有人进行了我上面建议的比较研究,并且结果表明算法比人类法官更准确,更少偏见,我们仍然可能避免使用它们,并更严厉地判断它们的错误。

我们当然应该意识到算法的缺点,但也应该意识到我们对算法的固有偏见。**如果事实证明,算法实际上比做出预测的替代方法更少偏差,那么避免它们有可能实际上增加刑事司法系统中的种族主义。**这就是为什么当算法(不可避免地)犯错误时,对算法进行非理性和不适当的指责会产生重大后果。

理解权衡

算法只不过是美化了的优化问题。在这种情况下,统计学家的目标是,“最大限度地提高我们预测累犯的准确性”,并建立了一个程序来准确地做这件事。重要的是要认识到最小化种族偏见与最大化预测准确性是不同的目标。减少偏见当然是一个值得称赞的目标,但当处理统计和不确定性的世界时,在不同的目标之间总是有的权衡。

如果统计学家确实将种族偏见考虑在内,他们模型的预测有效性几乎肯定会下降。这不是我们是否应该减少种族偏见的问题,而是我们希望如何在公共政策的不同目标之间进行权衡的问题。减少种族偏见好还是减少我们不必要地将个人关在监狱里的年数好?我不知道答案,但重要的是,我们要意识到要有所取舍。

无知不是福

原来机器是有偏见的我们也对机器有偏见。ProPublica 在报道第一个偏见方面做得很好,但却公然忽略了第二个。由于没有回答算法在这一领域如何与人类相比较的问题,我们对算法如何适应刑事司法系统的了解并不全面。这使得我们无法知道我们应该更多还是更少地使用算法。

ProPublica 也没有解决需要在减少偏差和预测准确性之间做出的基本权衡。与刑事司法系统中的传统做法不同,算法和数据科学的应用使我们政策目标之间的这些权衡变得非常突出——即使我们不喜欢它们向我们展示的内容。但是妖魔化数据科学就像对着浴室镜子生气,因为它让你看到了你额头上的青春痘。

改进 ProPublica 工作的唯一方法是增加数据科学在公共政策中的作用,而不是降低它。在对算法在刑事司法中的效用得出结论之前,还有许多工作要做。这就是为什么我们这些想要改善系统的人最好用我们的干草叉去换电子表格。

在推特上通过 @alexpmil 找到我。这个帖子最初出现在我的个人网站 http://alex.miller.im

新电影比 10 年前、20 年前、50 年前更长吗?

原文:https://towardsdatascience.com/are-new-movies-longer-than-they-were-10hh20-50-year-ago-a35356b2ca5b?source=collection_archive---------4-----------------------

处理来自 IMDb.com 的数据

如果你喜欢看电影,我指的是很多的电影,你可能已经注意到如今电影变得越来越长。你上一次去电影院看短于 120 分钟的大片是什么时候?越来越多的电影(谢谢漫威鼓励这种趋势!)字幕后还有场景,所以你会一直耐心等待,直到结束,即使你的膀胱已经让你痛不欲生一段时间了。

这是你可能会想“天哪,最近电影变得长得可笑”的时候。是吗?我也问过自己同样的问题。我和一些电影爱好者讨论了这个问题。他们有相似的感觉。这对我来说还不够。我决定用我的数据分析技能来调查这个问题。在这篇文章中你可以读到我的发现。

资料组

没有比 IMDb.com 更好的地方去寻找关于电影的数据了。这是世界上最大的电影网站。从 1990 年开始研发(原文如此!),其数据库包括大约 530 万个标题和 930 万个人物。这令人难以置信,但它始于一份拥有美丽眼睛的女演员名单(说真的,在维基百科上查看 IMDb 历史)。

个人可在 IMDb 数据集页面获取 IMDb 数据。我们的研究不需要详细的数据库。在我们的最终数据集中,每部电影只需要三列:

  1. 发布年份
  2. 运行时间
  3. 投票数(过滤掉小众电影)

不幸的是,我们需要下载两个数据集,稍后再加入它们。在 title.basics.tsv.gz,数据库里有很多关于每部电影、电视节目和剧集的数据。在title.ratings.tsv.gz有来自数据库的关于投票数和项目平均评级的信息。

让我们开始编写我们的 movies_data.py 脚本,处理这些大量的数据,并为进一步的调查做准备。

import pandas as pd

 # Download data from IMDB website
 # Data description [https://www.imdb.com/interfaces/](https://www.imdb.com/interfaces/)
 movies = pd.read_csv(‘https://datasets.imdbws.com/title.basics.tsv.gz', compression=’gzip’, sep=’\t’)
 print(‘“title.basics.tsv.gz” downloaded’)
 ratings = pd.read_csv(‘https://datasets.imdbws.com/title.ratings.tsv.gz', compression=’gzip’, sep=’\t’)
 print(‘“title.ratings.tsv.gz” downloaded’)
 print(movies.shape)
 print(ratings.shape)>>>“title.basics.tsv.gz” downloaded
>>>“title.ratings.tsv.gz” downloaded
>>>(5504894, 9)
>>>(900802, 3)

目前看来还不错。我们有两个数据集。一个有 90 万行 3 列,另一个有 550 万个条目 11 列。两个数据集都有 tconst 变量,这是每个标题的唯一 id。我们可以合并该列中的现有数据。

# Merge data on ‘tconst’, which is unique id for any title in IMDB database.
 movies = pd.merge(movies, ratings, on=’tconst’)
 print(movies.shape)>>>(900802, 11)

总共有 90 万个独特的标题。

去除不必要的数据

现在我们可以进一步调查我们的数据。有一个名为标题类型的栏目,标明标题是电影、电视剧、剧集、短片等。

print(movies[‘titleType’].unique())>>>[‘short’ ‘movie’ ‘tvMovie’ ‘tvSeries’ ‘tvEpisode’ ‘tvShort’ ‘tvMiniSeries’ ‘tvSpecial’ ‘video’ ‘videoGame’]

有 11 种类型的标题。我们只对电影感兴趣,所以我们将在数据集中留下标记为 movietvMovie 的行。我们可以争论是否应该考虑电视电影,但在最终的数据集中,它们只占所有标题的 5%,并且它们不会改变结果,我检查了这一点。

movies = movies[movies[‘titleType’].isin([‘movie’, ‘tvMovie’])]
print(movies.shape)>>>(271427, 11)

书名数量下降到 271k。

我们应该考虑的另一件事是电影的可能类型。我们需要确保我们只考虑故事片,而不是纪录片等。我们可以查看一下流派一栏。

genres = movies[‘genres’].unique()
len(genres)>>>1313

有 1313 个独特的流派!IMDb 建立数据库的方式很奇怪,因为这个流派只有一个专栏。如果一部电影同时是剧情、喜剧、奇幻,那就写成*喜剧、剧情、奇幻。*浏览完数组后,我可以找到例如:

  • 纪录片、新闻、体育
  • 传记、戏剧、历史
  • 纪录片,战争
  • 动画、音乐剧、科幻
  • 犯罪、纪录片、体育

这个专栏很乱。从这篇文章的第一稿到发表,增加了 4 个新的类型。幸运的是,我们不需要处理这个。我们只想过滤掉纪录片。Pandas 有一个很好的工具来过滤包含字符串的行。

movies = movies[movies[‘genres’].str.contains(‘Documentary’) == False]

最后,我们的数据中只有我们需要的电影。现在我们可以删除所有不必要的列。如前所述,我们只需要三列:

  1. startYear —代表一个标题的发布年份
  2. 运行时间分钟 —标题的主要运行时间,以分钟为单位
  3. 票数 —该标题获得的票数
movies = movies[[‘startYear’, ‘runtimeMinutes’, ‘numVotes’]]

最后,我们需要将这些列的数据类型更改为 numeric,并删除缺少值的行。

for column in movies.columns.values.tolist():
    movies[column] = pd.to_numeric(movies[column], errors='coerce')

movies = movies.dropna()
print(movies.shape)>>>(197552, 3)

经过这一步,我们的电影数量下降到 197.5k。

在我们继续进一步分析之前,最好检查一下数据集的描述性统计数据,以确定一切看起来是否正常。

print(movies.describe())>>>startYear runtimeMinutes numVotes
>>>count 197552.000000 197552.000000 1.975520e+05
>>>mean 1988.940932 94.929492 3.643819e+03
>>>std 24.758088 29.967162 3.173653e+04
>>>min 1894.000000 1.000000 5.000000e+00
>>>25% 1973.000000 83.000000 1.700000e+01
>>>50% 1996.000000 92.000000 6.500000e+01
>>>75% 2010.000000 103.000000 3.390000e+02
>>>max 2019.000000 5760.000000 2.029673e+06

我们可以注意到,至少有一部电影只有 1 分钟长,看起来不太对劲。数据库里可能有些错误。

根据美国电影艺术与科学学院的规定,一部原创电影需要 40 分钟或更少才有资格成为短片,而故事片则需要超过 40 分钟。放弃太短的电影是一个很好的规则。

movies = movies[movies[‘runtimeMinutes’] > 40]

更重要的是,我们只对流行电影感兴趣。IMDb 数据库里有几千部电影,只有几十票。他们会歪曲我们的结果。假设一部受欢迎的电影是收视率超过 1000 的电影。我们放弃所有不符合这条规则的电影(再见,成千上万的电视电影和车库制作!).

movies = movies[movies[‘numVotes’] >= 1000]
print(movies.describe())>>>startYear runtimeMinutes numVotes
>>>count 27951.000000 27951.000000 2.795100e+04
>>>mean 1995.441165 104.993167 2.494047e+04
>>>std 21.236780 22.305108 8.118090e+04
>>>min 1911.000000 43.000000 1.000000e+03
>>>25% 1986.000000 91.000000 1.679000e+03
>>>50% 2003.000000 100.000000 3.440000e+03
>>>75% 2011.000000 114.000000 1.195000e+04
>>>max 2018.000000 450.000000 2.029673e+06

在我们最终的数据集中,有 27,951 部电影。最短的 43 分钟最长的 450 分钟(铁膀胱的价格去了任何一个不用上厕所就能看的人!).最古老的电影是 1911 年的。

平均而言,我们数据集中的每部电影都有近 25k 张选票,但标准偏差为 81k,这可能意味着分布是向右倾斜的,平均值被少数拥有大量选票的电影高估了(至少有一部电影的收视率超过 200 万!).中位数看起来更接近现实,50%的电影有 3440 票或更少。

现在,我们可以将数据保存到 CSV 文件中,并转移到新的脚本中。这个需要很长时间来执行。Python 需要下载总共超过 100MB 的数据,并处理几次。如果我们用一个新的脚本和更小的数据集重新开始,我们的工作流程会快得多。

movies.to_csv(‘movies.csv’, index=False)
print(‘Success!’)>>>Success!

新数据集的大小为 515 KB,不到原来的 1%!你就是这样剔除无关数据的!

寻找研究中使用的第一年

让我们创建一个名为 movies.py. 的新脚本

import pandas as pd, \
    matplotlib.pyplot as plt, \
    matplotlib.patches as mpatches, \
    matplotlib.lines as mlines, \
    seaborn as snsmovies = pd.read_csv('movies.csv')

我们应该从思考第一年的学习开始。20 世纪初的电影摄影仍处于起步阶段。那时创作的电影并不多,大多数只是新技术和实验的简短展示。让我们用这些早期电影历史的数据集中的一些标题制作一个直方图。

plt.hist(movies['startYear'][movies['startYear'] < 1940])
plt.title('Movies count')
plt.xlabel('Year of release')
plt.ylabel('Number of movies')
plt.show()

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

好的,大约在 1930 年早期,电影的数量开始增加。让我们仔细看看 1930 年之前的几年:

plt.hist(movies['startYear'][movies['startYear'] < 1930])
plt.title('Movies count')
plt.xlabel('Year of release')
plt.ylabel('Number of movies')
plt.show()

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

这些只是直方图,具有默认的箱数(10),我们只是用它来快速可视化我们的数据。如果我们想知道数据集中电影的确切数量,我们应该查看表格(或创建包含更多条块的直方图)。

print(movies['startYear'][movies['startYear'] < 1940].value_counts().sort_index())>>>1911.0     1
>>>1913.0     3
>>>1914.0     4
>>>1915.0     3
>>>1916.0     2
>>>1917.0     2
>>>1918.0     5
>>>1919.0    10
>>>1920.0     9
>>>1921.0     9
>>>1922.0     9
>>>1923.0    10
>>>1924.0    15
>>>1925.0    18
>>>1926.0    15
>>>1927.0    22
>>>1928.0    27
>>>1929.0    22
>>>1930.0    22
>>>1931.0    49
>>>1932.0    48
>>>1933.0    51
>>>1934.0    42
>>>1935.0    52
>>>1936.0    68
>>>1937.0    52
>>>1938.0    45
>>>1939.0    73

在我们的数据集中只有一部 1911 年的电影,1924 年是标题数量超过 10 的第一年。这些数据不足以得出可靠的结果。我们需要决定从哪一年开始。我决定使用与流行的正态分布方法相同的经验法则。据此,创建它的最小样本量是 30。现在我们可以计算数据的起始年份。

start_year = 0  # This will be starting year of the data.
# Create data frame with year as first column and movie count as second.
movies_per_year = movies['startYear'].value_counts().sort_index()  # The year is an index, we need it as a column.
movies_per_year_df = pd.DataFrame({'year': movies_per_year.index, 'movie_count': movies_per_year.values})

for i in range(0, len(movies_per_year_df)):
    year = movies_per_year_df.iloc[i, 0]
    movie_count = movies_per_year_df.iloc[i, 1]
    # Check if in a given year there were more than 30 movies.
    if movie_count > 30:
        movies_per_year_df = movies_per_year_df.iloc[i:, :]  # Drop years before current one in the loop
        # Check whether the rest of years have movie count above 30, if not, the loop continues.
        # If every year left has movie count above 30, the loop breaks and we have the answer.
        if sum(movies_per_year_df['movie_count'] < 30) == 0:
            start_year = year
            break

print(start_year)>>>Name: startYear, dtype: int64
>>>1931.0

我们的数据集将从 1931 年开始。当然,我们可以快速浏览一下上表来确定它,但是我们的目标是练习循环和条件,以便在更复杂的数据的情况下自动化这个过程。

movies = movies[movies['startYear'] >= 1931]
print(movies.describe())>>>startYear runtimeMinutes numVotes
>>>count 27743.000000 27743.000000 2.774300e+04
>>>mean 1995.971380 105.048156 2.507714e+04
>>>std 20.407283 22.103663 8.145749e+04
>>>min 1931.000000 43.000000 1.000000e+03
>>>25% 1986.000000 91.000000 1.684000e+03
>>>50% 2003.000000 100.000000 3.459000e+03
>>>75% 2011.000000 114.000000 1.205400e+04
>>>max 2018.000000 450.000000 2.029673e+06

我们最终的数据集包含 27,743 个标题。有趣的是,中间的发行年份是 2003 年,这意味着我们数据集中所有电影的 50%是在 2003 年或更晚发行的。这意味着人们大多观看和评价新电影。运行时间的中间值是 100 分钟,平均值是 105 分钟,这看起来是正确的。

说到点子上

让我们画出运行时的分布图。我们将其限制在 40-200 分钟的范围内,以提高可读性。超过 200 分钟的标题并不多,40 分钟是我们数据的下限。每个仓位对应 10 分钟范围。

plt.hist(movies['runtimeMinutes'], range=(40, 200), bins=16, ec='black')
plt.title('Movies length')
plt.xlabel('Minutes')
plt.ylabel('Number of movies')
plt.show()

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

最受欢迎的运行时间是 90-100 分钟。绝大多数电影都有 80-120 分钟长。这和我们的观影直觉是一致的。

让我们按年份找出一个平均的电影放映时间。我们按年份对数据集进行分组,并获得每个子集的描述性统计数据。

statistics_grouped = movies[‘runtimeMinutes’].groupby(movies[‘startYear’]).describe()

我们可以绘制出这些数据的图表。除了平均电影运行时间,我们还可以根据标准偏差创建置信区间。我们将使用简单的公式:

avg_runtime_by_year = statistics_grouped['mean']  # Mean
avg_runtime_lower_band = statistics_grouped['mean'] - statistics_grouped['std']  # Lower band of data created using standard deviation.
avg_runtime_upper_band = statistics_grouped['mean'] + statistics_grouped['std']  # Upper band of data.

让我们来创造情节:

fig, ax1 = plt.subplots(figsize=(10, 5))
ax1.plot(avg_runtime_by_year, color="blue")
ax1.plot(avg_runtime_lower_band, color="aqua")
ax1.plot(avg_runtime_upper_band, color="aqua")
ax1.fill_between(statistics_grouped.index, avg_runtime_lower_band, avg_runtime_upper_band, facecolor='aqua')  # Fill space between bands to create confidence interval.
ax1.set_title('Movies runtime by year')
ax1.set_ylabel('Minutes')
ax1.set_xlabel('Release year')
ax1.set_xlim(1931, 2018)
legend_sd = mpatches.Patch(color='aqua', label='Mean +/- standard deviation')  # Used mpatches to create rectangular for a legend.
legend_line = mlines.Line2D([], [], color='blue', label='Mean runtime')
ax1.legend(handles=[legend_line, legend_sd])  # Nice legend with rectangular and line.
plt.show()```

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

看来我们关于电影越来越长的直觉思维是错误的。的确,在电影的最初几十年里,电影更短,在 20 世纪 30 年代早期,平均长度为 90 分钟,在 50 年代中期达到 100-110 分钟。从那以后,我们的数据就没有趋势了。此外,置信区间与 80-130 分钟的运行时间相当一致。

然而,看起来 2018 年可能是新上升趋势的开始,因为这是电影史上平均运行时间超过 110 分钟的两年之一。现在猜测还为时过早,特别是因为 2018 年还没有结束,即使在 2019 年初,获得至少 1000 票的电影数量也将比其他年份增长得更快(我们的数据集中有 597 部来自 2018 年,955 部来自 2017 年)。

我们可能想知道在创建置信区间时考虑了数据集的哪一部分。这很容易检查。我们需要找到一些比置信区间的下(上)带更长(更短)的电影,然后用它除以给定年份所有电影的数量。

percentage_of_included_movies = []
for year in statistics_grouped.index:
    movies_from_year = movies[movies['startYear'] == year]
    avg_runtime_low = avg_runtime_lower_band[int(year)]
    avg_runtime_up = avg_runtime_upper_band[int(year)]
    movies_included = movies_from_year[movies_from_year['runtimeMinutes'] > avg_runtime_low][movies_from_year['runtimeMinutes'] < avg_runtime_up]
    percentage_of_included_movies.append(len(movies_included)/len(movies_from_year))

现在我们可以向我们的统计 _ 分组数据框添加新列:

statistics_grouped['included_movies_perc'] = percentage_of_included_movies
print(statistics_grouped['included_movies_perc'].describe())>>>count 88.000000
>>>mean 0.782741
>>>std 0.058665
>>>min 0.619718
>>>25% 0.745369
>>>50% 0.786273
>>>75% 0.817378
>>>max 0.928571
>>>Name: included_movies_perc, dtype: float64

每年平均有 78%的电影符合这个置信区间。我们可以在之前的图表上添加额外的线条来显示每年的比例。

# Main plot
fig, ax1 = plt.subplots(figsize=(10, 5))
ax1.plot(avg_runtime_by_year, color="blue")
ax1.plot(avg_runtime_lower_band, color="aqua")
ax1.plot(avg_runtime_upper_band, color="aqua")
ax1.fill_between(statistics_grouped.index, avg_runtime_lower_band, avg_runtime_upper_band, facecolor='aqua')
ax1.set_title('Movies runtime by year')
ax1.set_ylabel('Minutes')
ax1.set_xlabel('Release year')
ax1.set_xlim(1931, 2018)
# Plot with proportions
ax2 = ax1.twinx()
ax2.plot(statistics_grouped['included_movies_perc'], color='olive')
ax2.set_ylabel('Proportion')
plt.axhline(y=0.70, color='red', linestyle='dashed')  # Add line at 0.70
legend_sd = mpatches.Patch(color='aqua', label='Mean +/- standard deviation')
legend_line = mlines.Line2D([], [], color='blue', label='Mean runtime')
legend_line_2 = mlines.Line2D([], [], color='olive', label='Proportion included in CI')
dashed_line = mlines.Line2D([], [], color='red', label='Proportion = 0.7', linestyle='dashed')
ax1.legend(handles=[legend_line, legend_sd, legend_line_2, dashed_line])
plt.show()

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

剧情看起来有点乱,但传达的信息很明确。自 40 年代末以来,我们的置信区间每年包含 70%以上的图书。

让我们创建另一个图,这一次使用中位数和四分位数范围,并检查结果。我们最感兴趣的是置信区间,它现在将包含 50%的电影。25%的最短标题和 25%的最长标题将位于蓝色区域之外。

# Data
avg_runtime_by_year = statistics_grouped['50%']
avg_runtime_lower_band = statistics_grouped['25%']
avg_runtime_upper_band = statistics_grouped['75%']

# Plot
fig, ax1 = plt.subplots(figsize=(10, 5))
ax1.plot(avg_runtime_by_year, color="blue")
ax1.plot(avg_runtime_lower_band, color="aqua")
ax1.plot(avg_runtime_upper_band, color="aqua")
ax1.fill_between(statistics_grouped.index, avg_runtime_lower_band, avg_runtime_upper_band, facecolor='aqua')
ax1.set_title('Movies runtime by year')
ax1.set_ylabel('Minutes')
ax1.set_xlabel('Release year')
ax1.set_xlim(1931, 2018)
legend_sd = mpatches.Patch(color='aqua', label='Interquartile range')
legend_line = mlines.Line2D([], [], color='blue', label='Median runtime')
ax1.legend(handles=[legend_line, legend_sd])
plt.show()

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

在这里我们也看不到任何清晰的模式。然而,最近 2-3 年的增长相当快。尽管如此,这并不意味着这是新趋势的开始,但我们应该在未来检查这种情绪。我们还可以注意到,中位数平均低于平均值。100 分钟左右波动,比均值短 5 分钟左右。这是有道理的,因为 mean 受一小部分长电影的影响,median 只是每年的中心值。

好了,现在我们知道电影《T4》总体来说并没有变长。也许我们的直觉没有错,它只发生在最受欢迎的电影,最大的大片中。我们可以创造更多的情节,每次考虑每年最受欢迎的电影的小样本。

让我们只看一下 1960 年以来的电影,这样我们就可以更仔细地看看对我们来说最有趣的数据。也许如果我们每年只取 50 部最受欢迎的电影,会有一些趋势可见。

movies_since_1960 = movies[movies[‘startYear’] >= 1960]

因为我们想要检查几个不同的值,所以我们可以创建一个函数来返回关于每年最受欢迎的电影的统计数据。我们以后可以用它。

def top_n_movies(data, n):
    top_n_movies_per_year = data.groupby('startYear').head(n)
    stats = top_n_movies_per_year['runtimeMinutes'].groupby(
        top_n_movies_per_year['startYear']).describe()
    return stats

现在,我们可以获得所需的数据,并创建我们的阴谋。

statistics_grouped_50 = top_n_movies(movies_since_1960, 50)
# Data
avg_runtime_by_year = statistics_grouped_50['mean']
avg_runtime_lower_band = statistics_grouped_50['mean'] - statistics_grouped_50['std']
avg_runtime_upper_band = statistics_grouped_50['mean'] + statistics_grouped_50['std']

# Plot
fig, ax1 = plt.subplots(figsize=(10, 5))
ax1.plot(avg_runtime_by_year, color="blue")
ax1.plot(avg_runtime_lower_band, color="aqua")
ax1.plot(avg_runtime_upper_band, color="aqua")
ax1.fill_between(statistics_grouped_50.index, avg_runtime_lower_band, avg_runtime_upper_band, facecolor='aqua')
ax1.set_title('Runtime of 50 most popular movies by year')
ax1.set_ylabel('Minutes')
ax1.set_xlabel('Release year')
ax1.set_xlim(1960, 2018)
legend_sd = mpatches.Patch(color='aqua', label='Mean +/- standard deviation')
legend_line = mlines.Line2D([], [], color='blue', label='Mean runtime')
ax1.legend(handles=[legend_line, legend_sd])
plt.show()

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

仍然没有明显的趋势。此外,当我们考虑少量更受欢迎的电影时,即使是 2017-2018 年的峰值也消失了。

如果我们看一下 30 部最受欢迎的电影会怎么样?还是 10?我们可以用不同的价值观创造新的情节。这一次我们将放弃置信区间。我们的 top_n_movies 函数将有助于做到这一点。

mean_10 = top_n_movies(movies_since_1960, 10)['mean']
mean_30 = top_n_movies(movies_since_1960, 30)['mean']
mean_50 = top_n_movies(movies_since_1960, 50)['mean']
mean_100 = top_n_movies(movies_since_1960, 100)['mean']
mean_all = top_n_movies(movies_since_1960, len(movies_since_1960))['mean']# Chart
fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(mean_10, color='black')
ax.plot(mean_30, color='blue')
ax.plot(mean_50, color='red')
ax.plot(mean_100, color='green')
ax.plot(mean_all, color='purple')
ax.set_title('Movies runtime by year')
ax.set_ylabel('Minutes')
ax.set_xlabel('Release year')
ax.set_xlim(1960, 2018)
ax.legend(labels=['10 most popular movies',
                  '30 most popular movies',
                  '50 most popular movies',
                  '100 most popular movies',
                  'All popular movies'])
plt.show()

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

无论我们拍多少部最受欢迎的电影,都没有趋势的迹象。当我们每年考虑的电影越少,图表上的波动性就越大,这与我们的统计直觉相符——样本越小,波动性就越大。

为了确保更受欢迎的电影不会更长,让我们创建一个表,其中包含今年所有 n 部最受欢迎的电影的平均值——平均值。

total_mean = pd.Series()
mean_list = [mean_10, mean_30, mean_50, mean_100, mean_all]
index_list = ['top_10', 'top_30', 'top_50', 'top_100', 'all']
for i in range(0, 5):
    mean_n = pd.Series([mean_list[i].mean()], index=[index_list[i]])
    total_mean = total_mean.append(mean_n)

print(total_mean)>>>top_10 103.716949
>>>top_30 106.461017
>>>top_50 106.330508
>>>top_100 106.327119
>>>all 105.893473
>>>dtype: float64

平均运行时间之间的差异是微不足道的,它们在 106 分钟左右波动,只有一个例外,即每年排名前 10 位的电影,其平均值为 103.7 分钟。正如我们之前所说的,这里的样本很小而且不稳定,所以这并不意味着大多数受欢迎的电影实际上比平均时间短。

我们年复一年地看着电影《时空》。让我们创造最后一个情节。这一次我们将用电影上映的十年而不是一年来概括和创建一个新的数据集。由于这一点,我们将有更少的组,我们可以为他们创建一个箱线图。

movies_by_decade = movies.copy()
movies_by_decade['startYear'] = ((movies_by_decade['startYear'] // 10) * 10).astype('int64')
sns.boxplot(x="startYear", y="runtimeMinutes", data=movies_by_decade, color='lightskyblue', showfliers=False)
plt.ylim(40,180)
plt.title('Movies runtime by decade')
plt.xlabel('Decade')
plt.ylabel('Minutes')
plt.show()

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

在 20 世纪 30 年代和 40 年代之间有一个大的飞跃,然后在 20 世纪 50 年代之后有一个小的飞跃,从那以后差别就很小了。

总之,我们的直觉错了。电影运行时没有趋势。这些差异太小了,不会被注意到。我们可以说,在过去的 60 年里,电影的平均长度是一样的。无论我们考虑什么标准,结果都是一样的。感谢你的阅读!现在我们可以回去看电影了!

新技术正在杀死他们的祖先吗?

原文:https://towardsdatascience.com/are-new-technologies-killing-their-descendants-b2ae3a5424b8?source=collection_archive---------12-----------------------

对于我们生活中的每一个时刻,都有新的技术可能以不同的方式重新完成以前的任务,或者添加一些新的东西。对于每一个新技术,它的前一个是不是被破坏了,以后就不用了?自动特征学习模型(如 CNN)是否杀死了他们之前的手动工程模型?这是本文要回答的一个重要问题。

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

From Pixabay by PublicDomainPictures

每个数据科学家都会使用计算器进行数学计算。计算器有一个简单的界面,只需按下按钮就可以进行运算。在移动电话的发明和发展之后,智能手机出现了,它们有不同的应用程序来完成以前在计算器中完成的操作。问题来了。是因为一项新技术(智能手机)的出现,它以前的技术(计算器)被破坏了,以后再也不会被使用了吗?答案肯定是否定的。有些人说最新的总是最好的,但这并不总是正确的。这是因为新技术不仅带来了好处,也可能带来一些坏处。这里有一个讨论来展示做数学运算的选项:计算器还是智能手机。

计算器只是专用于数学运算,但智能手机不是。智能手机有许多计算器没有的功能。许多功能的可用性而不是有限的功能是一个缺点吗?在某些情况下,工具中的功能越少,性能越好,功能越多,开销就越大。用计算器做运算很简单。只要打开它,按下操作所需的按钮。但是,由于智能手机的众多功能,在智能手机上进行同样的操作会产生开销。以下是将智能手机用作计算器时可能发生的一些情况。

打开用于数学计算的应用程序后,电话可能会响起来一个来电,打断你正在做的事情。手机可能会因收到短信而发出嘟嘟声。它可能连接到互联网,因此可能会发出电子邮件的嘟嘟声。这可能会让你停止做手术。长时间使用手机后,电池可能会耗尽,手机可能会关机,除非它连接到充电器,这将限制移动的灵活性。因此,使用智能手机的人应该注意所有这些影响,以便很好地进行数学运算。与计算器相比,没有 SIM 卡,因此没有来电或短信。基本的计算器没有连接到互联网,因此没有收到电子邮件。计算器的电池比智能手机的电池耐用,因此使用计算器时中断操作的可能性较小。因此,与智能手机相比,使用功能有限的计算器具有简单和专注于任务的优势,即使这是一项古老的技术。总之,最新的并不总是最好的。根据您的需求,旧技术可能比新技术更好,也可能更差。从数据科学的角度来看也是如此。

有不同类型的学习算法和特征用于不同的任务,例如分类和回归。其中一些可能延续到 1950 年,而另一些是最近的。但也不能说老款永远比新款差。我们不能绝对断定 CNN 等深度学习(DL)模型比以前的模型更好。这个看你的需求了。

我发现许多研究人员倾向于盲目使用 DL,只是因为它是一种最先进的方法。有些问题很简单,使用 DL 可能会增加复杂性。例如,将 DL 与 100 个图像分成 10 个类一起使用并不是一个好的选择。这是因为样本数量少,不需要 DL。浅薄的学习在这种情况下刚好足够。如果要创建一个分类器来区分图 1 所示的四种水果(取自 fruits-360 数据集), DL 不是强制性的,以前手工制作/工程设计的特征就足够了。通过调查问题,一种可能有帮助的特征是颜色。每个水果都有不同的颜色。因此,HSV 颜色空间中色调通道的直方图可能就足够了。

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

Figure 1. Samples from the fruits-306 dataset

让我们展示在这种问题中使用 CNN 深度学习模型所增加的复杂性。首先,需要大量的数据来训练这样的模型。需要指定不同的参数,每个参数都需要长时间的实验。这些包括使用哪种类型的层、每层的数量、激活函数、学习速率等。相比之下,使用色调通道直方图足以获得非常高的精度。

解决数据科学问题有不同的方法,您应该选择最合适的方法。明智地选择最合适的。如图 2 所示,如果一个 350 毫升的水瓶就足够了,为什么还要买一个 1 升的呢?

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

Figure 2. Rights reserved to langladesprings.com

这就像图 3 中使用梯子爬上墙的顶端一样。如果你在爬了 5 级楼梯后到达了墙的顶部,你不需要在梯子上爬另一级楼梯。同样,如果您可以使用手工设计的特征获得最佳结果,则不必使用自动特征学习。

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

Figure 3. Rights reserved to deviantart.com (Ladder) and basictextures.com (Wall)

最后,不要认为新技术是每个问题的最佳解决方案。即使它解决了以前的问题,它也可能引入更多的问题或增加更多的复杂性。最后,不要认为 DL 是所有问题的一站式解决方案。

原文可在 LinkedIn 以下链接获得:https://www . LinkedIn . com/pulse/new-technologies-kill-descendants-Ahmed-gad

在 KDnuggets 上转载于此链接:https://www . kdnugges . com/2018/04/new-technologies-killing-ancestors . html

联系作者:

领英:【https://linkedin.com/in/ahmedfgad

电子邮件:ahmed.f.gad@gmail.com

洛杉矶的种族主义房东歧视拉丁裔吗?

原文:https://towardsdatascience.com/are-racist-landlords-discriminating-against-latinos-in-la-118daeb565da?source=collection_archive---------3-----------------------

洛杉矶是一个困难的租赁市场。很难找到你买得起的公寓,更不用说你梦想的地方了。有时候,你会觉得整个系统都在追杀你。新的证据表明,如果你是拉丁美洲人,你可能是对的。

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

Average Los Angeles rental is $2000 / month

在一项对 1484 名 Craigslist 房东的研究中,来自高加索人和拉丁人名字的相同电子邮件被发送。当控制租赁代理的中和效应时,与来自高加索人姓名的同一封电子邮件相比,拉丁美洲人收到正面反馈的可能性要低 20%。

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

Mapping response — white bias is seen by green dots without blue/red overlay.

各种形式的歧视都是可怕的,但这些发现中最令人震惊的是少数人在压迫多数人。2010 年人口普查显示,洛杉矶的人口构成是 49%的拉丁裔,28%的白人。尽管自由主义盛行,拉丁裔人口占多数,但种族主义似乎在洛杉矶依然存在。

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

Regression analysis results: 1484 Craigslist rental ad respondents comparing emails originating from Caucasian and Latino names

自学的游戏玩家真的聪明吗?

原文:https://towardsdatascience.com/are-self-learning-game-players-truly-intelligent-d8e705da993f?source=collection_archive---------16-----------------------

对于非专家来说,我们如何理解这个问题?

自学程序,比如 Alpha Zero 和它的开源兄弟 Leela Zero ,是智能的吗?这种智能与传统的国际象棋引擎,如世界上最强的国际象棋选手 Stockfish 的智能有任何有意义的区别吗?

人工智能领域背负着对智能的主观定义:如果你能解释它,那么它就不是智能的。为了避免这种神秘主义,我们试图提出一个更客观的定义。使用马尔可夫决策过程的形式主义,“智能是一个能够感知和操纵其环境以实现其目标的代理”。这在“它”的定义上是有问题的;但是为了玩游戏的目的,我们可以把一个玩家(代理人,“自我”)和游戏(环境)区别开来。

根据这个定义,我们能说 Leela(自我学习的棋手)比 Stockfish(人类编码的棋手)更聪明吗?根据我们的定义,我认为它们同样聪明:它们都由一个评估函数、一个树形搜索和一些时间控制逻辑组成。两者的目标完全相同(将死;或者,如果不行,就抽签)。截至目前,Stockfish 在实现这一目标方面略胜一筹;但这种差异是微不足道的。

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

在这两个程序中,树搜索和时间控制逻辑都是由人来编码的。对于库存鱼来说,评估功能是通过人类的作用进化而来的。对 Leela 来说,它是通过一个自我游戏的过程进化而来的(这个过程本身是由人类编写的)。

如果我们认为 Leela 和 Stockfish 只是下棋的代理人,那么他们都是聪明的;或者都不是。没有什么有意义的区别。但是,如果我们扩大作为主体的“它”的范围,把创造玩家的过程包括进来,那么我们也许可以开始梳理出是什么使一个人聪明,而另一个人不聪明。

所以考虑一下,作为我们的两个代理人,创造 Stockfish 的系统和创造 Leela 的系统。他们的环境是怎样的;我们如何描述他们的机构?环境不再是一盘棋;但是它却变成了一系列的游戏和玩家。我们的“代理”通过观察和更新它的玩家(或多个玩家)进行交互,而不是通过玩游戏本身。

当 Stockfish 下棋时——特别是当它输了的时候——人类会分析哪里出错了;并建议对其源代码中包含的规则进行更改。因此,下棋是一种感官行为,它允许更新代理人的状态。

相比之下,莉拉只能通过自娱自乐来学习。与外部对手玩游戏并不是导致玩家代理更新的感官行为。显而易见的结论是,在这个更广泛的环境中,莉拉不是一个有意义的代理人。Leela 的自我学习可能是一个非常成功的自我关注练习,即机器学习,但作为一个系统,它没有表现出任何能动性,因为它没有感觉到周围的环境。

当然,我们可以进一步扩展我们的范围,把自学系统的程序员也包括进来;但是那样我们就会失去 Leela 作为自学代理的概念。

那么,怎样才能证明自学的 Leela 实际上是一种智能,在某种意义上是一种操纵环境实现目标的智能体呢?如果环境是迭代游戏,那么我们的代理需要感知环境,并使用这些观察来实现培养赢得更多游戏的玩家的目标。理想情况下,它还会从该环境中感知游戏规则;但我不会说这是必要的。

到今天为止,我的结论是,Stockfish 展示了塞尔的中国房间的超人智慧(内部人类对它正在解决的问题确实有一些有限的理解);但是莉拉(和阿尔法零)没有。

然而,我很乐观。AI 研究人员正在积极研究这些问题:例如,使用逆向强化学习。如果在 2019 年看到一个真正智能的游戏代理,我一点也不会感到惊讶:一个不仅从与硬编码模型的自我游戏中学习的代理;而且与其他这样的代理交互(合作或竞争)以探索规则。如果我们的唯一目标是创造世界上最强的棋手,就不需要这样的智力;但是,随着我们越来越多地将这些人工智能嵌入到我们的日常生活中,我们将需要能够学习并适应我们称之为“现实”的不断变化的游戏规则的系统。

技术专家准备好迎接环境智能的数据商品了吗?

原文:https://towardsdatascience.com/are-technologists-ready-for-the-data-commodity-of-ambient-intelligence-a40c4ef034d4?source=collection_archive---------9-----------------------

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

Photo by Joshua Sortino on Unsplash

如今,精明的消费者意识到,营销人员和公司从手机和电脑中挖掘个人数据,这些数据主要来自搜索引擎、社交媒体网站、电子邮件、短信和 GPS 定位信息。互联网,一个在 90 年代被理想化的免费虚拟公共空间,已经被一系列承诺的便利所殖民。起初,免费、便捷的数据服务非常诱人。在云中查看电子邮件时,用户体验的改善足够大,以至于不会引发关于如何处理电子邮件的问题——例如当谷歌在 2004 年推出 Gmail 时,增加了通过个人可识别信息丰富搜索引擎用户档案的第二个信号。GPS 跟踪也成为收集个人信息的有力手段。电子商务网站通过投放 cookies 跟踪在线行为来做广告。承诺降低取暖费的自动调温器追踪人们在家中的行为数据。但是,对于大多数个人来说,营销人员和大公司对数据需求的基础仍然模糊不清。这些数据的价值是什么?个人的数字隐私是否是使用互联网服务和应用程序的公平交易?

环境智能:人工智能认知的更高层次

许多人认为技术对隐私的统治是不可避免的。今天,发达国家的人类占据着一个混合的数字和物理空间,这个空间在很大程度上是由信息的自动收集、交易和分析驱动的,很少或根本没有努力保护技术使用者的基本权利和自由。随着物理世界和数字世界的融合,数字隐私不再是一种权利,而是一种可以交易和解决的商品——同时,物理隐私继续受到保护。

技术只是比政策机制发展得更快,这使得技术专家可以强加他们自己的规则。大数据推动了旨在预测人类行为和偏好的数据挖掘和分析的大幅增长。2016 年 10 月发布的一份白宫报告指出,大数据实际上是人工智能的前身,来自电子商务、企业、社交媒体和科学的大数据的可用性“……为大幅改进的机器学习方法和算法提供了原材料。”

一旦物联网的许多方面的互操作性进化,以及更高水平的人工智能认知,环境智能将会出现。在一个环境智能的世界中,设备无缝地工作,利用隐藏在网络中的信息和设备进行生活活动。这些设备将变得越来越小,越来越集成到环境中。想象一下,一个人工智能助手在你需要的时候为你提供产品和服务;无论是在你离开机场的时候搭车,还是更换一周前吃过的食物,或者是订购干洗衣物。机器人和传感器的目的是尽可能多地学习和了解你的个人习惯,以增加便利性。

显然,技术专家有一些责任,这是当前关于人工智能和环境智能的讨论中所没有的。普通人群可能不会表现出实质性的关注(或理解)来改变其行为或修改其选择,但这并不意味着这些机制应该不受检查。高阶思维认为,人们(和社会)需要更多地控制个人信息,包括任何用于观察、构建或产生个人知识的机器。

隐私的价值是什么——消费者在乎吗?

“对个人信息的控制是对一个人向世界展示的身份的一个方面的控制,隐私权是在构建自己的身份时免受不合理限制的自由。”菲利普·阿格雷

Gartner 预测,到 2018 年,50%的商业道德违规将因大数据和分析的不当使用而发生。与此同时,一些公司对此表示反对,采取措施在数据伦理的旗帜下脱颖而出。Whatsapp 和 Signal 等服务通过使用端到端加密完全避开了数据收集。这一决定有助于消除处理敏感个人数据时的潜在责任,因为这些数据根本不会被保留。

然而,没有一定程度的数据科学,并不是每个公司都能成长,更不用说生存了。大数据是燃料来源,即使移动、人工智能和环境智能等“引擎”在运营中变得越来越复杂和微妙。在这种情况下,数据平台正在推动这些决策,那些制定了隐私道德政策的平台将在统计上提供更多价值,因为营销人员、创业公司和企业公司都需要与消费者建立联系,而又不把他们吓跑。

这些积极主动的决策有助于改变消费者的观点,尤其是在竞争激烈的环境中。根据宾夕法尼亚大学的一项研究,超过一半的互联网用户关心保护隐私,但觉得可能为时已晚。根据皮尤调查中心的数据,74%的美国人认为控制自己的个人信息“非常重要”。与此同时,据查普曼大学称,美国人的头号恐惧是人为灾难(如恐怖袭击)。紧随其后的是政府和企业对个人数据的追踪,超过了对犯罪、环境和自然灾害的关注。

在这一点上,说消费者“不关心隐私”是为了逃避收集数据带来的道德责任。随着技术的进步,包括我们的周边环境,围绕大数据的讨论越来越深入,因为它可能会影响身份并降低自主性。在未来,那些作为中介处理数据的人——这意味着向第一方公司提供必要的数据,同时缓冲和保护收集的消费者信息——将比那些像处理商品一样处理敏感信息的人更专业。

原载于 2018 年 2 月 13 日 贝斯科技

请在 Twitter 上关注我@贝丝·金迪格 T13:)

查尔斯顿的暴雨更严重吗?

原文:https://towardsdatascience.com/are-these-charleston-rainstorms-more-severe-bfbe82f361fe?source=collection_archive---------9-----------------------

我和妻子每天早上带着我们的狗和孩子在查尔斯顿附近散步。我妻子说,在我们住在查尔斯顿的三年里,这里的天气总是阴雨连绵,而在这特殊的一天,又一场暴雨即将来临。我在查尔斯顿长大,我发誓不是在这种暴风雨中长大的。我记得,在夏季的几个月里,下午下了一个小时的倾盆大雨,但我们从来没有像现在这样连续下了几天的大雨。查尔斯顿的洪水似乎也成了我小时候不记得的问题。我知道这些数据可以从 NOAA 网站上获得,所以我开始回答这个问题:“查尔斯顿的暴雨变得越来越严重和频繁了吗?”

首先,我调查了每年下几次大雨。我带着不到一英寸的雨水出去了一整天。乍一看,我的预感似乎是错误的。本世纪只有两年有三天降雨量超过三英寸。他们只是碰巧在 2015 年和 2016 年,2015 年是我和妻子搬回查尔斯顿的那一年。2015 年是一个多雨的年份,有 14 天超过 1 英寸,3 天超过 2 英寸,3 天降雨量超过 3 英寸。

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

基于这些发现,我们似乎没有经历过导致更严重降雨的可测量的气候变化——除非它在 2015 年才开始。那么为什么所有的洪水?雨季似乎出现在零星的街区。我把数据按月分解,认为现在的月份肯定比以前多雨。我取出了降雨量少于两英寸的典型日子,并认为我已经找到了关键变量——不是多雨的日子,而是多天的事件。

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

没有。本世纪只有三个月的降雨量达到了至少 8 英寸,而且只有大暴雨(每天超过 2 英寸)。过去的两个十月恰好是其中的两个——2016 年 10 月 7 日和 8 日的马修飓风和 2015 年 10 月 1 日、3 日和 4 日的百年一遇风暴。

查尔斯顿的暴风雨似乎没有变得更猛烈。我们最近运气不好,尤其是在十月初。下图显示了自 1960 年以来最严重的几个月。在本世纪,我们只有五天的降雨量超过四英寸,而且都是在八月、九月或十月(其中三天在十月)。两年不完全是一个趋势,但为了安全起见,我会在 10 月初检查我的排水泵。

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

因此,虽然这些夏季风暴每月平均降雨量最多(见下图),但自 1982 年以来,我们还没有在五月或六月遇到大风暴。这些降雨大多出现在 9 月和 10 月,这两个月比较干燥,但也有更多的极端风暴。我和妻子提出的查尔斯顿的天气越来越恶劣的假设没有数据支持。也就是说,随身携带你的雨伞!毕竟这是查尔斯顿。

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

Avg. Daily Precipitation

2017 年 5 月 27 日

丹尼尔·佩尔穆特

www.risingtide.marketing/blog

翻译们担心 MT 抢了他们的饭碗吗?既肯定又否定

原文:https://towardsdatascience.com/are-translators-worried-about-mt-taking-their-jobs-yes-and-no-b0eb1c4216e7?source=collection_archive---------3-----------------------

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

大约 50 年前,虚构的机器人哈尔在《2001:太空漫游》中首次亮相。

四十多年后,我们似乎还没有达到电影中描绘的超级智能水平,但我们肯定正在接近。随着人工智能(AI)的不断进步,机器统治世界的想法似乎越来越不可能。

人类和机器之间的紧张关系在语言行业中非常明显,许多人预测机器翻译将最终淘汰人类语言学家。

行业分析师有很多猜测,但是译者对这些预测有什么感觉呢?毕竟,如果人工智能真的达到超过人类的智能水平,这些人显然会受到最大的影响。

我们采访了三位语言学家,了解他们对机器翻译争论的看法,普遍的共识似乎是这样的:机器翻译正在进步,但还没有必要让翻译们开始收拾自己的小房间。

质量有吗?

我们从 ULG 翻译那里获得了关于 MT 的质量、资产和衰落的见解,他们在这个行业总共有 40 年的经验。这三个人都提到了机器翻译的局限性,尤其是在获取上下文的时候。

豪尔赫·莫亚和克劳迪娅·博尔顿都认为 MT 的质量很差。

“基本的文本可能有用,但一旦我们进入技术,或者更糟的是,营销或人员培训,机器翻译就不起作用了,”波尔顿说,他用德语和英语翻译。

“我看过很多我必须校对的文本,基本上我必须重新翻译整个项目,因为它是不可理解的。”

英语到法语的翻译 Nicolas Kmiec 承认,机器翻译在文学或医学文本方面做得不好,但指出这项技术已经取得了很大进展。

“我相信质量会越来越好。我被一家公司要求校对一个非常技术性的领域的机器翻译,翻译得相当好。一旦术语被设置在机器中,错误的感觉、误译和词汇错误的风险就会降低,”他说。

“在这类领域,翻译相当简单:小句,主语-动词-宾语.”

“火鸡制造”:机器翻译与语境

MT 最大的卖点之一是它加快工作流程的能力。人类可能需要几天来审阅一个文档,而机器翻译系统可能只需要几个小时。

根据 Kmiec 的说法,如果环境合适,这项技术可能是有益的。

“根据翻译的主题,机器翻译确实在非常特殊的情况下提高了效率。但在大多数其他情况下,机器翻译只是浪费时间,因为所用的术语通常是公认的术语定义,”他说。

他补充说,机器翻译缺乏细致入微的语言技能也可能是一个障碍。

“你会发现像‘fabriquéen Dinde’(法语)这样的‘土耳其制造’的翻译,这个国家被误认为是鸟,”克米克说。

莫亚补充说,糟糕的机器翻译会增加工作流程的效率,迫使编辑在阅读效果不好的文档上花费更多时间。不过,他承认,在某些情况下,这也有好处。博尔顿也提出了类似的观点。

“看看我迄今为止的经历,不,(MT)并没有让事情变得更容易。她说:“对于拥有一篇文章并想了解其内容的人(不是翻译,而是普通大众),机器翻译可能行得通。”。

“但在我的领域(技术、法律、营销),这甚至比使用‘旧’的翻译记忆和术语表以及手动翻译更费力。”

百万美元问题

那么,未来呢?翻译担心他们的工作吗?

和许多实质性问题一样,没有简单的答案。但就目前而言,我们采访过的语言学家并不认为 MT 面临迫在眉睫的威胁,但也有一些回旋的余地。

当被问及是否担心机器翻译会取代人类翻译时,莫亚说“绝对不会”。“附加值、人性化、质量和安全使得人工翻译一如既往地重要。”

博尔顿同意这一观点,他说只有人类语言学家才具备识别源文档中细微差别和上下文的能力。

Kmiec 有不同的看法。他解释说,机器翻译正在快速发展,这些进步有可能在行业中创造一个范式转变。

“今天的技术还不足以让机器翻译取代人类翻译,但它正在以很快的速度发展。他说:“我认为,在十年的时间里,翻译人员将开始在技术翻译等非常特殊的领域担任机器翻译校对工作。”。

然而,与此同时,Kmiec 指出,翻译细微差别的文本对于由人工智能驱动的机器来说仍然是一个障碍。不过,他说,最终,语言学家的未来可能不会那么光明。

“当我们放眼未来十年,笔译和口译的前景非常暗淡。拉伯雷在《巨人传》中说,使人与众不同的是他笑的能力。一旦机器有了这种能力,一旦机器理解了它的意思,而不仅仅是它说了什么,人工翻译将会减少,”他说

本文原载于【ULG 日报】 。订阅这里:http://unitedlanguagegroup.com/ulg-weekly-digest-signup/

UUIDs 真的唯一吗?

原文:https://towardsdatascience.com/are-uuids-really-unique-57eb80fc2a87?source=collection_archive---------0-----------------------

UUID 一般代表uuuniqueid标识符。它看起来像由破折号分隔的 32 个字符的字母和数字序列。一些例子:

8 f14 a65f-3032-42 c8-a196-1 cf 66d 11 b 930

b 400 af 61-6cb 4-4565-89 C4-d6ba 43 f 948 b 7

UUIDs 便于给实体起自己的特殊名称,例如在数据库中。有几种方法可以生成它们,包括基于时间、MAC 地址、哈希和随机数的方法,但它们都做出了相同的承诺:没有两个是相同的。每一个在空间和时间上都是独一无二的。

直觉上,这似乎不对。如果 UUIDs 是随机生成的,那么一定有某种的机会,一个序列被生成不止一次,特别是当我们生成越来越多的时候。让我们计算在一组 UUIDs 中没有重复的概率。

UUID 的 32 个字符是十六进制的,或以 16 为基数的表示法。每个字符可以是数字 0 到 9,或者是字母 a 到 f。在 UUID 中,32 个十六进制 x log2(16)位/十六进制= 128 位。在版本 4,变体 1 类型的 UUID 中,6 个比特是固定的,剩余的 122 个比特是随机生成的,总共有 2 个可能的 uuid。我们将这个值称为 n 。我们马上知道,如果生成的 uuid 的数量超过了可能的 uuid 的空间,即如果 r > n ,那么一定有一些重复。

无重复的方式数为n**(n-1)(n-2)……(n-(r-1)。第一个 UUID 可以是 n 种可能性中的任意一种,第二个可以是除第一个之外的 n 中的任意一种( n -1),第三个可以是除前两个之外的任意一种( n -2),以此类推。生成ruuid 的方式总数是 n^r ,因为每个r*uuid 有 n 种不同的可能性。将两个计数相除,得到没有重复 UUIDs 的概率:

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

Probability of generating r unique UUIDs

对于如此大的数量,直接计算概率在计算上是不可行的。大阶乘可以通过斯特林公式来近似,给出:

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

Approximate probability of generating r unique UUIDs

如果 r 固定且 n →∞,则上述等式的第一部分可表示为:

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

乘以第二部分,乘积为 1。因此如果 nr 几乎可以肯定不会有重复。但是如果 r 确实接近 n ,UUID 可能会重复。

r 到底应该有多大?我们可以从不同的角度来处理这个问题,这里我们不是从 nr 开始,并试图计算 *p,*而是从 np 开始,并得到 r 。下面的图表显示了给定唯一性概率下 UUIDs 的大致数量。它的值是用维基百科引用的一篇论文的近似公式计算出来的,其中r= . 5+sqrt(. 25–2 * ln§*n)。

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

3.26 * 10⁶uuid 的样本有 99.99%的可能性没有任何重复。以每秒一个的速度生成这么多 UUIDs 需要十亿年。因此,虽然 UUIDs 并不是真正唯一的,但考虑到人类寿命的自然限制和系统的分离,它们对于实际用途来说是足够唯一的。

我们要选择全球监控吗?

原文:https://towardsdatascience.com/are-we-opting-into-global-surveillance-c088d2b71bf7?source=collection_archive---------10-----------------------

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

The technology we use is always watching.

当乔治·奥威尔写《1984》时,他描绘了一幅在政府监管下运作的社会图景。奥威尔从未想象过一个人们选择监视而非隐私的世界;老大哥是一个要求,而不是一个选择。然而,他在 20 世纪 40 年代写了这部小说,那是在每个人都带着追踪位置、声音和个人信息的手持设备四处走动的几十年前。快进到大约 70 年前,戴夫·艾格斯创造了一个围绕着的世界,这个圈子,一个通过访问个人信息来控制社会的科技企业。《圆圈》最近被拍成了一部重要的电影,它是一个迷人的世界,在这个世界里,要求人们顺从的社会压力让人们害怕被忽视。基于谷歌、脸书和亚马逊等科技巨头,埃格斯的反乌托邦感觉比政府监管的监控更接近我们当前的现实;即使存在像 2015 年网络法案这样的政策。

亚马逊回声(Amazon Echo)或谷歌主页(Google Home)等语音激活设备的用户选择在家中进行全天候监控。这些“永远在线”的设备只会在你说出正确的命令时做出响应,但它一直在监听。就在最近,亚马逊同意向调查一起谋杀案的警方发布 Alexa 录音,而此前他们拒绝了这一要求。这个例子证明亚马逊可以访问这些设备上的所有记录。

任何人只要插上 Echo,就能让亚马逊获得他们家中的每一次对话和噪音。监听设备不是唯一的;监视你的宠物的家庭安全硬件,你授权访问你的麦克风的智能手机应用程序是监控游戏中的其他罪犯。今年早些时候, Vizio 解决了一起据称出售智能电视用户观看数据的案件。甚至不用说话,你的设备就能跟踪你的一举一动和声音,然后利用这些信息赚钱。

Snapchat 的新功能 Snap Map 可以在全球实时地图上追踪你的朋友。它还显示在任何给定时刻发生最多快照的地方的“热图”,以及来自世界任何地方的不同地点和事件的实况报道。通过选择地图功能,你的朋友(很可能还有其他人)可以看到你在哪里。一直都是。通过在“我们的故事”中添加快照,人们可以更容易地发现您的图片和视频。

我们不打算互相监视,但这是快照地图等新功能的次要影响吗?随着无人机越来越受欢迎,不无意中发现彼此的秘密和信息几乎是不可能的。将世界各地的人们联系起来肯定有积极的影响,比如文化共鸣和对你周围世界的更多了解。但那只是故事的一面,你打赌不是大家不看就同意的“条款和条件”那一面。

我们提供的信息越多,留给自己的就越少。如果知识就是力量,我们会心甘情愿地将力量给予那些能够剥夺我们权利和特权的实体。当人们选择监视自己时,我们的政府没有必要制定监视法。

我们在照顾我们的孕妇吗?

原文:https://towardsdatascience.com/are-we-taking-care-of-our-pregnant-women-8863980f3830?source=collection_archive---------4-----------------------

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

Image by CARE International

不可否认,分娩是所有物种最珍贵和最美丽的时刻之一,当然也是人类最珍贵和最美丽的时刻之一。这对女性来说是一个非常重要的时刻,她们应该采取一切可能的安全措施来保护自己和孩子的健康,对吗?这听起来非常简单明了,但实际上并非如此。

根据世界卫生组织的报告,每天约有 830 名妇女死于与怀孕和分娩相关的可预防原因,据估计,2015 年约有 303 000 名妇女在怀孕和分娩期间或之后死亡。

尽管在 1990 年至 2015 年间取得了巨大进步,全球孕产妇死亡率下降了约 44%,这要归功于千年发展目标 5——改善孕产妇健康,但在一些国家,分娩仍然是一个危险的过程。这主要是由于获得保健服务的不平等,因为 99%的孕产妇死亡发生在发展中国家。

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

Image by UNFPA Philippines

你知道在你们国家,妇女一生中产妇死亡的风险有多大吗?

世界银行与世卫组织、儿童基金会、人口基金和联合国人口司共同提供的一些统计数据显示,平均而言:

  • 在发达国家,4900 名妇女中有 1 名最终会死于母亲原因;
  • 在发展中国家,180 名妇女中有 1 名最终会死于母亲原因。
  • 在脆弱的国家,每 54 名妇女中就有 1 名最终会死于母亲的原因。

很清楚的数字,你不觉得吗?点击 此处 了解你们国家的费率是多少。

据世卫组织称,妊娠和分娩期间及之后与孕产妇死亡相关的最常见并发症有:

  • 严重出血(多为产后出血)
  • 感染(通常在分娩后)
  • 妊娠期高血压(先兆子痫和子痫)
  • 分娩并发症
  • 不安全堕胎
  • 怀孕期间的疟疾或艾滋病。

为了缩小发达国家和发展中国家之间仍然存在的巨大差距,并保证全世界的妇女、青少年和儿童能够获得高质量的医疗保健,世卫组织和利益攸关方制定了2016-30 年全球妇女、儿童和青少年健康战略,我们进入了可持续发展目标 (SDGs)时代。第三项可持续发展目标为妇女和孕产妇健康设定了非常重要的目标:

可持续发展目标 3:确保健康生活,促进所有年龄段所有人的福祉*(点击**查看可持续发展目标 的完整列表)*

  • 到 2030 年,将全球孕产妇死亡率降至每 100 000 例活产中不到 70 例。
  • 到 2030 年,确保普遍获得性保健和生殖保健服务,包括计划生育、信息和教育,并将生殖健康纳入国家战略和方案。

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

可持续发展目标和全球战略对于解决国家内部和国家之间令人震惊的不平等和不公平极其重要,对全世界妇女来说当然也很重要。为确保所有战略和举措得到有效实施,联合国任命了独立问责小组(IAP ),每年报告全球战略和可持续发展目标的进展情况。在他们去年九月发布的第一份报告中,不平等是结果回顾的核心:

国家内部和国家之间的不平等是妇女、儿童和青少年健康的根源。

IAP 指出的挑战之一是准确数据的可用性,尤其是在欠发达的卫生信息系统场景中,因为信息是正确分析进展的基础。该报告指出,在一个技术迅速发展的时代,我们不得不依赖对基本指标,如孕产妇死亡率的估计,这是不可接受的,这是完全正确的。

《国际行动计划》强调,需要在加强卫生管理信息系统的同时,监测《全球战略》下的进展,包括提高国家统计机构的能力和独立性。

不可否认的是,在妇女、儿童和青少年健康方面取得了巨大进步,但同样不可接受的是,妇女仍然死于怀孕期间或之后可预防或可治疗的并发症,这主要是由于获得保健服务方面的不平等。

所以,还是照顾好我们的孕妇吧!

参考文献

世界卫生组织— 孕产妇健康

联合国— 可持续发展目标

独立问责小组— 【妇孺】

我们到了吗?

原文:https://towardsdatascience.com/are-we-there-yet-daceccfdea38?source=collection_archive---------18-----------------------

数据科学中的项目管理

昨天,一位 Redditor 在r/data science上问了一个很棒的问题,当我写下回应时,这个问题让我的思绪向几个方向移动。我也希望在这里听到每个人的想法,特别是如果你有自己处理项目风险的技巧。reddit 的帖子可以在这里找到。 我(略加编辑)的回应如下。

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

Project management can be dirty work.

问:数据科学家如何管理项目和团队?你如何估计持续时间和资源?

这些都是很棒的问题,我认为人们问得不够多,这也是我写像数据科学家一样思考的主要原因之一。一个完整的章节致力于项目规划,另一个完整的章节是关于各种环境下的项目执行。我认为要很好地运行项目需要很多思考和考虑,我不认为我能在这里做到公正,但我会看看我是否能指出在这种情况下有所帮助的一些事情:

不确定性意识

首先,我一直在谈论“不确定性意识”的概念,因为数据科学和统计任务远比软件开发更不确定,例如,在一项任务可能需要多长时间方面,甚至该任务是否可能

考虑一个数据科学项目的基本示例,其中您可能会看到这样一句话,“我们的目标是能够以 95%的准确率预测业务成果 X。”在项目开始时,我们不仅不确定需要多少时间和精力才能达到 95%,而且我们甚至不知道数据是否支持达到 95%。

因此,我喜欢强调的一点是,需要正式承认项目的哪些部分具有最大的不确定性,并制定计划来减少不确定性。减轻上述例子的一个方法是与产品/业务/客户人员讨论是否“95%或破产”,或者 80%对于产品的第一个版本是否合适,或者类似的事情。

灌篮+尽可能好,否则

以这种方式思考可以让你制定一个项目计划,其中包括在确定性方面“稳操胜券”的部分,然后对于不确定的部分,你可以计划让它们“在 2 周内尽可能好”或类似的东西。

如果你这样做了,你将拥有一个数据科学产品,它将花费同样多的时间来构建一个等效的——更可预测的——软件工程产品。主要缺点是结果的准确性/质量不会像你希望的那样高,但至少你有一个完整的结果和产品可以展示。以后改善结果可以是后续项目。

这可能不是在每种情况下都理想,但我发现它非常有帮助。

进入:流程图

我喜欢使用的一个概念规划工具是显示项目步骤的流程图,我在流程图中包含了我的不确定性。为此,我在流程图中加入了一些提问“这些结果够好了吗?”如果则路径通向一条路,如果则通向另一条路。您还可以对项目中的某些步骤设置时间限制。我喜欢将这些想法形式化,这样团队中的每个人都知道它将如何工作。

下面是《T5》一书中的几个流程图示例:

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

Examples of flowcharts for projects in data science, from Think Like a Data Scientist, chapter 6.

问:你对数据科学家的项目管理有什么建议?

如果你喜欢这个,看看我的其他帖子:

[## 数据科学真的是“科学”吗?

为什么数据科学可能是一个严格的领域,不同于它的前辈

towardsdatascience.com](/is-data-science-really-a-science-9c2249ee2ce4) [## 检查您对数据的假设

没有人喜欢糟糕的假设

towardsdatascience.com](/check-your-assumptions-about-your-data-20be250c143)

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

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

科技训练营值得吗?一个人的旅程

原文:https://towardsdatascience.com/arebootcampsworthit-b8eb4d28770d?source=collection_archive---------0-----------------------

去年 8 月和本科一起数学毕业。我学过一些编程,我喜欢它,但是我和计算机科学或工程专业的学生没有竞争力。我想把下一步和编程作为我的职业,但我需要在我的学生贷款生效之前尽快完成。我开始寻找训练营来开始我的职业生涯。

科技训练营无处不在。他们分布在每个主要城市,在技术领域扮演着不同的角色。大部分是做前端 web 开发的,但我选择了从事数据科学。4 月,经过 12 周密集的数据科学培训,我从 Metis 毕业。我不得不投入大量的现金,以及大量的辛勤工作,但我得到了很多回报。

训练营能为你做什么?

现在,大多数训练营是为前端 web 开发准备的,但是有各种不同的类型。Metis 芝加哥校区的开放式办公空间与 Dev Bootcamp 共享。在梅蒂斯,我学到了不止一种训练营的细节。为了这篇文章,我将严格地谈论我的个人经历,但是许多训练营有共同的主题或结构,因为管理他们的人会以其他成功的训练营为榜样。

训练营的目的是给你一份工作。这并不意味着你将在 12 周内成为你的手艺的大师。其实毕业的时候才是真正学习开始的时候。在训练营期间,你会发现你到底有多少不知道,从那里你可以开始继续学习、提高技能和实践的漫长旅程。训练营的存在是为了让你快速上手,给你尽可能多的实践经验,并在之后帮助你找到工作。

训练营的一天

那么 Metis 的数据科学训练营到底是什么样子的呢?首先,它长达 12 周,每周 5 天,每天 9 小时。这还不包括你课外工作的时间。训练营将使用“身临其境”这个词——这正是他们的意思。在这 12 周里,我建立了 5 个使用真实世界数据的机器学习项目,我还创建了一个博客来展示其中的一些,并确保我的 GitHub 符合标准。最重要的是,我每天都和同学一起练习编码、解决问题和演示技巧。训练营的理念是就一个话题进行演讲,然后立即付诸行动。要学的东西太多,时间又太少,你需要把自己的手弄脏,这样才能坚持下去。

在课堂之外,我每周至少参加一次活动。这些可能是客座演讲,网络活动,或者只是社交。很多数据科学家来和我的班级严格对话,给我们讲他们的工作,回答问题。其他人是为了更大的对公众开放的活动而来的——Irmak Sirer甚至做了一个关于使用生成对抗网络来创建他的脸的图像的演讲!所有的活动都是建立关系网和课后放松的好机会。

我每周都接受某种形式的职业培训。这表现在与我的职业顾问进行一对一的会谈,不同的研讨会,或者与我们分享新的资源,为我们的职业寻找做准备。更不用说职业头像(看看我的 LinkedIn )、名片和认真的简历修改了。我们还花了很多时间进行模拟面试(技术和其他方面的),这被证明是非常宝贵的。最后,我们举办了一个职业之夜活动,受到了招聘人员的猛烈抨击,我有机会展示了一个我花了三周时间进行的激情项目。

毕业后

一旦你完成了训练营,你就进入了一个校友社区。对于 Metis(和 Dev Bootcamp)来说,这意味着一个私人校友渠道。每天至少有一次新的工作发布。通常是由职业发展部的人写的,但是更多的资深校友经常发布他们公司正在招聘的信息——谈论一个伟大的网络!人们也张贴各种伟大的文章和资源。如果你参加类似于 PyCon 或其他会议,这是一个很好的社交和结识他人的方式。最棒的是你是终身会员。展望未来,你将拥有一个由数百名数据科学家(开发人员等)组成的网络。)有着各种各样的经验。你将直接获得有助于你职业发展的机会,也有机会雇佣刚毕业的聪明、上进的人。

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

My graduating cohort :]

此外,Metis 和 Dev Bootcamp 的毕业生可以进入他们的私人招聘平台雇佣。Employ 有点像 LinkedIn,但只针对 Metis 和 Dev Bootcamp 的毕业生(如果你想知道的话,这两个阵营都属于同一家母公司)及其招聘伙伴。这意味着招聘人员或数据科学家可以查看您的个人资料和突出显示的项目。同样,你可以直接联系未来公司的人并得到回应!

最重要的是,如果你想进来工作,你可以继续使用办公空间。这意味着你将有更多的机会与你的职业顾问见面——他将永远是你的职业顾问——并且你可以继续参加每周的活动。

我的经历

是时候公布你们期待已久的细节了!我会保密的。如果有任何你想回答的问题,请留下评论,我会尽快回复你。

在 Metis 之前,我面试的职位在 50-62 万美元之间。毕业后,我在**$ 85–105k**范围内有竞争力。训练营花费了 15500 美元。我大学学的是纯数学,做过一些编程。就像我热爱抽象数学一样,我 真的热爱 机器学习。对于我的职业、我新发现的激情和未来,我再兴奋不过了 。

在毕业前和毕业后的几周里,我面试了几家公司。最终,我在 HERE Technologies 接受了一份带薪实习,之后有可能去 FTE。我选择这里有几个原因:

  • 给我提供工作的首席研究工程师是一个杰出的人。我非常乐意在他手下工作。
  • 我正在与计算机视觉和深度学习方面的专家合作。我知道这个职位会让我在继续学习。
  • 工作地点是在科罗拉多州的博尔德。我很高兴改变了节奏,可以去滑雪了!
  • 我是高度自动化驾驶团队的一员。我们的平台和模型将很快以一种非常真实的方式影响世界。

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

A view of the Flatirons.

对我来说,这是一份理想的工作。如果没有我在 Metis 接受的额外培训,我不可能从一个数学学士升到如此有竞争力的位置。

我忘了说什么了…?

人民。当你考虑报名参加训练营时,这是一个非常重大的决定,也是一个个人决定。这都是关于你,你的事业,你的钱,你的生活。几乎所有的训练营都有一个申请过程,他们最终会拒绝很多申请人。这意味着你将被其他学生包围,他们都做出了同样的重大决定,他们都应该在那里。你的同学将会很棒,你们将会一起分享你们在训练营的时光!我不知道这些关系最终会成为训练营经历中最有价值的部分。

同样,教师也是非凡的。他们来自不同的背景,但都是经验丰富的专家。在 12 周的时间里,我从他们身上学到了很多东西,其中很多是课程上没有的知识。我学到了职业技巧,更多的小众机器学习技术,等等。我认为我的导师是我的朋友,也是我网络中最好的联系人。

放弃

显然这是我的个人经历,你的可能不一样。一定要做足功课,有选择性,最重要的是做好工作准备。参加训练营并不意味着你有资格获得工作。如果你参加一个,你将不可避免地听到一个关于某人没有完成它的恐怖故事。记住训练营的存在目的——让你快速上手,给你尽可能多的实践经验,然后帮你找到工作。剩下的就看你的了。

和安东尼·鲍代恩一起环游世界——一个叶子教程

原文:https://towardsdatascience.com/around-the-world-with-anthony-bourdain-a-folium-tutorial-7e9ad63fb650?source=collection_archive---------5-----------------------

食物和旅行是我童年成长的核心。提供热腾腾的饭菜是我家人表达爱的方式,我是在缅甸和中国美食的熏陶下长大的(谢谢妈妈!).我父母带我们去了他们能去的任何地方,以此来拓宽我们在德克萨斯州达拉斯郊区以外的视野。夏天的公路旅行,偶尔去香港拜访我爸爸的家人,大学毕业时去挪威,最近一次是去日本的家庭旅行。

我们决定去日本后做的第一件事是什么?当然是看《无预约》东京集。我的整个家庭一直喜欢安东尼·鲍代恩的所有表演,他激发了我们长久以来的旅行欲望。所以当我看到一个包含他的节目每一集的位置数据的文件时(感谢 Christine Zhang 提供的数据集),我知道我想要弄清楚如何映射它。我想要一个交互式地图,你可以放大和缩小,点击一个特定的城市,并查看它播出的节目、季节和剧集。让我们开始吧。

用叶子作图

在对交互式地图工具和库做了一些研究后,我选择了 follous,因为它可以在 Jupyter 笔记本中轻松地进行内置地图渲染。地图本身是一个名为传单的 Javascript 地图库的一部分,而 Folium 是一个类似于传单包装器的工具,可以让你用 Python 调用地图。他们的 Github 上有几个令人难以置信的关于叶子地图的例子,我强烈建议看一看!

在用熊猫阅读了。csv 并将其转换为列表,检查我们正在处理的数据:

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

非常酷,它有我们需要的一切,但我们必须清理一下。通过文档查看映射函数和标记变量所需的数据类型。在这种情况下,我只需要坐标和弹出文本。正如我提到的,我希望弹出文本包含剧集、季节和城市名称。

我开始使用的数据看起来完美无瑕,直到我遇到似乎无穷无尽的数据类型错误。我将简短地讲述我所学到的东西:

  1. **坐标数据类型需要是元组或列表。**原始数据集将经度和纬度设置为一个长字符串,即‘29.951066,-90.071532’。将数据类型更改为:[29.951066,-90.071532]。
  2. 没有撇号??如果你的标记中有撇号,叶子就不会渲染。它不会绘图,但也不会向您抛出错误。您的地图将无法渲染。我坐了很久,心想可能是我的数据集太大了,结果发现地图刚刚坏了。我希望这能节省你一些时间。

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

a simple .split() and .replace() fixes both of these errors!

3.**取出所有空/南值。**这很容易用熊猫函数 isnull()来完成。

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

pd.isnull() Detects missing values for an array-like object.

很好。干净的数据是最好的数据。现在我们可以设置变量了。我更喜欢在设置变量时使用字典,所以让我们把这个列表变成字典列表:

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

现在我们的数据更容易阅读,因此更容易调用。

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

现在我们有了字典列表,我们终于可以映射了!正如你在下面看到的,我把原始地图的参数硬编码到了参数中。然后,我浏览了每本字典,并在每个坐标上做了标记。我想为这个地方播出的每个节目做一个不同颜色的圆形标记,这是通过三个“如果”语句完成的:

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

现在我们只需要调用我们的地图,然后…

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

出现野图!我们现在有了一个漂亮的地图(我用了雄蕊调色砖),每个位置都有彩色编码的圆圈标记。而且是可以点击的!

“未预订”是浅蓝色圆圈
“零件未知”是深蓝色圆圈
“中途停留”是红色圆圈

带上热火…地图

好吧,让我们再加把劲。Folium 拥有大量令人惊叹的插件,可以轻松定制地图的美感以及与地图交互的方式。

在这种情况下,一个有用的方法是 Heatmap,在导入插件后,通过将每个位置循环到 HeatMap()函数中就可以很容易地做到这一点。

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

Folium 有许多图块(地图样式)可供选择,所以我在这里切换到“CartoDB Dark_Matter ”:

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

就是这样!为了更进一步,还有另一个名为 HeatMapWithTime 的插件,它将根据日期(或季节)为您的地图制作动画。)与您的坐标相关联。

Folium 非常容易使用,并且有许多内置的功能来帮助你定制你的地图。我希望这个教程是有帮助的,或者你已经被激励去继承 Bourdain 鼓舞人心的遗产,去新的地方旅行。

A/B 测试中的到达率偏差

原文:https://towardsdatascience.com/arrival-rate-bias-ab-testing-1-d291ae9d0cab?source=collection_archive---------2-----------------------

好事降临在那些迫不及待的人身上,第 1 部分

这篇文章与 艾伦·西罗利 合著,是我们关于 A/B 测试中到达率偏差校正的两部分系列文章中的第一篇。我们非常感谢我们的 财富前沿数据科学 同事 林秀吉 ,感谢他的宝贵投入。第二部分可以在这里找到

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

“people walking on sidewalk” by rawkkim on Unsplash

像许多科技公司一样, Wealthfront 利用产品内测试和实验来学习和决策。特别是,我们利用现有客户群的产品内 A/B 测试来了解产品决策如何导致行为变化。然而,我们的产品和业务有一些特点,使得进行这些实验和从实验结果中做出有效的推论变得复杂。例如,在客户端级别而不是会话级别测量效果,需要小心。与治疗同时显现相反,效果的测量可能需要天或数周才能实现。最后,现有客户的产品内测试所特有的一个挑战来自于产品使用率的异质性所导致的遵从偏差。这种现象,我们称之为“到达率偏差”,是我们接下来两篇文章的主题。在第 1 部分中,我们涵盖了以下几个部分:

  1. 定义问题
  2. 实施到达率
  3. 展示这种偏见在真实实验中是如何体现的
  4. 介绍潜在的解决方案

在第 2 部分中,我们将更深入地探讨我们实现的解决方案的细节,并讨论其对功耗计算的影响。

问题是

作为随机对照试验(RCT)的一种形式,A/B 检验要求观察值随机抽样。虽然这个相当明显的要求很容易解释,但在实践中实现起来可能比预期的要困难。例如,很难简单地确保观察结果在对照组和治疗组之间随机分割。当在移动设备上进行 A/B 测试时,这可能特别具有挑战性,在这种情况下,治疗组(而非对照组)的用户需要升级他们的应用程序,以暴露于一种变体。然而,在随机分配之前的样本选择过程中引入的偏差似乎没有得到足够的重视。

桶装

当运行产品内 A/B 测试时,我们首先将所有现有客户随机“分配”到对照组或治疗组。原则上,这种随机分配应该给我们一个平均治疗效果(ATE) 的无偏估计。然而,直到客户实际登录网络或移动设备时,他们才“进入”给定的实验。我们对分桶客户的样本进行推断,以避免因未曝光而稀释测量的效应大小。然而,这种机制在我们的聚合实验样本中引入了偏差,因为登录越频繁的客户端越有可能被淘汰。因此,平均而言,这些客户在我们的样本中被过度代表,并且更早进入实验。此外,如果客户“到达”财富前线的倾向与他们对我们实验的反应倾向相关,那么在我们测量的 ATE 中可能存在选择偏差。例如,如果年轻客户(根据生物年龄)比年长客户登录更频繁,并且如果这一年轻群体更有可能对我们对 UI 所做的更改做出积极响应,那么我们可能会看到年龄混淆因素引入的偏差。

我们有证据表明这种事情可能正在发生。我们的财务规划团队最近进行了一项实验,以更清楚地推销我们的家庭规划功能。这项测试的目的是,看看我们是否能够增加制定家居规划目标的客户比例,同时避免对其他指标(如保留率和参与度)产生任何负面影响。使用我们的内部 A/B 测试平台,它提供了对存储和处理效果的实时监控,我们观察到了这样的 ATE 时间序列:

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

Lift Decay in an experiment with Arrival Rate Bias

这个问题可能存在于任何在用户层面衡量效果大小的公司,但到达率偏差对 Wealthfront 来说尤其严重,原因有三。最重要的是,我们的客户在到达率方面表现出显著的异质性:许多客户每月或每季度登录一次进行检查,而其他客户则每天登录并更加关注他们的投资组合。此外,与其他数字产品相比,我们的客户登录的频率相对较低(可能是按照我们的建议“设置好就忘了”。最后,由于我们经常测量在数周或更长时间内实现的治疗效果,我们的客户到达率分布的性质所导致的问题变得更加严重。例如,401(k)账户展期并不是客户完全可以在应用程序中完成的事情,一旦这个过程开始,可能需要几周才能完成。我们的投资组合信用额度功能通常被客户用来满足大量但不常见的流动性需求,这意味着我们对他们使用的任何影响都不会很快得到衡量。

到达率

为了研究未观察到的到达倾向和它对我们的实验推论的影响之间的关系,我们定义了一个事前观察到的度量,它可以预测客户的事后到达时间(X)。这些“到达率”可以从客户在给定实验开始之前的最近会话历史来估计。参照泊松过程的速率参数,我们将到达速率度量表示为λ(λ)。该参数的无偏估计是从用户在实验开始前的倒数第二次会话开始的时间的倒数( T )(其中 S_k 是第 k 次到最后一次会话的时间):

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

这个定义具有连续的优点。考虑的会话数量很少,足以有效地代表客户端的瞬时到达率,我们知道这很重要,因为我们有证据表明到达率是随时间变化的。重要的是, λ_i 的这些启发式计算仅利用实验开始之前的用户会话历史,而不是分桶时间之前的用户会话历史。这是有意的,因为在声明两者之间的关系时, λ_i 和直到分桶的时间应该是独立的。

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

Frequent arrivers are more likely to be bucketed

上面的图表明,通过证明 λ 与我们在家庭规划实验中遇到的客户比例正相关且单调相关,事前估计的 λ 可以准确捕捉事后到达倾向。最后,当我们比较加入实验的客户和没有加入实验的客户的到达率分布时,很明显存在有意义的选择效应。

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

Bucketed users have higher arrival rates

量化到达率偏差

到达率偏差的第二个必要条件是作为 λ 的函数的差分效应大小。如果频繁的到达者和不频繁的到达者一样有可能改变他们的行为来回应我们的实验,那么我们没有什么可担心的。但是如果它们的反应不同,那么 ATE 可能会有偏差。在我们的家庭计划实验中,我们可以使用逻辑回归来估计治疗效果的异质性:

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

其中如果客户在治疗组中,Z 等于 1,否则等于 0。我们之所以选择这种形式,是因为我们的实验测量了创建家庭规划目标的客户的比例。如果我们绘制治疗组和对照组的反应函数,我们会看到异质性的证据:

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

We observe heterogeneous treatment effects in lambda

对此的一种解释是, λ 与可观察指标——任期、年龄、净资产、收入——相关,而这些与客户行为更直接相关。事实上,我们知道情况是这样的。此外,治疗组中的高- λ 客户在遭遇挫折后有更多的机会采取行动,因为他们更频繁地接触我们的治疗。

为了估计本例中到达率偏差的严重程度,我们可以使用模型的预测值来计算 ate,该模型的预测值是从 λ 的总体分布中采样的值。预测的反事实平均值的标准误差是自举的。我们观察到,分桶客户样本下的 ATE 与观察到的平均效应大小相匹配,这让我们对模型的准确性充满信心。客户群体的预测效应大小较低,这与上述反应图中效应大小的增加和本文第一个图中 ATE 的减少是一致的。

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

Under our model, the population effect size is below the that of the experiment

一个简单的层次模型

我们可以进一步探索到达率偏差的严重程度如何随着收集的样本分数而变化。在这一点上,写下一个简单的层次模型是有益的。假设每个客户的到达率来自某种分布 F_λ ,他们的首次到达时间 X_i 来自指数分布(泊松假设):

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

目测表明 LogNormal(μ,σ)是 F_ λ 的合理参数化。下图显示了我们的家庭规划实验中 λ 的经验总体分布的最大似然拟合:

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

A lognormal model captures the empirical population distribution of λ

然后,我们将 K 定义为随机分配给我们的实验的客户端数量, N 定义为到达并被分桶的累计数量,R:=N/K定义为在给定时间分桶的已分配客户端的比例。使用拟合的分布,我们可以很容易地计算基于 R 的到达偏差分布。在有偏分布 H_λ ( λ 上对估计的效应函数τ(λ)进行积分; R ),我们可以估计 R 的任何值的相对偏差 B ( R ),而不仅仅是实现的 R (实际进入实验的客户比例)。下面我们画出相对偏差*

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

作为我们家庭规划实验的功能。注意,当 R 接近 1 时,偏差接近 0。我们看到,对这些实验估算升力的天真解释会产生明显有偏差的推论。

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

Significant bias remains even after nearly half of the eligible clients arrive

潜在的解决方案

我们考虑到达率偏差问题的三种可能的解决方案。首先,用于量化上述偏差的回归方法可以通过控制混杂变量来进行修正。然而,这只能控制可观察的,而我们下面研究的方法也允许我们控制不可观察的(因为我们知道分桶机制)。第二,我们随机预选要被包括在实验中的客户,并等待这些客户中的一部分到达现场。最后,我们对到达并加入到我们实验中的客户的回答进行重新加权,以近似我们整体客户群的分布。对于结合回归和倾向加权的“双重稳健”估计量,见本文

预选

在一个没有时间限制的世界里,我们更愿意预先选择 K 个现有的客户,然后等待他们全部到达站点。这将在实验开始时给我们一个关于现有客户群的无偏见的样本。但是,如前所述,这 K 个客户需要几个月才能到达,我们需要在更短的时间内进行因果推断。

一种解决方法是通过测量到达的前 N 个客户端的影响大小来权衡时间偏差。认识到我们估计的偏差随着 R 的增加而下降,可以让我们做出明智的决定:我们愿意接受多大的偏差,以及这是否允许我们在分配给实验的时间内收集我们需要的样本。例如,我们可能随机抽取 K = 20,000 个客户端,并等待其中第一个 N = 15,000 个客户端被存储(R = .75)。这个 R 意味着一定量的预期偏差,可以简单地通过增加 R 来减小该偏差。这种方法的好处在于,等待第 N 个客户端到达的时间仅取决于 R,而不单独取决于 N 或 K。

上一节中介绍的我们的住宅规划实验的相对偏差图显示,我们实际收集的样本数量意味着大约 20%的相对偏差——超过了我们可以容忍的程度。我们本可以等待更多样本的到来,但是 R 越接近 1,采集样本的时间就越长。考虑到我们的客户每月、每季度甚至更少登录,这是不可行的。此外,预选不适于实时监控,因为它仅在 R 接近 1 时收敛到正确的答案,而我们希望在每个时间步长对 ate 进行无偏估计。幸运的是,这是我们解决问题的下一个方法的特征。

反向倾向加权

加权采样是解决到达率偏差问题的另一种可能的解决方案。在因果推理文献中可以找到对样本重新加权的各种方法。这些重新加权的方法允许在选择可观察物的情况下进行稳健和灵活的因果建模,但是,如前所述,它们不能消除由于未观察到的混杂而产生的偏差。然而,我们对分桶机制的了解允许我们直接控制这些未观察到的因素。

我们实施的具体方法被称为反向倾向加权(IPW)。我们减持了高到达率的客户(那些极有可能被炒股的客户),增持了低到达率的客户。通过选择适当的权重,我们可以对进行采样,就好像来自的无偏分布。为了说明这一点,让我们回顾一下前面描述的层次模型。假设λ的总体分布具有密度 f_λ(λ),到达时间 X 的边际分布具有分布 G_X(x)。则λ的到达有偏分布具有某个密度 h_(λ|X≤Z)(λ),其中 Z := G_X^-1®(使用 X_(N)的渐近论证,第 N 次跳跃/到达的时间)。我们想要一个将 h 转换成 f 的权重函数:

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

这恰恰是似然比 f _λ(λ)/h _(λ| X≤Z)(λ;r)。一个更有用的表达是:

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

其中分母表示到达速率为λ_i 的客户端在收集到 R = N / K 个样本时将被分桶的概率。一点数学表明,这个表达式等价于似然比:

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

直觉上,对于可能被淘汰的客户来说,权重较小(因为他们的到达率很高,在我们的样本中他们的比例更高),而对于不太可能被淘汰的客户来说,权重较大。事实上,倾向是 R 的函数,这意味着权重为我们提供了收集的任意数量样本的 ate 的无偏估计,这是我们实时监控设置所需的一个关键属性。

后续步骤

虽然它解决了我们最初的问题,但是 IPW 引入了一个折衷。也就是说,虽然我们可以恢复 ate 的无偏估计,但是估计量的方差被权重放大。这意味着对于一个给定的实验,我们需要更大的样本量来达到一些设定的统计功效目标。一个需要回答的关键问题是“大多少?”在这篇文章的第二部分,我们将提供一个解决方案,并记录 IPW 校正对模拟和实际实验的影响。

机器学习时代的艺术鉴赏

原文:https://towardsdatascience.com/art-connoisseurship-in-the-age-of-machine-learning-d72e8a3716df?source=collection_archive---------5-----------------------

作为一名数据科学新手,我对真正的数据科学家如何解决现实世界的问题很感兴趣。阅读了许多张贴在 Kaggles 上的挑战,我在寻找这些专家如何应对有趣比赛的见解。一个让我吃惊的挑战是“数字画家”挑战。它要求参赛者开发一个程序,可以识别同一位艺术家的画作。

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

Left: “The Lacemaker”, van Meegeren, 1925, courtesy of the National Gallery of Art, Washington D.C… Right: “Lady Reading Music”, van Meegeren, 1936, courtesy of the Rijksmuseum, Amsterdam.

几行代码怎么能开发出和专家一样的‘眼力’呢?作为一个自称艺术史爱好者,我对此表示怀疑!如果我很难通过一个关于赝品的 Buzzfeed 测试,那么计算机如何能在识别赝品方面做得更好?

专家们训练了多年来寻找艺术家的手留下的唯一标识符。这些专家用他们的眼睛,他们的直觉,通常还有大量的科学来鉴定艺术品和赝品。那么,计算机能代替他们的专业知识吗?一个算法能告诉我们两幅画是不是同一个笔刷画的吗?

首先也是最重要的一点是,为什么电脑能区分两幅画很重要?艺术品市场不受监管、不透明且不正规,这使得它容易受到各种层面的操纵,尤其是伪造。2017 年的总销售额不到 640 亿英镑,艺术品的买卖是一项大生意。艺术市场总是依赖专家和可疑的鉴赏科学来确认作品的真实性。艺术品伪造诉讼价格昂贵,伪造艺术品多年来一直是困扰博物馆和收藏家的问题,随着人工智能的进步,检测赝品变得更加可扩展和负担得起。

回到“数字画师”,挑战包括 79,433 个实例,训练集中有 1,584 个独特的画师,需要对大约 2200 万对测试集进行预测。这项挑战的获胜者 Nejc Ilenic 首先通过清理他的数据集来完成这项任务,在这种情况下,是艺术品图像,然后他创建了一个模型,提取画家的独特风格,并教会机器学习与艺术家类别相关的这些特征。最后,为了测试他的模型,他使用了一种算法来可视化数据,以比较这些测试集对的输入实例有多相似。

下图所示的两个散点图,提供了 Nejc 的程序如何能够区分不同的艺术风格和同一艺术家的群体作品的可视化,即使模型在训练阶段没有看到这些作品的例子。

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

就个人而言,挑战中最有趣的部分是机器能够多好地识别约翰内斯·维米尔和韩·范·米格伦作品之间的差异。如下图所示,这两位艺术家作品的相似之处,外行人几乎难以分辨。韩·范·米格伦伪造弗米尔的画作是最富传奇色彩的艺术仿冒故事之一,他出售二战前荷兰画作的仿制品,赚了 3000 万美元(经通货膨胀调整后)。尽管范·米格伦用这位 17 世纪荷兰大师的赝品骗过了许多专家,但他没能骗过电脑。因为维梅尔的画与他的其他作品更相似,而范·米格伦从几个不同的艺术家那里复制了他的风格,所以 Nejc 的程序能够识别范·米格伦数据集中的不一致,并从范·米格伦的作品中识别维梅尔的作品。

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

Left: Woman reading a letter, Johannes Vermeer, 1662–1663, courtesy of the Rijksmuseum, Amsterdam. Right: Woman Reading Music, by Han van Meegeren, 1935–1936, Rijksmuseum, Amsterdam

在阅读了《数字画家》(Painter by Numbers)之后,我对技术如何能够识别赝品产生了兴趣,于是我扩大了研究范围,看看是否有任何创新的方法可以在艺术领域利用数据科学。谢天谢地,谷歌没有让人失望。我发现了一篇由罗格斯大学和荷兰绘画修复与研究工作室的研究人员撰写的论文,题目是“毕加索、马蒂斯还是赝品?
笔画级别的图纸自动分析,用于属性和认证
这项研究发表了名为递归神经网络 (RNN)的人工智能如何通过比较构成图像的笔画来发现伪造艺术品的发现。通过将画作分解成一行行的笔触,RNN 学会了这些笔触的特征,这些特征对于识别艺术家非常重要。同时,一个机器学习算法被训练来寻找这些特征,如每一笔的线条粗细,以识别艺术家。人工智能和机器学习的结合方法协同工作,使研究人员能够在 80%的情况下识别图像的艺术家。

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

Examples of segmentation results. Schiele ink drawing. — best seen in color

为了测试系统识别假货的能力,研究人员还委托艺术家创作与数据集中的作品风格相同的画作。该系统能够识别每一个实例中的伪造品,只需查看一个笔画,如下例所示。

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

From page 7 of ‘Picasso, Matisse, or a Fake? Automated Analysis of Drawings at the Stroke Level for Attribution and Authentication,’. Examples of fake dataset mixed with real drawings. Key: Fake, Fake, Matisse Matisse, Fake, Fake, Matisse Fake, Matisse, Picasso, Fake Fake, Picasso, Picasso, Fake Schiele, Fake, Fake, Schiele, Schiele, Fake

艺术史是一个有着几个世纪传统的领域;然而,随着人工智能的许多令人兴奋的进步,我很兴奋地看到这项技术将如何在美术世界中实现。“这台机器比人眼有优势,因为它可以分析成千上万的单个中风,并从统计上描述它们的特征,”进行这项研究的科学家之一艾哈迈德·埃尔加马尔说。“如果我们训练机器根据艺术家有意或无意渲染的特征来识别风格,我们将能够检测出赝品。”

想一想这个:一个可以在线条和笔触中检测出艺术家潜意识的算法。祝你好运,范·米格伦先生!

能够向该领域的专家学习解决问题的过程是很有见地的。阅读数据科学家如何应对现实世界的挑战,让我看到了我每天学习的课程如何与数据科学和机器学习领域正在发生的事情的更大图景相关联。

监督模型中选择指标的艺术第 1 部分

原文:https://towardsdatascience.com/art-of-choosing-metrics-in-supervised-models-part-1-f960ae46902e?source=collection_archive---------5-----------------------

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

评估结果可能是每项研究中最重要的部分,因为它展示了你有多准确,你离你的目标有多近。因此,选择合适的性能指标对每个人来说都是一项具有挑战性的研究。

与其他科学领域相比,在机器学习问题中,选择正确的评估指标是一件棘手的事情。在这篇文章中,我将描述监督学习中常用的评估指标。

监督学习已经被广泛应用于机器学习问题中。当你有数据标签时,这是第一选择。就数据类型而言,监督学习分为两类:回归问题和分类问题。您的数据会直接影响您对一系列评估方法的选择。如果数据是离散的,那么预测方法应该从分类方法中选择;反之,如果数据是连续的,回归方法可能适合数据。因此,在监督模型中,无论数据是离散的还是连续的,我们的选择都变得不同;例如,在回归方法中,人们通常使用像平均绝对误差和均方根误差这样的指标。精确度、召回率、F1 值和准确度是分类中经常使用的一些度量。

在本文的剩余部分,我将描述和比较两个最常见的持续评估度量,然后将研究它们的应用。

1- MAE(平均绝对误差):

MAE 是用于计算误差的最常见的指标之一。它衡量应用于连续变量的模型的性能。所以为了计算 MAE,我们首先应该知道这里的误差是什么意思。误差是模型的预测误差:

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

Residual or Prediction Error

我们应该为每一行数据计算这个值,然后取它们的绝对值,最后计算所有绝对预测误差的平均值。MAE 的公式是:

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

MAE Formula

如果我们画一个回归问题的散点图,MAE 就是预测值(回归线上的值)和实际值之间的垂直距离。

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

Scatter Plot of Samples and Errors

在上图中,垂直黑线表示误差值,MAE 是它们绝对值的平均值。因此,我们应该记住,MAE 不考虑数据的方向,也是线性得分,这意味着所有单个误差(垂直线)在平均值中的权重相等。

2- RMSE(均方根误差):

除了 MAE 之外,均方根误差(RMSE)是另一种常用于回归问题的测量方法,它可以告诉您模型的表现如何。和梅一样,这里预测误差是 RMSE 公式的最重要部分。

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

RMSE Formula

该指标显示了误差项的合理大小,如果我们尝试用另一种方式来说,它就是预测误差或残差的标准偏差(它很好地显示了大量偏差)。显然,这种方法向我们展示了数据是如何集中在回归问题的最佳拟合线上的。

RMSE 和梅都关注预测误差,但都不考虑误差的方向。然而,它们之间存在一些差异;最显著的区别是,RMSE 在第一步中取残差的平方,然后取它们的平均值。这意味着它为较大的预测误差分配更多的权重,尽管 MAE 认为所有残差的权重相同;所以我们可以看到 RMSE 证明了预测误差的标准差,换句话说,RMSE 与误差频率分布的方差直接相关。

所以我知道每一个的定义,但是当选择哪个的时候呢?

嗯,你想听我的意见,我会说我们可以很容易地回答这个问题,让我们用一个例子来深入探讨。

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

Table of Example

正如你在上面的表格中看到的,有三个案例,我们的目的是调查梅和 RMSE。在第一行中,一切看起来正常,并且已经计算出了 MAE 和 RMSE 的值,然而,在第二行中,最后一个误差离其他误差太远(这可能意味着最后一个样本是异常值),并且如给定表格中所示,RMSE 的值比 MAE 大得多。最后在最后一行,我们发现所有的误差都相等,当然 RMSE 的值不会大于平均误差。

那么在前面的例子中发生了什么呢?

正如我们之前提到的,RMSE 认为更大的错误有更大的权重,这意味着它对更大的错误的惩罚比 MAE 更多,正如我们在表中可以发现的那样,当我们比较表中前两行的这两个指标的值时,我们清楚地看到 RMSE 比 MAE 对大错误有更严格的行为,也就是说,它告诉我们 RMSE 对样本的错误分布很敏感。如果我们比较最后两列,我们会看到 RMSE 的值总是大于或等于梅的值,只有当所有残差都相等(或为零)时,这些值才相等。

比较和对比:

这两个指标本质上是相同的。它们中的每一个都应用于连续数据,并且都使用预测误差,但是它们以不同的方式表现预测误差。RMSE 采用误差平方,这使得它对误差分布中的异常值敏感,并且也使得该度量成为误差分布的良好表示。我们可以说它是正态分布样本的合适度量。T. Chai 和 R. Draxler 在 2014 年的出色研究中证明,随着样本数量超过 100,RMSE 可以重建误差分布。RMSE 相对于 MAE 的首要优势可能是,RMSE 不使用绝对误差,这在我们旨在最小化成本函数或优化模型性能时是非常不可取的,因为 RMSE 使用平方误差,我们可以出于上述目的计算它们的梯度,但是,当我们使用 MAE 时,计算绝对误差的梯度变得很困难。因此,在计算模型误差敏感性或数据同化的情况下,RMSE 绝对优于 MAE。相反,当我们想要识别不同模型之间的区别或区分模型时,MAE 工作得更好,因为 MAE 不能被大量的错误充分地反映出来,相反,正如我们在前面说过的,RMSE 赋予它们更多的权重。

结论:

RMSE 和 MAE 是连续数据的评估指标,通常用于回归问题。这些指标各有利弊,通常没有一个是赢家,因为它很大程度上取决于你试图解决的问题和你的目标是什么。值得注意的是,有一件事我们应该记住:据我所知,仅使用一个评估指标可能无法完全衡量您的模型的性能,通常最好使用多个指标并将结果放在一起比较,以获得更好的洞察力。

嗯,我想这差不多就是这些度量标准的差异和相似之处,它们经常被用在回归问题中。我将感谢你花时间阅读这篇文章。在下一篇文章中,我将描述分类问题中常见的评估指标。同时,我期待着听到你的评论。

参考资料:

https://www . researchgate . net/publication/272024186 _ Root _ mean _ square _ error _ RMSE _ or _ mean _ absolute _ error _ MAE-_ Arguments _ against _ avoiding _ RMSE _ in _ the _ literature

[## 均方根误差

均方根误差

皇家 Errorstatweb.stanford.edu 号](http://statweb.stanford.edu/~susan/courses/s60/split/node60.html) [## RMSE:均方根误差

回归分析> RMSE:均方根误差均方根误差(RMSE)是…

www.statisticshowto.com](http://www.statisticshowto.com/rmse/) [## 绝对误差和平均绝对误差

测量误差>绝对误差绝对误差是测量中的误差量。这就是区别…

www.statisticshowto.com](http://www.statisticshowto.com/absolute-error/) [## 平均绝对误差-维基百科

在统计学中,平均绝对误差(MAE)是两个连续变量之间差异的度量。假设 X 和 Y…

en.wikipedia.org](https://en.wikipedia.org/wiki/Mean_absolute_error)

生成对抗网络(GAN)-人工智能-“猫和老鼠的游戏”

原文:https://towardsdatascience.com/art-of-generative-adversarial-networks-gan-62e96a21bc35?source=collection_archive---------9-----------------------

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

Art of Generative Adversarial Networks

帖子中提到的所有作品的代码链接:-

[## pankajkishore/代码

在 GitHub 上创建一个帐户,为 pankajkishore/代码开发做出贡献。

github.com](https://github.com/pankajkishore/Code)

我们有幸参与了商业数据科学课程的最终项目“生成对抗网络”项目。虽然我们可以选择任何其他主题作为我们的最终项目,但我们继续挑战训练 GAN 从由 880 张大小为 28*28 的 X 射线图像组成的数据集学习生成 X 射线图像。该项目由 Pankaj Kishore、Jitender 和 Karthik 完成。我们最初的想法是探索 GAN,并在此过程中使用 Tensorflow 编写我们自己的代码来训练 GAN 生成 X 射线图像。我将简要介绍一下我们项目的旅程。

数据收集

第一步是为鉴别器收集足够数量的训练数据集来训练我们的神经网络。我们从下面提到的网站中提取数据:-

[## 箱子

编辑描述

nihcc.app.box.com](https://nihcc.app.box.com/v/ChestXray-NIHCC/folder/37178474737)

一旦我们有了足够数量的数据,我们就尝试使用 GAN 进行探索,并对现有数据集实施 GAN,以学习并在我们的数据集上应用相同的实施技术。

初学

1.MNIST 数据集

我们首先通过 MNIST 数据集进行了探索,并找到了足够的在线资源来在 MNIST 数据集上训练我们的第一个 GAN 模型,这被认为是最容易训练的。事实证明,当我们探索代码并理解 GAN 背后的基本原理时,训练它确实非常容易,而且是一种很好的学习体验。我们在 MNIST 数据集上尝试了 GAN 的许多变体。我们尝试的各种变化如下:

香草甘

条件 GAN

瓦瑟斯坦·甘

DCGAN

VAE

我们获得的结果质量非常好,我们只需稍微调整一下代码就能达到这个结果。我们有趣地发现,为生成器添加更多的隐藏层对图像质量没有影响。我们也尝试了变分自动编码器(VAE),从下面的链接引用 Ashish Bora 的代码,得到了足够好的结果。

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

DCGAN

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

VAE generated Image

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

MNIST at different Epochs through VAE

[## AshishBora/csgm

复制论文结果的代码:“使用生成模型的压缩感知”。- AshishBora/csgm

github.com](https://github.com/AshishBora/csgm)

2。时尚 MNIST

我们在时尚 MNIST 数据集上尝试了 MNIST 的相同变化,并且成功地能够为不同的分类器项目生成图像。这导致我们的兴趣转向更大的魔鬼,那就是为 X 射线图像编写我们自己的代码,看看我们是否能为我们的图像编写同样的代码。我们从深入了解甘开始,并乐于分享在整个旅程中学到的几个关键概念。适合我们的架构如下

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

为时尚 MNIST 代码生成的图像:-

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

99000 epochs

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

60000 epochs

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

40000 epochs

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

Fashion MNIST GIF at different epochs

生成性对抗网络概述

除非你在过去一年左右的时间里一直住在小屋下,否则深度学习领域的每个人——甚至一些没有参与深度学习的人——都听过并谈论过 GANs。GANs 或生成对抗网络是深度神经网络,是数据的生成模型。这意味着,给定一组训练数据,GANs 可以学习估计数据的潜在概率分布。这非常有用,因为除了其他事情之外,我们现在可以从学习到的概率分布中生成样本,这些样本可能不存在于原始训练集中。

生成对抗网络实际上是两个相互竞争的深层网络。给定一个训练集*(比如几千张猫的图像),生成器网络***【G(X)**,将一个随机向量作为输入,并尝试生成与训练集中的图像相似的图像。鉴别器网络 D(x) 是一个二元分类器,它试图根据训练集 X 来区分真正的猫图像和生成器生成的假猫图像。因此,生成器网络的工作是学习数据在 X 中的分布,以便它可以产生真实的猫图像,并确保鉴别器不能区分来自训练集的猫图像和来自生成器的猫图像。鉴别者需要学习跟上生成器,不断尝试新的技巧来生成假的猫图像并愚弄鉴别者。

最终,如果一切顺利,生成器(或多或少)会了解训练数据的真实分布,并变得非常擅长生成真实的猫图像。鉴别器不再能够区分训练集 cat 图像和生成的 cat 图像。

从这个意义上说,这两个网络不断地试图确保对方没有很好地完成他们的任务。那么,这到底是怎么回事呢?

另一种看待 GAN 设置的方式是,鉴别器试图通过告诉发生器真实的猫图像是什么样子来引导它。最终,生成器发现了它,并开始生成看起来真实的猫图像。训练 GANs 的方法类似于博弈论中的最小最大算法,两个网络试图实现所谓的相对于彼此的纳什均衡。

*发生器和鉴别器之间发生的事情这里是一个 2 人零和游戏 *。换句话说,在每一步中,生成器试图最大化鉴别器对图像进行错误分类的机会,而鉴别器反过来试图最大化其对输入图像进行正确分类的机会。

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

A simple flowchart of a GAN

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

Discriminator

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

Generator

一旦我们学会了这些课程,我们就开始动手实践并写出我们自己对所学概念的实现。

网络背后的数学

深度学习或机器学习都是关于优化函数或者特别是最小化算法的损失。我们用梯度下降来实现。

*假设 X 是我们的真实数据集,Z 是正态分布噪声。设 p(z) 为来自潜在空间 z 的数据 GD 分别为生成网络和判别网络的可微函数。 D(x) 表示数据来自真实数据集 x 的概率,我们训练 D 使概率 log(D(x)) 最大化,训练 G 使 *log(1 — D(G(z))最小化。简而言之,它们彼此进行如上所述的最小最大博弈,并获得全局最优。

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

GAN ( Loss function )

上述功能为我们的生成性对抗网络提供了损失功能。现在,需要注意的是log(1-D(G(z))会饱和,所以我们不会最小化它,而是最大化 log(D(G(z))。

为了证明生成网络生成的样本与 X 完全相同,我们需要在数学上更深入,使用 Kullback-Leibler 散度定理和 Jensen-Shannon 散度

使用的来源:-

* [## 生成对抗网络-简单介绍。

现在人们对深度学习的研究如此热情。这样的结果,每天或每月都有一个新的…

medium.com](https://medium.com/@rajatgupta310198/generative-adversarial-networks-a-simple-introduction-4fd576ab14a)

生成 X 射线图像:-

问题陈述:-

重要特征的高质量描绘是用于疾病的精确诊断和/或评估的生物医学图像解释中的关键组成部分。通过利用大量的训练图像,基于卷积神经网络(CNN)的深度学习(DL)技术已经被证明在图像分类和分割任务中非常成功,在生物医学图像解释中潜在地承诺更高的吞吐量和更一致的结果。由 DL 增强的计算机化工具被迅速证明是提高生物医学图像解释准确性的最先进的解决方案。此外,研究人员已经报告了生成对抗网络(GAN)模型的成功训练,以生成合成训练图像,作为解决训练集稀缺的潜在解决方案。

下图显示了 GAN 网络的基本概念。在图片中,生成器试图产生合成图像来欺骗鉴别器,而鉴别器试图将合成图像与真实图像区分开来。

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

General GAN architecture

当前的挑战

为深度学习训练 CNN 通常需要大量标记的训练图像数据,由于专家标注的费用,这在生物医学领域仍然是一个挑战。虽然研究人员已经报告了生成对抗网络(GAN)模型的成功训练,以生成合成图像作为解决训练集瓶颈的潜在解决方案,但是及时训练 CNN 和 GAN 可能需要领域专家的编程经验和技能集。我们的目标是为最终用户提供一个简化的工作流程,以促进快速利用 GAN 网络为 DL 培训制作合成放射学图像

提出的解决方案

我们尝试实现 GAN 来生成 X 射线图像,并开始为生成器和鉴别器创建简单的函数。我们最初为鉴别器和生成器设计了三层。使用的激活函数是发生器的泄漏 relu 和鉴别器的 relu。使用 glorot_init 函数将随机噪声也输入到真实图像中。我们通过使用批量标准化调整和缩放激活来标准化输入层。

鉴别器和发生器的损失函数如下

#损失函数

disc _ loss = TF . reduce _ mean(TF . nn . sigmoid _ cross _ entropy _ with _ logits(logits = r _ logits,labels = TF . ones _ like(r _ logits))+TF . nn . sigmoid _ cross _ entropy _ with _ logits(logits = f _ logits,labels=tf.zeros_like(f_logits))

gen _ loss = TF . reduce _ mean(TF . nn . sigmoid _ cross _ entropy _ with _ logits(logits = f _ logits,labels=tf.ones_like(f_logits)))

鉴别器和生成器的步距和学习步骤如下

gen _ step = TF . train . rmspropoptimizer(learning _ rate = 0.001)。最小化(gen_loss,var_list=gen_vars) # G 训练步骤

disc _ step = TF . train . rmspropoptimizer(learning _ rate = 0.001)。最小化(disc_loss,var_list=disc_vars) # G 训练步骤

我们编写了一个简单的函数来产生随机噪声(假图像),并将其与真实图像一起提供给鉴别器。使用的时期是 1000,我们第一次训练神经网络的样本数是 851,下一次是 5000 个样本(下采样数据集)。我们得到的输出图像真的是噪音,我们意识到了错误,为什么我们没有得到正确的输出。来自我们代码的图像截图:-

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

Input Images to Discriminator

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

Output Image generated

导致发电机实际上什么也没学到的潜在原因有很多,仅举几个例子

输入鉴别器的低分辨率质量图像

将实际的 12401240 图像下采样为 2828

没有足够的数据集供神经网络学习

梯度下降消失问题,因为鉴别器太成功了,以至于发生器梯度消失并且什么也没学到

模式崩溃:发生器崩溃,产生有限数量的样本

我们尝试的越多,从上面的样本中产生的空白越多,输出就越好。即使经过无数次尝试,我们也无法从 GAN 中生成高质量的图像,因为我们拥有的数据集存在局限性。

口袋妖怪一代

在尝试从 NIH 网站创建 X 射线图像失败后,我们想到尝试我们的代码来生成口袋妖怪,以确保这可能是一个数据集问题。不幸的是,我们取得了不错的成绩,但不是很好。下面是从我们的 X 射线代码生成的口袋妖怪

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

Pokemon’s from X-ray code

肯定比 x 光图像好。然后,我们试着运行由一个流行的机器学习程序 Youtuber Siraj Raval 创建的代码(这是他从 moxiegushi 借来的)。

[## llSourcell/口袋妖怪 _GAN

Pokemon _ GAN——这是 Siraj Raval 在 Youtube 上发布的“用一个生成对抗网络生成 Pokemon”的代码

github.com](https://github.com/llSourcell/Pokemon_GAN)

代码需要稍微修改,以适应从 Kaggle 网站收集的 851 个口袋妖怪的更高级的数据集。代码被修改,以处理更高分辨率的口袋妖怪以及训练鉴别器。结果是惊人的,尽管它需要很多时间来运行。代码的架构如下

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

Architecture for Pokemon

关于鉴别器

DCGAN架构中,鉴别器D是卷积神经网络(CNN),它应用许多过滤器从图像中提取各种特征。鉴别器网络将被训练以区分原始图像和生成的图像。卷积的过程如下图所示:

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

关于发电机

被训练来生成图像以欺骗鉴别器的生成器 G 被训练来从随机输入生成图像。在 DCGAN 架构中,发生器由对输入进行上采样的卷积网络表示。目标是处理小的输入,并产生大于输入的输出。它的工作原理是将输入扩展到中间为零,然后在这个扩展区域上进行卷积处理。该区域上的卷积将导致下一层的更大输入。向上采样的过程如下所示:

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

根据不同的来源,您可以找到上采样过程的各种注释。有时它们被称为全卷积、网络内上采样、分数步长卷积、反卷积等等。

发电机网络结构概述

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

DCGAN 超参数

每个人都注意到的一件事是,GANs 的计算成本非常高。人们通常忽略的是 GANs 相对于超参数是多么脆弱。gan 在某些参数下工作得非常好,但在其他参数下则不然。目前,调谐这些旋钮是网络架构设计艺术的一部分。我们决定采用的超参数如下:

超参数

64 件的小批量

重量从标准= 0.02 升的正态分布初始化

Relu 斜率= 0.2

学习率= 0.0002 的 Adam 优化器

动量= 0.5

结果

鉴于有限的时间和相关的成本,我们没有完全训练我们的模型,但口袋妖怪产生了 1300 个时代,我在下面附上:-

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

Pokemon after 1300 epochs

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

Pokemon Generation for incremental Epochs

项目的主要收获:-

在这个项目上工作是一次很棒的经历,尽管它真的很有挑战性,但它打开了我们的视野,让我们看到了神奇神经网络可以提供的所有新的可能性。我们从错误中学到了很多,并意识到我们需要做的可能的修改,以使 GAN 为我们的 X 射线图像数据集工作。关键要点是

训练一只甘真的很难

为了获得更好的结果,我们需要结合其他因素进行批量标准化。

需要注意梯度下降和损失值,以确保没有发生器或鉴别器达到零值

Relu 激活功能是真正的朋友。

需要实施卷积网络,它们确实适用于大多数数据集,如果不是所有数据集的话

我们需要 GPU 来训练 GAN,除非你能等上几年,否则在 CPU 上训练是不可能的!!

未来前景:

我们可以尝试很多事情,首先尝试生成质量为 6464 的图像,而不是我们目前尝试生成的 256256,看看这是否能提高图像质量。我们肯定会继续研究 X 射线图像,并尝试实现卷积神经网络,看看我们是否能生成更好的图像。收集大约 100,000 幅图像的训练数据可能有助于更好地训练 CNN 模型,并可能大大提高生成器图像的质量。虽然这可能会变得更加棘手和困难,但如果 CNN 工作得更好,我们会喜欢实现更高分辨率图像或彩色图像的解决方案,看看 GAN 的表现如何。我们甚至想尝试 X 射线图像的变化编码器,看看是否有所帮助。我们甚至想尝试我们在网上找到的东西,比如:-

迷你批次辨别:让生成器在一个“迷你批次”中对多个图像进行分类,而不是只对一个图像进行分类

虚拟批次标准化:每个示例都基于参考批次的样本进行标准化

结论:

这个项目确实为我们可以用神经网络尝试的许多实现提供了动力。它确实吸引了所有人的注意,很难不欣赏甘可能带来的无限可能性。在这个项目中,我们在使用 Tensorflow 或 cloud 方面确实学到了很多。我们意识到实际训练一个 GAN 是多么困难,即使事情可能在一个数据集上工作,也不一定意味着它在另一个给定的数据集上会以同样的方式工作。GANs 的概念并不难理解(即理解生成性对抗网络)。但是实现它们以产生高质量的图像可能是棘手的。考虑到 GAN 的无限商机,我可以在未来陈述几个:-

GANS 可能用于:

监督学习:

  • 根据{某些约束}尽可能准确地预测,例如公平性
  • 不平衡分类中的数据扩充
  • 离群点检测
  • 向量-2-向量预测,例如具有任意损失的多标签预测,其不假设标签独立于特征的条件

半监督:

  • 在现实生活的数据集中,经常会出现只有一小部分数据被标记的情况。

无人监督:

  • 矩阵完成
  • 嵌入

感谢大家的阅读!!希望你喜欢我们在 GAN 的天真尝试,我们真的希望继续工作,为任何数据集更新一些更棒的结果!!

帖子引用的其他链接:

https://Phil Paradis . WordPress . com/2017/04/24/training-gans-better-understanding-and-other-improved-techniques/

NIPS 2016 GAN 教程

有条件的甘*

内容概要:本文详细探讨了双馈风力发电机(DFIG)在Simulink环境下的建模方法及其在不同风速条件下的电流与电压波形特征。首先介绍了DFIG的基本原理,即定子直接接入电网,转子通过双向变流器连接电网的特点。接着阐述了Simulink模型的具体搭建步骤,包括风力机模型、传动系统模型、DFIG本体模型和变流器模型的建立。文中强调了变流器控制算法的重要性,特别是在应对风速变化时,通过实时调整转子侧的电压和电流,确保电流和电压波形的良好特性。此外,文章还讨论了模型中的关键技术和挑战,如转子电流环控制策略、低电压穿越性能、直流母线电压脉动等问题,并提供了具体的解决方案和技术细节。最终,通过对故障工况的仿真测试,验证了所建模型的有效性和优越性。 适用人群:从事风力发电研究的技术人员、高校相关专业师生、对电力电子控制系统感兴趣的工程技术人员。 使用场景及目标:适用于希望深入了解DFIG工作原理、掌握Simulink建模技能的研究人员;旨在帮助读者理解DFIG在不同风速条件下的动态响应机制,为优化风力发电系统的控制策略提供理论依据和技术支持。 其他说明:文章不仅提供了详细的理论解释,还附有大量Matlab/Simulink代码片段,便于读者进行实践操作。同时,针对一些常见问题给出了实用的调试技巧,有助于提高仿真的准确性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值