TowardsDataScience 博客中文翻译 2020(五百三十六)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

将您的分析工业化到企业级别

原文:https://towardsdatascience.com/industrialize-analytics-how-do-we-get-there-fffde679801?source=collection_archive---------68-----------------------

[系列:赢在分析](http://towardsdatascience.com/tagged/Winning in Analytics)!

本文是“在分析中取胜”系列文章的第 1 部分。让我们来看看成功扩展您的人工智能计划的关键促成因素。

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

蒂姆·莫斯霍尔德Unsplash 上拍摄的照片

亲爱的人工智能爱好者,我们喜欢实现我们数据的全部潜力!我们希望看到我们的分析概念证明成为现实!但是,将你的概念证明工业化的道路往往是艰难的。

那么,我们如何才能将您的组织从概念的少量分析证明转变为工业化分析,以实现企业人工智能?下面列出了可以帮助您扩展分析产品的关键考虑事项。

1.为您的数据平台带来稳定性

你的模型和你的数据一样好!确保数据平台的高稳定性和可用性,以快速扩展您的分析模型。如果不这样做,可能会导致在及时向决策引擎提供数据方面出现不必要的延迟。

  • 自动化您的数据管道,以处理重复性和/或易出错的数据工程任务。
  • 为了提高代码的质量,考虑一个组织范围的测试策略。
  • 采用持续集成和持续部署将有助于在稳定的基础上迭代构建。

2.提前考虑模型管理和监控

虽然模型开发消耗了大部分注意力,但构建的人工智能模型只有在部署到生产中时才有用。模型管理和监控填补了这一重要空白,使您的人工智能模型可以投入生产。

除了部署和管理之外,还会监控模型在生产中的性能。随着模型随着时间的推移而恶化,需要进行再训练。模型管理还有助于版本化系统。通过调整模型的不同部分,生成的预测的准确性会有所不同。因此,为了跟踪模型和它们的权衡,版本控制是必不可少的。

模型管理和监控实现必须尽早纳入人工智能计划,并且对于努力进行自主分析的企业来说是至关重要的。

3.确保分析试点以工业化的心态构建

与在较小规模上构建以展示分析解决方案的可行性和潜力的概念证明不同,试点计划面向目标受众有限的生产环境。

对于人工智能计划从试点到产业化的过渡,重要的是,试点的建立应高度关注性能的稳定性和建议的可靠性。稳定可靠的试点可以快速过渡到生产。

4.确保你有合适的团队来扩展人工智能

引入以分析为中心的角色,如首席数据分析官、企业人工智能架构师、模型管理工程师、数据科学家、公民数据科学家等,以提高您组织的分析智商。

开始提升您的劳动力的技能,以解释建议并最大限度地发挥人工智能机器的价值!

5.利用组织外部的专业知识

说到实施,自己动手(DIY)的方法既费时又费钱。致力于特定于分析的“制造或购买或合作”战略,以利用其他组织的人工智能能力的进步。

利用其他组织的现有能力,加快您的分析运营之路!

“在分析中取胜”系列源于学习,旨在通过提供分析计划的快速启动来让读者受益。我希望听到您的反馈,以及您的组织在分析道路上走了多远!

如需了解更多信息,您可以通过 LinkedIn 联系我

工业 4.0 还是互联网 4.0?

原文:https://towardsdatascience.com/industry-4-0-or-internet-4-0-1d6a2fe7313?source=collection_archive---------43-----------------------

了解工业 4.0

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

纳蕾塔·马丁在 Unsplash 上的照片

在这篇博客中,我将发表我的观点,并写下与工业 4.0 革命的概念和进步相关的最新技术趋势,我们都在见证和经历这一革命,尽管我们中的一些人已经意识到这一点,而一些人却对此视而不见。现在,完全取决于你是否注意到它,看到它,了解它,体验它或者只是像鸽子一样闭上眼睛,相信工业 4.0 看不到你。

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

照片由维多利亚博物馆Unsplash 拍摄

那么,什么是工业 4.0,我为什么要关心?

根据维基百科,“工业 4.0 是对制造技术中当前自动化和数据交换趋势的一个名称。它包括信息物理系统物联网云计算、【1】、、【2】、、【3】、、【4】、认知计算

然而,用外行人的话来说,我可以把它定义为,新的或当前的工业革命,它利用了物理、数字系统和现代技术的综合力量,以这种方式,机器将执行大部分(如果不是全部)工作。

物联网

它是事物的互联网络;这里的事物可以是任何东西,如“设备”、“建筑物”、“汽车”、“桌子”、“椅子”,以及“你现在正在想的”或“以后可能想的”。所有这些和其他任何东西都可以通过互联网连接起来。工业 4.0(德国人怎么叫)或互联网 4.0(美国人怎么叫)或第四次工业革命,都可以归结为人、系统、设备,当然还有物联网中的“物”的前所未有的合并或连接。

这产生了新的业务方式,从而创造了新的增长和收入机会,这些机会可以通过利用互联设备和海量数据来实现(对不起,我指的是“大”或“智能”数据;在他们之间提供和交换。你绝对错了;等一下…这是一种夸张的说法,但老实说,如果你认为人工智能、机器学习、深度学习、大数据、物联网及其家族成员只是时髦的词汇,那你就错了。不,他们不是,他们已经成为日常业务,并将继续流行,甚至很快接管(在良好的意义上,而不是电影中显示的那种)每个行业。

工业革命:

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

2020,Chan Naseeb。保留所有权利。

第一次工业革命开始于 18 世纪 80 年代,产生了利用水和蒸汽动力机械生产设施。

第二个时代,开始于 30 年后,它带来了:大规模生产的电力

第三次工业革命开始于 20 世纪 60 年代末,提供了电子和信息技术。

第四,为互联世界和设备铺平道路。这意味着物理系统将通过使用机器学习、人工智能等由自动化系统控制。。尽管有好消息也有坏消息,但人类干预将保持在最低限度。好消息是我们将获得更好的表现,减少对人类的依赖,坏消息是,机器将接管许多(如果不是大部分的话)人类费力的工作。

虽然它的全面影响还有待观察,但我们可以看到它的潜力以及它迄今为止给我们带来了什么。

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

多梅尼科·洛亚在 Unsplash 上拍摄的照片

工业 4.0 中的一些流行词汇

  • 物联网连接
  • 机器学习
  • 实时洞察
  • 预测建模
  • 流式分析等…

随着分析、物联网、数据科学和云计算的进步,更定制、更便宜、更可扩展的工厂解决方案成为可能,并且正在被发明。技术进步正在改变我们的日常生活和我们感知生活的方式。过去,经济只受几个因素的影响…但今天,它正受到技术突破和其他因素的影响,如商业发展、供应链和世界的全球连通性。如今,消费者行为比以往任何时候都更加重要。通过观察这些如今被称为预测智能的见解,企业可以规划他们的运营和供应链计划。

消费商品比任何人想象的都要容易。你可以足不出户,仅仅通过互联网就能买到任何东西。这意味着更多的竞争,以及对客户满意度和更好的消费者体验的更高要求。未能达到预期或迟到的企业将会被遗忘在尘埃中。你必须敏捷并适应不断变化的客户需求。如果你不能回答快速和频繁发生的动态,你最好选择一些其他业务是’没有业务’。作为一家企业,你必须积极主动,不断发展,否则就要做好被淘汰或至少被惩罚的准备。

工业 4.0 的主要构成要素如下图所示:

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

2020,Chan Naseeb。保留所有权利。

毫无疑问,工业 4.0 正在重新定义很多我们过去习以为常的事物、概念和想法。一些担忧包括与机器接管原本由人类承担的角色相关的风险。然而,它同时也是无可争议的事实和令人无比愉快的现象,为积极、迅速和巨大的变化提供了潜力。总之,我想让你放心,未来是关于协作智能的,而不仅仅是机器接管,正如我在早期的一篇关于增强人类智能的博客中所讨论的。

2020,Chan Naseeb。保留所有权利。

之前在 https://www.linkedin.com发布

工业 4.0:第四次工业革命现在

原文:https://towardsdatascience.com/industry-4-0-the-fourth-industrial-revolution-is-now-38361fb509da?source=collection_archive---------15-----------------------

工业 4.0 正在彻底改变我们的生活、工作、与环境互动以及彼此互动的方式,为所有人创造一个更美好的世界

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

来源:Shutterstock

二十年前被认为是科幻小说的许多内容正在推动世界走向第四次工业革命。工业 4.0 将彻底改变商业格局,以及人类与环境和彼此之间的互动方式。

许多人预测它将开创一个慷慨的新时代:延长寿命,改善医疗保健,减少全球贫困,等等。其他人在革命期间用来推动变革的大量数据中看到了更黑暗的可能性。

无论如何,现实是,全球 GDP 预计将接近 90 万亿美元——比 20 年前的 1 万亿美元还要多。

正是这种快速的经济增长和技术创新将世界推向了第四次工业革命——工业 4.0。

工业 4.0 的技术

第四次工业革命的技术与训练人工智能和其他关键形式的现代技术所需的大量数据密不可分。对数据的需求导致数据收集呈指数级增长。

数据分析和商业智能已经需要对信息技术、数学和统计学的高度掌握。人工智能和机器学习算法有能力自动化和优化分析流程,这反过来又创造了变革性的商业洞察力。

在过去的两年里, 世界产生了 90%——每天 2.5 万亿字节——所有的数据。

这个数据和内容不一样。这是原始的、无组织的信息。

许多正在研究的尖端技术涉及设计人工智能系统,这些系统可以以有意义的方式筛选数据集,以便这些数据集可以被输入到神经网络中。

除了人工智能将继续在工业 4.0 中发挥核心作用,量子计算、3D 打印和物联网(IoT)都有望成为这一变化的基础。

2017 年欧洲专利局的一项研究发现,在过去三年中,与工业 4.0 相关的专利申请增加了 54%。

然而,标志着这场革命的不仅仅是这些技术进步。

世界经济论坛创始人兼执行主席克劳斯·施瓦布创造了“第四次工业革命”一词,他在 2016 年提出,这场革命“正在模糊物理、数字和生物领域之间的界限”。

这包括向智能设备的转移,从智能住宅到智能手表。这是物联网与人类物理生活的融合。

这次合并不仅仅是为了方便。它将彻底改变人们、企业和政府的运作方式。

“不是每个人都需要成为数据科学家,但每个人都需要有数据素养,”分析公司 Qlik、 的数据素养负责人乔丹·莫罗告诉美国消费者新闻与商业频道 。Morrow 继续指出,目前许多人和企业缺乏以有意义的方式分析和解释数据的必要技能。

第四次工业革命带来的社会变革

技术是一种工具。它不好也不坏。但是,它是为了什么目的而实施的,当然可以使它如此。

最经典的例子就是核技术,无论是核电站还是核弹,核技术都是基础。

第四次工业革命将把世界带向何方,将取决于推动变革者的目标。

施瓦布说:“从来没有一个时代有更大的希望,也没有一个时代有更大的潜在危险。”他预测,与革命相关的最大社会问题将是不平等。

推动积极变化

We Forum 发现,作为联合国 17 项全球目标基础的 169 项目标中,有 70%可以通过作为第四次工业革命一部分的现有技术来实现。

按照这些思路,一家盈利性社会企业 Cangler 表示 其使命是解决 三个联合国可持续发展目标:一个没有贫困的世界,增加良好的健康和福祉,以及创建可持续发展的城市和社区。

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

来源:联合国可持续发展目标

在一个数据盲阻碍许多组织在世界上做好事的时代,Cangler 提供了企业数据分析的自动化和民主化。

“我相信面对新技术,人类将能够利用它们来造福我们。大多数人渴望美好的生活,而不是悲惨的生活,”华为首席执行官任郑飞在聚焦第四次工业革命的达沃斯科技会议 期间说道。

一般来说,与革命相关的一些预期社会趋势将是中产阶级的崛起、反向人才流失、清真经济和妇女赋权。

“零创新”的意图也会越来越强烈。这是产品开发和技术的重点,对世界产生“零”负面影响。这可能涉及从零排放和零事故的汽车到碳中和城市的一切。哥本哈根已经表示,它正在努力成为世界上第一个碳中和首都

智能产品将无处不在,从智能服装、手表和手机,到智能建筑和智能城市。一个有望极大改善人们生活的智能产品将是智能城市:到 2025 年,这个行业的价值预计将达到 2.57 万亿美元。

这些 智慧城市 依靠物联网来收集数据,这些数据可用于提供更好地管理资产、资源和服务的见解。这些包括从垃圾收集系统到城市规划的一切。

到 2050 年,预计世界三分之二的人口将居住在城市地区,智能城市将成为为人口分配必要资源的关键。“大区域”也将崛起,这将是投资的关键中心,导致企业“城市作为客户”战略的想法——而不是专注于目标国家。

ABI 研究公司的一份报告已经敦促在城市中更积极地部署 5G ,以开辟新的经济价值。

到 2028 年,该技术预计将产生 2.5 万亿美元的直接贡献,8660 亿美元的间接贡献,以及 3.2 万亿美元的生产率增长。

工业 4.0 的阴暗面

虽然郑飞在达沃斯科技会议上对第四次工业革命技术持乐观态度,但历史学家尤瓦尔·诺亚·哈拉里显然不这么认为。

哈拉里说:“从最浅显的层面来看,这可能是 19 世纪工业革命的重演,当时领导人有机会在经济和政治上主宰世界。”“我把当前的军备竞赛理解为帝国主义的军备竞赛……如果你掌握了一个国家的所有数据,你就不需要派遣士兵。”

社会运作越来越依赖技术,这使社会更容易受到网络攻击和各种其他网络威胁。

安全性 的 提升,尤其是与物联网相关的,对于第四次工业革命的蓬勃发展至关重要。这是因为这些网络威胁可以做任何事情,从危及物理安全到造成生产停机,从而导致重大经济损失。

然而,在社会方面,也许更大的威胁将以不平等加剧的形式出现。

施瓦布并不是唯一一个担心第四次工业革命可能导致世界不平等加剧的人。

共同基金 的一份 报告指出:“由于在接入互联网、获得资金和技术能力方面的起点不同,第四次工业革命的技术采用不平等,可能会导致经济增长进一步不平衡。”。

随着自动化和人工智能继续取代越来越多的工作场所人员,这种不平等还可能产生雪球效应。

这些变化将与以往的工业革命有何不同?

无论这些变化是为了人类和地球的更好,还是为了双方都付出巨大代价,工业 4.0 都不像它的前辈。

Schwab 认为,变化的指数速度和新技术的引进速度将对社会产生前所未有的影响。

可以这样想:1 亿人 用了 75 年才开始使用电话。游戏 Pokemon Go 在一个月内就有这么多用户。

新技术的采用比人类历史上任何时候都要快。

最后的想法:工业 4.0——第四次工业革命就在眼前

随着世界进一步进入第四次工业革命,数据无处不在。无组织的和原始的,它塞满了企业的数字基础设施和拖垮系统。然而,从中获得的见解将继续推动智能世界的变革。

为了创造更好的产品和服务,以及做出更好的业务决策,您的团队必须精通数据。此外,您需要适当的系统来协调各种人工智能系统,以防止人工智能孤岛。

革命至此, 85%的数据科学项目失败92%的此类失败 都是因为人和流程障碍。

加入 Cangler 早期采用者计划 成为第四次工业革命的一份子。使用这项新兴技术为您的公司赢得竞争优势,并为每个人创造一个更美好的世界。

“行业知识是数据科学家的一大优势”

原文:https://towardsdatascience.com/industry-knowledge-is-a-great-advantage-for-data-scientists-97db3086f4e5?source=collection_archive---------47-----------------------

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

数据科学招聘人员 马可·霍夫勒 接受了我关于他的工作和数据科学职位选拔流程的采访。他告诉我申请人需要具备哪些素质才能在这个过程中取得成功,哪些技能是次要的。

在大多数情况下,任何经验水平的求职者与公司的第一次接触都是通过招聘人员或人才获取合作伙伴。对于数据科学家来说,这是放置简历和其他文档的人。招聘人员实际上做什么来填补数据科学职位?他在申请过程中注意什么,她(他)有什么影响?招聘人员如何将数据科学视为外部专家?我在对马尔科·霍夫勒的采访中讨论了这些问题。他是总部位于德国的全球性批发公司 METRO AG 的人才收购合伙人。他负责 IT 和数字化领域的所有职位空缺。

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

Marco,您为数据科学职位招聘了多长时间?

自从三年前开始专业招聘以来,这些职位一直是我关注的焦点之一。然而,作为一名勤工俭学的学生,我也有一些这样的角色要扮演。

那么,这些年来你收到了多少份这些职位的申请?

我估计做了大概 125 次面试,看了大概 300 到 400 人的申请文件。

所以你也是一名把关人,负责做出第一次选择的决定?

这个性质必然是一个结果。然而,我会完全不同地定义我在这里的主要角色。首先,我是一名顾问,在感兴趣的候选人和我们公司的需求之间进行调解。在与候选人的一次联合对话中,我了解了去地铁的步骤是否对双方都合适,是否提供了令人兴奋的发展机会。对我来说,为我们的候选人提供关于潜在机会、任务和团队环境的良好的进一步信息流,以丰富看到招聘广告后的第一印象,这是非常重要的。这确保了双方在进入深入的招聘流程之前有一个良好的预期管理。

如果在第一次审查文件的过程中,已经发现没有合适的交叉点,那么就会出现你所说的守门人效应。

你会如何描述向你提出申请的候选人?

好的一面是,通常没有典型的候选人,我与各种不同的人物和背景进行了讨论。趋势当然是数学、统计、物理的学术背景。在几个案例中,我还与毕业后最初在大学研究环境中工作的候选人进行了交谈。

底线是,整个光谱可以分为两个极端,在这两个极端之间有各种混合形式,甚至是完全的职业改变者:一方面,有一些人主要专门解决对精确度/准确性有学术要求的问题。他们的目标是找到最 100%有效的解决方案、预测等。现在想转投商界。另一方面,有些候选人已经在私营经济中工作过,因此他们不仅追求最大的精确性,而且更注重有效地计划和投资时间。这个范围还体现在沟通能力上。在数据科学中,这是客户需求和该领域可开发内容之间的桥梁。

你能描述一下申请过程吗?

我们目前的招聘流程从预选面试开始。诸如候选人目前的工作、他/她的优势和愿望等问题将会被讨论。这个人改变的动机是什么,我首先要求的是专业技能,比如敏捷方法的知识,这对我们很重要。我还特别关注沟通技巧,以及候选人是否能够优先考虑并回应客户的愿望。我喜欢以视频面试的方式进行这一步,因为成本低,但你仍然可以找到个人的水平。

如果我在这第一步发现有一个共同的基础,下一步将是与部门的第一次讨论。这取决于候选人目前的位置,无论是在我们公司还是远程进行。

如果这种技术性更强的讨论也成功了,接下来就是下一次对话,无论如何都要在现场进行。除了进一步的技术讨论之外,主要重点是公司的价值观和文化。如果双方达成一致,那么这个过程就离开了我的职责范围,转而制定雇佣合同。这可以在两周内快速完成。

作为人才获取合作伙伴,你如何影响最终的招聘决定?

当然,最终的决定是由招聘经理做出的。然而,当然在参与这个过程的人之间有很多对话,比如他/她的员工和我。作为整个过程的主持人,我负责协调所有相关方之间的校准对话,很自然地,我对候选人的看法至少也会通过讨论间接地影响决策。

然而,对于招聘经理来说,一个非常相关的部分也是我对候选人是否能够以一种可理解的方式向来自该领域以外的同事展示和解释数据科学和机器学习的复杂主题的看法。毕竟,这是未来工作必不可少的一部分,招聘经理只需要具备技术知识,这样我的观点就能带来附加值。

如何看待以下属性或技能的意义:PhD?

根据我的经验,在德国的企业环境中,博士学位对我们来说并不重要。我不知道有哪个招聘经理会明确倾向于一个拥有研究生学位的候选人。

行业经验,以你的情况批发?

这些知识非常重要,或者至少绝对是一个很大的优势。定量方法是大多数考生所熟知的。然而,来自行业的背景知识允许员工更有针对性地进行分析。例如,在零售业,这些是某些易腐性或特殊的营销场合。

具体公司的财务数字?

我个人的看法是,这个信息相当不重要。我对此不太感兴趣。然而,候选人试图理解商业模式并得出相关的挑战,这是我明确感兴趣的。

技术技能在线认证?

在线教育提供商的认证对我来说是次要的。很明显,我更喜欢候选人能够令人信服地、全面地向我解释他们是如何在哪些问题和项目上使用技术的。作为一名非数据科学家,我需要了解他们是如何提出切实可行的解决方案的。由于有大量的证书提供者,对每个证书背后的价值进行详细分类并不总是容易的。

贵公司在选择数据科学家时是否使用了用例挑战?如果有,它们长什么样?

这样的挑战在我们公司总是适用。我们提前给候选人发了一份案例研究,里面包含了真实的数据。然后,他们应该想出一个解决方案,并考虑演示。我们将询问候选人从他或她的分析中学到了什么。

在这些情况下有最终的解决方案吗,或者这个任务还没有完成?

我们的案子总是公开讨论的。这反映了我们的日常生活,在日常生活中,最终必须做出假设,必须讨论结果。不仅仅是简单的事实,日常工作生活对它来说也太复杂了。

但是,我们希望在演示中使用某些核心论点。我们提前与组织中的相关人员协调这些一般要求以获得某些结果。

你希望达到什么样的硬性淘汰标准?

不是那个意思。除非有人给出很差的评价。这主要是指明显的技术缺陷。以我的经验,这是,例如,处理统计异常值,如何对待它们,最重要的是,如何证明这是合理的。然而,这些案例中并没有隐藏的、候选人必须发现的有意识的陷阱。

贵公司的数据科学团队是什么样的?

从组织上讲,它更像是一个枢纽,而不是一个封闭的团队。这意味着数据科学家在他们参与项目的部门和直接的数据科学同事之间来回奔波。现在,我们有了一个矩阵组织,数据科学家被分配到部门和数据科学部门。

就个性而言,我们有非常广泛的范围。学科范围从数学家、统计学家、物理学家到越来越多的计算机科学家。我们既有大约 26 岁的大学毕业生,也有 45 岁左右有大约 7 年具体工作经验的同事。对了,我们的性别比例差不多是 50/50,这让我们很开心。

一个数据科学家如何在你的组织中成就一番事业?有哪些进一步发展的途径?

我们的目标是让我们的员工在纵向和横向上都得到发展。这意味着积极的发展并不需要更高的职称紧随其后。每个人都应该为自己决定如何在组织内发展,而这个决定不受任何评估。举个例子,这通常意味着某个来自技术领域的人想要向经理的方向发展。但是也可以向产品发展。因此,产品负责人的角色可以是个人发展和职业生涯的一步。然而,总是有可能回到不同的焦点。

所以这也意味着一个想要多年做完全相同工作的数据科学家不会被批判性地看待?

完全正确。我们不拘泥于自动指令的发展或变化。当然,对新事物的普遍兴趣是必要的,但这可以发生在一个人自己的领域内。

如何看待数据科学家在贵公司以及总体上的波动?

在我看来,METRO 的数据科学家波动很低。不过我也觉得低波动是比较德国的现象。根据我的经验,在德国文化中,需要在雇主那里呆更长时间是根深蒂固的。这就是为什么我通常会从我的观察中得出结论,没有任何评估,一个团队越国际化,与本地招聘的团队相比,波动就越大,主要是在德国。

然而,对于数据科学家来说,市场需求也很高。这意味着市场机制表明,数据科学家比技术工人供应更多或需求更少的其他学科具有更高的波动率。

在您积极接触数据科学领域潜在候选人的工作过程中,有什么变化吗?

市场竞争变得更加激烈。即使是高度个性化的沟通也往往不会带来成功,因为许多公司和机构都是这样做的。这意味着你不会因此受到人们的关注。其他方法更有前途,可以说:在我们的办公室里举行技术活动,与我们的员工共同开发开源项目,等等。

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

最后,很高兴听到你对一个热门话题的个人看法:作为一个与数据科学家密切合作的人,但不是该领域的技术专家,你如何评估数据科学、机器学习和人工智能复合体的未来发展?积极的感受是否超过了对严重负面后果的恐惧?

首先,我觉得发展速度很令人振奋。可能性的范围不是线性发展的,而是指数发展的。就我个人而言,我在日常生活中注意到,在后台运行的自动化被越来越频繁地使用,然后以闪电般的速度在实现中。如果这会让我们的生活更舒适,我非常欢迎。我不想表达恐惧,但我很好奇社会将如何在这种舒适和失去匿名之间进行权衡。我相信,不同的国家也会有非常不同的趋势和发展,这当然今天已经可以看到。

我不相信“终结者情节”,我也不相信人类自我毁灭的事实。然而,我认为未来最令人兴奋的问题将是我们如何避免或补偿由于智能机器接管的日益自动化的环境而导致的社会扭曲。社会抗议会显著增加吗?社会阶层会分化还是会有足够多的新领域出现在劳动力市场上?因此,我们谈论的是数字化、人工智能、完全自动化和量子计算机时代的世界秩序。

你是否在质疑自己在数据科学领域的工作?那么为什么不使用 CRISP-DM 进行这次审查呢?你可以在 阅读我关于数据科学职业反思的文章

行业研究和如何展示你的项目

原文:https://towardsdatascience.com/industry-research-and-how-to-show-off-your-projects-6aa2bfebf01a?source=collection_archive---------54-----------------------

苹果 | 谷歌 | SPOTIFY | 其他

悟空莫汉达斯在 TDS 播客

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

背景图片由布莱克·康纳利

编者按:迈向数据科学播客的“攀登数据科学阶梯”系列由 Jeremie Harris 主持。Jeremie 帮助运营一家名为sharpes minds的数据科学导师初创公司。可以听下面的播客:

如果你试图保持你的机器学习技能敏锐或进入数据科学,项目建设是你可以着手的最重要的活动。但是一个项目不会给你带来太多好处,除非你能有效地展示它,并获得反馈来迭代它——直到最近,你还没有很多地方可以这样做。

最近,一个名为 MadeWithML 的开源项目正在试图改变这种情况,它创建了一个易于共享的众包数据科学和机器学习项目库,其创始人、前苹果 ML 研究员和初创公司创始人悟空·莫汉达斯在这一集的 TDS 播客中与我坐在一起,讨论数据科学项目、他在行业中进行研究的经历以及 MadeWithML 项目。

以下是我最喜欢的外卖:

  • 雇主对机器学习项目的期望越来越高。制作一个 jupyter 笔记本并使用机器学习模型进行有趣的预测已经不够好了,超越这一阶段的关键一步是收集你自己的数据,以确保你解决了其他竞争对手没有解决的利基问题。
  • 在项目中包含的另一个关键步骤是部署:将您的模型包装在一个基本的 web 应用程序中,使其易于共享和展示,这一点非常重要。你最不想做的事情就是向招聘经理介绍自己,给他们发 400 行代码让他们审查——相反,给他们发一个部署好的网络应用程序就像给他们一个有趣的玩具,让他们更有可能想与你合作。
  • 机器学习从一开始就有一种开源文化,这迫使许多过去孤立、孤立甚至神秘的公司更新他们的运营,以便能够吸引机器学习人才。尤其是苹果公司很好地完成了这一转变,小悟空讲述了一些必要的重大文化转变。
  • 许多人认为你需要一个 CS 学位才能从事数据科学或机器学习,但这与事实相去甚远。随着数据科学的成熟,重点已经从纯粹的技术技能转移到业务和产品技能。数据科学家和 ML 工程师能够解决重要问题已经不够了:他们现在必须善于识别值得解决的问题。这就是专业知识至关重要的地方——这也是那些来自非计算机专业背景的人经常开始做的事情。如果你以前是经济学家、金融家、社会工作者,或者你在任何特定领域有过经验,即使不是技术性的,你也能很好地理解在哪里可以利用 ML 来解决实际问题。

你可以在这里的推特上关注小悟空,查看用 ML 制作的他们的推特账号,你也可以在这里的推特上关注我。

不平等和失业率最高的职业

原文:https://towardsdatascience.com/inequality-and-the-occupations-with-the-deepest-unemployment-b163ce422efd?source=collection_archive---------85-----------------------

根据新的就业数据,美国劳工统计局发现 13%的美国人失业,尽管这一总体数字代表着巨大的困难,但这一问题在劳动力的某些领域甚至更加严重。与去年同期相比,一些职业如“计算机和数学职业”的失业率从 1%上升到 4%,但其他职业如“食品准备和服务相关职业”的失业率从 5%飙升到 37%(2019 年 5 月对 20 年 5 月)。没有人做得很好,但经济的某些部分比其他部分更糟糕。事实上,由于失业的形式,不平等可能会放大 COVID 的经济影响。因此,经济复苏可能不仅需要了解 T4 是如何让许多人失业的,还需要了解在劳动力中受影响最深的领域。

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

链接至完整图像。2020 年 5 月,与前一年相比,BLS 每个主要职业群体的失业率都有所上升(显示了未经季节调整的失业率,但进行了年份比较)。这些职业在疫情之前的工资和他们的未保险率在这次复苏中也可能被证明是至关重要的。

**首先,失业增加最多的职业也是那些收入较低的职业。**数据显示,一个职业的失业率增长(与前一年相比)与其典型的(疫情之前的)收入中位数之间存在显著的负相关关系(p<0.05;斯皮尔曼的等级秩序;2019 年 5 月至 2010 年 5 月的失业率。换句话说,准备或应对此类事件所需财政资源较少的劳动力群体,也可能是失业率上升方面面临最大经济压力的地区。考虑到整整 39%的美国人甚至在疫情之前就已经无法轻松应对 400 美元的意外开支,COVID 的经济影响对那些财力最弱的人影响最大的可能性表明,许多人正面临严重的困难和可能的债务。

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

每个点代表一种职业。垂直位置显示工资中位数,水平位置显示失业率增加(2019 年 5 月至 2020 年 5 月)。分析使用主要职业类别。

第二,从事这些职业的人也是那些不太可能拥有健康保险的人。社会希望患病者寻求治疗,以减缓 COVID 等疾病的传播,并帮助患者康复。考虑到这一点,大约 9%的美国人表示,即使他们认为自己感染了 COVID,他们也不会寻求医疗服务,因为担心支付不起费用。对于目前压力最大的部分劳动力来说,情况可能尤其如此,因为数据显示,与前一年相比,某个职业的典型(疫情之前)未投保率与失业率的增加之间存在显著的相关性(p<0.05;斯皮尔曼的等级秩序;2019 年 5 月至 2010 年 5 月的失业率。这意味着那些处于劳动力“高度受影响”地区的人也可能是那些不太可能拥有保险和不太能够获得医疗保健的人。*

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

每个点代表一种职业。垂直位置显示未保险率,水平位置显示失业增加(2019 年 5 月至 2020 年 5 月)。分析使用主要职业类别。

收入和获得可负担得起的医疗服务方面的这些差距相互累积,对工作和失业人员都产生了影响。对于那些仍在工作的人来说,以高失业率衡量压力最大的职业群体(食品准备和服务相关)不仅看到超过五分之一的工人没有保险,而且工资也可能使他们难以为未来潜在的失业做准备。考虑到在本行业工作机会稀缺的情况下,出于必要继续工作的可能压力,美国应该担心这些工人在寻求护理或生病时需要工作方面的犹豫。对于最近失业的人来说,不到一半的人有资格获得医疗补助,五分之一的人根本没有资格获得任何公共保险补贴。这在德克萨斯和佛罗里达等 15 个州可能尤其如此,这些州尚未实施患者保护与平价医疗法案(奥巴马医改)下的医疗补助扩展计划,因为这些地方的新失业人员预计有资格获得较低费率的医疗补助(p<0.05;威尔科克森署名排名)[ 8 。这使得失业者面临巨大的开支(有资格获得补贴的人平均每月 145 美元,但没有资格获得补贴的人通常每月 300 至 700 美元),或者拿自己的健康做赌注。简而言之,由于许多专家预计 COVID 期间无保险率将会上升,在这个国家最需要医疗以向前发展的时候,获得医疗可能会变得更加遥不可及。

当国家为了前进而最需要医疗服务的时候,获得医疗服务可能变得更加遥不可及

由于许多人失去了工资,并可能经历一个无法获得负担得起的医疗保健的疫情,本分析强调了 COVID 之前存在的结构性动态,这可能使疫情加深了其经济影响。美国需要考虑它可能会让一些劳动力承担什么样的金融和健康风险,以及这些风险会如何影响整个社会。正如许多州发现的那样,即使“重新开放”,解决失业问题仍然非常复杂。考虑到这一点,这些数据突显出工资和保险的差距可能会加剧新就业者的困境,表明政府可能需要考虑额外的援助来度过难关。尽管如此,仍有机会通过改善对未来的反应来尊重最近的所有困难,这种反应理解如何对美国部分劳动力不利。

*请注意,联邦政府确实在运行专门为 COVID 护理覆盖未保险者的计划[ 13 ]。尽管如此,它仍然面临挑战,数据表明使用率仍然很低,报告表明一些人仍然看到大额账单[14][15]。

Github 上可用的数据、引用的作品和代码

感谢 Shreyas Jayanna 和 Lisa Nash 对这篇文章的帮助。

想要在数据、设计和系统的交叉点上做更多的实验吗? 关注我获取更多

不等式:如何用 SQL、BigQuery 和 Data Studio 绘制洛伦兹曲线

原文:https://towardsdatascience.com/inequality-how-to-draw-a-lorenz-curve-with-sql-bigquery-and-data-studio-c70824b0748d?source=collection_archive---------21-----------------------

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

所有维基百科页面中排名前 0.1%的页面获得了 25%的浏览量。最底层的 99%只获得了 42%的浏览量。而底层的 80% —只得到 4%。这只是一个例子——在本帖中,我们将回顾如何获得这个数据集和任何其他数据集的这些数字。

我们如何从 SQL 表中获取这些数字呢?

第 0 步:什么是 BigQuery?

如果这是您第一次使用 BigQuery,请准备好体验一次有趣的旅程。看看这篇文章:

[## 没有信用卡的 BigQuery:发现、学习和分享

如果你在注册 BigQuery 时遇到了困难,不用担心——现在注册和开始使用比以往任何时候都容易

towardsdatascience.com](/bigquery-without-a-credit-card-discover-learn-and-share-199e08d4a064)

步骤 1:您的数据、BigQuery 和 SQL

首先,我们需要定义数据集。在这种情况下,它是 2019 年 12 月期间英文维基百科中的所有浏览量-在删除所有特殊页面后:

WITH wiki_prefixes AS (
  SELECT ['File:', 'Draft:', 'Help:', 'en:', '...'] x
)

, data AS (
  SELECT *
  FROM `fh-bigquery.wikipedia_extracts.201912_en_totals`
  WHERE title NOT IN ('-', 'Main_Page')
  AND (
    title NOT LIKE '%:%'
    OR REGEXP_EXTRACT(title, '[^:]*:') 
      NOT IN UNNEST((SELECT(x) FROM wiki_prefixes))
  )
)

您需要为此数据集中的每一行提供一个连续的行号,按页面浏览量排序:

SELECT title, views, ROW_NUMBER() OVER (ORDER BY views) rn
FROM data

现在,您可以使用该行号将所有页面分成 1,000 个不同的存储桶:

SELECT 1+fhoffa.x.int(rn/(SELECT (1+COUNT(*))/1000 FROM data)) bucket
  , COUNT(*) pages
  , SUM(views) views
  , STRING_AGG(title ORDER BY views DESC LIMIT 3) sample_titles
FROM (
  SELECT title, views, ROW_NUMBER() OVER (ORDER BY views) rn
  FROM data
)
GROUP BY 1

为了得到一个桶,我在第一行有一个子查询:(SELECT (1+COUNT(*))/1000 FROM data)。这得到了一个基于我的数据集中的总行数的数字,通过将每个行号除以这个值,我们得到了 1k 个不同的桶,从 0 到 999。这些桶中的每一个都有其页面的SUM(views)STRING_AGG(title ORDER BY views DESC LIMIT 3)用来保存一些样本标题以识别每个桶。

现在,我们将用一个新的查询来包围这个查询,该查询计算我们遍历 1k 个存储桶时的累计浏览量,以及所有这些页面的总浏览量:

SELECT SUM(views) OVER(ORDER BY bucket) cum_views
  , SUM(views) OVER() total_views
FROM (
...
)

获得每一行的累计值和总计值的方法是OVER(ORDER BY bucket)对仅仅是OVER()

下一步:获取视图的累积数量,然后除以总数:

SELECT ROUND(100*cum_views/total_views,3) cum_percent
FROM (
  ...
)

现在我们有了一个可以在 Data Studio 中绘制的累计百分比。让我们将所有内容放在一起,创建一个新表:

CREATE TABLE `wikipedia_extracts.201912_lorenz_curve`
AS
WITH wiki_prefixes AS (SELECT ['File:', 'Talk:', 'Template_talk:', 'Wikipedia:', 'Category:', 'User_talk:', 'Page:', 'Template:', 'Category_talk:' , 'User:', 'Author:', 'Portal:', 'Wikipedia_talk:', 'Portal_talk:', 'File_talk:', 'Draft:', 'Help:', 'Draft_talk:', 'en:', 'Book_talk:', 'Module:', 'MOS:', 'Special:', 'Book:'] x)

, data AS (
  SELECT *
  FROM `fh-bigquery.wikipedia_extracts.201912_en_totals`
  WHERE title NOT IN ('-', 'Main_Page')
  AND (
    title NOT LIKE '%:%'
    OR REGEXP_EXTRACT(title, '[^:]*:') NOT IN UNNEST((SELECT(x) FROM wiki_prefixes))
  )
)SELECT ROUND(100*cum_views/total_views,3) cum_percent, *
FROM (
  SELECT SUM(views) OVER(ORDER BY bucket) cum_views, *, SUM(views) OVER() total_views
  FROM (
    SELECT 1+fhoffa.x.int(rn/(SELECT (1+COUNT(*))/1000 FROM data)) bucket, COUNT(*) pages, SUM(views) views
      , STRING_AGG(title ORDER BY views DESC LIMIT 3) sample_titles
    FROM (
      SELECT title, views, ROW_NUMBER() OVER (ORDER BY views) rn
      FROM data
    )
    GROUP BY 1
  ) 
)# 34.1 sec elapsed, 805.8 MB processed)

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

存储桶#991 到#1000,前 1%

步骤 2:在 Data Studio 中可视化

转到刚刚在 BigQuery 中创建的新表,按照以下步骤操作:

使用 Data Studio 探索

→保存

→创建新报告并共享

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

使用 Data Studio 浏览→保存→创建新报告并共享

→添加到报告中

→添加图表

→分散

→ X:时段 Y:累计百分比

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

添加到报表→添加图表→散点图→ X:时段 Y:累计百分比

这就是如何使用 Data Studio 和 BigQuery 通过几个步骤获得漂亮的洛伦兹曲线:

互动数据工作室报告

笔记

维基百科刚刚公布了他们的第 600 万篇文章,在这份报告中,我们统计了超过 1100 万页。这份报告是基于维基百科报告每小时的页面浏览量,来自他们的日志(加载在 BigQuery 中)——这些查询已经删除了我能找到的大多数“特殊”页面。如果你知道更好的清理这些日志的方法,请告诉我。

为了平衡这一点,我没有计算任何在 12 月份获得 0 浏览量的页面——我们在这里查看浏览量日志,所以零不会出现。

[## 维基百科:六百万篇文章

英语维基百科已经有 600 万篇文章,作者是 19 世纪加拿大学校的玛丽亚·伊莉斯·特纳·劳德…

en.wikipedia.org](https://en.wikipedia.org/wiki/Wikipedia:Six_million_articles) [## 维基百科:什么是文章?

“文章”属于维基百科页面的主命名空间(也称为“文章命名空间”或简称“主空间”)…

en.m.wikipedia.org](https://en.m.wikipedia.org/wiki/Wikipedia:What_is_an_article%3F) [## 帕累托分布

以意大利土木工程师、经济学家和社会学家维尔弗雷多·帕累托[1]的名字命名的帕累托分布是一种…

en.wikipedia.org](https://en.wikipedia.org/wiki/Pareto_distribution) [## 罗伦兹曲线

在经济学中,洛伦茨曲线是收入或财富分布的图形表示。那是…

en.wikipedia.org](https://en.wikipedia.org/wiki/Lorenz_curve)

洛伦兹曲线是一个图表,显示了底层 x %的人承担的总收入或财富的比例,尽管这对于有限的人口来说并不严格成立(见下文)。它通常用于表示收入分配,显示底层家庭占总收入的百分比。家庭的百分比标绘在 x 轴上,收入的百分比标绘在 y 轴上。它也可以用来显示资产的分布。在这种用法中,许多经济学家认为它是衡量社会不平等的一种手段。

后续步骤

  • 要用 BigQuery 计算基尼系数,查看来自 Evgeny Medvedev 的帖子:

[## 在 BigQuery 中计算基尼系数

下面是在给定每日余额的情况下输出每天的基尼系数的查询:

medium.com](https://medium.com/google-cloud/calculating-gini-coefficient-in-bigquery-3bc162c82168)

[## 互动:2019 年维基百科页面排行榜

维基媒体公布了他们 2019 年最受欢迎的页面——但我们能更深入吗?当然,这里有 BigQuery 和…

towardsdatascience.com](/interactive-the-top-2019-wikipedia-pages-d3b96335b6ae)

想要更多吗?

我是 Felipe Hoffa,谷歌云的开发者倡导者。在 @felipehoffa 上关注我,在【medium.com/@hoffa】的上找到我之前的帖子,在的【reddit.com/r/bigquery】上找到所有关于 BigQuery 的帖子

缺乏经验的数据科学家如何抓住机遇

原文:https://towardsdatascience.com/inexperienced-data-scientists-guide-to-meet-the-opportunity-9e8078e5ad74?source=collection_archive---------31-----------------------

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

蒂姆·马歇尔在 Unsplash 上的照片

当技能遇到机会时,成长就会发生

在你获得成为数据科学家的技能后,最重要的事情是什么?

找份工作,开始数据科学的职业生涯。

我确定我不用教任何人在线申请。每个人都知道。

但是对于一个完全没有经验的数据科学家来说,很难找到第一个突破口。如果你没有数据科学或技术领域的学位,那就更难了。

在这种情况下,最好的办法是加入数据科学家社区。认识行业内的人,让人们知道你是他们中的一员。同时,了解他们使用的技术,了解你需要做些什么来成为社区的一部分。

如果你是一名自学成才的数据科学家,或者你经历了职业变化,这一点尤为重要。加入数据科学家社区需要做一些工作。

如果你想找份工作或自由职业,或者开始创业,你也必须参与进来,建立一个社区。我将在这篇文章中解释一些有效的方法。或许你已经在做其中的一些了。但是你可能会找到做更多事情的动力。

在这篇文章中,我将谈论这三个非常基本的想法:

  1. 炫耀你的技能。
  2. 与行业人士的直接对话
  3. 建立关系

展示你的技能

做一个投资组合,让它可信。添加一些元素来展示你的技能。这里有一些展示你技能的方法。

Github

这是免费的,也是用您的代码创建配置文件的最简单的方法。无论你为了实践做了什么小的大的项目,用它们做一个漂亮的、组织良好的 GitHub 简介,并不断丰富它。

在你申请工作、开始建立关系网或者开始公开谈论你的技能之前,你需要有一个公开的个人资料来展示你的技能。它给了很多可信度和接受度。

**雇主在你的求职申请中要求 Github 个人资料链接。**所以对于编码人员来说,拥有一个 Github 配置文件几乎是强制性的。

一开始,我花了一些时间才知道 GitHub 个人资料可以在谷歌中排名。如果你在谷歌上搜索某个项目或主题,你会看到一些 Github 的简介出现在搜索结果中。

试试用这个“python 中的线性回归从头开始,GitHub”搜索。

你可以免费拥有一个精美的作品集来展示你的技能。如果你坚持定期发帖,你的个人资料也会变得受欢迎。

你会看到人们在他们的项目中使用你的代码,跟踪你,问你问题。

虽然这需要一些时间。大概 7/8 个月或者一年。但是即使你的 Github 档案不流行,你仍然可以在简历中使用你的 Github 档案链接。

写博客

这是展示你知道如何表达的最好方式之一。我从我的许多朋友那里听到“哦,不,写作不是我的事情”。

像其他技能一样,也需要时间来培养。但是如果你能习惯,那就太好了!

因为它会留在网上给所有人看。对你来说这几乎就是一笔资产。如果你经常做,你甚至可以从中赚钱。

这是一个很棒的写作平台!

如果你想拥有自己的个人域名,有一些免费的博客网站,比如 blogger.com 的。使用它。好消息是,它归谷歌所有。或者,另一个非常简单的方法是做一个 WordPress 博客。

你可以从 freenom 获得一个域名。一个免费的托管网站是 unlimitedfreehost.in 。可能还有其他免费资源。但是我以前用过。所以,这就是我分享这些的原因。下面是一篇关于它们的详细文章:

[## 无限免费虚拟主机和域名

非常适合投资组合、开博客或创业

towardsdatascience.com](/unlimited-free-hosting-and-domain-5998e14f7bfe)

如果你只想要一个空间来制作文件夹和添加简历,这些免费网站是完美的。

但是如果你想认真对待博客,最好的办法是买一个你想要的域名。

与人直接对话

当你在 GitHub 上有了一个不错的作品集和一些可以炫耀的材料后,最有效的方法就是直接和人们交谈。

现在,去哪里找合适的人交谈呢?

以下是找到它们的地方:

社交媒体

我主要使用脸书、推特和 Linkedin。

在脸书,你可以免费加入很多数据科学家团体。

你会发现许多人分享他们的想法,寻求帮助,进行对话。

我建议,加入一些你认为适合你的群,参与到对话中来。

分享你的想法,好文章,课程,视频,或者你知道有帮助的资源。喜欢并评论别人的资料,回答别人的问题如果你知道的话。

当你愿意帮助别人时,你也会得到帮助。以下是我加入的一些脸书团体:

数据科学世界

深度学习和机器学习

Python 编程

初学数据科学、分析学、机器学习、数据挖掘、R、Python

人工智能&深度学习

有很多这样的团体。选择你喜欢的。同样,在 Twitter 上关注业内人士,在 Linked In 上建立联系。

我通过 LinkedIn 上的关系找到了第一份实习工作

我只能说这三个社交媒体平台,因为我使用它们。如果你也使用其他平台,用它们来建立你的职业关系网。

堆栈交换 和/或 堆栈溢出

这是两个非常有用的网站。我使用堆栈溢出。但是两个都不错。如果你还没有,现在就开始使用它们。他们在很多方面都很好。

首先,你可以直接展示你的知识。回答别人的问题,尽可能地参与一些对话。

你会看到在侧边栏的职位发布,有一个选项来上传您的个人资料,以匹配你与雇主。如果你是一个活跃的成员,并且经常使用它,你最终会感受到在一个技术社区中的好处。

在你能回答问题之前,你需要赢得分数。这并不难。你需要做的就是提问。它有一个很棒的社区。

当我做一个项目遇到困难时,我会在这里提问,大多数情况下,我会在前 10 分钟内得到回复。

你甚至不用问一个非常普通的问题。只要用这个问题搜索,你会看到其他人已经问过这个问题,并且已经有了答案。

如果你是堆栈交换/溢出的初学者,这可能会很棘手

我的一些朋友告诉我,他们不觉得它好。因为提问很难。但是并不难。可能需要一点时间来理解,如何提出一个问题来获得帮助。随着时间的推移,你会学会的。一旦你学会了,你就会爱上它。

每当你遇到问题时,你都有一个免费的社区来讨论它!!

过一段时间,你就能在那里回答别人的问题了。这是一个很好的方式来练习你的技能,也是向社区展示你的技能。

松弛通道

加入松弛渠道。在每个地区,都有聚会小组、学习小组、志愿者小组。这些团体中的大多数都有松散的渠道。加入他们。

他们在那些空闲频道上宣布事件、会议、聚会。你将能够保持更新。

此外,大多数 slack 频道都有一个工作板。他们在那里发布职位空缺。

建立关系

不要误会我!

建立关系意味着产生持久的影响,并与你遇到的人保持联系。有几种方法可以做到这一点。

聚会

我住在美国。在这里,我使用平台【meetup.com】和事件开始寻找专业的网络事件。后来,我在 Linked in 上与他们联系,现在我可以在 Linked in 和 twitter 上获得关于重要事件的信息。

现在我个人认识很多业内人士。我甚至接到我认识的人打来的电话,问我是否愿意接受一份新工作,或者我是否知道有人可以做这份工作。

如果你坚持参加活动、研讨会和会议,这种情况也会发生在你身上。你会一次又一次地遇到同样的人,进入技术对话,展示你的专业技能。

与人建立这种关系需要一些时间。

同时,你会从这些事件中学到很多。你可以了解其他成功人士的工作、新技术、学习平台等等。

会议

参加会议,并在会议甚至聚会上展示你的项目。这是展示你的技能和提高的好方法。你从中获得了如此多的自信。

你不必成为任何领域的专家来展示你的项目。你只需要好好准备。

选择一个项目或主题并准备它。

我第一次开始做演讲是在我刚刚参加网络课程的时候,没有任何专业经验。

聚会上有人告诉我,下一个应该由你来演讲。我说‘是’。在那之后,我极度紧张和害怕,直到我的陈述。我收到了很多积极的激励和鼓励,甚至有人给了我一个推荐!

从那以后,我抓住一切机会做演讲。这对我提高知识帮助很大。因为当我准备演讲的时候,我学习了很多!我敢肯定,当每个人都知道很多人会看他们讲话时,他们会额外学习。

你可能会发现这篇文章很有用。它有一个数据集的选择做项目,也有一些项目的想法:

[## 练习数据科学技能和制作优秀投资组合所需的所有数据集

一些有趣的数据集提升你的技能和投资组合

towardsdatascience.com](/all-the-datasets-you-need-to-practice-data-science-skills-and-make-a-great-portfolio-857a348883b5)

如果你开始参加聚会,参与社交媒体,你会看到你周围不断有许多大小活动,他们总是在寻找新的主持人。

在这些活动中做志愿者,慢慢地和人们交谈。

试着坚持做 3/4 个月,你会发现你认识这个地区大多数大公司的人。

组织

参加聚会和会议是件好事。但是如果你能参与组织活动、学习小组和会议就更好了。如果你没有太多的人脉,这种情况可能不会长期存在。

所以,先用我之前解释的技巧建立一些联系,然后进入你将采取主动组织的阶段。

听着,你不必一个人做所有的工作!

我第一次加入组织活动的团队是帮助收拾行李。第二次,我负责每周三次在他们的社交媒体页面上发帖,我每周和团队见一次面。

没花太多时间。但是我接触到了一些不可思议的人!

结论

我唯一需要警告你的是,请不要过度。

你必须给自己留点时间来学习和提高你的技能。除此之外别无选择。

我的建议是制定一个常规或计划。根据你的时间表,在一周或一天中的某个时间安排这个网络或社区发展。坚持下去。

否则,你会看到你只忙于社交活动,没有时间提高自己的技能。你不会想那样的。另一方面,你无法避免社交或网络。

因为如果你有技能,但不知道如何建立关系网,这将无助于你的职业发展。

所以,请想办法平衡两者。祝你好运!

欢迎在推特上关注我,并喜欢我的脸书页面。

更多阅读:

[## 一个完整的带有亚马逊产品评论数据的 Python 情感分析算法:一步一步

使用 Python 的 Scikit_learn 库的 NLP 项目

towardsdatascience.com](/a-complete-sentiment-analysis-algorithm-in-python-with-amazon-product-review-data-step-by-step-2680d2e2c23b) [## 学习机器学习和深度学习的优质免费课程

顶级大学高质量免费课程的链接

towardsdatascience.com](/great-quality-free-courses-to-learn-machine-learning-and-deep-learning-1029048fd0fc) [## Numpy 完全指南

日常工作中需要的所有数字方法

towardsdatascience.com](/a-complete-guide-to-numpy-fb9235fb3e9d) [## 使用 Python 从零开始的多类分类算法:分步指南

本文介绍两种方法:梯度下降法和优化函数法

towardsdatascience.com](/multiclass-classification-algorithm-from-scratch-with-a-project-in-python-step-by-step-guide-485a83c79992) [## Python Matplotlib 的日常备忘单

完整的可视化课程

towardsdatascience.com](/your-everyday-cheatsheet-for-pythons-matplotlib-c03345ca390d) [## 置信区间的完整指南,以及 Python 中的示例

对统计学中一个非常流行的参数——置信区间及其计算的深入理解

towardsdatascience.com](/a-complete-guide-to-confidence-interval-and-examples-in-python-ff417c5cb593)

传染病建模:超越基本 SIR 模型

原文:https://towardsdatascience.com/infectious-disease-modelling-beyond-the-basic-sir-model-216369c584c4?source=collection_archive---------2-----------------------

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

我的上一篇文章解释了背景,并介绍了传染病建模的主题。如果你对 SIR 方程还没有很好的理解,你可能想先读一下那个来理解这个。这篇文章关注的是基本 SIR 模型的更复杂的变体,它将使你能够实现和编码你自己的变体和想法。下一篇文章将关注模型与现实世界数据的拟合,并将新冠肺炎作为案例研究。

你可以在这里找到整篇文章的 python 笔记本。

首先,我们将从一个稍微不同的更直观的角度快速探索 SIR 模型。之后,我们派生并实现了以下扩展:

  • “死亡”状态,指死于疾病的个体
  • 一种“暴露”状态,针对已感染疾病但尚未传染的个体(这被称为 SEIR 模型)
  • 依赖于时间的 R₀-values 这将允许我们对隔离、锁定等进行建模
  • 与资源和年龄相关的死亡率这将使我们能够模拟过度拥挤的医院、有很多年轻人的人群……

作为状态转换的模型

快速回顾一下,看看我们定义的变量:

  • N: 总人口
  • S(t): 第 t 天易感人数
  • I(t): 第 t 天感染人数
  • R(t): 第 t 天康复的人数
  • β: 感染者每天感染的预期人数
  • D: 一个感染者已经并可能传播疾病的天数
  • γ: 感染者每日痊愈的比例(γ = 1/D)
  • R₀: 一个感染者感染的总人数(R₀ = β / γ)

这是基本方程:

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

在推导方程时,我们已经直观地将它们视为“方向”,它告诉我们第二天人口会发生什么(例如,当 10 个人被感染,康复率为 1/5(即伽马),那么第二天康复的人数应该增加 1/5 * 10 = 2)。我们现在将对方程的理解固化为从一个区间 S、I 或 R 到另一个区间的“方向”或*【跃迁】*——这将极大地简化事情,当我们稍后引入更多区间时,方程会变得混乱。

下面是我们需要的符号:

隔间是盒子(“状态”),就像这样:

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

从一个隔室到另一个隔室的过渡由箭头表示,其标签如下:

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

描述了转变需要多长时间,人口是这种转变适用的个体群体,概率是个体发生转变的概率。

作为一个例子,让我们看看 SIR 方程中从易感者到被感染者的转变,β= 2,总人口为 100,10 人被感染,90 人易感。比率是 1,因为感染是立即发生的;过渡适用的人群是 2 * 10 = 20 个人,因为 10 个被感染的人每个感染 2 个人;可能性是 90%,因为 90/100 的人仍然会被感染。它对应于这个直观的符号:

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

而且更一般的,现在对于整个模型(对于 I → R,速率为γ,概率为 1 随着每个人的恢复):

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

正如你所看到的,箭头指向一个隔间在等式中加上;指向远离一个隔间的箭头减去。那不是太糟糕,是吗?花点时间去真正理解新的符号,看看它是如何用另一种方式来写方程的。**

对,我们现在理解了 SIR 模型,可以用 python 编码了,但是它已经有用了吗?它能告诉我们任何关于真实世界传染病的事情吗?答案是在目前的状态下,该模型更多的是一个玩具,而不是一个有用的工具。让我们改变这一切!

引入新隔间

导出暴露隔间

许多传染病在具有传染性之前都有一个潜伏期,在此期间宿主还不能传播疾病。我们将这样的个体——以及整个隔间——称为Eexposed

直觉上,我们会有 S → E → I → R 形式的转变:易感人群会感染病毒,从而暴露,然后被感染,然后康复。新的转变 S → E 将具有与当前的 S → I 转变相同的箭头,因为概率是相同的(所有易感者都可以被暴露),速率是相同的(“暴露”立即发生)并且群体是相同的(感染个体可以传播疾病并且每个每天暴露β个新个体)。从 I 到 R 的过渡也没有改变的理由。唯一的新转变是从 E 到 I 的转变:概率是 1(每个暴露的人都会被感染),总体是 E(所有暴露的人都会被感染),比率得到一个新的变量,δ (delta)。我们实现了这些转变:

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

从这些转换,我们可以立即推导出这些方程(再次,比较状态转换和方程,直到它对你有意义):

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

对暴露隔间进行编程

这应该不会太难,我们只需要修改上一篇文章中的几行代码( 再次,完整的代码在这里沿着 **,**我只是在这里展示重要的位)。我们将在 100 万人口中模拟一种高传染性(R₀ =5.0)疾病,潜伏期为 5 天,恢复期为 7 天。

Imports needed: 
from scipy.integrate import odeint
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

方程和初始值现在看起来像这样:

我们随时间计算 S、E、I 和 R:

(标绘后)得到这个:

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

我们现在能够更真实地模拟真实的疾病,尽管仍然肯定缺少一个部分;我们现在将添加它:

导出死舱

对于非常致命的疾病,这个隔间非常重要。对于其他一些情况,您可能希望添加完全不同的区间和动态(例如在长时间研究一种疾病时的出生和非疾病相关的死亡);这些模型可以变得像你想要的那样复杂!

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

我们当前的状态转换

让我们考虑一下如何利用当前的转换添加一个 D ead 状态。人什么时候会死于这种疾病?只有在他们被感染的时候!这意味着我们必须增加一个过渡 I → D。当然,人不会马上死去;我们为人们的死亡率定义了一个新的变量ρ(rho)(例如,当死亡需要 6 天时,ρ将是 1/6)。回收率γ没有理由改变。所以我们的新模型看起来会像这样:

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

唯一缺少的是从感染到康复以及从感染到死亡的概率。这将是又一个变量(现在的最后一个!),即*死亡率α。*例如,如果α=5%,ρ = 1,γ = 1(因此人们在 1 天内死亡或康复,这是一个更简单的例子),100 人被感染,那么 5% ⋅ 100 = 5 人将死亡。剩下 95%的⋅ 100 = 95 人正在康复。总而言之,I → D 的概率是α,因此 I → R 的概率是 1-α。我们最终得出了这个模型:

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

这自然会转化为这些等式:

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

对死区进行编程

我们只需要对代码做一些细微的修改(我们将α设置为 20%,ρ设置为 1/9)…

…我们得出这样的结论:

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

请注意,我添加了一个“总计”,将每个时间步长的 S、E、I、R 和 D 相加,作为“健全检查”:区间的总和总是为 N;这可以给你一个提示,说明你的方程是否正确。

您现在应该知道如何向模型中添加一个新的区间:考虑需要添加和更改哪些转换;想想这些新转变的概率、人口和速率;画图表;最后写下方程式。对于这些模型来说,编码绝对是而不是最难的部分!

例如,您可能想要为需要去 ICU 的受感染个体添加一个“ICU”隔间(我们将在下一篇文章中完成)。想想人可以从哪个车厢进 ICU,出了 ICU 后可以去哪里等等。

时间相关变量

以下是我们目前使用的变量的更新列表:

  • 总人口
  • S(t): 第 t 天易感人数
  • E(t): 第 t 天暴露的人数
  • I(t): 第 t 天感染人数
  • R(t): 第 t 天康复人数
  • **D(t)😗*t 日死亡人数
  • β: 感染者每天感染的预期人数
  • D: 感染者已经并可能传播疾病的天数
  • γ: 感染者每日痊愈的比例(γ = 1/D)
  • R₀: 一个感染者感染的总人数(R₀ = β / γ)
  • δ: 潜伏期的长短
  • α: 病死率
  • 人的死亡率(= 1/从感染到死亡的天数)

如您所见,只有区间会随时间变化(它们不是恒定的)。当然,这是极不现实的!举个例子,为什么 R₀-value 应该是常数?当然,全国范围内的封锁减少了感染者的感染人数,这就是它们的意义所在!自然地,为了更接近模拟真实世界的发展,我们必须让我们的变量随着时间而变化。

时间相关 R₀

首先,我们实现一个简单的改变:在第 L 天,一个严格的“锁定”被强制执行,将 R₀推至 0.9。在方程中,我们用β而不是 R₀,但我们知道 R₀ = β / γ,所以β = R₀ ⋅ γ。这意味着我们定义了一个函数

def R_0(t):
    return 5.0 if t < L else 0.9

β的另一个函数调用这个函数:

def beta(t):
    return R_0(t) * gamma

对,似乎很容易;我们只需相应地更改代码:

让我们画出一些不同的 L 值:

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

几天的时间就能让疾病的整体传播发生巨大的变化!

事实上,R₀可能从来没有从一种价值观“跳到”另一种价值观。相反,它(或多或少地)不断变化(可能上下波动几次,例如,如果社会距离措施放松,然后再次收紧)。你可以为 R₀选择任何你想要的函数,我只想给出一个常见的选择来模拟社交距离的最初影响:一个 逻辑函数

该函数(用于我们的目的)如下所示:

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

下面是这些参数的实际作用:

  • r0 _ start 和 r0 _ end 是第一天和最后一天的 r0 值
  • x_0 是拐点的 x 值(即 R_0 最急剧下降的日期,这可以被认为是主要的“锁定”日期)
  • k 让我们改变 R_0 下降的速度

这些图可能有助于您理解参数:

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

同样,相应地更改代码:

我们让 R₀在第 50 天左右从 5.0 快速下降到 0.5,现在可以真正看到曲线在第 50 天后变平:

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

与资源和年龄相关的死亡率

与 R₀相似,对大多数真正的疾病来说,死亡率α可能不是常数。这可能取决于多种因素。我们将关注对资源和年龄的依赖性。

首先,让我们看看资源依赖。当更多的人被感染时,我们希望死亡率更高。想一想如何将它转化为一个函数:我们可能需要一个“基础”或“最佳”死亡率,用于只有少数人被感染(并因此得到最佳治疗)的情况,以及一些考虑到当前感染人口比例的因素。这是实现这些想法的函数的一个例子:

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

这里, s 是某个任意但固定的(这意味着我们为一个模型自由选择它一次,然后它随时间保持不变)比例因子,它控制感染比例应该有多大的影响;α_OPT 是最佳死亡率。例如,如果 s=1,有一半的人口在某一天被感染,那么 s ⋅ I(t) / N = 1/2,那么那一天的病死率α(t)为 50% + α_OPT。或者也许大多数人几乎没有任何症状,因此许多被感染的人不会阻塞医院。那么比例因子 0.1 可能是合适的(在同样的情况下,死亡率仅为 5% + α_OPT)。

更精细的模型可能会使死亡率取决于 ICU 病床或呼吸机的数量等。我们将在下一篇文章中对冠状病毒建模时做这件事。

年龄依赖就有点难了。为了完全实现它,我们必须为每个年龄组包括单独的隔间(例如,一个感染隔间用于 0-9 岁的人,另一个用于 10-19 岁的人……)。用 python 中的一个简单 for 循环就可以做到这一点,但是等式有点混乱。仍然能够产生良好结果的更简单的方法如下:

对于更简单的方法,我们需要两样东西:按年龄组的死亡率和该年龄组占总人口的比例。例如,我们可能有以下死亡率和按年龄组划分的人数(在 Python 字典中):

alpha_by_agegroup = {
    "0-29": 0.01, "30-59": 0.05, "60-89": 0.20, "89+": 0.30
}
proportion_of_agegroup = {
    "0-29": 0.1, "30-59": 0.3, "60-89": 0.4, "89+": 0.2
}

(这将是一个非常老的人口,40%在 60-89 岁之间,20%在 89 岁以上)。现在,我们通过将年龄组死亡率乘以该年龄组的人口比例相加来计算总平均死亡率:

α = 0.01 ⋅ 0.1 + 0.05 ⋅ 0.3 + 0.2 ⋅ 0.4 + 0.3 ⋅ 0.2 = 15.6%.或者在代码中:

alpha = sum(
    alpha_by_agegroup[agegroup] * proportion_of_agegroup[agegroup]  
    for agegroup in alpha_by_agegroup.keys()
)

相当年轻的人口比例如下…

proportion_of_agegroup = {
    "0-29": 0.4, "30-59": 0.4, "60-89": 0.1, "89+": 0.1
}

…平均死亡率仅为 7.4%!

如果我们想同时使用我们的资源依赖公式和年龄依赖公式,我们可以使用我们刚刚用来计算α_OPT 的资源公式,并在上面的资源依赖公式中使用它。

随着时间的推移,当然有更精细的方法来实现死亡率。例如,我们没有考虑到只有需要重症监护的危重病例才会挤满医院,并可能增加死亡率;或者死亡改变了我们最初用来计算死亡率的人口结构;或者感染对死亡率的影响应该在几天后发生,因为人们通常不会立即死亡,这将导致 延迟微分方程 ,这在 Python 中很难处理!再次强调,尽你所能地发挥创造力!

实施与资源和年龄相关的死亡率

这相当简单,我们甚至不需要改变我们的主方程(我们在方程中定义 alpha ,因为我们需要访问当前值 I(t))。

根据上面按年龄组和老年人口统计的死亡率(以及比例因子 s 为 1,所以许多人被感染对死亡率有很大影响),我们得出了这个图:

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

对于较年轻的人口(大约 8 万人而不是 15 万人死亡):

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

现在缩放系数只有 0.01:

对于年龄较大的人群(请注意,随着时间的推移,死亡率仅略微上升)…

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

…以及更年轻的人群:

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

概述

仅此而已!您现在应该能够添加自己的区间(可能是针对可能再次感染的个人的区间,或者是针对糖尿病患者等特殊风险群体的区间),首先通过状态转换符号以图形方式,然后正式通过等式,最后通过 Python 以编程方式!此外,您还看到了一些实现时间相关变量的示例,这使得模型更加通用。

所有这些应该可以让你设计出非常接近真实世界的 SIR 模型。当然,许多科学家目前正在研究这些模型(此链接可以帮助你找到一些当前的文章——注意,它们可能会变得非常复杂,但这仍然是深入了解该领域当前状态的一个很好的方式)。在下一篇文章中,我们将把重点放在设计模型并使其适合真实世界的数据,并将冠状病毒作为一个案例研究。

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

传染病建模:使你的模型适合冠状病毒数据

原文:https://towardsdatascience.com/infectious-disease-modelling-fit-your-model-to-coronavirus-data-2568e672dbc7?source=collection_archive---------4-----------------------

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

在本文中,我解释了一些背景,并介绍了传染病建模和 SIR 模型的主题。我的上一篇文章对此进行了阐述,并扩展了基本的 SIR 模型。那里导出和实现的模型为这里使用的模型奠定了基础,所以你可能想先读两篇文章(或者如果你已经很好地理解了基本的 SIR 模型,就读最后一篇)。

这篇文章的重点是将一个扩展的 SIR 模型与真实的冠状病毒数据拟合,该模型具有依赖于时间的 R₀-values 和依赖于资源的死亡率,以便尽可能接近真实的数字,并对未来可能的发展做出明智的预测。但是在我们开始将数据拟合到我们的模型之前,让我们做一些经常被忽略的事情——让我们简单看看我们的模型不能做什么。

你可以在这里找到整篇文章的 python 笔记本。

警告、陷阱、限制

“从本质上讲,所有的模型都是错误的,但有些是有用的”——乔治·博克斯,英国数学家

模型总是现实世界的简化。如果你想看一个与真实世界完全相似的模型,去外面吧!然而,这并不意味着它们不有趣,不能产生深刻的见解。记住以下几点很重要:

  • 我们的微分方程系统对初始参数极其敏感;微小的变化会导致完全不同的结果。
  • 我们正在根据不完整的初步数据进行推断。一些国家可能只统计直接由冠状病毒导致的死亡,其他国家可能统计个人被感染的所有死亡。有些人可能(有意或无意)报告不准确或不可靠的数据等。
  • 我们假设所有人都是同质的,也就是说,我们没有考虑到一些地方是最初的热点地区,而另一些地方实施限制的时间更早、力度更大(我们需要更多的努力(从计算和数学上)来考虑这些事情)。

此外,针对我们的模型,我们做了以下假设(这些只是一些显而易见的假设,当然还有更多隐藏在等式中的假设):

  • 死亡不会在有意义的程度上改变人口结构(我们先验地计算死亡率*(使用爆发前的人口结构)并假设死亡不会高到显著改变人口结构(我认为这是一个相当弱的合理假设))。*
  • 只有危重病例才能填满医院,并且由于缺乏可用的护理,会导致更高的死亡率。
  • 所有没有得到治疗的危重患者都会死亡。
  • 个体在康复后是免疫的(目前这似乎是可能的,至少对绝大多数患者是如此。然而,一些报道可能会指出这是假的)。
  • R₀只减少或保持不变。它不会增加。(因此,这个模型不允许我们对再次放松的措施建模;为此,我们需要一个不同的 R₀函数)

现在记住这一点,让我们开始建模:我们将首先非常快速地进行曲线拟合,然后推导出我们使用的模型,最后将我们的模型拟合到冠状病毒数据。

(非常简短的介绍)曲线拟合

稍后,我们将获得一些数据点(每天的累计死亡人数)和一个函数(我们的模型),该函数根据一些参数(死亡率、ICU 床位等)给出我们预测的每天的累计死亡人数。然后,我们想要拟合曲线*,这意味着我们想要为我们的模型找到参数,以生成最接近真实数据的预测。我不会在这里深入任何数学背景,我只会用 Python 给出一个例子(这里省略了导入,它们在笔记本里)。*

首先,生成一些数据(在本例中,是带有一些噪声的正态分布)来拟合:

看起来是这样的:

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

接下来,我们需要一个函数,它将 x 值作为第一个参数,将我们想要拟合的三个参数(我们称它们为 a,b,c )作为下一个参数。这是我们将用来拟合数据的函数;我们的曲线拟合库(不要担心,我们自己不必做任何繁重的工作)将改变参数,直到它找到一个好的拟合(并有希望找到我们用来生成数据的那些,即 a=21,b=6.1,c=1.2)。通过这个函数,我们生成一个曲线拟合模型(使用lm fit库)并传递一些参数的初始猜测。然后我们拟合数据。需要注意的是,一般的曲线拟合方法并不能保证找到全局最小值,我们对参数的初步猜测是至关重要的。**

这是输出—我们找到了我们的参数!

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

这就是我们需要的所有曲线拟合背景。现在,我们将使用模型来拟合数据:

拟合的扩展 SIR 模型

我们建立在上一篇文章中导出的模型基础上:个人是第一个SSS 易受感染的——他们可以感染冠状病毒(概率为 S/N)并成为 e 暴露者。他们还不能传播病毒。几天后(确切地说是 1/δ),他们被感染并传播了病毒。在感染的过程中,它们可以(超过 1/ρ天,概率为α)存活并最终恢复(1/γ天后):

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

为了提醒你,这里还有一些变量:

  • N: 总人口
  • S(t): 第 t 天易感人数
  • E(t): 第 t 天暴露的人数
  • I(t): 第 t 天感染人数
  • R(t): 第 t 天康复人数
  • 第 t 天死亡人数
  • β: 感染者每天感染的预期人数
  • D: 受感染者已经并可能传播疾病的天数
  • γ: 感染者每日痊愈的比例(γ = 1/D)
  • R₀: 一个感染者感染的总人数(R₀ = β / γ)
  • δ: 潜伏期的长度
  • α: 病死率
  • ρ: 人的死亡率(= 1/从感染到死亡的天数)

*我只想添加一个新的隔间:C*critical,用于需要重症监护的个人。这将使我们能够模拟人满为患的医院。当然,只有被感染的个体才能进入危急状态。从临界状态开始,它们要么死亡,要么康复。

我们实现了这些转变:

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

好吧,这里有很多问号,让我们做一些思考!我们需要一个被感染的个体变得危急的可能性。这里不打算介绍越来越多的希腊字母,我们就叫它 p(I→C)吧。从逻辑上讲,从感染到康复的概率是 1-p(I→C)。

我们需要另一个概率,临界时死亡的概率:p(C→D)。同理,从感染到痊愈的概率是 1-p(C→D)。

现在我们只缺了感染后的重症率,重症时的死亡率,重症时的痊愈率。通过阅读目前的估计,我得到了以下数字(我从多个来源汇总了这些数字,可以随意使用不同的数字;随着时间的推移,应该会有更准确的数字):

  • 从感染到危急的天数:12 天(→比率:1/12)
  • 从危急到死亡的天数:7.5 天(→比率:1/7.5)
  • 从危急到恢复的天数:6.5 天(→比率:1/6.5)

把这些都填进去:

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

分流和有限的资源

在意大利和其他受影响严重的地方,有很多关于分流的报道,这意味着医生必须在有限的可用资源中选择接受治疗的人。这可以被合并到如下模型中:

想象一下,一个国家拥有适合治疗严重冠状病毒病例的 B ICU 床位。如果有超过 B 的危重病人(数量是 C ,我们的危重车厢),所有在 B 以上的人都无法救治而死亡。例如,如果 B=500,C=700,那么有 200 名患者因为没有资源治疗而死亡。

这意味着 C-B 人因短缺而死亡。当然,如果我们的床位比重症病人多(例如 B=500,C=100),那么我们就不会有 C-B=-400 人死亡,这就说不通了。而是我们有 max(0,C-B) 人因为短缺而死(想想看:如果 C < B(床位比病人多),那么 C-B < 0,所以 max(0,C-B)=0,0 人因为短缺而死;如果 C > B(床位不够),那么 C-B > 0,所以 max(0,C-B)=C-B,C-B 的人因为短缺而死)。

因此,我们需要扩展我们的转换:从 C 开始,有两个我们必须关注的群体:max(0,C-B)人因为短缺而死亡,其余的人像我们上面推导的那样得到治疗。其余的是什么?嗯,如果 C < B(足够的床位),那么 C 人得到治疗。如果 C > B(床位不够),那么 B 人得到治疗。那就意味着“剩下的”——得到治疗的人数——是 min(B,C) (同样,如果 C < B,那么 min(B,C)=C 人得到治疗;若 C > B,则 min(B,C)=B 人得到治疗;数学检查)。

我们最终得到了这个修正的模型(所有超过可用床位数的人都会立即死亡;你可以把它改成花几天时间,以 75%的概率死去,等等。):

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

这些是它的方程式(注意是时间的函数,我们一会儿就会讲到)

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

再一次,花些时间来看看这些方程是如何与上面的状态转换直接相关的。它们看起来很难,但它们只是描述图表的另一种方式。

时间相关变量

对于这个模型,我们只有两个与时间相关的变量:R₀(t(以及β(t),因为 R₀ = β / γ)和床位(t)。

对于 R₀(t),我们将再次使用以下逻辑函数:

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

对于床位(t ),这个想法是,随着病毒的传播,各国做出反应,开始建造医院,腾出床位,等等。因此,随着时间的推移,可用床位的数量会增加。一个(非常)简单的方法是将床位数量建模为

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

其中,Beds₀是可用的 ICU 病床总数,s 是某个比例因子。在此公式中,床位数增加了 s 倍,即每天的初始床位数(例如,如果 s=0.01,则在第 t 天=100,床位数(t) = 2 ⋅ Beds₀)

拟合模型

*首先,让我们想想我们知道什么,我们*想知道什么。这有助于我们找到哪些参数是我们可以修正的,哪些是我们想要拟合的。

这里是我们的模型需要的所有参数(这只是方程中的所有变量加上 R₀(t 函数中的变量)和 beds(t);):

  • 总人口
  • β(t): 感染者每天感染的预期人数
  • γ: 感染者每日痊愈的比例(γ = 1/D)
  • r₀_start(r₀(t 参数)
  • r₀_end(r₀(t 参数)
  • x₀(r₀(t 参数)
  • k(r₀(t 参数)
  • s (床中参数(t))
  • beds₀(r₀(t 参数)
  • δ: 潜伏期的长度
  • p(I→C): 从感染到危急的概率
  • p(C→D): 危急时死亡的概率

让我们来看一下这些:我们当然不需要去适应,我们可以只看我们想要建立疾病模型的地区的人口。Beds₀的情况也是如此,我们可以很容易地查找一个地区的 ICU 床位数(我已经用 Python 准备了所有的数据集来做这件事,我们将在下一节看到它们)。 δγ 固定为δ=1/9 和γ=1/3,这些是我通过论文阅读找到的最好的估算。关于 β(t) ,我们通过 R₀(t 和γ计算β,所以不需要为β寻找任何单独的参数。可以拟合床缩放因子s**;不可否认,它在结果中并没有起很大的作用,因为到目前为止,由于短缺而没有接受治疗的人数与死亡总数相比是很少的。**

我收集了概率 p(I→C)p(C→D) 的两个估计值,按年龄分组(同样,我们将在下一节中讨论这些)。这将允许我们计算概率,就像我们在上一篇文章中推导的那样:按每个年龄组的人口比例加权。在这里,我们实际上将尝试拟合这些参数——直到现在,尝试拟合这些参数总是会产生非常接近收集的估计值的结果。

总而言之,我们只剩下这些参数来拟合:

  • p(I→C)
  • p(C→D)
  • r₀_start(r₀(t 的参数)
  • r₀_end(r₀(t 的参数)
  • x₀(r₀(t 参数)
  • k(r₀(t 的参数)
  • s (床中参数(t))

补充和冠状病毒数据

我已经从联合国数据中收集并整理了年龄组、概率和 ICU 床位的数据。我们将从这里获取最新的案例号。让我们来看看:

首先,加载数据:

以下是从所有表格中摘录的内容,以便了解我们正在处理的问题:

  • 床位表中有许多国家每 10 万居民的 ICU 床位数量**
  • 年龄组表显示了所有国家每个年龄组的人口数量。
  • 概率表具有为每个年龄组的转变 I→C 和 C→D 收集的概率 I(两个独立的概率;仅使用 _1 或 _2)(我们不会使用它们,因为我们将尝试拟合转移概率)
  • covid_data 是一个巨大的表格,显示了从 2020 年 1 月 22 日起每个地区每天的死亡人数。

例如,以下是全世界的总死亡人数:

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

并非所有国家和地区都包括在表中。然而,如果你想模拟一个没有包括在内的地区的爆发,你应该能够通过快速的谷歌搜索找到你需要的数据。

你可能已经注意到,我们只使用死亡人数的数据,而不是报告的病例数。原因很简单:确诊病例的报告非常嘈杂,而且很大程度上依赖于检测的数量(尽管有足够的检测,但并不是每个被感染的人都会接受检测)。例如,案例数量可能会从一天的 10000 增加到第二天的 15000,但这可能只是因为测试数量增加了 5000。总的来说,报道的死亡人数要准确得多——死亡人数很难被遗漏,所以报道的数字可能与真实数字非常接近。

编码模型

设置好所有数据后,我们现在可以开始编码我们的模型了。同样,这是方程式:

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

让我们把它们翻译成代码,就像在上一篇文章中一样(一个警告:我们在这里计算β有点简化,因为严格计算它会复杂得多,并且对结果的影响可以忽略不计;如果你好奇的话,你可以在这里看到扩展实现):

这实际上只是输入 Python 的方程式,没有什么令人兴奋的事情发生!现在,关于 R0 函数和整个模型,该模型采用参数拟合(有些我们已经知道)来计算 S、E、I、C、R 和 D 的曲线:

以下是我们在没有足够 ICU 床位的人群中模拟疾病时得到的结果(绘图功能在笔记本中):

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

在右下角的图表中,您可以看到由于资源短缺(没有足够的床位)导致的死亡人数激增。

对,我们现在有了模型和数据。让我们好好利用我们的曲线拟合技巧吧!

曲线拟合

首先,我们得到要拟合的数据和我们已经知道的参数,并且我们为那些我们不知道的定义初始猜测和上下限(以帮助曲线拟合并得到好的结果)——随意改变初始猜测和上下限。

一个非常重要但我们还没有谈到的参数是爆发 _ 转移:病例数据从 1 月 21 日开始,所以我们的模型会认为病毒在那一天开始传播。对于许多国家来说,这实际上可能是几天或几周之后或更早,这对试衣有很大影响。当然,我们仍然不知道每个国家第一个被感染的人是什么时候——用你最好的判断。例如,如果您认为您正在尝试适应的国家在 1 月 30 日出现了首例病例,您应该将 outbreak_shift 设置为-9。

(可悲的是,使用 outbreak_shift 作为附加参数并不容易,因为只允许整数(整天),整数编程相当困难(实际上是 NP 困难);我们将不得不求助于非常昂贵的计算。)

我们现在用零填充我们想要拟合的数据(每天的死亡人数),以说明疫情的变化。我们还定义了拟合的 x 值;这只是一个列表[0,1,2,…,总天数]。

为了进行拟合,我们需要一个函数,该函数将 x 值作为第一个参数(日期)和我们想要拟合的所有参数,并返回模型针对该 x 值和参数预测的死亡人数,以便曲线拟合器可以将模型预测与真实数据进行比较。这是:

没什么可做的了!只需初始化一个曲线拟合模型,根据我们定义的 inits、mins 和 maxs 设置参数,设置一个拟合方法(您可以在这里尝试不同的方法,例如, differential_evolution 可能效果不错),然后拟合:

最后,这是我们为意大利准备的服装:

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

不算太差!让我们看看装配工预测的参数:

太好了,它们看起来相当真实,并且与现实生活中报告的许多数据点一致!x0 是 84,所以数据从 1 月 21 日开始,爆发时间设置为 30 天,我们模型的第 84 天是 3 月 15 日。x0 是 R0 最急剧下降的日期,因此我们的模型认为主要的“锁定”发生在 3 月 15 日左右的意大利,非常接近真实日期。

让我们使用最佳拟合参数来看看我们的模型预测的未来(如果您查看笔记本中的代码,可以放大):

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

请注意,2020 年 3 月底左右,由于医院人满为患,死亡人数激增,增加了死亡率,最终约为 1.4%。

这是从 3 月到 5 月的放大预测——如果模型是正确的,意大利已经度过了最糟糕的时期,死亡人数在接下来的几个月应该会大幅下降。当然我们的模型认为 R0 会保持在 0.6 左右;如果它再次上升,锁定恢复,数字将再次开始增加!

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

概述

仅此而已!您现在应该能够(尝试)将您的模型与真实世界的案例数据相匹配,并有望做出准确的预测!在另一篇文章中,我们将为这样的模型构建一个仪表板,以实时查看不同参数的效果!

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

传染病建模:理解用于冠状病毒建模的模型

原文:https://towardsdatascience.com/infectious-disease-modelling-part-i-understanding-sir-28d60e29fdfc?source=collection_archive---------4-----------------------

解释背景并从头推导 SIR 模型的公式。用 Python 对模型进行编码和可视化。

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

在过去的几周里,许多数据科学家、业余爱好者和爱好者开始阅读传染病建模。他们中的许多人直接进入建模,并盲目地将他们的模型与冠状病毒病例数相适应——而不了解模型背后的背景和理论。尽管由看起来令人生畏的数学组成,最广泛使用的模型——如果解释得好——并不太难理解。

这篇文章解释了背景,并介绍了传染病建模的主题。SIR 模型方程是从零开始用简单的例子推导和解释的。最后,用 Python 编写了一个简单的 SIR 模型。我的下一篇文章将关注基本 SIR 模型的更复杂的变体,并将使读者能够实现和可视化他们自己的变体和想法。另一篇文章将关注模型与现实世界数据的拟合,并将新冠肺炎作为案例研究。

你可以在这里找到这篇文章的全部代码。

背景

本系列并不意味着快速向你展示一些带有大量彩色曲线的图表,这些图表应该让你相信我的模型可以完美地预测世界各地的冠状病毒病例;相反,我将解释理解这些模型、形成自己对这些模型的看法以及实现自己的想法所需的所有背景。你只需要高中水平的微积分就能跟上解释;要理解编程部分,您需要对 python 有扎实的理解。

因此,记住这一点:

我们想建立传染病模型。这些疾病可以从一个群体传播到另一个群体;我们试图深入了解它们传播的速度,它们感染的人口比例,死亡的比例等等。模拟它们的最简单的方法之一(也是我们在这里关注的方法)是使用房室模型。分室模型将群体分成几个分室,例如:

  • Sus 可接受(仍可被感染,“健康”)
  • 我感染了
  • 恢复(已经被感染,不能再被感染)

也就是说,我们可能有 N=1000 的人口(例如 1000 人),并且我们知道在时间 t(例如疾病爆发后 t=7 天)有 400 人被感染。这由 S(7) = 400 表示。SIR 模型使我们只需输入一些初始参数,就可以获得所有 t 天的所有值 S(t),I(t),R(t)。现在我将通过一个简单的示例来介绍必要的变量:

我们有一种新的疾病,x 病,对于这种疾病,感染者传染健康人的概率是 20%。一个人平均每天接触的人数是 5 人。因此,每天,一个被感染的人会遇到 5 个人,并以 20%的概率感染每一个人。因此,我们预计这个人每天会感染 1 人(20% ⋅ 5 = 1)。这是β(“beta”),一个感染者每天感染的预期人数

现在人们可以看到,一个感染者拥有并能传播疾病的天数极其重要。我们称这个数字为 D 。如果 D=7,一个感染者四处走七天传播疾病,每天感染 1 人(因为β=1)。因此,我们预计一名感染者会感染 1⋅7(每天 1 人乘以 7 天)= 7 人。这是 R₀的基本繁殖数,一个感染者感染的总人数。我们只是用了一个直观的公式:R₀ = β ⋅ D

我们其实不需要别的,只需要一个小记号:γ(“gamma”)会是 1/D,所以如果你把 D 想成一个感染者患病的天数,你就可以把γ想成痊愈率,或者说感染者每天痊愈的比例。例如,如果目前有 30 人被感染,D=3(所以他们被感染了三天),那么每天,他们中的 1/3(所以 10)人会康复,所以γ=1/3。γ = 1/D,所以 D = 1/γ,R₀ = β ⋅ D,则 R₀ = β / γ。

在这里,您可以再次看到最重要的变量及其定义:

  • N: 总人口
  • S(t): 第 t 天易感人数
  • I(t): 第 t 天感染人数
  • R(t): 第 t 天康复人数
  • β: 感染者每天感染的预期人数
  • D: 一个感染者已经并可能传播疾病的天数
  • γ: 感染者每日痊愈的比例(γ = 1/D)
  • R₀: 一个感染者感染的总人数(R₀ = β / γ)

推导公式

我们现在想得到一整天的感染人数、易感人数、痊愈人数,仅仅从β、γ、n 就可以得到,现在很难得到一个直接的公式来表示 S(t)、I(t)、R(t)。然而,描述 S、I 和 R 的每日变化是相当简单的,即易感/感染/恢复的数量如何根据当前的数量而变化。同样,我们将通过示例推导公式:

我们现在处于疾病 x 爆发后的第 t 天。然而,一个感染者每天感染的预期人数是 1(所以β=1),一个感染者拥有和能够传播疾病的天数是 7(所以γ=1/7,D=7)。

假设 t 日,60 人被感染(所以 I(t)=60),总人口为 100(所以 N=100),仍有 30 人易感(所以 S(t)=30,R(t)= 100–60–30 = 10)。现在,S(t)和 I(t)和 R(t)如何变化到第二天?

我们有 60 名感染者。他们每人每天感染 1 人(那就是β)。但是,他们遇到的人,只有 30/100 =30%的人仍然易感,可以被感染(那就是 S(t) / N)。所以,他们感染了 60 个⋅人 1 个⋅人 30/100 = 18 人(再想想,直到它真正有意义:60 个感染者平均每天感染 1 人,但 100 人中只有 30 人仍会被感染,所以他们没有感染 60 ⋅ 1 人,而只有 60 ⋅ 1 ⋅ 30/100 人= 18 人)。所以,18 个易感者被感染,所以 S(t)变化负 18。代入变量,我们就导出了第一个公式:

第二天 S(t)的变化= - β ⋅ I(t) ⋅ S(t) / N

如果你熟悉微积分,你会知道我们有一个术语来描述函数的变化:导数 S’(t)或 dS/dt。(在我们推导并理解了所有的导数 S’(t),I’(t),R’(t)之后,就可以计算出每一天的 S(t),I(t),R(t)的值了。)

所以:S’(t) =- β ⋅ I(t) ⋅ S(t) / N

那么,感染的数量是如何变化的呢?这很简单:有一些新的人被感染,我们刚刚看到了这一点。“离开”S(t)“到达”I(t)的确切人数。因此,我们有 18 个新感染者,我们已经知道公式将类似于此:I’(t) = + β ⋅ I(t) ⋅ S(t) / N(当然,我们可以省略加号,这只是为了向您显示我们获得的量正好是 S(t)损失的量,因此我们只需改变符号)。只差一点:有些人会康复。记住,我们有γ,它是每天被感染恢复的比例,这正是我们需要的!

我们有 60 人被感染,γ=1/3,所以这 60 人中有三分之一康复了。那是 1/3 ⋅ 60 = 20。最后,我们得到公式:

I’(t) = β ⋅ I(t) ⋅ S(t) / N -γ ⋅ I(t)

再次,思考一下这个问题;第一部分是新感染的易感者。第二部分是追偿。

最后,我们来看最后一个公式,回收率的变化。这很简单:新恢复的正好是我们刚刚计算的 20 个;没有人离开“恢复”车厢。一旦痊愈,它们会保持免疫:

R’(t) = γ ⋅ I(t)

太好了,我们现在已经推导出(并且理解)了我们需要的所有公式!在这里,他们再次用一个更常见的符号表示导数,并像通常所做的那样省略了“(t)”。

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

这样的方程被称为常微分方程(ODEs) (你不需要任何关于它们的知识来理解这个系列)。

我们现在可以描述易感、感染和康复人数的 T2 变化。幸运的是,从这些公式中,我们可以计算出我们真正感兴趣的数字:S(t),I(t)和 R(t),即每天 t 中易感、感染和康复的人数。更幸运的是,我们自己一点也不需要做,python 提供了许多求解 ODEs 的工具!

编码模型

(你可以在这里找到全部代码)

我们现在将编码并可视化一个示例模型。您可以随意复制代码和使用参数!我们首先定义一些参数:

我们现在实现我们上面推导的公式:

神奇的事情发生了:我们从函数 odeint 中得到我们的值 S(t)、I(t)和 R(t ),该函数采用我们上面定义的公式、初始条件以及我们的变量 N、β和γ,并计算 50 天的 S、I 和 R。

现在我们只需绘制结果并得出以下结论:

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

正如你所看到的,几乎 1000 人全部被感染只需要 30 天左右。当然,这里模拟的疾病具有非常高的 R₀值 4.0(回想一下,R₀ = β ⋅ D = 1.0 ⋅ 4.0)。仅仅将一个感染者每天感染的人数β改为 0.5,就会产生完全不同的情况:

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

如你所见,这些微分方程系统对初始参数非常敏感。这也是为什么很难正确模拟一种新疾病的爆发:我们不知道参数是什么,即使是微小的变化也会导致非常不同的结果。

结果

你现在应该对传染病建模的一些最重要的公式和思想有了坚实的掌握。对 R₀,β,γ等的理解。mean 使您不仅可以盲目地调整参数,还可以设计、改进和扩展您自己的模型。您现在应该能够理解接下来的部分了,在接下来的部分中,我们将更多地关注扩展现有的模型,并(在第 3 部分中)尝试对一个新出现的疫情进行建模。

传染病模型——基本原理

原文:https://towardsdatascience.com/infectious-disease-modelling-the-nuts-and-bolts-46a9b2d42388?source=collection_archive---------46-----------------------

使用 R 中的简单二室模型的介绍

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

埃琳娜·莫日维洛Unsplash 上拍摄的照片

自古以来,传染病就一直困扰着人类。通常,传播是由宿主驱动的,然后宿主将感染传给其他个体。传染病模型的目标是捕捉这些传播动态。它们是对传染病传播的数学描述。

使用该模型,可以:

  • 研究干预对疾病负担的影响
  • 来预测不同干预的结果

一个简单的二室模型

考虑只有两个隔间的最简单的模型——感染(I)和恢复®。这个模型有助于我们回答以下问题:

人从 I 到 R 需要多久?(或从 I 到 R 的转换率)

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

假设:在任何时间点,I 区室中的每个个体都同样可能经历康复。

变速器动力学由以下微分方程控制:

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

上述方程的解是:

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

这里,γ代表回收率。γ值越高,恢复越快。

在隔室 I 中度过的时间以参数γ和平均值 1/ γ(平均传染期)为指数分布

在 R 中建立一个双室模型

R 中的 deSolve 包包含了求解一阶常微分方程组(‘ODE’)的初值问题的函数。

步骤 1 :定义感染和康复队列中的人数、康复率γ(γ=0.1)和随访持续时间(21 天)

initial_values<-c(I=10000,R=0) #10000 in infected cohort
parameters<-c(gamma=0.1)
time=seq(from=0,t=21,by=1)

第二步:指定模型功能

在模型函数中,指定微分方程。该函数有三个输入参数:

  • 时间:我们希望求解模型的时间点
  • 状态:存储每个时间点每个车厢的人数
  • 参数:模型参数的名称和值
model_cohort<-function(time,state,parameters){
  with(as.list(c(state,parameters)),{
    dI=-gamma*I
    dR=gamma*I
    return(list(c(dI,dR)))
  })  
}

第三步:使用 deSolve 包中的 ode()求解模型

output<-as.data.frame(ode(y=initial_values,func =   model_cohort,parms=parameters,times = time))
head(output)

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

我们看到输出是带有时间点的数据帧,即在每个时间点感染和恢复隔离室中的人数。

步骤 4:使用 ggplot2 绘制输出

out_long=melt(output,id="time") #To convert the dataframe to long   formatggplot(data = out_long,          
       aes(x = time, y = value, colour = variable, group = variable)) +  
  geom_line() +                                                          
  xlab("Time (days)")+                          
  ylab("No: of people") +                    
  labs(title = paste("No: infected and recovered for gamma = 0.1 days^-1"))+scale_color_discrete(name="State")

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

从图中,可以回答关于在每个时间点感染和恢复的人数的问题。平均传染期将是恢复率的倒数,即 1/0.1=10 天

改变伽马值

如果γ增加到比如说 0.5,我们观察到一半的感染群体在大约 2 天内恢复,而对于γ=0.1,需要大约 7 天。因此,γ值越大,恢复时间越短。

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

这个模型是基于相似原理的更复杂的房室模型的最简单的例子,比如 SIR 模型。在即将到来的帖子中会有更多关于它的内容:)

参考文献

通过观察专家来推断你的奖励

原文:https://towardsdatascience.com/infer-your-reward-by-observing-an-expert-140b685fd5b5?source=collection_archive---------20-----------------------

实现反向强化学习算法

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

照片由 Jehyun Sung 在 Unsplash 上拍摄

在强化学习(RL)中设计奖励函数可能很麻烦。很简单,我们的目标是采取行动增加未来的累积回报,并避免那些损害它的行为。然而,选择如何奖励现实任务中的行为,并以一种既可学又能表达代理人期望的目标的方式,并不简单。例如,如何将“可接受的”社会行为指定为一种功能?

逆向强化学习(iRL)是一种缓解这种设计问题的方法。我们没有试图自己设计一个奖励函数 r(s,a) ,而是让 RL 代理观察专家演示我们希望它学习的内容,并从他们的行为中推断专家的意图。通过这样做,代理使奖励函数符合专家的意图。

让我们深入研究一下。

我们的 iRL 实现将连接到生成敌对网络(GANs)。对于这一点,你会发现对【GANs 如何工作有一个基本的了解是非常有用的,尽管我在下面会做简要介绍。

RL 为 GAN

GANs 的快速细节

一个 GAN 由鉴别器 D 和发生器 G 组成。生成器旨在生成看起来尽可能接近训练中使用的真实图像的图像。另一方面,鉴别器将给定的图像分类为真品或赝品。因此, DG 都玩一个游戏,其中 D 试图最大化它正确地将输入 x 分类为真或假*,G 最小化 D 将其输出标记为的可能性*

实现这一点的损失函数是 D 和 g 输出的对数

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

GAN 损失函数

其中:

  • D (x) —鉴别器预测 x 为真/假
  • G (x) —发电机输出
  • D ( G (x)) —鉴别器对发电机输出的预测

我们可以将这一培训过程描述如下:

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

甘的作品(作者插画)

gan 与反向 RL 的关系

反向 RL 使用 GANs 的鉴别器的概念。iRL 中的鉴别器是政策和奖励函数的比率。我们一会儿就能看到它的全貌。

与 GAN 中的假图像和真图像相似,iRL 有两组数据——专家演示和策略与环境交互生成的过渡数据。两个转换集都包括状态-动作对,直到一个有限的时间步长 T (s₀,a₀,s₁,a₁,…,sT,aT)。将 iRL 与 GANs 联系起来,专家论证可以说是真实数据,而政策收集的样本是虚假数据。这意味着该策略现在充当生成器。

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

iRL 为 GAN(修改自 来源 )

鉴频器的目标以与 GAN 中相同的方式表示。

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

iRL 中鉴别器的最小最大物镜

该目标函数的第一部分试图增加所看到的样本是专家演示的可能性。第二部分降低了样本被正在运行的策略收集的可能性。

实现对鉴别器的培训

正如所看到的,训练鉴别器的目的是最大化输入正确分类为真或假的概率。为此,我们最大化损失函数:

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

iRL 鉴别器损耗函数

在实施中,这可以通过两个简单的步骤实现:

1.样本批专家轨迹τET20*,正向通过**D计算损耗log*(D(τE))。**

2.对收集到的一批策略轨迹 τF,顺传**D进行采样,计算损失log(D(τF))。这里,我们避免做(最小化)log(1—D(τF))因为这无法在学习过程中提供足够的梯度。所以我们最大化log(D(τF))来代替。**

代表 iRL 中的鉴别器

鉴别器 D 是奖励函数 r :

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

iRL 中的鉴别器:指数奖励函数与学习策略的比率

ψ代表奖励函数的可学习参数。作为学习奖励的函数,鉴别器也使用参数ψ。

更新鉴别器 D 更新学习的奖励函数 r(τ) 。当鉴别器是最优的,我们得到一个最优的回报函数。然而, r(τ) 以上的奖励函数在奖励的估计中使用整个轨迹 τ 。与使用单个状态、动作对 r (s,a)相比,这给出了较高的方差估计,导致较差的学习。

使用单个状态-动作对将解决高方差估计问题,但是也有一个缺点——它使得最优奖励函数与最优策略提出的监督动作严重纠缠。换句话说,习得的奖励会鼓励模仿专家的政策,当环境发生变化时,不能产生明智的行为。

这就是我们对鉴频器的最后改进。

创建一个解开的奖励函数

为了提取从环境中分离出来的奖励,对抗性逆 RL (AIRL)提出用这种形式修改鉴别器:

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

使用单个【状态-行动对】作为输入的鉴别器

我们可以进一步简化奖励函数 *r(s,a,s’)*为:

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

对抗性反 RL 奖励功能恢复优势

它现在由以下部分组成:

  1. g(s,a):估计状态-动作对的回报的函数逼近器。它被表达为只有状态 g(s)的函数,以将奖励从环境动态中分离出来
  2. h(s):控制 g(s)上不需要的整形的整形术语

下面是代码中的鉴别器和奖励函数。

g(s)收回最优报酬;h(s)类似于一个价值函数。

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

从学习的奖励函数中恢复优势 A(s,A)

这意味着 r(s,a,s’)恢复了优势。这就是有趣的地方。

执行策略更新

策略更新包括找到策略的对数的梯度乘以优势。

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

政策梯度更新*

在 iRL 中,由于我们没有观察到评估优势时使用的环境奖励,更新期间的更改将使用奖励函数来估算这些优势。更简单地说,由奖励功能恢复的优势在策略更新中找到用途。

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

在 iRL 中使用优势评估进行政策更新*

为了对 iRL 有一个直观的概述,这里有一个普通政策梯度(VPG)和应用于 VPG 的反向 RL 之间的整个伪代码的并排比较。

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

普通政策梯度(VPG)比较了 VPG 和反向 RL*

策略 π 被训练来最大化这个估计的回报 r(s,a,s’),并且当被更新时,学习收集与专家演示更难区分的轨迹。

运行反向 RL

反向 RL 培训的第一步是运行基于策略的 RL 算法来收集专家演示。我从两个方面着手:

  1. 收集最后 n 个策略更新的轨迹。例如,如果训练 250 个纪元,收集 230–250 个(最后 20 个)。这是 AIRL 论文中的方法。
  2. 收集平均剧集奖励高于某个奖励阈值的轨迹

上述两种收集专家数据的方法在反向 RL 平均回报方面似乎没有显著差异(至少在 250 个时期内)。我对此的解释是,( b)中的奖励阈值收集了(a)中看到的大部分发生在最后训练阶段的轨迹。

这里是在 HalfCheetah-v2 上的 iRL 在 100 个步骤上的平滑性能,使用了来自五个最终时期的专家数据。

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

iRL 策略和使用观察奖励的相同策略的半猎豹奖励比较。*

完整的 iRL 实现和复制细节在https://github.com/mugoh/rl-base/tree/master/rlbase/aiRL上。

下面是用于收集这些演示的策略的单次运行示例。

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

收集专家论证*

结论

反向强化学习允许我们向代理演示期望的行为,并试图使代理从演示中推断出我们的目标。将这个目标与演示结合起来可以恢复奖励功能。然后,收回的奖励鼓励代理人采取与专家试图实现的意图相似的行动。

恢复意图的好处是代理学习达到目标的最佳方式——它不会盲目模仿专家的次优行为或错误。因此,与专家策略相比,iRL 承诺了更理想的性能。

资源

反向 RL 知识库:Github 上的 air

关于反向 RL 的更多方法,请看这些作品:

[1] C. Finn、P. Christiano、P. Abbeel 和 S. Levine。生成对抗网络、逆向强化学习和基于能量的模型之间的联系,NIPS,2016。

[2] J. Fu,K. Luo,S. Levine,用对抗性逆强化学习学习鲁棒报酬,2018。

[3] X .彭,a .金泽,s .托耶,p .阿贝耳,s .莱文,变分鉴别器瓶颈:通过约束信息流改进模仿学习,逆 RL,和 GANs,,2019。

起点-终点流量和活动位置的推断

原文:https://towardsdatascience.com/inference-of-origin-destination-flows-and-activity-locations-81f56fbe7c45?source=collection_archive---------18-----------------------

利用呼叫详细记录来推断移动性模式的一些主要技术的文献综述

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

移动建模的一个关键部分是推断用户的行程。当我们谈论旅行时,我们谈论的是在起点和终点之间的旅行,最终以一项活动结束。Calabrese 等人[1]探索了观察数据的使用,以计算这些 OD(起点-终点)流量。Wang 等人[2]做了同样的工作,但是使用了交通方式选择的概率、车辆占用率和呼叫详细记录。Yang 等人[3]表明,通过生成算法,如贝叶斯网和马尔可夫随机场分类,可以以合理的精度检测活动位置,如家、工作、购物、休闲和其他地方。

融合 cdr 和来自交通传感器的数据,Charisma 等人[4]能够开发 OD 矩阵。不同位置的交通流量计数用于验证起点-终点预测。为了确定真实的始发地-目的地,有必要对瞬时 OD 矩阵进行缩放,以匹配实际交通流。本研究的中心假设/限制在于:它忽略了“不同地点通话速率的异质性(例如,与使用固定电话线路的办公室相比,来往于火车站的通话可能更多,等等)。)".Augusto 等人[5]使用非监督学习算法,尝试从用户的 cdr 推断用户的出行,然后从出行行为中描述人口的移动性(例如,通勤者的百分比是多少,或者他们中有多少人在离家很远的地方工作)。

赵等人[6]的研究引人入胜,因为它提出了一种监督学习技术来获得用户出行的更详细特征。这暗示了一个被那些试图描述用户旅行的起点和终点的人严重忽视的问题。我们正在讨论检测除了那些通过查看 cdr 可以看到的地方之外,是否还有未知的访问过的地方。其解决方案依赖于 CDRs、SMSs 和移动互联网接入之间的数据融合技术,以形成标记数据,这些数据将成为训练和测试分类器的基础。所使用的数据集包含了 2013 年 11 月中国某城市 300 万用户的记录。然而,只有 100,000 名用户被随机选中。随着他们进行数据融合,这个数字下降得更多。这是因为只对使用移动互联网接入并在一个月内至少拨打/接收一次电话/短信的用户感兴趣。

整篇论文评估了三种不同方法的性能:人工网络、支持向量机和逻辑回归。本文不仅有助于更深刻地理解如何从移动计费数据中更准确地提取出行,而且有助于解决使用 CDR 数据获取用户路线的一个众所周知的问题——时间稀疏性。在大多数情况下,用户不会在他访问的每个位置拨打或接听电话,因此从 cdr 中提取不现实和不完整行程的概率很高。因此,提出了一个框架,其方案如图 1 所示。

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

图 1 —赵等人[6]使用的框架的总体方案。这个人物是他们改编的。

在这种情况下,我们有四层,正如我们在上面的图像右侧看到的那样(网络传感器、用户位置、移动状态移动性)。第一层本质上是我们可以从 CDRs 获得的信息:被观察用户收到或发出呼叫的位置和时间。在一些本地化过程封装了子采样方法和位置不确定性和误差的处理之后,我们提出了用户存在,它是用户位置层的一部分。之后,是时候识别活动停止点了——也被作者命名为观察到的访问。每次两个连续的观察到的访问发生在不同的位置,我们就有一个位移。这两个元素的识别是通过一个运动状态识别来完成的,它把我们弹射到运动状态层。最后,本文更大的贡献——考察是否在每一次置换中我们都有一次隐藏的访问。这是通过前面提到的机器学习算法进行的,并构成了隐藏访问推理过程。一旦我们得到了未知站点和观测站点,我们就形成了 OD 出行,组成了我们的移动层

隐藏访问推理视为二元分类。对于位置 A 和 B 之间的每个位移:A)有一个隐藏的访问过的地方,或者 B)没有隐藏的访问过的地方。并非所有观察到的访问都进行了分析,而只是位移,这构成了本研究的局限性。这是一个限制,因为作者假设用户在两个(和相同的)观察到的访问站点之间的时间内不能访问任何不同的地方。因此,基本思想是使用 cdr 和 SMS 记录来提取特征,而来自移动互联网接入的数据被用作标签,作为地面真实数据。图 2 描绘了同一用户在一段时间内所做的位移序列,但是通过同一时间不同类型的数据(来自 cdr 和移动互联网访问)来观察。正如我们所看到的,有两种类型的用户转移需要更深入的分析。在情况 1 中,当通过 CDR 数据看到用户从 C 移动到 D 时,我们注意到移动互联网访问数据(MIAD)封装了隐藏的访问位置(W)。然而,在情况 2 中,尽管 MIAD 现有两个额外的记录,这些记录给出了流离失所目的地的同一地点(F)。因此,在这种情况下,不会显示额外的访问位置。

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

图 2 —两个不同数据源在相同时间窗内访问过的地点。该图改编自赵等人的工作[6]。

在此,从 cdr 中提取和选择几个特征:位移的空间特征、时间特征和用户的个人特征(例如,语音呼叫的数量或活动呼叫小时的数量)。测试了四种方法:一个简单的规则,假设没有隐藏的访问过的地方;逻辑回归;SVM(支持向量机)和人工神经网络(人工神经网络)。所有三个分类器都可以将 OD 旅行的正确分类提高 10%左右,无论是否隐藏了访问过的地点(与原始规则相比)。通过使用人工神经网络,有可能将该值增加到最大值 11.1%。

Bayir 等人[7]的研究是试图检测 OD 旅行中隐藏访问的极少数研究中的另一个。然而,他们试图施加时间约束或阈值。例如,如果两个不同的观察位置之间经过的时间高于某个阈值(例如 10 分钟或 1 小时),则假设在这两个不同的观察位置之间存在未知的访问位置。事实上,这是一个非常幼稚的解决问题的方法,因为我们最终会得到过多的与现实不符的旅游景点。原因是我们假设用户每隔 x 分钟(其中 x 是我们的阈值)强制性地访问至少一些新站点。因此,理论上,统计学习方法可以超越我们在这种情况下可以使用的任何启发式方法的效率。

在这个问题上,另一个值得注意的研究工作来自 Demissie 等人[8]。这项研究假装也使用 cdr 来估计用户从塞内加尔出发的旅行的起点和目的地。通勤和其他不规则的行程是推断出来的。将塞内加尔作为案例研究的国家很有吸引力,因为它提供了一个机会来展示交通基础设施薄弱的国家如何利用移动运营商的数据来推断移动行为,从而改善交通基础设施。为了辨别像工作场所和家庭这样的重要场所,他们分别检查了在以前定义的工作时间(从早上 8 点到晚上 7 点)和非工作时间(从晚上 7 点到早上 8 点)(总是在工作日)有呼叫活动的位置。

尽管前景看好,这项研究还是有一些局限性。为了逃避处理隐藏的访问地点,推断的地点是在地区一级。因此,没有提供对应于家庭或工作场所的蜂窝塔的精确位置。除了这种不方便,这只是推断跨地区的通勤位移;没有获得详细的通勤路线。此外,数据可以具有更大的时间窗口。虽然 cdr 涉及适当数量的用户(900 万)和记录(4300 万),但只分析了 2013 年 1 月的 cdr。

Jundee 等人[9]的论文也是值得注意的。一旦它提出两种不同的技术来推断通勤旅行中的确切路线(家到工作场所和工作场所到家),它就是创新的。为了正确检测这些通勤位置,进行了二次采样,因此“每个用户在早上通勤时间(上午 7 点-11 点)必须至少有 100 个连接,在晚上通勤时间(下午 3 点-7 点)必须有 100 个连接。”作者使用谷歌地图 API 来推断可能的通勤路线。利用之前估计的工作场所和家庭位置,他们让谷歌地图平台生成它认为每个用户最有可能的通勤方向。从这里开始,只需要应用一个方法,使我们能够在 API 建议的选项中选择正确的路线。现在正是需要前面提到的两种技术的时候。第一种是最小距离法。因此,假设我们正在计算从家到工作场所的确切路线,然后我们继续寻找在早晨激活的呼叫和各自的基站。其次,我们必须计算每条路线的 google API 给出的每个航路点与激活的每个基站之间的欧几里德距离。之后,我们对每个航点和每个基站获得的所有欧几里德距离求和,并除以航点的数量。之后,我们应该对 Google Maps API 建议的所有路线重复这个过程。最后,我们选择具有先前计算的和的较小值的路径。

在这一过程中,必须解决一个重要问题。API 给出的路点沿路线的距离并不相等,并且路径的路点数量可能不同。实际上,这意味着,例如,我们将拥有不同的点密度,这将导致计算不同数量的距离,从而扭曲结果。图 3 说明了这个问题。这表明我们试图计算航路点和基站之间的距离,因此,在路线的弯曲部分有更密集的红色区域。首先,添加一个网格并将其用作插值和外推航路点的参考。这个网格允许它们之间的空间标准化。对于每个路点,我们创建一个新的数据点,它将是单元网格的质心。图 4 举例说明了这个过程。

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

图 3——最小距离方法的直观表示。红线代表每个航路点和基站之间的欧几里德距离。每个红色圆圈代表检测到呼叫活动的基站。该图最初来自 Jundee 等人[9]。

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

图 4 —航路点插值和相应网格的可视化。该图最初来自 Jundee 等人[9]。

作者提出的第二种替代方法是最大重叠的方法。调用 Google Maps API 和插入给定点的步骤仍然存在。然而,我们不需要计算欧几里得距离,而是需要查看在路线中有多少个点落入基站覆盖区域。从图 5 中可以看出,具有更多点的路线是被选择的路线。

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

图 5-最大重叠方法。在绿色部分,我们有一个基站,可以检测到呼叫活动。该图最初来自 Jundee 等人[9]。

尽管这两种技术很有前途并且令人耳目一新,但是它们没有考虑每个基站位置的用户的呼叫频率。令人感兴趣的是,对活动较少的位置给予较低的重要性,而对那些呼叫活动被更定期地登记的位置给予较高的权重。

参考

[1] F. Calabrese 和 G. Di Lorenzo,“使用移动电话定位数据估计起点-终点流量”,第 36–44 页,2011 年。

[2] U. Areas,“了解城市地区的道路使用模式”,2012 年。

[3] Y. Yang,P. Widhalm 和 M. C. Gonz,“使用稀疏手机数据提取和标记移动性序列”,第一期,第 4276-4277 页。

[4] F. Charisma 和 M. C. Development,“利用移动电话通话数据开发起点-终点矩阵”麻省理工学院的教员公开发表了这篇文章。请分享引用访问 Citable 链接详细条款基于模拟的方法,“2018。

[5] G .奥古斯托,“工作之旅:使用 CDR 估计海地主要大都市地区通勤模式的起点和终点”, Dev .英语。,第 3 卷,2017 年 10 月号,2018 年第 133–166 页。

[6] Z. Zhao,J. Zhao,H. Koutsopoulos,“基于监督统计学习的使用详细记录数据的个人级出行检测”,2016 年。

[7] M. Bayir、M. Demirbas 和 N. Eagle,“移动性分析器:发现移动用户配置文件的框架”,2014 年 3 月号。

[8] M. G. Demissie、F. Antunes 和 C. Bento,“利用移动电话数据推断始发-目的地流量:塞内加尔案例研究”,2016 年 7 月号。

[9] T. Jundee,“使用 CDR 数据推断通勤流量:葡萄牙里斯本的案例研究”,2018 年。

来自 TF Lite 模型的推论——基于预训练模型的迁移学习

原文:https://towardsdatascience.com/inferences-from-a-tf-lite-model-transfer-learning-on-a-pre-trained-model-e16e7c5f0ee6?source=collection_archive---------28-----------------------

在预先训练的 Tensorflow 模型上使用迁移学习创建一个 Tf Lite 模型,优化它,并运行推理。

在本文中,您将学习使用预先训练的模型,应用迁移学习,将模型转换为 TFLite,应用优化,并从 TF Lite 模型中进行推理。

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

路易·里德Unsplash 上拍摄

先决条件:

tensor flow Lite 的基本介绍

猫狗数据集

张量流 2.0

创建数据集

我已经下载了数据集,并按照下面的结构解压文件。

用于提取数据并按照以下结构创建数据的 Python 代码在此处可用

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

导入所需的库

**from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Conv2D, Flatten, Dropout, MaxPooling2D
from tensorflow.keras.preprocessing.image import ImageDataGenerator, img_to_array, load_img
from tensorflow.python.keras.applications import imagenet_utils
from tensorflow.python.keras.layers import Dense,GlobalAveragePooling2D
from tensorflow.keras.applications import   DenseNet121
from tensorflow.python.keras.applications.densenet import preprocess_input
from tensorflow.keras.models import Model**

设置培训的关键参数

**BASE_PATH = 'Data\\dogs-vs-cats\\train\\'
TRAIN_PATH='Data\\dogs-vs-cats\\train_data\\'
VAL_PATH='Data\\dogs-vs-cats\\validation_data\\'****batch_size = 32 
epochs = 60
IMG_HEIGHT = 150
IMG_WIDTH = 150**

重新缩放并对训练图像应用不同的增强

**train_image_generator = ImageDataGenerator(                                                rescale=1./255,                                              rotation_range=45,                                                width_shift_range=.15,                                                height_shift_range=.15,                                                horizontal_flip=True,                                                zoom_range=0.3)**

重标验证数据

**validation_image_generator = ImageDataGenerator(rescale=1./255)**

为训练和验证数据集生成批量归一化数据

**train_data_gen = train_image_generator.flow_from_directory(batch_size = batch_size,                                                     directory=TRAIN_PATH,                                                     shuffle=True,                                                     target_size=(IMG_HEIGHT, IMG_WIDTH),                                                     class_mode='categorical')****val_data_gen = validation_image_generator.flow_from_directory(batch_size = batch_size,                                                              directory=VAL_PATH,                                                              target_size=(IMG_HEIGHT, IMG_WIDTH),                                                              class_mode='categorical')**

在预先训练的模型上应用迁移学习

您可以使用任何一种预训练型号。我用过 DenseNet121,有 427 层。

# Create the base model from the pre-trained model MobileNet V2
**base_model = tf.keras.applications.DenseNet121(
input_shape=(IMG_WIDTH, IMG_HEIGHT,3),                                               include_top=False,                                               weights='imagenet')**

冻结基础预训练模型的所有权重,并在预训练模型的顶部添加几个层

**base_model.trainable = False
x=base_model.output
x=Flatten()(x)
x=Dense(512,activation='relu')(x) 
output=Dense(2,activation='softmax')(x) 
model=Model(inputs=base_model.input,outputs=output)
model.summary()**

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

您可以看到预训练模型的权重是不可训练的,只有添加的层权重是可训练的。

您可以使预训练模型权重的几个层成为可训练的,以帮助学习自定义数据集,从而获得更高的准确性。

**TRAINABLE_LAYERS= len(model.layers)-len(base_model.layers)+5
print(TRAINABLE_LAYERS)
for layer in model.layers[:-TRAINABLE_LAYERS]:
    layer.trainable=False
for layer in model.layers[-TRAINABLE_LAYERS:]:
    layer.trainable=True**

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

您可以看到可训练参数的数量增加了,这也将增加训练时间。

在自定义数据集上编译和训练模型

**model.compile(loss='categorical_crossentropy', optimizer=tf.keras.optimizers.RMSprop(lr=2e-5), metrics=['acc'])****epochs=20
step_size_train=train_data_gen.n//train_data_gen.batch_size
history =model.fit_generator(generator=train_data_gen,
                   steps_per_epoch=step_size_train,
                   epochs=epochs)**

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

在模型被编译和训练之后,我们现在可以开始将模型转换为 TF Lite,如下所示。

将预训练的转移学习模型转换为 TF Lite

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

来源:https://www.tensorflow.org/lite/convert/index

训练完模型后,您现在需要保存模型。

保存的模型将模型的架构、权重和偏差以及训练配置序列化到一个文件中。保存的模型可以很容易地用于共享或部署模型。

#save your model in the SavedModel format
**export_dir = 'saved_model'
tf.saved_model.save(model, export_dir)**

SavedModel 包含一个完整的 TensorFlow 程序,包括权重和计算。

saved_model 是保存在 export_dir, 上的元图,使用 lite 转换为 TFLite 模型。TFLiteConverter

# Converting a SavedModel to a TensorFlow Lite model.
**converter = tf.lite.TFLiteConverter.from_saved_model(export_dir)
tflite_model = converter.convert()**

将平面缓冲区 TFLIte 模型写入二进制文件,当前大小为 61 MB。

open("model_tl.tflite", "wb").write(tflite_model)

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

优化模型

边缘模型需要是轻量级的,并且具有低延迟来运行推理。轻量级和低延迟模型是通过减少预测所需的计算量来实现的,这是通过对 TF Lite 模型应用量化优化来实现的。

量化降低了用于表示张量流模型不同参数的数字的精度,以使模型轻量化。

量化应用于权重和激活。

**optimize="Speed"
if optimize=='Speed':
    converter.optimizations = [tf.lite.Optimize.OPTIMIZE_FOR_LATENCY]
elif optimize=='Storage':
     converter.optimizations = [tf.lite.Optimize.OPTIMIZE_FOR_SIZE]
else:    
    converter.optimizations = [tf.lite.Optimize.DEFAULT]**#reduce the size of a floating point model by quantizing the weights to float16
**converter.target_spec.supported_types = [tf.float16]
tflite_quant_model = converter.convert()**#save the quanitized model toa binary file
**open("model_quant_tl.tflite", "wb").write(tflite_quant_model)**

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

量化 TF Lite 模型的大小

这里,我们针对速度优化了模型,然后将 32 位浮点转换为 16 位浮点,以减小模型的大小。

在应用优化后,TF Lite 型号的 61 MB 现在减少到 30MB。

优化后的模型可以部署到任何我们需要的边缘设备TF lite _ runtime . interpreter

在边缘运行推论

用优化的加载解释器。包含模型的执行图和分配张量的 tflite 模型

**import tflite_runtime.interpreter as tflite**
# Load TFLite model and allocate tensors.
**interpreter = tf.lite.Interpreter(model_content=tflite_quant_model)**#allocate the tensors **interpreter.allocate_tensors()**

得到输入和输出张量。

#get input and output tensors
**input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()**

对输入数据进行预处理

我们想要进行推断的输入图像需要与模型的输入数据相匹配。

读取图像,解码为张量并将图像预处理为所需的大小,转换为 float16 并添加批量维度

**import cv2**# Read the image and decode to a tensor
**image_path='Data\\dogs-vs-cats\\test1\\151.jpg' 
img = cv2.imread(image_path)
img = cv2.resize(img,(IMG_WIDTH,IMG_HEIGHT))**#Preprocess the image to required size and cast
**input_shape = input_details[0]['shape']
input_tensor= np.array(np.expand_dims(img,0), dtype=np.float16)**

下面是我们试图预测的图像

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

狗对猫\test1\151.jpg

运行推论

通过设置张量将输入数据指向第 0 个数组以输入张量。通过调用解释器来运行推理

*#set the tensor to point to the input data to be inferred*
**input_index = interpreter.get_input_details()[0]["index"]
interpreter.set_tensor(input_index, input_tensor)***#Run the inference*
**interpreter.invoke()
output_details = interpreter.get_output_details()**

为我们的图像分类解释输出张量

**output_data = interpreter.get_tensor(output_details[0]['index'])
results = np.squeeze(output_data)
top_k = results.argsort()****for label, idx in train_data_gen.class_indices.items():  
    if top_k[idx]==1:
        print("Prediction: " label)**

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

输出是狗。

TF Lite 推论的 Github 代码

结论:

对预训练模型使用自定义或预训练或应用迁移学习,保存模型,将模型转换为 TFLite 平面缓冲文件,针对延迟或存储进行优化,然后使用 TF Lite 解释器进行推理。

推断统计学:数据分析

原文:https://towardsdatascience.com/inferential-statistics-data-analysis-e59adc75c6eb?source=collection_archive---------7-----------------------

统计学是数据科学中的基本主题之一,它提供了更深入了解数据的工具和方法。

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

图片由皮克斯拜的 Gerd Altmann 提供

数据科学家必须对统计学有更深入的理解,才能对给定的数据进行定量分析。尤其是构建机器学习算法,统计学发挥了重大作用。统计数据主要有两种类型。

  • 描述统计学
  • 推理统计学。

在之前的文章 探索性数据分析 中,“我们所做的所有分析,都是描述性统计。使用描述性统计,我们只是描述数据中存在或显示的内容。我们已经了解了如何使用各种方法和可视化技术来发现给定数据中的模式。

通过推理统计,我们试图得出超越数据的结论。有时,我们必须处理大量数据进行分析,这可能会花费太多的时间和资源。在这些情况下,我们使用推断统计。

推理统计:

推断统计学通过考虑原始数据中的样本数据,对大量数据进行推断和预测。它使用概率来得出结论。

从样本数据中“推断出见解的过程称为“推断统计学

推理统计学”的最佳现实例子是,通过天气预报预测下个月的降雨量。

为了理解推断统计,我们必须对概率中的以下基本主题有基本的了解。

  • 概率的基本定义
  • 概率的乘法法则
  • 概率的加法法则
  • nCr(组合)

我们可以在这里练习基本动作,

  1. 数学很有趣
  2. Mathopolis

随机变量:

让我们举一个赌场吃角子老虎机的真实例子。赌场如何确保他们的老虎机长期不赔钱?

这很简单。他们使用概率

为了理解这一点,我们来玩个游戏,

  1. 拿一个装有 3 个红色球2 个蓝色球的袋子。
  2. 游戏是这样的,我们必须从袋子里挑选一个球,记下它的颜色,然后把球放在袋子里,再从袋子里挑选一个球,记下它的颜色,然后把它放进去。重复此过程共 **4 次。**这整个过程是一套。
  3. 进行该实验 75 次,即 75 组
  4. 条件是,如果我们连续抽取红球四次,即集合包含所有红球,那么我们将获得$150。否则,我们将不得不向经销商支付 10 美元。

看看我们玩这个游戏,庄家长期是赢还是亏。为了理解这一切,我们将分三步来解决这个问题。

  • 找出所有可能的结果。
  • 求每个结果的概率。
  • 使用概率,估计利润/损失。

1。可能的结果

让我们看看,如果我们从袋子里抽出一个球四次,我们能得到的所有可能的结果是。

  • RRRR
  • RBRR,RRBR,RRRB
  • BBRR、BRBR、巴西、RBBR、巴西、RRBB
  • BBBR,BBRB,BRBB,RBBB
  • 双侧束支传导阻滞

总共有 16 种可能的结果。

2。每种结果的概率

明智的做法是量化结果,计算概率。通过使用**“随机变量”,**我们将量化结果。

随机变量:

  • **“X”**表示随机变量。
  • “X”的定义取决于我们的问题陈述。这里,我们感兴趣的是从袋子中抽出的红球的数量。

X =抽取的红球数量。

用 X 表示的可能结果是,

  • RRRR——X = 4
  • RBRR,RRBR,RRRB–X = 3
  • BBRR、BRBR、巴西、RBBR、巴西、RRBB–X = 2
  • BBBR,BBRB,BRBB,RBBB–X = 1
  • BBBB——X = 0

因此,基于 X 值,我们可以说,如果 X=4,玩家赢得游戏,而对于剩余的所有 X 值,玩家输掉游戏。

在进行了 75 次实验后,将值存储在 excel 中,让我们将结果绘制成柱状图,我们会得到类似这样的图表,

这些值看起来像这样,

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

现在,表格的直方图看起来像这样,

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

概率的定义是

概率§ =(有利结果)/(结果总数)

现在,让我们根据上图找出不同 X 值的概率。

P(X = 0)= 2/75 = 0.027
P(X = 1)= 12/75 = 0.160
P(X = 2)= 26/75 = 0.347
P(X = 3)= 25/75 = 0.333
P(X = 4)= 10/75 = 0.133

如果我们用表格来表示它们,它看起来像这样

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

概率分布

这张表被称为概率分布。

3。使用概率,估计利润/损失

既然我们现在知道了 X=0 到 4 的概率,让我们来计算一个玩家在一场游戏中抽取的红球总数。

0 红球玩家数= P(X = 0)* 75 = 2.025
1 红球玩家数= P(X = 1)* 75 = 12
2 红球玩家数= P(X = 2)* 75 = 26.025
3 红球玩家数= P(X = 3)* 75 = 24.975
4 红球玩家数= P(X=4)*75 = 9

于是,我们大概看到了游戏中 75 位玩家抽出的 178.875 个红球

红球平均数= 178.875/75 = 2.385。

换句话说,我们可以期待一个玩家每局抽 2.385 个红球。该平均值称为预期值

从数学上讲,对于一个随机变量 X,它可以取值 x1,x2,x3,………,xn,期望值(EV)由下式给出:

EV(X)= x1∫P(X = x1)+x2∫P(X = x2)+x3∫P(X = x3)+…………+xn∫P(X = xn)

对于我们的游戏,n=4,

EV = 1 * 0.16+2 * 0.347+3 * 0.333+4 * 0.133 = 2.385。

如果我们还记得的话,在我们的游戏中,如果 X=4 ,玩家将获得150 美元,而对于剩余的所有 X** 值,玩家需要支付10 美元。**

现在,玩家得到 150 美元的概率等于玩家抽到四个红球的概率。

这意味着,对于剩余的所有情况,玩家必须支付 10 美元。

所以,X 可以取+150 和-10 的值

P(X=+150) = P(4 个红球)= 0.133
P(X=-10) = P(0、1、2 或 3 个红球)= 0.027+0.160+0.347+0.333 = 0.867

现在,X 的期望值(其中 X 是玩一次游戏后赢得的钱)

EV(X)= 150 * 0.133+(-10)* 0.867 =+11.28

这意味着,从长远来看,玩家平均可以从这场游戏中赢得+11.28,这对玩家来说非常好,但这种模式对游戏组织者来说是行不通的,因为他们正在赔钱。

如果赌场想要赚钱,他们需要确保玩家的期望值为负**。为此,组织者不得不改变奖金,比如获胜的玩家可以获得100 美元的奖金,如果玩家输了,可以获得25 美元**的奖金。

现在,EV(X)= 100 * 0.133+(-25)* 0.867 =-8.375

从长远来看,这种模式对赌场是有利可图的。

到目前为止,我们已经看到了如何通过实验来计算概率。在下一节中,我们将看到如何在没有实验的情况下计算概率。

从理论上计算概率

如果我们回忆一下问题陈述,袋子里有 3 个红球2 个蓝球。

得到 1 个红球的概率=(红球总数)/(球总数)= 3/5 = 0.6

同样的,

得到 1 个蓝球的概率= 2/5 = 0.4

计算一局抽中红球的概率,即,

对于 X=0,P(4 蓝)= 0.40.40.4*0.4 = 0.0256

对于 X=1,P(1 红 3 蓝)= 0.60.40.40.4,但是对于 1 红 3 蓝有 4 种组合,
最后,对于 X=1,P(X) = 4(0.6
0.40.40.4) = 0.1536

对于 X=2,P(X)= 6(0.6 * 0.6 * 0.4 * 0.4)= 0.3456
对于 X=3,P(X)= 4(0.6 * 0.6 * 0.6 * 0.4)= 0.3456
对于 X=4,P(X) = 0.60.60.6*0.6 = 0.1296

让我们看看实验和理论概率分布的直方图是什么样的,

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

作者图片

正如我们所看到的,概率的理论(计算)值与实验值相对接近。存在微小的差异是因为进行的实验数量很少。

二项式概率分布:P(X=r)

现在,让我们试着把上面的问题再推广一些。假设从袋子里抽出一个红色球的概率= P。现在,从袋子里抽出一个蓝色球的概率= 1-P。

现在,概率分布将会是,

对于 X=0,P(4 蓝)= (1-P)⁴
对于 X=1,P(1 红 3 蓝)= 4P(1-P)
对于 X=2,P(2 红 2 蓝)= 6*P (1-P)
对于 X=3,P(3 红 1 蓝)= 4
P *(1-P)
对于 X=4,P(4 红)= P⁴

如果我们仔细观察上述概率值,我们可以观察到某种类型的公式,

公式看起来像这样,

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

二项式概率公式

这里,

n =总试验次数
p =成功概率
r = n 次试验后的命中次数

但是,我们应该使用二项分布,只有当它遵循这三个条件。

  1. 这个问题应该有固定的试验次数。
  2. 每次试验应该只有两种结果——要么成功,要么失败。
  3. 在所有的试验中,成功的概率应该是相同的。

这种二项式概率分布是离散随机变量中非常常见的一种概率分布。

累积概率:F(x)

X 的累积概率用 F(x)表示。定义为一个变量小于或等于 x 的概率

F(x) = P(X≤x)

所以,对于我们游戏的理论概率分布,如果我们计算 F(3),它将是,

F(3)= P(X≤3)= P(X = 0)+P(X = 1)+P(X = 2)+P(X = 3)= 0.8704

累积概率在连续概率分布中更有帮助。

连续概率分布

到目前为止,我们已经看到了概率在离散随机变量中的作用。现在,让我们看看连续随机变量中的概率函数。

如果一个随机变量可以从一个数据中取无限个值,则称为连续随机变量

例如,一个衡量雇员通勤时间的随机变量是连续的,因为有无限多的可能性可以发生。

由于时间是一个连续变量,随机变量取一个精确值的概率为 0。所以,为了计算概率,我们不取特定的值,而是取区间值。

假设我们必须计算员工每天通勤到办公室所花时间的概率,我们已经进行了一项调查,并有如下所示的概率值。

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

有了上面的概率值,我们现在可以找到如下的累积概率值:

x = 30 的累积概率为,
F(30)= P(X≤30)= P(0<X<20)+P(20<X<25)+P(25<X<30)
F(30)= 0+0.15+0.20 = 0.35

所以,给定概率值的累积概率看起来像,

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

如果我们在一个图表中绘制这个累积值,它被称为累积分布函数(CDF) 图表使用下面的 python 代码,

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

在 CDF 图表中有两点需要记住。

  1. 这些是单调非减函数。
  2. Y 轴上的最大值应该总是 1。

我们也可以用区间来绘制概率图。

这是概率密度图的样子,

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

来源— 维基百科

我们可以从上图中观察到,概率区间下的面积等于该区间的累积概率

如果在一个连续的随机变量中,所有概率密度的值对于所有可能的值都相等,则称为均匀分布。

此外,在现实生活中,pdf 是最常用的,因为它比 CDF 更容易看到 pdf 的模式。

正态分布

最常用的一种 PDF 是正态分布/钟形曲线/高斯分布。

正态分布图是这样的,

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

作者图片

正如形状所示,大多数值通常位于该分布的中心附近。分布也将围绕中间对称。正态分布通常出现在自然发生的现象中。

正态分布也有助于理解数据分析的一些高级概念,如中心极限定理(CLT) 。我们将在下一篇文章中了解 CLT。

让我们详细研究一下正态分布。

  1. 分布在中间对称,称为均值(μ)。
  2. 在正态分布中,平均值、中值和众数是相等的。这意味着分布在中位数和众数上也是对称的。

正态分布有一个1–2–3 规则,遵循以下三个条件:

  1. 值在“ μ-σ ”和“ μ+σ ”之间的概率在 68%左右。
  2. 值在“ μ-2σ ”和“ μ+2σ ”之间的概率在 95%左右。
  3. 值在“ μ-3σ ”和“ μ+3σ ”之间的概率约为 99.7%。

这里**【μ】的平均值,****【σ】的标准差。**

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

来源— 维基百科

这意味着分布的尾部非常小。在正态分布曲线中,大多数值位于“ μ-3σ 和“ μ+3σ 之间。

举个例子,如果 **μ = 30,**和 **σ = 5,**取值在 25 和 45 之间的概率将是,

P(25

Now, the probability for the same values between 25 and 50 will be,

P(25

We know that from 1–2–3 Rule, the values are evenly distributed at Mean(μ), i.e., 50%的值≤ μ50%的值为> μ。

这意味着,如果 P(μ-3σ < X < μ+3σ) = 99.7%, then P(X

Finally,

P(25

This is how we calculate, the probability values if the distribution follows Normal Curve.

Standard Normal Distribution

As we have seen, it does not matter what the values of μσ 为,我们感兴趣的是 X 距离均值(μ)的标准差(σ)有多远。

比方说, **μ = 30,**和 **σ = 5,**和 X=43.25。

我们可以说 X 距离μ8.25 个单位,即,

用标准差来说,我们可以说 X 距离均值1.65σ(μ)。

这个 1.65 的值叫做我们的随机变量的Z——得分。Z 得分可通过以下方式计算:

Z = (X-μ)/σ

这个变量 Z 称为标准化正态变量

所以,现在关于 Z 的 1–2–3 规则是,

  1. P(-1
  2. P(-2
  3. P(-3

The Standard Normal Distribution(Z) graph looks like this,

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

Source —维基百科

正如我们所见,标准化正态变量( Z )是一个比正态分布变量(X)更能提供信息的变量。

我们可以从这个表中找到 Z 的所有概率值这里

Z 评分表的样本是这样的,

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

来源— Z 工作台

我们来举个例子;我们想求正态分布中随机变量在 1.65 个标准差以内的概率?

也就是说,我们要求 P 的值(μ-1.65σ < X < μ+1.65σ).

In terms of Z, we need to find the value,

P(-1.65

If we look into the table, w can find the values of,

P(Z=1.65) = 0.9505
P(Z=-1.65) = 0.0495

现在,概率= 0.901 = 90%

因此,大约 90%的值位于 1.65 个标准偏差之间。

这就是我们如何从表中计算 Z 值,并找出概率。

结论

这些是推断统计学中的主题,每个数据科学家都应该具备基本的知识。使用这个正态分布和标准正态分布概念,我们将了解更多关于数据科学中广泛使用的中心极限定理假设检验

感谢您阅读快乐编码!!!

在这里查看我以前关于 Python 的文章

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值