将机器学习模型部署到生产中的挑战
MLOps:用于机器学习的 DevOps
目录
机器学习(ML) 世界的一个众所周知的事实是,将 ML 模型部署到生产中比开发它需要更长的时间。根据著名论文“机器学习系统中隐藏的技术债务”:
“只有一小部分真实世界的 ML 系统由 ML 代码组成,如中间的小黑框所示(见下图)。所需的周边基础设施庞大而复杂。”
图表#1: 摘自论文 机器学习系统中隐藏的技术债务
传统软件开发与机器学习
如果你把传统的软件开发和机器学习放在一起考虑,你可以在下面的图 2 中清楚地看到后者的分歧。即使是这样,传统软件开发的大多数原则和实践都可以应用于机器学习,但是有一些独特的 ML 特定挑战需要以不同的方式处理。在本文中,我们将讨论那些使 ML 模型难以部署到生产中的独特挑战。
图表#2: 传统软件开发 vs 机器学习
机器学习工作流
典型的 ML 工作流程包括数据管理、实验和生产部署,如下图所示。
图 3: 机器学习工作流程
我们将了解下面的每个阶段,以及团队在每个阶段面临的特定挑战。
阶段#1:数据管理
训练数据是决定模型性能的基本因素之一。这一阶段通常包括数据采集和准备。使用 ML 数据时,您需要注意以下挑战:
**大数据量:**模型在训练过程中通常需要大数据集,以提高其对实时数据进行预测的准确性。数据集可能高达数百千兆字节,甚至更大。这带来了一些独特的挑战,如移动数据不容易,数据传输通常成本高昂且耗时。
高质量数据:如果数据质量不好,拥有一个大的数据集是没有用的。找到高质量的正确数据对于模型的准确性非常重要。从正确的来源获取数据并进行足够的验证以确保高质量有助于解决问题。确保你的模型没有基于种族、性别、年龄、收入群体等方面的偏见。也很关键。为此,你需要确保你的数据有模型偏差和公平性验证。
**数据集跟踪:**复制模型的训练方式对数据科学家很有帮助。为此,需要对每次训练运行中使用的数据集进行版本控制和跟踪。这也让数据科学家能够灵活地回到数据集的先前版本并对其进行分析。
**位置:**根据使用情况,这些数据集位于不同的位置,如上所述,它们可能会更大。由于这些原因,在更接近数据位置的地方运行训练和某些情况下的预测可能是有意义的,而不是跨位置传输大型数据集。
注意:确保这是值得努力的。如果你能在不增加复杂性的情况下进行管理,并集中运行,我会推荐你这样做。
**安全性&合规性:**在某些情况下,所使用的数据可能是敏感的,或者需要满足某些合规性标准(如 HIPAA、PCI 或 GDPR)。当你支持 ML 系统时,你需要记住这一点。
第二阶段:实验
这一阶段包括模型开发,数据科学家将大量时间用于研究各种架构,以了解哪些架构符合他们的需求。例如,对于语义分割,这里有各种可用的架构。数据科学家编写代码来使用前一阶段的数据,并使用这些数据来训练模型,然后进行评估,以查看它是否符合他们所寻求的准确性标准。请参见下面您将在此阶段面临的一些挑战。
**持续的研究和实验工作流程:**他们花时间收集/生成数据,进行实验,尝试各种架构,看看什么适合他们的用例。他们还尝试超参数优化和用各种数据集进行训练,看看什么能给出更准确的结果。
由于其研究和实验性质,需要支持的工作流不同于传统的软件开发。
**跟踪实验:**该工作流程的一个关键方面是允许数据科学家跟踪实验,并了解各次运行之间发生了什么变化。他们应该能够轻松地跟踪不同实验之间的数据集、架构、代码和超参数变化。
**代码质量:**由于研究和实验阶段的原因,许多编写的代码通常质量不高,不能用于生产。数据科学家花费大量时间使用像 Jupyter Notebook 这样的工具,并在那里直接进行修改以进行测试。您需要记住这一点,并在将 ML 模型部署到生产之前处理它。
训练时间&故障排除:训练一个模型通常需要几个小时甚至几天的运行时间,并且需要特殊的基础设施(参见下面的挑战 4)。例如,根据他们的网站,一个完整的特斯拉自动驾驶神经网络需要 70,000 个 GPU 小时来训练。由于培训通常需要大量时间,您需要能够在培训过程中使用监控、日志记录、警报和验证等方面来支持简单的故障排除。如果培训过程出错,提供简单的方法来解决问题,并继续/重新开始培训非常重要。
**模型精度评估:**训练完成后,需要对模型精度进行评估,看是否满足生产中预测所需的标准。如上面的图 3 所示,您通过训练/数据管理步骤不断提高准确度,直到达到可接受的数字。
**再培训:**当您遇到数据漂移,生产中的错误,或者需求变更时,您可能需要对模型进行再培训。需要有一种方法来支持再培训模型。
基础架构需求: ML 工作负载有某些特殊的基础架构需求,如GPU&高密度内核。数千个处理核心在一个 GPU 中同时运行,这使得训练和预测的运行速度比仅使用 CPU 要快得多。由于这些基础设施需求(尤其是 GPU)成本高昂,并且大多是周期性突发培训所需,因此支持弹性和自动化扩展以及供应/取消供应基础设施(尤其是在使用云时)是一个好主意。
如今,像 Nvidia Jetson 系列这样的边缘设备(物联网、移动设备等)越来越多地被使用,部署到这些设备是另一个挑战,因为这些设备大多使用 ARM 架构,而不是资源有限的 x86 。需要在这些设备上测试模型的准确性和性能。
由于缺乏对 ARM 架构的某些依赖项及其最新版本的支持,围绕构建包/模型的良好实践会有所帮助。
阶段#3:生产部署
在模型经过训练并达到一定的准确性后,它将被部署到生产中,开始根据实时数据进行预测。以下是此阶段需要注意的一些挑战。
**离线/在线预测:**根据模型及其在生产中使用实时数据的方式,您可能需要支持离线(批量)预测或在线(实时)预测。您需要一个合适的框架来为基于类型(批处理或实时)的模型提供服务。如果是批处理预测,请确保您可以适当地实时调度批处理作业,您需要担心处理时间,因为结果通常需要同步返回。
**模型退化:**由于数据漂移、环境变化等各种因素,模型在生产中退化(即预测变得不准确)。久而久之。让团队能够随时获得解决问题所需的信息是很重要的,这样他们才能采取行动。
结论
DevOps 原则和实践包括所有三个方面(人员、流程和技术),已被有效地用于缓解传统软件的挑战。这些相同的 DevOps 原则和实践以及一些机器学习特定实践可以用于成功部署和操作 ML 系统。这些人工智能原则和实践也被称为机器学习的 MLOps 或devo PS。我将撰写后续文章,探讨那些有助于克服本文中提到的挑战的原则和实践。
鸣谢: Priyanka Rao 和 Bobby Wagner 阅读了本文的草稿版本,并提供了反馈来改进它。
同时发布在 我的网站 。
自然语言处理(NLP)中开发多语言语言模型的挑战
意见
图片来自 Lexalytics
为企业客户和品牌开发 NLP 解决方案的一个标志是,这些客户通常服务于语言不同的消费者。虽然我们的大多数客户都在运营以英语为主要消费群的 VoC(客户之声)、社交倾听和市场研究项目,但我们确实有一些客户服务于 20 多种语言的消费者,而且许多客户在北欧国家、拉丁美洲和亚太地区有大量业务,更不用说欧洲的其他地区了。
其他语言的 NLP 面临的挑战是英语是互联网的语言,说英语的用户比下一个最流行的语言普通话多近 3 亿。现代的 NLP 需要大量的文本— 16GB 到 160GB,具体取决于所讨论的算法(800 万到 8000 万页的打印文本)—由许多不同的作者在许多不同的领域编写。然后需要收集、清理这些不同的文本,并将其放入数据科学家可以访问的广泛可用的、适当注释的语料库中。最后,至少有一个由深度学习专业人士或爱好者组成的小型社区必须执行这项工作,并提供这些工具。拥有更大、更干净、更容易获得的资源的语言将会看到更高质量的人工智能系统,这将在未来产生真正的经济影响。
结果是一个语言支持的分层系统,如下所示:
- 尖端型号通常首先支持英语,有时支持普通话。
- 这些数据发布一段时间后,拥有许多数据科学家和语言学家的大国在本土复制了这些工作。这些国家包括德国、法国和俄罗斯。
- 对于接下来的大约 100 种最流行的语言,通常会生成单一的多语言模型,以便一次为整个集合生成 ok 结果
- 对于世界上的其他人来说:人工智能不理解它,这阻止了扬声器从这些新技术中受益。
NER 的准确性和情绪分析
业界解决多语言建模挑战的一种方法是将目标语言翻译成英语,然后执行各种 NLP 任务。如果你辛辛苦苦地用英语制作了一个情感语料库,很容易把所有东西都翻译成英语,而不是用其他语言重复这个任务。
然而,确定情感是翻译创造性过程的一部分。理解“五十步笑百步”是在表达否定,然后想出用另一种语言表达这一想法的相应方式,需要理解两种语言中的情感。我们也使用在其他语言中没有直接对应的文化速记和惯例。翻译一个单词通常有多种选择。西班牙语中的“pequeñ”是“little”吗?还是“微不足道”?还是“矮小”?或者甚至是“可爱”?
如果你的模型足够好,能够在翻译时捕捉到细微差别,那么它们也足够好,能够执行最初的任务。但更有可能的是,他们不能捕捉细微差别,你的翻译将不会反映原始文件的情绪。事实性的任务,比如回答问题,更适合翻译。需要更多细微差别的主题(预测模型、情感、情绪检测、总结)在外语中更容易失败。
多语言自然语言处理的未来
为了追求最高的准确性,非英语语言很少被训练。开源世界中一个有希望的解决方案是 Google 的 BERT,它提供了一种英语和一个适用于大约 100 种其他语言的“多语言模型”。人们现在为其他语言提供了经过训练的 BERT 模型,并看到了有意义的改进(例如,NER 的 F1 为 0.928 比 0.906)。然而,在我们自己的工作中,例如,我们已经看到通过 BERT 处理英文医学文本的效果明显好于日文。很可能在日文版的 BERT 中没有足够的关于特殊领域的内容,但是我们希望随着时间的推移会有所改善。
创建和维护自然语言特性是一项繁重的工作,而且必须在新的母语人士的帮助下一遍又一遍地重复这项工作,这是一项令人生畏的任务。专注于几门特别重要的语言,让它们为世界说话,这很有诱惑力。然而,世界并不是同质的。一家公司在各个国家可能会有特定的问题和机会,讲不太通用语言的人不太可能通过任何渠道听到他们的声音,而不仅仅是数字渠道。
因此,尽可能仔细地倾听他们所服务的每一种语言符合企业的利益,也符合大学、政府和公民科学家的利益,有助于创建文本语料库和模型,以促进他们的语言同胞在现在和未来获得尖端技术。
数据科学在人才和业务方面的挑战
商业管理视角
作者:@ adamantios . koumpis和@ kyrcha—2020 年 1 月
介绍
在迈向数据科学的一篇文章中,Haebichan Jung 讨论了我们通常如何高估硬技能的作用,例如在求职面试过程中的数据科学项目,并阐述了真正重要的“软”技能。然而,众所周知,找到一份工作是一件(非常重要的)事情,而在工作中茁壮成长是完全不同的,有时要困难得多。
在科学领域,很多时候,一个好的研究问题比它的答案更重要。答案可能(而且通常)是错误的——而一个问题,即使看起来很天真,有时也要等上几年才能得到一个好的或正确的答案。Quora 上引发我们兴趣的问题是:“你见过数据科学家被解雇吗?如果是,为什么?”。下面,我们借此机会与你分享一些想法,这些想法是我们在阅读它时,尤其是在我们阅读它得到的最高投票答案时开始形成的。
顶级答案以一个意想不到的高潮开始——考虑到我们对文学的业余爱好——我们可能敢与史诗小说中的几个伟大的开头段落相比较也就是这里的这个:“我实际上在工作了大约 6 个月后就要被解雇了。”。因此,对我们两人来说,这似乎是一个令人兴奋的好巧合的开始:找到一个值得问的问题,由某个人回答,他提供了自己在这个问题上的痛苦经历。
被告提出了他们即将被解雇的以下原因*(注意,我们使用的所有摘录都以斜体显示,并且都来自* Quora 答案 ) :
“机器学习并不完全适用于被大肆宣传的每个行业。今天的想法是,你把一堆特征扔进一个模型,模型会以 95%的准确率进行预测。事实是这样的。
- 大多数公司和行业还没有为并购做好准备。他们没有合适的功能集,无法访问合适的功能集,甚至不知道哪些功能驱动着他们的市场。
- ML 被视为可以解决任何问题的灵丹妙药,这是完全不正确的。如果你的特征空间在某种程度上与目标变量不相关,那么任何模型都不会有任何有意义的预测能力。例如,有一个特征,如有多少超过 50 岁的总统赢得了第二个任期的选举,将无助于预测谁将在 2020 年获胜。我这样说的原因是因为这些是最可用的、相关的、但并不真正驱动模型的特性类型。
- 公司想抛给 ML 的问题,通常大多都不是容易的问题。它们通常是我们所说的空中楼阁问题,比如预测股票市场。
上面描述的是一个行业努力跟上新技术的情况,发现自己处于早期采用者的角色,正如著名的罗杰斯的钟形曲线所示。另一方面,没有人会将机器学习(ML)的使用描述为当今的创新。20 世纪 90 年代使用 ML 的尝试可能被认为是这样的——但即使在那个时候也仍然有一些先前的尝试。
我们的目的是而不是解构 Quora 回答者提出的论点——恰恰相反——我们想为这种情况提供可能的解释,这种情况无疑可能面临严重的改善。
参数编号 1:责怪公司(和他们的特点)
【m】大部分公司和行业还没有做好 ML 的准备。他们没有合适的功能集,也无法获得合适的功能集,甚至不知道哪些功能驱动着他们的市场。
当然,一些公司所在的商业领域可能需要更多的 ML 应用程序和更密集的 ML 使用——但这是有待证明的。如果一家公司是数据密集型或数据贪婪型的,产生大量数据,并让员工利用这些数据(特征)做出决策(标签),那么这家公司可能会成为 ML 的良好候选公司。
然而,我们明白上面的意思和许多拜访安康会议或曼陀罗-泰式按摩、使用心理分析师的服务或在教堂参加弥撒的人一样:他们都被一些他们试图满足的内在(深奥的)需求所驱使。对于人类来说,这是一个很好理解的案例,它通常会带给我们新知识的发现,并帮助我们创新,因此我们没有理由指责公司根本不是“正确的类型”。
当然,公司也有责任——仅举几例:
- 他们不关心或不考虑他们是否真的有能力支持他们。即使是一些简单的数据存储费用、思维计算费用、云成本也可能导致初创公司走向死亡螺旋(例如,查看这篇关于培训最先进模型的成本的文章)。我们已经看到中小企业希望进行机器学习(和其他炒作的术语),但一旦他们开始计算数据和计算的云成本,他们就会削减。在这里你可以找到乔尔测试的第 9 步:更好编码的 12 个步骤:“你使用了金钱能买到的最好的工具吗?”
- 没有线索将个人贡献者与业务联系起来——我们需要一个能说两种语言的人,并弥合(许多)沟通差距。
- 他们(还)看不到硬技能之外的技能,因此无法判断谁是个人贡献者,谁是领导者,谁是产品经理,等等。再看这个帖子。
参数编号 2:神奇的子弹
ML 被看做是可以解决任何事情的灵丹妙药,这根本不成立。如果你的特征空间在某种程度上与目标变量不相关,那么任何模型都不会有任何有意义的预测能力。例如,有一个特征,如有多少超过 50 岁的总统赢得了第二个任期的选举,将无助于预测谁将在 2020 年获胜。我之所以这么说,是因为这些是最常见的功能类型,它们相互关联,但并不真正驱动模型。
所以想象一下,一个虚构的爬虫发现了以前从未被考虑过的信息:例如,假设所有的总统小时候都有一只汤姆猫,他们都叫它鲍勃。因此,这可能是我们希望考虑的一个特征,特别是如果下次选举也有一个或多个候选人具有相同的特征。
我们认为,作为一名数据科学家,人们应该更担心模型本身的意义,然后是它们的预测能力。我们将在这里打一个比方:我们不愿意想象政治家们仅仅因为想象他们自己在大约 20 年后举行一次演讲来庆祝他们做出了一个多么好的决定而做出决定。我们也不认为阿尔伯特·爱因斯坦在瑞士伯尔尼专利局工作时在笔记本上写下了他的方程,想到了几年后他将在瑞典面临的诺贝尔奖颁奖仪式,并幻想着他将在那里举行的演讲。(顺便说一句:由于在远东旅行,爱因斯坦根本无法出席斯德哥尔摩颁奖典礼并亲自接受诺贝尔奖……)。
所以,公司的目标主要是与业务相关的,而技术只是达到这一目的的手段。公司可能会也可能不会收集大量与其业务相关的数据,可能会也可能不会将这些数据与“外面”发生的其他事件联系起来。他们在预测未来或改善自身业务方面有多成功取决于很多参数。我们看到了对他们预测未来和提出杀手级应用或产品的需求。商业中的每一次失败都被准备或预见为可能或潜在的成功——这是毫无疑问的。有时候,公司和人一样,会被蒙蔽,只看到现实的一面。但正是因为这种片面性,他们有时也会在业务上取得成功。我们可以想象总统候选人的两只手政治顾问建议他们的客户不要竞选总统,因为他们小时候没有一只叫鲍勃的汤姆猫。这不是科学,而是神秘学。在企业决策实践中,人工智能并不是支撑新黑暗时代至高无上地位的支柱,在新黑暗时代,专门研究数据的女巫在她们的坩埚中准备人工智能支持的魔药,寻求预见未来。
因此,总结一下:我们希望公司投资收集与其业务和整个市场相关的所有信息,慷慨投资于建模练习,这些练习可能会失败,但也可能会成功——有时需要足够长的视野才能获得好的结果。所以是 不是 关于收集相关特征 不是 关于预测未来。主要是关于 理解业务 并能够 解释业务 以及可能一点点我们的世界。如果 ML 能帮助我们做到这一点,我们将很乐意把它作为一种工具来使用。
参数编号 3:天上的苹果馅饼
Quora 回答者提供的第三个论据让我们相信,大多数公司和行业还没有为并购做好准备:
大多数公司想扔给 ML 的问题通常都不是容易的问题。他们通常是我们所说的空中楼阁问题,比如预测股市。
毫无疑问,很少有人敢于仅仅为了讨论癌症治疗方案的而去看肿瘤学专家。通常,人们在他们自己的生活或他们的一些亲戚的生活中的一个非常戏剧性的时刻被送到这样一个专家那里。他们对这样的专家的要求是为他们提供最好的治疗【此时此地】。他们可能不知道个性化或精准医疗这样的术语,所以他们不会在乎得到与特定专家之前十个或上百个患者相同的治疗,只要它有效,他们就能得到治愈,并能够享受回归正常生活。
当然,在完全没有希望的时候,总有向人推销蛇油或者希望的空间。但是我们不认为公司会愚蠢到产生各种错误的期望不是关于他们使用的技术而是关于他们想要得到的解决问题的答案*。*
我们非常理解为什么 Quora 的回答者将一些问题命名为“天上掉馅饼”。另一方面,我们看不出人们有什么理由不要求更多:预测股市不是一个不合理的目标。这可能是很难提供的东西,就像告诉人们他们什么时候会死,或者更好的是,告诉他们他们将会死,同时也给他们一些治疗以避免死亡。
因此,即使这很难或不可能,公司——和人一样——作为信息技术的消费者,也有充分的理由要求不可能的事情(同时也补偿不可能的事情)。通常我们现在认为不可能的事情在未来可能会改变。一些不可能的事情已经被科学和技术成功地解决了——而其他一些问题仍然无法解决,尽管一个成功的答案似乎离我们只有很短的时间了…
程序中的错误
遗憾的是,故事的起点是有人被解雇了。但是让我们看看每一个项目任务,并试着理解哪里出错了。Quora 回答者抱怨说他:
已经工作了 6 个月,给了我几个 ML 项目,但最终都无法解决。lol。这是因为他们希望我解决的每一个问题都是“天上掉馅饼”的问题。’
我们理解这种感觉,也曾数次面对这种感觉——这肯定会打击你的士气。大学教育人们获得学位——所以他们通过认证程序,在那里最有才华的人或那些准备更充分的人获得最好的分数(查看保罗·格拉厄姆的文章“要忘却的教训”对这一问题的阐述),但在现实世界中,正如梅尔·布鲁克斯在他的歌曲“希望最好的(期待最坏的)”中所写的,“世界是一个舞台,我们是未经训练的”。
所以 Quora 回答者的第一个项目是:
‘逆向工程一家著名科技公司的算法,智取他们的算法,本质上是游戏系统。这从一开始就注定要失败。请注意,这是一家著名的公司,使用这种算法带来了数百万+的利润。重点是用我的 ML 努力战胜这个算法,这样我们就不用付给这家公司那么多钱了。我应该找到一个有预测能力的 ML 循环孔。或者更好的是,这家财富 500 强公司是如此愚蠢,任何人都可以破解他们的算法!是啊没错。最终,由于随机猜测的预测能力,这个项目失败了。
我们都可以猜测这个算法是 GAANG 还是 FAAGM 或者类似的算法。人们也可以很好地想象将这项任务分配给某人的人的期望。他们设想,通过雇用这个人,他们进入了数据科学的高速公路,这是所有演示和文章都在宣传的东西,在这里,小大卫们拿着 DIY 弹弓可能会竞争并击败巨人。这个愿景没有错。作为一家公司的员工,任何人的任务都应该是将愿景分成许多更小的部分(这正是 Haebichan Jung 在他的文章《T4 的分析思维》中的意思),并尝试每天或每周取得进展,这些进展也可以向雇主报告和传达,这样他们 a)就不会认为自己什么都不做,b)对所做的每个决定都有争论,因为正如埃里克·梅耶尔在他的“黑客之路”演讲中所说的那样,“代码赢得争论”这种交流可能提供获得反馈的机会。也许把愿景分割成更小实体的方式是错误的。也许有一个人已经迷路了,需要一些帮助或更详细的指导。
第二个项目是类似上述的另一个问题,但这次试图以某种方式预测公司的未来。这是部分成功的。
在某些情况下,成功是随机的。另一方面,对于这个(部分)成功的案例,最重要的结果不是模型本身的准确性,而是逆向工程的过程,并找到为什么第一个问题(和第三个问题,我们将在后面看到)是失败的原因,而第二个问题,根据 Quora 回答者的说法,与第一个问题相似,是成功的。从长远来看,这样的反馈循环(或回顾)是非常重要的一步。此外,根据 John Kotter 的领导变革的八步流程,创造和传达短期成功也是领导和推动组织变革的步骤之一,在这种情况下,是为了实现 ML。
最后但同样重要的是,第三个项目是关于:
在站点级别预测公司利润。你已经可以看到这将走向何方。这家公司在全国有 1000 多个站点,类似于零售连锁店。我应该想出一个捕捉行为的模型来预测每个网站在网站级别的利润!我们实际上能够得到大量的人口统计数据来解释这一点。例如,你可能会认为你需要的只是人口、工作等特征,以了解这将如何推动市场。同样,这就像试图预测股票市场,因为普通的人口普查数据本身并不能推动利润。我们有我们能想到的每一个特征,但一个具有一系列特征的单一模型仍然无法令人信服地捕捉到纽约与莫德斯托的行为,因为归根结底,这不仅仅是关于就业增长或生活在那里的人,还有其他隐藏的社会经济变量,我们无法捕捉或无法获得,甚至不知道。“这个模型实际上产生了合理的预测能力,但他们想要 90%以上的准确率,所以这个项目被认为是失败的。”
根据我们自己在教授学生数据科学入门课程和(一点点)高级课程时获得的个人经验,学生们被训练使用一些工具和/或编程语言,并完成不是很复杂的作业,而且在任何情况下都无法与某人在现实生活中面临的作业相比。我们承认,现实生活中的一个额外困难是,人们通常会对自己的期望设定很高的标准。因此,虽然学生在课堂上被教育像小学生一样处理初等算术问题,但在现实生活中,他们需要适应高中或大学代数的需要和要求,而有时客户或他们的老板要求他们达到与顶级大学教授相当的水平。Haebichan Jung 的文章再次提供了如何应对这种情况的答案,名为分析思维:将问题分解成子问题,与其他人讨论,并试图建立一个稳定的知识基础。这是公司的真正资产,这是人们应该做出贡献的地方,而不是展示脆弱准确性的系统。
通过阅读其他类似的故事,我们产生了一种担忧,即雇主可能会普遍妖魔化 ML,因为他们未能描绘出 ML 对于当今公司的未知领域。来自雇主或顾客的期望的主要问题是来自销售者或雇员的过度承诺。一个苦涩的事实是,许多数据科学家出售的是他们的项目,而不是他们解决问题的经验,因为这可能是公司和招聘经理想要听到的。
在结束这篇评论时,我们将引用前 UFC 冠军康纳·麦格雷戈的教练约翰·卡瓦纳的名言“要么赢,要么学”——这幸运地适用于数据科学家和作为员工的 ML 专家,以及计划开始他们的第一个或下一个 ML 项目的雇主。
挑战作为分析师的利益相关者
(来源: Pixabay )
办公时间
为什么分析师不应该盲目地回答摆在他们办公桌上的每一个数据请求,以及如何做得更好。
*“你想知道什么?”*作为分析师,这可能是最简单但也是最有价值的问题。它帮助我极大地改善了回应利益相关者要求的方式。然而,我可以说,在分析师的世界里,这个问题被问得不够多。
请求输入—数据输出?
在我职业生涯的早期,我认为尽可能精确地回答每个数据请求是我工作的本质。乍一看,交付快速、格式良好的分析结果,直接回答您收到的请求,似乎让双方都很高兴。你的利益相关者得到了她所要求的,你以最快的方式交付了据称是好的结果。
分析师应该提供答案,而不是数据。
但是人们经常会看到以下两种情况之一:
- 要么你的利益相关者只是简单地看了一下分析,然后就忘记了,因为它对她手头的实际问题没有帮助。
- 或者你的利益相关者可能会回来找你,要求对它进行迭代并争论更多的数据,希望这将揭示更多可操作的见解。
不管怎样,到目前为止的分析过程都是在浪费你和你的利益相关者的时间。
改变对话
在某个时候,我意识到成为一名优秀的分析师并不意味着提供数据。相反,我们必须提供答案。提供答案意味着我们帮助利益相关者解决他们需要解决的业务问题。要做到这一点,您必须改变与利益相关者的对话,以:
- 找出真正的问题是什么
- 找到正确的数据来回答问题
- 检查数据是否真的是决策所需要的
1)深入了解业务问题
作为一名分析师,如果有人联系您提出数据请求,您有责任确保结果将推动业务价值。你必须追根究底,以确保你是在帮助回答一个真正的商业问题。如果不这样做,所发生的一切就是报告和在数据中打探。相反,目标是进行价值导向的分析。
*“过去 12 个月,每个市场的应用下载量是多少?”*不是商业问题。
问*‘你想知道什么?’*是开始正确对话的一个短语。这有助于发现利益相关者真正想要做什么,以及哪些数据可以帮助支持他的决策。这个过程可能会将原始请求转化为实际的业务问题,如:
- “未来 6 个月,我们应该如何在不同市场分配我们的应用营销活动预算?”
- “在改善我们的入职流程方面,我们可以在哪些方面产生最大的影响?”
如果答案是*‘我只是想知道’*,这通常是一个强烈的信号,表明请求者没有考虑这个数据点将如何影响她的决定。在这种情况下,更重要的是坐下来一起讨论问题,找出哪些数据可以支持决策过程。
(来源: Pixabay )
2)针对正确问题的正确数据
询问为什么需要一组特定数据的原因对于提高决策质量和避免错误有很大的帮助。
重要的是要记住,利益相关者本身通常没有数据或分析背景。他们无法知道哪些信息是可用的,一些数据集的局限性是什么,什么是可能的。
我曾经被问到在过去 12 个月里下载我们应用的用户数量。在对请求的背景进行了简短的交谈后,发现请求者正试图评估针对应用用户的营销活动的受众规模。
虽然下载量可能是估计使用应用程序的人数的一个很好的代理,但数据集不包括任何卸载,也没有提供关于这些用户活动的任何信息。我们可能已经把我们的计划建立在休眠和搅动用户的基础上了!最后,事实证明,会话数据是回答这个问题的一个非常好的方法,导致了与下载数据完全不同的结果。
3)洞察力,但可操作的
见解应该是可操作的。分析师通常在他们的待办事项堆上有足够多的请求。如果感兴趣的数据点不是决策所必需的,那么可能会有另一个我们可以产生更多价值的请求。
如果要求的数字是 30%和 70%,我们的决策会有什么不同吗?
我发现,当被要求提供一个看似随机的业务数字时,快速检查这个数字的重要性的一个很好的方法是与利益相关者一起玩不同的场景。如果数字是 20%,结论会是什么?还是 60%?我们未来的行动会有什么不同吗?
如果答案是否定的,那么首先就不值得研究这个问题。取而代之的是,可能会问一些其他的问题来帮助解决手头的问题。
挑战与沮丧
挑战利益相关者并不意味着阻止人们提出并非 100%防水的问题。相反,定义数据问题应该是一种协作方法,以找到共同解决特定业务问题的理想方式。
以我的经验来看,人们通常会对自己的请求受到挑战而心存感激,因为这有助于他们以更快、更简单的方式实现目标。
重要的是要记住,利益相关者本身通常不是分析者,并不总是知道可以调查什么、可以获得什么样的数据以及应该如何解决特定的问题。一个好的分析师会意识到这些局限性,并帮助人们提出正确的问题,以确保每一项分析都能带来商业价值。
结论
你是一名提供答案或数据的数据科学家吗?如果答案是后者,你可能需要重新考虑如何处理利益相关者的请求。
问*‘你想知道什么?’*是向利益相关者提供更多面向业务的、有价值的见解的第一步。
喜欢这篇文章吗?那么你可能也会喜欢我的其他帖子:
为什么实验和数据使用不能保证公正的决策。
towardsdatascience.com](/the-analysts-bias-5c84825c0f48) [## 用正确的实验解决你的产品问题
如何用真正强大的假设推动商业价值
productcoalition.com](https://productcoalition.com/solve-your-product-problems-with-the-right-experiments-32c6cce02800)
使用暹罗网络的变化检测
在 CNN 的帮助下,你如何衡量变化
所有的事情都会随着时间而变化,能够理解和量化这种变化会非常有用。例如,观察一个城市或城镇多年来的基础设施变化可以帮助衡量它的经济繁荣程度,面部变化可以揭示你是否变老得太快,签名变化可以检测欺诈活动,皮肤纹理和颜色的变化也可以告诉你是否开始患上像痤疮这样的轻度皮肤病,捕捉历史遗迹的时间戳图像可以揭示它们随着时间推移而产生的裂缝。很明显,测量这种变化的方法很有价值,这将是这篇文章的内容。
资料来源:联合国人类住区规划署
在深入技术细节之前,让我们试着更好地理解和阐述这个问题(这将有助于我们以后以更可量化的形式评估我们的模型)。你认为为观察变化而建立的系统的理想特性是什么?
1.检测相关变化,忽略其他变化
重要的是,任何模型都善于忽略与我们的用例不相关的变化,并且只检测我们感兴趣的变化。对于检测建筑物随时间的变化,它可能涉及忽略道路、树木和水体的变化,对于检测衰老,其他面部变化如晒黑或新的无关斑点/痣并不重要。
2.足够健壮以考虑稍微不同的方向/照明条件
这更多的是一个数据标准化问题,因为随着时间的推移捕获的图像会有差异,这将很难一直得到关注。如果面部图像是用智能手机拍摄的,那么光线和方向条件将会完全不同。同样,使用卫星拍摄的图像可能容易受到云层变化、阳光反射以及卫星自身方位角和仰角变化的影响。
3.模块化
这个标准基本上将建模技术分为两类,一类是您可以从模型中分离出组件,另一类是您不能。允许您在某种程度上隔离模型管道的不同部分的技术是非常优越的,因为您可以使用其他人已经构建的预构建部分并将其合并在一起(为什么要像他们所说的那样重新发明轮子)。当我们谈到早期的融合网络以及它们与暹罗网络的比较时,这一点会变得更加清楚。
基于这些标准,测量变化的最简单和最容易的方法,即使用逐元素的像素差异,就不存在了。也有更智能的方法来做这件事,但是结果仍然很差,也不是很健壮。暹罗网络来救援!
暹罗网络
一个连体神经网络将两幅图像作为输入(在两个不同的时间戳捕获),使其通过一系列卷积层,以获得两幅图像的高阶特征向量,然后使用欧几里德范数比较这些向量,以测量变化。这个想法是,没有相关变化的两幅图像将在特征向量的维度空间中产生相似的向量。
值得注意的是,两幅图像在特征提取阶段都经过完全相同的网络。
检测基础设施变化的暹罗网络(来源:https://www.mdpi.com/2072-4292/11/11/1292
让我们看看这种类型的模型如何在训练阶段调整权重。
对比损失
对比损失函数用于训练暹罗网络。如果没有变化,它试图最小化两个特征向量之间的距离,反之亦然。下面的图像试图在两类分类的情况下解释它。
对比损失(作者图片)
让我们快速直观地看一下这个。如果两幅图像都没有包含我们正在训练的变化,那么实际的标签将会是 1。如果模型权重不正确,向量 v1 和 v2 之间的距离会很大。将这两个因素代入公式,我们得到损耗 L 的高值。反向传播开始起作用,为了减少损失,它调整权重,使得向量之间的距离小于之前的距离(对于这组特定的图像)。引入余量 m 是为了推动网络为变化的图像产生更多独立的特征。
早期融合网络
还有一类非常相似的架构,它们在变化检测方面很流行,被称为早期融合 (EF)网络。它包括首先沿通道轴组合两个输入。因此,如果我们处理 RGB 图像,输入将是一个 6 维矩阵。这一次它将通过一个单一的前馈网络,而不是暹罗网络中的两个平行网络。
早期融合网络(尽可能简单)(图片由作者提供)
早期融合网络的最大问题是缺乏模块化。对于暹罗网络,您可以根据领域将预训练的网络用作用例的特征提取器,这在您没有大量数据时非常有用。
比方说,你想观察某个地区的建筑在 5 年前当地政府决定投入巨资建设企业园区和购物中心后的变化。因此,在投资之前,您有包含建筑物的注释数据,一旦它们完全建成。如果我们要使用的模型也可以使用来自其他广义的和各种各样的建筑物足迹数据集的知识,这将会好得多,这些数据集由来自世界各地城市的图像的瓦片和瓦片组成。
暹罗网络支持迁移学习的能力是迄今为止它优于其他方法的最大原因。
正如他们所说,变化是唯一不变的。正是这种变化,当具体评估时,可以产生非常重要的见解。
参考
- 杨展,付昆,基于深暹卷积网络的光学航空影像变化检测(2017):https://www . semantic scholar . org/paper/Change-Detection-Based-on-Deep-Siamese-Network-for-Zhan-Fu/b 702 cf 22 AFB 725 B1 BF 9d 633 ffdd 96 CFB 00 a 87253
- 天宇宋、Pytorch 执行:暹罗网(2017):https://Tianyu Song . com/2017/11/16/py torch-Implementation-Siamese-Network/
- Mathew D. Li,,等,用于医学影像中连续疾病严重度评估和变化检测的连体神经网络(2020):
- 罗德里戈·卡耶·道特,贝特朗·勒·索克斯,利用卷积神经网络进行多光谱地球观测的城市变化检测(2018 年):https://www . ground ai . com/project/Urban-Change-Detection-for-multiple-multiple-Earth-Observation-Using-convolutionary-Neural-Networks
- 李攀方博,使用双时 VHR 光学遥感图像进行变化检测的基于双重学习的连体框架(2019):https://www.mdpi.com/2072-4292/11/11/1292
用 5 行代码改变任何图像的背景
使用 PixelLib 对任何带有图片的图像进行模糊、着色、灰度处理和背景更改
作者照片拼贴
图像分割有很多惊人的应用,可以解决不同的计算机视觉问题。PixelLib 是一个库,旨在确保在实际应用中轻松集成图像分割。PixelLib 现在支持一种称为图像调谐的功能。
图像调优:通过图像分割改变图像的背景。图像分割的关键作用是从图像中去除分割出的对象,并将它们放置在新创建的背景中。这是通过为图像生成一个遮罩并将其与修改后的背景相结合来实现的。我们使用在 pascalvoc 数据集上训练的 deeplabv3+模型。该模型支持 20 种常见的对象类别,这意味着您可以更改图像中这些对象的背景。
该模型支持下列对象:
person,bus,car,aeroplane, bicycle, ,motorbike,bird, boat, bottle, cat, chair, cow, dinningtable, dog, horse pottedplant, sheep, sofa, train, tv
支持的背景效果有:
1 用图片改变图像的背景
2 给图像的背景赋予不同的颜色。
3 模糊图像的背景
4 对图像背景进行灰度处理
安装 PixelLib 及其依赖项:
安装 Tensorflow 与:(PixelLib 支持 tensorflow 2.0 及以上版本)
- pip3 安装 tensorflow
安装 PixelLib 与
- pip3 安装 pixellib
如果已安装,请使用以下工具升级至最新版本:
- pip3 安装 pixellib —升级
用图片改变图像的背景
PixelLib 只需 5 行代码就可以改变任何图片的背景。
sample.jpg
我们想用下面提供的图片来改变上面图片的背景。
background.jpg
用图片改变图片背景的代码
import pixellibfrom pixellib.tune_bg import alter_bgchange_bg = alter_bg()
我们导入了 pixellib,并从 pixellib 导入了类 alter_bg 。我们创建了该类的一个实例。
change_bg.load_pascalvoc_model("deeplabv3_xception_tf_dim_ordering_tf_kernels.h5")
我们加载了 deeplabv3+模型。从这里下载 deeplabv3+ pascalvoc 模型。
change_bg.change_bg_img(f_image_path = "sample.jpg",b_image_path = "background.jpg", output_image_name="new_img.jpg")
我们调用了函数 change_bg_img 来改变图片的背景。
该函数采用以下参数:
f_image_path :这是前景图像,背景将被改变的图像。
b_image_path :这是将用于改变前景图像背景的图像。
output_image_name :背景改变后的新图像。
输出图像
哇!这是美丽的,我们已经成功地取代了我们的图像背景。
我们能够使用 PixelLib 通过图像分割执行出色的前景和背景减法。
获得改变后的图像数组的输出数组的代码
对于特殊用途,您可以通过修改下面的代码轻松获得更改图像的数组。
给图像的背景分配不同的颜色
您可以为图像的背景指定不同的颜色,就像您可以用图片更改图像的背景一样。这也可以通过五行代码来实现。
为图像背景分配不同颜色的代码
它非常类似于上面使用的用图片改变图像背景的代码。唯一不同的是,我们把函数 change_bg_img 换成了处理颜色变化的函数 color_bg 。
change_bg.color_bg("sample.jpg", colors = (0, 128, 0), output_image_name="colored_bg.jpg")
函数 color_bg 采用参数 colors ,我们提供想要使用的颜色的 RGB 值。我们希望图像有一个绿色的背景,颜色的 RGB 值设置为绿色,即 (0,128,0) 。
绿色背景
注意:通过提供颜色的 RGB 值,您可以将任何颜色分配给图像的背景。
change_bg.color_bg("sample.jpg", colors = (255, 255, 255), output_image_name="colored_bg.jpg")
我们希望将图像的背景更改为白色,并将颜色的 RGB 值设置为白色,即 255,255,255。
白色背景
白色背景的相同图像。
获取彩色图像输出数组的代码
对于特殊用途,您可以通过修改下面的代码轻松获得更改图像的数组。
灰度图像的背景
使用与 PixelLib 相同的代码行对任何图像的背景进行灰度化。
对图像背景进行灰度编码
change_bg.gray_bg(“sample.jpg”,output_image_name=”gray_img.jpg”)
这仍然是相同的代码,除了我们调用函数 gray_bg 来灰度化图像的背景。
输出图像
**注意:**图像的背景会被改变,出现的物体会保持它们原来的质量。
获取灰显图像输出数组的代码
模糊图像背景
您可以应用模糊图像背景的效果,并且可以控制背景的模糊程度。
sample2.jpg
来源:【Unsplash.com·作者:艾蕾拉·霍瓦特
*change_bg.blur_bg("sample2.jpg", low = True, output_image_name="blur_img.jpg")*
我们调用了函数 blur_bg 来模糊图像的背景,并将模糊效果设置为低。有三个参数决定背景模糊的程度。
**低:设置为 true 时,背景略有模糊。
**中度:设置为 true 时,背景中度模糊。
**极端:设置为 true 时,背景深度模糊。
图像模糊,效果不佳。
*change_bg.blur_bg("sample2.jpg", moderate = True, output_image_name="blur_img.jpg")*
我们希望适度模糊图像的背景,我们将适度设置为真实*。*
图像的背景模糊,效果中等。
*change_bg.blur_bg("sample2.jpg", extreme = True, output_image_name="blur_img.jpg")*
我们想要对图像的背景进行深度模糊处理,我们将极端设置为真实*。*
图像的背景非常模糊。
模糊图像背景的完整代码
获得模糊图像输出数组的代码
***注意:*在 PixelLib 的 github 的存储库和 PixelLib 的文档中学习如何将这些背景效果应用到视频和摄像机的馈送中。我将很快发表一篇关于如何将这些背景效果应用到视频和相机馈送的说明性文章。
通过以下方式联系我:
Linkedin: 阿尤拉·奥拉芬娃
推特: @AyoolaOlafenwa
脸书:阿尤拉·奥拉芬娃
查看这些关于如何利用 PixelLib 对图像和视频中的对象进行语义和实例分割的文章。
用 PixelLib 进行语义和实例分割。
towardsdatascience.com](/image-segmentation-with-six-lines-0f-code-acb870a462e8) [## 用 5 行代码实现视频分割
视频的语义和实例分割。
towardsdatascience.com](/video-segmentation-with-5-lines-of-code-87f798afb93) [## 用 5 行代码对 150 类对象进行语义分割
用 PixelLib 对 150 类对象进行语义分割
towardsdatascience.com](/semantic-segmentation-of-150-classes-of-objects-with-5-lines-of-code-7f244fa96b6c) [## 用 7 行代码进行自定义实例分段训练。
用 7 行代码训练您的数据集,以实现实例分割和对象检测。
towardsdatascience.com](/custom-instance-segmentation-training-with-7-lines-of-code-ff340851e99b)*
疫情前 6 个月的静息生理学、睡眠、训练和感知压力的变化
实践教程
HRV 4 培训用户分析
一年前 6 个月的静息心率变化。2020 年的数据显示,随着许多欧洲国家开始封锁,静息心率将下降。静息心率一直被抑制到 7 月。灰色部分,可以看到与 2019 年数据的对比。作者图片
上周我在 Twitter 上做了一个调查,是看到上面的数据引发的:在分析 HRV 4 训练数据时,在疫情的前 6 个月降低了静息心率。数据显示的趋势与我们大多数人的预期相反:
没那么快。作者图片
在这篇文章中,我将更详细地回顾这些数据,包括在疫情的前 6 个月中休息生理、睡眠、训练和感知压力的变化。
数据集
在此分析中,我将选择加入研究的 HRV4Training 用户和以下国家/地区(我们的大多数用户在这些国家/地区):澳大利亚、比利时、巴西、加拿大、法国、德国、意大利、西班牙、南非、荷兰、英国和美国。总的来说,我可以包括大约 5500 人,平均每人每天测量 3 个月,总共将近 50 万次测量。利用HRV 4 训练收集早晨的静息生理测量值,使用相机版本或外部传感器,通过将应用程序链接到 Strava 或 TrainingPeaks 来收集训练数据,同时使用应用程序中的问卷来收集主观数据。
HRV4Training 是唯一一款经过验证的应用,支持基于摄像头的心率变异性(HRV)测量。作者图片
不用说,这是人口的一个特殊样本:活跃的、有健康意识的个人,他们有足够的动力每天早上测量他们的生理状况。因此,这篇文章中显示的内容仅代表该示例,可能不适用于其他示例。
然而,上面的调查以及使用我们平台的大多数人(包括我在内)预期相反的情况(例如在锁定期间心率加快)的事实,使其成为一个有趣的分析
静息心率的变化
让我们从最初的图表开始。在下图中,我展示了在欧洲第一次停搏开始后静息心率是如何降低的。我还增加了 2019 年的心率,这种比较更容易排除季节变化等因素,并强调 3 月至 6 月期间静息心率的降低:
作者图片
背后会有什么呢?
在这一点上,我们可以提出各种理论。例如,许多人指出体育活动是如何发挥作用的。
由于封锁或一般来说较少的户外训练机会,人们可能训练得更少(我们稍后会看到事实并非如此),或者可能花更多的时间做低强度运动(也不正确)
虽然确实没有比赛可做,但我有点怀疑静息心率的降低可能与已经训练有素的人的训练有关(而且是在这么短的时间内)。
另一方面,我们谈论的是那些可能经常出差,并且总体上可能有点过度劳累的个人(这也可能促使我们寻找一款帮助量化和管理压力的应用)。让我们更深入地研究一下。
旅行和睡眠
正如我们在这里看到的,旅游受到疫情的严重影响并不奇怪:
任意单位,旅行在应用程序中被记录为是/否,在这里我们看到报告旅行的个人百分比,我们可以看到直线下降,然后在波浪之间再次开始攀升,正如预期的那样。作者图片
同样,随着许多人开始远程工作,睡眠时间变长了,这显然与疫情有关,与前一年的比较显示:
睡眠时间的变化。我们可以看到 5 月和 7 月之间的季节性下降,但也可以看到大流行前和大流行后值之间的明显差异。作者图片
当我们包括许多国家时,情况会变得有些混乱(这里我绘制了每个国家一月份随时间变化的差异,以便它们或多或少处于同一水平)。我们可以看到 3 月中旬以及 2019 年和 2020 年的“周末”左右的跳跃,睡眠时间明显增加:
作者图片
旅行和睡眠时间似乎是静息心率变化背后的两个主要因素,特别是因为这些变化都是长期的(静息心率在 6 月份仍然受到抑制,类似地,仍然很少旅行和更长的睡眠时间)
我们将在下面看到其他变量,特别是主观变量,有一个更短暂的过程,并很快重新规范化。
培训呢?
正如我前面提到的,训练和/或体能的变化也可能是静息心率变化的原因。然而,从数据来看,这一理论似乎并不成立。例如,训练时间并没有真正减少(我自己也买了一台跑步机,我记得我的很多朋友也买了一台跑步机,或者找了一位室内自行车教练,有趣的是,这似乎证实了“积极性高的人无论如何都会训练”)。
下面是一些数据,三月初训练时间降低一点,然后再归一化。一旦封锁解除,我们可以发现的是明显的增长(例如在意大利、法国和西班牙):
作者图片
就训练强度而言,似乎强度的降低或在较低强度下花费更多时间并不是心率降低的真正原因,因为训练 RPE 比前一年高了很多。然而,我们再一次看到先是一个小幅度的减少,接着是一个大幅度的增加:
作者图片
当查看骑自行车者的平均锻炼瓦特时,也可以看到类似的模式(此处未显示)。
让我们看看一些额外的参数,例如,自我报告的疲劳和压力。
我们感觉如何?
让我们从与训练相关的事情开始:疲劳。在应用程序中,我们将疲劳报告为“身体”疲劳,而不是“精神”疲劳。我们可以在下面的数据中看到一个类似于我们刚刚看到的三月底左右的训练数据的模式,有一个最初的下降(可能是由于训练时间和强度的短暂减少)。然而,自我报告的疲劳似乎不会随着负荷的增加而增加,并且很快恢复正常:
作者图片
自我报告的压力呢?
以下是应用程序中报告的内容:
作者图片
在我看来,这是最有趣的图表。我们可以看到在压力下有一个初始峰值,疫情显然是一个值得严重关注的原因。然而,过了一段时间后,其他因素可能会发挥作用:睡眠时间增加的影响,减少旅行等。—这导致自我报告的压力水平比 2019 年低得多
请注意,相对于 2019 年,2020 年 1 月和 3 月之间没有变化,突出显示了此处显示的变化如何最有可能与疫情相关联。
心率变异性(HRV)
最后,由于我的工作通常专注于生理压力和心率变异性(HRV),让我们也来看看这些数据。
总的来说,我总是建议不要做我将要做的事情:在人、群体或不同时期之间比较 HRV。我坚信 HRV 是捕捉个人压力变化的有效工具,这样我们就可以收集客观反馈并实施日常调整,以更好地管理压力,而不仅仅是比较群体。
这与静息心率不同(在我看来),这种差异可以以最简单的形式看到,静息 HR 是最大摄氧量的良好预测指标,而 HRV 不是。HRV 是关于持续反馈和压力管理的。题外话说够了,如果你刚到 HRV,并且对这个话题感兴趣,请查看这个案例研究列表或这个网络研讨会。
话虽如此,但不可否认的是当我们观察人群的宏观差异时在群体水平上存在着联系(例如久坐者的 HRV 较低,随着年龄的增长而下降,所有我在这里展示的)。一场影响遍及全球的重大破坏(疫情),显然符合可能以类似方式对许多人的生理产生巨大影响的条件。让我们看看同一时间段的 HRV 数据:
作者图片
虽然这里的变化很小,但似乎在 3 月和 5 月之间,我们可以发现以下情况:
首先,随着疫情的开始,我们可以看到 HRV 的下降,每个人都对正在发生的事情和我们周围的许多未知感到非常紧张
然后,随着其他一些变化的出现(睡眠增加,旅行减少,压力减轻),我们也可以看到 HRV 的增加
在这两个事件之外,这条线相当平坦,正如我们所预期的那样,这是一个压力的标志(许多因素在起作用,这里我们对数千人进行了平均,所以再次强调,除非发生了非常大的事情,否则数据中应该没有亮点,类似于 2019 年我们自我报告的疲劳或压力)。
包裹
在上面的 9 张图中,我展示了在疫情的前 6 个月中,休息生理、睡眠、训练和感知压力的变化。
虽然巨大、严重的压力毫无疑问是今年大部分时间的特点(可以在上面的一些图表中以 HRV 下降或自我报告的指标看到)但从客观数据(旅行、睡眠、生理)和自我报告的压力水平也可以清楚地看出,我们生活方式的一些变化已经导致了可能意想不到的积极结果(睡眠时间增加,静息心率降低)。
同样,虽然我们在这里分析了一个相当大的样本(5500 人),但这些关系是特定于这个人群的,不一定适用于其他人。
我希望你已经发现写起来信息量大,保重!
Marco 拥有应用机器学习的优等博士学位、计算机科学工程的优等硕士学位以及人类运动科学和高性能教练的优等硕士学位。
他已经发表了50 多篇论文和专利,涉及生理学、健康、技术和人类表现的交叉领域。
他是 HRV4Training 和爱跑步的联合创始人。
推特: @altini_marco
更改 Pandas 中时间数据的频率(精度)
使用 Pandas 的 resample()方法调整时间特征
华盛顿州渡口。布莱恩·汉森在 Unsplash 上的照片
今天,我们将获取华盛顿州渡轮等待公告(带有精确时间戳的推文),并将它们转换为完整的逐小时数据集。我看到了堆栈溢出周围浮动的一些其他建议,但pandas
resample()
似乎是我的任务的一个优雅的工具。
数据
到目前为止,我有描述等待时间的推文、这些公告的时间戳以及提取的等待时间:
带有 index、tweet_text、time 和 wait_time 的数据表头。
目标
我想扩展这个信息,这样就有一个每小时渡轮运行的记录,以及当时等待的小时数。在这种情况下,等待时间警报会一直存在,直到更新不再有延长等待。
带有每小时数据的扩展数据框。
熊猫。重新取样()
在调整了时区并添加了一天的开始等待重置之后,我需要得到上面的结果
df = df.resample('1H').ffill()
让我们来看看这些部分:
首先,*DataFrame.*resample()
改变时间序列数据的频率。参见完整文档此处。因此,您可以将与时间段相关的数据转换为您想要的任何级别。它使用参数on='col_name'
处理 DatetimeIndex 字段或任何类似 datetime 的列。
其次,我们指出我们想要对非时间数据使用什么策略。在这种情况下,ffill()
是完美的——它从最后一个已知值向前填充所有数据点。或者,您可以使用各种策略,包括 sum、min、max、mean、median、first、last、std、bfill(反向填充)等。
结果呢
在几行代码中,我能够得到我需要的东西:
最终数据表头。
你可以在这个 GitHub repo 上找到完整的代码。更多关于熊猫的日期时间数据,请查看他们的时间序列/日期用户指南。编码快乐!
马特·弗洛雷斯在 Unsplash 上拍摄的照片
可视化美国住房市场人口统计
使用 Seaborn 和赛璐珞的人口金字塔动画
斯科特·韦伯在 Unsplash 上拍摄的照片
2008 年美国房地产市场崩盘的影响仍在实体经济中蔓延。许多 X 一代和千禧一代看到他们积累的资产消失了。那些即将退休或已经退休的人目睹了他们最信任的资产之一——他们的财产——从悬崖上掉了下来。在所有年龄组中,人们都遭遇了经济困难。那些有能力购买新房产或保留自有资产的人,在过去 10 年里看到了巨大的收益,不仅恢复到了危机前的高位,而且在一些地区价值翻了一倍甚至两倍。与此同时,一场完美的债务风暴、收入尚可的早期职业工作越来越少,以及生活成本的上升,改变了许多人拥有住房的前景。最近的一项分析发现,52%的 18-29 岁年轻人与父母住在一起,这可能部分归因于高等教育的偏远、远程工作的持续增加以及不同行业的大规模裁员。在这篇文章中,我将展示 2010 年至 2018 年期间,不同年龄组和不同年龄段的业主入住率和租房率的变化。这些数据可以从美国社区调查中公开获得。所有使用的脚本和数据都可以在项目 GitHub 上获得。这个项目是对我之前关于就地老化的推测的跟进。
在冠状病毒疫情的影响下,就地养老的决定对那些准备退休或…
medium.com](https://medium.com/swlh/age-in-place-a-major-disruption-to-the-housing-market-flow-a3fe7a75d14f)
数据
原始数据是业主入住和租赁时间的百分比值的汇编,按年龄人口统计分开。在这项研究中,我们探讨了百分比随时间的变化以及按世代类别的变化。这四个世代类别是沉默的一代、婴儿潮一代、X 一代和千禧一代。
将年龄组分成几代。图片作者。
动画
为了制作动画,赛璐珞被用来记录多个海波恩的情节。赛璐珞可以使用 pip 安装在 Python 中。
pip install celluloid
简单地说,我们拍下一个 for 循环中生成的每个图。在循环之后,我们将这些图像拼接成视频或 gif。
## Open the camera lens
fig = plt.figure()
camera = Camera(fig)## Start the photoshoot
for i in range(9):
## Build graphs here
... ## Take the shot
camera.snap()## Make the movie
animation = camera.animate(interval=500)
animation.save('animation_housing.gif', writer = 'pillow')
结果
动画程序的输出。作者制作的动画。
这幅图中有很多东西需要解读。首先,从 2010 年到 2018 年,变化最大的群体是64-74 岁的业主居住者,总体增长了 4.4%。45 至 54 岁的车主居住者同期降幅最大,为-4.0%。54 至 64 岁的业主住户的收益为 1.1%,这可能是业主住户进入新类别的结果。包括 45 岁至 54 岁在内的所有年龄段,租房和自住的比例都在下降。2017 年和 2018 年,年轻人(35 岁以下& 34 岁至 44 岁)的拥有率略有上升(分别上升 0.3%和+0.2%)。
世代变迁
这些数字是如何按世代分类的呢?
作者制作的动画。
沉默的一代和婴儿潮一代的成员看到他们的业主入住率在这段时间内有所增加,而 X 一代和千禧一代的业主入住率则有所下降。代码和额外的 gif(按年份的增量)可以在 GitHub 上找到。
讨论
在我之前的文章中,我推测考虑到当前的疫情和经济不确定性,许多临近退休或已经退休的人选择就地养老。甚至在疫情之前,老一代人自有住房类别的扩大就证明了这一点。该数据中令人惊讶的是,X 一代在租赁和自有住房比例方面都有所下降。虽然千禧一代正以创纪录的速度搬到父母身边,但尚不清楚 X 一代成员的自有/租赁比例将会如何。我叫科迪·格利克曼,可以在 LinkedIn 上找到我。请务必查看下面的一些其他文章。
在冠状病毒疫情的影响下,就地养老的决定对那些准备退休或…
medium.com](https://medium.com/swlh/age-in-place-a-major-disruption-to-the-housing-market-flow-a3fe7a75d14f) [## 使用 Python 创建照片镶嵌
一步一步的教程,让你自己的美丽的图像
towardsdatascience.com](/creating-photo-mosaics-using-python-49100e87efc) [## 使用 GitHub 创建漂亮的静态网页
查找模板和为静态网页创建表单的位置
towardsdatascience.com](/building-a-beautiful-static-webpage-using-github-f0f92c6e1f02)
用 R 在 5 分钟内创建您的交互式动画图形
D3.js 中没有编码的动画可视化
冠状病毒,或称新冠肺炎病毒,在不到两个月的时间里已经在几个大洲传播,并且肯定已经引起了公众的恐慌和疫情的恐惧!这个星球上的每条新闻都在报道冠状病毒,股票市场正在崩溃,人们正在让焦虑支配他们的行为。当然,我对病毒遗传学和流行病学没有任何专长,但就我而言,理性的做法是采取必要的预防措施,呆在家里,保持社交距离,直到我们一起度过难关!
与其呆在家里做最坏的打算,我们为什么不积极地用一些有创造性的东西来占据我们的大脑呢?在这篇博客中,我将使用 COVID–19 数据来讨论 R 中使用较少代码行生成图形的几种技术,以及如何在 R 中创建交互式动画图形,而无需在 D3.js 中编写一行代码。现在,让我们加入到 r 中新冠肺炎可视化的潮流中来
我们将使用由约翰霍普金斯大学 CSSE 2019-nCoV Github 存储库维护并每日更新的新冠肺炎数据集(这里是链接)。有 3 个单独的数据集,分别用于确诊、死亡和恢复的病例,这 3 个数据集都是宽格式的,从 1 月 22 日持续到 3 月 28 日(当我开始这篇博客时)。
新冠肺炎确诊病例数据集
同时读入数据集(并创建绘图变量)
首先,让我们把 3 个数据集读入 R,
注意,我们在每个数据集中创建了一个额外的变量,标记为**‘Status’**。我稍后会解释原因,但是现在,让我们做一个快速的完整性检查,以确保 3 个数据集包含相同的绑定列。这种健全性检查总是有用的,尤其是在原始数据源发生变化的情况下,并且(复活节彩蛋)下面的代码显示了如何做 DRY 。
现在,我们需要将数据集列表追加到一个数据框中,
现在,让我们回到我们在读取每个数据集时创建的**‘Status’**变量。在已确认、已死亡和已恢复数据集中,此堆叠变量的值将分别为“已确认”、“已死亡”和“已恢复”。将此’状态’变量作为单独的一列,可将其指定为{ggplot2}中的计算和绘图参数。
因此,下面展示了按“国家”和“状态”分组的数据准备步骤(这里,我选择了 4 个国家进行比较——中国、意大利、美国和伊朗)。
(复活节彩蛋)注意到了 colnames(。)?这可能是{ magrittr }管道中我最喜欢的功能。)这里接收上一次操作返回的所有内容。超级得心应手!
静态热图显示确诊病例
可视化纵向数据或任何二维数据的一种方法是热图,因此,让我们继续看第一个图表——上述 4 个国家确诊病例的热图。
出于演示的目的,我只绘制了从 2 月 22 日到 3 月 28 日的数据,但是如果您愿意的话,可以随意扩展时间线,
这是我们的热图,显示与其他国家相比,中国的确诊病例数一直是最高的,直到美国和意大利在 3 月底超过了这些数字。
热图的一个缺点是它不能处理第三维度,这意味着如果我们要观察确诊、死亡和康复病例的模式,我们必须做 3 个单独的热图。
交互式纵向意大利面条图
纵向折线图适用于添加第三层(即确诊、死亡和痊愈)的任务。在这里,对于每个国家,情节的开始日期被设置为第一个病例被报告确认的日期,我们需要将格式从宽转换为长,
为了一次创建多个图,{ggplot2}有一个很棒的函数**‘facet _ wrap’**(查看此链接了解详情),这里我们允许不同国家的比例有所不同。为了让剧情互动,{plotly}是我们的打包产品,
这是我们的互动折线图,
现在,我们可以直观地说出 4 个选定国家的轨迹,那么其他国家呢?
R 中的动画条形图
我们可以创建一个赛车条形图,显示确诊病例最多的前 N 个国家,我们可以使用{gganimate}软件包在 R 中完成!
完整的代码可以在 my Github 中找到,但是基本上,我们首先定义一个静态图,就像我们定义{ggplot2}一样,
然后定义动画部分,(复活节彩蛋)函数 ease_aes() 可以用来调整你的酒吧过渡的平滑度,
瞧,在这里。
我希望这篇博客让你从冠状病毒恐慌中分散了一点注意力,更好的是,你学到了一些新东西。同样,你可以在 my Github 中找到完整的代码,包括如何将你的动画情节保存为 GIF 或 MP4 。
保持积极,保持健康!
编者注: 走向数据科学 是一份以研究数据科学和机器学习为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里 。
平静中的混沌:什么是混沌工程?
凯文·霍尔瓦特在 Unsplash 上的照片
时间是主动而不是 被动
混沌工程不仅仅是机器人尼克博士做的事情;这是开发生命周期中一个严肃且日益普遍的部分。
在不断变化的全球环境中,将持续测试引入 DevOps 工具链以确保安全性和弹性的压力越来越大。随着云成为越来越多公司的主导领域,情况更是如此,因为哪里有新兴技术,哪里就有新兴威胁。
在实践中,一个没有经过常规和有效测试的系统更容易停机,这会导致失望甚至失去客户。在 ITIC 的第 11 次年度停机时间每小时成本调查 中,发现 87%的组织现在被要求在 99.99%的时间内可用(他们注意到,在过去的 2.5 年中,这一数字上升了 81%)。令人难以置信的是,40%的企业组织表示,一个小时的停机时间会给他们带来 100 万到 500 多万美元的损失。
那么,你如何先发制人,为那种可能让你的公司损失数百万的灾难做准备呢?嗯,一个越来越流行的方法是在别人打破你自己的东西之前,有成效地打破它。
揭露,改进
对于我们这些不是 DevOps 世界巫师的人来说,仅仅是故意给你的辛苦工作带来混乱的想法就令人不寒而栗。不过,理解这个概念并不困难,一旦你理解了需要做的工作,我相信你会同意结果是值得投入资源的。
这方面一个相当传统的例子是渗透测试或道德黑客,即一家公司(通常)付钱给第三方,试图找到他们基础设施中的安全弱点。混沌工程将这种测试安全性的想法提升了一个档次。
为了在高层次上进行解释,您将中断(例如重大服务器崩溃、黑客攻击企图、停电)引入系统的正常生产 状态,以便主动(而不是被动)测试其弹性。
开发生命周期的简单视图(图形我自己的)
它旨在复制真实的“紧急”情况,与传统的主流测试不同,它发生在生产环境中,而不是在开发生命周期的早期。
但是,如果不需要的话,你为什么要竭尽全力去破坏你自己的网络或者烧毁你自己的硬件呢?
嗯,这有点像一句老话“没有准备就是为失败做准备”;如果你不做,那么别人可能会做。因此,为了避免陷入意外停机的灾难性局面,最好提前准备好任何缓解措施。
通过暴露任何可能的弱点,你可以最终提高对未来任何系统的信心。
像对待科学学科一样对待它
混沌大师 Gremlin 在他们的白皮书中明确指出:
“混沌工程的关键在于它被视为一门科学学科.”
混沌工程不只是雇佣一些人来尝试破坏你的系统,而是让你恢复到原始状态,而不会对客户或员工造成任何影响。从法规遵从性的角度来看,它允许您验证和证明假设的防御机制。Gremlin 列出了成功工程应该遵循的六个步骤:
- 形成假设
- 计划你的实验
- 最小化爆炸半径
- 进行实验
- 庆祝结果
- 完成任务
有许多对混沌工程的批评和怀疑,因为,当然,其中有风险。但是,遵循这些步骤并利用最佳实践(包括从试运行环境开始,始终有一个“终止开关”,并提前计划),可以大大降低出错的可能性。记住:如果你不在一个受控的环境中测试东西,你肯定会在它们将来不可避免地出错时努力去修复它们!
最终,通过模拟可能完全压倒一切的事件,你让它们成为非事件——如果它们在未来发生——几乎不会留下痕迹。
解决假设
混沌工程的另一个好处是它挑战了软件工程世界最大的弱点:不正确的假设。无论是相信你拥有所有的权力,还是相信你永远不会失去空间,让这些谬论生根发芽会让问题悄悄进入。
分布式计算的谬误,作者 L. Peter Deutsch
如果您没有持续不断地进行测试,并将您的基础设施推向极限,那么您就依赖于在现实世界中发现您的系统弱点,这可能会损害您的客户群。
无论是长时间还是短时间的停机,每一分钟都很重要。安迪·格罗夫说得好,“成功滋生自满”,这是真的。自满滋生失败”。
猿人军队
混沌工程并不是一个新概念。早在 2011 年,网飞就开始开发一套被称为“猿猴军”的开源工具。这些工具旨在测试其亚马逊网络服务基础设施的安全性、可靠性和弹性,包括像混沌猴、和看门猴这样的大牌。
混沌猴是网飞的第一个工具,它通过随机重启服务器来工作。虽然难以置信的创新,但它似乎已经在网上臭名昭著,部分原因是它偏离了混沌工程的现代基础。一般来说,在繁忙时期随意破坏东西是不明智的,而是要使用控制和措施来了解弱点(除非,像网飞一样,你有一个庞大的工程师团队排队包猴子说!)
网飞随后引入了一整套猴子来合作,包括混沌孔(它消灭了整个 AWS 区域颤抖)和潜伏猴子(它引入了通信延迟来模拟真实世界的退化和中断)。最近,猴子已经被单独开发,许多被构建到 Spinnaker,网飞的“开源多云连续交付平台”
你可以在网飞科技博客上阅读关于猿人军队和网飞令人难以置信的混沌工程项目的详细信息。
平静中的混乱
包括 Salesforce、亚马逊和优步在内的其他公司多年来一直在使用弹性测试来提高可靠性,因为如此多的项目都是开源的,所以接受混乱并不困难。
这里有很棒的论坛(包括 Chaos 社区 )以及丰富的产品,包括 VMware 的“”Mangle,它被描述为一种工具,可以让你:
“…针对应用程序和基础架构组件无缝运行混沌工程实验,以评估弹性和容错能力。它旨在引入几乎没有预先配置的故障……”
也有合法的全面服务,如超级酷的’ Gremlin ',它提供了一个平台,允许您通过多种故障模式在您的堆栈中引入“攻击”。
作为一种实践,它还不是很标准。即使这不一定是有史以来最困难的过程,公司也希望得到经验丰富的开发人员的保证,他们可以安全地设计混乱,这可能很难 1)找到,2)投资。
尽管最终,随着新出现的威胁变得更加复杂,持续测试的需求只会变得更加必要;随着客户对功能系统依赖的增加,出错的空间缩小了。
正如比尔·盖茨 5 年前警告我们的那样:
“没有必要恐慌……但我们需要继续前进”。
使用 Detectron2 对自定义数据进行字符识别和分段
详细说明
利用迁移学习的力量
目录
- 什么是探测器 2?
- 项目设置
- 建立模型
- 培训和评估
- 结果
- 资源
什么是探测器 2?
Detectron2 是一个开源的对象识别和分割软件系统,它实现了最先进的算法,是脸书人工智能研究(FAIR)的一部分。这是 PyTorch 对其先前版本 Detectron 的彻底重写,它源自 MaskRCNN-Benchmark 。
您可以从 PyTorch DevCon19 上看到 Detectron2 的详细信息,以及基准比较、不同的应用程序、定制,以及关于其工作性质的具体细节。
Detectron 还提供了一个由 Detectron2 训练的大型基线集合,您可以从模型动物园开始访问代码。使用 FAIR 提供的笔记本来玩 Detectron2。
侦探 2 初学者教程
colab.research.google.com](https://colab.research.google.com/drive/16jcaJoc6bCFAQ96jDe2HwtXj7BMD_-m5)
项目设置
我们将开发一个“泰卢固语字符”的字符识别和分割。为了建立这个项目,我们需要适合上述机器学习任务的数据。由于没有足够的可用数据,我们需要收集自定义数据。
资料组
使用文章“如何为字符识别和分段准备自定义数据集?”创建您自己的自定义数据,其中包括工具和程序来收集数据和预处理,并建立数据的注释。
本文是泰卢固语字符识别研究的一部分。它侧重于为…创建自定义数据集
towardsdatascience.com](/how-to-prepare-a-custom-dataset-for-character-recognition-and-segmentation-c39f6bf3690)
项目结构
在这里,您可以看到由文件和目录组成的项目结构,例如 test_data 和 train_data 由用于训练和测试模型的图像和注释组成。
| Detectron2_Telugu_Characters.ipynb
| label2coco.py
| resize.py
| test.json
| train.json
| Viewer.ipynb
|
+---results
| res1.PNG
| res2.PNG
| res3.PNG
| res4.PNG
| res5.PNG
| res6.PNG
| res7.PNG
|
+---test_data
| img1.json
| img1.png
| img10.json
| img10.png
| img11.json
| img11.png
| img12.json
| img12.png
| img13.json
| img13.png
| img14.json
| img14.png
| img15.json
| img15.png
| img16.json
| img16.png
| img17.json
| img17.png
| img18.json
| img18.png
| img19.json
| img19.png
| img2.json
| img2.png
| img20.json
| img20.png
| img3.json
| img3.png
| img4.json
| img4.png
| img5.json
| img5.png
| img6.json
| img6.png
| img7.json
| img7.png
| img8.json
| img8.png
| img9.json
| img9.png
|
+---test_images
| 81XtS7O3nUL._SL1500_.jpg
| alpha1.jpg
| download.jfif
| images (1).jfif
| images (2).jfif
| images (2).png
| images (3).jfif
| images (3).png
| images (4).jfif
| images (4).png
| images (5).jfif
| images (5).png
| images (6).jfif
| images (7).jfif
| images.jfif
| images.png
| test_1.jpg
| x1080.jfif
|
\---train_data
img1.json
img1.png
img10.json
img10.png
img100.json
img100.png
img101.json
img101.png
img102.json
img102.png
img103.json
img103.png
img104.json
img104.png
img105.json
img105.png
img106.json
img106.png
img107.json
img107.png
img108.json
img108.png
img109.json
img109.png
img11.json
img11.png
img110.json
img110.png
img111.json
img111.png
img112.json
img112.png
img113.json
img113.png
img114.json
img114.png
img115.json
img115.png
img116.json
img116.png
img117.json
img117.png
img118.json
img118.png
img119.json
img119.png
img12.json
img12.png
img120.json
img120.png
img121.json
img121.png
img122.json
img122.png
img123.json
img123.png
img124.json
img124.png
img125.json
img125.png
img126.json
img126.png
img127.json
img127.png
img128.json
img128.png
img129.json
img129.png
img13.json
img13.png
img130.json
img130.png
img131.json
img131.png
img132.json
img132.png
img133.json
img133.png
img134.json
img134.png
img135.json
img135.png
img136.json
img136.png
img137.json
img137.png
img138.json
img138.png
img139.json
img139.png
img14.json
img14.png
img140.json
img140.png
img141.json
img141.png
img142.json
img142.png
img143.json
img143.png
img144.json
img144.png
img145.json
img145.png
img146.json
img146.png
img147.json
img147.png
img148.json
img148.png
img149.json
img149.png
img15.json
img15.png
img150.json
img150.png
img151.json
img151.png
img152.json
img152.png
img153.json
img153.png
img154.json
img154.png
img155.json
img155.png
img156.json
img156.png
img157.json
img157.png
img158.json
img158.png
img159.json
img159.png
img16.json
img16.png
img160.json
img160.png
img161.json
img161.png
img162.json
img162.png
img163.json
img163.png
img164.json
img164.png
img165.json
img165.png
img166.json
img166.png
img167.json
img167.png
img168.json
img168.png
img169.json
img169.png
img17.json
img17.png
img170.json
img170.png
img171.json
img171.png
img172.json
img172.png
img173.json
img173.png
img174.json
img174.png
img175.json
img175.png
img176.json
img176.png
img177.json
img177.png
img178.json
img178.png
img179.json
img179.png
img18.json
img18.png
img180.json
img180.png
img181.json
img181.png
img182.json
img182.png
img183.json
img183.png
img184.json
img184.png
img185.json
img185.png
img186.json
img186.png
img187.json
img187.png
img188.json
img188.png
img189.json
img189.png
img19.json
img19.png
img190.json
img190.png
img191.json
img191.png
img192.json
img192.png
img193.json
img193.png
img194.json
img194.png
img195.json
img195.png
img196.json
img196.png
img197.json
img197.png
img198.json
img198.png
img199.json
img199.png
img2.json
img2.png
img20.json
img20.png
img200.json
img200.png
img21.json
img21.png
img22.json
img22.png
img23.json
img23.png
img24.json
img24.png
img25.json
img25.png
img26.json
img26.png
img27.json
img27.png
img28.json
img28.png
img29.json
img29.png
img3.json
img3.png
img30.json
img30.png
img31.json
img31.png
img32.json
img32.png
img33.json
img33.png
img34.json
img34.png
img35.json
img35.png
img36.json
img36.png
img37.json
img37.png
img38.json
img38.png
img39.json
img39.png
img4.json
img4.png
img40.json
img40.png
img41.json
img41.png
img42.json
img42.png
img43.json
img43.png
img44.json
img44.png
img45.json
img45.png
img46.json
img46.png
img47.json
img47.png
img48.json
img48.png
img49.json
img49.png
img5.json
img5.png
img50.json
img50.png
img51.json
img51.png
img52.json
img52.png
img53.json
img53.png
img54.json
img54.png
img55.json
img55.png
img56.json
img56.png
img57.json
img57.png
img58.json
img58.png
img59.json
img59.png
img6.json
img6.png
img60.json
img60.png
img61.json
img61.png
img62.json
img62.png
img63.json
img63.png
img64.json
img64.png
img65.json
img65.png
img66.json
img66.png
img67.json
img67.png
img68.json
img68.png
img69.json
img69.png
img7.json
img7.png
img70.json
img70.png
img71.json
img71.png
img72.json
img72.png
img73.json
img73.png
img74.json
img74.png
img75.json
img75.png
img76.json
img76.png
img77.json
img77.png
img78.json
img78.png
img79.json
img79.png
img8.json
img8.png
img80.json
img80.png
img81.json
img81.png
img82.json
img82.png
img83.json
img83.png
img84.json
img84.png
img85.json
img85.png
img86.json
img86.png
img87.json
img87.png
img88.json
img88.png
img89.json
img89.png
img9.json
img9.png
img90.json
img90.png
img91.json
img91.png
img92.json
img92.png
img93.json
img93.png
img94.json
img94.png
img95.json
img95.png
img96.json
img96.png
img97.json
img97.png
img98.json
img98.png
img99.json
img99.png
建立模型
在本节中,我们将看到如何使用 Detectron2 构建一个模型来执行泰卢固语字符识别和分段。
注册 COCO 数据集
因为我们遵循上下文中的公共对象(COCO)数据集格式,所以我们需要将训练和测试数据注册为 COCO 实例。代码如下:
我们需要训练集和 dataset_dicts 的元数据,即训练图像的内部格式 os 注释。
让我们来看一些训练样本:
训练数据样本-按作者分类的图像
我们使用的是来自模型动物园的科科预训 R50-FPN 面具 R-CNN 模型。下一步是使用配置文件配置模型,加载权重并设置阈值(在本例中为 0.5)
培训和评估
设置参数
这里,我们使用先前 COCO 注册的数据,即训练和测试数据,工人数量为 4,每批加载模型权重和图像的路径为 2,基本学习率为 0.001,最大迭代次数为 200,类数量为 6。
在这里,您可以看到培训数据的详细信息:
在这里,总损失、分类损失和不同指标等值被描绘为图形,并使用 tensorboard.dev 显示。以下是链接:
[## 培训详细信息—使用 Detectron2 进行泰卢固语字符识别和分段
使用张量板的 tring 图
tensorboard.dev](https://tensorboard.dev/experiment/hjZr4HW0QFq1z4yBGBpBPg/#scalars)
估价
COCOEvaluator
用于评估测试数据集,评估结果保存在“输出”目录中。inference_on_dataset
函数还为给定的模型和数据集提供精确的速度基准。
以下是输出:
结果
即使平均精度(AP)不大于 0.81%。只考虑 200 幅图像作为训练数据,就能产生几乎准确的预测,这是一个更好的迹象,也是很有希望的。
这里是几个看不见的样本给了模型,结果是:
三分模型对看不见的图像的预测——作者提供的图像
您可以使用这种方法,通过 Detectron2 实现您自己的对象识别和分割系统。
资源
Detectron2 是脸书人工智能研究所的下一代软件系统,实现了最先进的物体检测…
github.com](https://github.com/facebookresearch/detectron2) [## PyTorch
开源深度学习平台,提供从研究原型到生产部署的无缝路径。
pytorch.org](https://pytorch.org/) [## 脸书艾出版公司
研究领域著名论文近期出版物基础和应用近期项目
ai.facebook.com](https://ai.facebook.com/results/?q&content_types[0]=publication&sort_by=relevance&view=list&page=1) [## 教程—detector 2 0 . 1 . 3 文档
编辑描述
detectron2.readthedocs.io](https://detectron2.readthedocs.io/tutorials/index.html)
CharacterBERT
来自字符的单词级开放词汇表示
CharacterBERT 是什么,和 BERT 有什么不同?
CharacterBERT 是 BERT 的一个变体,它试图回到更简单的时代,那时模型为单个单词(或者更确切地说,令牌)生成单个嵌入。在实践中,唯一的区别是不依赖于文字块 , CharacterBERT 使用一个 CharacterCNN 模块 ,就像 ELMo*【1】*中使用的那个一样。
下图显示了 CharacterCNN 的内部机制,并将其与 BERT 中的原始单词块系统进行了比较。
BERT 与 CharacterBERT 中的上下文无关标记表示(来源:【2】)
我们假设单词“Apple”是一个未知单词(即它没有出现在 BERT 的词块词汇表中),那么 BERT 将其拆分为已知词块:【Ap】和[##ple】,其中##用于指定不在单词开头的词块。然后,使用字块嵌入矩阵嵌入每个子字单元,产生两个输出向量。
另一方面, CharacterBERT 没有单词表,可以处理任何*输入标记,只要它不是不合理的长(即少于 50 个字符)。CharacterBERT 并没有拆分“Apple”,而是将它解读为一个的字符序列:【A】,【p】,【p】,【l】,【e】。然后使用字符嵌入矩阵表示每个字符,产生一系列字符嵌入。然后这个序列被送到多个 CNN,每个 CNN 负责一次扫描 n 个字符,n =[1…7].所有 CNN 的输出被聚集成一个单一的矢量,然后被投射到期望的维度,使用高速公路层*【3】*。这个最终投影是单词“Apple”的上下文无关表示,它将与位置和片段嵌入相结合,然后像在 BERT 中一样被馈送到多个变换器层。
为什么是 CharacterBERT 而不是 BERT?
CharacterBERT 几乎充当了 BERT 的替代品
- 为任何输入标记生成单个嵌入
- 不依赖于单词表
第一点显然是可取的,因为使用单个嵌入比每个令牌使用可变数量的单词块向量要方便得多。至于第二点,当在专业领域(如医疗领域、法律领域……)工作时,这一点尤为重要。事实上,在构建 BERT 的专门版本(例如 BioBERT*【4】、blue BERT【5】和一些 SciBERT【6】*模型)时,通常的做法是在一组专门的文本上重新训练 原始模型。因此,大多数 SOTA 专用模型保留了原来的通用领域词表,这不适合专用领域应用。
下表显示了原始通用领域词汇与建立在医学语料库上的医学词块词汇之间的差异:MIMIC*【7】和 PMC OA【8】*。
使用不同领域的词块词汇表对特定领域术语进行标记化(来源:【2】)
我们可以清楚地看到,伯特的词汇是不适合专业术语(例如“胆总管结石”被拆分为【cho,led,och,oli,thi,asi,s】)。医学术语更适用于**,但它也有其局限性** 和(例如,将“borygmi”转换为[bor,bor,yg,mi])。
因此,为了避免任何可能来自使用错误单词表的偏见,并努力回到概念上更简单的模型,提出了 BERT 的变体:CharacterBERT。
CharacterBERT 如何与 BERT 进行对比测试?
BERT 和 CharacterBERT 在一个经典场景中进行比较,在该场景中,通用模型在作为专用版本的预训练的初始化之前被预训练。
注 : 我们在这里重点关注英语和医学领域。
培训前语料库(来源:【2】)
为了尽可能的公平起见,BERT 和 CharacterBERT 都是在 完全相同的条件下从头开始预训练的。然后,在多个医疗任务上评估每个预训练模型。我们举个例子。
评估任务(来源:【2】)
i2b 2/VA 2010*【9】*是一项包含多项任务的竞赛,其中包括用于评估我们模型的临床概念检测任务。目标是检测三种类型的临床概念:问题、治疗和测试。上图的最左边给出了一个例子。
像往常一样,我们通过在训练集上进行首次训练来评估我们的模型。在每次迭代中,模型在单独的验证集上被测试,允许我们保存最佳迭代。最后,在经历所有迭代之后,使用来自最佳迭代的模型在测试集上计算分数(这里是严格的 F1 分数)。然后,使用不同的随机种子将整个过程重复 9 次以上,这允许我们考虑一些方差,并将最终模型性能报告为:均值标准差。
注 : 更多细节详见论文[2]。
结果如何?
来源:[2]
在大多数情况下, CharacterBERT 的表现优于其对应的 BERT。
注 : 唯一的例外是 ClinicalSTS 任务,其中医疗角色 BERT 的得分(平均)低于 BERT 版本。这可能是因为任务数据集很小(1000 个示例,而其他任务平均为 30,000 个示例),应该进行调查。
好处:对噪音的鲁棒性
除了纯粹的性能,另一个有趣的方面是模型是否对噪声输入具有鲁棒性。事实上,我们在 MedNLI 任务*【10】*的嘈杂版本上评估了 BERT 和 CharacterBERT,其中(简单地说)目标是说出两个医学句子是否相互矛盾。这里,X%的噪声水平意味着文本中的每个字符都有 X%的概率被替换或交换。结果显示在下图中。
BERT 和 CharacterBERT 在嘈杂的(拼错的)MEDNLI 版本上进行微调(来源:【2】)
正如你所看到的,医学 CharacterBERT 模型似乎比医学 BERT 更健壮:当向所有分割添加噪声时,两个模型之间大约 1%精度的初始差距增长到大约 3%,当仅在测试集中用噪声给模型带来惊喜时,大约 5%。
CharacterBERT 的缺点呢?
CharacterBERT 的主要缺点是其较慢的预训速度 。 这是由于:
- 训练速度较慢的 CharacterCNN 模块;
- 但主要是因为该模型工作在记号级 :
它在每次预训练迭代中更新大量记号词汇表。
*/!* :然而, CharacterBERT 在推理过程中与 BERT 一样快(实际上,甚至更快一点)并且预训练模型可用所以你可以完全跳过预训练步骤😊!
结论
总而言之,CharacterBERT 是用一个 CharacterCNN(就像 ELMo 一样)代替了 WordPiece 系统的 BERT 的简单变种。对多个医疗任务的评估结果表明,这种变化是有益的:提高了性能和对拼写错误的鲁棒性。希望这个模型能激发更多基于单词级开放词汇转换器的语言模型的研究:将同样的想法应用于艾伯特*【11】,厄尼【12】*…
原文*😗
https://arxiv.org/abs/2010.10392代号&预训车型*😗
https://github.com/helboukkouri/character-bert参考文献*😗
**【1】彼得斯、马修·e 等深层语境化的词语表述。 arXiv 预印本 arXiv:1802.05365 (2018)。【2】**El Boukkouri,Hicham,et al .character BERT:调和 ELMo 和 BERT,用于来自字符的单词级开放词汇表示。 arXiv 预印本 arXiv:2010.10392 (2020)。 ***【3】***斯利瓦斯塔瓦、鲁佩什库马尔、克劳斯格雷夫、于尔根施密德胡伯。公路网。arXiv 预印本 arXiv:1505.00387 (2015)。
***【4】***Lee,Jinhyuk,et al .BioBERT:一种用于生物医学文本挖掘的预训练生物医学语言表示模型。生物信息学36.4(2020):1234–1240。
**彭、王一凡、阎、。生物医学自然语言处理中的迁移学习:在十个基准数据集上对 bert 和 elmo 的评估。arXiv 预印本 arXiv:1906.05474 (2019)。
***【6】***贝尔塔吉、伊兹、凯尔·洛、阿尔曼·科汉。SciBERT:科学文本的预训练语言模型。arXiv 预印本 arXiv:1903.10676 (2019)。
***【7】***Johnson,Alistair 等《MIMIC-III 临床数据库》(1.4 版)。生理网(2016)https://doi.org/10.13026/C2XW26。
***【8】***PMC OA 语料库:https://www.ncbi.nlm.nih.gov/pmc/tools/openftlist/
***【9】***uz uner,zlem 等. 2010 i2b2/VA 对临床文本中概念、断言、关系的挑战。美国医学信息学协会杂志18.5(2011):552–556。
***【10】***Shiva de,柴坦尼亚。“MedNLI —临床领域的自然语言推理数据集”(版本 1.0.0)。生理网(2019)https://doi.org/10.13026/C2RS98。
***【11】***兰,等.阿尔伯特:一个用于语言表征自我监督学习的 lite BERT。arXiv 预印本 arXiv:1909.11942 (2019)。
**【12】孙,于等. ERNIE 2.0:语言理解的持续预训练框架。AAAI。2020.
完成人: Hicham El Boukkouri 、Olivier Ferret、Thomas Lavergne、Hiroshi Noji、Pierre Zweigenbaum 和 Junichi Tsujii
基于特征的新产品预测相似度
安德烈·亨特在 Unsplash 上的照片
这是解决零售商在组合中加入新产品时面临的最大问题之一的方法。
“我能卖多少钱?”是每个零售商在考虑为商店和电子商务添加新材料时都会想到的问题。
我们通常有很多技术来帮助我们预测和预见,但当我们谈论新产品时,我们会面临一个大问题,即如果我们没有新产品的销售数据来用于回归或时间序列算法。
那么…我们如何预测呢?
方法
解决这种数据缺乏的一种方法是找到一种与新产品相似的产品,并复制其历史销售数据的一部分,有了它,您现在可以应用您喜欢的预测技术。
基本上,你可以用几种不同的方法来比较产品,除此之外,每个企业都必须定义在这种分析中使用的理想特性。
定义功能后,这是该过程中最困难也是最重要的一步,您将遵循一个简单的步骤来实现您的目标:
1.对分类数据应用一键编码
应用一个热编码,我们从比较类别名称/文本之间的距离,到比较产品是否与旧产品在同一类别。
2.将定标器技术应用于数值数据
当我们谈论距离时,它总是类似于 A-B=C,但现在我们正在讨论几个特征的距离,结果听起来像是所有的 cs 之和减去所有的 Bs。
这不会有任何问题,只要列中的值的范围都是相同的,我很确定这种情况非常非常少发生。
假设我们有 3 列,一列的值范围是从 200 到 400,另一列是从 15k 到 78k,第三列是从 1 到 10。
这将产生一个问题,因为范围之间的差异将导致不同的距离标度,在这种情况下,分别为 100 秒、10000 秒和 10 秒,如果我们尝试应用距离度量而不应用标度,则第二列的重要程度将大于其他列。
所以,别忘了涂。
3.计算新产品和旧产品之间的距离
我想这是你最期待的部分,对吗?
如果是的话,我希望不会让你失望,因为解决方案真的很简单。
同样,这里您必须做的第一件事是定义您想要使用哪种距离度量。请参见下面简单有用的距离列表:
- 欧几里得的
- 曼哈顿
- 闵科夫斯基
在继续之前,您必须选择最适合您的距离度量。
对于这个项目,我使用了欧几里德距离,所以我们只用两行代码就结束了整个项目:
idx_closest = np.argmin(
[np.linalg.norm(new_obs_arr - np.array(x)) for x in df_old.values])
df_aux = df_old.iloc[idx_closest]\
.to_frame()\
.transpose()\
.reset_index()
idx_closest 是旧数据帧的参考资料的索引值,用它我们得到整个对应的行并存储在 df_aux。
4.反向独热编码
流程如何考虑物料注册的工厂代码我们必须至少为工厂代码列恢复一个热编码的流程。
要恢复它,我们应该:
- 定义由一个热编码过程创建的列。
- 仅选择包含“1”的列。
- 将其名称转换为原来的名称。
- 在流程开始时删除由 one hot 编码创建的列。
def reverse_one_hot_encoder(df, col_nm):
"""
Reverse the one hot encoding process
Parameters
----------
df : pandas.DataFrame
data frame object with the old products that are more similar the new products
col_nm : str
name of the original column
Returns
-------
df_result : pandas.DataFrame
data frame object with the old products that are more similar the new products without the OHE procress
"""
lst_stack = [x for x in df.columns if x.find(col_nm)>=0]
df_aux = df[lst_stack]
df[col_nm] = df_aux[df_aux==1]\
.stack()\
.reset_index()\
.drop(0,1)['level_1']\
.apply(lambda x: int(x.replace(col_nm+'_','')))\
.to_list()
for col in lst_stack:
df = df.drop(col, axis=1)
return df
5.计算比例因子
现在我们已经完成了比例因子步骤,也称为睡眠时间,因为我已经失去了思考它的时间。
好吧…好吧…我对这个家伙不公平,但我真的浪费了一些时间去思考这个问题,最终,导致了一些看起来太容易做到的事情,所以这可能只是我内心的愤怒试图在这里释放一点。
这就是为什么我在这上面浪费了这么多时间…
好了,记住距离步长的 A-B=C,我们可以猜测“好了,现在我已经定义了新行和旧行。那么,我为什么不,定义比例因子,只是除以 1,得到一个百分比结果呢?”
这种思维方式很好,但它的应用不太好,因为我们现在不是比较两个数字,而是试图从两个完整数据帧行的数组中获得百分比,而且没有简单的方法来做到这一点。
所以我们选择的解决这个问题的方法是定义一个数学函数,它随着我们已经计算过的距离的增加而减少。
我们认为对长距离比短距离进行更多的处罚应该是一件好事,所以我们尝试了“e^(-distance”,如果你是一个细心的人,你会注意到我说了“尝试”,这意味着它没有很好地工作。
问题是我们认为每一个被选择为相似的参考材料都应该和新的材料很接近,对吗?但在某些情况下,我们没有那么多的材料可以比较,我们最终只能得到最好的,而不是完美的匹配。
因此,为了避免距离增长过快,我们添加了结果组的平均距离值,以获得一个缓慢下降的比率。
# import Libs
import matplotlib.pyplot as plt
import statistics
import numpy as np
# simulate distance increasing
x = np.array(np.arange(0, 100, 0.001))
# get average value from distances
avg = statistics.mean(x)
# plot lines
plt.plot(x, np.exp(-(x**2)), 'b-')
plt.plot(x, np.exp(-(x**2/avg**2)), 'r-')
plt.legend(labels=['Original', 'Smothed'])
# add labels
plt.xlabel("Distance")
plt.ylabel("Saling Factor")
plt.show()
来源:作家
另一个要点是看产品价格,因为如果新产品的价格低于参考价格,这意味着它有机会卖出更多,但如果价格高于参考价格,就有可能卖出更少。
为了将这种或多或少的销售机会与比例因子相加,我们决定计算旧产品的价格占新产品的多少。
一旦我们有了基于数学函数和价格比的比例因子,我们就可以将两者相乘得到最终的比例因子。
结果
该算法导出包含五列的. csv 文件:
- 位置
- 产品
- 参考 _ 位置 _ 代码
- 参考 _ 代码
- 比例因子
来源:作家
您可以使用它来模拟新产品的历史销售数据,然后对其应用任何预测算法!
最终提示
- 安排一次会议,与您的主数据团队或任何在您的数据库中注册/创建新产品的团队进行交谈,因为他们可以很容易地告诉您新材料的初始特征。
- 明智地选择可以作为新产品参考的材料。那些你已经停止工作,但仍然存在于你的数据库中的产品或新产品(自第一次销售后不到两三个月)可能不是最好的决定,因为它们可能没有良好的历史销售曲线。
- 选择一个产品层次结构进行过滤,这样一旦减少比较样本,就可以加快合作时间,并且可能会比较更相似的产品,而不是在整个产品库中搜索。
- 不要忘记,一旦你的新产品开始销售,它将收到真正的销售数据,你应该开始使用它来预测,而不是你生成的数据。
这就是了!
嗯,有了这个,我想你现在可以通过找到一个类似的旧材料来改进你的新产品,并扩大它的销售,作为你预测工具的输入!
希望这篇文章对你有帮助!
你可以在这里看到这个项目的代码:
[## rfpcordeiro/python-基于特征相似性的预测
算法来计算和定义数据库中与新产品最相似的产品,这样我们就可以使用…
github.com](https://github.com/rfpcordeiro/python-similarity-to-characteristic-based-forecast)
特别感谢 Pierre Palud,当我澄清了无数个关于定义比例因子的最佳方式的问题时,他一直耐心等待
表征和分析网络
纽约市交通网络的初步分析
交通网络提供了一个极好的机会来确定当地人口的出行习惯、日常生活和使用数据驱动的方式来增强城市规划决策。在我们的分析中,我们专注于探索纽约市居民在 2015 年使用 1.46 亿次以上的出租车出行的出行模式。完整的代码、可视化和报告可以在 Github 库 中找到
之前工作:
基于 GPS 的交通网络已被详细研究用于交通流量分析和确定社会动态[1]。自行车共享数据集已用于根据使用概况对位置进行聚类[2]并预测自行车需求[3]基于 GPS 的出租车数据集已用于识别中国上海的移动模式[4]。
在[4]中,出行分布被描述为 3 种独立类型的组合,非负矩阵分解被用于从中国上海的 158 万次出行中识别 3 种模式。这是我们方法的核心,因为我们试图用类似的数据集来描述纽约市出租车的使用情况。之前的分析也用于从街道几何图形[5]和地铁地图[6]中生成交通网络图。
数据描述:
a) *原始数据:*纽约市出租车&高级轿车委员会自 2009 年起公开提供出租车出行数据集[7]。我们使用这个数据集进行分析。完整的数据集包含每年约 1 . 5 亿次出行&每行代表一次出行,具有起点和终点、行驶距离、出租车费用、耗时等特征。我们使用的是 2015 年的数据集,总共包含 146,112,990 次出行。为了将地理位置数据与人口普查区域结合起来,我们使用了非常有用的纽约市土地使用数据集[8]。
b) *数据转换:*我们对每次行程使用以下变量:
- 行程起始时间戳
- 起点(横向/纵向)
- 行程停止时间戳
- 停止点(横向/纵向)
- 费用
使用这些行程,我们以给定行程的开始和停止位置为节点构建我们的有向图。作为一个附加条件,我们只使用高出行次数的地点(对于给定的一对地点,一年中超过 500 次)。根据之前的工作,我们总结出将位置坐标四舍五入到小数点后两位也是一种选择,鉴于我们在分析包含 40,000 多个节点的数据集时遇到的困难,我们现在正在通过两种不同的方法来简化我们的网络:
- 5 个曼哈顿街区一个节点
- 使用 600 万次最频繁旅行获得 1275 条最频繁旅行的边
- 在我们当前的网络中,每个节点代表其周围 200 米 x200 米的区域,每条边代表给定年份中两个节点之间的总出行次数
我们从时间戳中创建月、日、工作日、一天中的时间段等特征。我们在最初的分析中面临的一个问题是,由于网络本身的地理位置,我们有一个网络,其中多个节点代表具有多个入口的同一个位置(例如,Penn Station 有多个入口和出口&我们的网络有多个节点代表同一个真实世界的位置)
相同位置:多个接近的节点
我们决定将我们的数据集与美国人口普查局的人口普查区合并,这样就解决了上述问题。我们在最终网络中有 580+个节点,并分析了作为节点的人口普查区域和作为边的两个人口普查区域之间的行程数。
探索性分析:
1.每个月的出行量(图 1)在 3 月至 5 月间达到高峰,6 月以后大幅下降。这可以直接归因于天气模式,因为通勤者应该避免在低温或雨天长途步行。
2.对于我们的完整数据集,第一个图显示了度分布,而第二个图显示了 2015 年使用至少 500 次出行的边生成的图的度分布。
3.热图(图三)显示了 2015 年每小时的相对出行密度。根据这些信息,我们总结出最繁忙的时间是早上 6 点到 9 点。我们将大部分流量归因于日常工作通勤的用户,而在周末上午 12 点至凌晨 4 点之间,流量密度显著增加。我们正在寻找一种方法,对从我们的子集生成的网络结构进行类似的分析,以创建时间流量密度可视化。
4.我们分析了旅行的费用与持续时间的关系,发现了有趣的异常数量的恒定费用旅行。我们将这些旅行归因于:
- 尖端四舍五入到最接近的 5/10
- 导致延误的相同行程内的交通延误
旅行持续时间与旅行成本
全网络分析
整个网络近似表示为其实际地理位置,我们将节点大小和行程的外度绘制为边厚。我们观察到:
- 郊区的服务少于曼哈顿、上东区/西区和市中心
- 交通枢纽也是网络枢纽,办公区是下一个最接近的中心节点
- 令人惊讶的是,东村和下东区也是整个网络中连接最少的,尽管这些地区在地理上不像郊区那样分开
当我们根据大于或等于 500 和小于 500 的旅行次数将节点分成两个子类别,并根据旅行总次数绘制入度/出度图时,出现了两个鲜明的对比。
图 5 中最上面的两个图形表示行程数大于或等于 500 的节点,蓝色图形表示入度与行程的比率,红色图形表示出度。瓶二图是针对行程数少于 500 的节点。
对于旅行次数> =500 的情况,图表最右侧的大部分异常值的物理位置在麦迪逊广场花园、佩恩车站等市内景点。这意味着大量的人从相对较少的地方来到这些景点,并且这些进来的地方中的大多数位于曼哈顿(例如,来自大约 200 个地方的 250,000 次旅行。平均 1250 次旅行)。
对于出行次数> =500 的情况,图表最右侧的大多数异常值的物理位置都在机场(拉瓜迪亚机场和 JFK 机场),它们的出行与学位比率要小得多,这意味着有少量的人来自各种地方。我们可以通过观察图的“尾部”来轻松识别连通性低的地方,我们发现这个比例越小,节点离曼哈顿越远。
跨纬度和经度的网络节点分布
我们将网络分为 3 个社区,使用 igraph 库中的多级社区检测。上面的图将这些社区按大小映射到全年离开每个节点的旅行次数。这三个社区可以描述如下:
- 蓝色标签代表社区 A ,节点整齐地落在曼哈顿和邻近的新泽西地区,它们被证明是连接最好的节点。他们与曼哈顿(曼哈顿和新泽西地点)和其他两个社区(仅曼哈顿地点)联系紧密
- 绿色标签代表社区 B ,它代表与城市北部的出租车连接性最高的位置,这反过来是因为城市交通连接性(公交车/地铁等)最差——通常是向北
- 红色标签代表**社区 C,**代表北纽约市,皇后区&布朗克斯区,我们知道它们在同一个社区中,因为总体上向南的连通性最低。
- 我们想证明 Dash & Rae[11]使用国家数据集确定的郊区结构在地方层面是否成立,这就是为什么这个结果很有趣——基于我们的初步探索,我们的推断是,在一个城市内,它不成立。
我们绘制了离开纽约主要地区的旅行快照,这表明,曼哈顿是所有人中联系最紧密的,而大多数从下东区、东村和布鲁克林出发的旅行最终都前往纽约的北部。一小部分最终进入了社区本身。
- 城市与其他网络的不同之处在于,较小的重新路由通常非常简单,即绕过一个街区很容易,通常不会导致成本、时间或路由长度的显著变化。
- 像纽约这样的城市除了结构枢纽(地铁枢纽、机场和公交枢纽)之外,不会有单一的关键位置,这一点从程度中心性分析中非常明显。最接近纽约市中心位置的是它的街道,特别是百老汇和第六大道。百老汇从北向南延伸,而第六大道从南向北延伸(单行道)。
- 从分析中得出的另一个有趣的观察结果是,东村& below 在出租车使用方面与郊区相似。这令人惊讶,因为正如托布勒所说,地理第一定律是“一切都与其他一切相关,但近的东西比远的东西更相关。”[12]&第一个定律是空间相关性和空间自相关的基础,专门用于空间插值的反距离加权方法[13]。
参考文献:
- 页(page 的缩写)卡斯特罗、张、陈、李、潘。从出租车 gps 追踪到社会和社区动态:一项调查。ACM 计算机。Surv,2013 年 12 月。
- C.艾蒂安和欧·拉蒂法。基于模型的计数序列聚类在自行车共享系统使用挖掘中的应用。ACM Trans 智能。系统。技术。,2014 年 7 月
- D.Singhvi,S. Singhvi,P. Frazier,S. Henderson,E. Mahony,D. Shmoys 和 D. Woodard。预测纽约市自行车共享系统的自行车使用量。2015 年在 AAAI 举行的研讨会。
- 彭春、金霞、黄家昌、史敏、P (2012)城市出租车出行中的集体人员流动模式。《公共科学图书馆·综合》7(4):e 34487 . doi:10.1371/journal . pone . 20048363637
- 页(page 的缩写)克鲁西蒂、v .拉托拉和 s .波塔。城市街道空间网络的中心性度量。物理评论 E,73(3):036125,2006。
- derble S(2012)地铁系统的网络中心性。PLoS ONE 7(7): e40575。doi:10.1371
- 纽约市出租车数据:http://www . NYC . gov/html/TLC/html/about/trip _ record _ data . shtml
- 纽约市土地使用:【https://www1.nyc.gov/site/planning/index.page
- W.崔,周海辉,瞿海辉,黄炳春,李,“基于几何的边聚类在图形可视化中的应用”,IEEE 可视化与计算机图形学学报,第 14 卷,第 6 期,第 1277-1284 页,2008 年 11-12 月 doi: 10.1109/TVCG.2008.135
- Holten,D . & Wijk,J,2009,“图形可视化的力定向边缘捆绑”,计算机图形论坛,28,3,第 983-990 页,Business Source Premier,EBSCO 主持人,2016 年 11 月 12 日查看。
- Dash Nelson G,Rae A (2016)美国的经济地理:从通勤到大区域。PLoS on 11(11):e 0166083 . doi:10.1371/journal . pone . 0166083
- 一部模拟底特律地区城市发展的电脑电影。经济地理 1970 年;46: 234–240.
- https://en . Wikipedia . org/wiki/to bler ’ s _ first _ law _ of _ geography
原载于nilesh-Patil . github . io。
夏琳·钱布利斯:从心理学到自然语言处理和应用研究
技术领域的女性系列
Primer 公司一位机器学习工程师的采访。艾
图片经 Charlene 许可后重新使用,原文来源:https://towards data science . com/using-word 2 vec-to-analyze-news-headlines-and-predict-article-success-CDE da 5 f 14751
在过去的十年中,人们对数据科学的兴趣呈指数级增长,越来越多的人开始转向该领域。2020 年,关于转入数据科学职业的文章和 YouTube 视频比比皆是。然而,对于许多人来说,关于这种转变的许多关键问题仍然存在:你如何从社会科学背景进入数据科学?心理学等领域中哪些最重要的技能可以应用于数据科学?
Charlene Chambliss 拥有一条鼓舞人心的非传统职业道路。目前,她利用最先进的自然语言处理技术“构建更智能的工具来分析海量信息。”在过去的两年中,她撰写了关于 NLP 主题的文章,包括用于命名实体识别的 BERT 和用于新闻标题分析的 word2vec 等等。然而,在她目前担任机器学习工程师之前,她曾在市场营销、心理学、研究领域担任职务,并在护肤品行业担任数据科学家。
Amber:你能告诉我们一些你的背景吗?
夏琳:当然!我走了一条不同寻常的数据科学之路,所以我将从头开始,详细阐述一下这条路对我的意义。
我在一个农业小镇(加利福尼亚州的莫德斯托)长大,我父亲在那里的西夫韦公司工作(现在也是!)而我妈妈是个全职妈妈。他们真的让我意识到认真对待我的教育的重要性,这对我来说很好,因为我喜欢学习,我喜欢让他们以我为荣。
我从小就想成为一名科学家。我喜欢修补和学习事物如何运作。我妈妈满足了我的好奇心,带我去了图书馆(我会带着一摞 12 本书回家),让我在厨房里帮她(烹饪=化学!),偶尔给我买玩具科学包。
这种兴趣一直持续到高中和大学一年级,那时我决定学习化学工程,成为一名香料科学家,因为化学是我最喜欢的学科。我(很可爱地)认为,我应该简单地发明新的口味,让健康食品味道更好,这样人们就可以更容易地吃沙拉和蔬菜,从而整体上更健康。我讨厌吃沙拉和蔬菜,所以 17 岁的我认为我很聪明,这是一个惊人的解决方案。
“一般来说,学习社会科学是习惯于处理模糊、难以定义的问题的一种很好的方式,这种技能是交付决策者实际上会感到舒适的数据科学工作的关键。”
整个高中时期,我都保持着对教育的专注和职业道德,并在斯坦福大学读了本科。坦白地说,这对我来说是非常意外的——我以为如果我真的幸运的话,我会去加州大学戴维斯分校和加州大学伯克利分校。大约一半从我高中毕业的人最终都没有上大学,所以即使是这些人也觉得是相当高的志向。那年,在我的 500 名毕业班学生中,我想只有大约 5 人进入了“顶尖学校”(伯克利、斯坦福、哈佛)。
当我去斯坦福的时候,我真的没有预料到的是我所面临的文化冲击。斯坦福大学的绝大多数学生来自高收入家庭,家庭收入中值为 167,500 美元。总的来说,他们是那种有受过大学教育的专业父母的孩子,上的是镇上最好的、资金最充足的高中,在他们遇到困难的任何领域,都请了家教来帮助他们。与此同时,我在 HH 收入大约是其四分之一的情况下长大,我在某些领域相对于同龄人的准备程度反映了这种差异。(我的父母和老师都很好,已经尽了最大努力,但资源有限,我们能做的也就这么多。)
突然,我发现自己对自己的能力(尤其是数学和计算机科学方面的能力)感到非常不自信,真的怀疑自己是否能达到其他学生的水平。我没有意识到我们的背景如此不同,因为没有人到处谈论这种事情,所以我把表现的差异归因于我自己能力的缺乏。我也是我高中唯一一个在那年去斯坦福的人,所以当我到那里的时候我不认识任何人,也没有人可以谈论我正在经历的事情。在斯坦福大学的日子里,冒名顶替的感觉从未真正消失过,但至少我变得更擅长伪装,直到我成功为止。
我的确在斯坦福上完了学,尽管我最终没有攻读化学工程,而且还需要在大三后休学一年,以帮助处理我父母的离婚(我妈妈是残疾人,需要帮助卖掉我们家的房子并搬出去)。2017 年,我获得了心理学学士学位——这是我直系亲属中第一个获得 4 年制学位的人——但我觉得由于缺乏指导和榜样,我在这一路上犯了很多错误。事实证明,即使只是寻找我的第一份工作也很困难,因为我真的只能向职业中心寻求建议,如何为“受过教育的专业人士”在就业市场上导航。他们提供的小册子和 30 分钟的咨询并不能真正填补所有的空白,但经过大量的研究和参加招聘会后,我找到了一份为一家小机构做社交媒体营销的工作。
作为一个只有学士学位的心理学专业学生,我没有过多地谈论一个人的财务和整体职业前景,但在我从事那份工作的过程中,我清楚地认识到,除非我做出重大改变,否则我不会获得我想要的职业发展。所以在 2017 年底,我决定进入数据科学,特别是专注于机器学习,并投身于 GRE 研究,以便我能在 2018 年秋季入学前及时提交申请。(在下一节中,我将更详细地介绍我为什么选择数据科学,尤其是 NLP。)
我按计划注册了我的硕士学位,完成了我的课程,并在课外尽可能多地学习,尤其关注统计学、线性代数、Python 和机器学习。学位课程都是 R 语言的,所以我完全靠自己学习 Python,结合了在线课程和一本 1500 多页的教科书(学习 Python )。在第一年快结束的时候(2019 年春天),我在 Curology 找到了一份数据科学实习,并在那里工作了整个秋天。然后,在我第二年年初,我通过 SharpestMinds 与一位了不起的导师尼娜·洛帕蒂娜(Nina Lopatina)合作,因为我决定专注于获得一个做 NLP 的角色。在为期 10 周的指导结束时,我开始找工作,并在 2019 年 12 月获得了全职加入 Primer 的邀请。
我需要推迟我的 MS 课程的最后一个学期开始全日制学习,这是一个艰难的决定,但这种经历对我来说更重要,所以我这样做了。事实证明,这个决定非常及时,因为仅仅几个月后,新冠肺炎·疫情就摧毁了最近的毕业生就业市场。我有同学还在努力找工作,我也很容易陷入同样的境地。我意识到我非常幸运,我掷骰子的结果如此之好。
总而言之,从相对较少的数学和编程经验的背景下,从市场营销过渡到全职机器学习工程师角色花了大约 2 年时间。(2017 年之前,我只上过单变量微积分,基础/入门统计,一门 Java 编程课。)
答:在从事数据科学行业之前,你在斯坦福大学学习心理学。你能告诉我们你在那里的经历是如何影响你进入数据科学的职业道路的吗? C:一般来说,研究社会科学是习惯于处理模糊的、难以定义的问题的一种很好的方式,这种技能是交付决策者实际上会感到舒适的数据科学工作的关键。这是一种墨菲定律思维模式,适用于实验结果:我已经变得非常关注任何可能“混淆”或以其他方式影响我的分析结果的东西,并且我可以在适当的时候提醒注意潜在的警告。这样,涉众可以利用他们的领域知识来决定他们认为这些事情对我们的结论是否重要,我们可以相应地调整实验/分析。
除此之外,我可能已经花了整整一年半的时间在心理学实验室进行实验。虽然这类职位涉及很多“繁重的工作”,如数据输入,但你也可以坐在前排,了解科学研究实际上是如何进行的,从数据收集到最终的统计分析,你还可以参与其中的一些决策。这让我为数据科学工作流做好了充分的准备,也给了我一些实用的技能(比如处理电子表格)和一种积极进取的态度,这在以后会很有帮助。
答:之前,你在 Curology 担任数据科学实习生。你能讨论一下数据科学在护肤品行业是什么样的吗?你和你的团队寻求回答什么类型的问题?你在 Curology 工作期间做过的最有趣的项目是什么? C:我认为我在 Curology 的经历是一个很好的例子,说明了数据科学在 D2C(直接面向消费者)业务中的一般情况,尤其是在创业背景下。通常情况下,以消费者为中心的企业首先需要的数据(当然是在数据工程师之后)实际上只是大量的描述性统计数据,通常被称为“消费者洞察”
因为我在用户获取部门工作,所以我特别专注于回答问题,这些问题将帮助我们在许多不同的获取渠道中做出更好的营销决策。80%的时间,我都在针对我们的数据仓库编写 SQL,以更好地理解不同客户群的行为,并跟踪该行为如何随时间发展,并将这些发现转化为可解释的仪表板,供团队的其他成员使用。其余 20%的时间,我使用 Python 来分析和可视化客户的调查反馈,以更好地了解他们喜欢和需要 Curology 的什么。
所以我要问和回答的一些问题是:
- 顾客的护肤目标如何根据他们的人口统计数据(性别、年龄等)而变化?)?对每一部分客户来说,什么是最重要的,我们如何才能确保满足他们的每一项需求?
- 我们的哪些渠道拥有“最顽固”的客户,即倾向于与我们呆在一起时间最长的客户?还有其他行为或偏好与订阅时长相关吗?
- 我们能否建立一个模型,利用我们拥有的客户行为历史数据来预测注册时的客户终身价值(LTV)?(由于抽样考虑,当您的客户群增长迅速时,这实际上非常困难!)
我学到了很多。用 SQL 做数据分析不仅仅是帮助你学习 SQL;它实际上帮助你进行分析性思考,尽管这听起来很老套。您首先必须学会将某人关于客户的自然语言问题翻译成适当的指标(这些指标通常有不同的过滤条件和假设,这取决于预期的用例!),然后还要学习如何使用 SQL 代码以数学和技术上正确的方式实际执行它。有时,您甚至必须确保使用正确的表/数据,因为表已经过时,由于管道中的错误,并非所有数据都进入了表中,或者 X 度量在 6 个月前才开始被跟踪,等等。做这种工作时,你需要牢记许多实际的考虑因素。做坚如磐石的数据分析和机器学习一样具有挑战性,尽管有时出于不同的原因。
图片由 Charlene Chambliss 提供
你一直都知道从事数据科学工作是你想做的吗?是什么激励你从事自然语言处理的职业?另外,你能告诉我们一些关于你的 初级读本的工作吗?Ai 应用研究团队长什么样? C:一点也不!我不认为我们今天在数据科学领域工作的许多人能够预见到这个领域的崛起。直到大学四年级,我才真正了解应用统计学在私营部门的广泛应用。
当我获得学士学位毕业并开始我的第一份市场营销工作时,我很快发现这并不适合我。我开始研究我的替代方案,看看是否有一个职业更适合我的个性和价值观(坦率地说,工资更高,因为入门级的营销工资仅够在湾区过上温饱的生活)。
经过几个月的挖掘,我发现了数据科学。这是一项具有智力挑战性的工作,将对经济和整个社会产生巨大影响。不仅如此,我还注意到从事数据科学职业的人比我在其他地方看到的更关心伦理。看到这一领域的人们真正关心他们的工作会对人们产生怎样的影响,真的让我产生了共鸣,这最终帮助我决定做出转变。
也就是说,我仍然不确定,因为我在大学时有过数学和计算机科学的负面经历,我不确定我能应付得来(哈哈)。在斯坦福大学的第一个学期,我在一门微积分课程和一门计算机科学课程中取得了有生以来最差的成绩,这让我开始认真思考自己是否适合学习这些课程。当我开始这段旅程时,我必须说服自己,我可以通过使用客观的衡量标准而不是自己的感觉来取得成功:“我在 SAT 考试中得了 X 分,而 CS 专业学生在 SAT 考试中的平均分是 Y(其中 X > Y),所以我应该能够像这个领域的其他人一样学习数学和其他材料……”
“我喜欢 NLP,因为我可以直接帮助人们摆脱噪音,开始了解他们需要知道的东西,以便更有效地生活和工作。”
后来,在攻读统计学硕士学位期间,我发现我本科表现不佳的主要原因是缺乏良好的学习习惯,以及对数学这门学科缺乏兴趣。在高中,我可以等到考试前一天晚上才开始学习,并且从不在课外阅读课本,但在斯坦福不再是这样了。随着时间的推移,我改进了我的学习习惯,当我在高年级选修了两门统计学课程时,我已经能够在这两门课程上都获得高分了。类似地,当我开始了解数学和统计数据通过数据科学应用于现实世界的一些令人着迷和意想不到的方式时,我的头脑真正意识到了数学的好处,突然间掌握数学的动力就在那里了。在我注册的三个学期里,我的硕士课程都是全 A。
想到就在几年前,我真的不喜欢数学和编程,但现在我每天都在使用它们,并真正享受其中,这仍然有点疯狂。我很想强调一点,不要把自己放进一个“数学人”/“不是数学人”的盒子里有多重要,编程也是一样。这两种技能都是简单的工具,这些工具具有不可思议的力量,可以让你在你关心的任何其他领域或兴趣中变得更加有效,无论是艺术、法律、社会科学,还是更传统的协同作用,如工程。如果你能克服早期的抗拒和恐惧,一旦你能够开始使用这些工具做你关心的事情,就会有能力和成就感等着你。
至于我为什么特别选择自然语言处理(NLP),有几个原因。在职业层面上,我认为 NLP 社区更欢迎来自非传统背景的人,相对于像计算机视觉这样的领域,我只看到来自计算机科学、数学、物理和电子工程背景的人。在更个人化和基于兴趣的层面上,我认为 NLP 是最适合帮助解决信息过载问题的领域。有无穷无尽的信息要消耗,这加剧了每个人的压力,也削弱了从事知识工作的人的生产力。我喜欢 NLP,因为我可以直接帮助人们摆脱噪音,认真对待他们需要知道的事情,以便更有效地生活、做出明智的决定和工作。
我在 Primer 的工作与信息过载问题直接相关。在 Primer,我们利用强大、先进的 NLP 模型从嘈杂、非结构化的文本数据中提取结构化信息。这有助于我们的客户更快地获得他们需要的信息,而不是让个人亲自研究数据。一些分析师每天工作 12 个小时,只是因为他们没有办法快速阅读和消化他们负责更新的海量信息,我们希望改变这种情况。
我的团队 Applied Research 的任务是培训、测试深度学习模型,并将其用于 Primer 的产品,然后将这些模型集成到我们的数据管道中,或通过 API 将其公开使用。我们还创建可重复使用的脚本和资源,允许人们根据自己的数据训练自己的模型。这项工作不仅涉及模型实验和工程,还涉及与其他团队的大量协作,这些团队更直接地工作在我们的产品和基础设施上。
就周与周而言,我认为一半的时间用于编写模型训练/评估、数据预处理和其他典型的机器学习任务的代码,另一半时间用于交流工作:与产品经理讨论计划、规格和进展,与我们的数据标注团队合作为新的和现有的任务创建数据集,以及向整个公司介绍我们模型的新发展和改进。
答:在 SharpestMinds 实习期间,您开发了一个工具包,用于培训“基于 BERT 的命名实体识别模型”,用于俄英机器翻译中的错误分析前端。你能更详细地描述你的项目并分享你最重要的三点吗? C:TL;该项目的博士是我的导师需要一种方法来训练 BERT 模型进行俄语和英语的命名实体识别,我的任务是学习如何在 PyTorch 中用 BERT 进行 NER,然后以 git repo 的形式构建整个管道,可以在本地克隆和运行。
然后,得到的训练模型可以用于在用户界面中突出显示实体,例如人、地点和组织,其中翻译者可以识别单独的模型(俄语到英语的翻译模型)在将姓名从俄语翻译成英语时是否出现了错误。我认为这——使用这些模型来创建更强大、更人性化的软件——非常酷,这个项目真的激发了我构建 ML 驱动的工具和界面的兴趣。
在我做这件事的时候,正好有一篇关于使用 BERT 来做 NER 的博客文章,代码对我来说并不是现成的,所以不用说:在这个过程中有很多问题需要解决!(不管怎样,感谢作者托拜厄斯·斯特巴克,这是一篇非常有用的帖子;如果没有它,我可能要花更长的时间才能开始。)
对于任何想了解更多细节的人,我在即将结束时为 In-Q-Tel 实验室的博客写了一个关于该项目的 2 部分系列文章。这里是第一部和第二部,回购可以在这里找到。
图片由 Charlene Chambliss 提供,原文来源于此来源:https://gab 41 . lab 41 . org/how-to-fine-tune-Bert-for-named-entity-recognition-2257 b5 e 5 ce 7 e
你对其他想进入这个领域的女性有什么建议?C:如果你还在上学(尤其是本科),你有三个好的选择:学习计算机科学并接受广泛的计算机科学教育,学习定量学科,如应用统计学、经济学或工程学并结合计算机科学课程,或者学习定性学科,同时自学如何将 DS/ML 应用于你的领域。获得研究经验,特别是如果你想攻读硕士或博士,如果你认为你更喜欢行业,获得行业经验(每年夏天都有实习,甚至可能在学年中兼职)。无论您选择哪种方式,都要意识到对 DS/ML 背后的数学(统计估计和概率、线性代数和微积分)的一些概念性理解和良好的编程技能仍然是大多数角色成功的必要条件。
如果你已经走出校门,想改变自己的职业生涯,那就研究一下业内人士的职业道路。尽量多关注那些背景与你相似的人:例如,如果你来自一个不涉及太多数学或编程的“非技术”领域,注意其他人是如何从非技术领域过渡过来的。找出他们需要做什么来证明他们有足够的技术技能。联系这些人,看看你是否能抽出 30 分钟的时间打个电话,问他们一些具体的、有针对性的问题,比如你需要做些什么才能胜任你感兴趣的职位。
如果你是从一个不相关的背景过渡过来的,需要帮助设计和界定一个令人印象深刻的专业质量的数据科学项目并准备面试,职业转换者也应该强烈考虑参加一个导师项目,如 SharpestMinds。如果你像我一样来自一个收入较低的领域,收入分成协议是一个救星,因为在你真正被数据科学职位聘用之前,你不必支付任何费用。
另外, Vicki Boykis 的文章《现在的数据科学不同了》(去年写的)是任何有抱负的数据科学家的必读之作。我不同意参加 Coursera 课程甚至训练营的每个人都一定有资格进入入门级数据科学领域,但这些角色的竞争绝对是激烈的,你需要做些什么来将自己从众多有志者中区分出来。正如 Vicki 所建议的那样,首先在普通软件工程或数据分析中担任一个相邻的角色,对于培养技能和进入职场非常有用。
答:我们的读者如何与你联系,参与你的项目?你可以在 Twitter 上关注我,在 LinkedIn 上联系我,或者给我发邮件。我现在非常专注于我在 Primer 的工作,但如果我将来开始任何副业,我一定会分享!
除了作为机器学习工程师在 NLP 领域进行创新,Charlene 还是 SharpestMinds 社区的活跃成员。她专注于社会科学和技术的职业道路和多学科经验继续推动女性技术人员在数据科学领域进行创新。今天,Charlene 正在解决 NLG 和 NLU 最棘手的问题,从而给予人们突破噪音和理解大规模世界的力量。作为拥有非传统职业道路的数据科学家的榜样,Charlene 激励来自不同背景的女性民主化 NLP 领域。
特别感谢 Charlene Chambliss 允许我为这个系列采访她,并对 TDS 编辑团队支持这个项目表示衷心感谢。
你认识一位鼓舞人心的科技界女性吗,你希望她出现在这个系列中?你是否正在从事任何你希望我写的很酷的数据科学和技术项目?欢迎给我发电子邮件,向 angelamarieteng@gmail.com 寻求意见和建议。感谢阅读!
[1]从 LinkedIn 获得的其他信息,可向作者索取。
参考资料:
"《斯坦福大学的经济多样性和学生成果》——《纽约时报》. "n.d .于 2020 年 8 月 15 日进入。https://www . nytimes . com/interactive/projects/college-mobility/Stanford-university。
"如何为命名实体识别微调 BERT | Charlene cham bliss | gab 41 . "n.d .于 2020 年 8 月 15 日进入。https://gab 41 . lab 41 . org/how-to-fine-tune-Bert-for-named-entity-recognition-2257 b5 E5 ce 7e。
"夏琳·钱布利斯(@blissfulchar)文章—中等."n.d .于 2020 年 8 月 15 日进入。https://medium.com/@blissfulchar.
“使用 Word2vec 分析新闻标题并预测文章成功| Charlene cham bliss |走向数据科学。”n.d .于 2020 年 8 月 15 日进入。https://towards data science . com/using-word 2 vec-to-analyze-news-headlines-and-predict-article-success-CDE da 5 f 14751。
“(19)夏琳·钱布利斯|领英。”n.d .于 2020 年 8 月 15 日进入。https://www.linkedin.com/in/charlenechambliss/.
"底漆|压机。"n.d .于 2020 年 8 月 15 日进入。https://primer.ai/press/.
在谷歌数据工作室制作美国新冠肺炎病例数据图表
谷歌数据工作室可视化美国新冠肺炎数据的逐步入门指南。
新冠肺炎数据工作室仪表板
在这个不确定的时期,你如何理解美国疫情州正在发生的数据海啸?在过去的几个月里,许多美国人发现自己每天都在查看新冠肺炎病例的传播情况。随着美国大多数州进入就地避难模式,像约翰霍普金斯大学和 91-DIVOC 这样的资源成为那些寻求保持信息的人的日常避难所。在今天的帖子中,我们将使用 Google DataStudio 创建我们自己版本的基于网络的、交互式的、视觉上吸引人的新冠肺炎仪表板。这样,我们将更好地理解所使用的数据,决定我们认为最相关的数据类型,并保持对可视化此类数据的最佳方式的控制,以帮助我们的受众最大限度地理解这些数据。在构建这些数据的过程中,我们将利用强大的 GDS 应用程序的各种对象和功能:Google Sheets connector、计算字段、记分卡、表格、地理地图、折线图和组合图、日期范围、过滤控件和最近发布的可选指标,这些是我们将介绍的一些功能,但不是全部。
本文原载于作者的 博客 。
数据选择和初始准备
任何数据可视化项目的第一步都是确定我们需要绘制的数据类型。在我们的案例中,如果适用的话,按州显示病毒的传播以及其增长率的潜在逆转将是有帮助的。对于我们的项目来说,纽约时报似乎是一个足够可靠的数据来源——幸运的是,他们在 GitHub 存储库上提供了这些数据。事实上,我们可以选择在州或县一级使用这些数据。为了简单起见,我们将在报告中使用州级粒度。看着 NYT 的档案,他们似乎只显示累计 COVID 病例和死亡人数。虽然累积疫情图表似乎主导了新冠肺炎的报告空间(即约翰霍普金斯),但我认为其他也提供增长率的门户网站( 91-DIVOC 等)更适合监测这种疾病的传播。
在累积报告的情况下,我们将始终(除了稍后确定的数据问题)让第二天的数据点等于或大于前一天的数据点;因此,从生成的图表来看,很难确定逐渐增长的水平。或者,只观察新病例,或者更好的是,绘制病例增长图可以帮助我们评估感染是否在下降。
我们还需要承认这样一个事实,即确诊病例数据不能提供美国各州之间的同类比较,因为不同的州在测试其居民时有不同的准备水平。与此同时,在衡量疾病的传播,特别是与 COVID 相关的死亡时,忽视州人口是不负责任的。(可以说,这是对潜在感染率的更准确的衡量,但仍然不准确,因为在按州、市等划分死因时,规则各不相同,而且常常是主观的。)为了查看基于人口的指标,我们还将把美国人口普查数据混合在一起。
使用 NYT 的数据,我们将按州/日期组合计算新增病例和死亡。为了进一步开发我们的数据,我们还可以计算日同比增长率 h 和 7 天移动平均增长率。作为最后的数据准备步骤,我们需要将 COVID 数据与州人口混合,以估计每日人均病例和人均死亡指标。
自然,如果没有一些数据清理,我们的工作就不会完整。根据这一消息来源,佐治亚州的累计新冠肺炎病例总数在本报告从 4/11 的 12261 例增加到 4/12 的 12103 例时,发生了 -158 例的变化。爱达荷州经历了相似的命运,当它的总数因 2 病例从 5 月 2 日报道的 2061 例减少到 5 月 3 日的 2059 例。在这些关键时刻,当我们需要“数据、证据和科学”的时候,这些数据质量问题就显得特别麻烦。世界卫生组织报告我们有 **-99(!)**周日新增新冠肺炎病例。显然,他们改变了报告方法,以与 CDC 保持一致,但没有想到进行追溯调整。为了说明这些不规则性,并使误导性增长率的影响最小化,我用值 1 替换了所有产生负新情况的计算。这意味着新病例的总和将与累计总数不匹配,但我认为这将是我们在这里处理的两个邪恶中较轻的一个。为了规范我们的图表比例,我对所有超过这个值的读数应用了 200%的日增长率上限。与此同时,我还从该工作表中排除了所有美国地区。
您可以访问结果 Google Sheets 工作簿 以了解我们流程中的后续步骤。请确保将其保存到您的 Google Drive 中。
创建新报告
与许多其他数据可视化应用不同,DataStudio 不需要安装软件,谷歌也不收取使用该程序的任何费用。我们只需要登录我们的谷歌账户,导航到 DataStudio 的主页(最好使用 Chrome 浏览器)就可以开始使用这个强大的工具了。单击左侧面板顶部的大加号或主菜单上的第一个选项,开始一个新报告。
建立与数据源的连接
在我们有机会命名我们的报告之前,我们被要求连接到感兴趣的数据源。如果我们已经为另一个可视化使用了一个数据源,只需要再次使用它,我们可以点击 My data sources 选项卡,从可用的数据源中进行选择。否则,我们必须从 DataStudio 集成可用的 17 个数据连接器中选择一个来创建新的数据源。幸运的是 Google Sheets 是可用的连接器之一,让我们点击它。
然后,我们将导航到包含我们的数据的工作簿,并选择包含它的实际工作表。您可能还记得,我们的文件名为’新冠肺炎 _ 状态日期,工作表名为’状态数据。做出选择后,保留所有其他默认设置,单击“添加”继续,然后通过单击“添加到报告”按钮确认您添加此数据的意图。
然后 Google 向我们展示了一个报告的默认视图。在继续之前,让我们确保我们的数据源为我们的数据使用正确的数据类型。选择“资源”菜单和“管理添加的数据源”子菜单,我们将进入下面的视图,在这里我们需要单击“编辑”来开始我们的探索。
虽然所有其他数据字段似乎都符合我们的标准(稍后将详细介绍),但需要将“State”字段从使用 Text 数据类型调整为使用 Geo 数据,更准确地说是使用 Region 数据。选择后,按“完成”、“继续”和“关闭”按钮顺序操作。
报告格式和布局选项
我们现在已经完成了工作中最繁琐的部分——处理数据,并准备开始进行更有创造性和趣味性的部分——实际的数据可视化。
现在,我们已经准备好命名我们的报告,为我们的仪表板选择合适的样式和大小。要重命名当前标题,只需用您喜欢的名称覆盖页面左上角的文件名即可——我将把这个破折号称为“各州新冠肺炎案例”。然后,让我们通过选择该对象并按下 Delete 键来删除默认情况下为我们创建的不需要的数据表 DataStudio。
谈到报告主题,DataStudio 提供了十几个选项;让我们导航到窗口右侧面板上名为’ Edge '的那个,并选择它作为我们的主题。最后,让我们通过将选项卡选择从“主题”更改为“布局”来调整画布的大小—选择适用于此报告上的所有页面,或者右键单击报告并遵循“当前页面设置”来仅对所选页面进行调整。选择“页面”菜单—“当前页面设置”也可以做到这一点。我将设置一个自定义的画布大小1600像素宽和 800 像素高。我们的报告开始成形了:
任何使用 Google Sheets 产品的人都会发现 DataStudio 的界面和功能非常熟悉。
-
File 菜单允许我们使用不同的选项来共享我们的报告(很像同名的 Sheets 功能)、复制现有报告、创建新报告等等。
-
编辑菜单将让我们执行与该菜单相关的典型功能:复制、粘贴、删除、撤销等。
-
视图菜单选项乍一看可能相当出乎意料,但随着时间的推移,肯定会变得更有意义。如果您的主题没有删除默认的网格选项,您可以使用此处的命令来控制报告的网格。如果您希望根据数据源中的最新更新来刷新报表,您也可以“刷新数据”(?!)从这个菜单。
我们可以使用页面*菜单向报告添加新页面、重命名、复制/复制现有页面以及浏览报告。
当您的文件中有多个页面时,您可以通过排列*菜单来控制它们(包括它们的过滤器选项)。
我们已经利用了资源*菜单下的“管理添加的数据源”功能,您还可以管理和控制其他报告功能:过滤器、混合数据、参数等。
- Help 会做你期望从这个菜单中看到的事情,有趣的是,它还可以让你通过请求一个你希望添加到程序中的功能来引起谷歌工程师的注意。
*我们跳过了最有趣的菜单— Insert ,它使我们能够实际添加各种元素:图表、图像、文本、日期和过滤控件,以及报表的形状。
许多这些常用的对象也可以通过点击程序工具栏上的相应图标来调用。单击“添加图表”按钮,我们会看到各种图表对象,可以在报告中使用:数据和数据透视表、记分卡、折线图/条形图/饼图/面积图/散点图/子弹图、地理图和树形图:
使用非图表对象
我们现在准备创建我们的仪表板。我最喜欢的 DataStudio 功能之一是完全控制画布——我们可以将对象放在任何我们喜欢的地方,并且我们可以轻松地调整它们的大小以适应我们的需要。
首先,我们将通过点击文本框对象(也位于插入—文本菜单下)为我们的报告添加一个标题标签。
让我们将这个对象放在页面的左上角,我将它命名为“美国新冠肺炎州案例”。然后让我们调整字体设置——将字体设置为粗体,将默认字体切换为机器人字体,并将字体大小更改为 20 。作为最后一步,谷歌似乎不能识别单词“COVID ”,让我们使用右键菜单选项将它添加到程序的字典中。
如果我们还指定了上次报告日期,这可能会对我们的读者有所帮助,上次报告日期恰好是在撰写本文时于 5/10/20 检索到的 5/9/20 。为了引用我们的来源,我们将使用另一个文本框,并将其放在我们页面的底部。在文本属性面板中的左对齐按钮的正下方,我们可以找到插入链接
按钮,让我们添加一个超链接到我们的文本。通过超链接向导,我们可以提供要显示的文本,共享链接的实际 URL,并确保链接将在新的浏览器选项卡中打开:
GDS 使添加图像到我们的仪表板变得很容易,在工作中你可能会在你的页面上加入公司的标志。出于我们的目的,让我们通过点击图像按钮来添加一个稍微修改的描绘冠状病毒的无属性图像
紧靠文本框的左侧(也可在插入-图像菜单中找到。)我们现在有两个选择:从本地驱动器上传或者提供图片 URL。我们将把这个控件放在我们的画布的右上角。
列表中的下一个是日期范围控件/过滤器
这给我们的报告增加了一层互动性。为了将观众的注意力吸引到这个控件上,让我们继续更改这个日期筛选控件的背景颜色,同时保持一致的字体。我们需要利用位于画布右侧的上下文日期范围属性面板:
我们也有几个选项来管理实际日期范围,考虑到我们的数据集,让我们满足于从 3/8/20 开始的固定日历(大多数州在此之前没有开始报告确认的 COVID 病例,那些开始报告的州:华盛顿州、加利福尼亚州、纽约州各有不到 200 例病例)到 5/9/20(可获得的最后报告日期):
Next control 在技术上被认为是一种图表,但在我的书中,它是一种指标读数,DataStudio 称之为记分卡:
可以通过选择插入菜单并转到记分卡,或者通过工具栏上的添加图表按钮找到该控件。通过记分卡面板使用数据选项卡,我们可以将其指标设置为新案例汇总为总和。这将使我们能够在指定的时间段内对所有确诊病例进行累计。注意日期范围维度设置为我们的日期【日历】控件。我们一次只能对该控件使用不超过一个指标(此处也提供可选指标选择),并且不允许非日期维度:
当谈到样式标签时,让我们确保我们的指标使用的是紧凑的数字(百万、千等),将我们的字体改为 Roboto ,大小为 24 。最后去掉所有边框,让这个控件完全透明。请注意,作为持续改进和推出增强功能的一部分,GDS 最近在其列表中添加了条件格式功能:
为了直观地将该记分卡与其他控件分开,让我们将它包含在两个 lin e 形状(Insert-Line)中。)
我们将重复这些步骤来描述新的死亡人数。
许多与 COVID 相关的可视化中的一个共同主题是,除了一些更好的可视化(已经提到的 91-DIVOC 等)之外,它们通常不会基于群体大小来归一化它们的数据集。加利福尼亚人比怀俄明人多 70 倍。),在了解潜在感染率时考虑这一事实可能是有意义的[是的,我确实知道大多数 COVID 携带者可能没有经过检测,但这些确诊病例数是我们在使用更病态的指标(死亡人数)之外衡量疾病传播的最佳信号。]
虽然我们的数据集已经包括人均病例数和死亡数*,但为了更好的可读性,人口统计学家经常使用每 10 万人中的**。将我们的人均价值乘以 100,00 就能得出这一预期结果。这可以通过使用计算字段功能来完成。让我们导航到资源选项卡,并选择管理添加的数据源选项来编辑我们的数据源。然后,我们将单击*“添加字段”按钮打开计算字段向导。**
对于每 100K 个字段的种情况,我们可以通过结合使用舍入函数和乘法来删除可能不必要的小数点:**
点击保存*,然后完成保存您的更改。重复每 100K 死亡人数的计算。然后,让我们使用 MAX aggregation 为这些度量创建相应的记分卡—有效地对应于我们的日期范围中使用的最后一个日期。请注意,这将限制我们的计算仅在州一级有效,并阻止我们使用全国范围的指标。要显示的其他值得注意的指标可能是每天新病例的最大数量(确保根据需要重命名此指标)、我们范围内的病例中值数量以及最后一天的 7 天移动平均增长率。在本练习的前面,我们选择不更改源数据中的任何数据类型,幸运的是,我们可以仅为特定控件重新格式化数据类型——让我们确保将数字格式更改为 Percent:*
完成后,我们可以选择类似于下面的指标:
使用地理地图
由于我们将州作为数据源中的字段之一,并且我们能够将其重新格式化为地理数据类型,因此我们现在可以构建美国各州的交互式地图。让我们计划将此图表放在计划布局的左上象限。谈到条件格式,我们可以根据任何可用的指标来给这张地图着色,在我们的例子中,我们将使用“每 100K 死亡人数”。进入插入菜单,选择地理地图选项
会让我们从这里开始。
GDS 会自动将日期放入“日期范围维度”部分,识别状态为“地理维度”,我们的工作就是简单地将每 100K 死亡人数指定为“度量”。在“缩放区域”扩展到美国边境之外的可能性不大的情况下,做出适当的改变将是有帮助的。“数据”选项卡中的最后一步是选中“交互”部分下的应用过滤器框。这个强大的鼠标点击将神奇地为我们的地图控件添加交互功能,让我们可以根据状态选择过滤报告的其余部分:
转到面板的“样式”选项卡,我们将使用“地理图”颜色选项来有条件地格式化最大/中间/最小颜色值:
生成的地图快速显示人口调整的 COVID 死亡数据,并允许我们选择感兴趣的州来集中我们的分析工作。它现在看起来也相当像样:
在时间序列图上绘制线性对数值
我从 91-DIVOC 网站上获得的一个很棒的想法是用对数标度绘制数值。这可能是有帮助的,因为在指数增长期间(即 COVID 的初始扩散),使用对数标度更容易发现趋势。利用时间序列图的双轴特性,我们可以两全其美:在线性和对数标度上绘制新的案例值。与此同时,我们将在图表中添加一条趋势线。
指标部分允许我们在图表上放置多个指标。在本例中,我们将使用“新案例”两次。“样式”选项卡让我们在线条与条形图之间选择图表类型,对于我们的时间序列可视化,我们可以通过在左与右轴之间切换来指定偏好的颜色、线条权重和双轴 Ys。趋势线功能允许对趋势进行线性指数和多项式描述。你可能要考虑在这张图表中做出以下选择。
检查适当轴上的对数刻度框后
我们的时间序列图包含所有相关图表,有助于我们更好地评估与 COVID 传播相关的趋势:
在双轴时间序列图上显示折线图和条形图
双轴图的一种更传统的用法是使用不同的刻度,并可能选择不同的图表类型。这正是我们下一步要做的。其中一个坐标轴将在条形图上显示累计病例数*,而另一个坐标轴将通过折线图绘制一段时间内新增死亡人数。GDS 的一个受欢迎的新增功能是引入了可选指标。为了帮助我们的用户更好地与我们的仪表板交互,我们现在可以让他们指定感兴趣的指标。例如,我们可以将累积死亡数添加到图表的数据选项卡的适当部分:*
假设我们启用了图表标题“悬停时显示”[样式选项卡],用户将能够从指标中挑选并在他们的自定义图表中使用:
这一易于使用的特性可以使我们的受众成为真正的分析师。查看没有可选指标的结果图,我们可以比较两种不同的趋势:**
追踪新病例增长率增长率**
下一张图表无疑是我们仪表板上最重要的图表之一。事实上,它试图帮助我们理解手头的数据——在哪个时间段,我们会经历新案件的增长或相对下降?幸运的是,正如数据准备部分所描述的,我们正好有适合这项任务的指标。我相信你有能力找到正确的方法来绘制新案件日复一日的增长率,以及新案件增长的 7 天移动平均线 T21。看看受灾最严重的州,纽约人的情况似乎有所好转,他们远离了 4 月 4 日 12,312 例新病例的高点,增长率接近或处于负值区域:
使用带横条的数据表
提供原始数据供用户使用是一种常见的做法,可以帮助用户获得信息,这些信息不容易在图表上汇总,因为存在大量的记录和使用不同的测量单位。幸运的是,我们可以合并 DataStudio 的表对象,或者更好的是,合并带有条的表[实际数据和所述数据点的可视化表示的组合]来完成这项任务。我们这些从 Google Sheet 或者我敢说 MS Excel 来到 DataStudio 的人会发现这个功能非常熟悉。“样式”选项卡允许您自定义数据的外观。下表显示了在指定时间段内状态级别汇总的每 100K 死亡数、每 100K 病例数和新增病例数指标:**
分享我们的工作
恭喜你,我们的工作现在已经完成,最后一步是与我们报告的消费者分享我们的数据。在我们希望向谁提供访问权限以及授予访问权限的类型方面,谷歌提供了很大的控制权。与其他谷歌产品类似,DataStudio 允许我们让网络上的每个人访问我们的工作,限制访问那些有链接的人(我们在这里采取的路线),我们组织内的任何人,我们组织内的任何人有链接,或者更确切地说,限制访问我们通过共享他们的电子邮件地址信息呼叫的特定少数人。要找到这些选项,请跟随文件菜单,选择共享*,然后点击获取可共享链接😗
要查看我们刚刚创建的可视化效果,请随时点击此链接。
您会考虑将哪些其他指标添加到该控制面板中?您还想在这个仪表板中加入其他数据可视化吗?
编者注: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里 。