Domino-博客中文翻译-一-
Domino 博客中文翻译(一)
原文:Domino Blog
0.05 是一个任意的分界点:“化失败为胜利”
原文:https://www.dominodatalab.com/blog/0-05-arbitrary-cut-off-turning-fails-wins
优步的数据科学家 Grace Tang 在她的 Strata Singapore 会议“化失败为成功”中,提出了见解、常见陷阱和“确保所有实验都有用的最佳实践”。唐拥有斯坦福大学神经科学博士学位。
这篇多米诺数据科学领域笔记的博文提供了唐演讲的亮点,包括反思失败的实验、挑战假设、识别常见陷阱,以及通过分享知识避免偏见和重复工作的最佳实践。帖子包括完整的视频演示。附有详细演讲者注释的幻灯片可供下载。
反思失败的实验
Grace Tang 作为一名帮助团队设计和运行实验的数据科学家,在她的演讲中涵盖了偏见、常见陷阱以及将“失败”的实验转化为“成功”的最佳实践。唐对 p < 0.05 is always a “win” and p > 0.05 是“失败”的假设提出质疑,指出 0.05 是一个“任意的截止值”,而可能会发生变化。通过幽默,唐还指出了当人们的主要目标是让他们的实验产生重大结果时,他们可能会经历的压力。这意味着这种压力可能会强化假设,导致常见的陷阱,并给实验带来偏差。
假设和常见陷阱
唐继续通过讨论一些“成功”实际上是如何“失败”来挑战假设,特别是当深入研究实验设计并发现通过有偏采样、非随机分配、选择加入偏差、样本量太小、样本量太大或 p-hacking 将偏差或混杂变量引入实验时。唐还提到了组织如何通过“根本不测试”来避免“失败”的实验。虽然唐在她的演讲中深入探讨了每个潜在的常见陷阱,但在进入统计最佳实践之前,我们将在本帖中讨论 p-hacking(也称为:数据钓鱼或数据挖掘)。
正如唐坦率地讨论的那样,P-hacking 是指通过重复进行实验直到它变得显著而引入偏倚或假阳性。每次进行实验时,“都有一定的机会偶然得到重要的结果”....而且“随着我们进行更多的测试,假阳性的几率会增加”。这是一个常见的陷阱,以至于唐引用了的“有意义的”。虽然幽默,漫画有效地说明了 p 黑客如何可能提供一个假阳性。关于 p-hacking 的影响和后果的额外信息,尽管语气更加严肃,可在这篇 PLOS 论文中获得。
统计最佳实践
唐主张,为了
“为了让我们的失败或不重要的结果有用,为了让任何结果有用,我们需要根据统计最佳实践来设置我们的实验,以便我们可以信任我们的结果并得出准确的结论,更重要的是,采用正确的公司文化和流程,鼓励报告所有实验结果,即使是无效或有害的结果”(幻灯片 36)。
在唐的演讲中,我们列举了几个统计学上的最佳实践,包括
- 在进行实验之前列出假设,因为这可能有助于阻止以后的黑客行为
- 随机抽样中“仅将结论推广到包含的群体”
- 确保在随机分配的情况下,“治疗组和对照组之间没有系统性差异”...这“可能成为一个混淆的变量”。考虑使用随机生成器或 UUIDs(通用唯一标识符),不要使用姓名、电子邮件和电话号码等属性。
- 考虑使用 Bonferroni 校正来“控制假阳性率”或校正多重比较。
- 分享知识使每个人都能学习,“还能防止重复劳动”
结论
唐在演讲的最后强调,组织要创造一种追求“真理”而非“意义”的文化。唐还呼吁将“失败”实验的结果应用到未来的设计-制造-测试迭代中,以便“随着时间的推移改进策略,而不是依赖直觉”。利用统计和文化最佳实践的结合允许数据科学家和他们的组织接受“失败是成功之母”的说法。
https://www.youtube.com/embed/nVCvHFKnlko?rel=0
^(多米诺数据科学领域笔记提供数据科学研究、趋势、技术等亮点,支持数据科学家和数据科学领导者加快工作或职业发展。如果你对本博客系列中涉及的数据科学工作感兴趣,请给我们发电子邮件至 writeforus@dominodatalab.com。)
使用数据科学的 10 种有趣方式
原文:https://www.dominodatalab.com/blog/10-interesting-uses-of-data-science
这些天到处都在谈论数据科学令人兴奋的应用,特别是与机器学习相关的应用。虽然大多数媒体的注意力都集中在大牌和性感的话题上——例如,谷歌大脑、图像分类、语音识别——但我们很幸运每天都与那些使用数据科学工具进行迷人工作的公司合作。虽然有时更*凡,但它们的许多用例有更多的现实影响。
数据科学的一些用途是什么?
为了说明数据科学可以应用的领域的多样性,我想分享一些我们在 Domino 遇到的更有趣的应用程序。不幸的是,出于保密原因,我不能详细阐述其中的一些,但我希望它们能激发你的想象力和创造力。他们会给你带来什么新的想法?
健康与保健
心理卫生保健
Ginger.io 使用来自用户移动设备的数据来了解用户的感受。这对最终用户和他们的医生都很有用。根据 Ginger 的网站,他们的“行为
分析引擎,建立在麻省理工学院媒体实验室多年的研究基础上,在通过统计分析产生有意义的见解之前,聚合,加密和匿名患者数据。”
药物开发
企业制药业务通过使用数据科学和深度学习模型加快了药物开发和生产。为了能够向全球患者提供精确的药物治疗,数据科学家必须能够在人类手动分析大量数据集的一小部分时间内进行分析。这些数据科学家的目标是构建模型,这些模型可以基于从基因组到活检标本全切片图像的数据运行模拟临床试验。使用数据科学进行这些临床试验可以获得可重复的结果,并能够沿着开发生命周期跟踪成功情况。
保险
车祸索赔理算员
一家汽车保险公司正在使用数据科学来自动化其理赔员的一些工作。他们不再花费大量时间派遣理算师去对事故进行综合评估,而是利用事故数据来预测必要的维修费用。这不会完全取代人工调节,但会让它们更有效率。
预测性汽车维护
数据科学社区以几年前我们无法想象的方式深入研究了汽车行业的每个方面。例如,一家主要的汽车公司一直在开发模型,以探索深度学习如何对来自发动机的音频记录做出反应,以确定是否有必要进行维护,或者零件是否接*需要更换。
灾难风险
Kat Risk 开发人员已经建立了高精度的天气相关灾难(如洪水、风灾)风险预测模型。与大型保险和经纪公司合作,他们的机器学习模型被用于定义内陆洪水事件,模拟热带气旋路径,并生成与气候变化相关的预测。
航空旅行报销
欧洲法规要求航空公司对航班延误或取消的乘客进行赔偿,而 Flightright 通过为您处理流程的官僚主义,帮助客户追回资金。他们根据你提供的信息,使用数据科学来预测你索赔成功的可能性。
社会公益
儿童福利
Case Commons 是一家非营利组织,它制作软件来帮助社会工作者和社会福利项目的管理者。根据他们的网站,他们的软件使用“预测算法,例如,可以显示给定儿童的计划路径。这意味着,我们可以利用机构历史记录告诉我们的在永久性、教育和卫生等领域的长期结果,丰富管理当前案例的信息视图。”
野生动物管理
一家定量研究公司与包括 NOAA 在内的许多机构合作,改善西北太*洋地区的野生动物管理。例如,他们的一个项目涉及模拟栖息地恢复对鲑鱼种群的影响,因此他们可以最佳地指导栖息地恢复工作。
直接邮寄筹款
捐赠局利用数据科学提高直邮活动的针对性。他们与非营利组织和政治团体合作,最大限度地提高直邮活动中每封信的回报。他们的数据科学家针对超过 10 亿笔交易和数千万捐赠者的数据仓库训练目标模型。
我应该使用数据科学吗?
利用数据科学和机器学习可以用来解决组织中超出此列表的问题。法律团队、营销、金融、会计和任何其他数据密集型领域等学科越来越多地投资于提高其数据科学能力。了解您的组织拥有哪些数据以及业务面临的挑战是一个很好的起点
在您开始进一步探索之前,对照用例清单权衡您的业务问题,看看哪种方法最有意义。
2014 年数据科学薪酬调查
原文:https://www.dominodatalab.com/blog/2014-data-science-salary-survey
Contributed by John King and Roger Magoulas
如果有一件事是数据社区的人擅长的,那就是利用他们的分析技能找到高薪工作。我们的数据科学调查显示*均工资为 98,000 美元。
在过去的三年里,O'Reilly Media 一直在与 Strata + Hadoopworld 大会合作进行一项匿名数据科学薪酬调查,以了解哪些因素对数据分析师和数据工程师的薪酬影响最大。该调查对公众开放,来自 53 个国家和美国 41 个州的 800 多名在数据领域工作的人做出了回应。欲了解更多详情,您可以免费下载完整的 2014 年数据科学薪酬调查报告。而且,你可以自己参加调查。
O'Reilly 通过许多公共渠道和活动宣传这项调查。因此,调查人群更多地反映了奥赖利受众,而不是数据工作者的一般人群。与普通人群相比,调查受访者可能会使用更多的开源工具和新技术,并拥有更多的技术领导和管理职位。
那些回答者在各种行业工作,来自各种背景——不全是严格的技术人员。虽然几乎所有的受访者都有一些技术职责和背景,但不到一半的人以个人贡献者的身份工作。受访者的主要角色/职责包括分析师(谁编码)、统计师、软件开发人员、技术领导和经理。
调查中的 40 个问题涵盖了人口统计、工具使用和薪酬主题。看看什么工具与最高工资最相关有助于确定技能需求大于劳动力供应的市场条件(地理在供求中起作用,我们看到技术密集型的加利福尼亚、得克萨斯、西北和东北(马萨诸塞州至弗吉尼亚州)的工资最高)。总体的工具选择,以及下面详述的工具使用分类,显示了我们调查中的数据工作者是如何完成工作的。
一个关键的发现是,你学得越多,你挣得越多——使用最广泛工具的受访者往往挣得更多。一个原因可能是许多工具表征了合并的 Hadoop 生态系统,其中新工具满足了新的利基需求,如实时/流数据、日志处理和内存数据管理。这并没有降低使用 RDBMS 等传统工具的价值,同时了解 Hadoop 和 RDBMS 的人比单独使用其中任何一种的人获得了更高的工资。此外,SQL 仍然是所有受访者最常用的工具。
一个关键的发现是,你学得越多,你挣得越多
在分析方面,最常用的工具包括 SQL,其次是 Excel 和 R (tied),然后是 Python 和 Tableau。对于数据管理,最常用的有 SQL、MySQL MS SQL Server、Oracle、Hadoop 和 Hive。
我们想进一步了解工具的使用与我们的调查队列之间的关系。使用聚类算法,我们发现了五个聚类。很少有回答者只使用单一组中的工具,大多数回答者使用五个组中的四个组中的工具。这些集群确实表明,在一个集群中使用一个工具会增加在该集群中使用另一个工具的可能性,许多受访者倾向于使用一个或两个集群,而很少使用其他集群中的工具。
工具使用集群
集群 1 -
专有分析
SQL、Excel、MS SQL Server、Oracle、Oracle BI、SAS、SPSS、Microstrategy、Business Objects、C#、PowerPIvot
集群 2 -
Hadoop 生态系统
Hadoop(所有发行版)、Spark、Java、Scala、Pig、HBase、Hive、Cassandra、MongoDB、Storm、AWS/Elastic Map Reduce、Redis、Pentaho、Splunk、Mahout
集群 3 -
数据科学
Python,R,Matlab,自然语言处理,网络/社交图,Continuum (Numpy,SciPy),Weka,libsvm
集群 4 -
表示层
Mac、Javascript、D3、MySQL、Postgres、Google Chart Tools、SQLite、Ruby
集群 5 -
数据管理
Unix、C/C++、Perl
我们有一个异常值工具 Tableau,它的使用率相对较高,但不太适合单个集群。Tableau 确实与第一组和第二组相关。
集群 2 (Hadoop 生态系统)包含大量工具,这反映了集群的两个特征:集群中的受访者使用最多的工具(18-19 个,几乎是集群 1 中一些工具的两倍);此外,群集中的许多工具是互补的且用途单一,反映了 Hadoop 生态系统不断发展和融合的本质。
当查看集群以及它们如何适应我们根据数据构建的回归模型时,我们看到集群 1(专有分析)中的受访者工资略低,而集群 2 (Hadoop 生态系统)和集群 3(数据科学)中的受访者工资相对于*均值略高。
查看薪资调查的结果可以为最受欢迎的工具提供一些指导,这些信息可以帮助你设定学习路径和职业选择。然而,在动态数据空间中,您可以预期变化。我们从 Strata 会议提交的提案中了解到,越来越多的数据专业人士希望分享他们对实时/流媒体和弹性搜索等主题的了解。将于秋季进行的下一次数据科学薪资调查将提供更多指导。
3 家公司,3 种构建数据科学的方式
原文:https://www.dominodatalab.com/blog/3-companies-3-ways-to-structure-data-science
如果有一件事是数据科学领导者可能同意的,那就是当你制定企业战略以加快模型速度时,没有“正确”的方法来组织数据科学团队。
每种模式——集中式、分布式(也称为联合式)或中心辐射式——都有其优缺点,公司已经发现使用每种方法都可以成功开发企业级数据科学功能。
事实证明,关键是为您的组织选择正确的模式。
数据科学领导者 Matt Cornett(来自 Transamerica)、Patrick Harrison(来自一家全球金融情报公司)和 Brian Loyal(来自 Bayer Crop Science)深入探讨了在制定企业数据科学战略时,不同因素如何影响使用何种组织结构以及何时使用的决策。他们的评论是关于利用数据科学推动成果的最佳实践的网上研讨会的一部分内容如下。
典型的数据科学组织结构
Matt、Patrick 和 Brian 强调了不同的组织结构,他们认为每种结构都有其优点和缺点。
- 集中化模式: Matt Cornett 是 Transamerica 的数据科学总监,他领导着一个向公司首席行政官报告的集中化团队。像 Transamerica 这样的集中团队将职能集中在一个领导下,以监督人才、基础设施和工具、最佳实践和知识共享。这些团队可能面临的一个挑战是他们与业务优先级脱节的潜在感觉。为了解决这个问题,Matt 建议集中化的团队寻找尽可能与业务保持联系的方法。例如,他的团队中的参与经理积极地与一线的业务人员建立关系,并在他们开发解决方案时扩展他们的领域知识。
- 分布式或联合模型: Patrick Harrison 是一家全球金融情报公司的 AI 工程总监,他描述了一种分布式团队结构(有时称为联合模型)。在这里,没有中央数据科学团队。数据科学家直接向企业中不同的业务领导汇报。联合团队通常与业务流程和优先级有很强的一致性,并且可以更容易地构建深厚的领域专业知识。但是,正如 Patrick 指出的那样,数据科学家经常会感到与他们的数据科学同事隔离。在业务的不同部门工作的数据科学家也更有可能重复工作,因为他们孤立地工作来解决类似的问题。Patrick 说,为了应对这些挑战,联合团队需要开发一个数据科学支持网络,并在一个数据科学*台上集中工作,以连接整个组织的数据科学家,使他们能够讨论共同的兴趣和挑战。
- 混合模式或中心辐射模式:Bayer Crop Science 的云分析主管 Brian Loyal 讨论了他的公司对混合模式的使用。在这里,卓越中心负责建立最佳实践,在整个组织中构建数据科学文化,并解决跨组织的挑战。同时,不同业务线内的数据科学团队应对特定的运营挑战。正如 Brian 指出的,这种方法可以提供集中和联合方法的优点,但是需要所有参与者就每个领域的角色进行大量的协调和达成一致。
听 Matt Cornett、Patrick Harrison 和 Brian Loyal 讨论他们不同的组织结构。
https://www.youtube.com/embed/HIPLA5NEam8
组织如何选择他们的结构?
Matt、Patrick 和 Brian 分享了七个关键因素,他们认为这些因素可以帮助指导公司确定正确的道路。需要注意的是:领导者应该全面考虑这些因素。在这个过程中,艺术和科学一样多,有时不同的因素会将领导者引向不同的方向,因此有必要仔细权衡每个选择的利弊。
我们将不同的因素大致分为两大类:
商业变量
包括员工数量、数据科学家数量和当前分析成熟度在内的元素构成了团队结构推理的重要部分。例如,Transamerica 的 Matt Cornett 建议,拥有不断增长的数据科学家团队的组织在其分析之旅的早期阶段,应考虑首先集中数据科学,以建立基础设施、同行审查和模型治理实践,然后再转移到更加联合的模型。
他还建议考虑当前的 IT 能力来帮助将模型投入生产。例如,在 IT 部门没有带宽来完全支持数据科学的情况下,拥有一个能够承担这一角色的集中化团队至关重要。
数据科学能力,
包括核心任务、开发中的模型类型以及创新目标。
- 核心使命。例如,Brian Loyal 建议,数据科学使命单一的公司,如优化旗舰产品,可以考虑集中团队,这样数据科学家就可以步调一致地工作。然而,如果一家公司对数据科学有更广阔的愿景,在不同的渠道和部门有不同的目标,那么联合团队可能更有意义,这样数据科学家就可以更紧密地与每个目标保持一致。
- 正在开发的型号类型。如果数据科学家将主要构建决策支持模型、开发仪表板、产生见解等,Patrick Harrison 建议使用分布式模型来保持团队接*他们所支持的业务。然而,在主要关注将机器学习和信息技术嵌入生产和服务的情况下,他建议创建更少、更集中的团队,这些团队拥有资源和授权来处理这些通常跨职能的大规模项目。
- 创新目标。 Bayer Crop Science 选择了一种轴辐式模型来推进围绕计算机视觉工具的农业工作,利用其卓越中心来推动计算机视觉领域的最佳实践,然后分布式团队可以使用这些实践来解决特定的业务问题。
听 Matt、Patrick 和 Brian 强调建立数据科学组织的最佳实践。
https://www.youtube.com/embed/YGJB4yJt9qc
正如这些领导者所展示的,有许多因素在起作用,灵活性是必须的-无论是在您选择最初的道路时,还是随着您的组织对数据科学的使用逐渐成熟时。然而,退一步想一想贵公司的当前位置和企业的数据科学战略,可以帮助您更好地选择将成功推进您的战略的组织结构。
数据科学跨学科领域的 3 个关键组成部分
原文:https://www.dominodatalab.com/blog/3-key-components-of-the-interdisciplinary-field-of-data-science
数据科学是一个令人兴奋的跨学科领域,它正在彻底改变公司处理业务各个方面的方式。通过将传统统计学与快节奏、代码优先的计算机科学原则和商业敏锐度相结合,数据科学团队可以比以往任何时候都更准确、更精确地解决问题,尤其是在与创造力和沟通方面的软技能相结合时。
在本文中,我们将概述数据科学的三个重叠部分、沟通和协作的重要性,以及Domino Data Lab Enterprise MLOps platform如何帮助提高团队的速度和效率。
数据科学——技能的维恩图
数据科学囊括了新旧、传统和前沿。许多数据科学工具和技术已经存在了几十年,其中的想法和概念不仅仅来自一个领域,而是来自许多领域。这导致了快速发展,因为该领域的跨学科性质以新的和新颖的方式结合了数学、统计学、计算机科学和商业知识。
数学和统计专业知识
数据科学是一个使用数学和统计学作为科学过程的一部分来开发可以从数据中提取洞察力的算法的领域。有许多软件包允许任何人构建预测模型,但如果没有数学和统计方面的专业知识,从业者就有创建有缺陷、不道德甚至可能非法的数据科学应用程序的风险。
并非所有的模型都是相同的。根据你要完成的目标,你需要一个预测的或推理的、有监督的或无监督的、参数的或非参数的模型。一般来说,从线性回归到决策树到支持向量机,模型都有统计学和概率的基础。此外,用正则化和 k-fold 交叉折叠验证来调整这些模型需要对数学方程进行微小的改变。
这就是数学和统计学专业知识的重要性。模型之间的差异往往是细微的,但会极大地改变准确度和精确度(另一种选择是偏差和噪声)。视问题而定,以牺牲精度为代价降低偏置或以牺牲精度为代价降低噪声可能更重要。这些变化通常表现为*方根、λ或逆矩阵。数据科学家的工作是处理这些细微的差异,选择与问题陈述最相符的模型,优化和监控性能,并将结果转化为业务上下文。
数学和统计专业知识是数据科学的一个基本组成部分,它允许从业者在数据中找到有意义的模式,从而产生可操作的见解。
计算机科学技能
计算机科学技能是成功的数据科学的第二个组成部分。数据科学家必须处理不同类型的数据,与不同类型的计算机系统交互,用不同的语言编程,在不同的开发环境中工作,并在整个数据科学生命周期内将他们的所有工作整合在一起。
在进行任何突破性的数据分析之前,必须首先获取数据。这通常是通过购买、下载、查询或网络搜集数据。网站通常要么为其数据提供 API,要么直接提供数据供下载(通常以 CSV、文本或 JSON 的形式)。
一旦获得数据,就可以将其集成到数据科学生命周期中。大多数数据一开始都是杂乱的,必须经过改造才能变得可用。这通常不是一项简单的任务;研究表明数据科学家 50-80%的工作都是数据争论。这可以简单到将字符串重铸为浮点 32 或将小数转换为百分号;然而,在所有情况下,确保您没有将数据更改为完全不同的含义是至关重要的。
清理之后,数据现在可以进行处理了。在这个阶段,数据科学家开始为计算和建模编写代码。为了对任何高度技术性和计算性的东西进行建模——仅举几个例子,机器学习、深度学习、大数据分析和自然语言处理——基于代码的工具(如 R 和 Python)通常是首选。这是有很多原因的;拖放程序通常不与终端交互,不允许用户修改正在使用的内核/线程的数量,也不容易获得过多的开源库。或者,基于代码的工具更灵活,并且有更大的在线社区,这在通过堆栈溢出进行搜索以调试几行代码或为当前瓶颈找到更好的实现时至关重要。
最后,来自这些工具的结果准备在组织内的系统和过程的所有阶段实施。在彻底的审查、修订、可能的单元测试、代码审查和任何相关利益相关者的批准之后。
计算机科学技能使从业者能够将他们的数学和科学专业知识运用到生活中,并解决复杂的商业问题。
商业知识
数据科学最重要的组成部分是业务知识或领域专业知识。业务环境的重要性延伸到数据科学生命周期的所有方面,从构建问题到估算缺失数据,再到将模型纳入业务流程。
一个简单的例子是缺少值的情况。从业者应该删除缺少值的行,用零填充值,使用相邻行的*均值,还是什么都不做?关键是,没有对业务场景的适当了解,就不可能知道最佳的方法。在科学过程中需要做出许多决策,如果没有适当的业务环境,很容易创建一个结果不准确的模型。
对业务的深刻理解将有助于数据科学家确定业务问题的最佳算法类型,如何最好地准备数据,如何评估和调整模型性能,以及最终如何将模型性能传达给业务涉众。
沟通与协作
数据科学的三个组成部分对于创建强大的数据科学产品至关重要,但用户采用和利益相关方的认可需要团队之间强有力的沟通和协作。
在实施数据科学产品时,受影响的业务流程所涉及的组织和员工必须相信模型正在按预期执行。在整个开发过程中,业务涉众必须理解所做的假设,为什么模型以这种方式工作,并且能够理解任何决策输出的关键驱动因素。在测试和验证结果中包括利益相关者,在进行预测时传达最重要的特性将有助于利益相关者理解和信任模型。
数据科学家可能遇到的最危险的陷阱之一是交付“黑盒”解决方案,并要求利益相关者信任他们的工作。这几乎总是导致缺乏采用,并且还会使组织面临风险。建立在沟通和协作基础上的开发过程有益于业务,并可以帮助数据科学揭示他们最初没有掌握的业务环境,从而提高解决方案的准确性。
摘要
数据科学在过去十年里一直稳步发展,没有停止的迹象;Dice 最*的一份报告发现,尽管有疫情,医疗保健、电信、娱乐、银行和保险行业对高级数据科学家的需求在 2020 年增长了 32%。原因可能包括希望使用机器学习等预测分析来规划经济衰退,使用聚类算法更好地确定消费者需求,或通过数据可视化来改善营销策略。
Domino 数据实验室的企业 MLOps *台致力于加速研究,集中基础设施,加快模型部署,并增加代码优先数据科学团队的协作。观看一个免费演示,看看我们的*台是如何工作的,或者亲自试用。
4 种更好地管理和治理金融服务和保险模式的方法
金融服务行业开始意识到这样一个事实的重要性,就像洗碗和园艺这样的家务一样,ML 模特永远不会真正完成。更确切地说,人工智能和人工智能模型需要被监控有效性,并且通常还需要为监管者重新解释和重新记录。因此,焦点集中在模型风险管理(MRM)和治理(MRG)上,这是金融服务和保险公司的两个相关的关键流程,这两个学科的重要性只有 预计会增长 。
“你不能再仅仅依赖那些备受尊敬的模特了。穆迪分析公司 的董事总经理雅各布·格罗塔说:“你需要了解一个模型为什么适合你,它与其他模型的相关性,它是如何建立的,以及它的利弊。”。
透明度 在建模过程中至关重要,他解释道。
因此,MRG 和 MRM 都是 FSI 公司的大问题。MRG 涉及一套描述模型如何被创建、使用和废弃的规则和过程,而 MRM 通常是实现 MRG 规则和过程的实践。MRG 通常被认为是一个更宽泛的术语,所以在下文中,我用它来包含 MRM 作为它的一个子学科。
正确理解 MRG 和 MRM 是困难的。会出现许多陷阱和问题,降低效率和生产力。这些问题包括缺乏自动化、高效流程、协作和沟通。
MLOps 帮助 MRG 和 MRM
一个全功能的企业 MLOps *台可以解决其中的许多问题,使端到端流程对每个参与者来说都更加简单高效。将适当的企业 MLOps *台视为礼宾员,将信息与您作为数据科学家、分析师、数据质量经理、风险或合规经理、IT 经理、高管甚至监管者的角色相匹配。就像一个优秀的酒店礼宾员一样,它为您提供有关 MRG、审计、合规和 it 流程中的步骤、模型、数据以及已识别和减轻的风险的最新、最相关的信息,从而消除您在完成工作时的猜测。从这个角度来看,我们将讨论 MRG,以及企业 MLOps *台如何帮助相关人员更轻松地完成工作。
MRG 通过风险评估识别与特定模型相关的风险。一旦确定了这些风险,就可以使用各种工具和技术对其进行管理和监控。强大的 MLOps *台的以下解决方案提高了您的 MRG 集团的功效、效率和效益,并增强了业务能力。
规则#1:在任何地方都实现自动化,以提高 MRG 效率和业务速度
最*的 麦肯锡模型风险管理调查 发现,54%的银行认为自动化将是提高 MRG 效率的首选解决方案。这就是企业 MLOps *台的用武之地。MRG 流程的自动化,例如检查数据质量、线上和线下测试、模型或数据漂移报告,不仅可以简化团队之间的工作流程,还可以提高模型开发和部署流程中的文档标准和一致性。通过集成的同行评审和分析,以及将当前结果与先前结果进行比较的能力,团队可以获得更可验证和更准确的模型结果。该*台还可以提供关于与模型相关的风险的有价值的见解和信息,这有助于企业就如何管理风险做出更好的决策。
例如, 一家领先的财富 500 强保险公司 利用 Domino Enterprise MLOps *台增强了其 MRG 流程,充分利用了实验、数据集、工具和环境的自动跟踪和完全可再现性。现在,该公司有一个确切的审计跟踪记录,记录了完成了哪些工作,谁访问了哪些数据。这消除了在部署之前将模型代码和数据传递给风险经理的问题。在 Domino Enterprise MLOps 之前,这是在很少文档的情况下完成的,这增加了治理和遵从过程的时间和复杂性。
规则 2:协作&为所有利益相关者创造一个共享的环境
企业 MLOps *台还可以改善公司内不同部门之间的协作,尤其是在风险管理和治理模式方面。MRG 和 MRS 涉及许多不同的部门,如数据科学家、分析师、风险经理和审计部门。他们将获得 相同的一致的、正确的相关信息版本,并且他们还可以建立在同行的工作之上。
例如, 好事达 在其数据科学团队中使用 Domino 的企业 MLOps *台。对他们来说,一个关键的好处是能够在任何时间点回顾分析,这使得向高级管理层或监管者展示一个数字是如何获得的成为可能。这确实提高了审计能力。另一个优势是,企业 MLOps 使数据科学成为一个可重复的过程。
四大信用评级机构【DBRS】也利用 Domino 促进团队间的协作,而不需要任何团队成员复制环境或使用不熟悉的工具。
该公司的定量分析师迈克尔·辛克莱(Michael Sinclair)说:“这是一种时间节约。“你没有遵循一个严格的文档程序通常会遇到的困难;你可以做你的工作,Domino 会跟踪你。如果你需要的话,你可以回去改变一些东西,你可以四处移动东西,或者如果你需要帮助,你可以标记某人。这是一个集中的枢纽。
规则#3:改进智能&仪表化报告,以帮助模型评审过程
风险报告也受益于企业 MLOps *台。对来自模型的信息的实验和尽职调查可以被适当地监控,甚至可以为将来的模型评审自动化。此外,这些组件可以被存储、标记和共享,以供未来在分析和人工智能库中重用,使企业更容易生成准确和最新的模型风险报告。
丹麦第二大保险公司 【托普丹马克 】竭力监控生产中的车型,对自动化决策的质量充满信心。例如,两位数据科学家花了三个月的时间来挖掘数据源,以确定一个算法的数据集格式不正确,导致模型漂移。现在,他们使用 Domino 来自动监控模型,发送模型漂移警报,并确定应该从哪里了解这个问题。
“我认为,如果您要展示您正在交付预期的价值并快速解决任何问题,企业 MLOps *台内的实时模型监控功能至关重要。”Topdanmark 数据科学卓越中心的负责人 Stig Pedersen 说,
规则#4:使用一个*台来集中信息和通信以降低风险
企业 MLOps *台可以帮助金融服务和保险公司改善向内部和外部利益相关者传达模型风险信息的方式。每个人都可以从中央存储库中轻松访问模型风险信息。这有助于确保每个人都意识到与模型相关的风险,并且可以有效地管理它们。
DBRS 也使用 Domino 来提供对其信用评分方法的可见性。至关重要的是,DBRS 的评级决策、模型和方法开发具有严格的治理和可审计性。找到自动演示治理的方法将研究人员从编译文档中解放出来,从而加快模型的上市时间。如今,他们可以轻松地显示和交流所有进入分析的数据和代码,因为 Domino 会自动保存完整的实验记录 — 谁参与了,尝试并放弃了哪些方法,何时将其推广到生产中等等。
DBRS 产品管理全球主管 Thomas Little 说:“Domino 不必完全依赖人类进行交流,只需在代码库中捕获所有的交流,从而有助于降低风险。
保持机器学习模型准确性的 4 种方法
原文:https://www.dominodatalab.com/blog/4-ways-to-maintain-model-accuracy
算法可能是当今高性能技术竞赛的热门话题,但有时支持者会忘记,像汽车一样,模型也需要定期调整。最*,一个高度可见且灾难性的人工智能模型故障让网上房地产公司蒙羞,被迫关闭其购房业务。
据《华尔街日报》和其他消息来源报道,其房地产算法在房屋交易中的应用不光彩地夭折了。该公司股价暴跌 25%,原因是 宣布 季度亏损 3.28 亿美元,并因关闭其“Zillow Offers”服务而裁员 25%(约 2000 人)。首席执行官 Rich Barton 告诉投资者 ,“我们无法准确预测未来房价在不同时间的两个方向,比我们尽可能建模的要高得多。”
什么是机器学习模型精度?
机器学习模型准确性是对机器学习模型在新数据上表现如何的一种衡量,理解这一点对于评估模型的有用性非常重要。有多种方法可以度量准确性,最合适的度量标准将取决于问题的具体情况。例如,准确度可以用分类误差来衡量,即错误分类的样本数除以样本总数。根据问题的类型,也可以使用其他指标,如精确度和召回率。重要的是为手头的任务选择正确的指标,并了解如何解释结果,以便对机器学习模型做出明智的决策。
模型精度和模型性能有什么区别?
术语“模型准确性”和“模型性能”经常互换使用,但它们实际上指的是两种不同的东西。模型准确性是对模型预测给定输入的正确输出的程度的度量。换句话说,它衡量的是模型在总体上有多精确。另一方面,模型性能是模型在特定任务上表现如何的度量。换句话说,它衡量模型执行特定功能的能力。例如,如果您试图预测一个人是否会投票给某个候选人,模型准确性将衡量模型正确预测这个人会投票给哪个候选人的频率。模型性能将衡量模型对选举结果的预测程度(例如,有多少人实际上投票给了候选人)。
提高模型准确性
现在我们对模型精度有了清晰的认识,让我们来探讨一些保持精度的策略。通过进行一些简单的调整,我们可以显著地保持和提高模型的准确性。我们开始吧!
模型风险规划
虽然公众对 Zillow 的模型为何没有按计划运行还没有达成共识,但这个博客本身并不是关于 Zillow 的。我们的主题是关于我们所有依赖数据科学的人应该牢记的教训:永远不要假设生产模型已经“完成”;有些事情总是会出错!
即使是表现最好的模型最终也会因为各种原因而退化:产品或政策的变化会影响客户的行为;敌对行动者可以调整他们的行为;数据管道可能会断裂;有时候世界只是在进化。这些因素中的任何一个都会导致数据漂移和概念漂移,从而导致预测准确性下降。
为了应对这样的挑战,模型驱动的业务必须采用一种模型监控策略,旨在不断提高模型的准确性。以下是模型监控可以帮助您修复糟糕算法的四种方式。
重新训练模型
如果模型已经漂移,提高模型精度可以采取用更新的数据重新训练它的形式,连同其相关的地面实况标签,这更能代表预测数据。然而,在地面真实数据可用的情况下,可以对训练数据集进行管理以模拟预测数据的分布,从而减少漂移。
注意两种类型的漂移:数据漂移和概念漂移。对于数据漂移,部署的模型用于预测的生产数据中的模式逐渐偏离模型的原始定型数据中的模式,这降低了模型的预测能力。尽管输入数据分布没有变化,但当构成正确预测的预期随时间变化时,就会发生概念漂移。
回滚模型
有时回滚到模型的前一个版本可以修复性能问题。为了实现这种形式的持续改进,您需要模型的每个版本的档案。然后,您可以通过模拟使用相同推断数据时的性能,来评估每个先前模型版本相对于当前生产版本的性能。如果您发现以前的版本比当前的模型版本执行得更好,那么您可以将它部署为生产中的冠军模型。
修复模型管线
虽然漂移可能因为地面实况数据已经改变而发生,但有时当将预测数据馈送到模型的上游数据管道中发生不可预见的改变时,漂移也会发生。使用来自数据管道的更新数据进行重新训练可能会修复模型,或者修复数据管道本身可能会更容易。
修复模型
为了确保您不断提高模型的准确性,您有时可能需要在开发环境中修复模型。为了诊断模型退化的原因,使用一个支持再现性的*台是很有帮助的,在这个*台上,您可以在开发环境中有效地模拟生产环境。一旦确定了可疑原因,您可以选择修复模型的最佳方法,无论是修改超参数,还是更具侵入性的方法。
结论
模型监控是一个关键的、持续的过程,对于模型驱动的业务来说是必不可少的。然而,不受监控的模型会导致灾难性的业务结果。如果您想了解更多有关如何为您的数据科学计划创建严格的模型监控流程的信息,请阅读我们的新白皮书, 《不要让模型影响您:利用模型监控控制风险的策略》。
成功扩展机器学习的 4 种方法
原文:https://www.dominodatalab.com/blog/4-ways-to-successfully-scale-machine-learning
以可重复、可扩展的方式部署机器学习模型需要理解支撑模型的算法和技术正在快速发展,并且与传统软件开发工具的管理方式不同。
随着开源社区的显著进步,您的数据科学家今天用来解决业务问题的工具、技术和算法无疑将很快发生变化。当然,并不是所有的变化都是好的,在许多情况下,实施不被理解的技术和方法会导致灾难性的失败。
这里有一些指导原则,可以确保你的公司增加在机器学习实践中取得成功的机会。
鼓励您的数据科学家尝试和探索新技术。
马斯洛的《锤子》谈到了一种认知偏差,涉及到使用一种熟悉的工具:“如果我只有一把锤子,那么每个问题看起来都像钉子。”许多数据科学家职业生涯开始时的一个重大挑战是适应新的方法和技术。在学术机构,他们接受指导,并有机会与导师一起验证他们所走的道路。在您的组织中,能够确认一种新方法,对照其他方法进行测试,并确保它适用于手头的问题,这是数据科学家适应新技术和技巧的关键一步。
数据科学领导者的角色是确保他们的团队有时间、空间和帮助来学习新算法,以及机器学习模型适用的真实场景。
这样做的好处是,数据科学家更愿意探索他们现有知识的边界之外。这不仅提高了他们对潜在建模技术的理解,而且也成为评估新问题陈述和思考最合适的解决方案的关键步骤。
让您的数据科学家能够轻松测试新技术。
随着机器学习包、算法和底层基础设施的不断发展,灵活性和规模需要成为机器学习实践的核心。
但对于许多数据科学家来说,测试新工具的障碍和壁垒使得这不可能实现。不鼓励开放性和可扩展性的限制性环境或传统*台在试验新方法时会产生巨大的开销,以至于在许多情况下,数据科学家要么放弃要么利用他们的笔记本电脑和台式机来绕过这个问题(“影子 IT”)。他们测试的任何新技术都难以实现,这极大地破坏了他们生产和扩展模型的能力。
集中式和开放式数据科学*台可以更轻松地实施新环境,并在黄金标准、值得生产的环境和寻求测试新编码方法、技术或底层技术的研发环境之间保持对比。通过降低进入门槛,您可以确保花费在评估新方法上的时间主要花费在模型输出和输入上,而不是配置机器来运行代码库。
拥有验证和复制新建模方法的流程。
不是所有的变化都是好的,也不是所有的技术都值得实现。您的数据科学家必须能够验证模型的工作方式,并正确解释或诠释结果。要做到这一点,他们必须能够重现结果,并对模型产生这些结果的内在机制进行可视化。能够解释为什么模型的结果是这样,以及什么输入变量是最重要的,这对于创建能够成功实现模型的变更管理程序是至关重要的。
数据科学家在实施模型之前,必须能够理解并清楚地解释他们在模型中使用的算法。只有当数据科学团队拥有安全实施模型和限制意外后果的可能性所需的知识时,新模型才应投入生产。
做好一切准备
预测与机器学习相关的未来是不可能的,即使是对模型本身而言。机器学习的所有方面都容易发生变化,无论是算法、最适合它们的底层计算资源,还是公司成功实施它们所需的框架。
在数据科学实践的核心鼓励实验和学习的文化是确保他们带给您的组织的知识保持最新,以及他们用于解决业务挑战的技术和方法是适当的唯一方法。
不应该购买多米诺的 5 个理由
原文:https://www.dominodatalab.com/blog/5-reasons-you-should-not-buy-domino
作为一名数据科学从业者,你敏锐地意识到机器学习模型如何推动商业成功。
模特可以帮助你的公司战胜竞争对手。
模型有助于引导领导者通过艰苦的变革来实现增长。
模型可以推翻忽视这一资源的强大竞争对手。
多米诺就是把机器学习模型作为一种商业武器。我们相信,通过企业 MLOps *台将模型置于其业务核心的组织将击败竞争对手,推动前所未有的增长,并颠覆行业巨头。这些将是“模型驱动”的业务,它们将会胜出。
如果您的组织对是否应该投资企业 MLOps *台犹豫不决,我们提供了一个简短的指南,列出了您不应该购买 Domino 企业 MLOps 解决方案的五个原因。虽然该指南是讽刺性的,但问题是严肃的:企业 MLOps *台适合您吗?'
你认为无限的工具和计算被高估了
也许你的数据科学家只需要一台基本的笔记本电脑,你无法理解为什么有人需要分布式计算、GPU 或其他现代基础设施。
你的 IT 团队是不是就等着你去寻求帮助,愿意分分钟跳到你的请求上?
在您的世界中,您的数据科学家只是微笑着使用他们被告知使用的任何工具吗?
然而……
如果你像我们采访的大多数数据科学领导者一样,那么访问数据科学工具和基础设施是一个很大的痛点。
无论任务需要什么,Domino 都可以轻松使用。
Domino Enterprise MLOps *台是通向权力的门户。几乎任何企业级的数据科学工具和基础架构。易于调配。即刻可用。
没有锁定或等待繁忙的 IT 员工来调配资源。Forrester Consulting 最*的一项研究发现,Domino *均节省了 70 个小时来加速项目的资源!Domino 让您能够利用最好的工具来解决业务问题。
你喜欢电影《土拨鼠日》
如果你怀疑别人创建的模型是否可信,你会创建一个新的吗?
也许数据科学家永远不会离开你的组织。如果是这样的话,恭喜你!知道你的整个团队从一开始就完好无损,知道所有的东西都在哪里,并且知道曾经完成的每个项目,这是很方便的。
或者,也许你认为在入职期间淘汰坏数据科学家的最好方法是重复性项目?
可能不会…
我们从数据科学领导者那里听到的事实是,他们的团队总是在“重新发明轮子”复制过去团队成员的工作是困难的,并导致关键人员的风险。
Domino 可以让你复制任何研究。
使用 Domino,您将享受到一个可搜索的记录系统,该系统可以跟踪任何实验级别项目的所有相关工件。您可以复制和重用,以专注于更有价值的见解。
你确信筒仓让数据科学家专注
也许你的公司故意孤立数据科学家。
你的数据科学家最喜欢孤立地孵化想法吗?
数据科学家更喜欢作为发现下一个突破的独立天才的荣耀吗?
说真的……
我们遇到的大多数数据科学领导者都在寻找打破孤岛、加速协作的方法。
Domino 促成了一种协作文化。
通过单一*台,Domino *台允许数据科学家独立于工具进行协作,因此团队可以专注于解决更复杂的问题。将您的团队放在 Domino 上进行持续的学习循环,从而推动不断增长的商业价值流。
你认为影子是一项团队运动
也许你很幸运,为一个没有 IT 政策限制数据科学家下载和使用他们想要的任何工具的组织工作?“占有”是游戏的名字吗?
当您的数据科学家可以自由地在公司边界之外工作时,他们会拥抱企业家精神吗?
也许你桌子下面的服务器可以让你将模型投入生产,而不需要官僚的验证步骤。它能在冬天保持双脚温暖。
现实来袭……
有效扩展数据科学的组织是那些知道如何在不牺牲数据科学生产力的情况下满足企业对安全性、风险和合规性的要求的组织。
Domino 可以轻松地支持企业级的一切。
再也没有影子了!为您的数据科学团队提供 Domino,以便他们可以使用自己喜欢的工具、包和基础设施。它可以削减支持成本,同时提高安全性、治理、合规性、协作和可再现性。
你不能提高博士的生产率
在您的世界中,您是否按每个模型向数据科学家支付报酬?你通过限制生产率来控制成本吗?
您是否发现您的数据科学家喜欢执行手动任务?我知道,自动化是一个东西。但这就像手工制作瑞士表。自动化和质量不一致,对吗?
你的组织不赞成速度吗?慢而稳是你的数据科学保龄球队的名字吗?
等一下……
我们经常看到数据科学团队花在研究上的时间太少,因为他们需要执行各种相关任务才能取得进展。
Domino 支持模型的高速创建和部署。
有了 Domino,模型摩擦就没有了。我们的企业 MLOps *台提供了一种通用的工作方式,其工作流可加速每个步骤的生命周期和关键过渡。无论使用什么工具,Domino 都让数据科学家加速实现价值——我们称之为“模型速度”但是不要相信我的话。查看我提到的最*的 Forrester Consulting 研究,Domino Enterprise ml ops *台的总体经济影响 。Forrester 发现 Domino 提供了更快的模型验证,每个模型*均 20 小时。三年总投资回报率高达 542 %!
有时候荒谬的想法会引发常识。如果足够好对你来说还不够好,我邀请你今天就去看看多米诺。我有预感,多米诺是你们公司想要购买的东西!
更好地与商业领袖沟通的 5 种方式
原文:https://www.dominodatalab.com/blog/5-ways-to-better-connect-with-business-leaders
“我如何让企业领导理解我们提供的价值?”
这是一个我们经常从数据科学领导者那里听到的问题。
事实上,随着采用率的增加,企业领导人对数据科学及其潜在好处的了解越来越多。在过去的一年里,新冠肺炎危机提升了围绕数据和数据科学的对话,因为企业领导人竞相了解快速变化的趋势和行为,并预测对其运营的潜在影响。
然而,要让商界领袖充分参与进来,还有很多工作要做。确保从最高管理层到一线员工的每个人都理解并接受数据科学的好处,对于成功创建企业级数据科学能力至关重要。如果没有强大的支持和与企业中每个人的合作,将数据科学集成到组织的 DNA 中是不容易的。
对于数据科学领导者 Matt Cornett(保险解决方案的领先提供商)、Patrick Harrison(全球金融情报公司)和 Brian Loyal(拜耳作物科学)来说,解决这个问题是他们组建团队时的首要任务。这里有五种方法可以更好地与企业联系,并最终建立更好的合作关系。这些评论总结了 Matt、Patrick 和 Brian 在最*一次关于利用最佳科学推动成果的 最佳实践的网络研讨会上分享的见解。
跳过技术演讲
听到数据科学团队推广他们最新的神经网络或计算机视觉工作的故事并不罕见。对于拜耳作物科学的云分析主管 Brian Loyal 来说,这样的故事是如何不这样做的例证。“那时你会被很多人盯着看,”他说。相反,他建议团队从谈论特定项目的业务背景和价值开始。“说‘这个领域的数据科学是有意义的,因为我们已经证明,通过更好地管理决策,我们可以节省一年的产品管道或 500 万美元的研究费用’有助于人们理解,”他说。
听听 Brian Loyal、Patrick Harrison 和 Matt Cornett 讨论如何衡量数据科学的商业价值。
https://www.youtube.com/embed/Z8d_SDDBErA
将结果提升为核心工作流程的一部分
许多数据科学团队分享成功项目的故事,但通常是临时工作。Patrick Harrison 鼓励领导者将它纳入日常工作,这样直到他们正式分享成果,项目才算完成。通过这样做,数据科学团队可以持续不断地将他们工作的价值推向前沿。根据 Patrick 的说法,数据科学领导者不必(也不应该)从零开始。相反,他们应该利用业务人员已经收听的现有频道和活动。“如果你的公司已经有演示日或时事通讯,让你的团队和项目加入到这些活动中,”他建议。
听听 Brian Loyal 和 Patrick Harrison 讨论如何在整个企业中推广数据科学。
https://www.youtube.com/embed/KGduYRVRetI
说他们的语言
在拜耳作物科学公司,Brian Loyal 的团队将项目框定为企业使用的现有决策过程的一部分。(他们甚至将企业数据科学团队称为“决策科学”团队。)“例如,我们将展示除了一个团队正在使用的其他商业智能或报告写作之外,我们还有一些可以添加到故事中的分析模型,”他解释道。“每个人每天都要做出数百个决定,所以使用相同的语言是分享工作的好方法。”
让公民数据科学家加入进来
例如,Matt Cornett 邀请来自企业的公民数据科学家参与模型开发流程。“他们更接*行动,有很多领域知识,”他说。“通过包括他们,你可以加强你的整体成果,因为你已经获得了更多的业务领域知识,并且你已经获得了与一线的联系。”
听听 Brian Loyal 和 Matt Cornett 讨论如何与企业用户、分析师和公民数据科学家进行协调。
https://www.youtube.com/embed/iubhjfcTFA4
提供培训以提高组织的数字商数
这种工作可以非正式地进行,如拜耳作物科学公司。例如,该公司的卓越中心(COE)员工努力与业务领导者讨论基本的数据科学概念,如数据科学家如何在日常工作中从数据中提取意义。“即使不是数据科学家的人也能从对基础知识的理解中受益匪浅,”拜耳作物科学公司的 Brian Loyal 说。
也可以通过更正规的训练来实现。我们听说越来越多的公司正在为商业领袖建立“数据科学 101”类型的项目。例如,Matt 分享了他的公司如何开发一个关于如何更有效地使用数据和解释可视化的内部培训项目。课程面向所有人,从初级员工到业务经理。同样,Patrick 说他的公司是一家全球金融智能公司,创建了一个数据科学院,为业务分析师、产品经理、运营经理、销售和其他业务用户提供对分析的基本理解。
听 Matt Cornett 和 Patrick Harrison 讨论数据科学培训计划。
https://www.youtube.com/embed/KS02jDnBFk0
为了成功地将数据科学转化为核心能力,数据科学和业务需要步调一致。正如这些公司所显示的,这不会自己发生。如果数据科学领导者想要让业务领导者站在他们一边并认识到他们的价值,他们需要积极主动和务实。
观看由 Matt Cornett、Patrick Harrison 和 Brian Loyal 主讲的网络研讨会、、利用数据科学推动成果的最佳实践、。
构建数据科学*台之前要问的 7 个关键问题
原文:https://www.dominodatalab.com/blog/7-key-questions-to-ask-before-building-a-data-science-platform
建还是不建。这是个问题。
我们看到许多组织都在纠结是否要建立一个数据科学*台。但这是一个过于狭隘的问题。对于大多数组织来说,真正重要的是扩展数据科学。事实上,埃森哲的一项研究发现,75%的企业高管认为,如果他们不扩展数据科学,他们将在五年内破产。
因此,他们应该回答的问题是:什么*台将帮助我们加快扩展数据科学的能力?
原因如下。
组织很快意识到,他们必须消除基础架构摩擦,消除孤立的工作,并加快模型投入生产的速度,以便在整个组织内扩展数据科学。这是因为当团队成员使用不同的工具,努力设置环境,在不同的地方存储数据科学工件,以及在数据科学生命周期中手动管理项目时,生产力会急剧下降。同样,当 IT 部门必须支持定制的数据科学硬件和工具,并为每个模型重新创建部署流程时,他们的支持负担和成本也会增加。
这时,有人必然会说,“停止疯狂吧!我们需要一个数据科学*台!”。
的确,他们确实需要一个*台来扩展数据科学。但要正确地做到这一点,他们需要一个能够协调端到端数据科学生命周期的*台,提供灵活性并大幅提高生产率。如下图所示,该*台需要提供基本要求,如按需访问数据、可扩展计算和工具。它还需要提供过程转换需求,例如项目管理、可再现性、知识管理和治理。
不幸的是,我们经常看到的情况是,组织在其*台范围内仅包括自助服务数据、计算和工具。这似乎很容易实现,早期的进展令人兴奋,并显示出希望。但是这仅仅解决了规模问题的一部分——而且只是在很短的时间内。通常,这个有限的*台会运行一段时间,然后因为缺少太多功能而被放弃。其他时候,将尝试额外的需求,但是像安全性、版本控制、协作、编排、知识管理和治理这样的功能很难快速交付,特别是如果它们最初没有在项目中确定范围的话。该*台成为一个永无止境的开发项目,需要数年才能实现价值。
构建一个交付所有需求的*台需要大量的资源来确定范围、构建和管理,尤其是高价值的流程转换需求。这也需要大量的时间——我们已经看到客户花费数年时间来满足高价值的需求。组织还需要计划工具生态系统和部署选项的不断发展。这需要持续的支持和专门的开发团队。
没有时间可以浪费,因为对于数据科学来说,时间就是金钱。延迟向企业交付模型会带来巨大的机会成本。
因此,如果“我们需要一个数据科学*台?”就是“让我们建造它吧!会更快/更容易/更便宜/更好!”停下来好好想想。您的组织能否真正提供一个强大的数据科学*台来满足您组织的所有需求?你能长期支持它吗?你能在几个月而不是几年内交货吗?
即使您对所有这些问题的回答都是肯定的,所需的努力和投资会为您的组织带来竞争优势吗?或者,真正的竞争优势是扩展数据科学吗?这是我们的客户得出的结论。
“我们的领导指示是,如果它不是一种差异化能力,我们就不应该构建它;我们应该考虑买下它。以我的经验来看,最初人们会对开发内部工具感到兴奋,两年内它们都很棒,但到了第三年,就没人再关心维护它们了。”
软件服务决策科学高级总监
构建数据科学*台之前要问的 7 个关键问题
为了帮助您决定构建还是购买是适合您组织的正确方法,您需要回答以下七个问题:
- 扩展数据科学需要哪些能力?
- 如果我们构建一个*台,需要多长时间才能完全交付这些功能?
- 与市场上的商业*台相比,我们的需求真的是独一无二的吗?
- 我们能否提供长期开发、支持和扩充*台所需的关注度、承诺、技能和资金?
- 我们能否让我们的*台经得起未来的考验,这样我们就不必随着需求的变化而重新开始或做大量的工作?
- 搭建*台和购买*台的机会成本有什么区别?
- 数据科学*台是我们组织应该支持的核心竞争力吗?
有关更多信息,请查看我们的新白皮书构建数据科学*台的真实成本。本白皮书提供了有关构建数据科学*台的功能、成本和注意事项的信息,包括:
- 这是一个从一个执行人员那里学到的案例研究,这个执行人员走上了构建的道路,并且再也不想犯同样的错误。
- 关于您组织中每个人需要从数据科学*台获得的能力的详细信息。
- 八项功能的详细功能清单。
7 重要的机器学习技术和算法
原文:https://www.dominodatalab.com/blog/7-machine-learning-algorithms
每一个机器学习模型的核心都是驱动它们的算法,消耗数据并为你提供你需要的答案。在今天的机器学习(ML)中,有无数的算法正在被使用,每一种算法都被设计来寻找不同问题的解决方案。在你决定用哪种或哪几种算法来完成这项工作之前,了解你有哪些选择是很重要的。
什么是机器学习算法?
一般来说,算法是作为一组指令或程序来解决问题或执行任务的公式。一旦用一组数据训练了模型,它就能够为一组给定的输入提供一个结果或结果。
这类似于大脑的工作。一旦你训练孩子自己系鞋带,他们就可以利用这种训练自己系鞋带,还有靴子、溜冰鞋,甚至在包裹上用丝带打蝴蝶结。然而,打领带是一种不同的模式,需要不同的指导和全新的培训课程。ML 模型使用不同的算法,这取决于模型需要做什么以及您可以获得的数据。
7 种机器学习算法
机器学习算法可以根据它们的学习方式、它们适合的数据类型以及它们用这些数据做什么来分类。这就是为什么用于预测天气的 ML 模型与过滤垃圾邮件的模型完全不同,但实际上可能与告诉你何时买卖股票的模型非常相似。
许多算法在训练时使用监督学习技术,其中它们试图预测的输出数据在训练期间是已知的和可用的。当算法处理数据时,它创建将输入映射到输出的规则。这通常是一种比无监督学习更快的技术,无监督学习需要算法解密训练数据以生成自己的输出。
还有许多其他方法来对算法类型进行分类。例如,回归是一种监督学习技术,通常用于识别变量之间的关系。另一种常见形式称为分类,其中算法将数据分组到类别中,包括线性分类器、决策树和支持向量机。
虽然有许多不同的 类型的算法 供您使用,但在开始任何机器学习项目之前,这里有七个您应该了解的最常见的算法:
线性回归
线性回归 是最容易使用的 ML 算法之一。当你向它提供足够的数据时,它会向你显示数据的因变量和自变量之间的线性关系。简单线性回归指的是有一个独立变量的问题,而多元线性回归指的是有多个独立变量的问题。线性回归的关键假设是因变量是连续的。
逻辑回归
逻辑回归 用于因变量为二元而非连续时。该模型以概率的形式解释了因变量和一个或多个自变量之间的关系。当试图理解不同的因素如何影响某件事情发生的可能性时,这种技术非常有用,例如,一项交易是否具有欺诈性?
决策树
决策树是一种监督学习算法,它使用树状分支结构来生成目标变量的预测。树中的每个分支节点对应于一个特定的属性,而每个叶节点对应于该属性的特定值。由于其图形化的本质,它是最容易解释的模型之一。这种方法非常有助于确定对给定决策采取的最佳行动。
聚类(K 均值)
K-means 聚类是一种无监督学习,用于将数据分类成组,变量 K 表示要使用多少组。每个数据点都根据相似性聚集在一起。
零售商可以使用这些算法根据购买历史将客户分组,或者根据销售活动将库存分组。它们还被用于将产品分组在一起,分离音轨,或将人类活动与在线机器人分开。
朴素贝叶斯
朴素贝叶斯算法使用来自一组不相关数据的概率分类器来确定另一个变量的概率。这些都是基于贝叶斯定理,该定理根据其他无关的数据来确定事件或发生的概率,如基于年龄的心脏病风险增加。
朴素贝叶斯算法通常用于垃圾邮件过滤器,它可以分析电子邮件中的单词和短语,以确定它们是否是垃圾邮件的概率。
支持向量机(SVM)
监督学习方法的另一个例子是 支持向量机 ,它通过将数据分成两类来对数据进行分类。它可用于分类、回归和异常值检测。SVM 在两个类别之间划了一条线,因此一边的数据放在一个类别中,另一边的数据放在第二个类别中。然后 SVM 可以画更多的线。
与其他算法相比,SVM 的关键在于它可以选择将线放在哪里,以确保数据不会被错误分类。简单的线性 SVM 分类器绘制直线,然而其他 SVM 方法不限于直线或单个*面。
全体
顾名思义,集成学习涉及使用多种算法来创建 ML 模型。它主要用于解决复杂的问题。一个常见的例子是随机森林技术,用于解决分类和回归问题。随机森林由几个共同处理相同数据的决策树组成。
如何选择正确的机器学习技术
选择正确的机器学习算法本身就是一项技能。请始终记住,您的模型越复杂,构建、培训、测试、维护和部署就越困难。除此之外,你的模型越复杂,当工作模型被交付给工程师或其他数据科学家时,当它被部署、监控和维护时,就越难以记录和解释。
当您选择算法时,首先定义需要解决的问题,并探索您可用的数据来解决它。
总是从最简单的解决方案开始。在增加复杂性之前,构建并测试该模型。然后,您可以将较简单模型的结果与较复杂模型的结果进行比较,直到您在获得想要的结果和复杂解决方案之间找到最佳*衡点。
结论
对于一个模型驱动的组织来说,访问完整的机器学习算法库是探索您的选项的最佳起点。Domino Enterprise MLOPs *台让您可以立即访问您需要的所有库。它以协作为宗旨,还为您提供了监控、文档和治理所需的工具。
要探索 Domino Enterprise MLOps *台中可用的资源,请使用 观看它的演示 ,使用 免费试用 来探索它的特性。
企业 MLOps 中的 7 个关键角色和职责
任何 ML/AI 项目的主要挑战之一是将它从数据科学生命周期开发阶段的数据科学家手中转移到部署阶段的工程师手中。
数据科学家的参与在生命周期的哪个阶段结束?谁对可操作的模型负责?开发和部署之间的过渡应该持续多长时间?与数据工程师或 DevOps 工程师相比,数据科学家做什么?
这些问题的答案很少是一成不变的,即使是在小商店里。对于一个企业来说,当您添加额外的团队成员时,问题会变得更加复杂,每个成员都有不同的角色。
企业 MLOps 流程概述
数据科学生命周期包含四个阶段,提供了整个流程的缩略图,并指出不同团队成员应该关注的地方。
- 管理:管理阶段着重于理解项目的目标和需求,并对工作进行优先级排序。数据科学家与业务、领导层、最终用户和数据专家合作,以确定项目范围、估算价值、估算成本、绘制解决方案蓝图、创建模拟交付成果、创建目标、就时间表以及验证和批准关口达成一致。他们为未来的数据科学家和审计人员记录这项工作。
- 开发:开发阶段是数据科学家基于各种不同的建模技术构建和评估各种模型的阶段。数据科学家创建一个模型,并用算法和数据对其进行测试。他们可能依赖数据分析师,或者得到他们的帮助。数据工程师通过提供干净的数据来提供帮助。基础架构工程师通过为数据科学家提供 IT 基础架构来提供帮助。当数据科学家需要帮助理解数据中存在的复杂关系时,就会召集数据专家。
- 部署:部署阶段是数据科学家基于各种不同的建模技术构建和评估各种模型的阶段。经过测试的模型在生产环境中从数据科学家过渡到开发人员和基础架构工程师。如果模型需要改写成另一种语言,软件开发人员就会接手。
- 监控:监控阶段是生命周期的操作阶段,在此阶段,组织确保模型交付预期的业务价值和性能。该模型通常由工程师进行监控,如果出现问题,在需要时引入数据科学家。如果不像预测的那样,数据科学家会对模型进行故障诊断。如果数据管道出现问题,数据工程师会提供帮助。然后,在下一个开发阶段,双方都使用学到的信息和资源。
然而,典型生命周期中的角色和职责很少如此清晰地描述。
MLOps 团队中的 7 个关键角色
在较小的数据科学运营中,一个人可能有多个角色,但是在一个企业中,每个团队成员都应该能够专注于他们的专业。有七个主要角色,尽管通常还涉及其他几个角色。例如,业务经理将参与构思和验证阶段,而法律团队中的某个人将在模型交付之前监督项目的合规性。
1.数据科学家
数据科学家通常被视为任何 MLOps 团队的核心人物,负责分析和处理数据。他们建立并测试 ML 模型,然后将模型发送到生产单位。在一些企业中,他们还负责监控模型一旦投入生产后的性能。
2.数据分析师
数据分析师与产品经理和业务部门合作,从用户数据中发掘洞察力。他们通常擅长不同类型的任务,如市场分析、财务分析或风险分析。许多人拥有与数据科学家相当的定量技能,而其他人可以归类为公民数据科学家,他们知道需要做什么,但缺乏编码技能和统计背景,无法像数据科学家那样单独工作。
3.数据工程师
数据工程师管理如何收集、处理和存储数据,以便从软件中可靠地导入和导出。他们可能拥有特定领域的专业知识,如 SQL 数据库、云*台以及特定的分布系统、数据结构或算法。它们通常对数据科学成果的可操作性至关重要。
4.DevOps 工程师
DevOps 工程师为数据科学家和其他角色提供对专业工具和基础架构(例如,存储、分布式计算、GPU等)的访问。)他们在数据科学生命周期中的需求。他们开发方法来*衡独特的数据科学要求与业务其余部分的要求,以提供与现有流程和 CI/CD 管道的集成。
5.ML 架构师
ML 架构师为要使用的 MLOps 开发策略、蓝图和流程,同时识别生命周期中的任何固有风险。他们识别和评估最好的工具,并召集工程师和开发人员团队一起工作。在整个项目生命周期中,他们监督 MLOps 流程。它们统一了数据科学家、数据工程师和软件开发人员的工作。
6.软件开发人员
软件开发人员与数据工程师和数据科学家一起工作,专注于 ML 模型和支持基础设施的生产化。他们根据 ML 架构师的蓝图开发解决方案,选择和构建必要的工具,并实施风险缓解策略。
7.领域专家/业务翻译
领域专家/业务翻译对业务领域和流程有深入的了解。他们帮助技术团队理解什么是可能的,以及如何将业务问题构建成 ML 问题。它们帮助业务团队理解模型提供的价值以及如何使用它们。在深入理解数据至关重要的任何阶段,它们都非常有用。
MLOps 流程中可能的难点
由于流程中有如此多的阶段,企业运营中涉及如此多的人员,团队之间以及孤岛之间的沟通和协作会很快产生许多问题。例如,当团队不理解哪个模型使用了什么数据,数据来自哪里,以及它是如何被跟踪的时候,问题就出现了。这就产生了对数据科学家的依赖,他们需要提供所有必要的信息并管理从一个阶段到另一个阶段的过渡,这就成为了数据科学治理的一个问题。当 MLOps 过程中的变更和进展没有被适当地记录时,问题就出现了,这会给团队成员造成不准确的数据集和整体混乱。
一个关键点是确保模型从一个阶段有效地过渡到另一个阶段,而不会丢失前一个阶段的关键信息。这是通过企业 MLOps *台实现的,该*台简化了复杂的数据科学流程。例如,数据科学家可以轻松获得他们需要的工具和计算,而不必依赖基础设施工程师。
建立标准以避免 MLOps 中的错误
每个专业都应该指定一名负责人,负责签署项目的每个阶段。例如,首席数据科学家将监督测试阶段完成的工作,并负责确定模型何时可以由业务部门进行验证。
Domino 的企业 MLOps *台
使用 Domino 的企业 MLOps *台,团队成员能够在整个数据科学生命周期中轻松履行他们的职责。它缩短了关键过渡阶段的时间和精力,并且集成的工作流提供了一致性,无论谁在做这项工作。它还提供了对自动监控工具和自动生成的报告的访问,只需要很少的时间就可以检查模型的进度。因为所需的信息就在他们的手边,额外的协作不会占用他们手头其他任务的时间或精力。
7 名顶尖创新者在“数据科学创新者行动手册”中分享见解、趋势和职业建议
谁在数据科学领域做着最具创新性的事情?专业何去何从?最重要的是,你能从这个行业中最聪明的人身上学到什么?
这些问题以及许多其他问题是“数据科学创新者剧本的焦点,这是一本免费的 Domino 数据实验室电子书,探索了七个人的工作、想法和经历,他们的工作正在彻底改变数据科学和业务,并对世界上一些最大的问题产生了影响。
电子书简介:
- 凯西·科兹尔科夫——谷歌首席决策科学家
- Najat Khan—强生&让桑制药公司研发战略&运营部首席数据科学官兼全球总监&
- 罗伯特·西原——Ray 的联合创始人,Anyscale 的联合创始人&首席执行官
- 莫娜·g·弗洛雷斯——英伟达医疗人工智能全球主管
- Glenn Hofmann—纽约人寿保险公司首席分析官
- John k . Thompson—分析思想领袖、畅销书作家、数据创新者&分析
- Andy Nicholls——GSK PLC 统计数据科学高级总监
你能从这 7 位顶尖创新者身上学到什么
超过 150 名与会者在 Domino 的 Rev 3 MLOps 会议上参加了我们的调查,写下了他们认为是顶级数据科学创新者的名字。
在我们的采访中,我们询问了这六位数据科学家——以及一位在联邦学习和医疗人工智能领域从事开创性工作的医学博士——从数据科学的兴起,到未来新的突破可能来自哪里,以及对有抱负的创新者的职业建议。他们的回答很有见地,鼓舞人心,有时甚至令人惊讶。
所有人都说,为数据科学家提供更好的工具是创新的关键驱动力。正如谷歌首席决策科学家 Cassie Kozyrkov 所说:“世界终于明白了‘知识就是力量’和‘数据是有用的’属于同一个范畴。”"
“如果数据是有用的,那么数据科学家也是有用的,他们的工作需要简化,以提取价值和加速创新,”Kozyrkov 说。
数据科学推动了对世界上最重要问题的解决方案的探索
例如,在制药和医药领域,人工智能模型不再局限于治疗的化学过程,而是用于研究医疗保健服务的所有方面。
“数据科学正在从根本上颠覆所有行业的传统工作方式,包括制药领域,”约翰逊&约翰逊的让桑制药公司首席数据科学家纳贾特·汗说,她讨论了自己的工作对癌症的影响,为全球患者带来新希望。
正如 NVIDIA 医疗人工智能全球负责人 Mona Flores 所说,“将人工智能应用于医疗保健业务有很多机会,因为提前预测和分析需求对医生、护士和其他护理人员的工作至关重要。”
GSK plc 的高级主管兼统计数据科学负责人 Andy Nicholls 也认为,与前几年相比,如今数据科学正在推动业务的更多方面。一个例子就是简化新药和新疗法的审批程序。
“对我们来说,数据对审批过程有影响,我们必须证明我们的药物是有效和安全的,”Nicholls 说。
这是尼科尔斯参与推进 Pharmaverse 的部分动机,你可以在电子书中了解更多。
更好的工具推动数据科学创新
数据科学的新工具和新应用使许多领域更具创新性,包括金融和保险。
纽约人寿首席分析官 Glenn Hofmann 表示:“将模型部署到生产中的基础设施和软件都得到了极大的改善,这推动了我们的模型对业务的影响。”。
更有趣的是,随着对分布式数据和资源的更容易访问,数据科学的迅速崛起可能只会加速。
西原:数据科学的影响只会随着分布式计算而加速
“今天,要做人工智能和数据科学,你必须建立大量的基础设施来进行扩展,”Ray 的联合发明人兼 Anyscale 的首席执行官 Robert Nishihara 说。“这就是我们与 Ray 和 Anyscale 合作的内容。”
更多来自西原关于 Ray 的未来以及分布式人工智能和人工智能在数据科学创新中的作用的信息,请点击这里的。
职业变化如何?来自高层的职业建议
每个人都承认这个行业将会发生变化,并为未来的数据科学家提供了有益的建议。畅销书作家、管理数据科学团队 的思想领袖 John K. Thompson 尤其乐于助人,毫不掩饰 。
“不要为混蛋工作,”他说。“我的一位 MBA 教授告诉我们,你在工作中的表现将对你的个人生活产生直接而巨大的影响。两者不可分离。如果你在工作中粗鲁无礼,让人无法忍受,你的私人生活也会如此。”
要获得更多坦率而有见地的职业建议,以及对该职业及其对创新的影响的见解,请点击此处查看电子书。
构建复杂算法的 8 个建模工具
原文:https://www.dominodatalab.com/blog/8-modeling-tools-to-build-complex-algorithms
对于一个模型驱动的企业来说,获得适当的工具意味着亏损经营和一系列后期项目在你面前徘徊或者超出生产力和盈利能力预测的区别。这一点也不夸张。借助合适的工具,您的数据科学团队可以专注于他们最擅长的领域,即测试、开发和部署新模型,同时推动前瞻性创新。
什么是建模工具?
一般来说,模型是一系列算法,当给定适当的数据时,这些算法可以解决问题。正如人脑可以通过将我们从过去的经验中学到的教训应用到新的情况来解决问题一样,模型是根据一组数据训练的,可以用新的数据集解决问题。
建模工具的重要性
如果没有完整和无限制的建模工具,数据科学团队将会被束缚在工作中。开源创新比比皆是,并将继续下去。数据科学家需要获得现代工具,这些工具受到 IT 部门的青睐,但可以通过自助服务的方式获得。
建模工具的类型
在选择工具之前,你应该首先知道你的最终目标——机器学习或深度学习。
机器学习使用主要基于传统统计学习方法的算法来识别数据中的模式。这对分析结构化数据最有帮助。
深度学习有时被认为是机器学习的子集。基于神经网络的概念,它对于分析图像、视频、文本和其他非结构化数据非常有用。深度学习模型也往往更加资源密集型,需要更多的 CPU 和 GPU 能力。
深度学习建模工具:
- PyTorch: 是一个免费的开源库,主要用于深度学习应用,如自然语言处理和计算机视觉。它基于火炬图书馆。但是,它更喜欢 Python,而不是 Torch 使用的 Lua 编程语言。Pytorch 的大部分是由脸书的 AI 研究实验室开发的,该实验室尊重修改后的 BSD 开源许可。基于 PyTorch 构建的深度学习模型的例子包括特斯拉的 Autopilot 和优步的 Pyro。
- TensorFlow: 类似于 PyTorch,这是 Google 创建的一个开源 Python 库。相比之下,它的主要优势之一是支持 Python 之外的其他语言。它也被认为比 PyTorch 更面向生产。然而,这是有争议的,因为这两个工具都在不断更新它们的特性。您可以在 TensorFlow 内创建深度学习模型,或者对基于 TensorFlow 构建的模型使用包装器库。Airbnb 用它来给照片加标题和分类,而 GE Healthcare 用它来识别大脑核磁共振成像的解剖结构。
- Keras: 是一个构建在 TensorFlow 之上的 API。虽然 TensorFlow 确实有自己的 API 来减少所需的编码量,但 Keras 通过在 TensorFlow 库的基础上添加一个简化的接口来扩展这些功能。它不仅减少了大多数任务所需的用户操作数量,而且您还可以仅用几行代码来设计和测试人工神经网络模型。它被新手用来快速学习深度学习,以及从事高级项目的团队,包括 NASA、CERN 和 NIH。
- Ray: 是一个开源的库框架,它提供了一个简单的 API,用于将应用从单台计算机扩展到大型集群。Ray 包括一个名为 RLib 的可扩展强化学习库和一个名为 Tune 的可扩展超参数调优库。
- Horovod: 是另一个分布式深度学习训练框架,可以和 PyTorch、TensorFlow、Keras、Apache MXNet 一起使用。它与 Ray 的相似之处在于,它主要是为同时跨多个 GPU 进行扩展而设计的。Horovod 最初由优步开发,是开源的,可以通过 GitHub 获得。
机器学习建模工具
-
Scikit-Learn: 是 Python 中最健壮的机器学习库之一。该库包含一系列用于机器学习和统计建模的工具,包括分类、回归、聚类和降维以及预测数据分析。这是一个基于 BSD 许可的开源但商业上可用的库,构建在 NumPy、SciPy 和 matplotlib 之上。
-
XGBoost: 是另一个开源的机器学习库,为 Python、C++、Java、R、Perl、Scala 提供了一个正则化梯度提升框架。它不仅在各种*台上提供稳定的模型性能,而且是目前最快的梯度提升框架之一。
-
Apache Spark: 是一个开源的统一分析引擎,专为扩展数据处理需求而设计。它为具有并行数据的多个编程集群提供了一个简单的用户界面。也很快。
Domino 数据实验室建模工具
虽然这些是今天用于 AI/ML 模型的一些最流行的工具,但这绝不是一个详尽的列表。要在同一个*台上探索这些工具的功能,请看一下 Domino 的企业 MLOps,它提供了14 天免费试用或点击这里观看快速演示。
机器学习模型指南
原文:https://www.dominodatalab.com/blog/a-guide-to-machine-learning-models
机器学习是人工智能(AI)的一个子集,它使用算法从趋势、数据集和某些行为中学习。这个过程涉及到机器学习模型的开发,这些模型可以回答问题,预测未来的结果,解决组织问题。
什么是机器学习模型?
机器学习模型是一种表示数据集中模式的算法。虽然它与软件应用程序有相似之处,但当你看到 ML 模型是如何制作的以及它是如何执行的时,这些相似之处很快就会消失。一个应用程序是由一个软件开发团队开发的,他们编写当用户与之交互时应用程序应该做什么的指令。一旦软件准备好发布,它将完全按照设计执行。
另一方面,模型被设计成独立运行,一旦开始运行,就没有用户的参与。完全依赖于它接收的数据的质量和结构,如果数据改变,模型将不再按预期工作。该模型包含使用初始数据集训练的算法,该数据集表示数据和结果之间的关系。然后,当您有了一组新的数据来预测可能的结果时,您可以使用该模型。
例如,ML 模型可以被训练来分析关于人们如何喜欢或不喜欢一系列照片的数据。然后可以向它提供一组新的照片,以预测人们对每张照片的反应。作为另一个例子,可以向 ML 模型提供关于股票市场趋势的数据,并且当它暴露于当前股票数据时,可以预测股票价格是上涨还是下跌。
为什么要用机器学习模型?
机器学习模型用来分析数据比人更有效。通常有两种使用 ML 模型的场景:当分析过程冗长乏味时,或者当大量数据使人难以识别模式时。
在第一种情况下,这通常是当您必须使用不同的数据重复执行相同的分析时,就像大型零售商确定新产品的价格或信用卡公司筛选新的应用程序。ML 模型有助于决策过程的自动化。
在第二种情况下,当您有太多的数据而无法在没有帮助的情况下进行有效分析时,ML 模型非常有用,例如天气预报或预测流行病期间的医院病床使用率。当然,每个行业都有自己的机器学习模型用例,其中一些包括:
- 金融服务:模型用于识别数据中可以揭示投资机会的洞察力,识别具有高风险特征的借款人,并识别和防止欺诈。
- 健康&生命科学: ML 模型用于分析数据以识别趋势,从而改进诊断和治疗。
- 零售:零售商使用 ML 根据以前的购买情况推荐商品,指定哪些广告应该放在特定的潜在客户群面前,并预测客户对广告的反应。
建模是如何工作的?
在您可以创建机器学习模型之前,您需要精确定义您希望它解决的问题,并获取解决该问题所需的数据。例如,如果你的问题陈述是预测一家公司下一季度的销售,你将需要以前销售的数据。有了这些信息,您就可以确定哪种算法最有可能回答您的问题。
在机器学习中,基本上有两类技术可以用来分析数据。如果你想求解的答案在数据中的某个地方,你可以使用监督学习,它可以从数据中的自变量中对因变量进行排序。如果答案不在您的数据中,那么您可能需要使用无监督学习技术。
所以,如果你想推荐额外的商品给购物者添加到网上购物车,你可能会使用无监督学习。如果你想确定贷款申请人是否可能拖欠还款,监督学习技术将是更好的选择。一些模型可以使用基于学习技术的算法,例如识别金融交易中的身份盗窃,或者确定明年的住房市场将会是什么样子。
机器学习算法
为你的模型选择正确的算法并不容易。事实上,数据科学团队通常会尝试几种算法,然后决定哪种算法是要测试的最佳候选算法。尽管任何给定库中可用的算法数量巨大,但一些最常见的类型包括:
回归
回归有两种主要形式:线性回归和逻辑回归。线性回归用于显示两个变量之间的线性关系。逻辑回归用于通过估计数据集中的联系来预测值。它们被设计用来回答诸如“多少钱?”或者“有多少?”
聚类分析
这是一个无监督学习技术的例子,它将数据排列成组或簇。它寻找数据点之间的相似性,以便将它们分组。这确保了相似的组聚集在一起,同时每个组尽可能地不同于其他组。
决策树
这种类型的算法使用可能结果的树表示,或者组织可以用来确定解决某些问题的最佳前进路径的决策。
机器学习模型过程
作为数据科学的一个分支,机器学习模型遵循数据科学生命周期也就不足为奇了:管理、开发、部署和监控。
模型管理
这是确定对新的 ML 模型的需求,并定义其问题陈述的地方。在大多数情况下,模型管理不仅包括数据科学团队的成员,还包括管理层和组织业务部门的成员。
在这里,为每个后续步骤分配角色,并确定所需的具体步骤。这些包括,例如,谁将开发模型,谁将部署模型,以及当模型准备好部署到用户环境中时,模型的关键性能指标是什么。
模型驱动的组织总是重新访问模型管理阶段,以评估过程中的成功或失败,确定成功模型的其他用例,并为下一个项目改进其过程。
模型开发
在此阶段,确定数据要求。如果数据不容易获得,就必须获取。然后,清洗 训练数据集 ,去除不必要的变量、重复的变量,确保标签、名字、标号都是标准化的。
然后,将可用数据分为训练数据和测试数据。应该确定一种方法,以系统和可测量的方式测试每个算法和超参数,例如交叉验证技术。
定义了问题陈述并清理了数据之后,现在就可以开发模型了。数据科学团队将选择算法来尝试和定义模型必须使用的超参数,比如在变量过多的情况下回归惩罚应该是什么。
一旦每个模型被训练和评估,最好的执行算法然后在一个新的数据集上被测试。测试的结果将决定应该使用哪个模型,或者是否需要对模型进行额外的修改。
模型部署
在这个阶段,数据科学家可以将模型交给工程师和开发人员,他们将在工作环境中部署模型。工程师将模型部署为 API 端点,或者开发一个应用程序,以便最终用户能够以用户友好的方式访问它。
只有训练有素且测试成功的模型才应该进行部署。一个数据科学团队可能需要使用几十个或数百个不同的模型和参数,才能得到一个可靠的模型和参数。
模型监控
就像任何正在成长的孩子学习与周围的世界互动一样,所有的机器学习模型都需要在部署后进行监控。每次模型收到新数据时,它都会做出相应的预测。然而,如果输入数据发生变化,模型可能会提供有偏差的输出,因为它可能没有被训练来处理新数据。当这种情况发生时,模型需要更新或者用新训练的版本替换。
大规模推出 ML 模型的组织使用自动化系统来同时监控他们的所有模型,就像 Domino Model Ops。作为 Domino 企业 MLOps *台不可或缺的一部分,它可以安排运行自动化测试,并在出现问题时立即提醒数据科学团队。
运行中的机器学习模型
今天,机器学习模型围绕着我们。企业领导人利用它们来提高盈利能力、管理资源和订购库存。越来越多的车辆使用它们来辅助驾驶,使旅行更加安全。许多人在我们在线互动的幕后,几乎看不见,帮助我们做出购物决定,欣赏更好的视频,或帮助诊断我们的健康问题和开出治疗处方。
对于使用植根于数据科学程序的系统化流程的模型驱动型公司,成本持续下降,而投资回报率则成比例增加。2021 年 2 月,洛克希德·马丁公司宣布,通过使用 Domino Enterprise MLOps *台扩展其 AI/ML 解决方案,该公司已经实现了超过 2000 万美元的年价值。这绝不是一种异常或异常现象。事实上,最*的一项 Forrester 研究表明,公司可以通过使用 Domino 实现 542%的投资回报率 。
使用 Domino 数据实验室进行模型开发
今天,你不再需要为你的数据科学团队配备博士来开发可持续和盈利的 ML 模型。然而,你确实需要知识、工具、库和资源,这些是在企业环境中大规模构建 ML 模型的基础。
文本和语音的自然语言处理指南
原文:https://www.dominodatalab.com/blog/a-guide-to-natural-language-processsing
虽然人类自诞生以来就一直在使用语言,但对语言的完全理解是一项终生的追求,即使对专家来说也常常达不到。让计算机技术理解语言、翻译甚至创作原创作品,代表了一系列仍在解决过程中的问题。
什么是自然语言处理?
自然语言处理(NLP)是不同学科的融合,从计算机科学和计算语言学到人工智能,共同用于分析、提取和理解来自人类语言的信息,包括文本和口语。它不仅仅是将单词作为信息块来处理。相反,NLP 可以识别语言中的层次结构,提取思想和辨别意义的细微差别。它包括理解句法、语义、词法和词汇。NLP 在数据科学领域有几个使用案例,例如:
- 摘要
- 语法纠正
- 翻译
- 实体识别
- 语音识别
- 关系抽取
- 话题分割
- 情感分析
- 文本挖掘
- 自动回答问题
自然语言生成
NLP 的子集, 自然语言生成(NLG) 是一种可以用英语或其他人类语言写出想法的语言技术类型。当给模型输入数据时,它可以生成人类语言的文本。通过文本到语音转换技术,它还可以产生人类语音。这是一个三阶段的过程:
- 文字策划:内容大致概述。
- 句子规划:内容放入句子和段落,考虑标点符号和文本流,包括代词和连词的使用。
- 实现:组装后的文本在输出前进行语法、拼写和标点的编辑。
通过开源模型(如 GPT 3)和框架(如 PyTorch)的新发现和扩展,自然语言生成已经迅速扩展到商业组织中。
自然语言理解
NLP 的另一个子集是自然语言理解(NLU ),它确定文本或语音中句子的含义。虽然这对人类来说似乎很自然,但对于 机器学习 ,它涉及一系列复杂的分析,包括:
- 句法分析:处理句子的语法结构,辨别意思。
- 语义分析:寻找可能是一个句子显性或隐性的意义。
- 本体:确定单词和短语之间的关系。
只有将这些分析放在一起,NLU 才能理解“食人鲨”这样的短语;依赖于先前句子的短语,如“我喜欢那样”;甚至是有多重含义的单个单词,比如自动反义词“疏忽”
NLP 技术和工具
在你开始学习 NLP 之前,你需要访问标记数据(用于监督学习)、算法、代码和框架。你可以使用几种不同的技术,包括 深度学习技术 取决于你的需求。一些最常见的自然语言处理技术包括:
- 情感分析:最广泛使用的自然语言处理技术,用于分析客户评论、社交媒体、调查和其他人们表达意见的文本内容。最基本的输出使用三分制(积极、中立和消极),但如果需要,情感分析分数可以定制为更复杂的等级。它可以使用监督学习技术,包括朴素贝叶斯、随机森林或梯度推进,或者无监督学习。
- 命名实体识别:从文本中提取实体的基本技术。它可以识别人名、地点、日期、组织或标签。
- 文本摘要:主要用于摘要新闻和研究文章。提取模型通过提取文本来总结内容,而抽象模型生成自己的文本来总结输入文本。
- 方面挖掘:识别文本中的不同方面。当与情感分析一起使用时,它可以提取完整的信息和文本的意图。
- 主题建模:确定文本文档中涵盖的抽象主题。由于这使用了无监督学习,因此不需要带标签的数据集。流行的主题建模算法包括潜在狄利克雷分配、潜在语义分析和概率潜在语义分析。
现在比较流行的 NLP 框架有 NLTK,PyTorch, spaCy ,TensorFlow,Stanford CoreNLP, Spark NLP 和百度 ERNIE。在生产环境中,每个 NLP 框架都有其优缺点,所以数据科学家通常不会只依赖一个框架。Kaggle 提供了一系列的 NLP 教程 ,涵盖了基础知识,面向具有 Python 知识的初学者,以及使用 Google 的 Word2vec 进行深度学习。工具包括 50,000 个 IMDB 电影评论的标记数据集和所需的代码。
自然语言处理的应用
NLP 用于人们经常使用的各种应用程序。比如 Google Translate 就是用 TensorFlow 开发的。虽然它的早期版本经常被嘲笑,但它一直在通过谷歌的 GNMT 神经翻译模型 使用深度学习进行不断改进,以产生 100 多种语言的准确和听起来自然的翻译。
【脸书】 的翻译服务也取得了显著的成功,用 深度学习 和自然语言处理,以及语言识别、文本规范化和词义消歧解决了复杂的问题。
今天自然语言处理的其他应用包括 情感分析 ,它允许应用程序检测情感和观点的细微差别,并识别讽刺或讽刺之类的事情。情感分析也用于文本分类,它自动处理非结构化文本,以确定它应该如何分类。例如,负面产品评论中的讽刺性评论可以被正确分类,而不是误解为正面评论。
带 Domino 数据实验室的 NLP
除了您可能在网上或社交媒体中使用的应用程序,还有许多商业应用程序依赖于 NLP。例如,在保险业中,NLP 模型可以分析报告和应用程序,以帮助确定公司是否应该接受所请求的风险。
丹麦第二大保险公司 Topdanmark, 使用 Domino 数据科学*台构建并部署了NLP 模型,使其 65%至 75%的案例实现自动化,客户等待时间从一周缩短至几秒钟。要开始探索 Domino 企业 MLOps *台的优势,请注册一个14 天免费试用版 。
思维转变:从销售到支持
原文:https://www.dominodatalab.com/blog/a-mindset-shift-from-selling-to-supporting
六个月前,我加入了 Domino 数据实验室,担任总裁兼首席运营官。我来到这家公司是为了帮助扩展我们的上市功能,并带领我们的业务进入下一个增长阶段,我很高兴有机会帮助一家年轻的公司发挥其潜力。我们在 Domino 的愿景是成为数据科学事实上的记录系统。就像 Salesforce.com 之于销售,或者 GitHub 之于工程,我们占据着一个对高效数据科学团队至关重要的解决方案空间。对于如何让数据科学家作为个体更有生产力,如何支持数据科学家团队高效协作,以及如何支持数据科学的治理作为一项功能来满足可解释性、可再现性和控制方面的重要要求,我们有着独特的观点。这是一个令人兴奋的愿景,我们看到一些最大的客户正在形成这一愿景。
有了这个雄心勃勃的愿景,一段时间以来,我们已经让我们的业务“加速”,推动我们自己取得超出我们想象的成就,积极增加市场份额,并在每个部门为自己设定挑战目标。然而,鉴于当今世界围绕新型冠状病毒发生的事情,我们一直在问自己是否需要改变我们的方法。Domino 可以成为加速研究的渠道,帮助组织开发药物、优化制造运营和供应链分配、确定成本节约机会、提供客户保留计划等等。现在时局真的很艰难,我们想尽一切努力帮助我们的客户取得成功。我们不希望自己激进的销售目标分散了我们*台的潜在影响。
两周前,我们的走向市场组织做出了一项重要决策,将我们的方法从“销售”转变为“支持”。我们最好的销售人员会说,他们总是对顾客采取支持的态度,他们是对的。但是,我感兴趣的是,如果我们在整个组织中正式实施“支持第一”战略,会发生什么。
我们会做出哪些不同的决定?
如果我们采取一种心态,认为我们的使命是支持我们的客户适应这一新的现实,会产生什么想法?
如果我在每周的管道电话会议上不是询问预测数字,而是询问我们的客户和潜在客户在哪些方面需要我们的帮助,以及我们正在做些什么来支持他们?
总会有改进的空间,但我对目前看到的情况感到兴奋:
- 销售和客户成功团队比以往任何时候都更加紧密地合作,以了解客户需求并设计创造性的解决方案来满足他们。
- 整个公司的高管和员工都在用创造性的想法来帮助客户。我们组织中有相当多的数据科学家,他们渴望看到数据科学投入工作以帮助解决危机。
- 为此,我们为 SAR-CoV-2 研究人员创建了一个公共多米诺环境,以便合作和分享他们的发现。这个环境已经预先植入了来自约翰·霍普金斯大学、世卫组织和疾病预防控制中心的新冠肺炎数据。我们希望你成为这个社区的一员。点击这里阅读更多和点击这里了解该项目。并且,如果您想参加就注册,并在蓝色对话框中请求访问该组织。
- 我们的许多客户都参与了抗击新冠肺炎的斗争。而且,在我们的许多客户那里,数据科学是这场斗争的关键组成部分。我们的客户成功团队已经提出在我们的客户之间建立联系,以便他们能够在这项工作中相互合作和学习。
我相信,新冠肺炎危机过后,多米诺骨牌将在诸多方面变得比以往任何时候都更加强大。我已经为团队能够团结起来互相支持和支持我们的客户而感到自豪。我相信这种“支持第一”的战略将会持续下去。
一个基于 Mongo 的游戏缓存插件
原文:https://www.dominodatalab.com/blog/a-mongo-based-cache-plugin-for-play
一个与工程相关的快速帖子:我们在 Mongo 中为 Play 构建了一个使用上限集合的缓存插件。如果你想用的话,可以在 Github 上找到它。
动机
Domino 的 web 前端是在 Scala 中构建的,在 Play 上——现在,有点勉强地托管在 Heroku 上。
我们有多个 dyno 在运行,我们希望每个 dyno 访问同一个缓存实例。因此,位于 web 进程内存中或机器磁盘上的缓存是不起作用的。
我们最初尝试通过 Memcachier 使用 Memcached,但是我们得到了我们永远无法解决的间歇性超时,即使有 Memcachier 人员的帮助。
解决办法
Mongo 中有上限的集合具有非常适合缓存的特性:快速写入和 FIFO 驱逐。我们的插件为每个缓存项增加了一个可选的过期时间。
项目中的自述文件中有自己使用的说明。
警告
这并不意味着疯狂的吞吐量。我们没有在“网络规模”上做任何事情,我怀疑这种解决方案能否承受巨大的负载。这是一个相当基本的解决方案,对于许多用例来说可能已经足够好了——而不是被设计成工业优势的东西。
给客户的提示:从新冠肺炎看多米诺业务连续性
这是我们今天早些时候发给 Domino Admins 的一封邮件,目的是解决一些客户关于新冠肺炎疫情的 Domino 支持和业务连续性的问题。我们想在这里交叉张贴,让所有客户都能看到。
日益严重的冠状病毒(新冠肺炎)疫情继续影响着全球个人、社区和企业的健康和福祉。我们理解您可能在您的组织中面临类似的挑战。由于 Domino 是我们许多客户的重要供应商,我们想分享我们正在采取的步骤,以提供一个安全和健康的环境,使我们的员工能够确保业务连续性、服务和对客户的支持。我们还希望鼓励任何在使用 Domino 时遇到问题的客户,因为他们正在远程工作,联系我们在support@dominodatalab.com的支持团队寻求帮助。
员工的健康是我们的头等大事。我们正在密切关注政府机构和卫生部门的指导,以确保我们的政策和实践保持我们团队的健康和高效。截至今天(3 月 13 日),对我们的员工或我们向客户提供正常服务水*的能力没有直接影响。我们很高兴地报告,没有多米诺员工冠状病毒检测呈阳性。
Domino 的业务连续性计划是最新的,包括疫情响应程序以及辅助通信方法。如果任何具有关键工作职能的员工受到影响,我们已经指定了具有适当权限的替代人员,他们可以承担这些关键职能的责任。
虽然我们的办公室此时仍然开放,但我们的大多数员工现在都在家履行工作职责,我们已经停止了所有可选的与业务相关的旅行,以最大限度地减少风险。我们将每天评估发展情况,并在适当的时候过渡到强制性的完全远程工作。鉴于我们的员工来自不同的地域,我们预计不会对我们支持客户的能力产生重大影响。
感谢您在这关键时刻的支持和理解。如果您有任何其他问题,请联系您的客户成功经理。
谢谢,
戴夫·科尔
首席客户官
多米诺数据实验室
数据科学领袖的非凡集合
原文:https://www.dominodatalab.com/blog/a-phenomenal-collection-of-data-science-leaders
By Conor Jensen, Data and Analytics Career Coach, Renegade Science on June 05, 2018 in
感谢 Conor Jensen 贡献这篇博客,最初发布在 Renegade Science 上。
数据科学中的管理是一个特别独特的挑战,大多数新经理对此毫无准备。上周,我有幸在 Domino 数据实验室专门针对数据科学领导者的会议上发言,这是我参加过的最好的会议之一。从中得出的最引人注目的事情之一是那里的管理深度,以及我们面临的挑战的共性。回顾我的笔记,以下是我最大的收获:
- 数据科学家经常根据他们构建到模型中的假设为他们的公司做出隐含的决策,我们需要帮助我们的团队将这些决策公之于众,以便进行更全面的讨论。 Cathy O'Neil 围绕使用伦理矩阵帮助这一过程发表了精彩的主题演讲。
- 对新经理的数据科学培训基本上不存在。鉴于从业者的高技术门槛,大多数新经理已经花了大量时间来建立强大的技能,这使得学习管理的空间很小。一些优秀的领导者已经出现,但仍在与不利因素作斗争(感谢凯西)。作为一个领域,我们需要把更多的重点和精力放在帮助新的管理者学习他们的手艺上,而不要期望他们花一半的时间来建立模型!
- 许多公司仍在努力兑现他们在高级分析方面的投资,虽然数据科学家和他们的领导者不应该独自承担责任,但我们肯定要承担一些责任。向上和向外管理是数据科学领导者的一项重要职责,需要培养,以在我们的公司内设定适当的期望。
非常感谢所有在场的演讲者和主持人,在我的 3 天里,我学到了很多。如果你没有参加这个活动,我强烈建议你明年去参加。我还要向我的小组成员同事们,米开朗基罗和 T2,还有我们伟大的主持人 T4 和乔希。我和你聊得很开心,希望观众也喜欢!
路德维希深度学习实践指南
原文:https://www.dominodatalab.com/blog/a-practitioners-guide-to-deep-learning-with-ludwig
Joshua Poduska 提供了 Ludwig 的概要,包括何时使用 Ludwig 的命令行语法以及何时使用其 Python API。
介绍
新工具不断被添加到深度学习生态系统。寻找正在被创建的工具类型的趋势可能是有趣的和有益的。例如,最*创建了多个有前途的工具,它们具有 Python APIs,构建在 TensorFlow 或 PyTorch 之上,并封装了深度学习最佳实践,以允许数据科学家加快研究速度。例子包括路德维希和 Fast.ai 。
这篇博文考虑了 Ludwig,提供了该包的简要概述,并为从业者提供了一些提示,比如何时使用 Ludwig 的命令行语法,以及何时使用其 Python API。这个博客还提供了 Jupyter 笔记本的代码示例,您可以通过 Domino 提供的主机下载或运行。
路德维希设计原则
我最*参加了在旧金山优步总部举行的一次聚会。路德维希的主要建筑师和维护者皮耶罗·莫里诺提出。他把路德维希的魔力总结为三点:
- 数据类型抽象
- 通过 YAML 文件的模型定义
- 巧妙使用关键词论证(* *夸尔斯)
我将简要地解释一下为什么 Peiro 会做出这样的声明,在你阅读我的解释之前,你可能会发现从优步工程博客中查看 Ludwig 设计工作流程的图会有所帮助。
从数据类型抽象开始他们的分析策略,使优步工程团队能够更好地集成深度学习最佳实践,用于模型训练、验证、测试和部署。Ludwig 可以对不同类型的数据集使用相同的数据预处理和后处理。这个抽象概念扩展到编码器的应用。编码器就是简单的深度网——*行 CNN,堆叠 CNN,堆叠*行 CNN,RNN 等等。为一个任务开发的相同的编码和解码模型可以被重新用于不同的任务。
虽然专家可以处理这些网络的细节,但新手也可以访问模型训练的成熟默认设置。通过 YAML 文件很容易插入新的编码器、解码器和组合器。专家或中间用户也发现使用用户指南中的许多可选* *参数来调整模型行为和超参数很简单。
Ludwig 允许用户训练模型、加载模型、使用该模型进行预测并运行实验。这些操作通过命令行或编程 API 运行。在 Ludwig 中训练模型只需要 CSV 数据集和模型定义 YAML 文件。
路德维希实验和输出
实验功能抓住了路德维希包的本质,因为它统一了所有的设计原则。在一个实验中,Ludwig 将创建一个带有 hdf5 扩展的中间预处理版本的输入 CSV。第一次在相同的目录中使用具有相同名称的 CSV 文件时会发生这种情况,随后的实验运行会利用该数据。Ludwig 随机拆分数据,并在训练集上训练模型,直到验证集的准确性停止提高。实验记录和输出可以在结果目录中找到,其中包含超参数和过程的汇总统计信息。我发现这种自动记录非常有用。在我的工作中,每次运行代表模型的一次调整是很常见的。Ludwig 输出自动组织在目录中。你可以给每个实验命名,或者像我一样使用默认的名字。
在与 Ludwig 合作时,如果您有目的地管理这种自动生成的输出,会有所帮助。将输出目录与 Git 项目同步,添加提交注释,或者使用 Domino 提供的自动再现引擎,可以在您尝试重新创建结果时省去很多麻烦。关键是要以一种你能记住变化的方式来组织你的实验。
路德维希从业者提示
在你找到在工作中利用它的最佳方式之前,使用任何新工具都会产生一些成长的烦恼。在这一节中,我总结了我在使用 Ludwig 时学到的经验,以帮助您更快地进行自己的评估。
从业者提示# 1——命令行对于运行实验来说非常有用。
Ludwig 的大多数功能都可以通过命令行或 Python API 获得。然而,正如本讨论主题中所指出的,一些编程 API 函数在技术上是可访问的,但尚未得到完全支持。命令行功能更加全面。这方面的一个例子是路德维希实验。虽然在使用 API 时需要一步一步地运行,但当通过命令行调用时,Ludwig 会自动拆分数据,并在训练集上训练模型,直到验证集的准确性停止提高——这是一个很好的功能。
下面是通过命令行开始实验的语法示例。
ludwig experiment \
--data_csv sequence_tags.csv \
--model_definition_file model_definition.yaml
另一方面,您需要通过 Python API 自己进行训练和测试。
从业者提示# 2——可视化的命令行调用在某些系统上可能很难使用。
让可视化显示可能是一个令人沮丧的练习。基本的代码改进正在进行中,包括保存图像的选项,而不仅仅是显示图像。如果您从 GitHub master 安装 Ludwig,您将能够通过 CLI 保存图像。参见此处获取关于该主题的讨论线索。
实践者提示# 3——通过命令行进行实验,通过 API 调用进行绘图。
我喜欢将技巧 1 和技巧 2 结合起来,通过命令行调用运行实验,并通过 Python API 调用构建可视化。当试图通过命令行显示可视化时,我的系统不配合,但是通过笔记本上的 API 调用来绘制可视化效果很好。以下面的语法和输出为例,在 Jupyter 笔记本中执行命令行和 API 调用都很容易。
!ludwig experiment \
--data_csv ../data/raw/reuters-allcats.csv \
--model_definition_file ../model_definition.yaml \
--output_directory ../results
from ludwig import visualize
visualize.learning_curves(['../results/experiment_run_7/training_statistics.json'],None)
一个示例笔记本可以通过 Domino 提供的主机下载和/或运行。
摘要
随着深度学习方法和原则的发展,我们将看到更多像 Ludwig 这样的工具,这些工具将最佳实践提取到构建在深度学习框架(如 TensorFlow )之上的代码库中,并可通过 Python APIs 访问。这将增加各行业对深度学习方法的采用,并导致令人兴奋的新深度学习应用。
R 中哈希表实现的快速基准
原文:https://www.dominodatalab.com/blog/a-quick-benchmark-of-hashtable-implementations-in-r
更新:我很谦卑,也很感谢这篇帖子有这么多的反馈!它开始是一个快速和肮脏的基准,但我从 Reddit,对这个帖子的评论,甚至从哈德利本人那里得到了一些很好的反馈!这篇文章现在有一些更新。主要的更新是,如果你的键总是有效的 R 符号,R 的new.env(hash=TRUE)
实际上提供了最快的散列表!这是我真正喜欢数据科学社区和数据科学过程的原因之一。迭代和同行评审是伟大成果的关键!
当人们考虑数据科学管道的关键组件时,您可能会考虑建模 API 或可视化库,但不太可能首先想到低级的哈希表。数据科学的一个令人痛苦的事实是,投入典型项目的大部分精力(据报道,80% )都花在了寻找、清理和准备数据上。剩下的“20%”是实际数据分析。数据科学家可用的最有用的数据结构之一是哈希表(也称为关联数组)。
哈希表是名副其实的瑞士陆军电锯。这些数据结构允许用户取一个任意值,比如一个字符串、一个复杂对象或一个数据帧,并使用它作为查找来找到另一个值。在数据科学项目的清理和准备数据阶段,散列表数据结构的常见用途是功能工程(例如,记录您在流中看到单个值的次数)、规范化,甚至是创建简单的直方图。
r 的缺少一个本机(和性能)散列表
让许多从其他背景学习 R 编程语言的人感到惊讶的是,R 对散列表的支持在历史上一直是缺乏的。 更新:事实证明,R 有一个性能完美的哈希表实现,只是命名不直观或者不容易找到。如果您使用new.env(hash=TRUE)
创建一个新的环境,R 为您提供了一个运行良好的环境。这是有意义的,因为它是用 C 实现的哈希表的一个瘦包装器,性能是显而易见的。R 提供的list()
数据结构允许这种关联映射。然而,在堆栈溢出和类似的论坛上,有许多关于使用和增加列表的潜在性能影响的警告。在这篇简短的博文中,我们提供了管理 r 中关联哈希表的 4 种方法的简单基准。我们看看原生的list()
、迈克尔库恩的 dict
包、克里斯托弗·布朗的 hash
包、尼尔富茨的 ht
包和默认的new.env(hash=TRUE)
。
这两个包之间的第一个区别是存储复杂键的能力。例如,您可能想要将一个data.frame
映射到一个特定的值。下面的代码演示了一个简单的示例:
mydict <- dict()
mylist <- list()
myht <- ht()
myhash <- hash()
myenv <- new.env(hash=TRUE)
mykey <- data.frame(product="domino", value="awesome")
mydict[[mykey]] <- "something" #will fail
mylist[[mykey]] <- "something" #will fail
myhash[[mykey]] <- "something" #will fail
myenv[[mykey] <- "something" # will fail
myht[[mykey]] <- "something" #will succeed
原生 R 列表和dict
包不允许你在 hashtable 中存储一个带有复杂键的条目,比如 data.frame。
mykey <- data.frame(product="domino", value="awesome")
mydict[mykey] <- "something" #will fail
Error in mydict[mykey] <- "something" : invalid subscript type 'list'
mylist <- list()
mylist[mykey] <- "something" #will fail
Error in mylist[mykey] <- "something" : invalid subscript type 'list'
hash
包没有提供同样的错误,但是当你看到表面之下时,这个包似乎错误地存储了密钥,并且实际上不允许你查找给定的原始值:(更新:这是我赋值时的一个错误。正如哈德利在一条推文中向我指出的那样,[[
代表单值,[
代表多值。所以这个错误完全是伪造的,隐藏了哈希不存储复杂键的事实。)
# UPDATE - Ignore this code block, read update above!
myhash[mykey] <- "something" #will succeed
myhash[mykey]
Error in get(k, x) : invalid first argument
myhash[data.frame(product="domino", value="awesome")]
Error in get(k, x) : invalid first argument
as.list(myhash)
$`1`
[1] "something"
由于某种原因,作为密钥的data.frame
被默默地存储为数字1
。如果用户不知道,这可能会产生一些难以跟踪的错误。
ht
包使用了一个隐藏的摘要,并允许您使用原始键或生成相同摘要值的对象来查找值:
] myht[mykey] <- "something" #will succeed
] myht[mykey]
[1] "something"
] myht[data.frame(product="domino", value="awesome")]
[1] "something"
如果您需要将任意复杂的对象作为关键字存储在一个散列中,ht
包提供了最强大的功能。
哈希表包的性能
我们分析了这些不同哈希表实现的运行时性能。我们使用优秀的microbenchmark
包来执行每个实验的十次运行。在实验中,我们在每个散列中插入 10,000 到 250,000 个唯一键,增量为 10k。
microbenchmark
为我们提供了一个数据结构,其中包含每次操作的最小值、最大值、*均值和中值,首先通过运行基准代码预热系统两次(例如,为了解决冷缓存问题)。)当我们查看*均值时,结果很清楚:
随着键的数量超过 100k,运行时开始发散。与其他散列表相比,ht
和hash
包的运行时间要短得多。然而,内置的environment
比所有其他实现都要好得多。考虑到ht
和hash
使用环境,这是有意义的,但是为了方便,可能会在原始实现的基础上付出一些性能代价。dict
和list()
实现的性能曲线非常相似,这意味着它们可能在引擎盖下类似地工作。无论如何,他们的性能曲线表明,随着这个数字的增长,性能将受到很大影响。当我们绘制最小值、中间值和最大值时,没有什么意外。我们上面看到的模式在所有的包中重复:
性能的另一个方面是数据结构在存储数据时使用的内存量。我们使用 R 的 更新:我们从 Hadley 的object.size()
函数来确定内存利用率。pry
包中为object_size
函数替换了 R 的object.size()
。由于作者不知道的原因,ht
和hash
包返回了一个恒定的大小,如图表底部的两条线所示。还有一个问题是object_size
为hash
对象返回一个错误,这个问题已经在适当的 github 中提出。
查看图表,您会注意到dict
和list()
在实验的两个点上都看到内存使用的显著增加。它们各自的内存消耗和性能曲线的相似性是一个很强的暗示,即dict
包是作为list()
实现的!然而,你会注意到,现在使用pryr
的object_size
,我们看到dict
对象占用了大量内存。我会调查这件事,因为这似乎不是一个正确的行为。
实验数据取自 Hadley Wickham 的【github 上婴儿名字数据集】。
由于object.size()
似乎不能与ht
和hash
包一起工作,我们使用 Domino 中的 reproducibility engine 来捕获实验的运行时统计数据。这为我们提供了内存使用量的大致概念。
这些包的内存使用情况几乎是相同的,这意味着它们也可能使用 R Base 包的相同基础设施。
摘要
哈希表是一种非常有用的数据结构。在 R 中,如果您需要存储键-值对,并且您的键永远不会是复杂的数据结构,那么hash
包是明显的赢家。(更新:在 R 中,如果你需要存储键值对,并且你的键总是有效的 R 符号,那么内置的new.env(hash=TRUE)
是明显的赢家!)如果你需要复杂的键,ht
包提供了与hash
相似的性能,并增加了使用复杂键的能力。
标题为山中伸弥词典的横幅图片。由 2.0 在 CC 下授权。
独特的国与国新冠肺炎比较
原文:https://www.dominodatalab.com/blog/a-unique-country-to-country-covid-19-comparison
像你们所有人一样,我的心思和我的生活都被新冠肺炎·疫情迷住了。当我看到冠状病毒在社区和国家传播时,我发现自己想要更深入地了解所有这些背后的数据。在搜索网页、博客和数据源后,我找到了一个可靠的数据源,并利用我在数据科学方面的背景来调查假设并与他人分享见解。
这项分析的数据来自约翰霍普金斯大学的 2019 新型冠状病毒数据仓库。基于同样的数据,还有其他可用的分析。两个例子见这里和这里。为什么我没有用那些?当我查看数据时,我想找到一种更容易预测处于冠状病毒斗争早期的国家的病例数和死亡总数的方法。我需要对不同国家的数据进行比较。为了做到这一点,我没有按照日历日期绘制数据,而是按照一个共同的 x 轴绘制,这个 x 轴将为每个国家的新冠肺炎趋势提供一个共同的起点。
约翰霍普金斯大学数据收集的第一个日期是 2020 年 1 月 22 日。在这一天,中国报告了与新冠肺炎有关的 547 例确诊病例和 17 例死亡。这是我们能找到的最早的数据。为了将所有国家放在一个共同的立足点上,我们将所有其他国家的时钟倒转,并使它们与中国首先报告的数字一致。每条曲线都来自同一个起点。在查看了许多国家的数据后,我选择了 600 例确诊病例和 20 例死亡病例作为起点。以下是我注意到的一些观察结果。我不是健康或医学专家,甚至不是这方面的新手。这些观察仅仅是基于数据。在得出最终结论之前,应该考虑测试程序、报告系统、地理人口分布、医疗基础设施和其他因素的知识。
这些观察基于截至 2020 年 3 月 17 日的数据。
按新冠肺炎死亡人数排名的前 10 个国家-显示确诊病例和死亡总数
韩国死亡总数保持不变
在目睹第 20 例死亡的 16 天后,韩国总共只有 81 例死亡。相比之下,意大利在经历了第 20 次死亡后的 16 天内共有 1441 人死亡。这种比较既显示了意大利的情况有多糟糕,也显示了韩国的情况相对可控。
意大利看起来有望比中国快 20 天突破 3000 人的死亡大关,而且很快意大利的新冠肺炎死亡人数将超过中国。考虑到每个国家的总人口,这些数字是惊人的。
美国、日本和荷兰最有可能看到类似韩国的*坦死亡曲线
在过去的两天里(他们第 20 次死亡后的第 9 天和第 10 天),美国的死亡人数从 63 人上升到 108 人。这可不好。然而,如果死亡人口的百分比是地面状况的指标,那么,从大的方面来看,美国的这一增长就不那么令人担忧了。此外,在这种假设下,荷兰的数据看起来并不那么令人鼓舞。
荷兰、西班牙、意大利和伊朗经历了最糟糕的人口死亡百分比曲线
荷兰目前是这个名单上人口死亡曲线百分比最差的国家。在看到第 20 例死亡后的第三天,0.00025%的人口死于新冠肺炎。这比西班牙达到相同比例的时间早了两天。比意大利早四天。比伊朗早 9 天。名单上没有其他国家达到这个比例。
西班牙和荷兰的人口死亡曲线百分比与意大利相似。如果趋势继续,他们可以期待意大利曲线,只是他们会在旅程中更快地到达那里。
我还可以做更多的观察,但我就说到这里。数据将在未来几天发生变化,随着故事的展开,我们都将能够得出自己的结论。
我希望你已经发现这种冠状病毒死亡和病例数据的独特观点是有帮助的。对于那些患有冠状病毒的人或有亲人患病的人,要知道世界上数十亿人正在向你致以良好的祝愿、祈祷和希望早日康复的想法。对于那些在前线帮助拯救生命和保护社区的人们,你们拥有全世界的尊敬和最深切的感激。
Python 中层次模型的 A/B 测试
原文:https://www.dominodatalab.com/blog/ab-testing-with-hierarchical-models-in-python
在这篇文章中,我讨论了一种使用 Beta-二项式层次模型进行 A/B 测试的方法,以纠正测试多个假设时的一个常见缺陷。我将把它与使用伯努利模型计算 p 值的经典方法进行比较,并介绍层次模型相对于经典模型的其他优势。
介绍
想象以下场景:你为一家通过广告获得大部分在线流量的公司工作。你当前的广告只有 3%的点击率,而你的老板认为这还不够好。营销团队提出了 26 种新的广告设计,作为公司的数据科学家,你的工作是确定这些新广告中是否有比当前广告更高的点击率。
你设置了一个在线实验,向互联网用户展示 27 个可能的广告中的一个(当前广告或 26 个新设计中的一个)。两周后,你收集每个广告的数据:有多少用户看到了它,它被点击了多少次。
是时候进行一些统计测试了!新设计与当前设计的对比?没有统计学上的显著差异。新设计 B vs 当前设计?没有统计学上的显著差异。你继续运行测试,继续得到不重要的结果。就在你即将失去希望的时候,新设计 Z 诉当前设计....在 alpha = 0.05 的水*上有显著的统计学差异!
你告诉你的老板,你发现了一个比当前设计点击率更高的设计,你的公司将它部署到生产中。然而,在对新设计进行了两个月的统计后,似乎新设计的点击率为 3%。哪里出了问题?
在执行 A/B 测试时,数据科学家经常会陷入一个常见的陷阱,即无法针对多个测试进行纠正。alpha = 0.05 的测试意味着您的统计测试随机产生一个极端或更极端的结果(假设给定的零假设为真)的概率为 0.05。如果您运行 26 个统计测试,那么假阳性的预期数量的上限是 26*0.05 = 1.3。这意味着在我们上面的场景中,我们的数据科学家可以预期至少有一个假阳性结果,不幸的是,这个假阳性结果是她向老板报告的结果。
问题是
假设我们正在设计 Domino 的网站,我们正在测试登陆页面的五种不同布局。当用户点击我们的网站时,她会看到五种登陆页面布局中的一种。从那里,用户可以决定是否要在 Domino 上创建一个帐户。
| 网站(全球资讯网的主机站) | 点击 | 注册 | 经验比率 | 真实汇率 |
| A | One thousand and fifty-five | Twenty-eight | Zero point zero two seven | Zero point zero three two |
| B | One thousand and fifty-seven | Forty-five | Zero point zero four three | Zero point zero four one |
| C | One thousand and sixty-five | sixty-nine | Zero point zero six five | Zero point zero five eight |
| D | One thousand and thirty-nine | Fifty-eight | Zero point zero five six | Zero point zero four seven |
| E | One thousand and forty-six | Sixty | Zero point zero five seven | Zero point zero five one |
作为免责声明,这是我创建的模拟数据,用来模仿真实的 A/B 测试数据。每个网站的注册人数是通过从二项式分布中生成一个数字来生成的,其中 n =点击次数,p =真实比率。经验比率代表注册/点击。
初步:贝叶斯统计
统计学有两个著名的分支:频率统计和贝叶斯统计。这两个分支有很多不同之处,但我们将重点关注一个关键的不同之处:
- 在频率统计中,我们假设感兴趣的参数是固定的常数。我们着重于计算可能性 Prob(数据|参数),即在给定感兴趣的参数的情况下,我们看到观察到的数据点集的概率。
- 在贝叶斯统计中,我们对感兴趣的参数有不确定性,我们用数学方法在一个先验分布中捕获关于这些参数的先验不确定性,正式表示为 Prob(参数)。我们着重于计算后验分布 Prob(参数|数据),表示在我们观察到数据后,围绕感兴趣参数的后验不确定性。
拜贝叶斯定理所赐,我们知道后验概率(参数|数据)与概率(数据|参数)概率(参数)成正比,概率乘以先验分布。
在我们的问题中,感兴趣的参数是人们在每个网站上注册的真实比率,观察到的数据是每个网站获得的点击和注册数量。因为是进行贝叶斯统计,所以对后验分布建模比较感兴趣:
Prob(真实报名率|数据)~ Prob(数据|真实报名率)Prob(真实报名率)。
经典伯努利模型
为了在 Python 中构建贝叶斯模型,我们将使用贝叶斯随机建模库 PyMC 。
import pymc
Cam Davidson-Pilon 用 PyMC 写了一本关于贝叶斯模型的伟大著作,我推荐给任何对学习贝叶斯统计或如何用 Python 编程贝叶斯模型感兴趣的人。本节中的 PyMC 代码基于他书中的 A/B 测试示例。
在我们研究 Beta-二项式分层模型方法之前,让我们先来看看我们如何在标准的两个网站案例中使用伯努利模型进行 A/B 测试。回想一下,网站 A 有 1055 次点击和 27 次注册,网站 B 有 1057 次点击和 45 次注册。
# Website A had 1055 clicks and 28 sign-ups
values_A = np.hstack(([0]*(1055-28),[1]*28))
# Website B had 1057 clicks and 45 sign-ups
values_B = np.hstack(([0]*(1057-45),[1]*45))
现在,我们可以将每个可能的注册建模为伯努利事件。回想一下,伯努利分布反映了抛硬币的结果。以某种概率 p ,硬币翻转正面,以某种概率 1-p ,硬币翻转反面。这个模型背后的直觉如下:一个用户访问网站。用户投掷硬币。如果硬币正面朝上,用户就签约。
现在,假设每个网站都有自己的硬币。网站 A 有一枚硬币以概率 p[A] 正面落地,网站 B 有一枚硬币以概率 p[B] 正面落地。这两种概率我们都不知道,但是我们想确定 p[A]p[B]或者反过来是否成立(也有可能 p[A] = p[B] )。
由于我们没有关于 p[A] 或 p[B] 的真实值的信息或偏差,我们将从均匀分布中得出这两个参数。此外,我还创建了一个 delta 函数来创建两个分布之差的后验分布。
# Create a uniform prior for the probabilities p_a and p_b
p_A = pymc.Uniform('p_A', 0, 1)
p_B = pymc.Uniform('p_B', 0, 1)
# Creates a posterior distribution of B - A
@pymc.deterministic
def delta(p_A = p_A, p_B = p_B):
return p_B - p_A
接下来,我们将为每个网站创建一个观察变量,该变量包含每个网站的注册数据。然后,我们使用 pymc 运行 MCMC ( 马尔可夫链蒙特卡罗)从每个网站的后验分布中取样。对于门外汉来说,MCMC 是一类算法,通过构建具有期望分布特性的*衡分布,从期望分布中进行采样。因为 MCMC 采样器需要时间来收敛到*衡,我们丢弃了前 500,000 个采样点,所以我们只有从(希望)收敛的*衡分布中采样的点。
# Create the Bernoulli variables for the observation
obs_A = pymc.Bernoulli('obs_A', p_A, value = values_A , observed = True)
obs_B = pymc.Bernoulli('obs_B', p_B, value = values_B , observed = True)
# Create the model and run the sampling
model = pymc.Model([p_A, p_B, delta, values_A, values_B])
mcmc = pymc.MCMC(model)
# Sample 1,000,000 million points and throw out the first 500,000
mcmc.sample(1000000, 500000)
现在,让我们检查 delta 分布的后验概率(记住,这是网站 B 的后验概率-网站 A 的后验概率)。
delta_distribution = mcmc.trace('delta')[:]
sns.kdeplot(delta_distribution, shade = True)
plt.axvline(0.00, color = 'black')
黑线在 x = 0 处,表示两个分布之间的差值为 0。通过观察,我们看到分布的大部分质量在黑线的右边。这意味着从 B 分布中采样的大多数点比从 A 分布中采样的大。
为了得到更多的定量结果,我们可以计算网站 A 比网站 b 获得更多注册的概率。
print("Probability that website A gets MORE sign-ups than site B: %0.3f" % (delta_distribution &lt; 0).mean())
print("Probability that website A gets LESS sign-ups than site B: %0.3f" % (delta_distribution &gt; 0).mean())
The probability that website A gets MORE sign-ups than site B: 0.023
The probability that website A gets LESS sign-ups than site B: 0.977
对于这两个网站,我们看到网站 B 的表现优于网站 a。这对两个网站来说效果很好,但是如果我们对五个网站中的所有网站都这样做,由于多重测试问题,我们可能会遇到“误报问题”。有 10 个可能的配对,所以假设我们在 alpha = 0.05 的水*上独立测试所有可能的配对。对于每个测试,我们有 95%的机会不会得到假阳性,所以所有测试都不会产生假阳性的概率是(0.95)^(10) ,大约等于 0.60。这意味着获得至少一个假阳性结果的概率约为 0.40%或 40%。如果我们有更多的网站,从而有更多的配对来测试,得到假阳性的概率只会增加。
正如你所看到的,如果不修正多重测试,我们很有可能会遇到假阳性结果。在下一节中,我将展示层次模型如何隐式地纠正这种多重测试陷阱,并产生更准确的结果。
贝塔分布
在我介绍贝塔-二项式层次模型之前,我想讨论一下贝塔分布的理论动机。让我们考虑区间(0,1)上的均匀分布。
如你所见,这是一个简单的分布。它为域(0,1)中的所有点分配相等的概率权重,也称为分布的支持度。然而,如果我们希望(0,1)上的分布不是处处*坦的呢?
这就是 Beta 发行版的用武之地!贝塔分布可以看作是均匀分布(0,1)的推广,因为它允许我们在区间(0,1)上定义更一般的概率密度函数。使用两个参数 a 和 b ,贝塔( a , b )分布由以下概率密度函数定义:
其中 C 是常数,用于将函数的积分归一化为 1(所有概率密度函数必须积分为 1)。这个常数正式名称为贝塔函数。通过改变 a 和 b 的值,我们可以改变分布的形状和“陡度”,从而允许我们在区间(0,1)上轻松创建各种各样的函数。
请注意,在上面的图中,对应于分布 Beta(1,1)的绿线与 Uniform(0,1)的绿线相同。如果将 a , b = 1 代入贝塔分布的 pdf,则得到 pdf(x) = B(1,1)x(1-1)(1-x)(1-1)= B(1,1)x⁰(1-x)⁰= B(1,1) 1 1 = 1,其中 B(1,1)是在(1)处计算的贝塔函数
因此 Beta(1,1)的 pdf 处处为 1,所以等价于均匀(0,1)的 pdf,从而证明 Beta 分布确实是均匀(0,1)的推广。
现在,我敢肯定,你们中的许多人都想知道这一部分有什么大的收获,所以他们在这里:
- 贝塔分布是(0,1)上的一个通用概率分布族。
- 这允许我们创建先验分布,它结合了我们的一些信念,从而提供了丰富的先验信息。
在下一节中,我将讨论为什么这很重要,以及如何将 Beta 分布用于 A/B 测试。
分层建模
在本节中,我们将使用二项式分布对网站注册进行建模。二项式(n,p) 背后的直觉是,如果我们以落地正面的概率pn 次抛硬币,我们看到 k 正面朝向 0 和 n 之间的某个 k 的可能性有多大。
在经典伯努利方法部分,我说过我们没有关于每个网站真实比率的先验信息,所以我们使用 Uniform(0,1)作为无信息先验。在本节中,我们将假设每个真实注册率都来自 Beta 分布。
现在,注册人数, k[i] 用二项式(n[i] ,p[i] ) 建模,每个网站的真实注册率, p[i] 从 Beta 中抽取( a , b )。到目前为止,我们忽略了一个重要的问题?我们如何选择 a 和 b ?
我们可以指定一个先验分布来选择这些超参数,但是我们的先验分布有一个先验分布,它一直向下。
更好的替代方案是从分布
f( a ,b)~(a+b)^(-5/2)其中 a , b > 0。我肯定这个函数对你们中的许多人来说看起来像数学魔术,但是关于这个概率分布从何而来的深入解释可以在 Andrew Gelman 的书或者 Youtube 上的教程中找到。
该函数背后的一般思想是,它结合了关于*均值 log(a/b)的 logit 和“样本大小”的 log(a+b)的思想,以定义这两个参数的适当概率分布。如果前面的句子对你来说毫无意义,不要担心。它只是说,如果我们使用这个函数,当对 a 和 b 进行采样时,我们会得到期望的数学特性。
现在我已经介绍了理论,我们终于可以建立我们的层次模型了。本节中的代码基于 Stater Stich 的使用层次模型教程。
贝塔先验函数从上面定义的函数中为我们采样 a 和 b 。PyMC 中的随机装饰器要求我们返回对数似然,所以我们将返回( a + b )^(-2.5) 的对数。
@pymc.stochastic(dtype=np.float64)
def beta_priors(value=[1.0, 1.0]):
a, b = value
if a &lt;= 0 or b &lt;= 0:
return -np.inf
else:
return np.log(np.power((a + b), -2.5))
a = beta_priors[0]
b = beta_priors[1]
然后,我们将真实的注册率建模为 Beta 分布,并使用我们观察到的注册数据来构建二项式分布。再次使用 MCMC 从*衡分布中采样 1,000,000 个数据点(再次丢弃前 500,000)。
# The hidden, true rate for each website.
true_rates = pymc.Beta('true_rates', a, b, size=5)
# The observed values
trials = np.array([1055, 1057, 1065, 1039, 1046])
successes = np.array([28, 45, 69, 58, 60])
observed_values = pymc.Binomial('observed_values', trials, true_rates, observed=True, value=successes)
model = pymc.Model([a, b, true_rates, observed_values])
mcmc = pymc.MCMC(model)
# Generate 1,000,000 samples, and throw out the first 500,000
mcmc.sample(1000000, 500000)
让我们看看我们的五个后验分布是什么样的。
既然我们已经有了所有五个后验分布,我们就可以很容易地计算出其中任意两个之间的差异。具体来说,我们来看看网站 C 和网站 a 的区别。
diff_CA = mcmc.trace('true_rates')[:][:,2] - mcmc.trace('true_rates')[:][:,0]
sns.kdeplot(diff_CA, shade = True, label = "Difference site C - site A")
plt.axvline(0.0, color = 'black')
我们再次看到,该差异分布的大部分质量位于垂直黑线的右侧,这意味着从 C 分布中采样的大部分点大于从 A 分布中采样的点。如果我们量化这些结果,我们得到:
print("Probability that website A gets MORE sign-ups than website C: %0.3f" % (diff_CA &lt; 0).mean())
print("Probability that website A gets LESS sign-ups than website C: %0.3f" % (diff_CA &gt; 0).mean())
The probability that website A gets MORE sign-ups than website C: 0.000
The probability that website A gets LESS sign-ups than website C: 1.000
我们看到,几乎 100%确定网站 C 比网站 A 好。对于那些对这一结果持怀疑态度的人,请记住,我选择的网站 C 模拟数据的真实注册率几乎是网站 A 的两倍,因此网站 C 和网站 A 的后验分布有如此明显的差异是可以预料的。
此外,由于分层模型,我们可以连续执行多个测试,而不必针对多个比较进行调整。比如,我们再来重温一下网站 B 和网站 a 的后验分布的区别。
我们再次看到,这个后验分布的大部分概率位于 x = 0.00 线的右边。我们可以使用与网站 C 和网站 a 之间的差异相同的方法来量化这些结果。
The probability that website A gets MORE sign-ups than website B: 0.028
The probability that website A gets LESS sign-ups than website B: 0.972
同样,我们看到的结果显示,在统计显著水*上,网站 B 比网站 A 具有更高的注册率,与使用经典伯努利模型时的结果相同。
应该注意的是,层次模型不能克服数据的局限性。例如,让我们考虑网站 D 和网站 E。虽然这两个网站的真实注册率不同(网站 E 比网站 D 好),但它们的点击和注册数据几乎相同。如果我们为这个网站绘制两个后验分布,我们会看到它们有很大的重叠。
因此,我们的后验差产生了一个以 0.0 为中心的分布,我们不能得出一个网站在统计显著水*上有更高的注册率的结论。
Probability that website D gets MORE sign-ups than website E: 0.437
Probability that website D gets LESS sign-ups than website E: 0.563
使用分层模型,我可以测试网站 C 和网站 A 具有不同真实注册率的假设,以及网站 B 和网站 A 相继具有不同真实注册率的假设,如果不对我们的统计测试进行一些调整,我们就无法使用伯努利模型进行测试。
比较两种方法
现在我已经向您展示了两种不同的方法来进行 A/B 测试:一种方法使用伯努利分布,另一种方法使用贝塔-二项式分布。我使用多重比较测试的问题来激发 Beta-二项式层次模型。现在让我们通过检查由两种方法中的每一种为网站 A 生成的后验分布来比较这两种方法的性能。我在 x = 0.32 处添加了一条黑色垂直线,这是我用来模拟数据的真实概率。
sns.kdeplot(siteA_distribution, shade = True, label = "Bernoulli Model")
sns.kdeplot(mcmc.trace('true_rates')[:][:,0], shade = True, label = "Hierarchical Beta")
plt.axvline(0.032, color = 'black')
如你所见,分级贝塔二项式模型的质量比伯努利模型的质量更接*真实速率。在这种情况下,分级模型的后验概率给了我们一个更接*真实比率的估计。
为什么分级β-二项式模型在估计真实利率时似乎更准确?这归结于每种方法中使用的先验分布。在经典的伯努利方法中,我们使用均匀(0,1)作为先验分布。正如我前面提到的,这是一个无信息的先验,因为它对所有可能的概率赋予了同等的权重。另一方面,Beta 先验创建了一个分布,该分布将一些概率质量放向“真实”,因此我们看到了对后验分布的更精确的估计。如果我们稍微改变贝塔分布的值 a 和 b ,我们可能看不到两个后验概率之间的差异。
有可能存在一些其他的数学函数,我们可以用它作为我们的先验,从而得到一个更精确的后验,但是我们不能保证得到的后验是容易计算的。贝塔分布是二项式分布之前的共轭分布,所以我们保证得到的后验分布很容易计算(在这种情况下,后验分布总是贝塔分布)。
多重测试问题
最后,我要解决大家在阅读这篇文章时一直在思考的问题!为什么层次模型解决了多重测试的问题?
让我们考虑两个极端:在一个极端,我们模拟每个网站有相同的真实注册率。这意味着 p[A] = p[B] =...= p[E] ,从而完全汇集来自每个网站的所有注册数据,以估计所有五个网站的“*均”注册率。在另一个极端,我们为每个网站的注册率建模,彼此完全分离,因此只关注个人注册率。分层模型是这两个极端之间的折衷,称为部分池化。
在分层模型中,我们认识到,由于所有五个网站都在模拟相同的现象,当我们单独模拟每个网站时,我们会忽略所有五个网站的一些信息。通过合并所有五个网站上发生的主要影响,同时保留个别影响,我们减少了模型中的统计不确定性,从而减少了多重比较的问题。在本文(第 7-9 页,第 3.2 节)中可以找到关于部分池以及为什么分层模型减少多重比较问题的更详细解释。
需要注意的一点是部分池并不是贝叶斯统计所独有的。例如在机器学习中,多任务学习处理训练分类器来学习一组相关问题,使用所有问题的公共表示。当我们应用组收缩惩罚(这减轻了公共表示对每个分类器决策的影响)时,我们看到了部分池效应,因为每个分类器的输出包含了减轻的公共表示以及每个问题的单独表示。
最后,我认为值得一提的是最广为人知的处理多重比较的方法:Bonferroni 校正。如果你还记得你的统计学入门课程,标准的统计推断程序围绕着拒绝零假设(H[0] )如果给定零假设的观察数据的可能性太小。我们量化了“太小”的含义,使用α (alpha)值来表示我们的统计显著性阈值(即α = 0.05)。
Bonferroni 修正声明,如果我们要测试 n 假设,那么我们需要将统计显著性的阈值降低到α/ n 。例如,如果我们计划在α = 0.05 水*进行测试,我们将测试 10 个假设,那么 Bonferroni 修正声明我们应该在 0.05/10 = 0.005 水*进行测试。这意味着,当我们得到小于 0.05 的 p 值时,我们不是拒绝我们的零假设,而是当我们观察到小于 0.005 的 p 值时,我们拒绝我们的零假设。根据所涉及的统计测试,还有其他程序来校正多重比较。
结论
数据科学家使用 A/B 测试对他们公司的业绩产生有意义的影响。好的 A/B 测试可以带来百万美元的成果,但是好的 A/B 测试也比你想象的要复杂。有许多陷阱会导致无意义的结果。
贝叶斯分层模型为 A/B 测试提供了一种简单的方法,克服了困扰数据科学家的一些陷阱。这篇博文的灵感来自 Slater Stich 的A/B 测试统计建议系列,所以任何有兴趣了解更多这些陷阱的人都可以看看他的帖子。
如果你想进一步阅读应用贝叶斯方法,我推荐这本书。除了是一本好书,它还有最可爱的封面。最后, Udacity 最*发布了一个关于 A/B 测试的免费在线课程。
通过雪花 Java UDF 集成加速模型速度
在接下来的十年里,打败竞争对手的公司将是“模型驱动”的企业。这些公司经常进行大量的数据科学工作,以便从“数据驱动”转向“模型驱动”的运营,并为业务提供基于模型的见解。
对于一家公司来说,典型的数据科学之旅始于一个小团队,该团队的任务是解决一些特定的问题。跟踪和管理少量在 Excel 中处理数据的实验相当简单。一旦公司遇到可扩展性障碍,挑战就会浮出水面。在某一点上,随着需求的不断增长,数据量会迅速增加。数据不再存储在 CSV 文件中,而是存储在专门构建的数据湖/数据仓库中。个人笔记本电脑不再能够处理所需的数量。数据科学团队不断壮大,人们再也不能孤立地工作,他们需要能够共享知识、移交项目,并拥有验证和再现能力。
为了恰当地扩展数据科学,公司需要一个整体系统来开发、部署、监控和管理大规模模型——一个记录其数据科学的系统。这是 Domino Enterprise MLOps *台的核心功能——一个支持对模型、仪表板和数据管道等数据产品进行快速、可重复和协作工作的系统。同样,雪花的数据云也在不断发展壮大,现在已经成为基于云的数据存储和分析(数据仓库即服务空间)的主要参与者之一。
这两个*台都是云不可知的,因此它们可以在 Azure、GCP 和 AWS 上运行。联合客户已经使用 Domino 数据连接器在 Domino 环境和雪花数据云之间检索和写入数据。最*宣布的 Domino Data Lab 和 Snowflake 之间的合作伙伴关系通过将 Snowflake 的 Snowpark 和 Java UDFs 集成到 Domino 中增强了这种体验。Snowpark 是一种新的开发人员体验,它使数据科学家能够利用他们最喜欢的工具,并直接在 Snowflake 中部署代码。
在这篇博文中,我们将重点关注这两个*台提供的 UDF 功能。
为什么选择雪花 UDF
一般来说,在关系数据库的环境中,用户定义函数(UDF)是一种扩展底层数据库功能的机制。此外,这种函数可以在标准的 SQL 查询中进行评估,但它可以用不同于 SQL 的语言编写。这个定义使得 UDF 有点类似于存储过程,但是两者之间有许多关键的区别。雪花存储过程使用 JavaScript,并且在大多数情况下使用 SQL。UDF 确实支持 JavaScript 和 SQL,但是也可以用其他语言编写,比如 Java 和 Scala。存储过程是直接调用的(通过 CALL 命令),但是 UDF 是作为语句的一部分调用的。因此,如果我们需要一个可以在语句中使用的值,或者如果我们需要为每个输入行生成一个值,我们最好的选择是 UDF。
最重要的是,UDF 直接在雪花中执行。如果大数据教会了我们什么,那就是对于大容量和高速度的数据,将计算转移到数据所在的位置是明智的。在实例(甚至不同的云提供商)之间转移千兆字节甚至千兆字节的数据会对性能产生重大影响,并对数据科学团队保持高模型速度和支持公司内部创新工作的能力产生负面影响。这就是 UDF 发挥作用的地方,它们可能是一种通用的机制,可以提高性能并简化许多用例。
例如:
- 加速模型构建和评分
- 可以在雪花中加载模型训练 Java UDF,并且可以在新数据进入时自动重建模型,而不需要在实例之间传输数据。
- 预训练模型可以作为 UDF 加载到 Snowflake 中,以便在传入数据进入数据库时对其进行评分(例如异常检测)。
- 高级数据争论和预处理管道
- 与 SQL 相比,Java UDF 可以使用更广泛的技术进行数据清理、特性工程和模式高级预处理。
- 现有的预处理、数据接收和数据质量流程可以从 Java/Spark 转换成 Java UDFs。这些管道可以在 Snowflake 中本地运行,它们的执行和可再现性由 Domino 管理。
- 增强的商业智能功能
- 商业智能工具可以通过 SQL 调用利用执行复杂处理、聚合和转换的 UDF。这使得在 Domino 中运行的 BI 产品(例如 Apache SuperSet)能够提取和应用高级计算和聚合,这在工具或普通 SQL 中通常是不可用的。
从 Domino 连接到雪花
从 Domino 连接雪花很简单,因为雪花库和雪花驱动程序已经包含在默认的 Domino Analytics 分布式计算环境中。我们还在之前的一篇博文中介绍了设置凭证和创建初始连接的过程。
连接到雪花之后,我们运行一个简单的 SELECT 语句来确认我们的连接工作正常,并验证雪花版本。
import os
import snowflake.connector as sf
ctx = sf.connect(
user=os.environ["SNOWFLAKE_USER"],
password=os.environ["SNOWFLAKE_PASSWORD"],
account=os.environ["SNOWFLAKE_ACCOUNT"]
)
cur = ctx.cursor()
cur.execute("SELECT current_version()")
cur.fetchone()[0]
'5.21.2'
出于本演示的目的,我们使用以下 DDL 在雪花中创建了一个表:
CREATE OR REPLACE TABLE DOMINO_DEMONSTRATIONS.PUBLIC.AUTOMPG (
MPG NUMBER(38,0),
CYLINDERS NUMBER(38,0),
DISPLACEMENT NUMBER(38,0),
HORSEPOWER NUMBER(38,0),
WEIGHT NUMBER(38,0),
ACCELERATION FLOAT,
YEAR NUMBER(38,0),
ORIGIN NUMBER(38,0),
NAME VARCHAR(16777216)
);
该表由 AutoMPG 数据集填充,可以从 Kaggle 下载。我们可以运行一个简单的 SELECT 并从 AUTOMPG 表中获取前 3 行。
cur.execute("USE DATABASE DOMINO_DEMONSTRATIONS")
res = cur.execute("SELECT * FROM AUTOMPG LIMIT 3")
for row in res:
print(row)
(18, 8, 307, 130, 3504, 12.0, 70, 1, 'chevrolet chevelle malibu')
(15, 8, 350, 165, 3693, 11.5, 70, 1, 'buick skylark 320')
(18, 8, 318, 150, 3436, 11.0, 70, 1, 'plymouth satellite')
既然已经确认了连接,我们就可以转移到 UDF 了。
从 Domino 使用雪花 Java UDFs
我们从定义一个简单的 Java UDF 开始。我们的第一个函数是一个非常基本的 Java 方法,它简单地返回两个数的和。Java 代码如下所示:
public static int add(int x, int y) {
return x + y;
}
这个静态方法接受两个参数 x 和 y,并返回它们的和。通常,雪花支持两种类型的 UDF:
- 预编译的 UDF,作为 JAR 文件导入,可以包含多个 Java 函数
- 内嵌 UDF,通常只包含一个函数,由雪花动态编译
在这个例子中,我们将使用一个内嵌的 UDF,所以我们需要做的就是将 Java 代码包装在一个 CREATE FUNCTION 语句中。
create function add(x integer, y integer)
returns integer
language java
handler='TestAddFunc.add'
target_path='@~/TestAddFunc.jar'
as
$$
class TestAddFunc {
public static int add(int x, int y) {
return x + y;
}
}
$$;
上面的语法是不言自明的 Java 代码由一对$符号包装。target_path 子句告诉雪花编译后的 Java 代码使用什么文件名,handler 子句给出调用 UDF 时需要执行的 Java 方法的名称。在雪花中运行这个 DDL 会产生一个“函数添加成功完成”的消息。
我们现在可以从 Domino 工作区(本例中为 JupyterLab)测试该函数:
cur.execute("SELECT ADD(5,2)")
cur.fetchone()[0]
7
让我们定义另一个函数。这个将使用公式 235.215/(1 美国英里)= 235.215 升/100 公里,将英里数转换为升/100 公里。该函数的 DDL 如下所示:
create function l100km(mpg float)
returns double
language java
handler='L100KMFunc.l100km'
target_path='@~/L100KMAddFunc.jar'
as
$$
class L100KMFunc {
public static double l100km(float mpg) {
return (235.214583 / mpg);
}
}
$$;
我们可以使用 AUTOMPG 表中的 MPG 列调用此函数,以获得数据集中最省油的前 5 辆汽车,同时将 MPG 转换为 L/100km。
res = cur.execute("SELECT NAME, ROUND(L100KM(MPG),2) AS \"L/100KM\" FROM AUTOMPG ORDER BY \"L/100KM\" LIMIT 5")
for row in res:
print(row)
('mazda glc', 5.0)
('honda civic 1500 gl', 5.23)
('vw rabbit c (diesel)', 5.35)
('vw pickup', 5.35)
('vw dasher (diesel)', 5.47)
结果集确认该函数是逐行调用的,MPG 到 L/100km 的转换是动态执行的。这是一个相当简单的例子,因为您当然可以在纯 SQL 中进行这种计算,但这里的关键点是,使用这种方法,您可以释放 Java 的全部能力,并即时执行复杂的操作。
现在,让我们针对我们的测试数据实现一个简单的机器学习评分函数。回想一下,Domino 使团队能够使用不同的工具和语言,所以为了让这个例子更加激动人心,假设我们的一个同事使用 R 来拟合针对 AutoMPG 数据的线性模型。该模型解释了 MPG 和马力之间的关系,生成它的 R 代码如下所示:
> head(autompg)
mpg cylinders displacement horsepower weight acceleration model.year origin car.name
1 18 8 307 130 3504 12.0 70 1 chevrolet chevelle malibu
2 15 8 350 165 3693 11.5 70 1 buick skylark 320
3 18 8 318 150 3436 11.0 70 1 plymouth satellite
4 16 8 304 150 3433 12.0 70 1 amc rebel sst
5 17 8 302 140 3449 10.5 70 1 ford torino
6 15 8 429 198 4341 10.0 70 1 ford galaxie 500
> model <- lm(formula=mpg~horsepower, data=autompg)
> summary(model)
Call:
lm(formula = mpg ~ horsepower, data = autompg)
Residuals:
Min 1Q Median 3Q Max
-13.5710 -3.2592 -0.3435 2.7630 16.9240
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 39.935861 0.717499 55.66 <2e-16 ***
horsepower -0.157845 0.006446 -24.49 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 4.906 on 390 degrees of freedom
(6 observations deleted due to missingness)
Multiple R-squared: 0.6059, Adjusted R-squared: 0.6049
F-statistic: 599.7 on 1 and 390 DF, p-value: < 2.2e-16
使用截距和马力系数,我们可以定义以下 UDF 函数:
create function mpgPredict(mpg float)
returns double
language java
handler='ML.mpgPredict'
target_path='@~/ML3.jar'
as
$$
class ML {
public static double mpgPredict(float horsepower) {
float intercept = 39.935861f;
float hp_coeff = -0.157845f;
return intercept + hp_coeff * horsepower;
}
}
$$;
请注意,为了简单起见,我们对系数进行了硬编码,但是我们也可以很容易地从外部文件或另一个表中提取系数,这些表会在每次模型重新训练后更新。一旦预测函数就绪,我们就可以使用它来查看预测与现有数据的匹配程度。
res = cur.execute("SELECT NAME, ROUND(MPGPREDICT(HORSEPOWER),2), MPG FROM AUTOMPG LIMIT 5")
for row in res:
print(row)
('chevrolet chevelle malibu', 19.42, 18)
('buick skylark 320', 13.89, 15)
('plymouth satellite', 16.26, 18)
('amc rebel sst', 16.26, 16)
('ford torino', 17.84, 17)
我们也可以使用 UDF 来记录看不见的数据。例如,我们可以计算丰田 RAV4 - a 车辆的预期 MPG,这不在原始 AutoMPG 数据库中。
cur.execute("SELECT 'TOYOTA RAV4' AS MODEL, ROUND(MPGPREDICT(163),2) AS MPG");
cur.fetchone()
('TOYOTA RAV4', 14.21)
预编译的 UDF
Java UDF 存储在一个 JAR 文件中。雪花自动处理内嵌 UDF 的编译和打包。然而,预编译的 UDF 需要一些额外的前期工作。
JAR 文件的组织遵循标准的 Java 归档惯例。如果不熟悉标准的 JAR 文件结构,可以阅读 Java 官方文档中的打包 JAR 文件中的程序教程。
在很高的层面上,创建自己的预编译 UDF 需要经历的步骤如下:
- 编写 Java 类,其中包含您计划作为 UDF 公开的函数。
- 使用 Java 编译器(javac)将源代码编译成。类文件。
- 打包你的。类文件复制到 JAR 文件中。您可以使用 Java jar 命令。
- 添加一个 manifest 文件,它包含关于 JAR 文件中具体包含什么的元信息。
JAR 文件准备好之后,需要将其复制到雪花中的一个外部或命名的内部阶段,该阶段必须对 UDF 的所有者可读。推荐的方法是使用 PUT 命令,例如:
put
file:///absolute_path_to_the_jar_file/jar_file_name.jar
@~/udf_stage_dir/
auto_compress = false
overwrite = true
;
注意上面的覆盖标志。当 JAR 文件是一些 CI/CD 管道的一部分时(例如,我们正在重新训练一个模型,并按计划将其打包到一个 JAR 文件中),这个选项是很有帮助的,并且它需要被定期替换。如果是这种情况,雪花建议在无法调用函数时进行 UDF 更新。
Java 归档格式支持广泛的功能,包括电子签名、压缩、版本控制、版本一致性实施(封装)等。这带来了额外的好处,如安全性、版本控制和可移植性,但更重要的是,存档允许您将额外的文件与类一起打包。这些可以是预训练模型、向量空间模型、附加 Java 类(例如,定制机器学习算法)等。
摘要
在这篇博文中,我们介绍了 Domino - Snowflake UDF 集成的一些主要优势。Domino 数据科学*台可以与 Snowflake 中的 UDF 接口,使数据科学家能够将它们用作复杂管道中的构建模块(例如用于数据预处理和数据争论),或者用于训练模型和数据评分。这种方法的主要优势在于,它支持访问 Scala 和 Java 等语言的复杂特性,并且消除了在实例和云之间移动数据的需要。
虽然在本文中,我们关注的是单向用例(即从 Domino 调用 UDF),但是双向通信也是完全支持的。人们可以想象雪花中的 UDF 调用模型 API 或 Domino 模型管理器,动态地对传入的数据进行评分,或者在新样本到达数据库时立即执行在线数据漂移检查。
这种类型的自动化使模型能够更快地做出响应,消除由大数据量或计算资源不足导致的可扩展性问题,提高数据科学团队的工作效率,并降低大规模培训和运行模型的成本。
此外,因为访问和创建 UDF 的所有代码都可以驻留在 Domino 中,所以该*台透明地为数据科学团队创建的所有交付物提供了版本控制、可跟踪性和可再现性。这有助于知识发现、移交和法规遵从,并允许数据科学家专注于加速研究和模型部署的工作。
关于多米诺
Domino 的企业 MLOps *台通过以下方式解决了难以扩展数据科学的问题:
- 支持最广泛的开源和商业工具及基础设施的生态系统。
- 在每个实验的端到端生命周期中提供可重复性和再现性,无论在开发过程中使用了什么工具。
- 通过在单一*台中提供一致、简化的体验,加速从构思到生产的完整端到端生命周期。
- 满足安全性、治理、法规遵从性和协作方面的 IT 要求。
上面概述的整体方法是使 Domino 成为受超过 20%的财富 100 强公司信任的企业 MLOps *台的关键特征。
关于雪花
Snowflake 提供数据云—一个全球网络,成千上万的组织在其中以*乎无限的规模、并发性和性能移动数据。雪花的数据云*台提供的一些关键功能包括:
- 真正的 SaaS 产品,通过弹性虚拟计算实例和虚拟存储服务提供几乎无限的可扩展性。
- 支持广泛的编程语言,如 Go、Java、.NET,Python,C,Node.js,包括 ANSI SQL 兼容性。
- 支持各种数据结构(例如 CSV、XML、JSON、Parquet 等)。
- 通过 ODBC、JDBC、本地连接器(如 Python、Spark)、第三方 ETL 和 BI 工具集成(如 Informatica、ThoughtSpot 等)实现简单的连接
- *乎零维护的全托管服务。
在 O'Reilly AI 大会上加速云中的数据科学生命周期
By Rohit Israni, Director Strategic Business Development, AI Programs, Intel Corporation on September 05, 2018 in
感谢 Rohit Israni 贡献了这篇客座博文,最初发布于英特尔人工智能构建者博客。
在内部维护数据科学项目可能具有挑战性。为了使数据科学成为竞争优势,公司需要能够快速开发、测试和交付其数据的高影响力模型,并大规模管理这些模型。此外,大规模部署分析解决方案需要大量计算,并会给基础架构资源带来额外压力。为了在数据科学项目上取得成功,企业需要能够轻松扩展硬件、管理软件环境、跟踪工作、监控资源,以及自动化模型部署和监控。
英特尔 AI Builders 合作伙伴 Domino 数据实验室通过其数据科学*台带来了一种全新的模型管理方法。基于预测分析和人工智能,该*台在各种行业都有实际应用,包括金融服务、制造、零售和医疗保健。该*台允许 Domino 的客户从 Python 的英特尔发行版中获益。
该公司在 2018 年 9 月 4 日至 7 日在旧金山举行的人工智能大会上的演示特别关注加速整个数据科学生命周期,从探索性分析到生产模型管理。它将展示如何扩展硬件、管理软件环境、跟踪工作、监控资源,以及自动化模型部署和监控。
人工智能大会由 O'Reilly 和英特尔共同举办。欲了解完整的会议日程和更多详情,请点击此处。
不能去现场演示吗?了解如何在 Domino 中开发和交付模型。
Jupyter 中的 Python 3 支持
原文:https://www.dominodatalab.com/blog/adding-python-3-to-jupyter
Domino 让您只需在强大的云硬件上点击一下,就可以启动 Jupyter 笔记本(和其他交互式工具)。我们最*增加了对 Python 3 的测试支持,所以你现在可以在 Python 2 或 3 中运行 Jupyter 笔记本:
因此,如果您一直想尝试 Python 3,但不想维护机器上的安装,那么您可以在 Domino 上尝试一下。如果您感兴趣,请联系我们,我们将为您提供该测试版功能。
Python 3 中的新特性
Python 3 包括许多语法改进和其他特性。例如:
- 更好的 unicode 处理(默认情况下所有字符串都是 unicode),这对于 NLP 项目来说很方便
- 函数注释
- 词典释义
- 许多常见的 API 返回迭代器而不是列表,这可以防止 OOM 错误
- 还有更
安装和设置
出于好奇,这里有一个关于我如何在 Jupyter 中让 Python 3 和 Python 2 并行运行的指南。虽然建立一个独立的 Python 3 Jupyter 内核很简单,但同时支持 Python 2 和 Python 3 却比预期的要复杂。我没有找到一个清晰的指南来设置它,所以我想分享我的经验。
安装涉及几个组件:
- Jupyter 需要设置为同时使用 Python 2 和 3。这包括安装一些必备的依赖项,并确保 Jupyter 在文件系统上可以使用两个 Python 版本的 kernelspecs 。
- 因为 Python 3 独立于任何现有的 Python 2 安装,所以有必要建立一个单独的包管理器(pip3)。这用于安装额外的 IPython 依赖项以及一些常见的科学库。
- 最后,安装过程中出现了一些需要清理的错误。
以下是我使用的命令。注释和其他详细信息如下:
apt-get install python3-setuptools python3-dev libzmq-dev
easy_install3 pip
# More dependencies needed to run Python 3 in Jupyter
pip3 install ipython==3.2.1 pyzmq jinja2 tornado jsonschema
# IPython kernelspecs
ipython3 kernelspec install-self
ipython2 kernelspec install-self
# Install some libraries
pip3 install numpy scipy scikit-learn pandas matplotlib
# Bug cleanup:
# Fix Jupyter terminals by switching IPython back to use Python 2
sed -i.bak 's/python3/python/' /usr/local/bin/ipython
# Reset the "default" pip to pip2, if desired
pip2 install --upgrade --force-reinstall pip
# Fix a link broken by python3-dev that led to errors when running R
echo | update-alternatives --config libblas.so.3
# Make sure the local site packages dir exists
mkdir -p ~/.local/lib/python3.4/site-packages
安装注意事项:
-
在运行笔记本的同时,可以用
! pip3 install --user <package==version>
交互添加新的包,通过运行! pip3 freeze
检查哪些包已经安装好了。如果你需要额外的软件包,但是交互式运行时安装不理想,请让我们知道,我们可以帮助你设置一个定制的环境。 -
Kernelspec 安装命令来自于 IPython 文档。
-
在安装了这两个 Python kernelspecs 之后,Jupyter 基本上工作正常,除了终端,它们在会话中被列为“不可用”。我追踪这个 bug 到了一个依赖问题。运行前面的命令后,IPython 由 Python 3 运行:
/usr/local/bin/ipython
的初始 shebang 行读为#!/usr/bin/python3
,Python 3 安装找不到运行 Jupyter 终端所需的模块。与其试图修复这个问题,不如直接告诉 IPython 再次使用 Python 2,用sed
命令编辑初始行为#!/usr/bin/python
。这很有效,终端重新上线。 -
安装 pip3 会导致
pip
命令运行pip3
而不是pip2
。pip2 install --upgrade --force-reinstall pip
命令将pip
恢复到pip2
,这正是我们想要的,这样 Python 2 仍然是“默认”的 Python 版本。 -
update-alternatives --config libblas.so.3
命令修复由apt-get install python3-dev
引入的断开的链接。如果没有这个命令,R 脚本会产生以下错误:Error in dyn.load(file, DLLpath = DLLpath, ...) : unable to load shared object '/usr/lib/R/library/stats/libs/stats.so': /usr/lib/liblapack.so.3: undefined symbol: ATL_chemv During startup - Warning message: package 'stats' in options("defaultPackages") was not found
-
最后一个问题出现了:pip3 的本地安装目录(在这里是
~/.local/lib/python3.4/site-packages/
)不在 Python 3 的sys.path
上。结果是 Python 的site
模块(它应该在 Python 启动时将这个路径添加到sys.path
中)忽略了这个路径,因为它还不存在。提前创建这个目录可以解决这个问题。请注意,运行 Jupyter 的用户必须对该目录具有读/写权限。)
问题、顾虑或只是想测试一下这种环境?联系我们!
解决野生环境中的不可再生性
原文:https://www.dominodatalab.com/blog/addressing-irreproducibility-in-the-wild
这份多米诺数据科学领域笔记提供了在最*的 WiMLDS meetup 上发表的克洛伊·莫尔 的**可复制机器学习模型的要点和节选幻灯片。 Mawer 是 Lineage Logistics 的首席数据科学家,也是西北大学的兼职讲师。特别感谢 Mawer 允许摘录这篇 Domino 数据科学领域笔记中的幻灯片。此处提供全套资料。
介绍
Chloe Mawer 在最*的 WiMLDS meetup 上发表了“可复制机器学习模型的成分”演讲。Mawer 的演讲为简化可复制模型的开发和部署提供了实用的见解和最佳实践。这篇文章涵盖了演讲的精华,包括“为什么再现如此困难?》,为什么版本化代码不够,以及 Mawer 的可复制模型模板。如欲了解更多关于模型测试、环境管理和代码对齐的信息,请查看 Mawer 的全互动演示文稿和再现性模板的附加内容。我参加了机器学习会议,并向 Mawer 寻求许可,为这篇博文摘录 Mawer 的工作。非常感谢 Mawer 在这篇文章发表前提供了适当的许可和反馈。
为什么再现性这么难?
虽然 Mawer 目前是 Lineage Logistics 的首席数据科学家,也是西北大学的兼职讲师,但 Mawer 还利用以前的咨询经验来传达不可再现性的含义和“为什么再现性如此困难”的例子。在之前的一个咨询角色中,Mawer 参与了一个项目,在这个项目中,最初构建算法系统的人不再在公司工作,而她的团队本来是要迭代和添加算法系统的。几乎没有文档、评论、背景等。使得复制算法变得不可能。无法理解当前算法的工作原理大大降低了改进算法的能力,使得在不破坏系统的情况下部署任何改进几乎是不可能的。
虽然这不是一个理想的情况,但这是许多研究人员和数据科学家在寻求推进数据科学工作时面临的常见情况。观众对这些棘手问题幻灯片的反应包括窃笑、叹息和用手机拍摄这些幻灯片。Mawer 还重申了这些痛点并不是新的或本地的,而是全球都知道的,并向 Rodey Green 的“ 如何编写不可维护的代码”致敬。
One of the big problems seen when trying to deploy machine learning models is the inability to reproduce the same predictions as in development. Slide Credit and Image Credit.Slide Credit and Image Credit.
然后 Mawer 谈到了可再现性是多么困难,因为有许多看似随机的点,可再现性可能会被破坏,而且开发和部署模型的道路是漫长的。
“路漫漫其修远兮”
"The Path is Long" Slide Credit and Image Credit.
路径越长,提供的减轻或破坏再现性的成分和机会就越多。
解决野生环境中的不可再生性
在 Mawer 讲述了与不可再现性相关的痛点之后,Mawer 提供了关于如何解决不可再现性的实用建议,包括“找到每一个随机状态并将其参数化”以及仅仅“版本化代码是不够的”。
Mawer 的交互式“参数和设置”幻灯片已被摘录并重新格式化,以方便阅读。
model:
name: example-model
author: Chloe Mawer
version: AA1
description: Predicts a random result given some arbitrary data inputs as an example of this config file
tags:
- classifier
- housing
dependencies: requirements.txt
load_data:
how: csv
csv:
path: data/sample/boston_house_prices.csv
usecols: [CRIM, ZN, INDUS, CHAS, NOX, RM, AGE, DIS, RAD, TAX, PTRATIO, B, LSTAT]
generate_features:
make_categorical:
columns: RAD
RAD:
categories: [1, 2, 3, 5, 4, 8, 6, 7, 24]
one_hot_encode: True
bin_values:
columns: CRIM
quartiles: 2
save_dataset: test/test/boston_house_prices_processed.csv
train_model:
method: xgboost
choose_features:
features_to_use: [ZN, INDUS, CHAS, NOX, RM, AGE, DIS, RAD, TAX, PTRATIO]
get_target:
target: CRIM
split_data:
train_size: 0.5
test_size: 0.25
validate_size: 0.25
random_state: 24
save_split_prefix: test/test/example-boston
params:
max_depth: 100
learning_rate: 50
random_state: 1019
fit:
eval_metric: auc
verbose: True
save_tmo: models/example-boston-crime-prediction.pkl
score_model:
path_to_tmo: models/example-boston-crime-prediction.pkl
predict:
ntree_limit: 0
save_scores: test/true/example-boston-test-scores.csv
evaluate_model:
metrics: [auc, accuracy, logloss]
Mawer 还提到了 YAML 配置文件如何对模型训练和评分有用。将所有可能的配置提取到一个文件中,使它们能够在模型训练时与代码一起被版本化,这是能够再现模型训练和评分管道的主要步骤。像 JSON 一样,YAML 文件可以很容易地作为字典读入 Python,但与 JSON 不同,YAML 文件是人类可读的,允许在一个地方轻松更改配置。此外,从代码中提取所有的配置将在构建模型管道时做出的决策都放在一个地方。如果分散在不同的剧本中,这样的决定会随着时间而被遗忘。它们的集中声明确保了参数化和配置与代码的未来应用保持一致。最后,Mawer 指出,一旦您使您的整个模型训练和评分管道完全可配置,那么在模型开发期间,只需快速更改 YAML 文件来尝试不同的模型、特性、超参数等等,就可以非常容易地进行迭代。
*"Mawer suggests structuring yaml configuration files with the Python script names and function names that the parameters are passed into as the keys. This structure makes it clear how to use them once imported into a Python script." Slide Credit. *
Mawer 还引用了一些关于数据和特性的见解,包括
关于模型测试、环境管理和代码对齐的其他实用见解可在全互动*台中获得。
可复制模板
Mawer 在演讲中还提到了一个可复制模型模板的可用性。可复制的模型模板摘录如下并重新格式化,以方便阅读。
├── README.md <- You are here
│
├── config <- Directory for yaml configuration files for model training, scoring, etc
│ ├── logging/ <- Configuration of python loggers
│
├── data <- Folder that contains data used or generated. Only the external/ and sample/ subdirectories are tracked by git.
│ ├── archive/ <- Place to put archive data is no longer usabled. Not synced with git.
│ ├── external/ <- External data sources, will be synced with git
│ ├── sample/ <- Sample data used for code development and testing, will be synced with git
│
├── docs <- A default Sphinx project; see sphinx-doc.org for details.
│
├── figures <- Generated graphics and figures to be used in reporting.
│
├── models <- Trained model objects (TMOs), model predictions, and/or model summaries
│ ├── archive <- No longer current models. This directory is included in the .gitignore and is not tracked by git
│
├── notebooks
│ ├── develop <- Current notebooks being used in development.
│ ├── deliver <- Notebooks shared with others.
│ ├── archive <- Develop notebooks no longer being used.
│ ├── template.ipynb <- Template notebook for analysis with useful imports and helper functions.
│
├── src <- Source data for the sybil project
│ ├── archive/ <- No longer current scripts.
│ ├── helpers/ <- Helper scripts used in main src files
│ ├── sql/ <- SQL source code
│ ├── ingest_data.py <- Script for ingesting data from different sources
│ ├── generate_features.py <- Script for cleaning and transforming data and generating features used for use in training and scoring.
│ ├── train_model.py <- Script for training machine learning model(s)
│ ├── score_model.py <- Script for scoring new predictions using a trained model.
│ ├── postprocess.py <- Script for postprocessing predictions and model results
│ ├── evaluate_model.py <- Script for evaluating model performance
│
├── test <- Files necessary for running model tests (see documentation below)
│ ├── true <- Directory containing sources of truth for what results produced in each test should look like
│ ├── test <- Directory where artifacts and results of tests are saved to be compared to the sources of truth. Only .gitkeep in this directory should be synced to Github
│ ├── test.py <- Runs the tests defined in test_config.yml and then compares the produced artifacts/results with those defined as expected in the true/ directory
│ ├── test_config.yml <- Configures the set of tests for comparing artifacts and results. Currently does not include unit testing or other traditional software testing
│
├── run.py <- Simplifies the execution of one or more of the src scripts
├── requirements.txt <- Python package dependencies
结论
寻求真理,讲真话是达美乐的核心价值观之一。多米诺骨牌,包括我自己,通过积极寻找和倾听数据科学领域的人,包括 WiMLDS meetup 的演讲者和与会者,践行这一价值观。我们从积极听取行业意见中收集的问题和见解有助于为我们的*台、产品和服务提供信息。然而,我们也希望通过这篇博文或我们的行业事件来放大和分享研究,从而为关于可再生性的公共讨论做出贡献。再次感谢 Chloe Mawer 允许摘录“可复制机器学习模型的成分”。由于这篇文章提供了为什么可再现性很难的精华,以及一些解决不可再现性的实用建议,关于模型测试、环境管理和代码对齐的其他见解可在完整资料中获得。
^(Domino 数据科学领域笔记提供数据科学研究、趋势、技术等亮点,支持数据科学家和数据科学领导者加快工作或职业发展。如果您对本博客系列中涉及的数据科学工作感兴趣,请发送电子邮件至 content(at)dominodatalab(dot)com。)
高级分析创新者:好事达的梅格·沃尔特斯
原文:https://www.dominodatalab.com/blog/advanced-analytics-innovator-meg-walters-at-allstate
一个专注于人工智能的卓越中心(CoE)是 Domino 新的金融服务和保险版 数据科学创新者手册 中一些创新者的流程引擎。从功能上来说,CoE 是一个用于数据科学和高级分析的集中式计算资源,由一个团队管理,但可以服务于一个、五个、十个、一百个甚至数千个在大型企业中使用大规模模型的数据科学家。好事达是 成熟卓越中心 的一个典型例子,好事达是美国 最大的保险公司之一 也是数据科学的主要用户。我们今天介绍的创新者是 Meg Walters ,好事达卓越分析中心的高级经理兼数据科学负责人。
认识一下好事达数据科学负责人 Meg Walters
Meg Walters 是好事达公司数据科学领域的领军人物。她负责管理好事达分析卓越中心,从创意、参与到实施,在整个好事达创造创新并推广数据科学的使用。好事达的卓越中心项目在 2021 年雇佣了 5000 多名员工,其中 几乎占公司员工总数 的 11%。
沃尔特斯说她的团队做了很多基础研究。它构建了许多模型、框架、见解,甚至整个好事达团队都可以使用的数据集。这个概念是让一切都是可复制和可重复使用的。“团队中的任何其他人都应该能够使用我们在一个下午完成的东西,”Walters 说。COE 的团队以 12 周为一个周期工作,然后转向新的研究和项目,以实现持续的创新。
好事达的模型制造工厂催生创新
好事达利用 Domino 的企业 MLOps *台将分析卓越中心扩展为一个模型构建工厂,为数据科学家提供了巨大的生产力收益。公司任何地方的团队都可以灵活地利用最新的数据科学技术,如自然语言处理、计算机视觉、天气、自动驾驶汽车和多模态建模。
企业 MLOps *台解决了好事达面临的最大挑战之一:环境管理。“我们发现,当一个创新模型在某人最喜欢的环境中创建时,可能是在他们的笔记本电脑上,我们发现有时,当你交付某样东西时,可能需要两周时间才能在不同的环境中镜像和正确运行,”Walters 说。她认为 MLOps 是采用一个模型并将其轻松转移到另一个团队的主要因素。可再现性是将过去和现在的模型扩展为新的业务创新的促成因素。
帮助其业务领导清楚地看到数据科学如何解决重要的业务问题是好事达扩展数据科学的另一个障碍。为了解决这个问题,Walters 组建了一个原型团队。它构建出小型原型,这可能是底层带有一些轻量级分析的微小的最小工作软件,或者可能是演示体验的视频。这些具体的演示使业务决策者能够理解像多模态建模或自动语音识别这样的东西是如何改善业务结果的。
下载我们的免费电子书 阅读好事达的 Walters 和其他创新者、顾问和行业专家在金融服务和保险行业的数据科学领域的更多见解。
大规模推广数据科学的技巧
除了一些在好事达扩大数据科学使用的项目的例子,Walters 还指出了如何在整个企业推广和创新数据科学的四个技巧。
-
将新产品的一部分交到企业手中,让他们了解创新对企业的影响和益处。
-
学会使用业务语言,教业务人员一些关于数据科学的语言,并让他们获得一些关于您正在构建的东西的经验。
-
确保你构建的所有东西都提供了最大的可重复性和可重用性,是可推广的,并且可以在几年后从货架上拿下来,仍然是完全可重用的。
-
定期为创新留出时间和空间。提供一个环境——也许是一个不涉及生产系统的创新沙箱——让数据科学家可以进行实验。
结论
Walters 的故事,就像你可以在我们的免费电子书 中读到的其他创新者一样,努力为数据科学及其支持的业务开发一种通用语言。她的团队向商业领袖展示了数据科学如何解决当前的商业挑战。“现在,我们有许多业务部门为我们带来用例,提出问题,并对数据科学的创新应用表现出更多的兴趣和参与,”Walters 说。“这正是您希望从 CoE 获得的影响。”我们邀请您参加 下载数据科学创新者行动手册 并从其他九位数据科学领导者那里了解如何利用 MLOps 加速金融服务和保险行业的创新。
给有抱负的首席数据科学家的建议:你需要具备的心态
原文:https://www.dominodatalab.com/blog/advice-aspiring-chief-data-scientists-mindset-need
尼克·科莱格拉夫是白板公司的创始人,这是一家专注于机器学习和人工智能的战略创新公司。此前,Kolegraff 是 Rackspace 的首席数据科学家,也是埃森哲的首席数据科学家。作为 Domino“工作中的数据科学领导者”客座博主系列的一部分,Kolegraff 为数据科学家和数据科学经理提供了建议,以考虑他们何时或是否决定担任“首席数据科学家”的角色。这个建议包括对你需要具备的心态、你需要解决的问题类型以及你需要雇佣的人的见解。总共有三个员额。这篇文章关注的是成为“首席数据科学家”需要具备的心态。
我们是如何来到这里的
我正和一个好朋友聊天,他们问我“对于一个渴望成为首席数据科学家的数据科学家,你有什么建议?”
我们讨论了一些问题,
“那到底是什么意思?”
“首席数据科学家是做什么的?”
“你作为首席数据科学家,需要带来什么价值?”
“需要具备哪些技能?”
“你的心态呢?”
“真的是 C 级角色吗?”
“领先的数据科学甚至是真的吗?”
这些只是我们讨论的几个问题。
在那次长时间的谈话后,有人问我是否愿意将那次谈话变成一系列博客文章,所以我们在这里。做一个 首席数据科学家 有 与头衔 无关,只是 对你的影响有 。我写这一系列博客的目的是塑造一种心态,帮助你专注于 达到下一个水*,而不是追逐一个头衔。
什么是首席数据科学家?由结果和心态决定
虽然我的头衔是“首席数据科学家”,但我过去不是,现在也不是科学家。我姐姐是,当我告诉她我的工作头衔时,她忍不住笑了。事实是,成为首席数据科学家没有灵丹妙药,只有结果和影响。你在商界的地位越高,科技含量就越低。我相信每个人都铺好了自己的路,所以没有一条路会是一样的。但有一点在你的整个旅程中都是相同的——一个为一致的不容置疑的结果而努力的 。你需要通过掌握技能和建立新技能来不断提高....同时坚持不懈地寻求一致的结果和推动变革的创新。要做到这一点,归根结底是一种心态。心态是你所相信的态度的集合,但更深一层来说,它是你承诺过的一种生活方式。心态有助于塑造你的技能;技能使你能够解决新问题;新的问题创造了对新型人的需求或人成长的机会;将这些东西组合起来实现结果是你的组织设计,最终是你的责任。
你的心态
作为首席数据科学家,你负责整个组织的数据科学、机器学习和人工智能。 不管发生什么,都是你的错。 如果你没有得到你想要的结果,或者其他人正在努力整合你的工作,那是你的错。这是一个难以接受的规则。这在短期内也是一种高风险的心态,尤其是在当今世界,当前的政治策略要求你最大限度地提高受欢迎程度,而不是一致性。我相信,从长远来看,如果你坚持这种心态,并且 总是寻找你可以掌控的地方,这是最有回报的,因为这迫使你不断改进你的游戏。
我喜欢摔跤这项运动。如果你认为摔跤课是生活的广泛应用,你就学会了拥有。它帮助我在我(以前的)运动生涯和利用数据和机器学习来建造东西之间架起了一座桥梁。摔跤这项运动和我周围的人帮助我形成并不断发展我的思维模式。如果没有这种心态,就不可能成为首席数据科学家。对我来说,摔跤是世界上最好的运动。它不仅教你*衡肌肉和大脑,还教你何时、何地以及如何*衡这两方面。它给运动员上了艰苦的生活课,让他们了解人类身体和精神的心理和能力。在我摔跤生涯的早期,我在赛季中是不败的。我在一场比赛中摔跤,我领先了,被绊了一下,裁判判了一个“快速击倒”,我输掉了比赛。我重新看了比赛的录像,发现那是一个糟糕的判罚,不是一个别针。第二天训练时,我向我的教练抱怨这件事,他抓住我,把我扔到墙上
“你让自己处于那种境地是你的错,你把比赛留给裁判判断是你的错,你输了是你的错,当你输了的时候永远是你的错——永远不要把摔跤比赛留给裁判判断”
现在你会因为这样的事情被起诉,但这是我一生中重要的时刻。我很高兴它发生了。那一刻让我难以忘怀。我以前从来没有从我教练的角度来看待这件事,但是现在,它非常有意义。我完全控制了摔跤比赛中发生的事情,我让它发生了——我不想面对现实,所以我责怪裁判。这一刻为我摔跤中的 归属持续改进n 不出意料的结果 打下了基础。那年,我的教练带领我赢得了古典式摔跤的州冠军,后来,我娶了他的女儿。巴金加。但是,直到后来我才发现这种心态在我的工作和生活中有更广泛的应用。
**从某种意义上说,做首席数据科学家也差不多。你的工作经常受到他人的评判,很容易将责任归咎于裁判。在数据行业,我最喜欢的一句名言是:
“如果你折磨数据足够长的时间,它会承认任何事情”
——罗纳德·科斯
有了数据,任何人都可以收集数据并形成自己的观点——或者根据他们的参考框架,可以将数据解释为几乎任何东西...他们是对的。你的工作是找到更高的位置。 成为首席数据科学家意味着承担责任,无论发生什么。如果你不愿意接受这种心态,那么你应该重新考虑成为首席数据科学家。如果你愿意接受这种心态,那么你的心态和方法还有其他细微差别可以借鉴,包括:将数据科学与商业价值联系起来;理解你不是对一个单独的产品负责,而是对一系列相互关联的东西负责,这需要一个更广阔的思维模式;而且,您正处于需要交付成果以赢得更多时间来获得额外成果的阶段。然而,你不能害怕或“放弃”不断证明自己的想法。
Domino 注:Nick Kolegraff 在这个系列中的下一篇文章“给有抱负的首席数据科学家的建议”将于下周在 Domino 数据科学博客上发布。下一篇文章涵盖了首席数据科学家需要考虑的问题类型。**
给有抱负的首席数据科学家的建议:你需要的人
原文:https://www.dominodatalab.com/blog/advice-aspiring-chief-data-scientists-people-need
尼克·科莱格拉夫是白板公司的创始人,这是一家专注于机器学习和人工智能的战略创新公司。此前,Kolegraff 是 Rackspace 的首席数据科学家,也是埃森哲的首席数据科学家。作为 Domino“工作中的数据科学领导者”客座博主系列的一部分,Kolegraff 为数据科学家和数据科学经理提供了建议,以考虑他们何时或是否决定担任“首席数据科学家”的角色。这个建议包括对你需要具备的心态、你需要解决的问题类型以及你需要雇佣的人的见解。一共三个岗位。第三篇文章关注的是你需要雇佣的人。
你需要的人
在您作为首席数据科学家掌握了您正在解决的问题类型后,这种洞察力将帮助您组织和找到解决这些问题所需的人员。我在这篇文章中的观点来自于一个企业环境,当人员预算超出单个团队的范围时。此外,企业中计划的挑战和投资与直接面向消费者的创业公司不同。要解决的每个问题都千差万别,并且取决于许多因素,但是您正在处理的数据类型将决定您要寻找的人需要什么类型的技能来实际解决该问题。我还假设你需要的人会有软件工程技能。当你在构建产品和自治系统时,这些技能是必须的。要正确地分解它,需要一整本书的知识,所以我精心挑选了几个高层次的例子,涵盖了大多数情况。这些技能根据它们处理的数据类型和处理这些数据所需的技能分为两类。
时间序列
首先是时间序列数据。时间序列数据是指时间或事件序列对数据集本身具有特定的意义。您可能希望构建一个 API,该 API 可以将股票报价器作为输入,如果其期权定价出现异常,则实时返回,然后将报价器和异常推送到订阅提要。除了工程技能之外,这种类型的人才将在 ARIMA 建模、稳定波动性、建模周期性和移动*均线方面拥有强大的技能,同时理解批处理与流计算世界中每一项的细微差别。
文本数据
接下来是文本数据。这一类别分为太多的类别,无法在此一一赘述。然而,我们可以撒网说任何包含单词的东西都是文本数据:网页档案、聊天记录、文档库、普通教科书等等。您可能希望构建一个 API,它将文档作为输入(pdf 文件),读取文本,并自动将其映射到搜索索引的类别。您可能希望创建一个 API,给定一个句子,将名词和动词映射到句子,然后自动修复糟糕的句子结构。除了工程技能之外,这种类型的人才将在 NLP、(自然语言处理)语言学、语义技术、名称和实体解析、歧义消除技术和主题建模方法方面拥有强大的技能,同时理解批处理与流计算世界中每一项的细微差别。
操作数据
接下来是运营数据。运营数据由支持企业运行和运营的数据组成。这可能是购买交易、营销活动结果、销售和销售线索、供应链、库存等的集合。你可能想寻找新的方法来降低成本,并更有效地为你的产品需求储备原材料。或者,您可能希望在不同的产品组合中寻找交叉销售机会,销售团队可以利用这些机会来开发销售线索。这一领域的人才通常在运筹学、经济学和统计学方面有很强的背景,以及通常在参数建模类别中的各种建模技术。他们还可以轻松地在各种*台上获取所需的数据。
承认
最后,我们有需要进行识别的数据。这可以是音频文件的集合、图像的存档、视频的集合等。您可能希望构建一个系统,该系统对图像档案进行爬网,并基于图像(仅基于图像,不基于元数据)自动将它们组织到文件夹中。识别问题是今天人工智能的基础,神经网络技术是大多数人的最爱,被证明具有广泛的应用和适合各种问题。该领域的人才将对神经网络变体之间的差异有很强的理解:卷积神经网络、深度信念网络和反向传播。同时理解其中的每一个如何映射到不同的计算范例。
一群没有共同目标和工作目标的人很难保持一致的交付结果的节奏,因此思考如何建立结构和创造沟通渠道不是一件容易的事情。
组织结构
最初,您可能认为资源库是一个好方法。每个人都有一致的管理者和志同道合的人;他们在项目/产品上被塞进其他组织,然后在完成项目/产品后回到大本营。如果所有部门都有统一类型的问题要解决,这是很好的,但通常情况并非如此。每个部门都有不同的需求...每一种需求都有不同的期望。嵌入式团队很棒(也就是说,让每个人雇佣他们想雇佣的人),你是他们雇佣谁的顾问。然而,没有全面的一致性,创建标准来控制质量就成了一场噩梦,并且它很快开始滚雪球。团队还会纠结于他们想雇佣谁,因为目标事先没有明确定义。我建议探索的一个更灵活的模型是从发现、建立、优化和维护功能的角度考虑问题。这使您在处理许多不同类型的问题时变得僵硬,允许您根据需要完成的目标灵活地组织团队,还允许您在构建和部署的过程中创建一致性并控制质量。
摘要
作为首席数据科学家,您的心态将有助于为您和您组织中的其他人铺*道路,以不断提高他们的技能,同时培养一种坚持不懈地追求不容置疑的结果和推动前进的创新的动力。通过定义你要解决的问题(建议、认可、果断行动)和它们的状态(优化、建立或维护),你可以开发出一个执行模型,为你的组织和执行计划所需的人员提供清晰的思路。 你的工作就是把针往前拨。作为一个人,你的责任是维护你的技术、社区,最重要的是,你的人民的生计。
给有抱负的首席数据科学家的建议:你解决的问题
原文:https://www.dominodatalab.com/blog/advice-aspiring-chief-data-scientists-problems-solve
尼克·科莱格拉夫是白板公司的创始人,这是一家专注于机器学习和人工智能的战略创新公司。此前,Kolegraff 是 Rackspace 的首席数据科学家,也是埃森哲的首席数据科学家。作为 Domino“工作中的数据科学领导者”客座博主系列的一部分,Kolegraff 为数据科学家和数据科学经理提供了建议,以考虑他们何时或是否决定担任“首席数据科学家”的角色。这条建议包括对的洞察、你需要具备的心态,你需要解决的问题类型,以及你需要雇佣的人。总共有三个员额。第二篇文章关注你需要解决的潜在问题。
你解决的问题
你还没搞清楚自己在执行什么,就不能执行。听起来很简单,但实际上很难大规模实施。有许多相互关联的部分。了解如何和什么那些棋子影响和映射回进入公司是至关重要的。弄清楚你正在解决的问题将有助于你执行。
当围绕要解决的问题进行组织时,有两件事情需要考虑:
- 您正在解决/构建什么类型的智能能力
- 从白板到生产,您将如何执行它
然而,不熟悉这个行业的人需要很容易理解你如何分解这两件事并讨论解决方案。掌握你正在解决的问题类型将有助于你为你需要雇佣的人员类型制定一个计划,以及如何将你的执行力映射回公司的目标。
情报能力的类型
当我想到“智力”时,我把它分成三种主要类型:
暗示性的
- “嘿,这里有些事情需要考虑?你怎么看?”
- 基于输入建议用户可能喜欢的东西
- 搜索和推荐作风问题
识别
- “咦,这是什么东西?”
- 基于输入识别事物
- 图像,声音,文字,图案风格问题
果断行动
- “做这件事”
- 根据输入告诉用户做什么
- 自治系统,自动化游戏玩家,机器人风格问题
这些类型或类别决定了你在创造速赢时的结果有多容易出错,但也有助于决定从基层开始的策略。例子:你可以一开始就使用暗示方法,然后使用暗示方法的结果来帮助解决稍后的识别问题。这些问题桶中的每一个都为你设置了要问的问题,这些问题的答案将定义你如何解决问题,制定你的执行策略,最重要的是有效地沟通你正在尝试做什么。
你如何执行
一旦你确定了问题的类型,并意识到我前面所展示的是一个非常宏观的图景,你就会想进一步了解市场潜力、范围、可行性、成本等。但是所有这些归结起来就是你所创造的目标、解决方案和价值。回答以下问题将有助于制定适合全局的执行策略。这些问题中的每一个都将在这篇文章的后面详细阐述。
- 我们是在尝试做一个暗示性、认可性,还是果断行动的问题?
- 你是发现、建立、优化、维护吗?
- 这是一个抽象还是谜题的问题?
- 什么是组织生命周期和工作流程?
你是在发现、建立、优化还是维护?
了解这四个目标之间的动态和*衡将有助于设定基调,并开发一种自然的方式来设定对您试图完成的目标的期望。你希望人们对系统试图实现的目标保持一致。但是你也希望你的团队以一种有凝聚力的方式一起工作,并确保每个人都明白这种动态是至关重要的。这四个不同的目标可以在早期为你需要做什么和你需要谁去做定下基调。
- 发现 是指你在浏览大量数据,以确定能够帮助企业做出更好决策的见解。您正在以新的方式探索现有的数据。
- 建立 是你需要分支到产品、市场和技术的新类别和新维度的时候,你当前正在做的事情重新定义了你当前的世界观。你已经认识到你当前的世界观需要改变,并且/或者你想要保护自己,并为之努力,以防以后会发生这样的事情。
- 优化 就是当你有一个现有的系统,想办法增强它,让它变得更好。也许让它运行得更快,也许让预测更好,也许让它运行得更有效率,这样你就可以节省基础设施成本。
- 维护是指当您拥有一个现有系统,对它的运行方式感到满意,并且只想让它保持在线并以最有效的方式*稳运行。您可能还想对系统进行一些小的修改,以增强或改进它,同时支持系统 24 小时运行。
**这四个目标的技能和能力大不相同,但都同样需要。它们也完全取决于你是在解决一个抽象问题还是一个难题。以这种方式组织的美妙之处在于,人们可以在每一个目标中进行轮换,以建立对其他人所做的事情及其重要性的感觉。你也不局限于你能解决的问题类型。我将它们视为开发项目生命周期中的不同移交。
抽象和困惑问题对执行的影响
商业中的抽象问题是模棱两可的。作为一名首席数据科学家,您通常只有很少的机会(有时只有一次机会)来解决一个抽象的问题,并在极端不确定的情况下做出决策。你在生意中遇到的许多问题都属于这一类。你必须知道什么时候数据在帮助你做这些决定,什么时候数据在为观点提供噪音。
商业中一个抽象问题的例子,
“[插入姓名],我们希望您能为我们的产品线增加一些智能功能,这将使我们比竞争对手更有优势。您能提出一些方案并在下个季度为我们提供一个工作原型吗?”
欢迎来到抽象问题。
这是你得到的所有方向,如果你成功了,你就增加了巨大的价值。如果你不成功....这是你的错,你需要弄清楚你做错了什么。难题仍然是复杂的问题,只不过是不同的解决方法。所有的部分都存在,你只需要把它们组合起来就可以完成你的目标。当我说碎片时,我指的是你可以用来解决问题的资源,这可以是任何东西,从闲置的陈旧技术,到你与其他部门建立的关系。
组织生命周期和工作流程
组织生命周期和工作流程对您的执行方式至关重要。(参见组织生命周期维基百科)。目前商业战略中的惯例会教你如何玩弄政治,影响你周围其他人的行为来完成你的议程,我个人认为这是 b****t 。让人们做他们自己。让他们自己做决定。说到底,有两个人一个想要 X ,另一个想要 Y 。把 X 和 Y 放在桌子上,实话实说。你会不同意。找到你们都同意的 Z。让你的结果说话,朝着不容置疑的结果不断改进,他们总会赢。但请记住,一家公司的好坏取决于它的员工。如果他们之间没有凝聚力,朝着一个共同的目标努力,这个系统就会崩溃。当创建内聚性以有效执行时,生命周期和工作流携手并进。
工作流程是公司保持质量水*和一致性的方式。他们有特定的流程来控制这些事情。有时它们毫无意义,充斥着官僚机构。当你建立或优化的时候,这真的开始变得很重要。但是要意识到一致性和质量的重要性。当你建立时,一致性和质量不是一个重要的因素,只要你设定了适当的期望,你就只是在追踪使某件事情“工作”并证明它是一件“可行”的事情。当你有了既定的东西,你就朝着优化它的方向前进,这时一致性和质量就成了必不可少的衡量标准。如果你试图建立一些新的东西,而公司有一个伪装成敏捷框架的瀑布心态,你将很难用看板方法来完成工作。底线:你的工作是为你的团队创造一个可以成功的环境,这没有什么灵丹妙药,只有令人惊叹的人。
Domino 注:Nick Kolegraff 在“给有抱负的首席数据科学家的建议”系列中的最后一篇文章将于下周在 Domino 数据科学博客上直播。最后一个帖子会涵盖你需要雇佣的人。如果你错过了科莱格拉夫的第一篇博客文章,这篇文章涵盖了你需要具备的心态,请访问这里的。**
企业中的人工智能:让企业再次变得聪明
在本次数据科学 Popup 会议中, Unity Technologies 的人工智能和机器学习副总裁 Danny Lange 深入探讨了人工智能在 Unity、网飞、优步和其他地方的企业中的实际应用和挑战。
替代数据和机器学习的成功
原文:https://www.dominodatalab.com/blog/alternative-data-machine-learning
也许在过去的十年中,特征工程最大的发现是认识到你可以通过理解一个人的社会网络的行为来预测他的行为。这种非传统社会数据的使用推动了大量的经济增长,因为它彻底改变了模型的准确性和适用性。
在未来,访问替代数据,如商店的客流量、停车场的卫星图像或文本数据中锁定的信息,可能会让模型解锁下一个伟大的创新功能。
在本次演讲中, Kathryn Hume 深入探讨了非传统数据在金融中的应用。她涵盖了从业者可用选择爆炸的宏观趋势、真实进步与炒作的混淆、众包方法的进步以及其他主题。该讲座全面而可行地概述了数据科学组织如何超越表格数据和传统统计方法,在意想不到的数据源中寻找机会。
替代数据和机器学习的成功
深入了解数据科学
原文:https://www.dominodatalab.com/blog/an-in-depth-view-of-data-science
数据科学是统计学、计算机科学和商业相结合的领域。在组织努力保持竞争力、增加收入和取悦客户时,它受到组织的高度重视,因为数据科学家能够从企业创建的大量数据中获得关于如何改进企业决策的见解。它的价值如此重要,以至于随着组织在数据、技术和人才上花费数千万美元,扩展数据科学已经成为新的业务需求。
在本文中,深入研究数据科学,以及 Domino 的 Enterprise MLOps *台如何让您在业务中扩展数据科学。
什么是数据科学,如何使用数据科学?
数据科学是 STEM 中的一个跨学科领域,它结合了数学和统计学、计算机科学以及商业敏锐度,以在复杂的数据集中发现可用于改善决策的模式。
就目前的形式而言,数据科学在行业和应用方面是无限的;唯一的要求是数据、计算能力、数据科学家,以及成为模型驱动的。随着各级企业以数字方式收集更多类型和数量的信息,以及计算能力比以往任何时候都更容易获得,这变得越来越容易。如今,数据通过多种渠道不断生成,包括交易系统、传感器、摄像头和在线交互。存储方面的改进使得实时捕获、管理和使用这些数据成为可能。
这些进步对从金融和银行业到医疗保健和保险业的各个行业都产生了巨大的影响。他们实现了新的跨行业应用,如客户分析和欺诈检测。例如,自然语言处理的进步使得医疗保健专业人员可以自动记录患者的就诊记录,减少了记录时间,并减少了患者离开诊所后很长时间内可能出现的歧义。罕见事件检测,如罕见疾病诊断和信用卡欺诈,在准确性方面有了显著提高
什么是数据科学家?
一名成功的数据科学家拥有统计学和计算机科学领域专业知识方面的技能、创新思维和强大的沟通技巧。沟通怎么强调都不为过,因为正是这一特点确保了结果从白板有效地转化为对业务指标的影响。交流的信息通常是模型、流程或算法如何从数据中提取见解,并将其应用于企业内的关键问题。只有当业务理解模型时,他们才会信任模型来驱动业务决策。模型可以以消费者为中心,比如识别关键消费者群体。它们也可以是内部的,比如确定哪个部门的产出最高,或者公司里谁应该加薪。
履行这一角色所需的技能组合以及转型业务影响的潜力,使其被评为“21 世纪最性感的工作”。数据科学家也被称为独角兽,因为他们需要复杂多样的技能。因为独角兽很少存在,所以组织倾向于*衡数据科学家团队的技能。
数据科学技术
数据科学家有各种各样的技术可供他们使用,通常只受数据的质量和数量以及处理能力的限制。
今天,数据科学中使用的最先进的技术由于其获取信息的性质而被归入人工智能(AI)一词,机器学习、深度学习、自然语言处理(NLP)和计算机视觉都被认为是人工智能领域的分支。这些技术都不是新的。事实上,深度学习最早是在 1943 年从理论上描述的。但是低成本、高性能计算和内存的出现使得这些技术得到了广泛应用。
今天最常用的技术是机器学习。据 DeepAI 的人说,“机器学习是计算机科学的一个领域,旨在教会计算机如何在没有明确编程的情况下学习和行动。”根据这个定义,即使是逻辑回归模型也有资格成为机器学习技术。机器学习技术可以分为三类:监督学习、非监督学习和强化学习。
- 监督学习包括回归和决策树等技术,重点是预测目标变量。常见的例子包括预测(任何事物)和分类。
- 无监督学习没有目标变量,聚类等技术用于查找相似记录或行为的组。常见的例子包括创建客户群和异常检测。
- 强化学习侧重于优化特定的决策。这些算法根据过去的决策进行训练,并通过奖励正确的选择和惩罚错误的选择来有效地学习如何优化决策。常见的例子包括推荐引擎和自动驾驶汽车。
数据科学工具包
数据科学家和 IT 人员在数据科学生命周期的所有阶段利用工具(DSLC)。这包括访问和准备数据、构建和测试模型以及将它们部署到生产中。对于给定的任务,有许多商业和开源软件包可用。此外,这些工具可能需要用户编写代码或使用拖放菜单。通常,数据科学家更喜欢基于他们的教育、经验和他们正在解决的问题的工具。此外,新的工具和软件包也在不断开发中。
使用拖放的工具通常在知道如何编码方面有最低限度的先决条件(如果有的话),但是它们也可以限制一个人能完成什么。另一方面,编写代码需要更多的先决知识,但可以在优化解决方案方面产生相当大的好处。拖放和编码就像选择是买现成的毛衣还是自己织;买现成的更容易,但会给出一个更千篇一律的结果,这样袖子可能会太短或腰围太长。另一方面,编织毛衣需要更多的时间,但可以让你创造出你想要的最终产品。
无论您的数据科学团队使用哪种类型的工具,成功的关键是确保所使用的工具集中可用,能够互操作,匹配您团队的技能组合,并允许您构建解决业务问题所需的模型类型。
数据科学生命周期(DSLC)
DSLC 包括项目从构思到在商业中使用的各个步骤。最简单的形式有四个阶段:
- 管理:管理阶段集中于理解项目的目标,并对任务进行优先排序,以满足时间和预算要求。
- 开发:在开发阶段,数据科学家构建和评估模型,并研究新技术来改进他们之前的工作。
- 部署:部署阶段将模型移动到一种状态,在这种状态下,数据可以在业务流程中用于决策。
- 监控:监控阶段是 DSLC 的最后操作阶段,在此阶段,组织确保模型交付其预期的性能。
数据科学生命周期:
为了扩大数据科学的规模,DSLC 必须高速发展,因此模型可以在几天或几周内开发和部署,而不是几个月或几年。我们称这个模型为速度。从数据工程师到数据科学家再到业务部门再到开发工程师,会发生许多移交,如果没有适当的架构和技术支持,这可能会减慢移交过程。
实现高模型速度所需的关键能力包括:
- 数据科学家、IT 和业务部门之间的有效协作
- 数据科学家可以立即获得集中式工具和计算
- 整个 DSLC 的治理和安全
- 由自动化和数据科学记录系统驱动的标准模式和实践
- 知识库
- 所有数据科学项目的可见性
- 生产中模型的监控和管理
Domino 数据实验室的数据科学
也许也是经常被称为 21 世纪最性感的工作,数据科学是值得大肆宣传的少数学科之一;它是多维的、跨学科的和多方面的。数据科学正在彻底改变企业的运营和组织方式,随着技术的进步,应用程序只会变得更加准确。Domino 通过提供一个*台来帮助数据科学团队茁壮成长,该*台使他们能够实现高模型速度,同时还确保数据科学的安全性、治理和可再现性。
Amanda Christine West 是一名数据科学家和作家,居住在科罗拉多州的博尔德市。她获得了密歇根大学的学士学位和弗吉尼亚大学的数据科学硕士学位。在数据科学领域,她最热衷于预测分析、数据可视化、大数据和有效的数据科学交流。
基于模型的机器学习导论
原文:https://www.dominodatalab.com/blog/an-introduction-to-model-based-machine-learning
这篇博客文章跟随我从传统统计建模到机器学习(ML)的旅程,并介绍了一种新的 ML 范式,称为基于模型的机器学习 (Bishop,2013)。基于模型的机器学习可能会引起统计学家、工程师或希望在其研究或实践中实现机器学习的相关专业人员的特别兴趣。
在我攻读交通工程硕士学位期间(2011-2013 年),我在研究中使用传统的统计建模来研究与交通相关的问题,如高速公路撞车事故。当我开始攻读博士学位时,我想探索使用机器学习,因为我读过一些强大的学术和行业用例。特别是,我想开发一些方法来了解人们如何在城市中出行,从而更好地规划交通基础设施。
采用机器学习的挑战
然而,我发现这种从传统统计建模到机器学习的转变令人望而生畏:
- 有大量的文献可以阅读,涵盖了数千种 ML 算法。还有一个新的词汇需要学习,比如“特性”、“特性工程”等等。
- 我必须了解使用哪种算法,或者为什么一种算法比另一种算法更适合我的城市交通研究项目。
- 如果我的问题似乎不符合任何标准算法,该怎么办?我需要设计一个新的算法吗?
决定性的时刻
在阅读了大量文献并观看了几门关于机器学习的 MOOCs 之后,我在 Coursera 上发现了达芙妮·柯勒教授的关于概率图形模型(PGM)的课程。这后来让我找到了一本由的 Christopher Bishop 教授写的教科书,书名为“模式识别和机器学习”,我发现它很容易理解。所以很自然地,我查阅了 Bishop 的其他出版物,这时我发现了他的论文,标题是“基于模型的机器学习”。这是我职业生涯的决定性时刻:我爱上了贝叶斯机器学习。如果你喜欢这篇博文,你可能会对毕晓普和他在微软剑桥研究院的同事写的关于这个主题的书感兴趣。
什么是基于模型的机器学习(MBML)?
机器学习领域已经发展了数千种学习算法。通常,科学家会从这些算法中进行选择,以解决特定的问题。他们的选择常常受到他们对这些算法的熟悉程度的限制。在这个经典/传统的机器学习框架中,科学家们被约束于做出一些假设,以便使用现有的算法。这与基于模型的机器学习方法形成对比,后者寻求为每个新问题创建定制的解决方案。
MBML 的目标是" "提供一个单一的开发框架,支持创建各种定制模型 "。这一框架源于三个关键理念的重要融合:
- 贝叶斯观点的采用,
- 使用因素图(一种概率图形模型),以及
- 快速、确定、有效和*似推理算法的应用。
核心思想是所有关于问题域的假设都以模型的形式明确化。在这个框架中,模型只是一组关于世界的假设,以概率图形格式表示,所有参数和变量都表示为随机分量。
MBML 的关键思想
贝叶斯推理
支持机器学习的这种不同框架的第一个关键思想是贝叶斯推理/学习。在 MBML 中,潜在/隐藏参数被表示为具有概率分布的随机变量。这允许以一致和有原则的方式量化模型参数中的不确定性。一旦模型中的观察变量被固定到它们的观察值,最初假设的概率分布(即先验)使用贝叶斯定理被更新。
这与传统/经典的机器学习框架形成对比,在传统/经典的机器学习框架中,模型参数被赋予*均值,*均值通过优化目标函数来确定。对数百万个变量的大型模型的贝叶斯推理也是使用贝叶斯定理类似地实现的,但方式更复杂。这是因为贝叶斯定理是一种精确的推理技术,在大型数据集上是难以处理的。在过去的十年中,计算机处理能力的提高使得快速有效的推理算法的研究和开发成为可能,这些算法可以扩展到大数据,如置信传播(BP)、期望传播(EP)和变分贝叶斯(VB)。
因子图
MBML 的第二个基石是概率图形模型(PGM)的使用,特别是因子图。PGM 是模型中所有随机变量的联合概率分布的图形表示,用图形表示。因子图是一种 PGM,由表示随机变量的圆形节点、表示条件概率分布(因子)的方形节点和表示节点间条件依赖关系的顶点组成(图 1)。它们为一组随机变量的联合分布建模提供了一个通用框架。
图 1 中整个模型的联合概率 P ( μ , X )分解为:
p(、x=()(T10)(***
***其中 μ 是模型参数,X 是观察变量的集合。
Figure 1: A Factor Graph
在因子图中,我们将潜在参数视为随机变量,并使用贝叶斯推理算法和图来学习它们的概率分布。推理/学习仅仅是图中变量子集上的因子的乘积。这允许容易地实现本地消息传递算法。
概率规划
计算机科学中有一场革命,叫做概率编程(PP ),编程语言现在被构建成除了用逻辑计算之外,还用不确定性来计算。这意味着现有的编程语言现在可以支持随机变量、变量约束和推理包。使用 PP 语言,您现在可以用几行代码以简洁的形式描述问题的模型。然后调用推理引擎自动生成推理例程(甚至源代码)来解决这个问题。PP 语言的一些著名例子包括Infer.Net、斯坦、BUGS、church、Figarro 和 PyMC。在这篇博文中,我们将通过 R 接口访问 Stan 算法。
MBML 的阶段
基于模型的机器学习有 3 个步骤,即:
- 描述模型:用因子图描述生成数据的过程。
- 观测数据的条件:将观测变量调节到它们的已知量。
- 进行推理:进行逆向推理,更新潜在变量或参数的先验分布。换句话说,计算以观察变量为条件的潜在变量的后验概率分布。
个案研究
预测交通拥堵的简单模型
我们通过遵循 MBML 的三个阶段来应用基于模型的方法:
第一阶段:建立一个交通拥堵问题的模型。我们首先列出我们的问题必须满足的假设。我们假设有一个潜在的交通拥堵状态,用均值( μ 表示,我们有兴趣学习。我们进一步假设该状态具有高斯分布,该高斯分布具有一些均值和(已知或未知的)标准偏差。这种交通拥堵状态将决定在传感器(X)处观察到的速度测量值。然后我们引入一个条件概率 P ( X | μ ),其中 X 的概率是有条件的,因此我们观察到了 μ 。我们还知道,某个后续时间段的流量将取决于之前的流量状态。因此,我们在下一个时间步引入另一个因素图。我们假设其潜在变量具有以先前状态的量为中心的高斯分布,具有某种(已知或未知)标准偏差,即P(μ[2]|μ[1])。这个简单的模型如下面的图 2 所示。
Figure 2. A Simple Model for Traffic Congestion
阶段 2 :合并观测数据。我们把观察变量限制在它们的已知量上。这用蓝色阴影表示,如上面的图 2 所示。
第三阶段:进行贝叶斯推理。通过使用概率编程语言,我们能够编写一段紧凑的代码,通过简单地调用内置的推理算法来执行推理。
我们建立的定制模型和推理算法一起构成了我们针对交通预测问题的定制机器学习算法。如果你熟悉这些文献,你可能会意识到我们刚刚开发了一种叫做卡尔曼滤波器的通用算法。我们可以通过添加其他假设来扩展我们的模型,以考虑天气、路面、交通网络状况和体育赛事。这些假设可以获得卡尔曼滤波器的变体,适合于我们的应用。如果我们的目标是找到问题的最佳解决方案,这种变体是否已经存在,或者它是否是一种新颖的算法,都是无关紧要的。
如果我们实现了基于模型的算法,并获得了不太准确的结果,我们可以很容易地检查和修改我们的模型假设,以产生一个更好的模型。根据他们的经验,Winn 等人(2015)发现“理解和改变假设比直接修改机器学习算法更容易和更直观。即使你的目标只是简单地理解卡尔曼滤波器,那么从模型假设出发,是目前为止推导滤波算法最清晰、最简单的方法,也是理解卡尔曼滤波器是关于什么的。
使用概率编程语言学习模型参数
对于本案例研究,我们将使用 Stan 来学习模型参数。Stan 提供了一个 R 接口 RStan,可以用来从 R 编程语言内部调用 Stan 算法首先,按照这个链接获取安装 RStan 的先决条件。
然后安装最新的rstan
包及其依赖的包,如下所示:
## omit the 's' in 'https' if your environment does not support https downloads
install.packages('rstan', repos = 'https://cloud.r-project.org/', dependencies = TRUE)
## If all else fails, you can try to install rstan from source via
install.packages("rstan", type = "source")
建议您在安装后重启 R,然后再加载rstan
包。然后像这样加载rstan
库:
library(rstan)
现在,我们可以使用 Stan 建模语言简洁地描述我们的交通拥堵模型,如下所示:
- 以下代码的第一部分指定了由贝叶斯规则决定的数据
- 代码的第二部分定义了参数,使用贝叶斯规则来寻找这些参数的后验分布
traffic_model <- "
data {
// the number of speed measurements, N; constrained to be non-negative
int<lower=0> N;
// vector of observed speed measurements,y1, ..., yN
vector[N] y;
// the standard errors, σ1, ..., σN, of speed measurements
vector[N] sigma;
}
parameters {
real mu; // the mean of the traffic speeds
real<lower=0> tau; // the standard deviation of the traffic speeds
vector[N] theta; // the hidden states
real<lower=0> eps; // the standard deviation of the transition pd
}
model {
theta ~ normal(mu, tau); // the probability dbn of the hidden states
y ~ normal(theta, sigma); // the conditional probability dbn of the observed speeds
for (n in 2:N)
theta[n] ~ normal(theta[n-1], eps); // the transition probability dbn
}
"
建议我们在扩展名为.stan
的单独文本文件中指定上述模型。然而,对于本教程,我们将把它合并到同一个 R Markdown 文件中。
描述完模型后,您可以通过调用 Stan 推理引擎来执行推理,如下面的代码块所示。调用stan()
函数执行三个基本操作:
- 首先,使用
stanc()
函数将 Stan 程序翻译成 C++代码, - 然后编译生成的 C++代码以创建一个 DSO(也称为动态链接库(DLL))。
- 最后,运行 DSO 对后验分布进行采样。
下面提到的数据文件可以在这里找到。
traffic <- read.table("data/traffic.txt", header = TRUE)
traffic_data <- list(y = traffic[, "sensor_speed"],
sigma = traffic[, "sigma"],
N = nrow(traffic))
traffic_model_fit <- stan(model_code = traffic_model, model_name = "traffic-prediction",
data = traffic_data, iter = 1000, chains = 4, save_dso = TRUE)
评估模型结果
现在,我们可以使用print()
函数来检查traffic_model_fit
中的结果,包括模型的参数汇总以及对数后验概率。
print(traffic_model_fit, digits = 1)
traceplot(traffic_model_fit)
# extract samples
# return a list of arrays
e <- extract(traffic_model_fit, permuted = TRUE)
mu <- e$mu
# return an array
m <- extract(traffic_model_fit, permuted = FALSE, inc_warmup = FALSE)
print(dimnames(m))
# you can use as.array directly on our stanfit object
m2 <- as.array(traffic_model_fit)
结论
使用基于模型的机器学习有几个潜在的好处,包括;
- 这种方法提供了一个开发定制模型的系统化过程,以适应我们的具体问题。
- 它为我们的模型提供了透明度,因为我们通过利用有关交通拥堵的先验知识明确定义了我们的模型假设。
- 该方法允许使用概率论以有原则的方式处理不确定性。
- 它不会遭受过拟合,因为模型参数是使用贝叶斯推理而不是优化来学习的。
- 最后,MBML 将模型开发与推理分开,这允许我们构建几个模型,并使用相同的推理算法来学习模型参数。这反过来有助于快速比较几个备选模型,并选择由观测数据解释的最佳模型。
参考
如需进一步阅读,请参考以下参考资料。
- J.Winn,C. Bishop 和 T. Diethe,基于模型的机器学习,微软研究院,http://www.mbmlbook.com/,2015 年。
- C.M. Bishop,《基于模型的机器学习》Phil Trans R Soc,A 371: 20120222。http://dx.doi.org/10.1098/rsta.2012.0222,2013 年 1 月
- T.明卡、j .温、j .吉弗和 d .诺尔斯,Infer.NET,微软剑桥研究院,http://research.microsoft.com/infernet,2010 年。
- Stan 开发团队,《Stan 建模语言用户指南及参考手册》,版本 2.9.0,http://mc-stan.org,2016。
- J.Lunn,A.Thomas,N. Best 和 D. Spiegelhalter,“ ”,统计和计算,10:325-337,2000 年。
- 名词(noun 的缩写)D. Goodman、V. K. Mansinghka、D. M. Roy、K. Bonawitz 和 J. B.Tenenbaum,“”,载于《人工智能中的不确定性》(UAI),第 220-229 页,2008 年。
- 帕蒂尔、a、d .休厄德和 C.J .丰内斯贝克。2010.PyMC:Python 中的贝叶斯随机建模。统计软件杂志,35(4),第 1-81 页,2010 年。
- Stan 开发团队,“RStan:Stan 的 R 接口”,版本 2.9.0。
- D.Emaasit、A. Paz 和 J. Salzwedel (2016 年)。。IEEE ITSC 2016。正在审查中。***
关于功能商店您需要知道的一切
原文:https://www.dominodatalab.com/blog/an-introductory-guide-to-feature-stores
特征是机器学习模型的输入。在整个组织中使用它们的最有效的方式是在一个功能库中,该功能库自动进行数据转换,存储它们并使它们可用于训练和推理。
由于各种特定功能的挑战,ML 项目和应用程序通常是昂贵且难以扩展的。通常,特性不会在一个组织中的团队和不同的 ML 应用中重用,一些团队可能会以不同的方式定义和使用特性。需要额外的努力来为每个 ML 模型提供所需的特性。要素存储通过提高定义的一致性和数据科学团队的效率来纠正这些问题。特性存储允许团队跨数据科学项目和 ML 模型有效地重用特性,从而提高他们的 MLOps 过程的效率和可伸缩性。
在本文中,您将了解特性存储以及如何在 ML 模型的开发中有效地使用特性存储。
什么是特性?
在机器学习中,预测模型学习根据过去的例子做出预测。“特征”是用于描述每个例子的属性。
表中的每一行都是一个数据实例,可用于训练或推断。列表示单个要素,每个像元是一个特征值。
在称为 特征工程 的过程中创建用作 ML 模型的训练数据的特征。在此过程中,数据科学家对原始数据进行转换,以创建可由 ML 模型使用的特征。
什么是功能商店?
特性存储是一个中央存储,管理专门为数据科学过程准备的特性。通过使搜索和查找特性变得容易,它们可以很容易地跨项目重用,从而提高效率、治理和模型速度。
大多数 ML 或深度学习(DL)模型需要数百到数千个特征,这些特征可能会根据数据类型进行不同的处理。然而,管理大量的特性并不简单,相同的特性集可能适用于不同的 ML 用例。
例如,一家信用机构使用两种不同的 ML 模型:模型 A 和模型 b。模型 A 使用“客户职业”这一特征来预测特定客户的信用评分。与此同时,另一个不同的模型,模型 B,使用相同的功能来预测该客户在信用机构接洽时升级到某个产品的概率。当几个应用程序使用相同类型的特性时,跨这些模型重用特性是有意义的。
功能商店组件
现代功能存储由三个主要组件组成—转换、存储和服务:
资料来源:Artem Oppermann
转换
ML 模型通常需要将原始数据转换成 ML 模型可以使用的特征。例如,ML/DL 模型不能很好地处理被表示为类别或标签的特征(例如性别或颜色)。因此,您需要将这种分类数据转换成更合适的格式。其他常见的转换包括数据和计算值的标准化。特征存储协调这些特征转换,主要有两种类型:
- 批处理转换仅适用于静态数据,可以在数据库、数据仓库或数据湖中找到。这种数据的一个典型例子是历史客户数据,它可以在一个表中找到(ie customer_occupation,customer_age , country 等)。).
- 流转换应用于运动中的数据或流源。这意味着数据在通过要素存储管道时会进行在线转换。与数据库或数据仓库中的数据相比,这种数据更新。例如,必须应用流转换的数据将包括每个用户在过去三十分钟内对登录页面的点击次数,或者每个用户在过去一小时内对每个列表的查看次数。
存储
在较高层次上,要素存储是 ML 操作使用的要素数据仓库。特征存储在架构上不同于传统的数据仓库,因为它由两部分数据库组成:
- “离线数据库”主要用于批量预测和模型训练。数据库存储大量历史特征,用于 ML 模型的训练目的。
- 第二个数据库称为“在线数据库”,以低延迟向已投入生产的训练模型提供在线功能。该在线数据库满足了为预测模型提供最新功能的需求。
上菜
存储在特征存储中的转换后的数据现在可以被检索并提供给 ML/DL 模型用于训练或一旦它们投入生产。这个过程被称为“上菜”。这一步非常重要,因为它可以确保始终使用正确的特征数据。
对于模型训练,检索并使用脱机数据库中的脱机数据。为了向生产中的模型提供特征,通过高性能和低延迟的 API 从在线数据库提供数据。
特色商店的优势
开发机器学习模型并不容易,主要是因为人工智能系统非常复杂,需要大量的人工努力。ML 的数据工程和管理是数据科学项目中最耗时的任务。 数据工程师必须为数据科学团队准备各种数据源和相关元数据。然后,数据科学团队确定什么可能对 ML 项目有用,并开发要测试的功能。
除了在数据准备过程中损失宝贵的时间之外,ML 项目和应用成本高昂且难以扩展。 除了在数据准备上浪费宝贵的时间,ML 项目和应用也是昂贵且难以扩展的。创建非标准特征非常耗时,会导致团队之间重复、不一致的工作,并且会使模型无法投入生产,因为用于训练模型的数据无法在生产中重新创建。
为了说明这种复杂性,下图描绘了 ML 基础设施。它表明这些特性是非标准的,因此不太具有可伸缩性:
来源:Artem 奥特曼
不同的模型访问相同的数据源,以便为每个用例进行单独的数据准备。这意味着大量的精力投入到准备数据和重复的代码中,这带来了巨大的出错可能性。它也有可能使在生产中有效地重新创建特征变得不可能。
下面简要总结了使用非标准化的 ML 基础设施时遇到的问题和挑战:
- 冗余特征构建
- 功能不可重复使用
- 重复代码
- 功能可能在生产中不可用
- 资源密集型数据准备
数据科学团队可以通过使用功能存储来避免这些挑战。通过保护商店中的功能,不同的模型可以轻松地重用这些功能,从而减少模型开发时间并提高模型开发的可重复性。
特征存储充当 ML 的中心枢纽,它可以通过避免数据管道丛林来提高 ML 团队的效率。如果没有特征存储,各种模型可能具有本质上相同或相似的数据管道来准备、创建和访问所需的特征。相比之下,特征存储为所有模型提供了标准化的数据管道。
通过使用特征库可以实现高度的 ML 自动化。具体来说,是验证数据完整性的自动化数据验证规则。这可能涉及检查值是否在有效范围内,是否具有正确的格式和数据类型,以及是否为空。
特征库还可以提高模型部署的速度,通过确保特征始终可用于推理。通过使用集中的数据存储来存储训练数据,数据科学团队可以实现最佳的可伸缩性,并提高 ML 应用程序的效率。
下图显示了特征库如何独立于模型构建特征:
来源:Artem 奥特曼
综上所述,一个特性库给一个数据科学团队带来了很多好处,包括以下:
- 特征的可重用性
- 再现性
- 特征的质量保证
- 高效利用数据科学家(ie时间显著减少)
- 高度的 ML 自动化
- 洗钱中心的出现
- 数据科学的可扩展性,因为数据、基础设施和标准化流程已经到位,新项目和模型可以更快地扩展和实施
功能存储选项
直到最*,如果你想在你的 ML 操作中加入一个特性库,你必须开发你自己的。特色商店主要用于内部 ML *台,比如优步的米开朗基罗。感谢开源社区,这已经改变了。
即使开源功能商店的选择仍然有限,但随着 盛宴 和 Hopsworks 等产品的出现,选择越来越多。
Hopsworks 功能商店于 2018 年底首次发布,是更大的 Hopsworks 数据科学*台的组成部分。Feast 是一个独立的特性商店,由 GoJek 发布,围绕 Google 云服务打造,像 BigQuery、 Redis 和 Cloud Bigtable,使用 Apache Beam 进行特性工程。
结论
在本文中,您了解了特性存储如何通过将自动化引入 ML 操作来提高效率。特征存储是专门用于 ML 过程的中央数据存储,已经成为现代 ML 栈的关键组件。
通过集中 ML 特性,新的项目和模型可以更快、更可靠地扩展和实现,因为数据、基础设施和标准化的数据过程已经可用。
分析大 P 小 N 数据——微生物组的例子
原文:https://www.dominodatalab.com/blog/analyzing-large-p-small-n-data-examples-from-microbiome
介绍
高通量筛选技术已经发展到在单个实验中测量样品中所有感兴趣的分子(例如,整个基因组、代谢物的量、微生物组的组成)。这些技术被描述为以不偏不倚和无目标的方式对细胞、组织或有机体中的分子进行“通用检测”^(【1】)。希望这些数据能让研究人员更好地理解他们正在研究的东西。
20 世纪为小数据集开发的经典统计学不适用于变量数量远大于样本数量的数据(大 P 小 N,维数灾难,或 P > > N 数据)。我们之前的多米诺博客上的^(【2】),描述了当 P > > N:
*1. 点彼此远离
2. 点落在数据分布的外边缘
3. 预测模型对噪音的拟合接* 100%的准确性
4. 点之间的成对距离变得相同
这些行为中的每一种都会对统计分析造成严重破坏。例如,不可能知道你的预测模型是否准确,因为它正在拟合重要的变量或噪声。
减少用于分析和解释的数据
使用自动算法进行数据简化存在问题。考虑具有 500 个变量的数据集,使用 PCA 将维度减少到少数用于分析。仔细观察可以发现,PCA 产生了变量的线性组合——这是无法解释的。理解 500 个系数的意义和相互作用是不可能的。每个 PCA 投影都是不可解释的,因此学习是不可能的。
由于我们仍然有一个大 P 小 N 的问题,直接的假设检验是不可能的。相反,这个分析阶段的目标是解释和学习。将这种分析视为探索性的是很重要的。这种探索性的分析并不是通过一次分析所有的数据来发现突出的部分。不要使用算法来减少数据,而是选择有生物学意义并且可以解释的变量子集。在子集分析中发现的任何东西都应该被视为假设生成,并且在后续设计的实验中可能是可检验的。
BioRankings 所做的两项分析在此作为这种方法的例子。这两项研究都涉及高通量筛选数据和来自作为整合人类微生物组项目一部分的大约一百名糖尿病前期受试者的成百上千个变量。^(【3】)在第一次分析中,选择了 12 种细胞因子来测试细胞因子的变化是否与肠道微生物组的组成变化有关。在第二次分析中,选择来自肠道微生物分类群的基因子集,以测试基因拷贝数是否与从胰岛素敏感性(良好结果)到抗性(不良结果)的转化相关。
细胞因子水*与肠道微生物组组成相关吗?
合作者有兴趣了解细胞因子是否与微生物组组成有关。细胞因子是与许多生物学结果如炎症、脓毒症、发育和其他结果相关的小肽。测量了数百种小肽和细胞因子,因此确定了被认为与糖尿病发展相关的 12 个子集,以避免与大 P 小 N 相关的问题,并具有生物学解释可能的集中子集。这 12 个在表 1 中列出。由于大 P 小 N 的数据是探索性的,对这 12 种肽的分析并不排除我们对其他肽亚类的分析。
在统计学中,回归分析常用于将结果(因变量)与输入协变量(自变量)联系起来。当因变量为连续变量、分类变量或生存时间变量时,这些模型得到了很好的发展。然而,对于因变量或结果变量是微生物类群组成的情况,不存在回归模型。
为了将微生物组组成(因变量或结果变量)回归到细胞因子(独立变量或输入变量)上,我们推导并发布了一个新的回归模型。^(【4】)DM-RP art 方法结合了递归分割和狄利克雷-多项式概率模型。递归分割找到协变量空间中结果更均匀的区域。([【5】](#post-7222-footnote-5))狄利克雷多项式概率模型适用于微生物组数据,并提供了假设检验、样本大小和功效计算、效应大小、过度分散和其他经典统计的方法。【
DM-RPart 寻找微生物组样本的分区或子集,使得子集内样本的分类群组成或比例彼此之间比其他子集中的样本更相似。聚类分析基于忽略协变量中的信息的距离(即无监督学习)来寻找分区。DM-RPart 是一种使用协变量中包含的信息的监督学习算法。
DM-RPart 中的分区由阈值协变量定义–例如,如果样本有瘦素< 1476 put the sample in the left 子节点,否则将样本放入正确的子节点。通过优化狄利克雷-多项式概率模型的最大似然比 (MLR) ,将父节点中的样本与分成两个子节点的样本进行比较,来自动选择最佳分裂的顺序。通过将父节点划分成两个子节点引起的同质性越大,MLR 越高。任何父节点的划分是在具有最大 MLR 的协变量分裂上完成的。
我们将 DM-RPart 应用于上述 12 种细胞因子,基于对肠道微生物群的可能作用机制的生物学理论。图 1 显示了将 128 个微生物组样本(顶部或根节点)分成 5 个亚组(终端节点)的模型。首先根据瘦素水*高于或低于 1476 的受试者将 128 个样品分开。受试者体内瘦素< 1476 的 57 个样本中,IL4 高于或低于 60 的第二个分裂将他们分成 37 人和 20 人的两个子集。重复这一过程,直到长出一棵大树,然后修剪以避免过度生长。
图 1:将微生物类群组成回归到 12 种细胞因子的 DM-RPart 模型。
图 2 中的彩色条形图显示了每个亚群中的微生物组成。每种颜色对应一个分类单元(见图顶部的图例),颜色段的高度对应该分类单元在种群中的比例。不同亚组的分类群组成有很大差异,表明细胞因子水*的变化与微生物组组成的变化有关。
这 12 种细胞因子的分析是可以解释的。值得注意的是,与肥胖相关的微生物组组成在低瘦素(亚组 3,5,6)和高瘦素(亚组 8,9)中不同,这表明瘦素、肥胖和微生物组可能相关。作为一个可检验的假设,确定低瘦素组和高瘦素组中的每组 N = 32 名受试者将提供 80%的能力来检测微生物组组成的统计学显著差异。
需要强调的是,我们认为大 P 小 N 数据分析只是探索性的。这导致了两个结果。首先,分析不限于一个子集。可以进行尽可能多的具有生物学意义的变量子集的分析。这些分析可以使用适用于子集的任何统计方法,而不限于所有子集的相同分析。第二,如果结果表明有趣的生物学,它们应该被视为产生假设,而不是统计意义上的。研究者应该在后续设计的实验中证实这些结果。
图 2:来自 DM-RPart 的五个末端节点中的每一个内样品的分类群组成
微生物组基因有助于将健康患者转化为糖尿病前期吗?
在这项分析中,问题是肠道微生物群是否会影响胰岛素活性正常(胰岛素敏感性)的患者,而不是胰岛素活性降低或糖尿病前期(胰岛素抵抗)的患者。受试者先吃增加体重的食物,然后再吃减轻体重的食物。在整个研究过程中,在 4 个时间点对每位患者的微生物群、胰岛素状态(敏感/耐受)和其他几种表型进行了测量。
我们修改了生态学中使用的一个分析,称为 RLQ^(【7】)来回答这个问题。RLQ 同时分析了包含在三个表格中的信息:
- r(样品的微生物组组成)
- l(样本的表型)
- q(细菌基因拷贝数)。
图 3 显示了 RLQ 数据布局。表 L 和 R 中的行对应于受试者,L 中的条目对应于分类群计数,R 中的条目对应于表型值(例如,胰岛素敏感性或抗性)。表 L 和 Q 的列对应于分类群,Q 中的条目是由 Q 表行指定的每个基因的拷贝数。
图 3:RLQ 分析数据表。
由于细菌中的基因组很大(它们必须编码细菌的所有活动),微生物组中有数千个细菌基因,这使得 Q 表非常大,分析大 P 小 n。因此,考虑对基因子集进行重点分析非常重要。
图 4 是来自 KEGG 数据库的半胱氨酸和蛋氨酸代谢途径。^(【8】)该途径描述了这两种分子的合成和降解,涉及数十个步骤和基因。为了减少数据,我们将分析重点放在蓝框中红线所示的蛋氨酸降解途径上。甲硫氨酸降解为 L-胱硫醚,产生与血管疾病(高同型半胱氨酸血症)相关的中间化合物 L-高半胱氨酸,并可能与糖尿病相关。我们将 Q 表限制在被认为与糖尿病相关的甲硫氨酸降解途径中的 4 个基因。
图 4:来自 KEGG 数据库的蛋氨酸降解途径。
图 5 显示了 RLQ 分析结果。基因 K00558 (DNA(胞嘧啶-5)-甲基转移酶 1)和基因 K01251(腺苷高半胱氨酸酶)与胰岛素敏感性正相关(红线将每个基因连接到 IR_IS。IS ),并与胰岛素抵抗负相关(蓝线连接每一个与 IR_IS。IR)。不相关的基因和性状显示为绿色。
这些结果表明,增加具有高 K00558 和 K01251 基因拷贝数的分类群在肠道中的患病率可能会减缓或阻止从胰岛素敏感性向抗性的转化,从而减少向糖尿病的转化。这是一个可检验的假设。
图 5:甲硫氨酸途径的 RLQ 分析
如上所述,高通量筛选实验是探索性的,并且基于主题领域的专业知识(例如甲硫氨酸降解)选择的一组减少的变量的集中分析不妨碍进行其他分析。烟酸酯/烟酰胺降解途径被认为与胰岛素敏感性和身体质量指数有关,对该途径中基因的聚焦 RLQ 分析如图图 6 所示。发现更多的基因与胰岛素状态相关(正相关和负相关),一个基因 K00763 与身体质量指数正相关——k 00763 的更多拷贝意味着更高的受试者身体质量指数。所有这些都是可检验的假设。
图 6:烟酸途径的 RLQ 分析
摘要
由于大多数组学研究是在没有假设的情况下设计的——衡量一切,看看会得出什么结果——将数据分析视为探索性的是合适的。在子集分析中发现的任何东西都应该被视为假设生成和潜在可测试的。
通过将生物学知识纳入多组学数据的分析,可能会揭示生物学机制的理解。我们正在将这些实验从“测量一切,看看我们能发现什么”转移到“我们已经测量了一切,现在让我们详细说明有趣的假设,看看它们是否经得起推敲”。
参考
- https://obgyn . online library . Wiley . com/doi/full/10.1576/toag . 13 . 3 . 189 . 27672↑
- https://blog.dominodatalab.com/the-curse-of-dimensionality↑
- https://www.nature.com/collections/fiabfcjbfj↑
- https://www.nature.com/articles/s41598-019-56397-9↑
- https://cran . r-project . org/web/packages/RP art/vignettes/long intro . pdf↑
- https://journals.plos.org/plosone/article?id = 10.1371/journal . pone . 0052078↑
- https://esa journals . online library . Wiley . com/doi/10.1890/03-0178↑
- https://www.genome.jp/kegg/kegg2.html↑*
声明:Domino 完全是 Kubernetes 的本地产品
原文:https://www.dominodatalab.com/blog/announcement-domino-is-fully-kubernetes-native
上周,我们宣布 Domino 现在完全是 Kubernetes 的本地产品。
对于构建现代 DS *台的数据科学团队和 IT 组织来说,这是一个好消息,原因有二:
- 首先,Domino 现在可以安装在任何基础设施上——任何云或本地,甚至安装在您自己的集群中——因此您可以让您的数据科学基础设施经得起未来考验,并无缝集成到您现有的体系中。
- 第二,我们不仅仅使用 k8s 来安装我们的*台服务,我们还进行了深入研究:我们重建了整个计算网格,以利用 k8s 来分配数据科学工作负载,包括模型培训工作、交互式笔记本会话、托管应用程序和部署生产模型。有了 Domino,您所有的数据科学工作负载都可以自动从 k8s 中提升。这使得数据科学家更有效率,省去他们开发操作的麻烦。它还通过高效分配工作负载来减轻 It 支持负担,并降低基础架构成本。
在 2014 年成为第一个将数据科学工作负载容器化的*台后,我很自豪我们再次引领行业将现代基础架构的力量带给数据科学团队。K8s 是即将到来的下一波创新的惊人基础。
Btw,如果你喜欢 k8s 和数据科学,加入我们快速成长的工程团队!
[编者按:尼克的帖子最初出现在 LinkedIn 上。有关 Kubernetes 是一个如何能够弥合数据科学家和 IT 之间的差距的编排框架的更多详细信息,请参见他在 Venturebeat 上的文章“ Kubernetes:加速当今数据科学所需的关键因素”。]
宣布:旧金山的数据科学弹出式窗口
原文:https://www.dominodatalab.com/blog/announcing-data-science-pop-san-francisco
我们很高兴地宣布数据科学弹出窗口旧金山,我们的数据弹出窗口系列的第 6 次活动。为期一天的论坛将于 2017 年 2 月 22 日在旧金山市中心的激励举行,并将专注于 SaaS、技术和保险领域的数据科学应用。在此注册享受优惠价格。
该活动面向希望开发最佳实践、分享想法并与行业同行建立联系的数据科学领导者。我们得到了来自优步、Atlassian、O'Reilly Media、Nielsen Company 等公司的大量演示和小组讨论。
这里有一些你不想错过的会议。点击查看完整议程。
尼尔森公司首席数据科学家张咪咪的
可计算的内容:笔记本、容器和以数据为中心的组织学习 作者 Paco Nathan,O'Reilly Media 的学习主管
和
insta cart 的数据科学:让按需盈利 insta cart 数据科学副总裁 Jeremy Stanley
宣布:数据科学在洛杉矶兴起
原文:https://www.dominodatalab.com/blog/announcing-data-science-pop-up-los-angeles
我们很自豪地宣布数据科学弹出式洛杉矶,这是我们数据科学弹出式系列的第 5 次活动。在洛杉矶举行的为期一天的论坛将重点关注媒体和娱乐中的数据科学应用。
如果您有兴趣了解数据科学的最新趋势,与思想领袖接触,并与同行交流,请不要错过此次活动!议程将包括与数据科学家、软件工程师、数据驱动型高管和业务开发专业人士等相关的讲座和研讨会。
数据科学 Pop-up LA 将于 2016 年 9 月 14 日举行,可购买早鸟票门票。立即注册,享受优惠价格。
观看在纽约,芝加哥,西雅图和奥斯汀的过去事件的谈话。
征集发言人
Domino 的弹出窗口汇集了来自该地区和全国的广泛的数据科学从业者和机器学习研究人员。我们欢迎您提交一份 100-250 字的演讲提案。我们对娱乐和媒体行业的数据科学领导者的观点特别感兴趣。
该数据科学专题讲座将持续一天,包括两个专题讲座和多种类型的演示:
- 思想领袖关于最佳实践和数据科学现状的 30 分钟一般性演讲。
- 关于特定类型定量研究的 45 分钟技术“操作”研讨会。
- 来自数据科学从业者的 15 分钟闪电谈话,讲述他们所做工作的有趣方面。
我们接受摘要的截止日期是 2016 年 8 月 14 日,今天申请。
宣布 Domino 3.0 和 Launchpad
原文:https://www.dominodatalab.com/blog/announcing-domino-3-0-and-launchpad
By Mac Steele, Director of Product, Domino Data Lab on October 17, 2018 in
尽管所有公司都在数据科学领域进行投资,但令人震惊的是,很少有人看到任何真正的商业影响。最*的一项研究量化了这一差距,揭示了 85%的人认为模型将使他们的公司获得或保持竞争优势,但只有 5%的人广泛使用它们。
原因很简单;对于公司来说,让模型超越他们的数据科学团队并投入生产是极其困难的。正如一位数据科学领袖敏锐而令人难忘地指出的那样,“我们建立新总部的速度比我们将模型投入生产的速度还要快。”
今天,我们正在帮助改变这种状况,推出了 Domino 3.0,这是我们屡获殊荣的数据科学*台的下一个版本,并推出了 Launchpad,这是一个新模块,旨在帮助公司通过解决他们在将模型投入生产(ModelOps)时面临的运营挑战和瓶颈,最大限度地发挥数据科学投资的影响。
解决数据科学中的最后一英里问题
现在有了 Domino 3.0,公司可以通过消除模型交付瓶颈来填补数据科学投资、执行和实现竞争优势之间的差距。
Domino 的新模块 Domino Launchpad 通过以下方式帮助公司解决数据科学中的最后一英里问题:
- 消除模型交付的技术障碍通过 Docker 自动提供基础设施,并支持 Shiny、Flask 和 Dash 等流行工具;
- 改善利益相关者之间的协作通过单一门户发现模型产品和使用数据,确保更快的反馈循环,以验证模型的影响;和
- 加速模型迭代速度通过自动模型版本控制和实验历史的完全可再现性,实现更快、更连续的模型迭代。
Domino 3.0 背后的动机来自于与领先的数据科学组织合作,看看哪些对他们有用,哪些没用。最新的 Domino 3.0 功能旨在帮助数据科学领导者确保他们的投资产生切实的业务影响。
穆迪分析公司利用 Domino 将模型迭代速度提高了 4 倍
穆迪分析提供专业知识和工具,包括数据、模型、软件和专业服务,帮助公司高效发展和管理金融风险。作为金融建模领域的先驱,穆迪分析团队通过几十年的磨练,基于独特的金融数据集创建模型,然后应用这些模型解决客户的业务挑战,从而建立了竞争优势。通过将一些数据科学项目集中在 Domino 上,Moody's Analytics 极大地提高了模型生命周期的效率,并扩展了他们与客户和合作伙伴构建协作模型的能力。为了实现这一转变,Moody's Analytics 需要加快模型开发的速度,并增加生产模型的迭代次数。他们通过 Domino 实现了这一点,减少了端到端的模型开发周期,并将模型作为 API 和应用程序交付给下游消费者。例如,在使用 Domino 的早期体验中,Moody's Analytics 将预计九个月的项目减少到了四个月。该公司还使用 Domino 将生产模型的迭代速度提高了四倍。穆迪分析的风险和金融分析董事总经理 Jacob Grotta 表示:“凭借穆迪分析的专业知识和工作流程,加上 Domino 和 AWS 基础设施,我们能够加快模型开发,这意味着信息可以更快地到达需要它的客户手中。“我们的客户非常兴奋,因为他们的需求将会以新的方式得到满足,这在以前是不可能的。”
了解关于 Domino 3.0 和 Launchpad 的更多信息
最*,在 Forrester Research 的 Forrester Wave 报告“基于笔记本的预测分析和机器学习解决方案”中,Domino 被评为领导者。
要了解有关 Domino 3.0 的更多信息,请注册参加网络研讨会“领先企业如何应对 ModelOps 挑战”,该研讨会将于 11 月 14 日上午 10:00(太*洋标准时间)由 Forrester Research、Bayer Worldwide 和 Domino 共同举办。在此注册。
用强大的交互式模型产品取悦利益相关者
Domino 3.3:数据集和实验管理器
原文:https://www.dominodatalab.com/blog/announcing-domino-3-3-datasets-and-experiment-manager
我们在 Domino 的使命是让组织能够将模型放在其业务的核心。模型与软件非常不同,例如,它们在开发过程中需要更多的数据,涉及更多的实验性研究过程,并且它们的行为具有不确定性,因此组织需要新产品和流程来支持数据科学团队大规模开发、部署和管理它们。
今天,我们宣布 Domino 中有两个主要的新功能,可以让数据科学家更容易、更快地开发模型。“数据集”为数据科学家提供了在开发模型时利用大量数据资源所需的灵活性。“实验管理器”为数据科学家提供了一种方法来跟踪、查找和组织他们在研究过程中测试过的所有想法。
正如人们经常引用的那样,数据科学家花费 80%的时间“争论”数据——数据准备、数据工程、特征提取——除了模型开发和培训之外,所有这些都是耗时的活动。这一痛点在拥有从事大量实验的数据科学家团队的组织中被放大了。
多米诺数据集
数据集提供了高性能的修订数据存储,使数据科学家能够跟踪、共享和重用基于文件的大型数据资源,以便团队能够更快地迭代研究并加速模型开发。数据集不是将数据存储在 Domino 项目文件中,而是提供本地化的数据集合,可随时用于数据科学实验。数据集被设计为处理需要大量单个文件和/或大规模文件的使用情形。通过消除冗余工作并确保每个人都使用最新和最棒的产品,共享和重用数据集中的精选数据的能力可以大大减少花费在争论数据上的时间。
“数据集功能为我们节省了大量时间,”机器智能公司 Numenta 的首席软件工程师 Luiz Scheinkman 说。“过去处理数据需要几个小时,所以我们要通宵运行这些流程。使用 Domino 数据集,我们可以对数据进行预处理,并在 21 分钟内将预处理后的数据附加到实验中。这意味着我们可以迭代,看到我们的结果,并在一天中不断改进——这在加快整个模型开发过程中有着巨大的差异。”
Domino 数据集还将数据的版本控制与代码的版本控制分离开来,允许更高的保真度和实验的完全可再现性。数据集允许更细粒度的数据隐私和保护应用。有关 3.3 中数据集的更多信息,请参见 Domino 支持网站并观看本教程:
多米诺实验经理
除了数据集,Domino 3.3 还引入了实验管理器。数据科学不同于软件开发等其他工作流,因为它涉及开放式探索和实验,以找到最佳解决方案。传统的知识管理系统无法无缝地跟踪和组织这样的工作,因此数据科学家经常求助于手动将元数据保存在电子表格中,或者更糟的是,丢失他们实验的许多线程。数据科学家和数据科学领导者需要一个单一视图来跟踪、组织和管理不同细节级别的实验。实验管理器在 Domino 中提供了这种可见性,就像数据科学家经历训练和调优模型的迭代过程时的“现代实验室笔记本”一样。对实验的状态、性能和影响的单一、高性能视图使数据科学团队能够管理实验,以便找到相关的过去工作、执行元分析和回顾。
实验管理器允许用户对实验进行搜索、分组、排序和过滤,从而可以轻松地找到特定的过去结果,并查看实验的粒度细节,同时将这些实验置于更广泛的想法背景下进行测试。
借助实验管理器,数据科学家可以在一个屏幕上比较两次不同运行的结果,以进行快速分析,并访问实验的详细日志记录。
关于 3.3 中实验管理器的更多信息,请参见 Domino 支持站点。
Domino 3.3 目前已经上市——请务必查看产品演示,了解最新的*台功能。
宣布 Domino 3.4:通过 Activity Feed 加强协作
原文:https://www.dominodatalab.com/blog/announcing-domino-3-4-furthering-collaboration-with-activity-feed
我们的上一个版本,Domino 3.3看到了两个主要功能的增加: 数据集 和 实验管理器 。“数据集”是一种高性能的修订数据存储,为数据科学家提供了在开发模型时利用大型数据资源所需的灵活性。“实验经理”充当数据科学家的“现代实验室笔记本”,用于跟踪、组织和查找他们研究过程中测试的所有内容。
本着继续关注支持协作、组织和透明的精神,Domino 在 Domino 3.4 中引入了对实验管理器的补充:活动提要。
活动馈送
Activity Feed 是实验室中的一个新页面,它提供了一个易于跟踪的、按时间顺序排列的项目变更日志。
3.4 Activity Feed
虽然有助于跟踪个人的进步,但在与团队合作时,活动提要确实大放异彩。有了 Activity Feed,让新团队成员入职并让他们快速上手变得更快、更容易。新的团队成员可以很容易地回顾过去的工作,目前的进展,并看到谁联系任何以前的工作的问题。类似地,在离开项目后,团队成员很容易通过滚动活动提要来恢复工作。
除了能够跟踪项目随时间的变化,数据科学家还可以轻松访问作业或工作空间的结果,点击作业编号以在实验管理器中查看更多详细信息,并从活动提要中轻松比较作业。如果数据科学家只想要特定的视图,也可以通过工作、工作区和评论进行过滤。
3.4 Activity Feed
本着促进协作和交流的精神,用户可以对每个事件发表评论并在线回复。
3.4 Activity Feed
Activity Feed 诞生于改善协作和讨论的目标。作为实验管理器的完美补充,用户现在可以更容易地跟踪项目的进展。
关于 3.4 中的活动 Feed,详见 多米诺骨牌支持站点 。
Domino 3.4 目前已正式上市—联系我们了解更多信息,请务必查看产品演示,了解最新的*台功能。
宣布试用和 Domino 3.5:数据科学领导者的控制中心
By Kelly Xu, Product Marketing Manager on June 26, 2019 in Product Updates
即使是最复杂的数据科学组织也很难跟踪他们的数据科学项目。数据科学领导者希望在任何给定的时刻,不仅知道有多少数据科学项目正在进行中,还想知道在模型开发方面有哪些最新的更新和障碍,以及哪些项目需要他们立即关注。
但是,虽然有大量的工具可供个人数据科学家使用,但数据科学领导者的需求并没有得到很好的满足。例如,一家财富管理公司的分析副总裁最*告诉我们,他不得不拿着笔和记事本在办公室里走来走去,从一个人走到另一个人,以便获得正在进行的项目的实际数量,因为他们的传统任务跟踪工具与数据科学团队使用的工作流不太一致。事实证明,最终的统计结果与提供给首席执行官的最初估计相差甚远。
数据科学领导者面临着一系列与可见性和治理相关的常见挑战:
- 他们需要帮助跟踪项目
- 他们需要帮助跟踪生产中的模型
- 他们需要帮助建立一种遵循最佳实践的文化
考虑到不准确信息的潜在影响(从错误设定的预期、资金不匹配到项目延迟),数据科学领导者在纽约举行的 Rev 2 数据科学领导者峰会上挤满了房间,观看我们专门为他们设计的新“控制中心”功能的现场演示,这并不奇怪。
https://www.youtube.com/embed/aO3YkDwsm6Q
附注:如果你错过了今年的 Rev ,可以在这里找到专题演讲和录音。
去年秋天,我们向 IT 利益相关者提供了 Domino 控制中心,帮助他们了解计算使用和支出情况。今天,我们宣布在 Domino 3.5 中对控制中心进行重大扩展,为数据科学领导者提供新功能。
Domino 3.5 允许数据科学领导者定义他们自己的数据科学项目生命周期。控制中心新增了项目组合仪表板,使数据科学领导者能够轻松跟踪和管理项目,全面了解最新发展。它还通过显示被阻止的项目来实时显示需要立即关注的项目。
项目组合仪表板
数据科学领导者可以在项目组合仪表板中开始他们的一天,该仪表板显示了按可配置的生命周期阶段细分的进行中项目的摘要,并提供了所有项目的即时状态更新。
项目阶段配置
每个组织都有自己的数据科学生命周期来满足他们的业务需求。在 Domino 3.5 中,我们允许数据科学领导者和管理者定义他们自己的项目生命周期,并在他们的团队中实施。
数据科学家可以在整个生命周期中更新他们的项目阶段,并通过电子邮件通知他们的合作者。
项目所有者和参与者可以使用“项目阶段”菜单,通过阻止程序的描述将项目标记为被阻止。一旦解决,项目就可以解冻。另一方面,当数据科学家用项目结论的描述将项目标记为完成时,Domino 也会捕获这些元数据,用于项目跟踪和将来的引用。所有这些捕获的元数据对于组织学习、组织项目和帮助避免将来类似的问题都是有用的。
所有这些信息为 Domino 的新项目组合仪表板提供了动力。数据科学主管可以点击查看任何正在进行的项目的更多背景信息,并发现需要关注的受阻项目。
在下面的假设项目中,我们的首席数据科学家 Josh 看到其中一个被阻止的项目是 Avinash 和 Niole 的客户流失项目。虽然他不记得这个项目的细节,但他可以看到它正处于 R&D 阶段,几周后会有一个艰难的停顿。深入到项目中,他可以看到剩下的目标是获得 AUC 在 0.8 以上的分类模型。
Josh 可以转到活动源,以获得有关阻止程序、原因的详细信息,并建议采取行动。在这个例子中,他将要求客户流失团队尝试深度神经网络。他可以标记另一个团队的深度学习专家 Sushmitha,并请她指导这项工作。
管理项目、跟踪生产资产和监控组织健康状况需要新的工具。这些独特的功能是为数据科学领导者定制的。在 Domino,当您在团队中使用这些优势时,我们很高兴地看到这些优势正在向您走来。
所有这些只是 Domino 中的一些新特性,在 3.5 版本中,我们还对现有特性进行了一些其他增强。例如, Activity feed 得到了增强,可以显示正在评论的文件的预览。它还显示了项目阶段的更新,以及合作者是否提出了任何阻碍因素。用户还可以根据活动类型进行筛选。这与电子邮件通知相结合,将确保随时了解项目的情况。
资料组
Domino 3.5 为用户提供了直接从计算机上的数据创建大型数据集快照的选项。CLI 上的上传限制已增加到 50 GB 和最多 50,000 个文件。在相同的上传限制下,用户也可以直接通过浏览器上传文件。CLI 和浏览器上传提供了一种无缝方式,可将笔记本电脑上的数据迁移和贡献到一个位置,以进行数据科学工作。团队可以利用共享的、精选的数据,消除潜在的冗余数据争论工作,并确保完全可重复的实验。
许可证使用报告
为了补充数据科学领导者控制中心的新功能,我们还推出了用户活动分析增强功能,以促进许可证报告和合规性。它提供了每个团队成员的 Domino 活动水*的详细视图,以便数据科学和 It 领导可以管理他们的 Domino 许可证分配,并对他们的成本有可见性和可预测性。Domino 管理员可以快速识别活动和非活动用户,并决定是否应该给他们分配一个许可证。在预算规划和合同续签期间跟踪用户活动和增长的能力,使得规划未来支出变得更加容易。
试验
除了为数据科学领导者带来激动人心的突破性新功能,我们还推出了新的[试用环境]https://www . dominodatalab . com/Trial/对于那些想尝试一下并评估它是否对你的工作有用的人来说,它是完美的。这个最新版本中的新特性也将出现在我们的测试环境中!这是访问 Domino 并开始体验像经销商轮胎和 Redhat 这样的公司在他们的数据科学组织中利用的秘方的一种快速而简单的方法。
Domino 3.5 目前已经上市——请务必试试 Domino 看看最新的*台功能。
宣布多米诺为好-我们的计划为非营利组织和学生
原文:https://www.dominodatalab.com/blog/announcing-domino-good-program-nonprofits-students
上周在我们的数据科学 Popup 上,我们宣布了 Domino for Good ,我们的计划是帮助学生和非营利组织使用 Domino 进行数据科学工作。对于非营利组织,我们要么免费提供软件,要么大幅打折。对于学生,我们免费提供软件和计算资源。
我们看到许多组织在数据科学方面做了很好的工作,让世界变得更美好,我们希望成为其中的一员。 Thorn 正在利用数据科学保护儿童,而奥杜邦协会正在利用数据科学保护环境。民主数据正在为人们参与利用数据服务公共利益创造机会,而 MDRC 正在努力改善影响穷人的项目和政策。这些组织受益于数据科学*台,我们都受益于他们所做的工作。
对于学生来说,我们认识到,试图学习数据科学的人往往会被与他们的课程工作无关的事情拖慢脚步。这可能是一台动力不足的计算机,需要访问 GPU,或者浪费时间管理环境和软件包。我们已经和足够多的教育者交谈过,知道这些是真正的痛点。世界需要更多的数据科学家,教育已经够贵了。
值得注意的是,这个程序代表了 Domino 的真实投资。虽然软件是免费的,但我们为该程序的计算资源付费,包括大量的服务器。我们还提供产品培训和支持。
我们相信这项工作值得我们花费金钱和时间,因为我们已经能够从数据科学社区中以如此多的方式受益。人们自愿在我们的弹出窗口上发言,并为我们写博客。更一般地说,开源社区已经创造了像 Jupyter notebooks 和 scikit learn 这样的神奇工具。这些工具使我们的产品对客户更有用。
保存日期!Rev 3 将于今年 5 月在纽约回归!
原文:https://www.dominodatalab.com/blog/announcing-rev-3-dates-keynote-speakers-and-registration
由多米诺数据实验室于 2022 年 2 月 8 日在公司更新
我们很高兴再次在 Rev 3 现场相聚,这是一年一度不容错过的企业 MLOps 峰会!
2022 年 5 月 4 日至 6 日,纽约 Marriott Marquis 酒店。
这有望成为迄今为止最雄心勃勃的企业 MLOps 峰会。而且,注册现在是开放的,有最好的交易,所以你可以保证你和你的团队不会错过这个开创性的经验。立即注册!
Rev 3 汇集了数据科学和 IT 领导者及其团队,分享关于 MLOps 最佳实践的战略和实践见解,以推动其组织内的进步。
为前所未有的三天洞察力和学习做好计划,重点是建立一个持续的学习机器。
注重持续学习
模型的力量在于它们不断学习的能力:随着数据的变化,模型也在改进。今年 Rev 着眼于如何将这种持续学习融入到你的模型、团队和生活中。从不容错过的杰出主题演讲嘉宾阵容开始:
- James Clear ,畅销书作家和个人发展教练。Clear 将谈到“原子习惯”
- Mike Hayes,VMware 首席数字化转型官。"永不满足:海军海豹突击队指挥官谈卓越、敏捷和有意义的生活."
- 詹妮弗·杜德纳(Jennifer Doudna),博士, 2020 年诺贝尔奖获得者,加州大学伯克利分校分子和细胞生物学及化学教授。
- Linda Avery,高级副总裁,&首席数据分析官,威瑞森
- 访问我们的演讲人页面了解更多关于这些以及我们的专家阵容的信息。
数据科学团队教育
这些鼓舞人心的演讲者只是 Rev 3 所提供的一个暗示。该议程包含培训、实践见解、学习和网络,将遵循三个不同的轨道:
数据科学管理 -赢得转型战略、雇佣和建立团队的艺术、创建跨职能协作以及支持数据科学家。
模型驱动的业务 -支持组织战略、运营效率和重大商业价值的数据科学、机器学习和 MLOps 的应用。
MLOps 提示、工具和技巧 -从探索和实验到部署和监控的整个 MLOps 生命周期中的技巧、工具和建议。
立即注册获得最优惠的价格,并确保您的团队沉浸在所有这些无与伦比的学习中。
数据科学领导者的必备
如你所知,我们对迄今为止最重要的一次变革感到兴奋。这是唯一一次深入探讨数据科学领导力的独特挑战以及机器学习和企业 MLOps 如何支持组织战略、运营效率和重大商业价值的峰会。您将了解关于如何提高数据科学团队的工作效率、增强治理和安全性、加快模型速度的重要见解,以及数据科学生命周期中的其他主题。
...这一切都发生在我身上。
Rev 3 是您希望参加的活动,如果企业 MLOps 是您带领您的企业走向数据科学成功的责任。
不要错过今年的活动。现在就注册,锁定您的空间,并节省(做一只早起的鸟儿是值得的)!
为了更深入地了解更多的发言人和会议,我们的 Rev 3 网站现已上线,提供了详细议程、发言人、会议议程、常见问题解答、地点后勤以及最新的健康和安全信息。
赞助机会
赞助商有机会成为全球 2000 强企业、其支持合作伙伴、行业领袖和数据科学家的焦点。立即了解更多关于赞助的信息 。
最后,一个关于保持你的健康和安全的注意事项。请放心,我们致力于吸引人且安全的现场活动。Rev 3 将遵循所有最新的疾控中心和纽约当地的指导。
今年五月在纽约见!
宣布试用和 Domino 3.5:数据科学领导者的控制中心
即使是最复杂的数据科学组织也很难跟踪他们的数据科学项目。数据科学领导者希望在任何给定的时刻,不仅知道有多少数据科学项目正在进行中,还想知道在模型开发方面有哪些最新的更新和障碍,以及哪些项目需要他们立即关注。
但是,虽然有大量的工具可供个人数据科学家使用,但数据科学领导者的需求并没有得到很好的满足。例如,一家财富管理公司的分析副总裁最*告诉我们,他不得不拿着笔和记事本在办公室里走来走去,从一个人走到另一个人,以便获得正在进行的项目的实际数量,因为他们的传统任务跟踪工具与数据科学团队使用的工作流不太一致。事实证明,最终的统计结果与提供给首席执行官的最初估计相差甚远。
数据科学领导者面临着一系列与可见性和治理相关的常见挑战:
- 他们需要帮助跟踪项目
- 他们需要帮助跟踪生产中的模型
- 他们需要帮助建立一种遵循最佳实践的文化
考虑到不准确信息的潜在影响(从错误设定的预期、资金不匹配到项目延迟),数据科学领袖们在纽约举行的 Rev 2 数据科学领袖峰会 上挤得满满当当来观看我们专门为他们设计的新“控制中心”功能的现场演示也就不足为奇了。
https://www.youtube.com/embed/aO3YkDwsm6Q?feature=oembed
附言:如果你错过了今年的 启 ,专题演讲和录音可以在这里找到。
去年秋天,我们推出了 Domino 控制中心 ,旨在帮助 IT 利益相关方了解计算使用和支出情况。今天,我们宣布在 Domino 3.5 中对控制中心进行重大扩展,为数据科学领导者提供新功能。
Domino 3.5 允许数据科学领导者定义他们自己的数据科学项目生命周期。控制中心新增了项目组合仪表板,使数据科学领导者能够轻松跟踪和管理项目,全面了解最新发展。它还通过显示被阻止的项目来实时显示需要立即关注的项目。
项目组合仪表板
数据科学负责人可以在 e 项目组合仪表板、 开始他们的一天,该仪表板显示按可配置生命周期阶段细分的进行中项目的摘要,并提供所有项目的即时状态更新。
项目阶段配置
每个组织都有符合其业务需求的数据科学生命周期。在 Domino 3.5 中,我们允许数据科学领导者&经理定义他们自己的项目生命周期,并在他们的团队中实施。
数据科学家可以在项目生命周期中更新项目阶段,并通过电子邮件通知他们的合作者。
项目所有者和贡献者可以使用项目阶段菜单将项目标记为被阻止,并对阻止者进行描述。一旦解决,项目就可以解冻。另一方面,当数据科学家用项目结论的描述将项目标记为完成时,Domino 也会捕获这些元数据,用于项目跟踪和将来的引用。所有这些捕获的元数据对于组织学习、组织项目和帮助避免将来类似的问题都是有用的。
所有这些信息为 Domino 的新项目组合仪表板提供了动力。数据科学主管可以点击查看任何正在进行的项目的更多背景信息,并发现需要关注的受阻项目。
在下面的假设项目中,我们的首席数据科学家 Josh 发现其中一个受阻的项目是 Avinash 和 Niole 的客户流失项目。虽然他不记得这个项目的细节,但他可以看到它正处于研发阶段,几周后会有一个艰难的停顿。深入到项目中,他可以看到剩下的目标是获得 AUC 在 0.8 以上的分类模型。
Josh 可以转到活动订阅源,以获得有关阻止程序、原因的详细信息,并建议一系列行动。在这个例子中,他将要求客户流失团队尝试深度神经网络。他可以标记另一个团队的深度学习专家 Sushmitha,并请她指导这项工作。
管理项目、跟踪生产资产和监控组织健康状况需要新的工具。这些独特的功能是为数据科学领导者定制的。在 Domino,当您在团队中使用这些优势时,我们很高兴地看到这些优势正在向您走来。
所有这些只是 Domino 中的一些新特性,在 3.5 版本中,我们还对现有特性进行了一些其他增强。例如, 活动提要 得到了增强,可以显示正在评论的文件的预览。它还显示了项目阶段的更新,以及合作者是否提出了任何阻碍因素。用户还可以根据活动类型进行筛选。这与电子邮件通知相结合,将确保随时了解项目的情况。
数据集
Domino 3.5 为用户提供了直接从计算机上的数据创建大型数据集快照的选项。CLI 上的上传限制已增加到 50 GB 和最多 50,000 个文件。在相同的上传限制下,用户也可以直接通过浏览器上传文件。CLI 和浏览器上传提供了一种无缝方式,可将笔记本电脑上的数据迁移和贡献到一个位置,以进行数据科学工作。团队可以利用共享的、精选的数据,消除潜在的冗余数据争论工作,并确保完全可重复的实验。
许可证使用报告
为了补充面向数据科学领导者的控制中心的新功能,我们还推出了用户活动分析增强功能,以促进许可证报告和合规性。它提供了每个团队成员的 Domino 活动水*的详细视图,以便数据科学和 It 领导可以管理他们的 Domino 许可证分配,并对他们的成本有可见性和可预测性。Domino 管理员可以快速识别活动和非活动用户,并决定是否应该给他们分配一个许可证。在预算规划和合同续签期间跟踪用户活动和增长的能力,使得规划未来支出变得更加容易。
审判
除了为数据科学领导者带来激动人心的突破性新功能,我们还将 推出新的 试用环境 t o 让 Domino 更易于使用。对于那些想尝试一下并评估它是否对你的工作有用的人来说,它是完美的。这个最新版本中的新特性也将出现在我们的测试环境中! 这是访问 Domino 并开始体验秘方 公司 像 经销商轮胎 和red hat在他们的数据科学组织中发挥杠杆作用的一种快速简单的方法。
更详细的 Domino 3.5 发行说明可以在这里。Domino 3.5 目前已正式发布——请务必查看我们的3.5 发布网上研讨会 或 试用 Domino 至 查看最新的*台功能。
回答关于 Strata 自动气象站模型交付的问题
原文:https://www.dominodatalab.com/blog/answering-questions-model-delivery-aws-strata
这篇文章是达美乐在纽约 Strata 展台回答的常见问题的摘要。我们回答了关于访问 EC2 机器、管理环境和模型交付的问题。
参加像 Strata 这样的活动的最大好处之一是有机会与数据科学家和数据科学经理共度时光。我们直接了解了数据科学家在日常工作中面临的挑战,包括花费在 DevOp 式任务上的时间。我们听到许多数据科学经理谈论他们的计划获得更大的灵活性,以便数据科学家可以自由选择工具和进行实验。我们从数据科学家和数据科学经理那里了解到,有多少公司仍在寻找数据科学有效实现商业价值所需的流程和基础设施。我们还听说许多公司开始将云迁移视为其长期战略的重要组成部分。
这种类型的会议很棒,因为它们给了我们很多关于构建特性的想法。然而,在 Strata 召开的这些会议也很棒,因为它们验证了我们已经推出的产品。事实上,我们最*关于 AWS 上模型交付的声明仅仅强调了我们与亚马逊联合解决方案的一些优势。甚至我们认为更基本的功能,包括轻松访问 EC2 机器、环境管理和模型交付,也受到了 Domino 客户的欢迎。
轻松访问 EC2 机器
以可扩展计算为例。如今,从事数据科学工作的人很少能像 Domino 提供的那样获得计算能力。大多数数据科学家要么仍在他们的个人机器上工作,要么被困在他们无法控制的共享服务器上。尽管硬件层选择菜单很简单,但它仍然是演示中最受工作数据科学家欢迎的功能之一。
我们与 AWS 的合作意味着 Domino 客户可以快速、轻松地获得他们工作所需的计算能力。当然,我们还添加了支持数据科学团队的人员正在寻找的报告和 IT 管理功能。
环境管理和工作空间
与计算管理配合,Domino 的环境管理也解决了许多公司面临的问题。因为 Strata 在纽约,我们采访了各种金融服务公司的人。法规遵从性一直是一个重要的话题。我问来自几家银行的人,“你们的模型验证团队是如何重现模型建立时的环境的?”事实证明,没有人有好的答案。这是一个文档挑战,对数据科学家可以使用的工具有限制,或者可能只是增加了许多额外的工作。
多米诺解决了这个问题。我们在受监管行业的客户喜欢这样一个事实,即从最初的勘探到生产,环境与模型同行。看到这一点的人赞赏他们在工作方式上获得的灵活性,以及他们使用的任何环境都将得到保护并可供内部和外部审计人员使用的保证。
环境管理还有另外一个好处,那就是客户可以选择将哪些工具加载到环境中,并提供给他们的团队使用。很容易让每个人都能访问 Jupyter、RStudio 以及 SQL、Spark 等工具。Domino 客户也在他们的共享环境中加载专有软件,如 Matlab 和 SAS。结果是集中管理数据科学团队想要使用的所有工具。
Sneak Peek of Upcoming Workspace within a Single Page View
模型发布
因为我们刚刚宣布了新的模型交付功能,这一领域引起了很大的兴趣。我们经常听到从一个模型完成到投入生产之间的昂贵的延迟。成本不仅仅是 DevOps 的成本,也不是在生产中使用过时模型的成本。主要成本是模型迭代次数的减少。公司从部署的模型中学习的能力受到了损害,改进的速度也是如此。
有了 AWS 上的 Domino,就消除了 DevOps 开销。人们得到了高可用性的基础设施,以及一个可控制的过程来部署他们所需要的任何规模的模型,从小型原型到 web 规模的面向消费者的应用程序。当然,我们仍然有一个完整的模型发布管理过程,但是没有所有花费如此多的不必要的开销。
模型发布有几个方面是人们真正欣赏的。一个是在生产环境中轻松测试模型的能力。那些构建模型的人可以确认模型确实做了他们期望的事情。使用 Domino 意味着模型不需要在新环境中重新实现,并且消除了一轮又一轮的测试。
接下来,我们使分配资源以支持生产中的模型变得容易。决定应该投入多少计算能力来支持生产模型就像使用下拉菜单一样简单。
最后,我们让跟踪生产模型的一切变得容易:谁拥有它们、何时建造、何时投产、何时版本变更等等。Domino 的协作特性扩展到监控和管理模型,以便关键任务预测模型可以获得适当级别的支持。
当然,对于 AWS 上的 Domino 来说,还有更多让我们的用户感到兴奋的东西。我们已经写了我们支持的 128 个核心 X1 实例。(是的,您可以配置谁可以访问它们。)最*,我们讨论了G3 GPU的价值,以及速度优势是否值得付出。由于集中的知识和容易看到其他人正在做什么的能力,分布式团队变得更快和更有效。首席信息官和 IT 团队很乐意结束影子 IT ,同时仍然支持数据科学工作需求。
如果您未能加入我们的 Strata,并且您有兴趣了解更多有关我们的客户如何使用该*台并迁移到云的信息,请下载我们的“云中的数据科学”白皮书。
应用空间数据科学与 R
原文:https://www.dominodatalab.com/blog/applied-spatial-data-science-with-r
介绍
我最*开始写我的博士论文,这篇论文利用了大量不同的空间数据类型。在这个过程中,我发现有很多关于使用 R 进行空间数据分析的概念是我不知道的。本报告的目的是记录一些概念和我最喜欢的空间数据分析包。本报告组织如下:首先,我们需要问为什么 R 是空间分析的一个很好的选择工具;其次,我们将经历一个典型的数据分析生命周期,从获取空间数据到数据准备、探索、可视化和地质统计分析。
为什么使用 R 进行空间数据分析
你可能会问自己:既然有商业和开源的地理信息系统(GIS ),如 ESRI ArcMap 和 QGIS,为什么还要使用 R 进行空间分析呢?以下是我的一些理由:
- r 是免费和开源的
- 再现性:研究人员可以再现他们自己的分析或其他人的分析,并验证他们的发现
- 包:有大量的 R 包用于空间数据分析、统计建模、可视化、机器学习等等。
r 空间数据分析包
我最喜欢的一些空间数据分析包包括:
- sp :这个包提供了空间数据的类和方法;用于绘制地图、处理坐标等的实用函数。
- 这个包提供了导入和导出不同的栅格和矢量地理空间数据格式的方法;坐标参考系统;预测等。
- rgeos :提供处理拓扑操作的函数。
- ggplot2 :由 Hadely Wickham 开发的最受欢迎的数据可视化软件包
- ggmap :提供在静态地图上可视化空间数据的功能,这些地图来自 Google Maps、Open Street Maps、cloudmade 和 stamen。
- leaflet : leaflet for R 提供了控制和集成 Leaflet 的功能,Leaflet 是 R 内部的一个用于交互式地图的 JavaScript 库。
- 我的大部分空间数据都有日期时间度量。这个包提供了操作日期和时间的函数。
数据准备
数据
在本教程中,我们将使用从 2010 年 1 月至 2010 年 8 月期间收集的来自休斯顿警察局的犯罪数据。 ggmap 软件包的创建者【大卫·卡尔】好心地收集数据,对其进行处理,并通过他的软件包提供给用户。
所以让我们安装一些我最喜欢的包,我们将在本教程中使用。
## These are some of my favorite packages for spatial data analysis
suppressPackageStartupMessages(library(ggmap))
suppressPackageStartupMessages(library(sp))
suppressPackageStartupMessages(library(rgdal))
suppressPackageStartupMessages(library(rgeos))
suppressPackageStartupMessages(library(ggplot2))
suppressPackageStartupMessages(library(leaflet))
suppressPackageStartupMessages(library(dplyr))
suppressPackageStartupMessages(library(magrittr))
suppressPackageStartupMessages(library(readr))
suppressPackageStartupMessages(library(lubridate))
suppressPackageStartupMessages(library(RColorBrewer))
suppressPackageStartupMessages(library(classInt))
读取空间数据
犯罪数据是逗号分隔值(CSV)格式,并且很小,只有 13MB。
crime_df <- read_csv("data/crime.csv")
## We need to understand the structure of this dataset
str(crime_df)
## Classes 'tbl_df', 'tbl' and 'data.frame': 86314 obs. of 17 variables:
## $ time : POSIXct, format: "2010-01-01 06:00:00" "2010-01-01 06:00:00" ...
## $ date : chr "1/1/2010" "1/1/2010" "1/1/2010" "1/1/2010" ...
## $ hour : int 0 0 0 0 0 0 0 0 0 0 ...
## $ premise : chr "18A" "13R" "20R" "20R" ...
## $ offense : chr "murder" "robbery" "aggravated assault" "aggravated assault" ...
## $ beat : chr "15E30" "13D10" "16E20" "2A30" ...
## $ block : chr "9600-9699" "4700-4799" "5000-5099" "1000-1099" ...
## $ street : chr "marlive" "telephone" "wickview" "ashland" ...
## $ type : chr "ln" "rd" "ln" "st" ...
## $ suffix : chr "-" "-" "-" "-" ...
## $ number : int 1 1 1 1 1 1 1 1 1 1 ...
## $ month : chr "january" "january" "january" "january" ...
## $ day : chr "friday" "friday" "friday" "friday" ...
## $ location: chr "apartment parking lot" "road / street / sidewalk" "residence / house" "residence / house" ...
## $ address : chr "9650 marlive ln" "4750 telephone rd" "5050 wickview ln" "1050 ashland st" ...
## $ lon : num -95.4 -95.3 -95.5 -95.4 -95.4 ...
## $ lat : num 29.7 29.7 29.6 29.8 29.7 ...
快速浏览一下数据结构就会发现,这是一个包含 86,314 个观察值和 17 个变量的数据框架。
让我们快速查看一些数据记录和一些汇总统计数据,以熟悉我们的数据。这可以使用head()
和summary()
命令来完成。
head(crime_df, n = 5)
## Source: local data frame [5 x 17]
##
## time date hour premise offense beat
## (time) (chr) (int) (chr) (fctr) (chr)
## 1 2010-01-01 06:00:00 1/1/2010 0 18A murder 15E30
## 2 2010-01-01 06:00:00 1/1/2010 0 13R robbery 13D10
## 3 2010-01-01 06:00:00 1/1/2010 0 20R aggravated assault 16E20
## 4 2010-01-01 06:00:00 1/1/2010 0 20R aggravated assault 2A30
## 5 2010-01-01 06:00:00 1/1/2010 0 20A aggravated assault 14D20
## Variables not shown: block (chr), street (chr), type (chr), suffix (chr),
## number (int), month (fctr), day (fctr), location (chr), address (chr),
## lon (dbl), lat (dbl)
summary(crime_df)
## time date hour
## Min. :2010-01-01 06:00:00 Length:86314 Min. : 0.00
## 1st Qu.:2010-03-08 01:00:00 Class :character 1st Qu.: 8.00
## Median :2010-05-06 12:00:00 Mode :character Median :14.00
## Mean :2010-05-04 18:47:44 Mean :13.28
## 3rd Qu.:2010-07-02 20:00:00 3rd Qu.:19.00
## Max. :2010-09-01 04:00:00 Max. :23.00
##
## premise offense beat
## Length:86314 aggravated assault: 7177 Length:86314
## Class :character auto theft : 7946 Class :character
## Mode :character burglary :17802 Mode :character
## murder : 157
## rape : 378
## robbery : 6298
## theft :46556
## block street type
## Length:86314 Length:86314 Length:86314
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
##
##
##
##
## suffix number month day
## Length:86314 Min. :1.000 may :11920 friday :13414
## Class :character 1st Qu.:1.000 july :11290 monday :12535
## Mode :character Median :1.000 april :11068 saturday :12525
## Mean :1.012 june :11052 sunday :11019
## 3rd Qu.:1.000 august :10962 thursday :12342
## Max. :9.000 march :10922 tuesday :12503
## (Other):19100 wednesday:11976
## location address lon lat
## Length:86314 Length:86314 Min. :-99.51 Min. :27.51
## Class :character Class :character 1st Qu.:-95.51 1st Qu.:29.69
## Mode :character Mode :character Median :-95.41 Median :29.74
## Mean :-95.42 Mean :29.76
## 3rd Qu.:-95.34 3rd Qu.:29.81
## Max. :-91.95 Max. :37.34
## NA's :5 NA's :5
汇总统计数据显示,我们需要将变量“日期”、“冒犯”、“月”和“日”的格式改为日期和因子。我们还需要在“坐标”变量中去掉 NAs 的 5 个数据记录,因为这将影响我们的一些空间分析。
## Because the sp package is not able to find an inherited method
## for function ‘coordinates’ for signature ‘"tbl_df", let's convert our local dataframe.
## The variables "offense", "month", "day" should be factors
crime_df <- data.frame(crime_df) %>% filter(lon != "NA")
crime_df$offense <- as.factor(crime_df$offense)
crime_df$month <- as.factor(crime_df$month)
crime_df$day <- as.factor(crime_df$day)
crime_df$date <- as.Date(crime_df$date)
空间点数据框架
为了利用几个空间包中的类和方法,包括 sp 包,我们需要将“犯罪 _ df”本地数据帧转换成“空间点数据帧”。
## Convert to SpatialPointsDataFrame with longitude and latitude so as to use spatial packages
## The Coordinate Reference System is a Geographic CRS called WGS84
coords <- SpatialPoints(crime_df[, c("lon", "lat")])
crime_spatial_df <- SpatialPointsDataFrame(coords, crime_df)
proj4string(crime_spatial_df) <- CRS("+proj=longlat +ellps=WGS84")
请注意,我们使用了一些新的函数,即 SpatialPoints、SpatialPointsDataFrame、CRS 和 proj4string。这些来自用于空间分析的 sp 包。这个包的基础类是空间,从它生成其他子类,包括:
getClass("Spatial")
## Class "Spatial" [package "sp"]
##
## Slots:
##
## Name: bbox proj4string
## Class: matrix CRS
##
## Known Subclasses:
## Class "SpatialPoints", directly
## Class "SpatialMultiPoints", directly
## Class "SpatialGrid", directly
## Class "SpatialLines", directly
## Class "SpatialPolygons", directly
## Class "SpatialPointsDataFrame", by class "SpatialPoints", distance 2
## Class "SpatialPixels", by class "SpatialPoints", distance 2
## Class "SpatialMultiPointsDataFrame", by class "SpatialMultiPoints", distance 2
## Class "SpatialGridDataFrame", by class "SpatialGrid", distance 2
## Class "SpatialLinesDataFrame", by class "SpatialLines", distance 2
## Class "SpatialPixelsDataFrame", by class "SpatialPoints", distance 3
## Class "SpatialPolygonsDataFrame", by class "SpatialPolygons", distance 2
我们可以看到空间点和空间点数据帧是空间类的子类。这种类系统脱离了 R 的基础类系统,为处理空间数据类型提供了更丰富的表示。
现在让我们来看看这种新数据类型的结构。
str(crime_spatial_df)
## Formal class 'SpatialPointsDataFrame' [package "sp"] with 5 slots
## ..@ data :'data.frame': 86309 obs. of 17 variables:
## .. ..$ time : POSIXct[1:86309], format: "2010-01-01 06:00:00" ...
## .. ..$ date : chr [1:86309] "1/1/2010" "1/1/2010" "1/1/2010" "1/1/2010" ...
## .. ..$ hour : int [1:86309] 0 0 0 0 0 0 0 0 0 0 ...
## .. ..$ premise : chr [1:86309] "18A" "13R" "20R" "20R" ...
## .. ..$ offense : Factor w/ 7 levels "aggravated assault",..: 4 6 1 1 1 3 3 3 3 3 ...
## .. ..$ beat : chr [1:86309] "15E30" "13D10" "16E20" "2A30" ...
## .. ..$ block : chr [1:86309] "9600-9699" "4700-4799" "5000-5099" "1000-1099" ...
## .. ..$ street : chr [1:86309] "marlive" "telephone" "wickview" "ashland" ...
## .. ..$ type : chr [1:86309] "ln" "rd" "ln" "st" ...
## .. ..$ suffix : chr [1:86309] "-" "-" "-" "-" ...
## .. ..$ number : int [1:86309] 1 1 1 1 1 1 1 1 1 1 ...
## .. ..$ month : Factor w/ 8 levels "april","august",..: 4 4 4 4 4 4 4 4 4 4 ...
## .. ..$ day : Factor w/ 7 levels "friday","monday",..: 1 1 1 1 1 1 1 1 1 1 ...
## .. ..$ location: chr [1:86309] "apartment parking lot" "road / street / sidewalk" "residence / house" "residence / house" ...
## .. ..$ address : chr [1:86309] "9650 marlive ln" "4750 telephone rd" "5050 wickview ln" "1050 ashland st" ...
## .. ..$ lon : num [1:86309] -95.4 -95.3 -95.5 -95.4 -95.4 ...
## .. ..$ lat : num [1:86309] 29.7 29.7 29.6 29.8 29.7 ...
## ..@ coords.nrs : num(0)
## ..@ coords : num [1:86309, 1:2] -95.4 -95.3 -95.5 -95.4 -95.4 ...
## .. ..- attr(*, "dimnames")=List of 2
## .. .. ..$ : NULL
## .. .. ..$ : chr [1:2] "lon" "lat"
## ..@ bbox : num [1:2, 1:2] -99.5 27.5 -91.9 37.3
## .. ..- attr(*, "dimnames")=List of 2
## .. .. ..$ : chr [1:2] "lon" "lat"
## .. .. ..$ : chr [1:2] "min" "max"
## ..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slot
## .. .. ..@ projargs: chr "+proj=longlat +ellps=WGS84"
您可以看到该类是 SpatialPointsDataFrame ,有 5 个插槽/组件,包括:
- 数据:读入 R 的原点数据,
- coords.nrs :坐标的数据类型
- 坐标:这些是坐标
- bbox :这是坐标的边界框,并且
- proj4string :这是坐标参考系统。
我们使用函数CRS()
分配一个坐标参考系统,在本例中为 WGS84 。我们知道这是一个地理坐标参考系统(CRS)类型,因为坐标是经度和纬度格式。
或者,您可以使用如下的coordinates()
命令。
# Or using the "coordinates" method
crime_spatial_df1 <- crime_df
coordinates(crime_spatial_df1) <- c("lon", "lat")
proj4string(crime_spatial_df1) <- CRS("+proj=longlat +ellps=WGS84")
坐标参考系统
理解坐标参考系统(CRS)很重要。这些对于空间地理编码数据非常有帮助。有两种类型的 CRS,即:
- 地理坐标系统(经度、纬度),例如 WGS84
- 笛卡尔/投影/*面坐标系(x,y)
投影坐标参考系统由分为两大类的几个系统组成,即:
- 州*面图(NADS83):这主要在美国使用,例如内华达州*面图 NADS 83。
- 通用横轴墨卡托(UTM),例如内华达(UTM 11N 区)、南非(UTM 34S 和 35S 区)
如果您看到以下格式的坐标数据,那么它是在地理坐标系中。
- (-94.324, 42.234)
- (33.33 44.4),(33d19'47"N 44d23.9'E),(38SMB4488),(38n 444000 3688000)
基准:基准是定义局部坐标系的一组参数和地面控制点。示例:WGS84、NADS83
我们现在有了一个具有正确坐标系和时间数据的空间点数据框。我们应该保存一份副本作为 R 数据文件。
## So we can quickly read in our processed data without having to re-process it.
saveRDS(crime_spatial_df, "data/crime_spatial_df.rds")
或者,我们可以将处理后的数据保存为 ESRI shape file,以保持空间完整性,如果您需要将它用于其他 GIS 系统,也可以这样做。 rgdal 包提供了writeOGR()
命令,用于写出空间数据类型。
## Also create a shapefile of this data
writeOGR(crime_spatial_df, dsn = "data/shapefiles", layer = "crime-shapefile", driver = "ESRI Shapefile", overwrite_layer = TRUE)
ESRI 形状文件多边形
我们将使用的另一个数据集是休斯顿地区的行政人口普查区。这些数据可以从美国人口普查网站获得。
## Create a SpatialPolygonsDataFrame by reading in shapefile data
unzip("data/shapefiles/tl_2015_48_tract.zip", exdir = "data/shapefiles", overwrite = TRUE)
texas_shp <- readOGR(dsn = "data/shapefiles", layer = "tl_2015_48_tract")
## OGR data source with driver: ESRI Shapefile
## Source: "data/shapefiles", layer: "tl_2015_48_tract"
## with 5265 features
## It has 12 fields
class(texas_shp)
## [1] "SpatialPolygonsDataFrame"
## attr(,"package")
## [1] "sp"
或者,我们可以使用 maptools 包中的readShapeSpatial()
函数来读取 shapefile 数据。
texas_shp2 <- readShapeSpatial("data/shapefiles/tl_2015_48_tract.shp", proj4string = CRS("+proj=longlat +datum=WGS84"))
我们的 shapefile 属于类“空间多边形数据帧”。我们可以通过使用plot()
功能绘图来快速查看。
## Use plot method to plot it
plot(texas_shp)
数据探索
R 中的一些基础方法可以用来探索空间对象,如plot()
、summary()
、print()
等。例如,summary()
给出空间实体的数量、投影信息和边界框,print()
显示空间对象中的数据视图。
sp 包为操作空间对象提供了更丰富的方法。
用于探索任何空间对象的边界区域的方法是bbox()
方法。第一行报告东西方向,第二行报告南北方向。
bbox(crime_spatial_df)
## min max
## lon -99.50555 -91.94627
## lat 27.50711 37.33690
我们可以使用proj4string()
方法探索任何空间物体的投影系统。如果需要,这种方法也可用于为空间对象指定不同的坐标系。这可以通过以下方式完成:
proj4string(crime_spatial_df)
## [1] "+proj=longlat +ellps=WGS84"
我们可以通过使用“@”符号代替“$”符号来探索/提取空间点数据框中的各个槽。例如,让我们看看数据和坐标槽:
# Explore the SpatialPointsDataFrame
head(crime_spatial_df@data)
## time date hour premise offense beat
## 1 2010-01-01 06:00:00 1-01-20 0 18A murder 15E30
## 2 2010-01-01 06:00:00 1-01-20 0 13R robbery 13D10
## 3 2010-01-01 06:00:00 1-01-20 0 20R aggravated assault 16E20
## 4 2010-01-01 06:00:00 1-01-20 0 20R aggravated assault 2A30
## 5 2010-01-01 06:00:00 1-01-20 0 20A aggravated assault 14D20
## 6 2010-01-01 06:00:00 1-01-20 0 20R burglary 18F60
## block street type suffix number month day
## 1 9600-9699 marlive ln - 1 january friday
## 2 4700-4799 telephone rd - 1 january friday
## 3 5000-5099 wickview ln - 1 january friday
## 4 1000-1099 ashland st - 1 january friday
## 5 8300-8399 canyon - 1 january friday
## 6 9300-9399 rowan ln - 1 january friday
## location address lon lat
## 1 apartment parking lot 9650 marlive ln -95.43739 29.67790
## 2 road / street / sidewalk 4750 telephone rd -95.29888 29.69171
## 3 residence / house 5050 wickview ln -95.45586 29.59922
## 4 residence / house 1050 ashland st -95.40334 29.79024
## 5 apartment 8350 canyon -95.37791 29.67063
## 6 residence / house 9350 rowan ln -95.54830 29.70223
head(crime_spatial_df@coords, 4)
## lon lat
## [1,] -95.43739 29.67790
## [2,] -95.29888 29.69171
## [3,] -95.45586 29.59922
## [4,] -95.40334 29.79024
# Restrict the data to downtown only
downtown_crime <- subset(crime_df,
-95.39681 <= lon & lon <= -95.34188 &
29.73631 <= lat & lat <= 29.78400)
数据可视化
r 有几个用于可视化空间数据的包。我们将看看 R 中的传统绘图系统,它们带有一个 R 安装,通常称为“base-R”包。一个例子是在 sp 包中用于空间数据的plot()
函数。我们还将探索“外部”包,包括 ggplot2、ggmap 和传单。
使用传统绘图系统可视化数据
**sp*包提供了通过增量添加图层来绘制空间数据的功能。让我们从绘制德克萨斯州休斯顿的形状文件开始。
plot(texas_shp, col = "grey", axes = TRUE)
然后让我们将犯罪数据添加到地图上。使用参数add = TRUE
将另一层添加到绘图上。
plot(texas_shp, col = "grey", axes = TRUE)
plot(crime_spatial_df, pch = 21, bg = "red", cex = .5, add = TRUE)
然后添加标题和图例。
plot(texas_shp, col = "grey", axes = TRUE)
plot(crime_spatial_df, pch = 21, bg = "red", cex = .5, add = TRUE)
title("Locations of Offensive Crimes in Houston, Texas")
legend("topleft", title = "Legend", legend = "Crime Locations", pch = 21, pt.bg = "red", bty = "n")
虽然绘制空间数据的基本函数足以生成地图,但我们希望“外部”R 库能够提供更多功能并生成漂亮的地图,如 ggplot2、ggmap、fleed。
使用外部库可视化数据
ggplot2
ggplot2 适用于数据框,而不是空间*类的对象。所以我们必须使用 ggplot2 中的fortify()
函数来转换它们。
crime_df <- data.frame(crime_spatial_df)
texas_shp_df <- fortify(texas_shp)
## Regions defined for each Polygons
现在我们可以利用 ggplot2 的强大的绘图功能。
p <- ggplot() +
geom_polygon(data = texas_shp_df, aes(x=long, y=lat, group = group)) + coord_equal() +
geom_point(data = crime_df, aes(x = lon, y = lat, color = "red")) +
labs(title = "Locations of Offensive Crimes in Houston, Texas") +
xlab("Longitude") +
ylab("Latitude")
p
ggmap
为德克萨斯州的休斯顿市创建静态背景图层
## Use "get_map" command to download the images and format them for plotting
map_dat <- get_map(location = "houston", source = "osm", zoom = 14)
## Map from URL : http://maps.googleapis.com/maps/api/staticmap?center=houston&zoom=14&size=640x640&scale=2&maptype=terrain&sensor=false
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=houston&sensor=false
使用“ggmap”命令进行绘图
houstonMap <- ggmap(map_dat, extent = "device", legend = "topleft")
houstonMap
绘制形状文件
houstonMap2 <- houstonMap +
geom_polygon(aes(x = long, y = lat, group = group), data = texas_shp_df, colour = "black",
alpha = .4, size = .3)
houstonMap2
使用经度和纬度变量对市区犯罪数据进行地理编码
houstonMap3 <- houstonMap2 +
geom_point(aes(x = lon, y = lat), data = downtown_crime, alpha = 0.5, color="darkred", size = 3)
houstonMap3
## Warning: Removed 42 rows containing missing values (geom_point).
传单
R 的传单是一个软件包,它提供了开发优雅漂亮的传单地图的功能。传单是领先的交互式地图开源 JavaScript 库。
让我们首先创建一个休斯顿地区的地图,然后添加图层(功能)。这可以使用leaflet()
命令来完成。我们应该使用addTiles
命令添加的第一层是“瓷砖”。
m <- leaflet() %>% setView(lng = -95.3698028, lat = 29.7604267, zoom = 12) %>% addTiles()
m
然后将 shapefile 数据添加到地图上。使用addPolygon
命令,这被添加为另一个层,多边形。
m1 <- m %>% addPolygons(data = texas_shp, fillColor = "transparent", color = "black", weight = 1)
m1
最后将犯罪数据添加到地图上。使用addMarkers
命令将其添加为另一个层,点。
m2 <- m %>% addCircles(data = crime_spatial_df, weight = 1.5, color = "red")
m2
参考
如需进一步阅读,请参考以下参考资料。
- 应用 R 进行空间数据分析。罗杰·比万、爱德华·佩贝斯马和戈麦斯·卢比奥。用户!系列,斯普林格。第二版。2013 年,xviii+405 页,软皮封面。国际标准书号:978-1-4614-7617-7
- 利用遥感全球地图进行地理可视化
- 使用 lubridate 1.3.0 对 R 中的日期和时间做更多的事情
- R中空间数据可视化介绍。罗宾·洛夫莱斯(< R.Lovelace@leeds.ac.uk >),詹姆斯·切希尔,雷切尔·奥德罗伊德等人诉 1.3,2015 年 9 月
- R 传单
- ggplot2 文档
- 用 Dplyr 操作数据
Atlassian 如何利用数据科学改善协作
原文:https://www.dominodatalab.com/blog/atlassian-uses-data-science-improve-collaboration
Atlassian 的数据科学家 Christy Bergman 深入探讨了他们如何利用数据科学来改善用户参与和协作。这个演讲是在数据科学弹出式活动中录制的。
Domino 5.0:加速模型漂移的根本原因分析
原文:https://www.dominodatalab.com/blog/automated-model-insights
在 Domino 5.0 中引入自动化模型质量洞察
模型经常被部署到处理大量数据的应用程序中。它们通常包含数百或数千个具有高度基数的特性。当这种复杂程度的模型没有按预期执行时,很难诊断根本原因。Domino 通过帮助数据科学家找到影响模型质量的输入数据组来解决这个问题。这使得数据科学家能够快速重新训练模型以考虑这些群组,从而提高模型的整体性能。
群组分析报告
Domino 自动生成一个报告,根据模型质量突出表现最差的群组(或部分)。对于每个群组,报告详细描述了该群组中形成影响模型准确性的热点的特征。通过将对比分数分配给群组中的每个特征,用户可以辨别模型质量与该群组之外的其余数据相比的差异。这有助于用户对群组和群组内的特征进行优先排序,以进一步调查并采取补救措施。
群组分析统计和定制
除了报告之外,Domino 还会自动建立一个项目,其中包括:
- 用于执行群组分析的 Python 代码
- 群组分析结果以 JSON 文件的形式呈现,这些文件代表了跨群组的汇总统计数据以及带有对比分数的每个群组的表现细节
数据科学家可以轻松定制群组分析代码以生成定制报告,或者使用这些报告的输出对模型进行深入的定制分析,然后进入补救步骤。
Domino 是 企业 MLOps *台,它无缝集成了代码驱动的模型开发、部署和监控,以支持快速迭代和最佳模型性能,因此公司可以确保从其数据科学模型中实现最大价值。
它是如何工作的
注册数据以支持模型质量分析
登记预测
为了生成模型质量分析,Domino 首先需要您注册预测数据和基本事实数据。对于在 Domino 5.0 中构建并自动监控的模型,Domino 会自动为您注册预测数据。对于所有其他型号,请遵循此处 提供的 说明。
用群组分析记录真实情况
接下来,注册基础事实并触发模型质量分析。按照 这里 提供的步骤,用 Domino 注册地面真实数据,并触发群组分析。
访问群组分析报告
一旦地面真实数据集被成功摄取,群组分析报告将被创建。您可以在模型的概览页面中跟踪数据接收和群组分析生成的进度。
一旦基础数据和群组分析完成,您可以在模型的“模型质量”页面中访问报告。
点击“查看报告”链接,您可以看到包含详细群组分析的 PDF。
在此报告中,您可以深入到摘要页面中确定的每个群组,以了解影响模型性能的主要特征。
自定义报告和分析
除了易于访问和下载的报告之外,Domino 还允许您访问用于执行分析的代码以及 JSON 文件形式的群组统计数据。您可以复制代码和附带的统计数据,以创建自定义报告或作为模型修复工作的一部分。
结论
这些新功能通过提供可操作的见解,继续让经验丰富的数据科学家轻松构建高质量的模型。在自动化模型质量分析的帮助下,数据科学家可以了解数据中的数据段以及这些数据段中的特征,以便在继续优化模型时进行进一步调查。有了这些关键信息,他们可以选择用更新的数据集重新训练他们的模型,或者调整模型本身。
Domino 5.0:利用自动扩展的分布式计算更快地开发更好的模型
原文:https://www.dominodatalab.com/blog/autoscaling-compute-clusters
在 Domino 5.0 中引入按需自动伸缩集群
由 Domino 的现场工程师 Alireza Mounesisohi 和 Domino 的解决方案架构师 Lakshmi Narayanan 于 2022 年 2 月 9 日在 的产品更新上发表
分布式计算集群为数据科学家提供了巨大的处理能力,通过更快地测试更多想法来解决复杂问题。然而,利用这种能力具有挑战性,因为:
- 数据科学家不得不等待集群变得可用,即使它通常在项目中处于闲置状态。
- 为分布式计算框架调配计算资源和管理包既复杂又耗时,并且需要丰富的开发运维技能。
Domino 5.0 通过分布式计算自动伸缩帮助组织克服这些障碍。对于 Domino 5.0:
- 计算集群,包括最流行的分布式计算集群类型 Spark、Ray 和 Dask,可根据工作负载动态扩展和收缩,通过确保计算资源可用于任何需要它们的项目来提高数据科学家的工作效率。
- 消除根据预期峰值负载提交资源的需求,从而节约成本。
它是如何工作的
计算节点的自动扩展
Domino 中最常见的自动伸缩用例之一是当用户有不同的机器学习工作负载并需要不同的计算资源时。借助 Kubernetes,用户可以拥有不同的节点池,每个节点池包含不同类型的实例。Domino 利用 Kubernetes 的功能来自动缩放计算节点,因此它们只在使用时才是活动的。
对于向外扩展,Domino 以给定的频率不断地寻找不可用的资源。如果没有可用的资源,Domino 会增加节点数量来满足资源请求。
举例来说,在下面的图 1 中,在 Domino 中创建的非 GPU 工作区将在“默认”节点池上运行。请注意,此处列出的实例属于“m5.2xlarge”类型,节点池仅为“default”和“platform”。
图 1:使用中节点的 Domino 仪表盘
对于“dominodatalab . com/Node-Pool”Kubernetes 节点标签 具有相同值的节点形成节点池。节点池字段中具有匹配值的执行将在这些节点上运行。Domino 依赖与 Kubernetes 集群相关的底层节点池中的节点标签来扩展计算节点。此外,硬件层控制 Domino 执行将在其上运行的底层机器类型。
现在,想象开始一个新的 GPU 工作空间(图 2)。Domino 将在底层节点池标记为“default-gpu”的节点上运行工作区。
图 2:使用 GPU 硬件层 创建新的工作空间
创建此工作空间将触发 GPU 计算节点从 0 -> 1 向上扩展。(图 3)
图 3:集群自动缩放器将触发 GPU 节点从 0->1向上扩展
一旦集群自动扩展了新节点并将其连接到 Kubernetes 集群(图 4 ), workspace pod 就会被调度到新节点
图 4:Domino的基础设施部分下面列出的新节点
集群自动缩放器跟踪节点上的资源请求。如果一个节点在 10 分钟(可配置)内未被利用,它将被终止。
如果满足以下所有条件,则节点被视为不需要:
- 在此节点上运行的所有 pod 的 CPU 和内存请求的总和小于节点可分配容量的 50%(注意:此阈值是可配置的)
- 在该节点上运行的所有窗格都可以移动到另一个节点
- 没有注释设置为禁用缩小( 参考 )
因此,Domino 在任何给定时间都可以有效地*衡资源数量和需求。
跨分布式计算框架自动扩展
除了使用集群自动缩放器自动缩放计算节点之外,Domino 5.0 还具有自动缩放 Spark、Ray 和 Dask 按需集群的能力。这将使数据科学家能够从小型集群开始,并根据工作需求的波动按需扩展。
Domino 利用了 Kubernetes 提供的水* pod 自动伸缩功能,并支持针对射线 和 Dask 集群的分布式集群自动伸缩。当所有工作线程的*均 CPU/内存利用率超过 80 %(或管理员设置的目标时),将触发一个扩展操作,直到达到为集群配置的最大工作线程数。当*均利用率低于目标时,就会触发缩减。
用户只需点击几下鼠标,就可以设置具有自动扩展分布式计算的集群。如图 5 所示,Domino 将启动一个包含三个 Dask workers 的集群,如果*均 CPU/内存利用率超过配置值,那么 worker 的数量将增加到最多五个 worker。
图 5:在 Domino 中启用分布式集群的自动伸缩
Domino 将继续添加工作进程,直到达到最大工作进程限制。图 6 显示了一个示例,其中一个集群从一个工作线程开始,随着资源利用率阈值的超出,扩展到五个工作线程。
图 6:在 Spark 集群 上放大资源的例子
结论
访问可扩展的计算基础架构对于数据科学家做他们最擅长的事情至关重要。Domino 通过满足底层计算需求,使用 Kubernetes 来扩展分布式计算集群,从而增强了数据科学家的能力。此外,管理基础架构的 IT 团队可以高枕无忧,因为他们知道 Kubernetes Cluster Autoscaler 只会在必要时加速节点,从而避免组织在未充分利用的资源上浪费资金。
提高 模型速度 的一个关键组成部分是精简集群的利用率。Domino 根据工作负载自动扩展计算集群,以简化配置、优化利用率和管理计算成本,从而最大化团队的生产力和计算投资的回报。
Domino 是 企业 MLOps *台,它无缝集成了代码驱动的模型开发、部署和监控,以支持快速迭代和最佳模型性能,因此公司可以确保从其数据科学模型中实现最大价值。
关于作者
| | Alireza Mounesisohi 是 Domino 客户成功团队的现场工程师。他拥有加州大学戴维斯分校的机械和航空航天工程博士学位,在数据科学和机器学习方面有着广泛的背景。 |
| | Lakshmi Narayanan 是 Domino 客户成功团队的解决方案架构师。他主要服务于 Domino 客户,为新的和现有的 Domino 安装/升级提供架构指导和最佳实践建议。工作之余,他喜欢户外活动,比如徒步旅行,并且痴迷于国际足联。 |
避免数据科学炒作泡沫
原文:https://www.dominodatalab.com/blog/avoiding-data-science-hype-bubble
在这篇文章中,Domino 数据实验室的首席数据科学家 Josh Poduska 提倡在数据科学行业中使用通用的术语分类法。建议的定义使数据科学专业人员能够消除宣传,提高数据科学创新的速度。
介绍
围绕人工智能、数据科学、机器学习和深度学习的噪音正在达到白热化。随着这种噪音的增长,我们的行业在人们说“人工智能”、“机器学习”或“数据科学”时的含义上出现了分歧。可以说,我们的行业缺乏一个共同的分类法。如果有一个分类法,那么我们作为数据科学专业人员,没有很好地坚持它。这有后果。两个后果包括制造炒作泡沫,导致不切实际的期望和越来越缺乏沟通能力,特别是与非数据科学同事的沟通。在这篇文章中,我将涵盖简明的定义,然后讨论我们如何定义像“人工智能”这样的术语对我们的行业来说是多么重要。
简明定义
- 数据科学:使用代码和数据建立模型的学科,这些模型被投入生产以生成预测和解释。
- 机器学习:以模型的形式自动捕捉复杂数据模式的一类算法或技术。
- 深度学习:一类机器学习算法,使用超过一个隐含层的神经网络。
- 人工智能:一类在自主程度和范围上与人类不相上下的系统。
大肆宣传
我们的条款很有明星效应。它们激励人们去梦想和想象一个更美好的世界,这导致了它们的过度使用。更多关于我们行业的传言会提升所有船只,对吗?当然,我们都希望潮水会继续上涨。但是,我们应该努力实现可持续的增长,避免炒作泡沫,如果泡沫破裂,将会造成广泛的幻灭。
我最*参加了 Domino's rev conference ,这是一个面向数据科学领导者和从业者的峰会。我听到许多领导者寻求建议,如何帮助高管、中层管理人员,甚至是新的数据科学家对数据科学项目有适当的期望,同时又不牺牲对数据科学的热情。不切实际的期望会降低项目的热情,从而减缓项目的进展。它们也使得在项目成功度量和 ROI 目标上达成一致变得更加困难。
当提到任何做出任何预测的解决方案时,频繁地过度使用“AI”是这种炒作的主要原因。由于频繁的过度使用,人们本能地将数据科学项目与*乎完美的类似人类的自主解决方案联系在一起。或者,至少,人们认为数据科学可以轻松解决他们特定的预测需求,而不考虑他们的组织数据是否支持这样的模型。
沟通
术语的不正确使用也会搞乱对话。在数据科学项目的早期规划阶段,当跨职能团队聚集在一起阐明目标并设计最终解决方案时,这种情况尤其具有破坏性。我认识一位数据科学经理,在他批准任何新的数据科学项目之前,他要求他的数据科学家团队与业务领导一起被锁在一个房间里一个小时。好吧,门不是真的锁上了,但它是关着的,他确实要求他们讨论这个项目整整一个小时。他们已经看到了项目返工的减少,因为他们已经关注了与业务利益相关者的早期调整。解释数据科学概念的挑战已经够难了。当我们不能定义自己的术语时,我们只会让事情变得更难。
我从事数据科学已经很长时间了。我和来自世界各地的数百名分析领导者和从业者一起工作过。自从人工智能和深度学习出现以来,我越来越多地不得不暂停对话并提问,以发现人们使用某些术语时的真实意思。例如,你如何解释这些基于我的对话的陈述?
- “我们的目标是在 5 年内让我们的解决方案由人工智能驱动。”
- “在投资深度学习之前,我们需要在机器学习方面做得更好。”
- “我们使用人工智能来预测欺诈,因此我们的客户可以放心消费。”
- “我们的研究发现,投资人工智能的组织实现了 10%的收入增长。”
很困惑,对吧?
一个人必须问一系列的问题才能理解到底发生了什么。
我听到的最常见的术语-混淆是当有人谈论人工智能解决方案或做人工智能时,他们实际上应该谈论建立深度学习或机器学习模型。似乎太多时候术语的互换是故意的,说话者希望通过说“AI”来获得炒作。让我们深入每一个定义,看看我们是否能在分类法上达成一致。
数据科学
首先,我将数据科学视为一门科学学科,就像任何其他科学学科一样。以生物学为例。生物学包含一系列的想法、理论、方法和工具。实验是常见的。生物研究团体正在不断地增加这个学科的知识基础。数据科学也不例外。从业者做数据科学。研究人员用新的理论、概念和工具推进该领域。
数据科学的实践包括将代码(通常是一些统计编程语言)与数据结合起来构建模型。这包括数据获取、清理和准备的重要和主导的初始步骤。数据科学模型通常会做出预测(例如,预测贷款风险、预测疾病诊断、预测如何回复聊天、预测图像中的对象)。数据科学模型也可以为我们解释或描述世界(例如,哪些因素的组合对疾病诊断最有影响,哪些客户彼此最相似以及如何相似)。最后,将这些模型投入生产,在应用于新数据时进行预测和解释。数据科学是一门使用代码和数据构建模型的学科,这些模型被投入生产以生成预测和解释。
很难给数据科学下定义,同时将它与统计分析区分开来。我是通过数学和统计方面的教育培训以及作为统计学家的职业经历进入数据科学行业的。像你们中的许多人一样,在数据科学成为一个东西之前,我也在做它。
统计分析基于样本、受控实验、概率和分布。它通常回答关于事件可能性或陈述有效性的问题。它使用不同的算法,如 t 检验、卡方、方差分析、DOE、响应面设计等。这些算法有时也会建立模型。例如,响应面设计是基于观察到的解释因子以及它们如何与响应因子相关来估计物理系统的多项式模型的技术。
我定义中的一个关键点是,将数据科学模型应用于新的数据,以做出未来的预测和描述,或者说“投入生产”。虽然响应面模型确实可以用于新数据来预测响应,但它通常是一种假设性的预测,即如果输入发生变化会发生什么。然后,工程师改变输入,观察物理系统在新状态下产生的反应。响应面模型未投入生产。它不会随着时间的推移,成批或按流地获取成千上万的新输入设置,也不会预测响应。
我的数据科学定义绝不是简单的,但我相信将预测性和描述性模型投入生产开始抓住数据科学的本质。
机器学习
机器学习这个术语可以追溯到 20 世纪 50 年代。如今,它被数据科学家视为数据科学中使用的一套技术。它是用于构建上述模型的一个工具集或一类技术。机器学习使计算机能够自己生成(或学习)模型,而不是人类明确表达模型的逻辑。这是通过处理一组初始数据,发现数据中复杂的隐藏模式,并在模型中捕获这些模式,以便以后可以将它们应用于新数据,从而进行预测或解释。这个自动发现模式的过程背后的魔力在于算法。算法是机器学习的主力。常见的机器学习算法包括各种神经网络方法、聚类技术、梯度推进机器、随机森林等等。如果说数据科学是像生物学一样的学科,那么机器学习就像显微镜或基因工程。它是实践该学科的一类工具和技术。
深度学习
深度学习是这些术语中最容易定义的。深度学习是一类机器学习算法,使用具有多个隐藏层的神经网络。神经网络本身可以追溯到 20 世纪 50 年代。深度学习算法最*在 20 世纪 80 年代开始变得非常受欢迎,在 20 世纪 90 年代和 21 世纪初有一段时期,随后在我们的十年中复兴,因为深度网络构建方式的相对较小的调整被证明具有惊人的效果。深度学习可以应用于各种用例,包括图像识别、聊天助手和推荐系统。例如,Google Speech、Google Photos 和 Google Search 就是一些使用深度学习构建的原始解决方案。
人工智能
AI 已经存在很久了。远在最*的炒作风暴之前,人们就已经用流行语来形容它了。作为数据科学家,我们如何定义它?我们应该何时以及如何使用它?AI 对我们来说是什么?老实说,我不确定是否有人真的知道。这可能是我们的“皇帝没穿衣服”时刻。我们有不确定性和由此产生的炒作,这种炒作来自对新事物和未知事物的承诺。一家著名数据科学公司的首席执行官最*在 Domino 与我们的团队交谈时提到了“AI”。他立刻控制住自己,说道:“我知道那并不意味着什么。我不得不开始使用它,因为每个人都在谈论它。我反抗了很久,但最终还是屈服了。”
也就是说,我将尝试一下: 人工智能是人们希望创建的一类系统,它们具有定义性的特征,即它们将在自主程度和操作范围上与人类相当。
延伸一下我们的类比,如果数据科学像生物学,机器学习像基因工程,那么 AI 就像抗病。它是最终的结果,是我们努力通过应用机器学习(通常是深度学习)和其他技术来创建的一套解决方案或系统。
这是底线。我认为,我们需要区分人工智能解决方案、类人工智能解决方案和真正的人工智能解决方案中的技术。这包括人工智能构建模块,具有人工智能品质的解决方案,以及接*人类自主性和范围的解决方案。这是三件不同的事情。人们经常把这三个单词都叫做“AI”。
举个例子,
- 深度学习不是 AI。这是一种可以作为人工智能解决方案一部分的技术。
- 大部分数据科学项目都不是 AI 解决方案。客户流失模型不是人工智能解决方案,无论它是否使用了深度学习或逻辑回归。
- 自动驾驶汽车是一种人工智能解决方案。这是一个以接*人类能力的复杂性和自主性运作的解决方案。
还记得上面那些神秘的陈述吗?在每一个案例中,我都会问一些问题来弄清楚到底发生了什么。这是我的发现。
- 一名高管表示:“我们的目标是在 5 年内让我们的解决方案由人工智能驱动。”这位高管的意思是:“我们希望在 5 年内有几个机器学习模型投入生产。”
- 一位经理说:“在投资深度学习之前,我们需要在机器学习方面做得更好。”经理的意思是:“在我们准备好尝试深度学习方法之前,我们需要对我们的分析师进行基本数据科学原则的培训。”
- 一名营销人员表示:“我们使用人工智能来预测欺诈,以便我们的客户可以放心消费。”营销人员的意思是:“我们的欺诈评分是基于多年来一直运行良好的逻辑回归模型。
- 一位行业分析师表示:“我们的研究发现,投资人工智能的组织实现了 10%的收入增长。”这位行业分析师的意思是:“在生产中拥有任何一种预测模型的组织都可以实现 10%的收入增长。”
该问
不管你是否 100%同意我的定义,我想我们都同意,今天我们的行业有太多的炒作,尤其是围绕人工智能。我们每个人都看到了这种炒作如何限制了真正的进步。我认为很多炒作都是由于误用了数据科学的术语。我的要求是,作为数据科学专业人员,我们应该更加努力地意识到我们如何使用这些关键术语,并且礼貌地帮助与我们一起工作的其他人学会正确使用这些术语。我相信,我们越快迭代到一个商定的分类并坚持遵守它,我们就能越快停止炒作,并在构建今天和明天的解决方案时提高我们的创新速度。
AWS 和 Domino 数据实验室:利用 Kubernetes 的 AWS 中的容器化数据科学
在这个“这是我的架构”视频中,Domino 数据实验室的副首席技术官 Ozzy Johnson 展示了 Domino 如何为任何规模和法规需求的客户提供容器化的数据科学解决方案。您将看到 Domino 如何通过 Terraform 和 Jinja 利用基础设施作为代码来构建一个数据科学环境,该环境通过 Docker 和 Kubernetes 的容器化在高度定制的环境中工作。Ozzy 还将介绍 Domino Data Lab 如何在 AWS 和内部环境中工作,同时利用 S3、EC2 和 ELB 等 AWS 服务的优势,获得高可用性和安全性的优势,并缩短 AWS 中的开发时间。
https://www.youtube.com/embed/QLgvQ8Y8Sx0
在混合/云计算的未来,*衡医疗保健人工智能创新与治理
原文:https://www.dominodatalab.com/blog/balancing-healthcare-ai-innovation-with-governance
合作伙伴营销主管大卫·舒尔曼和全球健康和生命科学主管卡洛琳·法尔斯
从早期疾病检测到智能临床试验设计,再到个性化医疗,人工智能/人工智能在医疗保健和生命科学领域的前景非常广阔,“超过 57%的医疗保健和生命科学组织将人工智能/人工智能评为重要或非常重要,”根据 Ventana Research 在其最*的白皮书 中对首席数据和分析高管的顶级人工智能考虑。
- 让桑加速了深度学习模型 的训练,在某些情况下速度快了 10 倍,通过全切片图像分析更快更准确地诊断和表征癌细胞。
- 礼来公司将电子病历、 保险赔付、真实世界证据(RWE)和其他来源的多模态数据相结合,将人群水*的模式转化为下一个最佳的患者治疗措施(注:36:56 转化为面板记录)。
- Evidation 使用来自应用程序和可穿戴技术(如智能手机、活动追踪器和智能手表)的患者生成的健康数据(PGHD)持续测量个人健康 。
- NVIDIA 的医疗人工智能全球负责人 Mona Flores 描述了使用带有隐私保护数据的联合学习来识别疾病并预测需要哪些治疗。
但是机器学习模型需要数据,而*衡数据科学家进行实验和创新所需的开放性和灵活性与治理和数据隐私法规,是管理全球医疗保健和生命科学企业软件和基础设施的数据和分析高管面临的一项重大挑战。
管理分布式多模式数据的激增
医疗保健和生命科学组织处理大量不同的数据,包括电子病历、账单、患者就诊报告、保险索赔、放射图像、PGHD 等等。根据 Ventana Research 的数据,这些数据通常分布在云区域、提供商和内部数据源之间——32%的组织报告使用 20 个以上的数据源,而 58%的组织自我报告使用“大数据”, Pb 大小的数据库变得越来越常见。例如,让桑的组织病理学图像的大小可能在 2gb 到 5gb 之间,而更大的临床试验可能超过 10 万张图像。
虽然托管云数据库前景光明,但入口和出口成本会极大地阻碍数据科学的发展。Ventana Research 指出,提取和分析 1pb 的数据可能需要高达 50,000 美元。数据重力性能考虑因素(即,通过协同定位数据和计算来减少模型延迟)以及数据驻留/主权法规进一步使数据收集和处理复杂化,通常会将数据集锁定在单个地理位置。这与 HIPAA 和 GDPR 等法规相结合,凸显了混合云和多云配置对于确保适当的数据管理和地理围栏的重要性。Ventana 研究强调指出:
“到 2026 年,几乎所有的跨国组织都将投资本地数据处理基础设施和服务,以减轻与数据传输相关的风险。”
使用混合/多云多点操作管理 AI/ML
虽然数据是分布式的,但数据科学是一项团队运动,需要快速的实验、轻松的数据访问和轻松的可复制性来实现真正的创新。AI/ML/Analytics“卓越中心”(COE)战略正变得越来越普遍,通过协作来混合知识,同时提供基础设施和治理。Ventana Research 指出,80%的组织认识到了治理 AI/ML 的重要性。 约翰逊&约翰逊 有一个内部数据科学委员会,帮助“将公司的数据科学社区整合到业务工作流中,从而更快地应用机器学习模型、反馈和影响。”此外,这些 Coe 通过确保数据科学家能够访问所需的数据、工具和基础架构来促进创新,以便他们能够专注于构建突破性的模型,而不是开发运维。
许多医疗保健和生命科学机器学习用例,如计算机视觉(如让桑的深度学习用例),需要专门构建的人工智能基础设施,包括英伟达等公司的 GPU。考虑到数据传输成本、安全性、法规和性能,与跨云或地理位置传输或复制数据集相比,对数据进行计算/处理通常更有意义。
理论上,云基础设施上的 GPU 解决了这个问题——直到考虑到成本和性能。 Protocol 最*报道了 公司将 ML 数据和模型转移回内部、本地设置的趋势,“花更少的钱,获得更好的性能”数据科学工作负载本质上是可变的,训练模型所需的大规模爆发可能难以预测。将其中一些工作负载转移回内部基础架构可以显著降低成本,同时提高性能。
对于 ML CoEs 而言,在混合/多云和本地环境中,从单一控制台管理 AI/ML 变得更具挑战性,尤其是在分布式数据以及全球公司中存在的本地和云基础架构的混合环境中。从数据管理到分析再到数据科学,数据和分析高管在庞大的数据和分析技术体系中难以做出决策。
医疗保健和生命科学组织的数据科学*台考虑事项
随着我们最*的 Nexus 混合云数据科学*台 的发布,Domino 数据实验室处于人工智能工作负载的混合/多云支持的前沿。真正的混合数据科学*台使数据科学家能够在公司运营的每个环境中以安全、受监管的方式访问数据、计算资源和代码。我们与 NVIDIA 的深度 合作以及对 更广泛的数据和分析生态系统 的支持,为数据和分析高管提供了培养 AI/ML 创新的信心,同时提供了企业范围治理所需的灵活性。
Ventana Research 强调了开放和灵活的数据科学*台的重要性,“面对不断发展的混合战略、不断变化的数据科学创新,让您的数据科学实践经得起未来考验,并从专门构建的人工智能基础设施或云中实现价值最大化。”要了解更多信息,请查看他们的白皮书。
成为一家全栈数据科学公司
原文:https://www.dominodatalab.com/blog/become-full-stack-data-science-company
在这篇文章中,Hoda 提供了对数据科学能力不断增长的公司如何构建其组织结构的见解,以确保数据科学为他们提供竞争优势。【T2
成为一家全栈数据科学公司
“深度学习做 X”是新的投资者推介趋势。
大数据的兴起和机器学习技术的进步正在推动下一代科技公司的发展。数据科学和算法使最成功的公司能够建立保持竞争优势所需的护城河。成功的科技公司还会调整他们的组织结构,授权给那些为公司带来最独特和差异化价值的人。如果数据科学是贵公司竞争战略中如此重要的一部分,那么您应该花时间考虑:如何构建您的数据科学能力,如何定义您的数据科学家的角色,以及如何在贵公司的所有级别支持数据科学。
软件工程的兴起
在过去的十年里,我们看到了科技公司的爆炸式增长和软件工程师队伍的崛起。很多公司,尤其是年轻的公司,大部分创始人或者整个产品和工程组织都是工程师。以前,标准包括雇佣几乎没有或完全没有领域专业知识的传统 MBA 作为高技术团队的经理。现在,工程师被鼓励和授权进行横向转换,并担任管理职务。在一家成长中的科技公司,仅仅引入一名专注于业务的专业 CEO 不再是一件事。首席执行官要么有技术背景,要么精明的商业导向的首席执行官在 C-Level 迅速带来领域和技术专长,以支持公司战略。科技公司寻找、信任并追随那些致力于理解公司业务的领导者。
数据科学的兴起
我们现在在数据科学领域看到了类似的趋势。
在初期,数据科学被视为工程的小弟弟:作为工程组织的一个子单元。由于数据科学和工程共享技术基础,这是一个合理的起点。
然而它们并不相同。
虽然数据科学家和工程师都编写软件来完成工作,但他们解决问题的方法、评估他们成功的方式以及他们做好自己角色的需求是不同的。随着数据科学的地位越来越高,公司开始围绕它建立业务,是时候重新思考数据科学在组织结构中的位置了。我认为数据科学应该得到适当的关注和自主权。它不应该放在工程或产品组织的保护伞下。相反,它应该在公司的每个层次都有代表:从最高的 C-Level 到基本的个人贡献者层次。
Stitch Fix 是一家全栈数据科学公司
Stitch Fix 是一家提供个人造型服务的在线零售商。我们使用算法和人类专家判断的组合来设计我们客户的风格。我们相对于传统零售商的竞争优势很大程度上可以归因于我们对在业务的各个层面使用数据科学的强烈关注。我们使用算法让我们的造型师能够更好地为我们的客户服务;确定在我们的仓库中挑选物品的最佳路线;甚至向我们的销售团队建议我们自己的服装设计。
为了实现我们的数据科学组织的全部潜力,我们承诺在组织的每个级别都有数据科学代表。Stitch Fix 不仅拥有硅谷最大的数据科学团队之一,还拥有相对于其规模而言最大的数据科学团队之一:每 7 名总部员工中就有 1 名是数据科学家。我们还有一位首席算法官 (CAO),他在管理层代表数据科学组织。
为什么 C-Level 的数据科学如此重要
当数据科学成为贵公司的竞争优势时,让一名首席运营官在管理层代表数据科学比由一名工程主管(如首席技术官)代表更有效。与首席技术官等优先考虑数据科学之外的其他领域的人相比,首席技术官对数据科学(从战略到执行)的理解更加深入细致。例如,工程专门研究最终用户交互、事务处理等。虽然重要,但数据科学家并不特别擅长这些能力。因此,将数据科学和工程分离开来可以让每个团队专注于他们擅长的领域。
我们的首席运营官帮助数据科学组织管理期望,并适当地确定数据科学需求层次的优先级。这些需求包括数据收集、ETL、管道,以及理解在我们进入性感的深度学习或机器学习算法之前很久就需要基础设施。拥有 C-Level 的支持有助于我们奠定适当的基础,并使数据科学组织能够像其他业务部门一样无缝扩展。它还有助于管理跨职能利益相关方的期望,并消除管理开销,以便我们的个人贡献者可以专注于成为全栈数据科学家。
全栈数据科学家的职责
在 Stitch Fix,我们不遵守数据科学家在角落里的模式,在这种模式下,数据科学家与公司的其他人隔离开来。我们不会让我们的数据科学家为组织的其他部分运行 SQL 查询而负担过重。我们没有只专注于开发数学模型的数据科学家,这些模型最终会传递给工程人员投入生产。在我们的数据科学组织中,甚至没有一个项目经理。相反,我们相信“全栈”数据科学家。
我们的全栈数据科学家什么都做:工程、机器学习和项目管理。我们将所有这些领域组合成一个角色,因为在迭代过程中有太多的价值。对于非完整堆栈数据科学家,工作流程大致如下:
- 数据科学家建立数学模型
- 然后将模型交给工程部门进行生产
- 然后,每次需要更新模型系数或添加新功能时,数据科学家都必须等待工程师(属于具有不同优先级的组织的一部分)来实施更改。
这种较慢的迭代过程可能会挫伤数据科学家的积极性,因为他或她关心的事情对不同组织的人来说并不重要(对工程师来说也是如此)。全栈模型支持更快的迭代过程,并使我们的数据科学家能够成为特定功能的领域专家,以及其他业务部门同行的宝贵合作伙伴。
将数据科学作为公司文化在各个层面上推广
公司文化通常是在创业初期形成的。如果数据科学是贵公司的竞争优势,那么在管理层中有一名首席运营官就是一个信号,表明贵公司将数据科学视为一项独立的能力。它还表明,采用以数据为中心的方法来解决关键的战略业务问题对您的公司有多么重要。虽然 Stitch Fix 在公司各个层面的数据科学上都有大量投资,但如果你刚刚起步,你不需要太多的层级。Stitch Fix 的数据科学组织从一名首席执行官和一名数据科学家开始,然后从那里发展起来。
多年来,Stitch Fix 的数据科学组织已经发展到有更多的层次。在我们有一个曹。数据科学副总裁和数据*台副总裁向 CAO 报告,因为这两个组织携手合作,需要紧密合作。*台团队中的数据工程师构建工具、框架和服务,数据科学家反过来利用这些工具、框架和服务来构建 ETL、构建模型并部署到生产中。我们的主管和经理帮助管理利益相关方的期望,并消除管理开销,以便个人贡献者可以专注于成为全栈数据科学家。随着 Stitch Fix 的发展,我们的数据科学组织也在发展。
外卖食品
如果数据科学真的是你的竞争优势,就这样对待它。如果数据科学值得在您的投资者推介材料中强调,那么至少让数据科学组织在高管层中有自己的发言权。让数据科学参与进来不仅可以将业务价值与整个数据科学团队的工作联系起来,还可以实现数据驱动的战略决策。给予数据科学家端到端的所有权,让他们与工程师处于同一层面。只有这样的主动措施来支持您的数据科学组织,才能让发挥其全部潜力。
模型驱动:Rev 数据科学峰会的经验
原文:https://www.dominodatalab.com/blog/being-model-driven-lessons-from-rev-data-science-summit
By Angela Tran Kingyens, PhD, version one ventures on June 19, 2018 in
感谢 version one ventures 的 Angela Tran Kingyens 博士贡献了这篇客座博文。它最初发布到版本一站点这里。
几周前,我参加了由 Domino 组织的 Rev 数据科学领导者和从业者峰会。我之前在博客上分享了去年活动(这是我参加过的最好的数据科学会议之一)的主要收获,包括如何定义数据科学家以及数据科学和数据工程之间的差异。
今年的核心主题之一是数据科学项目的管理。我以前从未这样想过,但事实上,模型是数据科学家的工作成果。
我最大的收获是认识到,当涉及到构建产品和业务时,重要的不仅是数据驱动,还有模型驱动。
模型驱动是什么意思?
如果数据是油,那么模型就是引擎。数据和代码可以被单位化,而模型则更复杂。模型是用数据和代码作为构建块有效地创建的。因此,不能像对待数据或代码一样对待模型,管理数据科学生命周期肯定有最佳实践。
一般来说,数据科学的整个生命周期可以分为以下几个阶段:
- 构思:评估项目可行性和优先级时
- 数据采集和准备:了解数据的可用性、可访问性和数据采集的成本
- 研发:建立迭代的实验方法(包括假设生成、模型选择、KPI、标准)
- 验证:严格评估数据假设、代码库、模型性能和预测结果
- 交付:将模型的数学结果产品化(即,将模型部署到产品本身或作为报告和仪表板)
- 监控:测量模型上线后对用户实际行为的影响
我们大多数人很可能只是有意策划了其中的几个阶段。虽然像这样建立一个全面的工作流程可能需要大量的工作,但最大的好处是我们可以真正衡量一切。这有望转化为所有利益相关者之间更高的效率和更有效的协作,以及更多的可审计性和可再现性。
使用时尚 MNIST 对英伟达 CUDA 9 和亚马逊 EC2 P3 实例进行基准测试
在这篇文章中,Domino 数据实验室的首席数据科学家 Josh Poduska 写了关于使用时尚 MNIST 对 NVIDIA CUDA 9 和亚马逊 EC2 P3 实例进行基准测试的文章。如果对 Poduska 的其他见解感兴趣,他还将在 Strata New York 2018 上发表“管理企业中的数据科学”。
介绍
也许你已经听说过 NVIDIA 的 CUDA 9 软件和亚马逊 EC2 P3 实例。据说,当被投入到训练深度学习网络的任务中时,它们快如闪电。
CUDA 是 NVIDIA 为 GPU 上的通用计算开发的并行计算*台和编程模型。CUDA 9 是下一个提升各种应用和产品性能的迭代。 NVIDIA 声称 CUDA 9 提供了一些显著的优势,例如:
- 利用 cuBLAS 中的新 GEMM 内核加速深度学习。
- 为灵活的线程管理提供了新的编程模型。
- 改进的编译器和开发工具。
- 能够使用张量内核更快地执行人工智能应用,5X 比 Pascal GPUs 更快。
亚马逊 P3 EC2 实例使用新的Volta GPU(NVIDIA Tesla V100)。亚马逊声称每个 P3 实例可以提供高达 1 petaflop 的混合精度性能。在内部基准测试中,与 CPU 相比,大型工作的深度学习培训从几天缩短到几分钟。
我决定让这两项技术在深度学习图像分类问题上进行测试,看看与上一代选项相比,我可以实现多大的性能提升。
决定方法
在寻找一个好的神经网络的过程中,数据科学家必须优化一个大的参数空间,包括网络类型、节点数量、层数、辍学率、数据扩充和学习率。在这个领域训练网络需要很多时间。此外,随着深度学习领域的发展,趋势是向更复杂的更深网络发展(例如,正在进行的关于基因变异大型网络的研究)。底线是计算性能是影响数据科学家构建精确神经网络能力的主要因素。
我选择在时尚 MNIST 数据集上运行我的测试,这是手写数字 MNIST 数据集的流行替代品,它提供了更大的准确性挑战。每个图像都是一件衣服,目标是正确地对图像进行分类。这是我的 Jupyter 笔记本中一些图片的快照。
大多数 MNIST 时尚的第一次尝试的网络可以达到大约 90%的准确率,并且只需要几分钟的训练时间。我想找到一个网络,将推动信封一点——一个需要更长的时间来训练,并提供更大的准确性比一个简单的 CNN。我看到了丹尼尔·科斯拉维(Danial Khosraivy)的一篇文章,他在文章中从 T2 的 VGG 有线电视新闻网(CNN)获得了灵感,并创建了一个类似 VGG 的有线电视新闻网(CNN),在时尚 MNIST 的数据集上进行批量标准化和数据扩充。Mathew Cord 的这个演示有一些有用的结构图来形象化 VGG 网络的样子。
我对丹尼尔的代码做了如下修改。
- 添加了代码来传递一个用户参数,以方便运行实验。
- 添加了一个计时器来记录构建模型所需的时间。
- 添加了一个混淆矩阵,以查看哪里可以提高精确度。
- 导出包含精确度和时间的 JSON 文件,以便可以轻松比较运行。
- 为 CUDA 8 / P2 测试对 TF 1.4.1 进行了小的代码修改。¹
为了在 P3 实例上比较 CUDA 9,我在 P2 测试了 CUDA 8,在 P2 测试了 CUDA 9。该代码将原始训练数据分成 80/20 训练/验证,以检查过度拟合。该模型以 0.001 的学习率训练 10 个时期,然后以 0.0001 训练另外 10 个时期。在最初的 20 个时期之后,添加数据扩充,通过旋转、移动和缩放原始训练样本来生成新的训练样本。然后,根据这些新数据对其进行新一轮的训练。这种关于扩充数据的训练是基准测试中最长的部分。我想测试数据扩充对准确性和性能的影响,所以我将数据扩充下训练的历元数作为用户提供的参数。对于每个 CUDA/实例组合,我的测试计划涵盖了无增强、25 个增强时期和 50 个增强时期。
这是我的测试计划的布局。
您可以在 Domino Data Lab 试用网站上免费查看、运行和下载整个项目,包括代码(Domino 包含 AWS 成本)。除了查看项目文件,您还需要登录或注册。登录后,查看自述文件了解更多详细信息。
下面是构建类似 VGG 的 CNN 的代码快照。
vgg_cnn = Sequential([
Lambda(norm_input, input_shape=(28,28, 1)),
Conv2D(32, kernel_size=(3, 3), activation='relu', padding='same', input_shape=input_shape),
Conv2D(32, kernel_size=(3, 3), activation='relu', padding='same'),
BatchNormalization(),Dropout(0.25),
Conv2D(64, kernel_size=(3, 3), activation='relu', padding='same'),
Conv2D(64, kernel_size=(3, 3), activation='relu', padding='same'),
MaxPooling2D(pool_size=(2, 2)),Dropout(0.25),
Conv2D(128, kernel_size=(3, 3), activation='relu', padding='same'),
Conv2D(128, kernel_size=(3, 3), activation='relu', padding='same'),
BatchNormalization(),Dropout(0.25),
Conv2D(256, kernel_size=(3, 3), activation='relu', padding='same'),
Conv2D(256, kernel_size=(3, 3), activation='relu', padding='same'),
Conv2D(256, kernel_size=(3, 3), activation='relu', padding='same'),
MaxPooling2D(pool_size=(2, 2)),
Flatten(),
Dense(512, activation='relu'),
BatchNormalization(),
Dropout(0.5),
Dense(512, activation='relu'),
BatchNormalization(),
Dropout(0.5),Dense(10, activation='softmax')
])
在 Domino 中构建计算环境
在 Domino 中输入 Dockerfile 指令
在 Domino 中设置硬件层
在 Domino 中启动运行并传递参数
在 Domino
上并行运行(P3 C9 和 P2 C8 各有 50 个纪元同时运行)
运行时间和准确性记录在 Domino 中,以便于比较
Domino 中自动捕获的配置细节
这是使用 Domino 进行基准测试的最有用的方面之一。当我运行基准测试并解决了一些问题(特别是让代码在 CUDA8 和 P2 上运行 TF 1.4.1)时,能够返回到之前的运行并查看运行所使用的确切环境和硬件层细节是非常有帮助的。这对再现性和导航我的项目是非常宝贵的。
基准测试结果
在每个设置下进行两次运行,总共 18 次运行。这两次运行的*均最终结果如下所示。在每个测试中,两次运行的模型训练时间几乎相同(这是该基准的主要目的)。准确性数字随着时代的增加而上升,但略有波动。
使用 domino 从木星内部进行视频比较
https://fast.wistia.net/embed/iframe/2hy38hbw4o
基准预测模型
原文:https://www.dominodatalab.com/blog/benchmarking-predictive-models
据说调试比编程更难。如果我们,作为数据科学家,在我们理解的极限下开发模型(“编程”),那么我们可能不够聪明来有效地验证这些模型(“调试”)。
有大量令人眼花缭乱的预测建模技术和软件库可供我们构建模型。结果,在试图解决一个问题的过程中,我们很可能以多个模型告终。理解这些模型的性能是很重要的,并且提供一些关于它们中的哪一个将实现建模练习的业务目标的信心。这就是标杆管理的用武之地。
基准总是不完整和不全面的,但是如果我们小心的话,它们会在方向上是正确的:足够正确以至于我们可以做出正确的选择,并且通过这样做,使我们的组织更聪明、更高效,并且更受洞察力的驱动。
专门对机器学习模型进行基准测试是一项具有挑战性的工作。即使是使用、软件库、超参数调整或计算环境的简单变化也会导致行为的剧烈变化。在本文中,我们将概述比较机器学习模型、执行基准测试以及确保实验可重复性的最佳实践。
基准和系统特征
虽然对机器学习模型的预测性能进行基准测试很重要,但也有一些重要的操作约束需要考虑。这些包括模型的训练和运行时性能特征。也就是说,训练一个模型需要多长时间,对新数据进行评分需要多长时间,以及完成这两项所需的计算资源。
基准操作特性通常可能与评估模型的预测特性一样重要。例如,考虑在广告购买网络上的实时竞价的问题。bid 的总延迟预算(包括网络访问、数据库查询和预测)为 100 毫秒。在深度学习模型中计算预测花费的 80 毫秒可能意味着该模型不符合业务要求。尽管深度学习模型的预测能力有所提高,但在 5 毫秒内返回结果的逻辑回归模型可能更合适。只关注模型预测性能的基准会忽略将模型投入生产的这一重要方面。
实验环境
基准要求实验具有可比性、可测量性和可重复性。有了如此多的数据、预测建模技术、软件和超参数的潜在组合,数据科学家如何接*实验环境是很重要的。
容器为执行建模或评分过程的多次运行提供了一个框架,所有这些都使用完全相同的实验设置。这使得数据科学家可以使用聚合和*均来开发关于所需属性的更可靠的统计数据。实验的各个方面也可以以可控的方式逐渐改变。借助合适的计算硬件,可以同时运行多个实验,从而显著减少迭代时间。除了评估预测能力之外,许多容器技术还提供了记录训练模型和运行预测的操作特征的工具。这些包括使用的内存、存储 IO 性能和 CPU 利用率。
通常,机器学习模型在给定环境变化的情况下会表现不同。例如,当可用 CPU 内核、GPU或可用系统内存的数量发生变化时,依赖矩阵计算的模型将表现不同。如果底层 BLAS 库,如 OpenBLAS、Atlas 或英特尔 MKL 互换,也是如此。
容器允许数据科学家测试多个基准配置,所有这些配置都在计算环境中采用了不同的假设,并且以可重复的方式进行测试。
如果配置错误或使用不当,机器学习库使用的许多底层技术可能会扭曲实验结果。经常被误解的是并行性可能在机器学习软件栈中的何处以及如何表现。如果适当配置,许多 BLAS 和其他数学库可以利用多核 CPU。如果不小心确保所有 BLAS 库候选都配置了多线程,基准测试结果将会产生误导。
类似地,例如,如果底层 BLAS 库本身配置为多线程,则在模型级别试验并行化重采样的策略可能会导致 CPU 内核的操作线程超额预订。结果可能是运行时性能严重下降。
在设计实验时,应该考虑运行基准测试的底层硬件。与直接在专用硬件上运行实验相反,基准测试可以在共享的虚拟化资源上进行,如 Amazon Web Services 或企业数据中心的私有云。
虽然访问大量强大的 CPU 和*乎无限的存储可能很方便,但共享计算、网络和磁盘 IO 资源的性质要求我们在构建实验时进行一些思考。
基准流程可能需要运行多次,并使用一个聚合*滑度量(如中值)进行比较。
播种
值得重复的是,根据科学方法,基准应该是可重复的。许多机器学习模型利用来自随机数生成器的熵来启动解空间的搜索。
自动化分割训练、维持、测试数据集的库也是如此。出于基准测试的目的,这些随机数需要在所有运行中保持一致。大多数随机数生成器都支持设置一个种子,这就满足了这个目的。在 R 中,这是通过set.seed
完成的,而在 Python 中,使用来自random
包的random.seed
。
挑选数据集
确保用于测试机器学习算法的数据集代表模型在生产中会遇到的数据,并在整个数据管道中保持这一点很重要。数据收集或转换过程中引入的任何偏差都可能导致选择在生产中表现不佳的模型。
通常,这种错误会被无意中引入到流水线中。例如,如果数据最初驻留在关系数据库中,那么应该注意不要从预先过滤的源中采样。例如,提取样本的分析数据库中的数据摄取过程可能已经删除了异常值或记录,以减少编码错误或满足业务规则。
基准必须包含训练集和测试集中未筛选的数据,这一点很重要。在所有数据都经过非代表性的清理过程之后,对模型的行为进行基准测试可能会导致较差的实际性能。
数据集泄漏是基准测试可能提供误导性结果的最隐蔽的方式之一。如果更复杂的模型,如梯度增强机器、随机森林或深度神经网络在有泄漏的数据集上训练,它们可能比更简单的模型在维持集上表现得更好。尽管没有对生产数据提供任何更大的预测能力。
实际上,更复杂的模型可能具有更大的能力来过度拟合在实际使用期间不会出现的泄漏趋势。基准数据集中如何引入这种泄漏的一个例子是使用不正确的测试/训练分割。给定一个时间序列数据集,使用简单的测试/训练分割,而不考虑时间序列本身,可能会引入泄漏。
在试图确定潜在的制造商质量缺陷时,应注意排除制造商接到质量问题通知之日后的数据。该数据的预测者可能已经对质量缺陷的一些潜在方面进行了编码,例如批号或零件类型,这可能以不对称的方式不适当地影响模型。对于这种泄漏,复杂模型可能比简单模型更健壮或更不健壮,并导致基准测试不能反映生产中的实际行为。
设定适当指标的基准
基准测试中经常犯的一个错误是测试和优化不能解决业务问题的指标。例如,在欺诈检测和医疗诊断中,假阴性可能比假阳性昂贵(或致命)许多倍。使用 AUC 进行基准测试可能会导致一些非常误导的结果。AUC 总结了一个模型在所有阈值上的预测能力,而在生产中,该模型将只使用一个阈值进行预测。在 AUC:预测分布模型性能的误导性度量 中,作者提供了 AUC 为何是评估模型预测能力的潜在不良指标的五个原因。
对于许多机器学习问题来说,AUC 是一个弱的,而且经常误导的,真实世界预测性能的指标。
因此,重要的是不要仅仅依赖 AUC 等指标,而是选择一个更准确地反映模型在生产中的行为的真实影响的指标。在 关于比较分类器:要避免的陷阱和推荐的方法 (PDF) 中,萨尔茨伯格建议数据科学家应该使用二项式测试来对两个不同的模型进行评级。测试的细节超出了本文档的范围,但是对于任何计划比较不同分类器和模型的人来说,这篇文章都是值得一读的。
创建良好的基线
在 Quora 回答中,Peter Skomoroch 指出,比较简化基线模型的模型改进通常是有价值的,例如分类数据的 kNN 或朴素贝叶斯,或者时间序列数据中某个值的 EWMA。这些基线提供了对数据集可能的预测能力的理解。
这些模型通常需要少得多的时间和计算能力来训练和预测,这使它们成为一个有用的交叉检查答案的可行性。kNN 和朴素贝叶斯模型都不可能捕捉复杂的交互。然而,它们将提供对基准模型预测能力的最小界限的合理估计。
此外,本练习还提供了测试基准管道的机会。重要的是,基准管线为具有已知性能特征的模型提供稳定的结果。原始数据集上的 kNN 或朴素贝叶斯,或通过列居中或缩放进行的最低程度的操作,通常会提供弱但足够的学习器,其特征对于比较的目的是有用的。更复杂模型的特征可能不太为人所知,并被证明是具有挑战性的。
结论
随着大量的建模技术和软件库可供数据科学家使用,人们倾向于开发一小组“常用”算法和工具,而不整体评估更大范围模型的优点。这就产生了采用次优解决方案的风险,这种解决方案可能无法实施,可能导致收入损失,甚至危及生命。pre
在本文中,我们探索了许多有效的基准测试模型的最佳实践:实验环境、数据管理、选择适当的度量标准,以及超越预测特性来研究模型如何在生产中使用。
我们希望这有助于构建一种谨慎、有条不紊且高效的基准模型方法,以实现数据科学的使命:帮助人们和组织通过数据做出更好的决策。
大规模管理数据科学的最佳实践
原文:https://www.dominodatalab.com/blog/best-practices-managing-data-science-scale
我们最*发布了一份数据科学管理实用指南,旨在帮助当前和有抱负的管理者从行业领导者的挑战和成功中学习。这篇博客文章提供了指南的摘要。
如何在您的组织中推进数据科学
我们 Domino 很幸运有机会与大大小小的领先数据科学团队合作,从奥杜邦到苏黎世都有这样的组织。从这个角度来看,我们可以看到 30,000 英尺的行业趋势,这些趋势占据了头条新闻,同时也见证了发生在战壕中的不那么迷人(但重要)的工作。我称之为当今数据科学的“勇气和荣耀”。
这是一个激动人心的时刻,我们希望分享一些行业经验,这些经验是我们根据过去几年与数据科学团队的经验提炼出来的实用指南。最重要的是,我们不断听到一种渴望,想知道其他人在空间中做什么,什么在工作,哪里不应该涉足。
本指南代表了我们对许多行业挑战的来源的看法,以及由领导者磨练出来的最佳实践。希望这能揭开最新技术的神秘面纱,并激励您在组织中进一步推进数据科学。
以下是指南的执行摘要。
大规模管理数据科学实用指南:执行摘要
管理、扩展和加速整个数据科学学科的能力越来越多地将成功的组织与那些沦为宣传和幻灭的受害者区分开来。虽然数据科学家可能拥有 21 世纪最性感的工作,但数据科学经理可能拥有 21 世纪最重要但最不为人所知的工作。本文旨在揭示和提升数据科学管理的现状。我们确定了利益相关者的一致性,模型交付的速度,以及影响的度量。这些挑战的根本原因可以追溯到一系列特定的文化问题、流程和组织结构中的差距以及不充分的技术。
基于与数据科学领域的领导者(如好事达、孟山都和穆迪)4 年多的合作,我们观察到最佳解决方案是从构思到交付和监控的整个项目生命周期的整体方法。能够开发迭代交付业务价值和自我测量的严格实践,同时利用数据科学*台技术支持中心辐射型组织结构的组织,可以将数据科学扩展为核心能力,并加速交付强大的模型组合。虽然一个完整的转变可能需要数年时间,但我们建议采用“爬、走、跑”的方法来为最终愿景建立动力。
数据科学团队更好的知识管理
原文:https://www.dominodatalab.com/blog/better-knowledge-management-data-science-teams
我们很高兴地宣布了一系列重大的新功能,使您能够更轻松地在您的团队和组织中查找和重用过去的数据科学工作。我们将这些特性称为“可发现性”,它们包含了搜索、标记和获得相关分析工作建议的强大方法。
在本帖中,我们描述了这些特性在高层次上是如何工作的,并深入探究了它们背后的动机以及我们认为它们解决的常见挑战。这些特性在 Domino 中都有;如果你有兴趣看他们的行动,注册一个现场演示。
背景和动机:复合研究
任何在团队中工作过,看到同事来来去去,或者看到项目成倍增加的人都知道,当没有标准的地方放东西,没有“记录系统”时,找到过去的工作是多么令人沮丧你应该在 Dropbox 里找吗?谷歌文档?Github?也许只需搜索我的电子邮件或公司的维基页面?
这浪费时间。在某些情况下,很多。根据《知识世界》的一篇文章:
一些研究表明,知识工作者花在创建新报告或其他产品上的 90%的时间都花在了重新创建已经存在的信息上。1999 年,IDC 的一项欧洲研究考察了这一现象,称之为“知识工作赤字”,并得出结论,智力返工、不合标准的绩效和无法找到知识资源的成本为每个工人每年 5000 美元。
根据麦肯锡的一份报告“员工每天花 1.8 小时——*均每周 9.3 小时——搜索和收集信息。”
浪费时间对生产力的影响是一回事,但当你的工作对你的业务和竞争优势至关重要时,无法找到和重用过去的工作会导致更大的问题:它会降低你的研究改进速度。
为了说明原因,我们将使用 finance 中的一个概念:复利。复利导致投资呈指数增长,因为每增加一美元都会反馈到正在增长的基础金额中。
(来源:http://financesolutions.org/about-compound-interest/)
同样的概念也适用于您的分析工作:如果每个项目和工作产品都成为您公司集体知识的一部分,以便未来的同事可以轻松地构建、改进它或在它的基础上进行构建,那么您正在以指数速度混合您的知识并改进您的模型。
所以问题就变成了:你如何保证你的分析工作会被作为后续改进的起点,这样人们就不会再从头开始了?
搜索和浏览
为了让人们能够在过去的工作基础上更进一步,我们首先需要让他们找到过去的工作。有两种经典的方法:让人们组织或管理工作;让人们去寻找工作。(把这个想成“雅虎 vs 谷歌”的问题。)我们决定两者都允许:Domino 允许您用一组可定制的标记来标记您的项目,还允许您搜索所有项目的内容。
搜索
搜索是不言自明的,令人惊讶的强大。Domino 现在将索引您项目中的所有文件,以及元数据,如您的实验标题,以及关于您的结果的所有注释。
例如,假设我想尝试使用 matplotlib Python 包,我想找到可以复制或借鉴的示例来帮助我学习:
或者,如果我们希望找到过去的犯罪数据分析,这些数据与工作日和周末的犯罪事件之间的差异有关,我们可以搜索实验以及对结果的讨论:
当然,搜索尊重权限:你只能看到你被授权访问的项目的结果。安全性(只能看到允许您看到的内容)与可发现性(能够找到并重用相关工作)之间存在天然的矛盾。为了让组织在实施访问控制的同时最大限度地提高可发现性,我们提供了一种将项目设置为“可搜索”的方法,这样没有访问权限的人仍然可以通过搜索找到它们(从而知道它们的存在),但需要请求访问权限才能查看项目内容。
磨尖
让用户标记东西听起来总是一个好主意——直到你手头有一大堆乱七八糟的东西。标签会很快成为不受管理的、冗余的、低质量的信息的沼泽。
为了解决这个问题,Domino 的标签解决方案支持“图书管理员”或“馆长”角色:一种特殊类型的管理员,可以管理标签并将某些标签指定为“受祝福的”,从而赋予它们特殊的地位。它是这样工作的:
正如你所料,研究人员可以标记他们的项目:
图书管理员可以管理整个标签列表,合并重复标签,将关键标签标记为“已批准”等。
“批准的”标签以不同的方式出现在用户界面中,以向用户发出他们更受信任的信号。例如,如果您正在标记一个项目,您的自动完成的建议将以绿色显示批准的标记:
当您搜索给定的标签时,已批准的标签将再次显示为绿色,因此您可以对该分类更有信心:
我们认为这种“监管”能力提供了两个世界的最佳之处:它允许自下而上的概念和层次结构的创建,以及自上而下的管理,以确保混乱不会失控。
背景和建议
如果你认为你应该寻找一些东西,搜索和浏览(通过标签或其他方式)是很棒的。然而,通常情况下,你甚至不会想到可能会有相关的工作需要你去做。
为了解决这个问题,我们的 discovery 特性集的最后一部分是一个更高级的项目门户,它不仅会显示您自己的项目,还会显示可能与您正在进行的工作相关的项目。因为我们知道你与谁合作过,以及你的项目涉及哪些主题,所以我们可以就可能与你相关的其他工作提出一些基本建议。
了解更多信息
我们听说越来越多的组织希望加快模型改进的步伐,以保持领先于竞争对手并更快地推动业务改进。随着这些组织的成长,我们相信“复合研究”将成为这些努力的关键。为此,我们计划继续投资于 Domino 中的“可发现性”和知识管理特性
目前,这些特性在 Domino 企业版中可用,您可以在自己的 AWS 虚拟私有云或自己的服务器上使用。如果你有兴趣试用它们,请告诉我们。
偏见:打破束缚我们的锁链
原文:https://www.dominodatalab.com/blog/bias-breaking-chain-holds-us-back
演讲人简历:Vivienne Ming博士被 Inc .杂志提名为十大科技关注女性之一,她是一位理论神经科学家、企业家和作家。她共同创立了她的第五家公司 Socos Labs,这是一家探索人类潜力未来的独立智库。Ming 博士创建了 Socos 实验室,将她与其他创造性专家的不同工作结合起来,扩大他们对全球政策问题的影响,无论是在公司内部还是在我们的社区。此前,Vivienne 是加州大学伯克利分校雷德伍德理论神经科学中心的访问学者,从事认知神经假体的研究。在空闲时间,Vivienne 发明了人工智能系统来帮助治疗她患有糖尿病的儿子,提前几周预测躁郁症患者的躁狂发作,并让孤儿难民与大家庭成员团聚。她是许多公司和非营利组织的董事会成员,包括 StartOut、Palm Center、Cornerstone Capital、Platypus Institute、Shiftgig、野象小姐资本和 SmartStones。明博士还经常谈到她对商业中的包容性和性别的人工智能驱动的研究。对于放松,她是一个妻子和两个孩子的母亲。
精选博文摘要:Vivienne Ming 博士在最*一次 Domino MeetUp 上的演讲深入探讨了偏见及其影响,包括算法、模型、企业和人类的潜在责任。明博士的证据包括为多个创业公司筹集的第一手知识,她在 Gild 担任首席科学家期间完成的数据分析,以及引用数据、经济、招聘和教育领域的研究。这篇博客文章提供了演讲的文本和视频片段。完整视频可供观看。如果您有兴趣查看 Domino 过去活动的其他内容,请查看数据科学弹出播放列表。如果你有兴趣亲自参加一个活动,那么考虑一下即将到来的 Rev 。
研究、实验和发现:科学的核心
研究、实验和发现是所有类型科学的核心,包括数据科学。Ming 博士以“做大量丰富数据工作的力量之一,是这整个范围-我的意思是,在这个世界上没有什么不是入门”开始了演讲。虽然 Ming 博士在整个演讲中提供了详细的见解和证据,指出了丰富数据工作的潜力,但这篇博客文章重点关注性别、姓名和种族人口统计数据中的偏见的影响和责任。它还涵盖了偏见不仅仅是一个数据或算法问题,它是一个人的问题。解决偏见的第一步是承认它的存在。
你看到变色龙了吗?偏见的根源
我们每个人都有偏见,并根据这些偏见做出评估。明博士用约翰内斯·斯托特的变色龙指出“偏见的根源是根本的,不可避免的”。许多人看到这个图像时,就像看到了变色龙。然而,变色龙形象由两个全身涂满颜料的人组成,被巧妙地放置成变色龙的样子。在下面的视频剪辑中,明博士指出
“我无法制造一个不带偏见的人工智能。世界上没有不偏不倚的老鼠。从一个非常基本的意义上来说,这些系统正在根据它们的不确定性做出决策,唯一合理的方法就是根据给定的数据尽力而为。问题是,当你拒绝承认我们的偏见有问题,并实际采取行动时。我们有大量的证据表明存在一个严重的问题,而且这个问题持续存在,不仅仅是小问题。但正如我稍后将要谈到的,它阻碍了我们从一个转变的世界中走出来,一个我认为任何人都可以自私地庆祝的世界。”
偏见就像拍在头上(或链条上)的东西,让我们止步不前
虽然历史上充满了偏见不被认为是一个问题的时刻,但也有人们解决社会强化的性别偏见的时刻。女性使用男性笔名写史诗小说、打仗、赢得柔道冠军、跑马拉松,甚至如明博士所指出的,在上世纪 60 年代创建了一家名为自由程序员的全女性软件公司。在会见中,明博士指出,女爵士夏羽“史蒂夫”雪莉的 TedTalk,“为什么雄心勃勃的女人有*头?帮助她分析了两种截然不同的初创企业融资经历,这两种经历都是基于性别偏见。
在 Ming 博士与他人共同创建她目前的教育技术公司并获得学历证书之前,她从大学辍学,创办了一家电影公司。当...的时候
“我们创办了这家公司,有趣的是,尽管我们一无所有,也没有任何人应该投资的东西——我们没有一个剧本。我们没有天赋。从字面上看,我们甚至没有天赋。我们没有经验。我们一无所有。我们实际上是在打了几个电话之后,筹集了你在科技行业可能称之为种子资金的资金。”
然而,第二次筹集资金更加困难,因为她现在的公司,尽管有更多的学术,技术和商业证书。在一次与一个有 5 个合伙人的小公司的资金会议上,Ming 博士转述了最后一个合伙人是如何说的“‘你应该为你所建立的感到骄傲’”。当时,我想,哦,天哪,至少这些人中有一个是站在我们这边的。事实上,当我们离开房间时,他真的拍了拍我的头,这似乎有点奇怪。”这促使明博士考虑如何
“我的凭证第二次被转换了。没有人质疑我们的技术。他们很喜欢。他们质疑我们是否知道如何经营企业。人们喜欢的产品本身,而不是电影。第二次,一切都会变得简单得多。除了我能看到的唯一真正的区别是,第一次我是男人,第二次我是女人。”
这使明博士得出结论,并理解斯蒂芬妮·雪莉所说的雄心勃勃的女人有着*头是什么意思。明博士转述说
“从那以后,作为一名企业家,我明白了,一旦感觉他们在和他们最喜欢的侄女打交道,而不是和作为商人的我打交道,我就知道,我知道他们根本没有把我当回事。世界上所有的博士都不重要,我过去在其他公司的所有成功都不重要。你就是我的一切。我学到的是,要提前想好。不要浪费时间和精力,准备向那些根本无法理解你的人推销,当然,在很多情况下,这就是你所能得到的一切。"
明博士还指出,性别偏见在她变性前后所工作的组织中也有所体现。她指出,当她变性后开始工作时,
那是最后一天有人问我数学问题,这有点好笑。我碰巧也有心理学博士学位。但不知怎么一天到下一天,我都没忘记怎么做收敛证明。我没有忘记发明算法意味着什么。然而,人们就是这样处理的,那些以前就知道的人。你看,看到一个人换了一种皮肤,这种变化是多么强大。”
这种经历类似于 Dame Shirley 的经历,她为了在 20 世纪 60 年代创办一家价值数十亿美元的软件公司,“开始挑战当时的惯例,甚至在我的业务发展信件中把我的名字从“Stephanie”改为“Steve”,以便在任何人意识到他是一个“她”之前通过这扇门”。雪莉夫人颠覆了偏见,因为作为女性,她不能在股票交易所工作,不能驾驶公共汽车,或者“事实上,没有我丈夫的允许,我不能开银行账户”。然而,尽管有偏见,雪莉女士说
“谁会想到超音速协和号黑匣子飞行记录器的编程会是一群在自己家里工作的女人做的”……后来,当它成为一家价值超过 30 亿美元的公司,我让 70 名员工成为百万富翁时,他们会说,“干得好,史蒂夫!”
虽然现在不再是 20 世纪 60 年代,但偏见的影响和责任仍然存在。然而,我们在数据科学领域能够访问数据,就偏见进行公开对话,这是避免数据科学项目和分析中的不准确性、培训数据责任和模型责任的第一步。如果在 2018 年,人们基于这样的假设来建立和训练模型,即拥有 XY 染色体的人类缺乏编码能力,因为他们只审查和使用了 20 世纪 60 年代雪莉女士公司的数据,会怎么样?请想一想,这就是发生在雪莉女士、明博士和许多其他人身上的事情。偏见的影响和责任有现实世界的后果。意识到这种偏见,然后解决它,推动行业向前发展,打破阻碍研究、数据科学和我们的链条。
说出我的名字:偏见被揭露
当明博士是 Gild 的首席科学家时,一名记者打电话给她,询问关于何塞·萨莫拉的报道。这也导致了明博士对她即将出版的书的研究。“与众不同的代价”,明博士在会上讲述了一些趣闻轶事(见视频剪辑),并且也为英国《金融时报》撰写了关于这项研究的文章:
为了计算与众不同的税收,我利用了 Gild 收集的 1.22 亿份职业资料数据集,Gild 是一家专门从事招聘和人力资源技术的公司,我在该公司担任首席科学家。从这些数据中,我能够通过检查真实的个人来比较特定人群的职业轨迹。例如,我们的数据集有 151,604 人叫“乔”,103,011 人叫“何塞”。在只选择软件开发人员后,我们仍然分别有 7105 人和 4896 人,他们都是以写代码为生的人。通过分析他们的职业轨迹,我发现,与没有任何学位的乔相比,何塞通常需要硕士或更高的学位,才能在相同的工作质量下获得同等的晋升机会。与众不同的税收很大程度上是隐性的。人们不需要恶意行为就能被征收。这意味着 José需要额外的六年教育以及教育所需的所有学费和机会成本。这是与众不同的税,对何塞来说,这种税一生要花 50 万到 100 万美元。(《金融时报》 )
虽然这个特殊的例子侧重于种族导向的人口统计偏见,但在 meetup 的讨论中,Ming 博士引用了相当多的关于姓名偏见的研究。如果 Domino Data Science 博客的读者手头没有她引用的一些研究,那么已经发布的关于名字偏见的研究样本包括:暗示男性性别的名字、、欧洲“听起来高贵”的姓氏、被认为是“容易发音的名字,这也暗示了组织如何选择他们的名字。然而,明博士并没有将讨论局限于性别和命名方面的偏见,她还深入探讨了人口统计偏见如何影响图像分类,尤其是种族方面的偏见。
图像分类中的偏见:错过 Uhura 和不解锁你的 iPhone X
在 Ming 博士担任 Gild 首席数据科学家之前,她能够看到 Paul Viola 的人脸识别算法演示。在那个演示中,她注意到算法没有检测到乌胡拉。Viola 表示这是一个问题,将会得到解决。几年后,当明博士担任 Gild 的首席科学家时,她转述了她是如何接到“【华尔街日报】打来的电话”的,于是谷歌的人脸识别系统就把一对黑人夫妇标记为大猩猩。艾是种族主义者吗?我说,‘嗯,和我们其他人一样。就看你怎么养了。"
作为背景背景,2015 年,谷歌发布了一款新的照片应用,一名软件开发人员发现,应用将两个有色人种标记为“大猩猩”和 Yonatan Zunger 当时是谷歌社交网站的首席架构师。自从 Yonatan Zunger 离开谷歌后,他就提供了关于偏见的坦诚评论。然后,在 2018 年 1 月,《连线》对 2015 年的活动进行了后续报道。在文章中,《连线》测试了谷歌照片,发现大猩猩、黑猩猩、黑猩猩和猴子的标签“在 2015 年事件后被从搜索和图像标签中删除”。这一点得到了谷歌的证实。《连线》杂志还进行了一项测试,通过搜索“非洲裔美国人”、“黑人男性”、“黑人女性”或“黑人”,评估人们的观点,结果是“一幅放牧羚羊的图像”(在搜索“非洲裔美国人”时),以及“人们的黑白图像,正确地按性别分类,但没有按种族过滤”。这指出了解决机器学习和模型中的偏见所涉及的持续挑战。偏见也有超出社会公正的含义。
正如 Ming 博士在下面的 meetup 视频剪辑中指出的那样,iPhone X 中还内置了面部识别功能。面部识别功能在识别全球有色人种的面部方面具有潜在的挑战。然而,尽管如此,明博士指出“但你必须认识到,这些都不是算法问题。这些都是人类的问题。”人类做出决策来构建算法、构建模型、训练模型,并推出包含具有广泛影响的偏见的产品。
结论
通过偏见将责任引入算法或模型不仅仅是一个数据或算法问题,而是一个人的问题。理解它是一个问题是解决它的第一步。在最*的多米诺会议上,明博士讲述了
“AI 是一个了不起的工具,但它只是一个工具。它永远不会为你解决你的问题。你必须解决它们。尤其是在我的工作中,只有混乱的人类问题,只有混乱的人类解决方案。机器学习的神奇之处在于,一旦我们发现了其中的一些问题,我们实际上可以用它来帮助尽可能多的人,使这种方法具有成本效益,将解决方案推广到每个人。但如果你认为某个深度神经网络会以某种方式神奇地找出你想要雇用的人,而你一开始没有雇用合适的人,那么你认为那个数据集中发生了什么?”
Domino 不断地策划和放大想法、观点和研究,以促进加速数据科学工作的讨论。Ming 博士在最*的 Domino MeetUp 上的演讲的完整视频可以在获得。另外,Ming 博士还在 Berkeley Institute of Data Science 发表了一篇关于“使用机器学习驱动的应用程序最大限度地发挥人类潜力”的技术演讲。如果您对这些讲座的类似内容感兴趣,请随时访问多米诺数据科学弹出播放列表或参加即将到来的 Rev 。
警察工作中的种族偏见:对伊利诺伊州交通拦截数据的分析
原文:https://www.dominodatalab.com/blog/bias-policing-analysis-traffic-stop-data
Mollie Pettit ,Metis 的数据科学家和 D3.js 数据可视化讲师,带领数据科学家分析伊利诺伊州警察交通停车数据,呈现 2016 年芝加哥的故事叙事。Pettit 还讨论了数据科学家在分析数据和呈现故事叙述时,如何以及为什么需要深思熟虑并意识到假设。
会话摘要
在芝加哥举行的数据科学 PopUp 上,Mollie Pettit 介绍了对 2016 年伊利诺伊州警察交通拦截数据进行的数据分析。佩迪特回顾了数据是如何收集的,如何在分析数据时挑战假设,以及在 2016 年芝加哥的数据中发现或没有发现偏差的情况。
会议的主要亮点包括
- 在芝加哥,黑人和西班牙裔司机的搜索率明显高于其他群体,但违禁品“命中”率最低
- 在芝加哥,黑人司机比其他种族的司机更不容易收到传票
- 在伊利诺伊州,黑人和西班牙裔司机通常更有可能被搜查,亚裔司机不太可能被搜查,而西班牙裔司机更有可能被引用
- 数据科学是一个迭代过程,包括通过不断提问来挑战假设
佩迪特在会议结束时提醒数据科学家考虑假设
“我只是想提醒人们,在做分析时,应该非常仔细地考虑他们对数据所做的假设。如果假设被忽略,那么讲述一个数据本身并不完全支持的故事是非常容易的,这是所有行业都要记住的事情,无论是与非营利组织还是保险公司合作。”
如需从会议中获得更多见解,请观看视频或通读演示文稿。
演示文稿的视频记录
大家好。我叫莫莉·佩迪特。我的推特账号是@MollzMP。如果你想对我发微博,请自便。我目前是 Metis 的 D3.js 数据可视化讲师。我也是一名数据科学家。我以前在 Datascope Analytics 工作,现在是 IDEO 的一部分。实际上,我就是用 Datascope 做了一个项目,今天我将向你们介绍这个项目。我们将关注警务中的种族偏见,特别是在分析伊利诺伊州的交通站数据时。
2016 年,伊利诺伊州发生了超过 200 万次警察交通拦截。每停一次,就有一名官员填写这张表格。我将带您浏览一下这个表格,因为它将帮助您了解我们正在处理的数据是什么样的。他们[军官]填了这张表格。他们猜到了比赛的车手;记录下司机被拦下的原因——超速行驶、系安全带、违反设备规定等等——警官是否进行了搜查;如果搜查,是否发现违禁品-违禁品可能是毒品、武器、赃物-然后采取什么行动。他们收到传票了吗?他们得到口头警告还是书面警告?这是我们必须处理的数据。
其他城市也研究了类似的数据——纽约时报、华盛顿邮报、德克萨斯论坛报、迈阿密新时报——来自其他城市的报告显示了交通堵塞的偏见。伊利诺伊州的数据反映了这一点吗?交通站数据中有种族偏见的证据吗?换句话说,少数族裔司机比白人司机更容易被拦下、搜查或传讯吗?我们对整个伊利诺伊州进行了分析,但对于这次演讲,我将专注于芝加哥,特别是 2016 年的数据。我们也考虑了其他年份,但是现在我们只考虑 2016 年。
同样,这个问题——实际上你可以把它想象成——这个图表——我们的议程。我们首先要看看谁被拦住了。稍后,我们将查看搜索和引用。那么,2016 年谁被停了?在此之前,我们先来看看芝加哥的人口。
在这个图形中,每种颜色代表一个不同的种族或民族。这里看到的比例反映了芝加哥人口的比例。在一个没有偏见的完美世界中,如果我们假设驾车人口反映了城市人口,我们会希望这两者看起来一样,停靠点会反映这一点。下图中看到的比例反映了停止人口的比例。停靠站人口中黑人司机的比例是城市中黑人司机比例的两倍……对不起,城市中的黑人居民。停靠站人口中白人司机的比例是该市白人居民比例的一半。
这里可能会出现一个问题——因为这本身就是一个有趣的图形,对吗?在底部,黑人司机停车加油的数量相比之下非常大…但是仅仅看这个就意味着偏见吗?我们认为,就其本身而言,并不完全是这样,我们将讨论为什么不是这样。
这里有几样东西。首先,我们看的是城市人口和停靠点人口。现在,为了暗示偏见,我们假设芝加哥的居住人口的人口统计数据与芝加哥的驾车人口的人口统计数据相同。事实是,我们实际上并不知道驾驶人口是多少。我们可以猜测,有很多种方法可以让这些猜测更准确,但这里有很多事情要考虑。
首先,谁使用公交?谁开车去上班?谁住得离工作地点*,谁住得离工作地点远,因此花在路上的时间更多?当查看芝加哥以外的城镇时,一个相关的问题可能是,这是一个免下车城镇吗?
也许这个城镇的大部分人口是白人,但经常有少数民族人口较多的邻*城镇的居民在上下班途中经过。这些因素使得驾驶人口很难确切知道,也很难直接与城市人口进行比较。此外,需要指出的另一点是,这些交通站点数据是由官员而不是司机报告的。人口普查数据由每个人报告,每个人是驾驶人口的子集。所以,因为这两个数据集是由完全不同的人群记录的,你不可能完全知道它们有多好或者没有关联。
更令人困惑的是,这两种形式对种族的定义略有不同。西班牙裔和拉丁裔是交通站表格上的种族,在人口普查表格上是种族。这使得数据匹配更加复杂。
好的。所以,当然,我到目前为止所说的是,就我到目前为止向你们展示的内容而言,还不足以暗示任何形式的偏见。当然,我们不知道确切的驾驶人数,这使得仅凭停车次数来推断偏见是不明智的。然而,我们确实有被拦下的人,我们知道警察对每个被拦下的人采取的策略,以及他们被拦下后发生了什么。
他们被搜查了吗?他们没有被搜查吗?他们被开罚单了吗?某个特定的群体更有可能被搜查或被开罚单吗?这就是我们认为可以更准确地检测出偏差并具有更大意义的地方。
我们将深入调查,看看谁被搜索过。从现在开始,当我谈论种族时,这是警官假设的种族。正如我们在这里看到的,在被拦下的黑人司机中,1.7%被搜查,西班牙裔司机 4.3%,白人司机 0.8%,亚裔司机 0.6%。
当一名警察在 2016 年让一个人靠边停车时,如果一个人是西班牙裔或黑人,他们肯定更有可能搜查他。
我想用另一种方式来描绘它,这样我们就可以和伊利诺伊州的其他地方进行比较。在 x 轴上,你会看到白色搜索率。在 y 轴上,少数民族搜索率,如果当我画一个部门时一切都相等,首先我们会显示芝加哥,然后如果一切都相等,那么它会落在相等的线上。如果高于这条线,少数族裔司机会被搜索到更高的搜索率,低于这条线,他们会被搜索到更低的搜索率。
芝加哥在哪里?芝加哥和这些价值观,特别是针对西班牙裔和黑人的价值观,确实表明了芝加哥警方在选择搜查对象时的种族偏见。是的,在你问之前,我们确实检查了统计显著性。黑人和西班牙人的搜索率明显不同于零,而亚洲人的搜索率差异较小,更接*你在公*系统中的预期。所以,让我们把整个芝加哥都吐出来。抱歉,整个伊利诺伊州。正如你所看到的,几乎所有警察部门搜查黑人和西班牙裔司机的比率都高于白人和亚裔司机。
对这种特殊测试的一个普遍批评是,它没有考虑是否有任何发现。一些批评家可能会说,如果这个群体的点击率也更高,那么这些更高的点击率是合理的,这是一些人可能会说的。我所说的命中率是指是否发现了违禁品。我们可以看看哪里发现了违禁品。
黑人和西班牙裔司机的违禁品发现率较低,尽管 2016 年黑人和西班牙裔司机更有可能被搜查。我会把它和伊利诺伊州的其他数据放在一起。它比我给你看的上一组稍微少了一点戏剧性,更多的部门聚集在*等线周围,但值得注意的是,伊利诺伊州的大多数部门在搜索黑人和西班牙裔司机时发现违禁品的比率确实低于白人司机。
最后一个我想探究的是谁被引用了。西班牙裔和白人司机更有可能被传讯,亚裔司机紧随其后。在被拦下的黑人司机中,他们不太可能收到传票。但仍然值得注意的是,由于黑人司机靠边停车的数量,他们收到了芝加哥超过一半的传票。如果我们把这些放在和以前一样的地块上,看看整个伊利诺伊州,总的来说,这里的情况更接*相等。在整个伊利诺伊州,西班牙裔司机是被引用最多的,芝加哥在这方面比其他部门更接**等。
我今天给大家的主要总结是,2016 年在芝加哥,黑人司机在停车站人口中的比例是黑人居民在城市人口中比例的两倍。对黑人司机的搜查比任何其他群体都多,但违禁品命中率最低。与其他种族的司机相比,黑人司机收到的罚单比例要低得多。西班牙裔司机在芝加哥被搜索的可能性明显更大,在伊利诺伊州被引用的可能性也明显更大。还有很多其他的因素需要探索,其中很多我们都有,我只是没有展示给你们,还有一些我们希望继续挖掘的。
结论,我只是想提醒人们,在做分析时,应该非常仔细地考虑他们对数据所做的假设。如果假设被忽略,讲述一个数据本身并不完全支持的故事是非常容易的,这是所有行业都要记住的事情,无论是与非营利组织还是保险公司合作。这并不是说永远不应该做假设——有时候假设是必要的。见鬼,它们经常是必要的——但是明确它们是非常重要的。如果你想了解更多这方面的工作,这里有几个地方你可以找到——斯坦福开放政策项目和开放数据政策。这些是在这个领域做事情的其他人。如果你想查看伊利诺伊州的数据或了解更多,请随时联系我。感谢伊利诺伊州美国公民自由联盟为我们提供数据,并在这方面与我们合作。感谢 Datascope 的帮助和反馈。谢谢你听我说。
Domino 编辑注意:为了可读性,这篇文字经过了轻微的编辑。
大数据,大问题:FiveThirtyEight 的 Nate Silver 分享了应对当今数据科学挑战的技巧
说到数据,我们认为越大越好。事实上,大数据时代带来了一系列与数据科学建模相关的新挑战,今天的从业者必须正面应对,统计学家内特·西尔弗(Nate Silver)表示,他是 FiveThirtyEight.com 的创始人,并因其对政治民调的分析而闻名。
“我们拥有更好的信息和更多的数据,我们一直在变得越来越聪明,但世界仍然经常对我们来说非常不可预测,”Silver 在 5 月份在旧金山举行的为期两天的峰会上的主题演讲中说,该峰会聚集了 300 名数据科学领袖。
据 IBM 称,我们手边的信息量呈指数级增长,世界上 90%的数据是在过去两年中创建的。Silver 指出了数据爆炸带来的三个主要问题:
- 人们更有可能以不同的方式解释同样的证据。西尔弗提到了 2016 年总统选举的例子,当时同样的数据产生了导致大相径庭的预测的模型。
- 信噪比更高,增加了发现假阳性的风险。大量的数据点意味着你可以测试大量的关系,但这并不意味着表面上的相关性在推动预测或描述系统方面实际上是可靠的(这是学术界复制危机背后的一个原因)。例如,美联储实时跟踪 509,000 个经济统计数据,产生超过 2,580 亿个潜在的双向关系。只有一小部分可能是有意义的。“大海捞针是当今数据科学的重要组成部分,”Silver 说。
- 很难区分功能和缺陷。在竞争激烈的环境中,数据科学家不断试图发现竞争对手错过了什么或他们错在哪里。当他们降落在某个东西上时,很难知道这个发现是重要的还是转移注意力的,也很难知道是相信算法还是经验和直觉。“在那些边缘情况下……我们确实需要人力资本,”西尔弗说。“这不全是自动化的问题。”
随着对这些新出现的问题的认识不断提高,Silver 对试图在建立预测模型时应对大数据争论的潜在陷阱的数据科学家提出了建议。他的见解借鉴了贝叶斯定理,这是一种广泛使用的统计理论,有助于确定新信息如何改变事件发生的概率:
- 从概率的角度思考。从明确定义某件事发生的可能性开始(称为先验概率),并在收集新信息时更新这一预测。确保传达不确定性——误差幅度可能和预测一样重要。
- 从源于强势文化的先验概率开始。提出一个先前的信念本质上是主观的,是基于经验的。但是你可以避免群体思维的问题,并且建立一个更强的假设,如果你的先验概率来自不同的团队,就人口统计学和技能集而言;自由独立思考和说话;分散的,可以看到地面的情况。
- 从事试错。改进模型的方法是测试、从经验中学习并随着时间的推移不断迭代。最初,学习曲线很陡,你进步很快。但是“当你处于一个竞争的环境中…你通过相对边际和增量收益获得竞争优势,”西尔弗说。天气预报员在预测方面比其他领域做得更好的原因之一是,他们每天都在练习,并不断地将输入反馈到他们的算法中。但是试错法有其局限性:当错误的*似可能导致危机时,需要更多的时间来完善你的模型。
有了正确的流程,数据科学领导者就有机会在大数据时代铺*前进的道路。谈到数据科学,“我们并没有处于黑暗时代,”西尔弗说。“我们处在一个发现的时代。”
黑人的命也是命
By Natalie McCullough, President & COO, Domino on June 19, 2020 in Company Updates
作为一家公司,我们感到痛苦、沮丧和其他复杂情绪的混合,以应对我们在过去几周看到的令人震惊的种族主义表现。我们已经就我们作为一个组织能够和将要做什么来推动变革进行了几次内部讨论。
达美乐的核心价值观之一是“求真,讲真话”。因此,我们想公开宣布达美乐对黑人的命也是命的支持,以及我们对需要发生的变化的支持。
我们还决定作为一家公司采取具体行动,尽我们所能来改善这种情况。首先,作为一套原则,我们希望采取具有最大影响力、与我们的价值观一致并且我们能够长期坚持的行动。牢记这些原则,我们认为多米诺可以通过两种主要方式为打击系统性种族主义做出有意义的贡献。
第一个也是最直接的行动是确保 Domino 是一个多样化、包容和公*的组织。世界需要发生的变化从我们个人开始,从 Domino 作为一个组织开始。我们是我们领域的领导者,我们也有机会成为这方面的领导者。具体而言,我们承诺实施以下内容:
- 到第三季度末,所有职位都有不同的招聘小组
- 在 Q2 和第三季度,Domino 增强了面试官培训
- 针对代表性不足的少数族裔,在工作公告板上张贴多米诺角色
- 在历史上的黑人学院和大学进行有针对性的校园招聘
- Domino 员工多元化指标的透明度,包括我们的位置和目标
其次,作为一个企业数据科学*台,我们有一个独特的机会来提供一个环境,让数据科学家可以用来分析犯罪和执法统计数据。就像我们为新冠肺炎研究提供的环境一样,我们可以使用我们独特的技术产品,让公众更容易获得犯罪和执法统计数据,并鼓励使用数据来推动政策和其他决策,从而改善现状。我们计划在接下来的几周内推出这一产品,并已要求我们的员工帮助实现这一目标。
我们还想对致力于在全球范围内消除种族主义的组织表示我们的财政支持。达美乐的高管团队已经个人出资 5000 美元,以匹配员工对致力于多样性、*等和包容(DEI)的非营利组织的贡献,即克服种族主义和支持当地社区行动。捐款最多可匹配 100 美元,直到用完为止。
最后,我们将今天定为全球公司休息日。六月二十一日是美国废除奴隶制历史上的重要一天,尤其是今年,在世界许多地方,这是一个有计划的社区行动日。我们鼓励员工利用这段时间进行反思,并在一天中抽出一部分时间来了解或采取行动打击社区中的系统性种族主义。
这不是将要完成的一切,而是我们承诺的旅程的开始。请继续向我们提供反馈和想法,并请相信我们致力于使 Domino 成为一个所有种族、性别和背景的人都能茁壮成长的组织。
法国巴黎银行卡迪夫:在变化的世界中创新
原文:https://www.dominodatalab.com/blog/bnp-paribas-cardif-innovating-in-a-changing-world
我们都面临着这个问题:需要做得更多、更快。
作为保险业的主要参与者,法国巴黎银行卡迪夫银行希望加快每一次客户互动——从签发保单和处理索赔到了解他们的反馈——以满足不断变化的客户期望。我们需要加快新产品的交付,以在不断变化的时代保护我们的客户。我们需要在快速识别和管理风险及法规遵从性的同时做到这一切。对于我们的数据科学团队来说,这要求我们提高我们的 模型速度 以加速我们工作的每一个部分,从模型研发到部署并持续改进那些模型。
数据科学黑客马拉松,或数据挑战,一直被认为是激发创造力和协作的工具。在 BNP Paribas Cardif,我们对员工进行内部和集团范围的数据挑战。去年,我们在拉丁美洲的同事甚至与来自智利、哥伦比亚、墨西哥和秘鲁的大学和合作公司的 100 名数据科学家一起举办了首次外部虚拟数据挑战赛。
在我们最*的数据挑战赛中,我们举办了一场雄心勃勃的全集团数据挑战赛,在为期三天的比赛中,来自法国巴黎银行集团的 70 名数据科学家齐聚一堂,以团队合作的方式解决了一项复杂的业务挑战。
本次数据挑战赛由 与法国巴黎银行零售银行&服务数据&分析团队联合举办,负责挑战设计,NiCKEL 负责数据和业务案例。NiCKEL 拥有超过 6500 个销售点,是法国第二大客户分销网络,为 250 万客户提供服务。作为一项业务挑战,他们要求团队使用高级自然语言处理(NLP)技术分析真实世界客户的逐字文本记录,以便查明主题、观点和推动每个客户体验的因素。我们很高兴提议由我们的技术专家来主持这次挑战。我们基于 Domino *台的 设置允许我们为每个团队提供图形处理单元(GPU ),使数据科学家能够探索最先进的基于目标的情感分析 模型 需要这种级别的强大计算资源。
完成这样的挑战,三天时间并不算长。在黑客马拉松这么短的时间内必须创新,这为如何管理数据科学项目以在我们的日常工作中更快地创新提供了几个重要的提醒。
简单胜过复杂
像这样的复杂挑战通常需要复杂的解决方案。在数据科学中,我们的倾向可能是深入研究,从一开始就映射所有的特性和功能的想法,这应该使我们能够预测最准确的答案。然而,获胜的团队通过一步一步地构建他们的解决方案,从几个关键功能开始,在仪表板上可视化这一早期工作,然后一点一点地升级它,从而产生了最佳结果。那些以更复杂的解决方案开始的团队通常很难实现它。
团队合作必须超越个人团队
法国巴黎银行集团是一个分布式组织,拥有十多个业务实体,分属于三个主要业务领域——商业和个人银行及服务;投资和保护服务;和企业机构银行业务。来自法国巴黎银行不同实体的代表参加了此次数据挑战,其中许多人之前从未见过面。在为期三天的比赛中,团队可以使用 Domino *台在代码上进行合作,并迅速利用彼此的想法来推动可能的极限。在我们在巴黎银行卡迪夫的日常工作中,我们的 100 名数据科学家每天都使用 Domino 来分享他们的工作,所以我们并不总是从零开始。这种合作还可以加强我们的数据科学社区,为数据科学家创造职业流动机会,并留住员工。
快速创新需要快速迭代
对于测试许多不同理论的团队来说,他们必须能够快速轻松地扩展他们所需的计算资源。这是我的团队和我们的 IT 同事被要求支持这项挑战的原因之一。在 BNP Paribas Cardif 中,我们使用 DominoEnterprise MLOps platform作为我们的工作台。它使我们的数据科学家只需点击几下鼠标,就能启动他们需要的工具和计算,因此他们可以更快地迭代更多想法,并在更短的时间内构建、部署和重新训练模型。这帮助我们更快地取得进展,变得更加人工智能驱动。今天,我们有数百个项目在 Domino 上运行——从最初的勘探到工业开发和生产。对于数据挑战,我们与我们的 IT 部门合作,让 40 个 GPU可用,每个团队一个。使用 Domino *台,参与者可以很容易地访问 GPU 来测试他们的想法。高性能计算的使用一直是我们战略的核心,使我们能够利用先进的人工智能技术,如最先进的自然语言处理。
全速前进
我们已经在计划下一次数据挑战,这次挑战将和上次挑战一样雄心勃勃,这样我们的专家就可以继续提高他们在高级数据科学方面的技能。对于即将到来的挑战,BNP Paribas Cardif 将提供*台(使用 Domino 提供对 GPU 的访问)和业务挑战,与我们的二手手机盗窃和损坏保险相关。该保险产品旨在延长设备的生命周期,并对环境产生积极影响。我们将要求参与者使用最先进的计算机视觉技术来评估二手智能手机屏幕的照片。面对这一挑战,我们可能会提出新的服务来改进订阅和索赔流程。这是我们路线图上的众多用例之一。
我们都面临着做得更多、更快的需求。追求如此雄心勃勃的数据挑战有助于我们评估我们作为一个群体的现状,并提醒我们我们已经有能力做什么。
了解更多信息
-
观看法国巴黎银行 Cardif 的 Sebastien Conort 在他的演讲中分享他们如何使用 Domino *台开发和管理其人工智能算法,“ 催化您的转型,感谢模型风险治理 。”
-
访问 法国巴黎银行 Cardif 网站 ,看看法国巴黎银行是如何让保险变得更容易获得的。
-
阅读 Forrester 报告, “多米诺企业 MLOps *台的总体经济影响”, 了解更多关于多米诺提供的价值。
将机器学习引入农业
原文:https://www.dominodatalab.com/blog/bringing-ml-to-agriculture
在气候公司,我们的目标是帮助农民更好地理解他们的经营,做出更好的决策,以可持续的方式提高他们的作物产量。我们开发了一个模型驱动的软件*台,名为 Climate FieldView ,它可以为农民捕获、可视化和分析大量数据,并提供新的见解和个性化建议,以最大限度地提高作物产量。FieldView 可以整合特定于种植者的数据,例如从特殊设备流入的历史收获数据和操作数据,包括安装在拖拉机、联合收割机和其他农业设备上的(我们的 FieldView Drive )。它整合了公共和第三方数据集,如天气、土壤、卫星、海拔数据和专有数据,如我们从母公司拜耳获得的杂交种子的遗传信息。
通过我们的*台,农民可以了解特定施肥策略的影响,并根据需要进行调整。他们可以更早地发现潜在的问题区域,比如一块受到作物病害影响的土地,这样他们就可以迅速采取行动。农民可以确定他们应该在农场的哪个区域种植哪些种子,以获得每英亩的最大收益。
这些建议不仅对农民的钱包有好处;它们对环境也有好处。例如,我们的模型可以向农民展示如何在使用更少化肥的同时提高产量。
加速农业知识的获取
将机器学习引入农业领域是相对较新的事情。为了实现农业的数字化转型,我们必须在整个模型生命周期中快速试验和学习。为此,我们制定了公司战略和架构,以加速从概念到商业化的整个模型流程。
^(图 1:模型生命周期)
- 数据 -为公司的数据资产带来结构和组织,以支持 EDA(探索性数据分析)
- 特性工程 -通过一套可重用的工具、库和基础设施,在整个公司范围内创建、共享和发现特性。
- 模型构建 -高效、有效地训练和验证大规模模型
- 执行 -通过尽快完成从发现到生产的过渡,深入了解客户的想法
- 监控 -确保模型的行为符合预期,并了解何时需要改进
本文主要关注加速模型开发。
加速机器学习模型开发围绕两个主要因素:获取新知识的能力和发现他人产生的知识的能力。通过使发现新的见解和利用他人的见解变得简单和容易,网络效应被创建以加速未来的发现。
我们进行的每个实验、生成的每个功能和构建的每个模型都必须是公司的每个科学家都可以发现和使用的。其次,由于我们必须汇集的数据的多样性和数量,从种子的基因组、天气、土壤类型、管理实践、卫星和无人机图像(见图 2)的一切。)-数据和培训基础设施必须灵活、可扩展,同时消除不会增加知识获取周期的耗时任务。我们的目标是让数据科学家成为数据科学家,而不是数据或基础架构工程师。
^(图 2:气候公司的各种数据)
我们选择利用 Domino Data Lab、Amazon Web Services (AWS)和开源社区的最佳特性来解决这个知识加速问题。
Domino 擅长可用性和发现
在 Climate Corporation,我们采用了预构建的 Domino 容器,并将其扩展到我们的环境中。从身份和访问管理(IAM)策略到通用包安装,再到 Amazon EMR 上 Spark 的连接,一切都可供科学家使用。只需点击一个按钮,他们就有了一个准备就绪的环境,Domino 为科学家提供了一个简单的扩展点来定制环境,而不需要了解 Docker 的复杂性。
多米诺在再现性和发现性方面大放异彩。一个项目的每一次运行都被记录和调用。实验和协作是该*台的核心。然而,真正的知识加速是通过发现*台上其他人的研究来实现的。通过简单的关键字搜索,科学家可以扫描项目、文件、合作评论、以前的运行、用户创建的标签等,以找到其他相关的研究或主题专家。
亚马逊 Sagemaker、亚马逊 EMR 上的 Spark 和 Petastorm speed 知识获取
如前所述,我们的领域包含大量各种形状和大小的数据,我们需要一种能够处理这种复杂性和规模的数据格式和培训*台。我们希望这个*台简单,能够与多种框架和我们现有的基础设施协同工作。我们需要一个“可进化架构”,它将与下一个深度学习框架或计算*台一起工作。模型框架的选择或者在 1 台机器或 50 台机器之间的选择不需要任何额外的工作,对于科学家来说应该是相对无缝的。同样,一组特性应该可以被其他框架和技术重用,而不需要昂贵的格式转换。
为什么是 Sagemaker?
- 准备运行和可扩展的培训容器
如果您曾经尝试从头构建 TensorFlow 环境,您就会知道让所有依赖项和驱动程序的正确版本正常工作是多么困难。现在我们可以简单地选择一个预建环境或者甚至扩展一个容器来添加petastom或者其他库,就像我们在这里做的那样。
- 即时培训基础设施
通过简单地更改对 SageMaker 的 API 调用中的配置,您可以创建具有不同 CPU、GPU、内存和网络容量组合的培训基础设施,从而为您提供选择适当资源组合的灵活性。这种能力提高了运营管理的效率,优化了实验成本。
并行尝试超参数的多种组合而不是串行执行这些测试的内置能力通过提高实验效率极大地加速了模型构建过程。
为什么是 Petastorm?
我们的科学家和团队熟悉在 Spark 中处理 EMR,以及使用我们现有的功能存储和数据仓库中的数据。Petastorm 使创建可互操作的数据集变得容易,这些数据集可以用于多种目的,而不必学习一套新的工具或以多种格式编写数据集(即 TFRecord 和 Parquet)。通过在 parquet 上创建一个薄层,Petastorm 数据可以用于 Spark SQL 查询或在深度学习培训工作流中工作,无需修改。因为它是 parquet,我们获得了 parquet 的所有好处,包括自描述模式和 IO 优化。为了全面了解 Petastorm 的好处,请查看这个博客。
把所有的放在一起
下面是使用 Domino、Petastorm 和 SageMaker 并使用 MNIST 数据集的示例工作流的摘录。完整示例可在此处获得。
- 在 Domino 中创建一个项目并启动一个工作区:
- 创建我们的 Petastorm 功能:
|
# Get training and test data
if mnist_data is None:
mnist_data = {'train': download_mnist_data(download_dir, train=True),
'test': download_mnist_data(download_dir, train=False)}
# The MNIST data is small enough to do everything here in Pythonfor dset, data in mnist_data.items():
dset_output_url = '{}/{}'.format(output_url, dset)
# Using row_group_size_mb=1 to avoid having just a single rowgroup in this example. In a real store, the value
# should be similar to an HDFS block size.
with materialize_dataset(spark, dset_output_url, MnistSchema, row_group_size_mb=1):
# List of [(idx, image, digit), ...]
# where image is shaped as a 28x28 numpy matrix
idx_image_digit_list = map(lambda idx_image_digit: {
MnistSchema.idx.name: idx_image_digit[0],
MnistSchema.digit.name: idx_image_digit[1][1],
MnistSchema.image.name: np.array(list(idx_image_digit[1][0].getdata()), dtype=np.uint8).reshape(28, 28)
}, enumerate(data))
# Convert to pyspark.sql.Row
sql_rows = map(lambda r: dict_to_spark_row(MnistSchema, r), idx_image_digit_list)
# Write out the result
spark.createDataFrame(sql_rows, MnistSchema.as_spark_schema()) \
.coalesce(parquet_files_count) \
.write \
.option('compression', 'none') \
.parquet(dset_output_url)
|
- 使用五台机器在 SageMaker 上训练:
|
kwargs = dict(entry_point=entry_point,
image_name=IMAGE_NAME,
role=IAM_ROLE,
sagemaker_session=sagemaker.Session(boto_session=boto_session),
train_instance_count=5,train_instance_type='ml.m5.xlarge',
framework_version='1.13',
hyperparameters={'dataset-url': DATASET_URL,'training_steps': training_step_count,'batch_size': batch_size,'evaluation_steps': 10,},
py_version = 'py3',
output_path = output_path,
code_location=code_location,
distributions={'parameter_server': {'enabled': True}})
mnist_estimator = TensorFlow(**kwargs)
# we're bypassing the conventional sagemaker input methods because we are using petastorm. We will show this in a moment.
mnist_estimator.fit(inputs=None)
|
- 我们的 entry_point 脚本的关键部分,在这里我们读取 petastorm 数据集并将其转换为张量。
|
def streaming_parser(serialized_example):
"""Parses a single tf.Example into image and label tensors."""
# 28 x 28 is size of MNIST example
image = tf.cast(tf.reshape(serialized_example.image, [28 * 28]), tf.float32)
label = serialized_example.digit
return {"image": image}, label
def _input_fn<(reader, batch_size, num_parallel_batches):
dataset = (make_petastorm_dataset(reader)
# Per Petastorm docs, do not add a .repeat(num_epochs) here
# Petastorm will cycle indefinitely through the data given `num_epochs=None`
# provided to make_reader
.apply(tf.contrib.data.map_and_batch(streaming_parser,
batch_size=batch_size,
num_parallel_batches=num_parallel_batches)))
return dataset
|
- 运行的结果自动保存在我的 Domino workspace 中,以实现可重复性,模型保存到亚马逊 S3,以便以后由我们的基础设施堆栈的其他部分推广到生产中。
下一步是什么?
通过遵循这种使基础设施与模型生命周期保持一致的模式,并通过数据、特性、模型和实验的民主化来关注加速知识获取过程,我们已经能够快速增加部署模型的数量以及年复一年部署它们所需的时间。对我们来说,下一个大胆的步骤将是减少围绕组合各种类型的时间、空间和非空间数据的特征工程挑战,以便我们的科学家在训练模型中使用。一旦创建了训练集,我们就有了在模型上快速迭代的基础设施,但是我们希望进一步从数据科学家的角色中消除数据工程任务,让他们成为数据科学家。
附加链接
构建高吞吐量的数据科学机器
原文:https://www.dominodatalab.com/blog/building-a-high-throughput-data-science-machine
气候公司的埃里克·安德列科对流程和文化的见解
这篇文章最初发表在奥赖利雷达博客上。
缩放很难。扩展数据科学非常困难。运营一个复杂的数据科学组织需要什么?当您扩展到可重复、高吞吐量的数据科学机器时,您需要考虑哪些事情?
气候公司的科学副总裁埃里克·安德列科多年来一直专注于这个问题,建立和发展多学科数据科学团队。在本帖中,我们让你深入了解他认为对继续为他的组织建立世界级团队至关重要的是什么。最*,我与 Erik 讨论了数据科学的实践、组织的扩展以及数据科学项目的关键组件和最佳实践。
我们还谈到了 2016 年数据科学家必备的技能— 它们可能不是你所想的那样。
我鼓励您观看完整的采访—我们涵盖了广泛的主题,这是一次关于如何将数据科学提升到一个新水*的有趣对话。下面是我想强调的一系列谈话要点。
科学有一个再现性的问题。
众所周知,科学存在可重复性问题。最*的一项研究表明,药物研发项目中* 90%的研究无法重现。鉴于现代数据科学管道的复杂性质,再现性是一项要求,而信任结果和生成结果的流程的能力对于寻求超越简单模型的组织来说至关重要。
支持大规模的组织需要您能够信任他人的工作,并依赖它来重用和扩展。埃里克·安德列科
Erik 和我谈到了数据科学过程在信任方面具有分形自相似性的一些有趣方面。Erik 注意到,在探索性数据分析过程中,您正在建立对数据的信任,这使您有信心使用它来建立模型。Erik 和我讨论了这对数据科学组织意味着什么,包括关注信任、自动化和可再现性。
https://player.vimeo.com/video/159147612?title=0&byline=0&portrait=0
好的数据科学需要过程。
在我帮助组织的聚会中,我听到许多数据科学家抱怨他们组织中的正式流程制度。社区中有一种信念,认为流程会扼杀创新,并试图“控制和测量”数据科学家。任何人都不应该忽视数据科学家不希望被跟踪和衡量的讽刺意味,因为他们处于一个特权地位,知道被跟踪的东西会受到怎样的影响。不管你喜不喜欢,扩展组织需要额外的过程,但是并不是所有的过程都是不好的!
我看到它以错误的方式完成——没有过程——它肯定没有人们希望的那么快。尤其是你解错题的时候。埃里克·安德列科
Erik 和我讨论了正式流程在数据科学中的作用。尽管已经有许多创建行业标准和特定于供应商的流程框架的尝试,如 CRISP-DM 和 SEMMA,但数据科学并没有一系列占主导地位的方法。数据科学中没有一个过程像敏捷之于软件工程或精益之于制造。一个好的过程会让你走得更快,并有更高质量的结果。在这个片段中,Erik 和我讨论了 process 如何支持良好的数据科学,以及它如何帮助捕捉常见错误。
https://player.vimeo.com/video/159147624?title=0&byline=0&portrait=0
有许多方法可以将数据科学家整合到一个组织中。
数据科学家属于组织中的哪个部门?如果你和 10 家公司谈论他们如何组织他们的数据科学家,你会得到 11 个不同的答案。事实是,大多数组织都有出于“历史原因”组织起来的数据科学家数据科学家在实施数据战略时所处的位置,对于如何让数据科学家能够跨越障碍提供对关键数据的访问,没有给予足够的考虑。
卓越中心模型提供了跨团队的协调,但仍然给你专业化的好处。埃里克·安德列科
拥有一名数据科学家的组织通常会让他们自由漫游,为项目提供建议。然而,这种方法很难规模化。从分析部门,到嵌入式,再到卓越中心,对于将数据科学家整合到业务中的正确方式,还没有达成共识。在这个片段中,Erik 和我讨论了不同的方法,以及我们所看到的可行和不可行的方法。
https://player.vimeo.com/video/159147607?title=0&byline=0&portrait=0
无需等待即可将模型投入生产。
组织面临的最大挑战之一是让模型足够快地投入生产。在 Domino Data Lab,我们经常听到潜在客户讲述从数据科学团队生成模型到工程团队部署模型之间 12 到 18 个月的时间表。数据工程师和数据科学家之间的这种任务划分,是试图采用基于数据的方法的组织的基本障碍之一。当您意识到模型的输出只是更多的数据时,问题就变得更加复杂了。
最终,商业价值来自于[模型]的部署。部署前的时间越长,实现商业价值的时间就越长。如果你用净现值来衡量的话,折扣会更大。埃里克·安德列科
组织如何管理这些复杂的管道并保护自己免受谷歌论文机器学习:技术债务的高息信用卡中概述的危险?Erik 和我讨论了数据工程和数据科学之间的连续性,以及促进这些功能之间的协作如何能够提供令人惊讶的好处。
https://player.vimeo.com/video/159147613?title=0&byline=0&portrait=0
将“科学”融入数据科学。
Erik 在圣何塞 Strata+Hadoop World 大会上的演讲将更详细地介绍气候公司如何将科学研究中的最佳实践整合到其数据科学工作中。Erik 将描述团队从应用这些最佳实践中获得的好处,以及在他们的组织中采用它们时可能遇到的挑战。
访问气候职业了解更多关于气候公司数据科学职业的信息。
建立说话人识别模型
原文:https://www.dominodatalab.com/blog/building-a-speaker-recognition-model
系统通过声音识别一个人的能力是一种收集其生物特征信息的非侵入性方式。与指纹检测、视网膜扫描或面部识别不同,说话人识别只是使用麦克风来记录一个人的声音,从而避免了对昂贵硬件的需求。此外,在疫情这样的表面可能存在传染病的情况下,语音识别可以很容易地部署在涉及某种形式接触的其他生物识别系统的位置。现有的身份认证应用包括:
- 信用卡验证,
- 通过电话安全进入呼叫中心,
- 通过声音识别嫌疑人,
- 利用声音定位和追踪恐怖分子来打击恐怖主义的国家安全措施
- 在远程位置检测讲话者的存在
- 音频数据中说话人的注释和索引
- 基于语音的签名和安全的楼宇访问
说话人确认系统概述:
说话人确认是更广泛的说话人识别任务中的一个子领域。说话人识别是通过声音来识别说话人的过程。说话人的识别通常是以下使用情况之一所需要的:
-
说话人识别 -给定一个现有的说话人列表,将一个未知说话人的声音分配给列表中最接*的匹配。这里的系统将通过某种有意义的感觉来识别话语与哪个现有说话者的模型相匹配。例如,将生成一个对数概率列表,并且具有最高值的讲话者(在现有讲话者列表中)将被分类为说出“未知”话语的讲话者。
- 这个用例的一个可能的应用是识别音频会议室的单个成员发言的时间戳。
- 如果未知话语是由现有说话者列表之外的说话者说出的,则该模型仍然会将其映射到该列表中的某个说话者。因此,假设传入的语音 具有 来自现有列表中存在的说话者。
-
说话人验证 -给定一个说话人模型,系统验证输入的语音是否来自训练该模型的同一说话人。它决定了个人是否是他们所声称的那个人。
- 这个用例的一个可能应用是使用说话者的声音作为生物认证令牌。
重要注意事项:
-
虽然个人的声音可以被克隆,但声音生物特征的目的是作为多因素认证方案中的“因素”之一。
-
虽然存在更先进的说话人确认模型,但本博客将构成语音信号处理的基础。此外,深度学习方法建立在信号处理的基础上。神经网络的输入应该是从语音信号中提取的特征(MFCCs、LPCCS、40-log mel 滤波器组能量),而不是整个语音信号。
-
在这个项目中,我们关注第二个用例。因此,我们的目标是通过他们的声音来验证一个人,前提是他们以前在系统中注册过。
说话人确认的一般流程包括三个阶段: 开发注册确认 。
-
开发是学习与说话人无关的参数的过程,这些参数是捕获特定语音特征所需要的。在开发期间,UBM(通用背景模型)训练发生在通过大样本说话人来学习说话人独立参数的情况下。
-
登记是学习说话者声音的独特特征的过程,并且用于在验证期间创建声称的模型来代表登记的说话者。这里,说话者声音的独特特征被用于创建特定于说话者的模型。说话者说话持续一段时间(通常约 30 秒),在此期间,系统会模拟他的声音并将其保存在一个. npy 文件中。
-
在验证中,将声明者的声音的独特特征与先前登记的声明说话者模型进行比较,以确定声明的身份是否正确。这里,将讲话者的输入音频与先前保存的讲话者模型进行比较。
说话人确认通常以两种方式进行
-
TISV -(文本独立说话人验证)-语音的词汇和语音内容没有限制,说话人在注册和验证期间可以说出任何短语或句子。
-
TDSV -(文本相关说话人验证)-语音的词典和语音内容受到限制,并且如果用于登记的词典用于验证,则系统只能返回登记和验证之间的匹配。
使用的方法和算法:
-
如果您不熟悉数字信号处理的基础知识,强烈建议您阅读信号处理基础知识。
-
I 向量是在注册和验证期间从语音话语中提取的嵌入或向量。正是基于这种嵌入来评估余弦相似性,以预测登记和验证话语中说话者之间的匹配或不匹配。
-
为了理解 i-Vector 方法,深入研究 GMM(高斯混合模型)是必要的。自然界中随机变量的许多概率分布可以建模为高斯分布或高斯混合分布。它们是很好理解的,并且参数估计是迭代完成的。GMMs 作为一种生成方法,有效地为说话人确认系统建模说话人,在说话人确认系统中,返回输入话语是由训练的高斯生成的概率。GMM 的参数是高斯*均值、协方差和混合物的权重。
M 个分量高斯密度的加权和的 GMM,如下式所示
$ $ \ begin { equation } p(x | \ lambda)= \sum_{k=1}^{m} w _ { k } \乘以 g(x|\mu {k},\Sigma )\end{equation}$$
其中(x)是一个 D 维特征向量(在我们的例子中是 39 维 MFCCs),(w_{k},\mu_{k},\适马 _ { k };k = 1,2,...........M),是混合权重、均值和协方差。(g(x | \mu_k,\适马 _k),k = 1,2,3.........M)是分量高斯密度。
每个分量密度是一个 D 变量高斯函数,
$ \ begin { equation } g(\ \ boldssymbol { x } | \ boldssymbol } _ k,\ boldssymbol } _ k)= \ left[1 \ mathbin {/} \ left(2 \ mathbin {/} 2 } \ right)\ text \ { exp } \ \ 0.5(\ \ boldssymbol { x }-\ boldssymbol } _ k })} \ end { equation } $)
其中均值向量(\boldsymbol{\mu}k)和协方差矩阵(\boldsymbol{\Sigma}),混合权重满足约束( \sum_{k=1}^M w_i = 1)。完整的 GMM 由来自所有分量密度的*均向量、协方差矩阵和混合权重来参数化,并且这些参数共同表示为(\lambda = {w_k,\boldsymbol{\mu}k,\ bold symbol { \适马} },k = 1,2,3.........M )。
期望最大化
-
期望最大化(EM)算法基于最大化训练数据的期望对数似然来学习 GMM 参数。
-
随机变量相对于分布的期望值是求和(离散分布)或积分(连续分布)到无穷大时的算术*均值。
-
对于未知参数的给定值,似然函数测量统计模型与数据样本的拟合优度。在这种情况下,均值、方差和混合权重。它由样本的联合概率分布形成。
-
EM 算法的动机是使用训练话语特征从当前模型估计新的和改进的模型,使得新模型生成训练特征的概率大于或等于旧模型。这是一种迭代技术,新模型成为下一次迭代的当前模型。
$ $ \ begin { equation } \prod_{n=1}^n p(\ bold symbol { x } _ n | \ lambda)\ geq \prod_{n=1}^n p(\ bold symbol { x } _ n | \lambda^{\text{old}})\ end { equation } $ $
当输入的提取特征即 MFCCs 具有潜在变量时,最大似然估计 GMM 参数。EM 算法通过选择随机值或初始化来寻找模型参数,并使用这些参数来推测第二组数据。
k 均值算法用于迭代初始化 GMM 参数,其中通过评估混合均值来执行 MFCCs 特征向量的混合。
电子步骤
$ $ \ begin { equation } p(k | \ bold symbol { x })= \ bold symbol { w } _ k g(\ bold symbol { x } | \ bold symbol { \ mu } _ k,\ bold symbol { \ sigma } _ k)\ mathbin {/} p(\ bold symbol { x } | \lambda^{\text{old}})\ end { equation } $ $
最大化导致 GMM 参数被估计
m 步
$ \ begin { aligned } \ boldssymbol { w } _ k & =(n _ k \ mathbin {/} t)∞p(k | \ boldssymbol { x } _ n })\ \【t 0 } \ boldssymbol } \ mu } _ k }&=(1 \ mathbin {/} n _ k)?\ p(k | \ boldssymbol { x } _ n })\ boldssymbol { x }
因此,我们评估了 GMM 的三个参数,即权重、均值和协方差。
UBM(通用背景模型)培训
在典型的说话人确认任务中,由于可用于训练说话人模型的数据量有限,所以不能使用期望最大化以可靠的方式直接估计说话人模型。由于这个原因,最大后验概率(MAP)自适应经常被用于训练说话人确认系统的说话人模型。这种方法从通用背景模型中估计说话人模型。UBM 是一种高阶 GMM,在从感兴趣的说话人群体的广泛样本中获得的大量语音数据上进行训练。它被设计成捕捉说话者模型的一般形式,并表示与说话者无关的特征分布。使用 EM 算法来估计 UBM 参数。
-
GMM 所基于的低层特征是 MFCCs。此外,在 GMM-UBM 模型中,MFCC 声学特征被用作输入特征。GMM *均超向量是 GMM *均向量的串联。I 向量方法提供了高维 GMM 超向量和传统低维 MFCC 特征表示之间的中间说话人表示。
-
注册过程包括从说话者注册过程中的 30 秒长的话语中提取的 I 向量。这个 I 向量作为说话者模型保存在数据库中。稍后在验证期间,通过余弦相似性得分,将从测试话语(大约 15 秒长)中提取的 I 向量与登记的 I 向量进行比较。如果该分数超过阈值,则它被声明为匹配或不匹配。
资料组
用于语音处理的一些流行数据集是 LibriSpeech、LibriVox、vox Cele 1、vox Cele 2、TIMIT 等。
本演示中用于预训练 UBM 的数据集是 VoxCeleb1。该数据集文件分布如下:
验证分割
| vox Cele 1 | 开发 | 测试 |
| 、扬声器数量 | One thousand two hundred and eleven | Forty |
| 、视频数量 | Twenty-one thousand eight hundred and nineteen | Six hundred and seventy-seven |
| 、话语数量 | One hundred and forty-eight thousand six hundred and forty-two | Four thousand eight hundred and seventy-four |
基于名为关于说话人确认中通用背景模型训练的研究的论文,可以基于来自大约 60 个说话人的数据,即大约 1.5 小时长的数据来训练 UBM。预训练模型基于说话者的这个子集。
上述数据集远远超过所需的说话人数量,已被用作评估说话人确认性能的基准数据集。
由于 UBM 的培训甚至是针对部分演讲者的培训也需要一段时间,因此在本博客中展示了针对 5 位演讲者的培训。相同的代码可以用于更多的扬声器。
模型实现
从子集 VoxCeleb1 提取 MFCCs 并训练 iVector 提取器
-
对于这个博客的范围,来自 dev 的 5 名测试人员和来自 test 的 5 名测试人员来自 VoxCeleb1 数据集。UBM 训练,I 向量训练是在 dev 集上执行的。测试集用于评估模型性能指标。实际上,用于训练 UBM 的扬声器数量要高得多。
-
无声检测 - 包含人类语音的. wav 文件通常由语音和无声片段组成。提取的 MFCCs 应该来自检测到话音活动/语音活动的语音帧,而不是无声段。如果 MFCCs 是从来源于无声段的帧中提取的,则不是目标说话人特征的特征将在 GMM 中建模。可以训练隐马尔可夫模型(HMM)来学习语音文件中的静音和语音片段(参考pyaudionanalysis)。为了训练 HMM,将语音段和静音段的时间戳馈送给模型。
-
鲍勃留下来
- MFCCs 由函数[4]提取
bob.kaldi.mfcc(data, rate=8000, preemphasis_coefficient=0.97, raw_energy=True, frame_length=25, frame_shift=10, num_ceps=13, num_mel_bins=23, cepstral_lifter=22, low_freq=20, high_freq=0, dither=1.0, snip_edges=True, normalization=True)
- 训练通用背景模型。通过以下函数[4]在 Voxceleb1 的 5 说话人开发集上训练 UBM 模型
对于全局对角 GMM 模型
bob.kaldi.ubm_train(feats, ubmname, num_threads=4, num_frames=500000, min_gaussian_weight=0.0001, num_gauss=2048, num_gauss_init=0, num_gselect=30, num_iters_init=20, num_iters=4, remove_low_count_gaussians=True)
全协方差 UBM 模型
bob.kaldi.ubm_full_train(feats, dubm, fubmfile, num_gselect=20, num_iters=4, min_gaussian_weight=0.0001)
- 训练 i-Vector (extractor) (dev)集-I-Vector 训练是通过使用 dev 集和 UBM 模型的 MFCC 特征来完成的。这导致来自语音发声的 600 维阵列/嵌入。用于训练 I 向量的函数是
bob.kaldi.ivector_train(feats, fubm, ivector_extractor, num_gselect=20, ivector_dim=600, use_weights=False, num_iters=5, min_post=0.025, num_samples_for_weights=3, posterior_scale=1.0)
- 提取 I 向量——一旦 I 向量训练完成,就可以通过下面的函数在任何语音上提取 I 向量。wav 文件[4]
bob.kaldi.ivector_extract(feats, fubm, ivector_extractor, num_gselect=20, min_post=0.025, posterior_scale=1.0)
模型性能
通过计算真阳性率(TPR)和假阳性率(FPR)在测试集上评估模型性能。TPR 和 FPR 按以下方式确定:
每个说话者都有一定数量的话语,与之对应的是 I 向量。I 向量通过余弦相似性得分相互比较。如果分数高于某个阈值,则说话者被认为是匹配的。匹配被归类为阳性,不匹配被归类为阴性。CSS 通过比较测试 I 向量(w_{\text{test}})和目标 I 向量(w_{\text{target}})之间的角度来工作
$ $ \ begin { equation } \ bold symbol { S }(\ hat { \ bold symbol { w } } _ { \ text { target })= \乐浪\ hat { \ bold symbol { w } } _ { \ text { target } },\ hat { \ bold symbol { w } } _ { \ text { test } } \ rangle \ math bin {/} \ left(| | \ hat { \ bold symbol { w } } _ { \ text { target } } | | \\\\\\\\\\\| | \ hat { \ bold symbol { w } } _ { \ text { test } } | | \ right)\ end { equation } $ $
在这种情况下,为每个说话者确定真阳性率和假阳性率,并计算总*均值。这反映了分类器的性能。
本文有一个附带的项目,包含数据和 Python 代码。此外,伴随项目的的 README.md 文件中的指令提供了关于下载预训练模型的指导,其中 UBM 针对更多数量的扬声器进行训练。正如所料,该模型的性能优于本博客中使用的较小模型。你可以通过注册一个 免费多米诺骨牌试用 来获得它。
参考文献:
【8】https://engineering . purdue . edu/~ ee 538/DSP _ Text _ 3rd edition . pdf【9】Kamil,Oday。(2018).帧分块加窗语音信号。4.87-94.***
为超级用户构建开放的产品
原文:https://www.dominodatalab.com/blog/building-an-open-product-for-power-users
这篇文章描述了我们构建“开放”产品的工程哲学,即支持现有工具和库的产品,而不是构建我们自己的现有功能的定制版本。除了让我们的开发人员更有效率,我们还发现这种方法让我们的用户更有效率——尤其是超级用户,他们对我们来说尤其重要。
构建开放式产品
Domino 是数据科学家的工作台:它允许你在可伸缩的基础设施上运行分析(用 Python、R、Julia 等语言),保持你的工作被跟踪和集中,因此它可以被容易地共享和复制,并且允许你通过 web 表单或 web 服务公开模型。
从一开始,我们就有意识地构建 Domino 来集成现有的语言、库和工具,而不是构建一种实现常用功能的专有方式。例如,我们没有建立一种新的方式来创建和共享可视化,而是让数据科学家使用现有的库,如matplotlib
或ggplot
或任何其他库,我们只是通过我们的 web 界面提供文件(HTML、javascript、图像等)。
从技术上讲,这种方法通过两个主要的架构决策体现出来:
我们在 Docker 容器中运行用户代码,这让他们可以灵活地做任何他们想做的事情。我们的默认环境包含对大多数语言(R、Python、Java、C/++、Julia、Matlab via Octave 等)的支持,如果用户需要其他东西,我们允许他们定制自己的环境。他们甚至可以安全地存储 VPN 凭证,因此他们的代码可以连接到他们自己的数据库。
一个项目和它的结果只是文件,我们知道如何通过 web 用户界面提供服务。没有专有的存储或输出格式;不需要使用特殊的 Domino 库或包。
这给了我们和我们的用户极大的灵活性,特别是在可视化能力方面。
例子
以下是我们在过去几个月中支持的一些使用案例:
-
使用 HTML 小部件和编织器实现交互式可视化。我们没有实现自己的可视化功能,而是能够立即使用一个新的 R 包
htmlwidgets
,它提供了强大的功能。类似地,与其从 R 中创建我们自己的报告生成/降价功能,现有的knitr
包就可以工作——而且工作得很好。 -
与 IPython Notebook 的集成—针对 Python 或 R(与 R Notebook )的集成。用户可以在他们想要的任何硬件上点击一下就启动笔记本会话。我们不需要发明或构建一个新的“交互式分析”用户界面。
-
与 Plotly 的集成。当我们看到 Plotly 与 IPython 笔记本一起工作时,很容易就可以在 Domino 上演示这种开箱即用的工作方式。现在,我们的任何用户都可以从 Plotly 的 Python 或 r 语言的交互式小部件中获益。
Knitr、htmlwidgets、IPython Notebook、Plotly——这些都是人们已经研究了多年的神奇工具,许多人已经在使用和喜爱它们。通过让用户将他们带到 Domino,而不是适应一些新的专有工作方式,我认为我们自己正在拥抱一种“站在巨人的肩膀上”的哲学——既然已经存在这样伟大的解决方案,为什么还要重新发明轮子。
利益
我们“开放”方法的好处是巨大的,体现在两个不同的方面。
首先,用户采用率和用户满意度更高,因为数据科学家可以灵活地使用他们已经知道并喜欢的库和工具。如果他们想制作漂亮的图表或报告,他们只需使用他们通常会使用的任何软件包。没有什么新东西需要学习——没有新的语言、语法或 UI。
用户喜欢这一点,而更老练的技术用户往往对此特别兴奋,因为他们有充分的自由去做他们需要做的事情。需要制作精确格式的报告?只需编写代码——不需要在一些受约束的 UI 中瞎折腾。
第二,工程能力和效率。在构建产品的早期阶段,工程团队需要非常积极地帮助用户解决他们的需求。通过灵活使用现有的库和工具,我们已经能够为用户提供满足他们需求的解决方案—快速且不消耗我们的工程资源。(除了前期开发时间之外,这还为我们节省了测试、文档和支持从工程角度来看通常微妙而复杂的功能所需的额外开发时间。)
这是一个双赢的局面:我们的工程师专注于我们产品的核心功能,发挥我们的比较优势;我们的用户可以使用他们喜欢的语言、工具和库。
如果我们选择开发自己的语言,或者可视化软件包,或者笔记本用户界面,或者降价/报告语法,我相信我们的用户会少得多,他们会更不高兴,我们会浪费工程时间来构建已经存在的东西。
不足之处
到目前为止,我认为我们方法的好处大于坏处——但是像所有的决定一样,这也不是没有缺点的。
第一个缺点是不熟练的/低技术的用户有更陡峭的学习曲线。Domino 通过编写代码为您提供了做任何事情的灵活性,但这意味着没有向导和简化的 ui 来控制复杂的功能。因此,Domino 不是一个“自动化数据科学过程”或让非技术用户构建丰富可视化的*台。换句话说,多米诺更像一把电锯,而不是安全剪刀。我们对此没意见——就目前而言——但这值得明确提出来。
第二个缺点是,我们必须容忍现有的第三方工具带来的缺点。可以肯定的是,如果我们开始从头开始构建一个新的交互式分析笔记本,我们可以想象出许多比 IPython 笔记本更好的方式。但与此同时,我们不希望完美成为美好的敌人——尤其是当美好已经存在,而完美需要很多年才能创造出来的时候。
结论
我们决定构建一个开放的产品,而不是为常见的分析用例(尤其是可视化)创建专有功能,这加速了我们用户群的增长以及我们工程团队的速度。我很难想象采取不同的方法,但我们看到许多产品选择构建自己的新方式来交付现有功能(例如,笔记本电脑)。
我们的方法在很大程度上也是我们使用软件组件的“购买与构建”哲学的延伸。如果现有的库或软件包提供了我们需要的功能,一般来说,我们更喜欢使用它,而不是自己构建(除非它是我们竞争优势的核心功能,我们需要完全控制它——在以后的帖子中会有更多关于这个主题的内容。)类似地,如果我们可以通过与现有解决方案集成来为用户提供完整的功能和特性,这似乎比构建我们自己的新特性更可取。
用 Dash 构建 Domino Web 应用程序
原文:https://www.dominodatalab.com/blog/building-domino-web-app-dash
Randi R. Ludwig ,戴尔 EMC 的数据科学家和ATX 数据科学女性的组织者,在这篇文章中介绍了如何使用 Dash 构建 Domino web 应用程序。
用 Dash 构建 Domino Web 应用程序
假设您是一名数据科学家,使用 Domino 作为您的探索和开发*台。你做了一个分析,突出了一些真正有用的结果!您知道,随着新数据的出现,您的团队将需要检查这一分析并探索结果。这是为您的分析和结果构建交互式界面的完美案例。
Dash 是一个用于构建交互式 web 应用的框架,特别有助于开发像仪表板这样的分析界面。R 用户有闪亮,Pythonistas 有破折号。Dash 是由 plot.ly 团队开发的,是基于 Flask 框架构建的,所以 Flask 在哪里工作,Dash 也应该在哪里工作。在提供交互式图形界面的同时,Dash 还提供了对许多功能的支持。如果你有兴趣了解更多,Dash 团队提供了优秀教程。想了解 Dash 能做什么的更多例子,请查看这套广泛的资源。
多米诺骨牌上的 Dash
要在 Domino 数据实验室中部署 Dash,您需要做一些事情。首先,您需要在启用 Python 的环境中安装 Dash 依赖项。截至 2018 年 1 月,您需要将以下命令添加到 Domino 环境的 Docker 文件中:
pip install dash==0.19.0 # The core dash backend
pip install dash-renderer==0.11.1 # The dash front-end
pip install dash-html-components==0.8.0 # HTML components
pip install dash-core-components==0.15.2 # Supercharged components
pip install plotly --upgrade # Latest Plotly graphing library
检查https://plot.ly/dash/getting-started的最新软件包版本。
Domino 应用程序框架
部署在 Domino 上的所有应用程序都使用通用的结构。虽然您的应用程序代码可以是您想要的任何代码,但是在您打算部署的同一个项目中,您需要包含一个 app.sh 文件。对于 Dash 应用程序,这个文件非常简单,只需要包含一行:
> python app.py
如果您在本地开发应用程序,您将使用相同的命令来运行该应用程序。(顺便说一下,在你的本地机器上开发一个应用程序来测试内容、界面等的许多调整。然后将 app.py 文件上传到 Domino 是一个很好的开发策略。)
Domino 的破折号设置
一旦您有了一个应用程序并准备在 Domino 上部署,与您在本地机器上的配置相比,在 app.py 文件中还需要三个额外的配置。首先,您必须让 Domino 能够找到您安装的 Dash 依赖项。默认情况下,Dash 会在“/”处的根文件夹中查找您的所有文件。因为 Domino 使用反向代理和子文件夹,所以您必须告诉 Domino 在当前工作目录中查找所有相关的文件和资源。为此,您需要为 Dash 提供所需的配置:
# Configure path for dependencies. This is required for Domino.
app.config.update({
#### as the proxy server may remove the prefix
'routes_pathname_prefix': '',
#### the front-end will prefix this string to the requests
#### that are made to the proxy server
'requests_pathname_prefix': ''
})
^(注意:此 app.config 语法仅适用于 dash 0.18.3 及更新版本。)
下一步是通过添加以下行使 Flask 服务器对 Domino web app 服务器可见:
# This enables the Flask server to be visible to the Domino server
server = app.server
最后,在 app.py 文件的末尾,您需要显式地包含 web 应用服务器的主机和端口。对于所有的 Domino 应用程序,这都是一样的。
# host & port need to be explicitly defined for Domino
if __name__ == '__main__':
#app.run_server() # if running locally
app.run_server(host='0.0.0.0',port=8888) # on Domino
有了这三个变化,您的应用程序应该可以在 Domino 上运行,并且对更广阔的世界可见!要在上下文中查看这段代码,请查看 my GitHub 。要了解更多关于在 Domino 上部署 Shiny 或 Flask 应用程序的信息,请查看文档。
建立模型是你工作中最不重要的部分
原文:https://www.dominodatalab.com/blog/building-model-least-important-part
在这个数据科学弹出式会议中,多米诺数据实验室的数据科学解决方案总监 Kimberly Shenk 解释了为什么构建模型是数据科学家工作中最不重要的部分,以及他们必须关注什么。
Buzzfeed 如何使用实时机器学习来选择他们的病毒内容
原文:https://www.dominodatalab.com/blog/buzzfeed-uses-real-time-machine-learning-choose-viral-content
这个演讲于 2016 年 9 月 14 日在加利福尼亚州洛杉矶的 Domino 数据科学弹出窗口举行。
在本演示中,Buzzfeed 数据产品总监简·凯利(Jane Kelly)讲述了这家流行的在线媒体公司如何在内容传播之前,使用实时机器学习来通知要推广的内容。
http://dominodatalab.wistia.com/medias/4d36gyinru?embedType=async&videoFoam=true&videoWidth=640
收听了解 Buzzfeed 开发的创新*台:
- 捕获数据,并将其传送到一个集中的中枢进行实时分析;
- 支持工程师、数据科学家和内容创作者之间的协作;
- 选择正确的功能,以确定应该翻译成其他语言的帖子;
- *衡快速实验和产品稳定性,并有效地向内部不同的消费者发布他们的数据。
Jane 演示的幻灯片可以在这里找到。
数据科学能帮助我们理解穆勒报告吗?
原文:https://www.dominodatalab.com/blog/can-data-science-help-us-make-sense-of-the-mueller-report
这篇博文提供了关于如何应用自然语言处理(NLP)技术的见解。
穆勒报告
穆勒报告,官方称为 关于调查 R 俄罗斯干涉 2016 年总统选举 的报告,最*发布,给了公众比他们可能预期的更多的空间来得出自己的结论。在这篇博文中,我们提出了这个问题:“数据科学能帮助我们理解穆勒报告吗?”
丹尼尔·卡内曼, Rev 主旨发言人,诺奖得主,思考,快与慢 的作者,指出:“我们对世界有意义的令人欣慰的信念建立在一个安全的基础上:我们几乎无限的忽略自己无知的能力。”以科学的方式收集和分析数据是战胜无知并得出自己结论的好方法。
顺便说一下,仍然有个海报时段为 Rev. Rev 开放,欢迎提交涵盖从这份重要报告中提取的 NLP 见解的海报。还有,有兴趣参加 Rev 的可以在报名时使用折扣代码 Rev2019_100。
应用自然语言处理(NLP)
让我们通过遍历项目的 R 文件 boilerplate.R 开始我们的分析。那些喜欢 Python 的人可以使用 Domino 启动 Jupyter 会话,并使用 Mueller Report.ipynb 访问 Python 入门。特别感谢 Garrick Aden-Buie 的 GitHub repo 提供的数据和一些数据科学同事提供的代码。
这里我们使用 R 及其 tidytext 和 tidyverse 库来开始我们的分析。首先,阅读通过这里的 R 代码预处理过的 csv 文件。处理后,每行代表报告中的一行文本。
install.packages(c('tidytext', 'wordcloud', 'ggraph'))
library(tidytext)
library(tidyverse)
library(stringr)
library(wordcloud)
library(igraph)
muller_report <- read_csv("mueller_report.csv")
接下来,加载我们将从要分析的单词总列表中排除的常见停用词的数据集。将“trump”和“intelligence”添加到自定义停用词列表中,我们将在以后需要时使用。
data("stop_words")
custom_stop_words <- bind_rows(data_frame(word=c("trump", "intelligence"),
lexicon=c("custom")),
stop_words)
通过 unnest_tokens()创建整洁的数据帧,该函数将带有文本列的数据帧转换为每行一个标记。也删除原来的停用词,并使用正则表达式过滤掉坏的行。
tidy_muller <- muller_report %>% unnest_tokens(word, text) %>%
anti_join(stop_words) %>%
filter(!str_detect(word, "^\\d+$"))
创建前 50 个单词的数据框架和单词云。
top_words <- tidy_muller %>% count(word, sort=TRUE)
top_words %>% with(wordcloud(word, n, max.words=50))
使用通用情感词典来获取报告中单个单词的情感,并显示排名靠前的负面和正面单词的图表。
bing_word_counts <- tidy_muller %>% inner_join(get_sentiments("bing")) %>%
count(word, sentiment, sort=TRUE) %>%
ungroup()
bing_word_counts %>%
anti_join(custom_stop_words) %>%
group_by(sentiment) %>%
top_n(10) %>%
ungroup() %>%
mutate(word=reorder(word, n)) %>%
ggplot(aes(word, n, fill=sentiment)) +
geom_col(show.legend = FALSE) +
facet_wrap(~sentiment, scales="free_y") +
labs(y="Contribution to sentiment",
x=NULL) +
coord_flip() + theme_minimal() +
ggtitle("Sentiment Analysis of Words in the Muller Report",
"Basic Single Word Method, using Bing Lexicon")
通过从原始 csv 文件开始并再次调用 unnest_tokens()来创建二元图。这一次使用 ngrams 选项和 n=2 来给出二元模型。删除原来的停用词,并再次使用 regex 过滤坏行。添加计数列。建立图表。
muller_bigrams <- muller_report %>%
unnest_tokens(bigram, text, token="ngrams", n=2) %>%
separate(bigram, c("word1", "word2"), sep = " ") %>%
filter(!word1 %in% stop_words$word) %>%
filter(!word2 %in% stop_words$word) %>%
filter(!str_detect(word1, "^\\d+$")) %>%
filter(!str_detect(word2, "^\\d+$"))
muller_bigrams_count <- muller_bigrams %>%
count(word1, word2, sort=TRUE)
bigram_graph <- muller_bigrams_count %>%
filter(n > 20) %>%
graph_from_data_frame()
bigram_graph
library(ggraph)
a <- grid::arrow(type="closed", length=unit(.15, "inches"))
ggraph(bigram_graph, layout="fr") +
geom_edge_link(aes(edge_alpha=n), show.legend=FALSE,
arrow=a, end_cap=circle(.07, "inches")) +
geom_node_point() +
geom_node_text(aes(label=name), vjust=1, hjust=1) +
theme_void()
接下来,我们通过页码来查看一个单词情绪的趋势。使用相同的单个单词情感词典,将每页的正面单词减去负面单词的总数相加,默认值为 0,并根据该页面的总数进行着色。
muller_sentiment <- tidy_muller %>%
anti_join(custom_stop_words) %>%
inner_join(get_sentiments("bing")) %>%
count(page,index = line %/% 80, sentiment) %>%
spread(sentiment, n, fill = 0) %>%
mutate(sentiment = positive - negative)
ggplot(muller_sentiment, aes(page, sentiment, fill=sentiment)) +
geom_col(show.legend = FALSE) +
xlab("Page Number") +
ylab("Sentiment Score") +
ggtitle("Per Page Sentiment of Muller Report",
"Single word sentiment, Bing lexicon") +
theme_minimal()
最后看一下每个单词的 tf-idf 来确定哪些是最重要的。我们将根据报告的章节和卷进行细分,使用 regex 查找章节分隔符。
muller_volume_1 <- muller_report %>% filter(page >= 19) %>% filter(page < 208)
muller_volume_2 <- muller_report %>% filter(page >= 221) %>% filter(page < 395)
muller_v1_tfidf <- muller_volume_1 %>%
filter(!is.na(text)) %>%
mutate(chapter=cumsum(str_detect(text,regex("^[IVX]+\\.", ignore_case=FALSE)))) %>%
unnest_tokens(word, text) %>%
filter(!str_detect(word, "^\\d+$")) %>%
count(chapter, word, sort=TRUE) %>%
bind_tf_idf(word, chapter, n)
muller_v1_tfidf %>%
filter(chapter != 0) %>%
group_by(chapter) %>%
top_n(7, tf_idf) %>%
ungroup() %>%
mutate(word=reorder(word, tf_idf)) %>%
ggplot(aes(word, tf_idf)) +
geom_col(show.legend=FALSE, fill = 'steelblue') +
labs(x=NULL, y="tf-idf") +
facet_wrap(~chapter, ncol=3, scales="free") +
coord_flip() +
ggtitle("7 Highest tf-idf words in each section of Volume 1 of Muller's Report",
"Partitioned by Chapter") + theme_minimal()
muller_v2_tfidf <- muller_volume_2 %>%
filter(!is.na(text)) %>%
mutate(chapter=cumsum(str_detect(text,regex("^[IVX]+\\.", ignore_case=FALSE)))) %>%
unnest_tokens(word, text) %>%
filter(!str_detect(word, "^\\d+$")) %>%
count(chapter, word, sort=TRUE) %>%
bind_tf_idf(word, chapter, n)
muller_v2_tfidf %>%
filter(chapter != 0) %>%
group_by(chapter) %>%
top_n(7, tf_idf) %>%
ungroup() %>%
mutate(word=reorder(word, tf_idf)) %>%
ggplot(aes(word, tf_idf)) +
geom_col(show.legend=FALSE, fill = 'steelblue') +
labs(x=NULL, y="tf-idf") +
facet_wrap(~chapter, ncol=3, scales="free") +
coord_flip() +
ggtitle("7 Highest tf-idf words in each section of Volume 2 of Muller's Report",
"Partitioned by Section") + theme_minimal()
结论
这应该让你开始调查穆勒报告。如果你在寻找进一步分析的建议,考虑寻找公众心中问题的答案。例如,分析总结报告作者对特定主题的看法,如特朗普总统参与了公认的俄罗斯竞选干预。这是第二卷的重点。也许数据科学可以揭示报告作者在这个热门话题上的倾向。开心挖矿!
^(多米诺编者按:寻求真理,讲真话是多米诺的核心价值观之一,这也体现在我们严谨的内容分析上。如果对与本帖内容类似的其他见解和内容感兴趣,请考虑使用折扣代码 Rev2019_100 注册参加 Rev、我们的数据科学领导者峰会。)
庆祝 Py 日!
圆周率日就要到了,当我们用馅饼庆祝圆周率的时候,我们不能忘记生活中另一个伟大的圆周率,那就是 Python!这种编程语言已经成为生产级数据科学的事实上的标准,被大多数生产级数据科学家使用。
花点时间思考一下 Python。我们为什么爱它?对于数据科学来说,为什么它变得如此流行,如此迅速?原因有很多,但有三个特别突出。
热爱 Python 的 3 个理由
-
Python 就是协作。是的,这包括数据科学家、数据工程师和将它作为共同语言的开发人员之间的协作,以及 Python 是开源的事实。更重要的是它促进了不同工具之间的协作。Python 是一个极好的包装器,不仅是因为它自己的以数据科学为中心的库,也因为每一个新的 ML 或 AI 工具或框架。很有可能,如果你不能使用 Python 来利用一些东西,要么它正在开发中,要么它不适合生产数据科学。
-
Python 就是迭代。数据科学就是迭代。你必须迭代模型生命周期的每个部分:特征工程、算法选择、超参数调整、验证,甚至模型监控。Python 击败了数据科学的可视化工具,因为它天生更容易使用代码进行迭代。随便问个开发商就知道了。然而,Python 也胜过其他编程语言,因为它是一种解释型编程语言。因此,它可以在开发过程中的任何地方停下来进行实验(或调试)。
-
Python 正在生产。 Python 不仅仅是不同数据科学工具的包装器,它还是模型生命周期中系统的包装器。它就像一把瑞士军刀,使您能够将来自数据湖或数据仓库的数据、来自您选择的框架的方法以及您将用来部署您的模型的系统(无论是在本地还是在云中)缝合在一起。Python 允许您将这些粘合在一起,同时填补任何缺失的空白。
这并不是说 Python 是完美的。您需要使用企业级*台(例如代表使用 Python 的企业数据科学黄金标准的Domino Enterprise MLOps Platform)通过安全性、治理、生产力工具和可扩展基础设施来支持它。但如果没有 Python,我们就不会处于一场“人工智能革命”中。所以,我的数据科学家同事们,借此机会让圆周率成为你们自己的一天,并思考 Python 是如何对世界产生影响的——更不用说你们对组织的价值了——这就是今天的情况。
检查你的意图
众所周知,文化对一家公司的成功至关重要,关于如何在初创企业定义和培育文化,也不乏建议。这篇文章表达了我们希望在多米诺骨牌上形成的文化的一个关键特征:直接批评,同时努力使批评真正具有建设性。
关键反馈
“如果你没有关于某人的任何好话,那就什么都不要说”是老师和家长灌输给孩子的一条常见格言,不幸的是,这条规则支配了太多的工作场所互动(至少是公开的面对面的互动)。问题在于“好”这个词是肤浅的:一个评论是否“好”完全取决于一个人使用的词,而不考虑说话者的效果、结果或意图。
但是,正如大多数高绩效组织将证明的那样,“关键的”或“负面的”反馈是推动改进的必要工具。说“新网站看起来很糟糕”不是一个“好”的评论很容易,但如果我发表这种评论的动机是为了引起对设计问题的注意,这会对公司的形象产生负面影响,那么保留这种反馈将是非常不理智的。我认为,如果组织想要出类拔萃,就需要接受批评,并不断发现需要改进的地方。
在创办达美乐之前,我所在的公司以直率的文化而闻名,这种文化将批评发挥到了极致。鼓励批评的文化有一个潜在的问题,那就是它会导致反馈为了批评而批评——本质上是虐待。
在构建 Domino 的过程中,我一直在努力*衡这两个不可持续的极端:一方面,我们需要批评来推动改进;另一方面,目光短浅地强调批评是其本身的目的,对我们的进步的损害与完全没有批评是一样的。
乐于助人的意图
以下是我用来调和上述紧张关系的原则;这是我坚持的标准,也是我们 Domino 文化的定义特征之一:
提供反馈时,检查你的意图,并确保你是在尽力提供帮助或建设性。
我说的“有帮助的或有建设性的”只是指:你的评论可能会让某人过得更好,或改善某些情况吗?你的评论会给世界带来什么样的新局面,会比现在的世界更好吗?
我说的“意图”是指你的评论到底想达到什么目的?当然,这与乐于助人和建设性有关:如果你真正的动机是让某人感觉不好,那么光说可能会发生好的事情是不够的。
“意图”条件也有助于避免类似的问题——原始格言所遭受的问题(“好”是什么意思?).我们不需要担心让世界变得“好”或“更好”意味着什么——只是,在你的主观解释中,你真正的动机是实现这样的改变。
实践中混乱的现实
有时候善意的评论会造成短期的痛苦。例如,听到你的经理说你似乎不具备完成交给你的任务所需的能力时,你可能会很难过;或者听到你的教练说你因为技术不够好而被球队除名。但是,除非你的经理或教练是虐待狂,否则他们告诉你是因为你(和其他人)最终可能会变得更好,或者承认现实。“这会伤害他的感情”并不是拒绝发表评论的充分理由,只要你的意图是有益的或建设性的。有时候真相会让人伤心,但这并不意味着我们应该忽视它。
人们是合理化和自欺欺人的大师,所以在分享“批评”或“负面”评论时,自省、留心你的意图是很重要的。问问你自己,“我要做的评论的目标是什么?会不会有人因此过得更好?”如果不是,你为什么这么说?
如果你是一名经理,你对你的一份报告提出了一些批评性的反馈,你是真心实意地想帮助你的报告吗(为此,要注意你的语气和反馈的内容)?还是对建立自己的优越感或智力更感兴趣?留意你的意图可以帮助你以一种产生最积极影响的方式阐明和表达你的反馈。
工作场所之外
就我个人而言,我也努力在工作之外遵循这个原则,我认为如果更多的人这样做,这个世界会变得更好。
一些个人生活中的例子,可能有点做作:
-
如果我的朋友或者其他重要的人需要理发,或者牙齿上有东西,很可能(取决于个人)他们想知道这些。提醒他们这一事实需要对他们的外表说一些负面的话——但潜在的意图是帮助他们,而不是贬低他们。
-
如果你在恋爱中,你对你的另一半所做的事情感到不安,当你告诉他或她时,你的目标是什么?是为了让他们难受吗?还是为了改善你们的关系?
-
如果你在餐馆吃了一顿令人失望的饭,服务员问你是否喜欢这道菜,你会清楚地表达你的失望,还是假装一切都很好?你是真的想帮忙,还是只是在发泄,或者是想让服务员感觉不好,或者是希望在账单上得到折扣?如果你是真心实意地想帮助餐馆的厨师改进(也许是为了把未来的顾客从你的糟糕经历中拯救出来),并且你把你的注意力吸引到你的意图上,你很可能会发现你的语气、你的评论的细节和措辞都会改变,以反映你的意图的清晰性。
结论
人类是情绪化、自我的生物,很容易让情绪和自我来引导我们的行为。作为达美乐文化的一个基本方面,这一建设性批评的原则推动了我们的快速改进,同时保持了相互尊重的高度协作氛围。除此之外,我发现留心我的意图,已经导致了工作之外与他人更好的互动,并且实际上促进了进步,而不仅仅是向世界发泄负面能量。
为您的组织选择数据治理框架
原文:https://www.dominodatalab.com/blog/choosing-a-data-governance-framework
什么是数据治理?
数据治理是指管理企业数据的过程,目的是使数据在整个组织中更易访问、可靠、可用、安全和合规。这是组织数据管理的一个关键特性,可提升数据质量和数据民主化。
一个精心规划的 数据治理框架 对于任何旨在利用其数据的商业价值和下游能力来推动稳健决策的数据驱动型组织来说都是至关重要的。它涵盖并详细介绍了数据流程、角色、策略、标准和指标的最佳实践。
自然,数据治理框架因组织而异。这里有几个强有力的数据治理框架的例子,这些框架是像普华永道、T2、Hubspot 和 T4 ING 这样的公司推荐的。
- 从小处着手,但要对数据治理有一个宽广的视角和长远的看法。
- 构建强大的业务案例,包括组织收益,如更高的收入、更好的跨职能效率和客户体验。
- 就一组指标达成一致,以随着时间的推移跟踪采用、实施和价值。
- 尽早并经常沟通,并在组织范围内建立意识和一致性。
- 获得领导层的认可,对数据治理进行长期投资,并理解其好处可能不会在短期内显现出来。
- 为数据治理框架的创建、实施和执行确定相关的以数据为中心的角色和职责。
有关推荐最佳实践的更多示例,请查看来自和 雪花 的这些数据治理技巧。
在本文中,您将了解更多关于数据治理框架及其基本组件的信息,探索为您的组织选择数据治理框架的用例及最佳实践。
数据治理的重要性
如果没有有效的数据治理,组织的数据科学团队将无法充分挖掘数据的价值。薄弱的数据治理导致糟糕的数据实践和决策,导致组织在日益数据驱动的企业环境中失去竞争优势。
至关重要的是,糟糕的治理还会损害对监管标准(如 GDPR、HIPAA、SOX、CCPA 法案等)的遵从,这会给企业带来巨大的后果。违反此类法律的巨额罚款可能会削弱公司的底线。例如,2021 年,亚马逊收到了高达 8.77 亿美元的 GDPR 罚款 。
强大的数据治理可确保数据的可用性、可靠性、一致性和高质量,使企业能够从数据中创造价值。它包括流程、人员、组织机构和一组策略,它们共同决定管理数据的最佳实践。
数据治理的优势
数据治理的好处是多方面的,其中包括:
- 数据质量提高,下游分析和数据科学更加高效可靠
- 更强大的数据驱动的业务决策
- 提高组织对跨部门数据的可访问性和使用的认识
- 更好地符合当地、国家和国际监管制度
- 增强对数据的信任,促进数据驱动的组织文化
投资一个强大的数据治理框架会产生巨大的回报,并有助于加快组织的数字化和数据转型之旅。
如何选择数据治理框架
现代数据治理框架有几个基础。主要关注领域包括数据质量、可访问性、安全性和法规遵从性。然而,只有将人员、流程和技术有效地结合起来,数据治理框架才能取得成功。
设计有效的数据治理框架 还包括创建一组清晰的组织角色、职责和数据利益相关者,用于实施和管理治理策略。在本节中,您将了解构建最佳数据治理框架的核心方面。
数据准确性
数据准确性是数据质量的核心支柱,指的是无错误和可靠的信息。数据不准确通常是由于数据输入方法不当、数据可访问性监管不力以及数据质量标准不佳造成的。提高数据准确性标准至关重要,因为干净、统一和准确的数据可以将投资回报提高两倍。
有许多方法可以测试和改进现有的数据准确性标准。实时数据质量审计可以发现重复、缺失值、信息不完整、数据存储在多个位置等问题。其中一些常见问题可以通过自动化数据质量和准确性检查的工具来解决,而其他问题则需要数据团队的手动干预。
数据相关性
数据相关性指的是数据对于获取业务价值是否相关和适用(即,它是否适合其最初的目的)。例如,在表格中,客户的性取向和军事记录等信息经常被要求与客户姓名、电子邮件和其他联系方式等相关数据字段一起填写。然而,在许多情况下,像性取向和军事记录这样的数据字段对业务没有实质性的影响。
就数据治理而言,需要对每个数据集的相关性和对组织的潜在价值进行严格评估。随着组织积累越来越多的数据,数据存储、维护、隐私和安全的成本也在增加。因此,没有可靠的数据相关性检查也会产生重大的财务影响。
政策范围
在现代数据驱动的组织环境中,数据治理有一个 的宽泛范围 ,涵盖了从元数据和数据存储到可访问性、质量、安全性、所有权以及各种流程、人员和技术的组织角色和策略的所有内容。
制定涵盖如此广泛范围的全面的数据治理政策需要各种数据利益相关方和执行领导层的共同努力。由于这需要在人才和技术方面进行大量投资——短期内投资回报可能不明显——领导层的认同和支持至关重要。
数据合规标准
遵守数据合规性标准,如【GDPR】HIPAASOX等,是数据治理的另一个重要元素。由于组织存储了大量机密的用户和业务数据,包括个人身份信息,如姓名、联系方式和地址、密码、信用卡信息等,如果不能充分保护这些数据免受恶意攻击和数据泄露,甚至是错误的内部访问,都会带来严重的业务后果。
不遵守数据隐私和安全法规会导致巨额 罚款 。也许更重要的是,未能保护其客户和企业数据的组织的声誉会受到损害,从而导致更大的支出以及收入和未来业务的重大损失。
数据访问策略
数据访问策略规定了哪些员工可以访问组织的数据,以便他们在依赖数据的日常工作中不会面临太多的摩擦和干扰。根据数据访问策略,只有特定的一组员工被授权访问和使用特定用例的数据。
该政策适用于跨业务部门的所有数据资产,包括所有类型和格式的数据。关于谁有权访问、谁无权访问的明确指导原则还有助于提高数据安全性,促进更好地遵守数据合规性法规,并减少组织时间和资源的浪费。
管理数据治理策略的组织角色
数据治理是多个利益相关方的任务,例如:
- 首席数据官:这是负责数据治理框架的实现和执行的高级管理人员。他们负责审批、资金、招聘、技术的采用,最重要的是,在整个组织内提高对数据治理的认识。
- 指导委员会:由业务领导和数据利益相关者组成,负责创建数据治理策略和数据标准。它对政策批准有最终决定权,并帮助解决数据或业务团队之间的任何争议或冲突。
- 数据管家:他们负责数据的日常管理。他们通常有很强的领域专业知识,并监督数据集的管理,扮演实际操作的角色。他们还确保指导委员会倡导的政策在整个组织得到切实执行和遵守。
实施政策的阶段
实现一个精心规划的全面的数据治理框架需要时间和资源。它涉及 多个步骤 ,通常包括以下内容:
- 确定角色和职责
- 定义数据域
- 设置数据工作流
- 建立数据控制
- 识别数据源
- 定义政策和标准
重要的是从小处着手,慢慢建立牵引力,在流程的每一步都赢得领导层和各种数据利益相关方的信任。如上所述,让各种各样的利益相关者参与进来,并在一个小规模的团队中测试治理框架,有助于确定关键的实践和标准,然后可以扩展到整个组织的级别。
结论
在本文中,您了解了组织的数据治理框架。数据治理是数据驱动型公司的基本要求,有助于他们有效管理内部数据资产并创造一致的商业价值。
数据治理对于现代组织来说非常重要,糟糕的治理实践会带来严重的负面后果。选择数据治理框架并不简单,但探索强大数据治理的核心支柱,包括数据准确性、相关性、合规性和安全性,是实现组织数字化转型之旅现代化的重要第一步。
在数据科学和机器学习的背景下,强大的数据治理框架对于维护用于训练机器学习模型的数据的质量、相关性、及时性、完整性、准确性和有效性至关重要。
您的组织是否需要一个与您的数据治理框架协同工作的解决方案来将模型投入生产?了解更多关于 Domino 企业 MLOps *台 如何加速 ML 模型的开发和部署。
为网飞选择内容:数据如何引领潮流
原文:https://www.dominodatalab.com/blog/choosing-content-for-netflix-how-data-leads-the-way
这个演讲发生在 2016 年 9 月 14 日加利福尼亚州洛杉矶的多米诺数据科学弹出窗口
在本演示中,网飞数据工程与分析副总裁 Paul Ellwood 讲述了这家领先的数据驱动型娱乐公司如何利用数据科学为全球 8000 多万用户选择内容。
http://dominodatalab.wistia.com/medias/6nt7utf0pg?embedType=async&videoFoam=true&videoWidth=640
推广推荐算法的公司将技术和数据作为“网飞的 DNA”,帮助他们:
- 为国际用户提供本地化内容;
- 比评级服务更早发现有价值的内容;
- 为他们的创意人员提供他们在其他地方得不到的指标和仪表盘;
- 获得相对于其他网络和内容购买者的竞争优势。
你可以在 Twitter 上关注保罗·埃尔伍德@佩尔伍德,如果你想了解更多关于网飞在数据科学和机器学习方面的进展,一定要关注 @NetflixData 。
Paul 演示的幻灯片可在此处获得。
选择正确的机器学习框架
原文:https://www.dominodatalab.com/blog/choosing-the-right-machine-learning-framework
什么是机器学习框架?
机器学习(ML)框架是允许数据科学家和开发人员更快更容易地构建和部署机器学习模型的接口。机器学习几乎被用于每个行业,特别是金融、保险、医疗和营销。使用这些工具,企业可以扩展他们的机器学习工作,同时保持高效的 ML 生命周期。
公司可以选择构建自己的定制机器学习框架,但大多数组织都会选择适合自己需求的现有框架。在本文中,我们将展示为您的项目选择正确的机器学习框架的关键考虑因素,并简要回顾四个流行的 ML 框架。
如何选择合适的机器学习框架
在为您的项目选择机器学习框架时,您应该考虑以下几个关键因素。
评估您的需求
当你开始寻找一个机器学习框架时,问这三个问题:
- 你会使用深度学习的框架还是经典的机器学习算法?
- 对于人工智能(AI)模型开发,你首选的编程语言是什么?
- 哪些硬件、软件和云服务用于扩展?
Python 和 R 是机器学习中广泛使用的语言,但其他语言如 C、Java 和 Scala 也是可用的。今天,大多数机器学习应用程序都是用 Python 编写的,并且正在从 R 过渡,因为 R 是由统计学家设计的,使用起来有些笨拙。Python 是一种更现代的编程语言,它提供了简单明了的语法,并且更易于使用。
参数最优化
机器学习算法使用不同的方法来分析训练数据,并将所学应用于新的例子。
算法有参数,你可以把它想象成一个仪表板,上面有控制算法如何运行的开关和转盘。他们调整要考虑的变量的权重,定义在多大程度上考虑离群值,并对算法进行其他调整。在选择机器学习框架时,重要的是要考虑这种调整应该是自动的还是手动的。
扩展培训和部署
在 AI 算法开发的训练阶段,可扩展性就是可以分析的数据量和分析的速度。通过分布式算法和处理,以及通过使用硬件加速,主要是图形处理单元(GPU),可以提高性能。
在 AI 项目的部署阶段,可伸缩性与可以同时访问模型的并发用户或应用程序的数量有关。
因为在培训和部署阶段有不同的要求,所以组织倾向于在一种类型的环境中开发模型(例如,在云中运行的基于 Python 的机器学习框架),并在对性能和高可用性有严格要求的不同环境中运行它们,例如,在本地数据中心。
在选择一个框架时,考虑它是否支持这两种类型的可伸缩性,并查看它是否支持您计划的开发和生产环境是很重要的。
顶级机器学习框架
让我们来看看目前使用的一些最流行的机器学习框架:
- TensorFlow
- PyTorch
- Sci-Kit 学习
- H2O
TensorFlow
TensorFlow 由 Google 创建,并作为开源项目发布。它是一个多功能和强大的机器学习工具,具有广泛和灵活的函数库,允许您构建分类模型、回归模型、神经网络和大多数其他类型的机器学习模型。这还包括根据您的特定要求定制机器学习算法的能力。TensorFlow 在 CPU 和 GPU 上都可以运行。TensorFlow 的主要挑战是它对于初学者来说不容易使用。
TensorFlow 的主要特性:
- 计算图形的可见性 —TensorFlow 可以轻松地可视化算法计算过程的任何部分(称为图形),这是 Numpy 或 SciKit 等旧框架所不支持的。
- 模块化 —TensorFlow 高度模块化,您可以独立使用其组件,而不必使用整个框架。
- 分布式训练 —TensorFlow 为 CPU 和 GPU 上的分布式训练提供了强大的支持。
- 并行神经网络训练 —TensorFlow 提供管道,让你并行训练多个神经网络和多个 GPU,在大型分布式系统上非常高效。
随着 TensorFlow 2.0 的发布,TensorFlow 增加了几个重要的新功能:
- 在多种*台上部署 -使用 SavedModel 格式提高移动设备、物联网和其他环境的兼容性,使您可以将 Tensorflow 模型导出到几乎任何*台。
- 急切执行 -在 Tensorflow 1.x 中,用户需要构建整个计算图并运行它,以便测试和调试他们的工作。Tensorflow 2.0 和 PyTorch 一样,支持热切执行。这意味着模型可以在构建时被修改和调试,而不需要运行整个模型。
- Keras 的更紧密集成 -以前,Keras 受 TensorFlow 支持,但不作为库的一部分集成。在 TensorFlow 2.x 中,Keras 是 TensorFlow 附带的官方高级 API。
- 改进了对分布式计算的支持 -改进了使用 GPU 的训练性能,比 Tensorflow 1.x 快三倍,以及与多个 GPU 和 Google TensorFlow 处理单元(TPU)配合工作的能力。
PyTorch
PyTorch 是一个基于 Torch 和 Caffe2 的机器学习框架,非常适合神经网络设计。PyTorch 是开源的,支持基于云的软件开发。它支持用户界面开发的 Lua 语言。它与 Python 集成,并与 Numba 和 Cython 等流行库兼容。与 Tensorflow 不同,PyTorch 更直观并且初学者掌握起来更快。
PyTorch 的主要特点:
- 通过使用本地 Python 代码进行模型开发,支持快速执行和更大的灵活性。
- 从开发模式快速切换到图形模式,在 C++运行时环境中提供高性能和更快的开发。
- 使用异步执行和对等通信来提高模型训练和生产环境中的性能。
- 提供端到端的工作流,允许您使用 Python 开发模型并在 iOS 和 Android 上部署。PyTorch API 的扩展处理将机器学习模型嵌入移动应用程序所需的常见预处理和集成任务。
Sci-Kit 学习
SciKit Learn 是开源的,对于机器学习的新手来说非常用户友好,并且附带了详细的文档。它允许开发人员在使用中或运行时更改算法的预设参数,从而易于调整和排除模型故障。
SciKit-Learn 通过广泛的 Python 库支持机器学习开发。它是数据挖掘和分析的最佳工具之一。Sci-Kit Learn 具有广泛的预处理能力,并支持用于聚类、分类、回归、维度减少和模型选择的算法和模型设计。
Scikit-Learn 的主要功能:
- 支持大多数监督学习算法—线性回归、支持向量机(SVM)、决策树、贝叶斯等。
- 支持无监督学习算法—聚类分析、因子分解、主成分分析(PCA)和无监督神经网络。
- 执行特征提取和交叉验证—从可以提取的文本和图像中提取特征,并在新的看不见的数据上测试模型的准确性。
- 支持聚类和集成技术—可以组合来自多个模型的预测,并且可以对未标记的数据进行分组。
H2O
H2O 是一个开源的 ML 框架,旨在解决决策支持系统流程的组织问题。它与其他框架集成,包括我们上面讨论的框架,来处理实际的模型开发和训练。H2O 广泛应用于风险和欺诈趋势分析、保险客户分析、医疗保健行业的患者分析、广告成本和投资回报以及客户智能。
H2O 组件包括:
- 深水—将 H2O 与 TensorFlow 和 Caffe 等其他框架集成在一起。
- 苏打水—将 H2O 与大数据处理*台 Spark 整合。
- Steam—企业版,支持训练和部署机器学习模型,通过 API 使其可用,并将它们集成到应用程序中。
- 无人驾驶 AI—使非技术人员能够准备数据、调整参数,并使用 ML 来确定解决特定业务问题的最佳算法。
使用 Domino 的机器学习框架
通过 Domino 的环境管理特性,为您的用例选择正确的 ML 框架比以往任何时候都更容易。您可以轻松构建环境,并让它们在最佳计算资源上运行,无论是 CPU、GPU 还是 APU。
Domino 中的环境很容易配置,并且包括以下主要特性
- 版本控制 -召回升级可能破坏模型代码或显著改变结果的环境的先前版本
- 选择您自己的 IDE GUI——包括在 Domino workbench 解决方案中使用的任何基于 HTML 浏览器的 GUI
- 与数据科学家同事轻松共享您的环境 -在服务器托管实例中,获得与笔记本电脑相同的灵活性,能够与同事即时共享代码和环境
- 针对不同用例的不同环境 -为了获得最佳的服务器利用率,只安装对您的代码需要运行的工作流至关重要的包,拥有多个环境以充分利用您的服务器资源
关于机器学习框架如何在 Domino 中运行的示例,请查看我们下面展示 PyTorch、Tensorflow 和 Ludwig 的一些文章。
将所有东西分类(用多个标签)
原文:https://www.dominodatalab.com/blog/classify-things-multiple-labels
美国家庭保险公司的 Derrick Higgins 在 Rev. Higgins 上发表了一篇题为“对所有事物进行分类(使用多个标签):没有人谈论的最常见类型的建模任务”的演讲,其中涵盖了多标签分类、用于多类预测的几种方法以及现有的工具包。这篇博文提供了演讲的亮点、视频和文字记录。
在德里克·希金斯(Derrick Higgins)的演讲中,“对所有事物(带有多个标签)进行分类:没有人谈论的最常见的建模任务类型”,他提倡数据科学家考虑“为他们的多标签任务工具包添加适当的工具”。他介绍了多标记和多类分类之间的区别,介绍了几种用于多标记预测的方法,并提供了有用工具包的链接。会议的主要亮点包括
- 探索公共领域的多标签数据集,包括 BibTeX 、美味、鸟类、医学和场景
- 探究多标签与极端多标签与协同过滤
- 数据科学家可以采用的多标签任务建模策略,包括标签功效集、RAKEL、条件伯努利混合以及结构化预测
- 涵盖了 sk-multilearn、pyramid、svm-struct、pyStruct 等工具包。
想从这次演讲中获得更多的见解,请观看视频或通读文字记录。
https://fast.wistia.net/embed/iframe/fz7hnu6axs
云安全:担心的正确方式
原文:https://www.dominodatalab.com/blog/cloud-security-the-right-way-to-worry
这里有一个我们经常听到的问题:从安全的角度来看,我们对云并不满意——您能在本地安装 Domino 吗?答案是肯定的(我们有 Domino 数据科学*台的本地和云托管版本,因为这是客户想要的),但我们认为这个问题的核心假设值得进一步考虑,因为它通常是错误的。
问题不是“我的数据在云中安全吗?”问题是:“我的数据在哪里更安全,是在云中还是在我管理的基础架构上?”
当考虑云时,一些公司会问一系列深思熟虑的问题,谨慎对待,并仔细考虑具体的风险。但是数量惊人的公司顽固地完全拒绝云,理由听起来像是偏执狂、教条或一般的 FUD。
哪个更安全...
无论是在创办 Domino 的过程中,还是我之前在一家大型对冲基金担任高管的工作中,我都在安全问题上做了大量工作,确保两家公司都有一个强大的战略来应对日益复杂的威胁。
从这个角度来看,云的安全优势对我来说是显而易见的。除非你是一家非常复杂的大型公司(甚至可能是这样),否则你的数据在云中可能比在你自己的基础设施上更安全。问题不是“我的数据在云中安全吗?”问题是:“我的数据在哪里更安全:在云中还是在我管理的基础架构上?”
让我提供两个理由来说明为什么云可能对您的公司更安全。
首先,系统原因:对于云基础设施提供商来说,安全可能比您的公司更重要,这意味着当您将他们用作服务提供商时,您会从更高的安全优先级中受益。以索尼为例。网络安全可能是该公司的十大要务,但几乎肯定不在前三或前五名。除此之外,还要挑选优秀的电影,制作电影,雇用人才,发行和营销电影,谈判交易等等。现在想想亚马逊网络服务。安全可能是其第二或第三优先考虑的问题,因为安全漏洞代表着对其业务的生存威胁,而在索尼的案例中,正如最*的黑客攻击(尽管令人绝望)所证明的,情况并非如此。因此,亚马逊将在安全方面投入巨资——这是必须的。
其次,让我们看一下公司数据面临的一些主要威胁,以及从安全角度来看,我们的两种基础架构选项有何不同。(这种基于威胁的分析实际上是所有安全决策的制定方式。)在每种情况下,从安全角度来看,云要么更好,要么是中性的。
你应该担心的是
你的人民
内部威胁是任何公司面临的最大风险之一。根据 2014 年威瑞森数据泄露调查报告,2013 年,内部攻击占所有数据泄露事件的 18%。员工经常会拿走知识产权——为了经济利益,出于怨恨,为了好玩,有时甚至是出于意外。
除此之外,“物理盗窃或丢失”占 2013 年事件的 14%,当然,其中大多数发生在员工手中。“杂项事件”占事件的 25%,威瑞森报告指出,这些错误的来源“当然,几乎完全是内部人员”。最终用户、系统管理员和开发人员在把事情搞砸的问题上处于领先地位。”
换句话说,在明显的内部攻击、盗窃或丢失以及内部错误之间,超过 50%的数据泄露事件是内部人员造成的。对于一个心怀不满的员工来说,泄露您的一些安全数据有多困难?您的员工是否接受过避免钓鱼邮件的适当培训?你确定吗?他们中有多少人通不过网络钓鱼测试?你怎么知道你的员工是善意的呢?
这和云有什么关系?在最坏的情况下,使用云不会使内部威胁(可能是您最大的风险)变得更糟。但实际上,我们经常发现使用云可以减少这种威胁,因为将云用于其基础架构的公司会对其网络进行更多细分,这意味着员工更难从他们应该去的地方转移到他们不应该去的地方。此外,云网络往往会受到更多的监控。
您的软件更新过程
您是否正在运行带有任何已知漏洞的过期软件?你怎么知道的?当发布安全补丁时,您部署它们的速度有多快?
大多数云提供商,包括亚马逊,都极其积极地解决其底层基础设施中的关键漏洞。例如,在 2014 年早些时候,亚马逊在公布后的几天内就处理了严重的 Heartbleed 漏洞。
对于那些认为自己的安全性优于云提供商的公司来说,Heartbleed 是一个很好的基准。询问您的 IT 团队,您的公司用了多长时间才完全修补了 Heartbleed,并将其与 Amazon Web Services 用了多长时间进行比较。
人身安全
您的服务器在哪里?在你的办公楼里?在数据中心?谁能接触到这些机器?对于一个人来说,简单地捡起一个并带走它有多难?进入你们大楼的安全措施有多严密?
抛开威胁和攻击不谈,面对可能导致停机或数据丢失的灾难,您有多脆弱?这些威胁到你的可用性,另一个层面的安全。您的物理基础架构在火灾、加热和冷却问题、电气故障方面是否安全?
你可以读到很多关于 AWS 的物理安全的文章,但可以说它在访问控制和安全措施方面是世界一流的。大多数组织会发现这是不可能匹配的。
加密
你所有的内部流量都加密了吗?如果有人——一名员工或任何走进你办公室的人——将一个数据包嗅探器插入以太网插孔,他们能从电线上扯下什么?密码?用户数据?财务数据?许多公司要求对外部流量进行加密,但对其网络内的流量加密却相当宽松(这意味着他们的网络安全性与物理安全性一样好)。
您的服务器和员工机器上的硬盘是否加密?否则,如果有人带走了其中一个设备,后果会更加严重。
云基础架构即服务提供商通常具有一些功能,可以轻松实现静态和传输中数据的加密,或者在默认情况下提供此类配置。许多建立在云提供商之上的服务(包括 Domino 的云托管服务)自动使用加密。
这是一个很好的例子,说明了与比你更重视安全的合作伙伴合作所带来的安全好处。许多公司不在内部加密他们的数据。但是云提供商甚至不会考虑不提供这一功能。你要做的就是打开它。
点
当然,即使你使用云,上面的一些风险也是存在的(你的员工的计算机上可能仍然有易受攻击的敏感数据)。与此同时,一家成熟的大公司完全可以实施一套完整的安全机制,与 AWS 相媲美。
关键是云可能更安全,因为云提供商不得不在安全方面投入巨资,以使他们的业务更加。
情节
我已经描述了一小部分准备进攻的地区。重要的是要记住,聪明的攻击者会利用这些漏洞的组合。为了好玩,这里有一些让你晚上睡不着觉的假设场景,如果你使用云基础设施,其中大多数都不太可能发生:
- 有人闯入您的办公室或数据中心,偷走了您的机器。
- 一名天真的员工被一封在他的机器上安装了恶意软件的网络钓鱼邮件所迷惑,这反过来利用了您的一台服务器上的一个未打补丁的漏洞。
- 攻击者假扮成一名求职者,获得了贵公司的面试机会。当面试官不在房间时,攻击者将一个设备插入您的网络,从网络中获取密码和其他安全数据。
- 一天晚上,一名心怀不满的员工来到办公室,偷走了装有安全数据的物理机。
- 攻击者冒充您的电话公司的电工或修理工,讲述一个故事,说服接待员带他去电气室或服务器室。在那里,他把一个 u 盘插到你的服务器上,这个 u 盘可以做很多破坏性的事情。
结论和建议
良好的安全性是基于威胁的:您应该确保对威胁进行优先排序,并且对每种威胁都有良好的策略。在对云还是本地基础架构做出决策时,或者任何其他决策时,您都应该逐个威胁地比较每个选项的风险。无论您的决定如何,以下是一些保护您资产安全的建议:
- 系统地、分析性地思考威胁。哪些资产对攻击者来说最有价值,攻击者可以通过哪些不同的方式来获取这些资产?您的系统的不同层(包括人员和物理基础设施)中最薄弱的环节是什么?
- 请专业公司进行安全审计和渗透测试,找出你的安全弱点。您需要找出问题,以便解决它们。
- 让安全成为你员工培训的一部分。所有员工都应该了解常见的社会工程技术和网络钓鱼技术,以便他们能够识别它们。警惕应该成为你文化的一部分。
- 关注你的人。雇佣他们的时候要做背景调查。注意员工不满的迹象。如果您的安全团队有资源,监控员工的电子邮件和行为,寻找可疑活动。
- 锁定您的人身安全。锁电脑,锁门,使用警卫,摄像头等。
- 加密您基础设施中的静态和传输数据。
- 设计并实现一个补丁程序,当漏洞被修复时,让你的软件保持最新。
R 中的聚类
介绍
聚类是一种机器学习技术,使研究人员和数据科学家能够划分和分割数据。进行探索性分析时,将数据分成适当的组是一项核心任务。当 Domino 寻求支持加速数据科学工作(包括核心任务)时,Domino 联系了 Addison-Wesley Professional(AWP)Pearson,以获得适当的权限,从书中摘录“集群化”,R for every one:Advanced Analytics and Graphics,Second Edition 。AWP·皮尔逊提供了适当的许可来摘录这本书,并提供了一个补充的 Domino 项目。
使聚集
聚类在现代机器学习中起着重要作用,它是将数据划分成组。这可以通过多种方式实现,最流行的两种方式是 K-means 和层次聚类。就数据帧而言,聚类算法找出哪些行彼此相似。被分组在一起的行应该彼此具有高相似性,而与分组之外的行具有低相似性。
R 中的 k-均值聚类
一种比较流行的聚类算法是 K-means。它根据某种距离度量将观察结果分成离散的组。对于这个例子,我们使用来自加州大学欧文分校机器学习知识库的葡萄酒数据集,该数据集可在http://archive.ics.uci.edu/ml/datasets/Wine获得。
> wineUrl <- 'http://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data'
> wine <- read.table(wineUrl, header=FALSE, sep=',',
+ stringsAsFactors=FALSE,
+ col.names=c('Cultivar', 'Alcohol', 'Malic.acid',
+ 'Ash', 'Alcalinity.of.ash',
+ 'Magnesium', 'Total.phenols',
+ 'Flavanoids', 'Nonflavanoid.phenols',
+ 'Proanthocyanin', 'Color.intensity',
+ 'Hue', 'OD280.OD315.of.diluted.wines',
+ 'Proline'
+ ))
> head(wine)
因为第一列是栽培品种,这可能与群体成员关系太密切,所以我们将其排除在分析之外。
> wineTrain <- wine[, which(names(wine) != "Cultivar")]
对于 K-means,我们需要指定聚类的数量,然后算法将观察值分配到这些聚类中。有一些启发式规则可以用来确定聚类的数量,我们将在后面讨论。现在我们将选择三个。在R
中,K-means 是通过名副其实的 kmeans 函数完成的。它的前两个参数是要聚类的数据,必须全部是numeric
(K-means 不适用于分类数据),以及中心(聚类)的数量。因为聚类中有随机成分,所以我们设置种子来生成可重复的结果。
> set.seed(278613)
> wineK3 <- kmeans(x=wineTrain, centers=3)
打印 K-means 对象会显示分类的大小、每列的分类*均值、每行的分类成员以及相似性度量。
> wineK3
绘制 K-means 聚类的结果可能很困难,因为数据的维数很高。为了克服这个问题,有用的中的plot.kmeans
函数执行多维缩放,将数据投影到二维空间中,然后根据聚类成员对点进行颜色编码。这如图 25.1 所示。
> library(useful)
> plot(wineK3, data=wineTrain)
如果我们传递原始的葡萄酒数据,并指定Cultivar
是真正的会员资格列,点的形状将由Cultivar
编码,因此我们可以看到它与图 25.2 中的颜色相比如何。颜色和形状之间的强相关性将指示良好的聚类。
> plot(wineK3, data=wine, class="Cultivar")
K-means 可能会受到随机启动条件的影响,因此使用多次随机启动来运行 k-means 被认为是一种很好的做法。这是通过nstart
参数实现的。
> set.seed(278613)
> wineK3N25 <- kmeans(wineTrain, centers=3, nstart=25) > # see the cluster sizes with 1 start
> wineK3$size
[1] 62 47 69
> # see the cluster sizes with 25 starts
> wineK3N25$size
[1] 62 47 69
对于我们的数据,结果没有变化。对于其他数据集,启动次数会产生显著影响。
选择正确数量的簇对于获得良好的数据分区非常重要。根据哥伦比亚大学统计系主任、现任文理学院院长和统计学教授大卫·马迪根(David Madigan)的说法,确定最佳聚类数的一个很好的指标是哈迪根规则(J. A .哈迪根是最流行的 K-means 算法的作者之一)。它本质上是比较具有 k 个聚类和具有 k + 1 个聚类的类内*方和的比率,说明行和类的数量。如果这个数字大于 10,那么就值得使用 k + 1 个集群。如果做得不正确,重复拟合可能是一件苦差事,而且计算效率很低。有用的包有FitKMeans
功能来做这件事。结果绘制在图 25.3 中。
> wineBest <- FitKMeans(wineTrain, max.clusters=20, nstart=25, + seed=278613) > wineBest
> PlotHartigan(wineBest)
根据这一指标,我们应该使用 13 个集群。同样,这只是一个经验法则,不应该严格遵守。因为我们知道有三个品种,所以选择三个品种群是很自然的,因为有三个品种。然而,三个聚类的聚类结果只是很好地将聚类与栽培品种进行了对比,因此可能不太适合。图 25.4 显示了左侧向下的聚类分配和顶部的品种。栽培品种 1 在它自己的簇中大多是单独的,栽培品种 2 只是稍微差一点,而栽培品种 3 一点也不聚在一起。如果这真是一个很好的拟合,对角线将是最大的部分。
> table(wine$Cultivar, wineK3N25$cluster)
> plot(table(wine$Cultivar, wineK3N25$cluster),
+ main="Confusion Matrix for Wine Clustering",
+ xlab="Cultivar", ylab="Cluster")
哈蒂根规则的替代方法是间隙统计,它将数据聚类的类内相异度与数据自举样本的类内相异度进行比较。它在衡量现实和期望之间的差距。这可以使用集群中的 clusGap 来计算(仅适用于数字数据)。这需要一点时间来运行,因为它正在做大量的模拟。
> library(cluster)
> theGap <- clusGap(wineTrain, FUNcluster=pam, K.max=20) > gapDF <- as.data.frame(theGap$Tab) > gapDF
图 25.5 显示了一些不同集群的差距统计。最佳聚类数是在最小化间隙的聚类数的一个标准误差内产生间隙的最小数。
> # logW curves
> ggplot(gapDF, aes(x=1:nrow(gapDF))) +
+ geom_line(aes(y=logW), color="blue") +
+ geom_point(aes(y=logW), color="blue") +
+ geom_line(aes(y=E.logW), color="green") +
+ geom_point(aes(y=E.logW), color="green") +
+ labs(x="Number of Clusters")
>
> # gap curve
> ggplot(gapDF, aes(x=1:nrow(gapDF))) +
+ geom_line(aes(y=gap), color="red") +
+ geom_point(aes(y=gap), color="red") +
+ geom_errorbar(aes(ymin=gap-SE.sim, ymax=gap+SE.sim), color="red") +
+ labs(x="Number of Clusters", y="Gap")
对于该数据,0.1952376 的最小间隙是用于具有五个聚类的聚类。在这种情况下,在最小值的一个标准误差内不存在具有较少聚类的聚类。因此,根据差距统计,五个聚类对于该数据集是最佳的。
围绕水母的分割(PAM)
K-means 聚类的两个问题是它不能处理分类数据,并且容易受到离群值的影响。另一种选择是 K-medoids。聚类的中心不是聚类的*均值,而是聚类中的一个实际观测值。这类似于中位数,中位数同样对异常值具有鲁棒性。
最常见的 K-medoids 算法是围绕 medoids 划分(PAM)。集群包包含 pam 函数,用于在 Medoids 周围执行分区。在这个例子中,我们查看了世界银行的一些数据,既包括 GDP 等数字指标,也包括地区和收入水*等分类信息。
现在,我们使用国家代码从世界银行下载一些使用 WDI 的指标。
> indicators <- c("BX.KLT.DVNV.WD.GD.ZS", "NY.GDP.DEFL.KD.ZG", + "NY.GDP.MKTP.CD", "NY.GDP.MKTP.KD.ZG" + "NY.GDP.MKTP.CD", "NY.GDP.MKTP.KD.ZG" + "TG.VAL.TOTL.GD.ZS") > library(WDI)
>
> # pull info on these indicators for all countries in our list
> # not all countries have information for every indicator
> # some countries do not have any data
> wbInfo <- WDI(country="all", indicator=indicators, start=2011, + end=2011, extra=TRUE) > # get rid of aggregated info
> wbInfo <- wbInfo[wbInfo$region != "Aggregates", ] > # get rid of countries where all the indicators are NA
> wbInfo <- wbInfo[which(rowSums(!is.na(wbInfo[, indicators])) > 0), ]
> # get rid of any rows where the iso is missing
> wbInfo <- wbInfo[!is.na(wbInfo$iso2c), ]
数据有一些缺失值,但幸运的是 pam 很好地处理了缺失值。在运行聚类算法之前,我们进一步清理数据,使用国家名称作为data.frame
的行名,并确保分类变量是具有适当levels
的factors
。
> # set rownames so we know the country without using that for clustering
> rownames(wbInfo) <- wbInfo$iso2c > # refactorize region, income and lending
> # this accounts for any changes in the levels
> wbInfo$region <- factor(wbInfo$region) > wbInfo$income <- factor(wbInfo$income) > wbInfo$lending <- factor(wbInfo$lending)
现在,我们使用集群包中的 pam 来拟合集群。图 25.6 显示了结果的轮廓图。与 K-means 一样,使用 PAM 时需要指定聚类数。我们可以使用 Gap statistic 之类的方法,尽管我们将选择 12 个聚类,因为这略小于数据行数的*方根,这是聚类数的一个简单启发式方法。每条线代表一个观察值,每组线就是一个聚类。很好地符合聚类的观察值具有大的正线,而不太符合聚类的观察值具有小的或负的线。聚类的*均宽度越大,意味着聚类越好。
> # find which columns to keep
> # not those in this vector
> keep.cols <- which(!names(wbInfo) %in% c("iso2c", "country", "year", + "capital", "iso3c")) > # fit the clustering
> wbPam <- pam(x=wbInfo[, keep.cols], k=12, + keep.diss=TRUE, keep.data=TRUE) >
> # show the medoid observations
> wbPam$medoids
> # make a silhouette plot
> plot(wbPam, which.plots=2, main="")
因为我们处理的是国家级别的信息,所以在世界地图上查看聚类会很有帮助。由于我们正在使用世界银行的数据,我们将使用世界银行的世界形状文件。它可以像下载其他文件一样在浏览器中下载,也可以使用R
下载。虽然这可能比使用浏览器慢,但如果我们必须以编程方式下载许多文件,这可能会很好。
> download.file(url="http://jaredlander.com/data/worldmap.zip",
+ destfile="data/worldmap.zip", method="curl")
文件需要解压,可以通过操作系统或者在R
中完成。
> unzip(zipfile="data/worldmap.zip", exdir="data")
在这四个文件中,我们只需要担心以.shp
结尾的那一个,因为 R 会处理其余的。我们使用来自 maptools 的readshapespacific来读取它。
> library(maptools)
> world <- readShapeSpatial( + "data/world_country_admin_boundary_shapefile_with_fips_codes.shp" + ) > head(world@data)
世界银行 shapefile 中的两位数代码和使用 WDI 提取的世界银行数据中的两位数代码之间存在明显的差异。值得注意的是,奥地利应该是“AT”,澳大利亚应该是“AU”,缅甸应该是“MM”,越南应该是“VN”等等。
> library(dplyr)
> world@data$FipsCntry <- as.character(
+ recode(world@data$FipsCntry,
+ AU="AT", AS="AU", VM="VN", BM="MM", SP="ES",
+ PO="PT", IC="IL", SF="ZA", TU="TR", IZ="IQ",
+ UK="GB", EI="IE", SU="SD", MA="MG", MO="MA",
+ JA="JP", SW="SE", SN="SG")
+ )
为了使用 ggplot2 我们需要将这个 shapefile 对象转换成一个data.frame
,这需要几个步骤。首先,我们根据数据的行名创建一个名为id
的新列。然后我们使用大卫·罗宾逊写的扫帚包中的整洁函数,将它转换成一个data.frame
。扫帚包是一个伟大的通用工具,用于将 R 对象,如lm
模型和kmeans
簇,转换成漂亮的矩形data.frames
。
> # make an id column using the rownames
> world@data$id <- rownames(world@data) > # convert into a data.frame
> library(broom)
> world.df <- tidy(world, region="id") > head(world.df)
现在,我们可以采取步骤加入来自聚类和原始世界银行数据的数据。
> clusterMembership <- data.frame(FipsCntry=names(wbPam$clustering), + Cluster=wbPam$clustering, + stringsAsFactors=FALSE) > head(clusterMembership)
> world.df <- left_join(world.df, clusterMembership, by="FipsCntry") > world.df$Cluster <- as.character(world.df$Cluster) > world.df$Cluster <- factor(world.df$Cluster, levels=1:12)
构建绘图本身需要一些 ggplot2 命令来正确格式化。图 25.7 显示了地图,颜色编码的集群成员;灰色国家要么没有世界银行的信息,要么没有正确匹配
的两个数据集。
> ggplot() +
+ geom_polygon(data=world.df, aes(x=long, y=lat, group=group,
+ fill=Cluster, color=Cluster))
+ labs(x=NULL, y=NULL) + coord_equal() +
+ theme(panel.grid.major=element_blank(),
+ panel.grid.minor=element_blank(),
+ axis.text.x=element_blank(), axis.text.y=element_blank(),
+ axis.ticks=element_blank(), panel.background=element_blank())
与 K-means 非常相似,必须指定 K-medoids 聚类中的聚类数。使用由 pam 返回的相异信息,可以构建类似于哈迪根规则的东西。
R 中的层次聚类
层次聚类在聚类中构建聚类,不像 K-means 和 K-medoids 那样需要预先指定数量的聚类。分层聚类可以被认为是一棵树,并显示为一个树状图;在顶部,只有一个由所有观察值组成的聚类,而在底部,每个观察值都是一个完整的聚类。介于两者之间的是不同层次的聚类。
使用葡萄酒数据,我们可以建立与 hclust 的聚类。结果如图 25.8 中的树状图所示。虽然文本很难看到,但它在末端节点标记了观察结果。
> wineH <- hclust(d=dist(wineTrain)) > plot(wineH)
层次聚类也适用于分类数据,如国家信息数据。但是,它的相异度matrix
必须有不同的计算方法。树状图如图 25.9 所示。
> # calculate distance
> keep.cols <- which(!names(wbInfo) %in% c("iso2c", "country", "year", + "capital", "iso3c")) > wbDaisy <- daisy(x=wbInfo[, keep.cols]) >
> wbH <- hclust(wbDaisy) > plot(wbH)
有许多不同的方法可以计算聚类之间的距离,它们会对层次聚类的结果产生重大影响。图 25.10 显示了四种不同连接方法的结果树:单一、完全、*均和质心。一般认为*均联系是最合适的。
> wineH1 <- hclust(dist(wineTrain), method="single") > wineH2 <- hclust(dist(wineTrain), method="complete") > wineH3 <- hclust(dist(wineTrain), method="average") > wineH4 <- hclust(dist(wineTrain), method="centroid") >
> plot(wineH1, labels=FALSE, main="Single")
> plot(wineH2, labels=FALSE, main="Complete")
> plot(wineH3, labels=FALSE, main="Average")
> plot(wineH4, labels=FALSE, main="Centroid")
切割由分层聚类产生的结果树将观察结果分成定义的组。有两种方法可以剪切它:要么指定簇的数量,这决定了剪切发生的位置,要么指定在哪里进行剪切,这决定了簇的数量。图 25.11 演示了通过指定聚类数来切割树。
> # plot the tree
> plot(wineH)
> # split into 3 clusters
> rect.hclust(wineH, k=3, border="red") > # split into 13 clusters
> rect.hclust(wineH, k=13, border="blue")
> # plot the tree
> plot(wineH)
> # split into 3 clusters
> rect.hclust(wineH, h=200, border="red") > # split into 13 clusters
> rect.hclust(wineH, h=800, border="blue")
结论
聚类是一种用于分割数据的流行技术。R
中用于聚类的主要选项是用于 K-means 的 kmeans ,用于 K-medoids 的 cluster 中的 pam ,以及用于层次聚类的 hclust 。速度有时会成为集群的一个问题,特别是分层集群,因此值得考虑像fastcluster
这样的替换包,它有一个插入替换功能, hclust ,它的操作就像标准的 hclust 一样,只是更快。
Coatue Management 领投多米诺 2700 万美元投资
原文:https://www.dominodatalab.com/blog/coatue-management-leads-27-million-investment-round-domino
我们很高兴地宣布, Coatue Management 已经为 Domino 领导了一轮 2700 万美元的融资,其中包括我们以前的投资者红杉资本、Zetta Venture Partners 和彭博贝塔。
我们一直注意不要过分庆祝筹款。筹集一轮融资——虽然有很多艰苦的工作和令人兴奋的事情——本身并不是目的。相反,新的一轮使我们能够达到我们的最终目标:建立领先的数据科学*台以帮助公司最大限度地发挥定量研究的影响。
对于为什么这对我们来说是一个重要的里程碑,我有两个主要的看法。第一个是关于这一轮,第二个是关于我们正在建立的业务类型。
这一轮感觉不一样,因为 Coatue 不仅是世界顶级投资公司之一,也是我们的客户。
Coatue 拥有一个庞大的量化研究团队,利用数据和高级分析来确定新的投资策略。两年来,该团队一直使用 Domino 的*台来协作和复制研究。
同时,Coatue 的风险投资团队确定,未来几年最重要的投资趋势之一是数据科学的进步。他们(和我们一样)认为数据科学正在重塑几乎每个行业。
Coatue 抢先领导了我们最*的一轮融资。由于我们在行业中的地位以及分析师对该产品的喜爱程度,Coatue 的团队发现了这个机会并进行了投资。作为一个创始人,我可以告诉你,当你的一个客户非常喜欢你的产品,以至于他们想投资你的公司时,这是非常令人高兴的。
这项投资将使 Domino 能够追求更大的机会,我们比以往任何时候都更兴奋地加速我们已经开始的工作。
自去年红杉资本投资以来,我们的用户增加了两倍,客户和收入都翻了一番。但这还不是最有趣的。
更有趣的是,所有这些用户在行业方面是多么的多样化。这些领域从保险到制药,从先进制造业到互联网技术。大多数行业现在都将数据科学视为成功的关键因素。
此外,我们看到数据科学的成功已经成为 CEO 级别的问题。首席执行官们越来越想了解 Domino 能为他们的公司做些什么。
2700 万美元将使我们能够加快这一切。我们将使用它来扩展工程,以便我们可以构建更广泛的产品功能,将我们的销售足迹扩展到纽约市和伦敦,并增加我们的营销工作,以便更多的人了解数据科学和 Domino 的力量。
所有这些努力将使世界更加接*我们在 2013 年创立 Domino 时的设想。正如我们之前所写的,我们设想一个预测分析成为企业核心的世界。这正是我们所看到的情况。
我们看到越来越多的公司将定量研究和数据科学作为核心组织能力进行投资。随着这项工作越来越接*业务的核心,人们越来越多地通过协作来完成。公司比以往任何时候都更加关注知识的复合,尤其是在受监管的行业,人们越来越意识到数据科学工作需要可审计和可复制。这正是多米诺设想的世界,既令人欣慰又令人激动。
如果你想了解更多关于 Coatue 如何使用 Domino *台的信息,以及为什么 Domino 对他们的定量研究团队如此有价值,你可以阅读更多关于他们工作的信息。
现在回到创业的有趣部分。
Coatue 和 Sequoia 向 Domino 投资 4000 万美元
原文:https://www.dominodatalab.com/blog/coatue-sequoia-invest-domino
我们很高兴地宣布红杉资本和 Coatue 管理公司已经为多米诺公司领投了 4000 万美元的资金,其中也包括以前的投资者 Zetta Venture Partners 和彭博贝塔公司。我们将利用这笔投资来加速新数据科学*台功能的开发,获取人才,进行全球扩张,并巩固和深化与 SAS 和亚马逊等公司的战略合作伙伴关系。
在对所有可能性的兴奋之下,有两件事真正让我对这项投资感到振奋:第一:它对我们的客户说了些什么;第二:它反映了市场的什么。
首先,这突出了我们的长期客户正在经历的成功,以及许多新客户对模型驱动的渴望。Allstate、Bayer、Bristol Myers-Squibb 和其他公司等长期客户和行业领导者基于其推动强大商业价值的模式,迅速加强了与 Domino 的合作关系。此外,EasyJet、BNP Paribas Cardif、SunCorp Group 和 Lloyds Banking Group 等新的领导者最*都与 Domino 合作,以加速他们成为模型驱动的道路。我们很高兴加深与行业领导者的关系,并看到对 Domino 的需求加速增长。
其次,这一轮反映了帮助公司成为模式驱动型企业的机会的规模和重要性。正如软件在以前的计算时代区分赢家和输家一样,公司越来越意识到,变得由模型驱动不是一件好事,而是一种生存需要。此外,他们认识到数据科学的成功来自于建立新的组织能力,而不仅仅是购买一些过度宣传的人工智能工具。
今年 5 月,在旧金山举行的首届大会 Rev 上,我们与 300 多名数据科学领导者、高管和从业者讨论了这个问题。我们展示了我们对模型管理的愿景——一种新的技术和流程类别,帮助组织一致且安全地开发、验证、交付和监控创建竞争优势的模型。业界的反应是压倒性的积极和谦逊。
这一轮融资将帮助我们扩大员工基础和生态系统,以满足公司快速增长的模型驱动型需求。如果你有兴趣在这个旅程中帮助你的公司,看看我们最*的论文。如果你有兴趣帮助我们使其他公司成为模型驱动的,请查看我们的职业页面。虽然我们已经感受到了模型的变革性影响,但我们相信这仅仅是个开始。
大规模协作不会凭空发生
原文:https://www.dominodatalab.com/blog/collaboration-at-scale-doesnt-just-happen
大多数数据科学领导者可能都记得这样一个例子:几个数据科学家之间的合作激发了一个新想法,加速了新团队成员的加入,或者帮助加快了新模型的开发或部署。
他们还可能指出缺乏协作会损害他们团队的生产力和进展的实例,数据科学家重新创建其他人已经创建的代码、实验和流程。
这导致一些数据科学领导者开始以编程方式思考协作。这是数据科学领导者 Matt Cornett(来自一家领先的保险解决方案提供商)、Patrick Harrison(来自一家全球金融情报公司)和 Brian Loyal(来自 Bayer Crop Science)在他们的网络研讨会中讨论的几个主题之一:利用数据科学推动成果的最佳实践。
在他们的谈话中,他们分享了一些加强数据科学家之间合作的最佳实践。其中包括:
-
开发数据科学支持网络,促进数据科学家在业务和软件团队之间的协作。Patrick Harrison 解释说,将这些团队的数据科学家联系起来,使他们能够获得所需的支持和指导,分享技巧和诀窍,讨论共同的挑战,并倡导共同的兴趣。他说:“使用通用工具和*台确实有助于这一点,所以如果你能够,即使在联合或中心辐射模型中,标准化完成工作的通用方法和使用的通用工具,可以真正铺*通往有效数据科学支持网络的道路。”
-
牢记可重用性来构建。在拜耳,数据科学领导者要求团队在开始项目时牢记重用。“我们已经多次看到,一个成功的数据科学项目可以多么迅速地在意想不到的地方找到应用,”Brian Loyal 说。“通过尽早设定和强化最佳实践,您可以让潜在合作者的生活变得轻松许多。像 Domino 这样的标准化工具可以从一开始就帮助提高可重用性。”
-
定期进行同行评审。【Matt Cornett 和他的团队喜欢做的一项活动是鼓励数据科学家分享正在进行的工作。“这将培养更大的创造力,并真正有助于消除容易偏离轨道的孤立工作,”他说。“在工作过程中,你分享的越多,你得到的反馈就越多,我认为最终的结果就越好。”
他在每周的员工会议 — 上为这些评审安排了时间,每周指派一名数据科学家讨论他们的项目,并从团队的其他成员那里获得反馈。科内特说,多米诺骨牌在这方面也帮了大忙。“Domino 中有许多不同的协作特性,”他解释道。“如果你只是在自己的电脑上运行 RStudio 或 Jupyter Notebook,如果你想让别人运行你的代码,他们的电脑必须和你的电脑配置得差不多。Domino 有助于解决这一问题,这样人们就可以跳到其他人的代码中,并在协作时与代码进行交互,同时思考“我下一步需要做什么?”"
-
将多个数据科学家分配到一个项目中。Matt Cornett 说:“我在过去的几个角色中发现的一件事是,每当有一个以上的数据科学家在一个项目上工作时,你的成果真的会成倍增加。“这不一定是一条直线路径。我认为这是一种指数式的增长,你发现的洞察力、你能够提出的东西和你能够开发的东西都是如此。”
听 Matt Cornett、Patrick Harrison 和 Brian Loyal 讨论如何促进数据科学家之间的合作。
https://www.youtube.com/embed/AFt3wsjDAnI
聆听全面讨论以听取 Matt、Patrick 和 Brian 关于加强协作和推动成果的最佳实践的更多信息。正如这些领导者所展示的,大规模的合作不会凭空发生。无论现有的组织模式是集中式、分布式还是使用轴辐式模式,数据科学领导者都需要在模型开发的日常节奏中建立实践,以促进思想和知识的共享,从而成功创新。
了解更多信息
观看由数据科学领导者 Matt Cornett、Patrick Harrison 和 Brian Loyal 主讲的名为“利用最佳科学推动成果的最佳实践”的网络研讨会。
阅读报告“组织企业数据科学”,了解数据科学领导者用于构建企业数据科学战略的最佳实践的更多信息。
利用我们的模型速度评估来确定您的组织在成熟道路上的位置。
数据科学和数据工程之间的合作:对还是错?
原文:https://www.dominodatalab.com/blog/collaboration-data-science-data-engineering-true-false
这篇博文包含了关于解决人们在协作开发和部署模型时出现的紧张点的坦率见解。Domino 的内容主管与唐·迈纳和马歇尔·普雷斯坐下来讨论数据科学和数据工程之间的合作状态。这篇博文提供了精粹的见解、音频剪辑、摘录的引文以及完整的音频和书面文字记录。其他行业专家将提供有关该主题的更多内容。
介绍
在过去的五年、中,我们已经从的数据科学团队那里听到了许多关于他们在构建、部署和监控模型时的成功和挑战的故事。不幸的是,我们也听说许多公司已经内化了模型神话,或者数据科学应该像软件开发或数据资产一样被对待的误解。这种误解完全可以理解。数据科学涉及代码和数据。然而,人们利用数据科学来发现以前无法解决的问题的答案。因此,数据科学工作比软件开发更具实验性、迭代性和探索性。数据科学工作涉及受益于可扩展计算的计算密集型算法,有时需要专门的硬件,如 GPU。数据科学工作也需要数据,比典型的软件产品需要的数据多得多。所有这些需求(以及更多)凸显了数据科学工作与软件开发的不同之处。这些需求也凸显了数据科学和工程之间合作的至关重要性,特别是对于寻求保持或发展竞争优势的创新型模型驱动型公司而言。
然而,数据科学和工程之间的协作是一个众所周知的挑战。
由于“寻求真相,说出真相”只是达美乐的核心价值观之一,达美乐的内容负责人与 Don Miner 和 Marshall Presser 坐下来,就不同的优先事项、已知的协作挑战以及应对这些挑战的潜在方法进行了尊重和坦诚的对话。Miner 和 Presser 都在数据科学和工程领域拥有丰富的实践经验。Miner 是一家数据科学和人工智能公司的创始合伙人,代表了数据科学的观点。Presser 是 Pivotal 数据工程团队的成员,他代表了数据工程的观点。这篇博客文章涵盖了精华、关键摘录、音频剪辑,以及对话的完整回放和文字记录。其他行业专家也将提供关于该主题的其他内容。这篇博客文章和未来内容的目的是为围绕协作挑战的公共对话做出贡献,这一挑战一直缺乏从多个角度进行的深入分析性论述。
数据科学 vs 数据工程:我们是如何走到这一步的?
坦诚的讨论以对当前状态的检查开始,我们在数据科学中是如何达到当前状态的?似乎有无数的术语来描述与模型互动的人。目前使用的几个术语包括研究人员、数据科学家、机器学习研究人员、机器学习工程师、数据工程师、基础设施工程师、DataOps、DevOps 等。矿工和记者都评论并同意,在任何期限的任何转让之前,工作本身就已经存在。Presser 将数据工程定义为包含获取数据、构建数据存储、管理数据流(包括 ETL)以及将数据提供给数据科学家进行分析的技能。Presser 还指出,大型企业组织中的数据工程师也必须精通从乍看之下可能不会提供数据的部门“哄骗”数据。Miner 同意并指出,围绕数据科学与数据工程的定义有更多的思想领导力,这导致了市场中的模糊性。
Marshall Presser: “我认为,在我们有数据科学家之前,我们就有了数据工程师。数据工程师做的事情包括建立数据仓库,人们可以从这些数据仓库中获得基本的商业智能,切片和切块,对过去的状态进行分析,以及对未来状态进行某种最低限度的分析,了解业务昨天是什么样的,不管是什么业务。然后人们得出了一个聪明的结论,我们实际上可以用数据做更多的事情,而不仅仅是报告过去。从我的角度来看,数据科学家进入了现代分析思维,如果你愿意,10 年或 15 年前,我想我甚至没有听说过数据科学家这个术语。我不记得我第一次听到它是什么时候,但那是很久以前了。我甚至不确定我当时是否听过数据工程师这个词。我们发展出了这两种不同的专业,Don,我马上就要告诉你,但我对这两者区别的理解是,数据工程师的工作是从各种来源获取数据。按摩它,让它进入一个地方,然后数据科学家可以用它做有趣的机器学习。所以,我认为目前的状态是这样的。
唐·迈纳:“我基本上同意马歇尔所说的一切……仅仅因为我们创造了数据工程师、数据科学家这些术语,并不意味着它以前就不存在。[这些术语达到了]一个临界质量,人们在某个点上,“你知道,我们可能应该叫它什么。“有足够多的数据科学家跑来跑去,”哦,你知道吗?那应该有个名字。“或者,现在有足够多的数据工程师在工作,他们应该有一个名字…人们花更多的时间来定义数据科学的含义,而不是定义数据工程的含义。从大学课程开始,我从未听说过有人开设数据工程本科课程,但你开始听到数据科学课程的出现。…我知道这是为什么,但我认为我们现在所处的位置是,数据科学是一个非常明确的职业道路和职业。人们通常知道这意味着什么。…炒作的影响仍然很大,现在已经开始有所减弱。但是在数据工程方面…已经远离了典型的固执己见的人,他们会帮助定义这些东西,在会议上谈论它。这仍然给那里的市场留下了许多不确定性。所以,我认为这就是我们现在的处境。”
这些差异在现实生活中是如何转化的?例如招聘数据科学家和数据工程师?
由于矿工和记者的观点都基于实践经验,讨论转向了数据科学家和数据工程师之间的差异如何转化为在雇用和招聘中优先考虑哪些措施和技能。Miner 表示,当他招募数据科学家时,他会寻找技术能力(即机器学习)以及潜在的领域专业知识。Miner 还反驳说,当他招聘数据工程师时,他经常会寻找那些碰巧拥有数据库经验、各种技术通用性信号(即与 Kaftka 合作)以及“某种类型的态度”的软件工程师
“这对于不同的组织来说是不同的,但是……数据工程师需要真正的多面手,他们需要有能力在许多不同类型的角色中工作。他们需要能够编写软件,他们需要能够使用数据库,他们需要能够做 DBA 的事情,他们需要关心安全性,他们需要关心网络。这是一个非常跨学科的角色,所以当我寻找一名优秀的数据工程师时,我最看重的是他们技术技能的灵活性和多面性。此外,就像你提到的,你需要有某种态度才能在数据组织内部成功工作。在处理令人沮丧的问题时,他们需要非常有弹性。与此同时,作为一名数据科学家,我通常会寻找机器学习经验等技术技能。我正在寻找的特定技能,也许是他们过去工作过的某些领域。所以,实际上我会说,现在对于数据科学家来说,我通常在寻找特定的技术能力。对于数据工程师来说,更多的是态度和多面性,而不是具体的技术技能。”
Presser 和 Miner 都认为数据工程的功能很重要,尤其是获取数据的导航技能。Miner 特别指出
“在我们的咨询项目中,以及我认识并与之合作的另外两家数据科学咨询公司中,如果我们有一个纯粹的数据科学项目,这意味着数据工程不在范围内,客户说他们将负责此事,在我们有证据证明数据已经加载之前,我们不会开始工作。我们已经被他们烧伤很多次了,他们说,“哦,你知道吗?你们可以周一开始。我们将在下周的某个时候加载数据。“在数据出来之前,我们甚至不会开始……这也是数据工程师的另一个问题。我真的碰到了这个问题…在年轻的数据工程师方面,我们遇到的一个问题是,他们没有足够的资历来对抗那些不愿意友好相处的 Oracle 数据库管理员。…这是一个很难胜任的角色,因为,你是对的,…人际交往技能和政治导航技能对数据工程师来说非常重要。”
合作的现状:坦诚的见解
在探讨了技能、技术能力和工作流优先级的差异之后,对话转向了关于数据科学和数据工程之间协作的非常坦率的见解。在对话过程中出现的挑战包括一般沟通方面的挑战、缺乏双向尊重、可能缺乏良好的项目管理,以及期望数据科学工作流像软件开发工作流一样。当被问及“协作的当前状态如何?Miner 指出:“鉴于各个方面都在不断涌现,并且可能因组织而异。”
“对此我有两个答案。一个是,我不认为我工作的大多数组织中的数据科学家和数据工程师已经知道如何与任何人沟通。因此,甚至不是相互之间,而是数据科学家和数据工程师如何融入正在构建一些新系统的现代系统,他们如何与不同的业务线进行交互?他们如何与营销、销售互动?他们如何与产品设计互动?….即使从根本上来说,这个行业也存在重大问题。以及它们是如何相互作用的?…这很难说,因为我真的不能说,至少在过去几年里,我和他有过很多交流,比如,他是数据科学家,他是数据工程师。我们的角色被明确定义,他们在沟通。所以我想我会给出一个否定的答案,说,我不知道,现在说还为时过早…..从我的角度来看,我可以说一些关于不同的人在不同的场景中扮演不同的角色以及他们如何沟通的事情。
但总的来说,我认为角色还没有明确定义,还不能真正说出他们是如何沟通的……
在一些地方,我看到它非常实用,有负责数据的职能数据工程师,也有数据科学家……在很多情况下,双方都没有得到足够的尊重……数据工程师就像是,“这个数据科学家不知道他在做什么。他不知道如何处理数据。数据科学家不知道数据工程有多难。”另一方面,数据科学家对数据工程师不能足够快地完成工作感到沮丧。没有以他们想要的方式完成…我在两个方向上合作过的最好的数据人员都对其他人的情况感同身受。数据工程师对数据科学家在寻找什么和他们需要什么有直觉。数据科学家对数据工程师来说什么是困难的,什么是不合理的有直觉…这是我见过的最好的情况。最糟糕的情况,也是我通常看到的情况,是数据工程师只是处理数据,而不担心重复数据、编码错误的数据以及不适合数据科学的电缆布置方式。然后数据科学家看到这些东西,他们就像,“这是垃圾。你在做什么?我现在就要自己动手了。”他们会遇到一大堆问题,因为他们不知道如何访问数据和其他东西。我认为真正重要的是理解彼此的处境,理解他们都很艰难,并努力克服。"
Presser 还提供了关于在项目开始时让人们团结一致是建立同理心和解决协作紧张的重要方式的见解,以及矿工的观点
“一点也不罕见,[它]是真正糟糕的项目管理的症状。在我看来,解决这个问题的方法是在设计项目时让每个人都在房间里...这有点像人寿保险。你知道,直到你需要它的时候你才真正需要它,但是你必须一直拥有它,即使你不需要它。我见过的最成功的项目是这样的项目,数据科学家、数据工程师和应用程序开发人员从一开始就在房间里,与客户谈论他们想要解决的问题是什么,最小产品是什么,最终解决方案应该是什么,用户对此有什么期望。如果你从那个地方开始,你更有可能产生共鸣。…这是第一件事。
第二件事是,我发现唐描述的困难并不存在,至少在我从事的许多项目中,数据科学家和数据工程师之间的困难与数据科学家、数据工程师和应用程序开发人员之间的困难一样多。因为应用程序开发人员,我不想说对数据的蔑视,这太强烈了,但我想说的是,他们没有我和 don 那么多的经验和对数据的热爱。
对他们来说,数据库就是数据库,数据就是数据,石油就是石油。你知道,都一样。总的来说,他们对思考数据收集的种类和解决问题所需的问题不感兴趣。他们是这样的,“让我很快拿出一个最小的、可行的应用程序。”顺便说一句,我真的听过一个项目经理说,“你知道,我的开发人员写的任何一行代码,用来审计他们正在做的事情,把东西放进数据库,都是他们在开发应用程序时没有放进去的一行代码。”因此,他们经常鼓励巨额技术债务,因为他们现在已经有了这个伟大的应用程序,但当项目的第二阶段到来时,要用这个应用程序应该存储在某个地方但没有存储的数据做一些有趣的事情,我们有点像是在背黑锅,因为应用程序开发人员有点目光短浅。在我看来,这种短期思维阻碍了真正优秀的数据科学。"
Miner 指出,另一个潜在的紧张点包括将数据科学类似于软件开发的组织
“我们一直建议我们的客户,并且我认为有时会让人们感到惊讶的一个主要部分是,大多数组织默认将他们的数据科学项目视为他们目前正在组织中运行的软件工程项目。因此,如果他们希望他们的数据科学家填写吉拉门票,进行冲刺。不仅是数据科学家,数据工程也不是类似的任务。*台架构也是类似的。他们都有一些共同点。在数据科学、数据工程和*台架构中,这是那些你可以永远花在某件事情上而不会完成的事情之一。所以,这就是“我什么时候想停下来?或者,“我什么时候没钱了?”而不是,“好了,这个应用程序完成了。我会运送它,它在一个盒子里。去了就好了。我们把它发布给全世界,然后销售出去。太棒了。“从数据科学的角度来看,除非你去做,否则很难判断一件事要花多长时间。所以有这个鸡和蛋的问题。我不能写吉拉机票,这需要两个星期,直到我真的花了两个星期,并意识到它实际上需要四个星期。所以当你试图在这些项目上应用这些传统的软件工程项目管理的东西时,它不起作用。事实上,在很多情况下,它会造成伤害。实际上,有一门新的学科需要诞生。”
应对协作挑战
数据科学和数据工程之间的合作是一个很难解决的问题。虽然人们一致认为问题的难度导致缺乏广泛的公共讨论,但 Miner 和 Presser 深入研究了有可能缓解围绕合作的紧张点的各个方面。在对话之前,支持自然产生的协作的方面包括早期的利益相关者联盟,以及关于各种责任的相互尊重和直觉。此外,当被直接问及解决协作紧张点的潜在方法时,会出现关于企业文化、协作工具和“数据联络”的其他建议,协作紧张点是开发和部署模型的障碍。
普莱塞指出,企业文化有助于协作,特别是
“我认为在很多方面,这是一种企业文化。有些组织合作得很好,有些则不然,我在联邦政府部门工作了很长时间,这个项目由来自不同组织的人组成,这些组织不属于联邦政府。外包项目管理,外包数据库管理,外包这个,外包那个。这里有一点关于封地的争斗,客户要么因为合同原因不能做任何事情,要么选择不做任何事情。但这与 Don 所说的移情和尊重是相反的,在很多方面,这是由收入来源决定的。所以,我发现有些组织我喜欢一起工作,有些组织我不喜欢一起工作,因为企业文化不是分享、同情和尊重的文化。所以好好选择你的伴侣。”
Miner 也认同企业文化的贡献:
“我认为我工作过的最好的组织是那些鼓励公开交流,而不是内部竞争的组织。没有太多的自我…你可以在很多其他事情上逃脱,数据项目不是其中之一。这就是问题所在,……一个组织可能发现[许多自我]在他们所做的其他类型的工作中取得了成功,但在这种情况下,它并不是非常成功……对于我所看到的哪些工作很好的问题,我认为对我来说最重要的一个问题是,每个人都精力充沛,知道目标是什么。我认为这也与企业文化有关。一个企业文化有非常明确的目标,或者一个领导者有非常明确的目标,这些目标是非常透明的,允许每个人调整自己,他们一天中的微小互动,成为这些目标的一部分。此外,数据科学的目标通常很奇怪。有时他们并不直截了当。”
虽然 Presser 提倡优先考虑面对面协作以加快工作和解决协作问题,但 Miner 提倡配备“数据联络员”以及协作工具,因为数据科学工作的性质决定了这一点:
“关于马歇尔所说的基本沟通,我想补充的另一件事是,因为我确实同意,并非所有的利益相关者和所有的人都会以不同的身份在早期参与讨论。这实际上是首席数据科学联络员这种角色在公司中的合适位置,在公司中,您不一定需要您的数据科学家(如在大型组织中)参与每个决策,但有一位数据科学领导者,即首席数据官或首席数据科学家,或者不管头衔是什么,我不认为这是真正确定的,会参与这些范围界定会议。我们已经看到这是成功的。从沟通的角度来看,另一件事可能也是如此,实际上,我将为工作中的实时远程协作工具投票…..我同意,在项目开始时,让每个人都在房间里真的很好,因为需要进行大量的沟通。但同样,对于这些项目来说,电子邮件感觉太慢了。数据科学家正在慢慢地获得见解,数据工程师也一样,在他们积极工作时,会以一种特别的方式遇到不同的问题。所以我们经常使用 Slack,我认为现在很多人都在使用它,而且它非常成功,因为你不必把一堆东西塞进一封电子邮件,比如,“这是我今天的问题清单。“也许你可能有两个数据科学家在谈论一个问题,而数据工程师正在偷听,并说,“哦,嘿,顺便说一句,这是我如何设计它的,”或者说,“哦,嘿,是的,我可以很快为你解决这个问题。不会花我太多时间。“所以这种更实时的交流是好的,我也认为,在某些情况下,这几乎比在物理办公室里更好。即使你坐在办公桌前,离数据工程师有三张桌子远,你还是要起身去打扰那个人。在这里,我想我实际上是在论证,随着项目的进行,我认为 Slack 和其他类似的东西实际上可能是目前最好的工具之一。”
当被问及如何进一步解释“数据联络员”的概念,并提供额外的澄清,以及这个人是否可以成为“项目经理”时,Miner 指出
“…在一些大型项目中,我和尼尔斯[联合创始人]都提供咨询服务。这是一个非常必要的角色,我们与其他一些客户合作,我们建议他们这样做,这实际上有两个原因。一个是,数据科学需要大量的关注。当你在处理数据科学问题时,你正在摸索一些机器学习的东西,你正在处理数据,一个中断可能会打破你头脑中几个小时建立的卡片房子,如果你负责参加随机会议来讨论用例和事情,你永远不会完成任何事情…你需要做的是,你需要选择一些人。我的意思是,老实说,这些人的个性比其他人更好,但真的需要有人在必要时能够做到这一点,了解真正的问题,能够代表数据科学家在这些会议上实际开展工作。但是由于专注的要求,你需要选择一个人作为牺牲者来做这件事,四处走动并根据经验说话是可以的,这样其他人就可以专注了。这是一个非常重要的角色……在一个拥有庞大团队的大组织中。”
对潜在未来状态的思考
在解决了可能有助于缓解协作紧张的潜在问题后,讨论转移到了协作的潜在未来状态。讨论的潜在未来状态场景包括角色的日益专业化,以及对帮助管理协作的规程或过程的需求。
马歇尔出版社:“……从未来国家的角度来看,我认为角色的专业化只会增加。我们将会有纯粹的数据科学家、纯粹的应用程序开发人员、纯粹的数据工程师、纯粹的*台架构师、纯粹的联络人员、纯粹的项目管理人员,这些人可能会与联络角色联系在一起,并保持这些人的协调,以便他们可以说共同的语言,并相互同情和尊重,我认为这是未来的挑战。但是一旦我们解决了这个问题,那就太好了。”
唐·迈纳:“我认为就马歇尔的观点而言,……这里最大的问题是缺乏围绕管理、围绕数据工程、数据工程和数据科学之间的沟通的过程,缺乏管理,如果你想专业化,你就需要一个数据联络员...你想有一个数据工程师专家吗,因为最早的数据科学项目,像最小的项目,数据科学家也在做数据工程工作。可能还有*台架构工作,以及应用程序开发。
一旦开始专业化,这也是我们现在有数据工程师和数据科学家的原因,这两个人需要有一个沟通的过程。
当你有了一个应用程序开发人员,现在他们需要一个过程来沟通和一起工作。
你有*台架构,你有管理层,你有顾问联络员,你有业务的其余部分,所有的都是关于过程,老实说,我认为没有人真正知道他们在做什么。我认为阻碍我们在这个行业发展的第一件事是建立大型数据科学团队和组织。我现在看到的最成功的数据科学团队就像三个人……这可能是一个巨大的组织,但这三个人要做很多工作,如果他们想扩大到 20 人或 40 人,那是行不通的。事实上,我有一天看到了一个特殊的异常现象,我正在丹佛招聘一名新的数据科学家。我特别想要一名丹佛的高级数据科学家,所以我在 LinkedIn 上发布了一个丹佛数据科学家的职位空缺。几天之内我收到了大约 30 份申请。11 个来自一家公司…我问一些在丹佛的同事,“X 公司怎么了?我刚刚收到了这家公司数据科学家的 11 份申请。”首先,我甚至不知道他们有很多数据科学家,他们说...因为[他们]是数据科学家,他们[说]“是的,他们到处都是职位空缺。他们雇佣了数量惊人的...过去两年里,数百名数据科学家。”…现在很明显他们在大出血,因为他们可能没有真正考虑如何沟通。我认为这是我希望看到的世界走向,如果我们有更好的过程,就像我们在软件工程方面所做的那样,持续集成和测试,良好的 UX 原则等等。我们现在可以建立真正可扩展的软件团队。
数据科学还没有出现…...不过,数据工程和数据科学的主题只是这支矛的尖端。"
管理数据科学:困难,但并非不可能
唐·迈纳:“没有多少从业者会问:“我如何管理好一个数据科学项目?"….总得有人在某个时候谈论它。”
安斯潘塞:“你认为是为什么?你认为人们为什么不谈论它,或者不解决它?”
马歇尔出版社:“嗯,对一个人来说,很难。”
达美乐的核心价值观之一包括“寻求真理,说出真理”。我们在内容中利用这一核心价值来支持人们解决数据科学中难以解决的问题。这篇博客文章涵盖了当人们围绕模型的开发和部署进行合作时出现的紧张点的坦率讨论中提炼出的见解、音频剪辑和摘录。如果对更深入的见解感兴趣,可以考虑听 45 分钟以上的录音或通读全文。两者都在下面提供。我们也意识到,关于合作还有其他的情况、细微差别和纹理没有在这篇博文中涉及,我们正在与其他行业专家合作阐述不同的观点。我们将继续提供更多即将推出的内容,涵盖数据科学和工程之间的合作。如果你有兴趣为这一公共讨论做出贡献,请联系我们。
全音频记录
如果感兴趣,这部分提供了超过 45 分钟的讨论。
数据科学、产品和工程团队之间的协作
原文:https://www.dominodatalab.com/blog/collaboration-data-science-product-engineering-teams
超导健康的产品负责人尤金·曼德尔,最*拜访了多米诺总部,坦率地讨论了数据科学领域的跨团队合作。Mandel 之前在多家公司的数据工程、产品和数据科学团队中担任领导职务,这为他识别和解决潜在的紧张点提供了独特的视角。
考虑产品意识
尤金·曼德尔,超导健康的产品负责人,最*拜访了多米诺总部,讨论数据科学领域的跨团队合作。虽然 Mandel 的背景是工程,但他曾在多家公司的数据工程、数据科学和产品团队中担任领导职务。Mandel 在这些角色中的实践经验为他提供了一个关于数据科学内部合作状态以及“为什么”会出现一些潜在的跨团队紧张点的独特视角。在坦率的讨论中,他指出了数据科学工作的概率性质与“普通软件工程”的不同。他还指出,这种差异可能会给数据科学、产品和工程团队在构建数据产品时带来一些挑战。然而,曼德尔主张通过从多个角度理解潜在的紧张点以及“产品意识”来建立信任。例如,各方可以通过后退一步,考虑目标用户将如何体验他们的最终产品来“关注产品”。Mandel 还推测,我们将看到的行业潜在趋势之一是“数据科学将变得更像数据产品开发,并成为产品组织的核心部分。”
这篇博客文章提供了一些讨论的摘录、录音以及完整的对话文字记录。这篇文章是正在进行的系列文章的一部分,在该系列文章中,我与和的各种行业成员坐下来,捕捉他们对数据科学合作现状、合作紧张点以及如何解决这些问题的不同观点。这一系列的目的是促进关于数据科学内部跨团队协作的公开讨论,以加速数据科学工作。
将产品管理原则应用于数据科学
在我们在 Domino 总部进行讨论之前,我已经知道曼德尔已经就将产品管理原则应用于数据科学发表了演讲和写作。我请他解释一下他是如何达到这一观点的。Mandel 提到,他开始注意到数据科学团队如何从顾问转变为构建数据产品,如推荐引擎
“当您看到数据科学团队如何从纯粹的顾问角色转变为产品构建角色时,您就会看到产品管理原则是如何应用的。因为,起初,人们认为我们正在构建的是软件,所以很可能,它只是普通的软件。然后我们开始意识到有很多相似之处,但也有很多不同之处。当然,另一件事是,与“普通软件工程”不同,从事数据科学工作的人的背景更加多样化。我和物理学家一起工作过。我和心理学家合作过。我和社会学家一起工作过。我和普通的软件工程师一起工作过,他们来自商业背景。如果你在一家正规的软件公司工作,你不能假设大多数人都有这种共享的软件产品管理文化。当去数据科学团队或构建数据产品的公司时,最好不要这样假设,要明确得多。”
“常规软件开发”与数据产品开发
Mandel 后来也转述了“普通软件开发”和开发数据产品之间的关键区别
“我工作的上一家公司也是一个非常有趣的故事,因为我加入的那家公司有着非常好的软件开发文化...有测试,有 CI/CD,有经验的工程师,有经验的工程管理和产品管理。但是没有多少构建数据产品的经验。当我开始确定可以构建什么样的数据产品以及如何构建时,我们确实经历了几次迭代,首先,获得信任,然后就开发产品的过程达成一致。这是一个要点,因为,假设在“普通软件开发”中,很多公司会使用 Scrum 或 Scrum 的一个变体,他们有很多关于部署、故事点和故事的对话,对吗?当你开发数据产品时,你不能完全采用相同的过程,仅仅因为不确定性的水*要高得多。你的过程应该集中在不确定性和原型的迭代减少上。因此,弥合工程和数据科学中的这种理解差距是一项挑战。一旦我们过了这一关,我们就开始讨论产品本质上...(products 是复数,因为有一个核心产品,然后是开发数据科学产品)...他们会怎么说话?对吗?我发现,首先,在你获得信任后,这很重要,这确实有助于在主要非数据产品和数据产品之间就非常具体但足够宽泛的 KPI 达成一致。然后,它允许我们更快地迭代数据产品,而不会给核心产品带来很多风险。这实际上是我们一直遵循的模式,而且非常成功。”
原型中不包含数据:一个应该避免的常见错误
当被要求概括一个例子,并提出一个产品经理在与数据科学家合作时需要考虑的特别棘手的问题时,Mandel 转述道
“那么,产品经理如何与数据科学家合作呢?当一个产品经理原型化一个常规的软件产品,回到过程,这个过程与数据产品略有不同。为什么?因为当你设计一个常规软件产品的原型时,我们可能已经讨论过用户故事,用例,你已经开始做一些 UI 的原型,把它带给人们并得到反馈。都非常有价值。
当你在制作一个数据产品的原型时,你必须完成所有这些工作,而且,你必须实际访问将参与这个数据产品的数据,理解它,分析它,并把它插入到原型中。为什么?因为在不知道数据的情况下,我所看到的产品经理所做的就是在产品能削减什么和不能削减什么上犯错误。
有时你可以假设产品,他们可以访问的数据,可以告诉你更多。您正在基于这一假设创建一个原型。当然,对用户来说,这一切看起来很神奇,因为它给你一个推荐,它知道你是谁,你喜欢什么,你做什么,对吗?但当它从原型阶段过渡到实际产品时,你会发现你拥有的数据集不太可靠,更加稀疏,当根据这些数据创建的推荐向用户展示时,它们并不完全是神奇的。对吗?这是一个例子。除非你的原型中包含数据,否则这是一个问题。没有数据产品管理经验的产品经理容易犯这个错误。"
数据产品 vs“普通”软件工程:与 JIRA 门票的紧张关系和潜在风险
在讨论中,Mandel 还强调了数据科学工作在本质上是如何具有概率性的,以及他的工作如何会导致紧张点,特别是在工程方面
“现在谈谈工程师和数据科学家之间的合作...我所看到的是,在常规的软件工程中,这可能过于一般化,但事情往往是“真”或“假”的。当你看软件产品的单元测试、集成测试时,所有这些来源...比如:值是五,这是真的,这是假的,这个列表的长度是 573。当处理数据产品时,你从确定性世界转移到概率性世界,这意味着你期望的是范围,然后你必须判断什么有意义,什么没有意义。
因此,你的测试开始变得不同,这意味着当你....当然,你知道,和工程师一起工作,你总是谈论测试。所以,测试框架和你可能使用相同的框架,但是你如何组织测试是不同的。什么被认为是错误,或者坏的,即使这样,那也是一件非常基本的事情....但即使这样也有待讨论。
在我工作过的一个团队中,我们有这样的极端情况....我仍然认为这很有趣....每当分类器产生错误的预测时。起初,团队想在 JIRA 归档,每一个单独的案例。现在,如果你从软件工程的角度来考虑,实际上这并不是一个疯狂的想法。嗯,是个 bug。每一个错误的预测都是一个错误。虫子去了 JIRA。他们是被管理的。它们是优先的。这听起来几乎合乎逻辑。但是如果你是从数据科学的角度来看,这就没有什么意义了。因为我们知道它(分类器)在工作,一个是某种不同的过程。"
曼德尔也有相关的见解
“…。当谈论普通软件工程和数据产品之间的区别时,软件工程也在谈论风险。在正常的软件工程中,所有的风险都存在于代码中。错误的代码。未记录的代码。改变代码。正常的软件工程组织在处理代码方面有很好的文化和流程。任何工程师加入你的团队,他们可能都不会感到惊讶。对吗?你知道的。单元测试,集成测试,CI/CD,文档。对吗?
在数据产品中,这些都存在。但是除此之外,还有一个风险,不是来自代码,而是来自数据。因为每次数据进入数据产品时,我们都无法控制这些数据,所以数据的变化可能会对产品的下游造成严重破坏。即使源代码没有一点改变。这实际上是正常软件工程中不存在的东西。
我最喜欢的事情之一是,每次我与数据产品人员、数据科学家交谈时,我都在收集可怕的数据故事。关于远离产品上游的某个地方的一些无害的数据变化如何开始对下游造成严重破坏的故事。如果你幸运的话,它只会打破你的产品。但是如果你运气不好,它会悄悄地开始表现不同。这意味着在正常的软件工程中,代码是,我猜,一等公民。在数据产品中,有两个参与者:代码本身和数据。这种,你知道,我们试图做的是让数据集成为一等对象,数据世界的一等公民,可以测试,可以描述,可以谈论。"
了解更多信息
这些摘录只是最*在 Domino HQ 关于数据科学中跨团队协作的讨论中的一些见解。如果您对其他见解感兴趣,我们将提供录音和完整的讨论记录。为了可读性,已对书面记录进行了编辑。
录音
完整抄本
为了可读性,下面的文字经过了编辑。
安·斯潘塞,Domino 数据实验室内容主管:非常感谢您同意这样做。我非常感激。我知道我们已经认识一年左右了,但是如果你能提供一些关于你最*在忙些什么的见解,那就太好了。
超导健康产品主管尤金·曼德尔:好的。只是一点背景。15 年来,我一直在不同的行业为不同的用例做软件产品,从 IP 语音到营销服务软件。但是贯穿这些产品的主线是数据。具体来说,就是如何利用数据让产品变得更好,即使在数据不是产品本身的情况下。
我的上一份工作是在一家名为 Directly 的公司工作,在那里我们帮助其他公司利用他们的客户和资源提供客户支持。我加入公司是为了帮助弄清楚数据如何让产品变得更好。我们最终建立了模型和管道,从本质上确定了常见的数学方程,并提供了合理的响应。
在过去的半年多,我加入了另一家公司超导健康。我们与医疗保健和生命科学领域的客户合作。我们为他们做各种各样的数据项目,并为更大的事情建立一个面向外部的产品。不仅对于生命科学,而且对于任何处理数据集和数据管道的公司都是如此。
安·斯潘塞:在过去的几年里,你撰写并展示了关于在数据科学基础上应用产品管理原则的文章。你能解释一下是什么让你产生了这种观点,以及你的旅程吗?
尤金曼德尔:是的。所以,我的背景是工科。这很可能说明了这一切。大概在七年前,当数据科学开始被贴上“数据科学”的标签时,我开始意识到这是我一直在做的事情的很大一部分。这真的引发了我的思考,“有什么不同?”我认为有趣的是,公司中的许多数据科学团队,许多数据科学项目,以及数据科学家的许多职业生涯,都是从顾问角色开始的。
当我们获得数据,我们理解它,我们做一些非常酷的事情,我们工作的最终产品,也许,它是一个模型。也许是某种报告。可能是推荐吧。但它本身并不是一个运行的产品。
以我的工程背景...嗯,那对我来说不是最自然的事。所以,我总是被一些东西所吸引,比如,你建立一些可以运行的东西,用户可以把它放在哪里。对我来说,我开始看到数据科学团队正在进行这种转变,从工作成为某种设备,到工作产品成为实际产品。
比方说,如果我们在谈论某种营销用例...数据科学可以提出建议,解决“与特定用户群交流的最佳方式是什么?”这很好。但是,还有绝对的最后一英里....好的,让我们以这种方式与这些用户交流,这通常涉及到构建一个产品、某种推荐引擎、分类器或其他东西。
当您看到数据科学团队如何从纯粹的咨询角色转变为产品构建角色时,您就会看到产品管理原则是如何应用的。因为,起初,人们认为我们正在构建的是软件,所以很可能,它只是普通的软件。然后我们开始意识到有很多相似之处,但也有很多不同之处。当然,另一件事是,与“普通软件工程”不同,从事数据科学工作的人的背景更加多样化。我和物理学家一起工作过。我和心理学家合作过。我和社会学家一起工作过。我和普通的软件工程师一起工作过,他们来自商业背景。如果你在一家正规的软件公司工作,你不能假设大多数人都有这种共享的软件产品管理文化。当去数据科学团队或构建数据产品的公司时,最好不要这样假设,要明确得多。
安·斯潘塞:当你谈到...你是如何注意到数据科学家如何转变为顾问角色,然后建议变成了你的产品,以及数据科学家如何来自所有这些不同的背景,物理学家、心理学家等等....你认为这有助于合作吗?你认为数据科学的合作现状如何?
Eugene Mandel: 我认为我更了解的是数据科学、工程和产品团队之间的协作。在我工作过的每一家公司...这是一个非常有趣的进化故事....例如,在 Jawbone,数据科学团队开始制作数据故事和有趣的见解,最终...最终,我拥有了一件产品。
在这种情况下,该产品位于应用程序或 Jawbone 的应用程序中,可以跟踪您的步数和饮食,并为您提供一些建议。然后是数据科学团队和产品/软件工程团队之间的谈判。结果是我们都是应用程序的一部分,UI 只是支持解释格式化的见解和建议。但是数据科学团队将拥有正在显示的内容。数据科学将实现产生这种报价和建议的管道。
但这种合作一开始并不顺利。因为,尤其是如果数据科学团队中没有工程师的话,会有很多挑战。第一个挑战是如何获得工程团队的信任。因为如果你告诉一个工程师,你知道,如果你不是工程师,你告诉一个工程师“我只是要把东西推进你的导向产品...你有测试,你有 CI/CD,我没有。”那么,你知道,你真的不能指望一个类似的接受。对吗?这是一个颚骨的例子。
我工作的上一家公司也是一个非常有趣的故事,因为我加入的公司有非常好的软件开发文化...有测试,有 CI/CD,有经验的工程师,有经验的工程管理和产品管理。但是没有多少构建数据产品的经验。当我开始确定可以构建什么样的数据产品以及如何构建时,我们确实经历了几次迭代,首先,获得信任,然后就开发产品的过程达成一致。
这是一个要点,因为,假设在普通软件开发中,很多公司会使用 Scrum 或 Scrum 的一个变种,他们有很多关于部署、故事点和故事的对话,对吗?
当你开发数据产品时,你不能完全采用相同的过程,仅仅因为不确定性的水*要高得多。你的过程应该集中在不确定性和原型的迭代减少上。这有点像敏捷,但不完全是敏捷,不像软件开发中的 scrum。
因此,弥合工程和数据科学中的这种理解差距是一项挑战。
我们讨论过这个问题后,我们开始讨论产品的本质...(products 是复数,因为有一个核心产品,然后是开发数据科学产品)...他们会怎么说话?
对吗?我发现,首先,在你获得信任后,这很重要,这确实有助于在主要非数据产品和数据产品之间就非常具体但足够宽泛的 KPI 达成一致。然后,它允许我们更快地迭代数据产品,而不会给核心产品带来很多风险。这实际上是我们一直遵循的模式,而且相当成功。
安·斯潘塞:在你的两个例子中,你都提到了赢得信任和在过程中努力。当数据科学家与工程人员合作时,您认为还有什么其他最棘手或最常见的问题吗?或者产品,当他们与数据科学家合作时。我不知道这些是否是最常见或最棘手的问题,但我只是想把它放在那里,以便您可以解开您认为协作中最棘手或最常见的问题。
尤金·曼德尔:很多问题都可以打包成流程,因为它暗示了我们如何工作,不工作,我们如何谈论工作,以及我们如何合作,对吗?但是说得具体一点?
好的,那么产品经理如何与数据科学家合作呢?当一个产品经理原型化一个常规的软件产品,回到过程,这个过程与数据产品略有不同。为什么?因为当你设计一个常规软件产品的原型时,我们可能已经讨论过用户故事,用例,你已经开始做一些 UI 的原型,把它带给人们并得到反馈。都非常有价值。
当你在制作一个数据产品的原型时,你必须做所有的事情,而且,你必须实际访问将参与这个数据产品的数据,理解它,分析它,并且实际上把它插入到原型中。为什么?因为在不知道数据的情况下,我所看到的产品经理所做的就是在产品能削减什么和不能削减什么上犯错误。
有时你可以假设产品,他们可以访问的数据,可以告诉你更多。您正在基于这一假设创建一个原型。当然,对用户来说,这一切看起来很神奇,因为它给你一个推荐,它知道你是谁,你喜欢什么,你做什么,对吗?但当它从原型阶段过渡到实际产品时,你会发现你拥有的数据集不太可靠,更加稀疏,当根据这些数据创建的推荐向用户展示时,它们并不完全是神奇的。对吗?这是一个例子。除非你的原型中包含数据,否则这是一个问题。没有数据产品管理经验的产品经理容易犯这个错误。
现在谈谈工程师和数据科学家之间的合作...我所看到的是,在常规的软件工程中,这可能过于一般化,但事情往往是“真”或“假”的。当你看软件产品的单元测试、集成测试时,所有这些来源...比如:值是五,这是真的,这是假的,这个列表的长度是 573。当处理数据产品时,你从确定性世界转移到概率性世界,这意味着你期望的是范围,然后你必须判断什么有意义,什么没有意义。
所以,你的测试开始变得不同,这意味着当你....当然,你知道,和工程师一起工作,你总是谈论测试。所以,测试框架和你可能使用相同的框架,但是你如何组织测试是不同的。什么被认为是错误,或者坏的,即使这样,那也是一件非常基本的事情....但即使这样也有待讨论。
在我工作过的一个团队中,我们有这样的极端....我仍然认为这很有趣....每当分类器产生错误的预测时。起初,团队想在 JIRA 归档,每一个单独的案例。现在,如果你从软件工程的角度来考虑,实际上这并不是一个疯狂的想法。嗯,是个 bug。每一个错误的预测都是一个错误。虫子去了 JIRA。他们是被管理的。它们是优先的。这听起来几乎合乎逻辑。但是如果你是从数据科学的角度来看,这就没有什么意义了。因为我们知道它(分类器)在工作,一个是某种不同的过程。
对吗?所以,那不是...因此,测试你如何处理错误,原型制作,这可能是我想到的潜在[合作]问题的第一个例子,但这只是许多例子中的一个。
安·斯潘塞:绝对是。有什么实用的建议可以分享给大家吗?因为你在多家公司都经历过这种情况,并且身兼数职...在产品、工程或数据科学领域。我认为你有非常独特的观点,因为你戴过所有的帽子。在解决可能出现的一些紧张点或获得信任或建立流程的一些方法方面,你对人们有什么样的实用建议?
尤金·曼德尔:所以,获得信任和建立流程,当然,这纯粹是一种观点,对吗?所以,你知道,不同的公司以不同的方式构建他们的数据科学团队。我认为,数据科学团队尽可能接*全栈产品组非常重要。这意味着,在团队中,要么有可能是工程师并具有产品意识的数据科学家,要么有纯粹的数据科学家、工程师和产品经理混合组成的数据科学团队。因此,拥有工程师有助于建立与其他工程师的信任,因为你们说相同的语言。当你谈到持续集成、持续部署、测试、质量甚至代码风格时,对吗?如果你是一名数据科学家,这不一定是你首先关心的问题。
这很重要,你必须在团队中有产品人员,或者有产品意识。因为,你可以谈论分类器和模型以及任何一种数据产品的出口,但你必须更进一步。你必须考虑用户如何体验这些产品。他们觉得他们可信吗?他们会觉得困惑吗?如何削减产品?
我认为,在工作中,数据科学团队应该尽可能地接*产品团队....成为全栈产品团队...在获得其他工程师、其他工程组织和产品组织的信任,并真正完成工作方面,有很大的成功机会。
安·斯潘塞:你提供了很多见解,比如你去过的不同公司、不同的例子、你见过的一些最棘手、最常见的问题以及实用的建议。你对数据科学的未来状态有什么看法?或者你希望未来的状态是什么样的?
尤金·曼德尔:这当然是纯粹的推测,对吗?因为-
安·斯潘塞:是的,没错。没错。
尤金·曼德尔:因为没人知道未来,对吧?
安·斯潘塞:这是一片蓝天
尤金·曼德尔:假设我们确实知道未来,这很幽默,对吧?但是,好吧,这是我认为我看到的。这也是纯粹的观点和推测,对吗?因此,没有数据科学的公司开始做数据科学,而开始做数据科学的公司开始转向数据产品,成为其核心产品的一部分。
我认为,对我来说,这是正在发生的主要趋势。当我直接使用时,它实际上是一个很好的例子。因为,你知道,这是一个初创公司,但这是一个正在走向成熟的初创公司...真实的产品,真实的客户,真实的团队,真实的流程,但是没有数据方面的经验,对吗?所以,第一阶段只是理解,哦,我们拥有的数据是非常有价值的。组织它。只是建造管道来组装它。记录下来。对吗?所以,你知道,莫妮卡·罗加蒂的数据科学金字塔需要什么。你知道,相当于马斯洛金字塔,但对于数据科学。
知道你有数据。组织数据。建设基础设施。然后推理什么可以相信,什么不可以相信。然后你会想,我能用这个做什么呢?所以,见识。对吗?但是一旦你有了见解,你开始,你几乎必须开始思考,嗯,这是一份报告。一份报告可能每月产生一次。我如何才能获得这些见解?利用这些见解来构建和改变我的核心产品的逻辑。对吗?这需要建立数据管道。这需要建立实际的模型、分类器等等...当然,一旦你将数据科学引入你的产品,它就变成了一个数据产品,然后你必须进行测试。你必须是产品经理。你必须记录。你必须创建用户界面。对吗?因此,我看到的主要趋势是数据科学变得越来越像数据产品开发...也是产品组织核心的一部分。安·斯潘塞:非常感谢你的真知灼见。我感觉这对我们的读者会非常非常有用。你还有什么要补充的吗?
尤金·曼德尔:我想,可能只有一件事和我现在做的事情有关,这两件事都有。当谈论普通软件工程和数据产品之间的区别时,软件工程就是在谈论风险。在正常的软件工程中,所有的风险都存在于代码中。错误的代码。未记录的代码。改变代码。正常的软件工程组织在处理代码方面有很好的文化和流程。任何工程师加入你的团队,他们可能都不会感到惊讶。对吗?你知道的。单元测试,集成测试,CI/CD,文档。
在数据产品中,所有这些都存在。但是除此之外,还有一个风险,不是来自代码,而是来自数据。因为每次数据进入数据产品时,我们都无法控制这些数据,所以数据的变化可能会对产品的下游造成严重破坏。即使源代码没有一点改变。这实际上是正常软件工程中不存在的东西。
我最喜欢的事情之一是,每次我与数据产品人员、数据科学家交谈时,我都在收集可怕的数据故事。关于远离产品上游的某个地方的一些无害的数据变化如何开始对下游造成严重破坏的故事。如果你幸运的话,它只会打破你的产品。但是如果你运气不好,它会悄悄地开始表现不同。这意味着在正常的软件工程中,代码是,我猜,一等公民。在数据产品中,有两个参与者:代码本身和数据。这种,你知道,我们试图做的是让数据集成为一等对象,数据世界的一等公民,可以测试,可以描述,可以谈论。
安·斯潘塞:这又回到了你的期望....在那里你看到最有效的结果是如此的接*。数据科学家、产品和工程师。
尤金·曼德尔:是的。
安·斯潘塞:这似乎引起了共鸣。
尤金曼德尔:是的。还有一件事要补充...这是一个有趣的模式,当合作做某件事时,比如每次我们一起做某件事时,他们会用他们盯着的东西。如果我们在谈论,你知道,即将开业的大办公室的商业计划,嗯,我想我们会谈论和盯着分心,对不对?如果我们在讨论修改代码,问题就在于 github 上的 pull 请求接口。我们可能在谈论测试,或者别的什么。谈到产品规格,你可能会盯着 word 文档或 PM 工具,对吗?然而,今天,当你谈论数据集时,它应该是什么样子,它真正是什么样子,它是做什么的,实际上没有一件事是你在谈论时盯着看的。这是一个问题,因为这向你展示了数据集....他们在这一发展中没有获得一等公民的角色。
安·斯潘塞:这很有道理。尤其是试图围绕这一点建立一个过程。
尤金曼德尔:是的。没错。因为任何过程都涉及协作。与代码不同,你可以冻结代码。太好了。但是你不能真正冻结数据。好吧,也许有一个例外。如果您使用的是不依赖于外墙的内部数据,您可以冻结数据。但在大多数情况下,在许多最易变的数据产品中,不处理来自团队之外,甚至可能来自部门之外的数据流。如果它不出来,如果它不是内在的,你不能控制它,这意味着它可以改变。
数据科学中的合作原则
原文:https://www.dominodatalab.com/blog/collaboration-data-science
数据科学不再是一个人或一个小团体的专业。它现在是竞争优势的一个关键来源,因此,项目的规模继续增长。协作至关重要,因为它使团队能够比任何个人承担更大的问题。它还允许专业化和共享环境,减少对“独角兽”员工的依赖,这些员工无法扩展,是关键人员风险的主要来源。问题是协作是一个模糊的术语,模糊了多个概念和最佳实践。在本帖中,我们澄清了重复性、再现性以及尽可能的再现性的黄金标准之间的区别。通过建立无摩擦团队内和跨团队协作的最佳实践,您可以显著提高数据科学工作的效率和影响。
可重复性
从基础开始,可重复性是协作数据科学流程的关键组成部分。可重复性是指给定的过程(无论是数据清理脚本、功能工程管道还是建模算法)在给定相似输入的情况下将产生相同(或几乎相同)的输出。为了让数据科学家能够协作,他们必须能够依赖他们一直保持一致的工具和程序。这通常表现为环境和数据不稳定性对数据科学协作的挑战。
我经常和有“它在我的电脑上工作”问题的科学家和研究人员交谈更糟糕的是,一些底层系统库或依赖关系会导致算法在一个科学家的机器上产生一个信号,而当在另一个科学家的机器或生产环境中运行时,它会产生完全不同的信号。
在金融领域一家公司的定量研究会议上,我分享了一个我们见过的最可怕的例子,说明没有保证可重复性的环境是多么危险。他们建立了一个产生交易策略的模型,并对其进行了广泛的回溯测试。该模型在原作者的笔记本电脑上运行时,给出了一个信号,即某一特定证券不应交易,因为这几乎肯定会导致重大资本损失。当研究人员将代码交给一名负责实际交易的分析师时,他们在笔记本电脑上运行代码,代码为许多资产生成了强烈的买入信号。由于信号存在根本缺陷,这最终导致该组织花费了大量资金。
经过大量的相互指责之后,他们发现这两位数据科学家发布了一个不同的底层数据解析库。对于第一个科学家,格式错误的日期被解析为 NA,而对于第二个科学家,它们被解析为 1970-01-01。这意味着他们生成的模型在行为上是不同的,甚至对相同的数据生成完全不同的输出。
尝试诊断计算堆栈是否可重复可能是一项重大挑战。现代计算环境是一个难以想象的庞大的抽象层堆栈,要找到一个更新到不同版本的库依赖项(即使有像 conda 这样试图确定性地构建精确环境的工具)可能是一项徒劳的任务。
任何没有完全可重复环境的协作实践都不太可能证明自己有价值或被采用,因为这些行为和期望的细微差异和变化会削弱对系统的信心,并为采用提供很高的障碍。
再现性
下一步是再现性。伊利诺伊大学信息科学学院的副教授维多利亚·斯托登描述了一个强大的再现性分类法,它描述了它的三个方面:统计再现性、经验再现性和计算再现性。
统计再现性
当提供关于统计检验、模型参数、阈值等选择的详细信息时,分析在统计上是可重复的。这主要与研究设计的预注册有关,以防止 p 值黑客攻击和其他操纵。统计再现性应该通过自上而下的命令,以及通过同行评审和文档来强制执行。团队应该能够访问关于统计选项的组织最佳实践的知识库,并获得关于什么是适当的指导。当选择改进验证程序或统计测试时,为研究中心提供与组织内部同行的联系,可以提供关于在实验和统计设计中所做选择的“探测板”,通常可以缩短数百小时的浪费。
经验再现性
当提供了关于非计算性的经验科学实验和观察的详细信息时,分析在经验上是可重复的。在实践中,这是通过免费提供数据以及如何收集数据的细节来实现的。在数据科学中,这通常与研究的底层业务驱动因素以及用于构建模型和分析的数据源的真实数据生成过程相关的知识相关。
在 Domino,我们经常说数据科学过程始于并止于来自业务驱动因素的问题和数据,因此团队记录这些原始问题和想法是什么、它们是如何产生的、是谁提出的,并以完全确定和可重复的方式提供分析中使用的数据集的数字出处是非常重要的。我们的“数据项目”架构支持许多这种功能,允许团队定义完全修订和组件化的规范数据集,允许合作者确切了解哪些分析从哪些数据集获得灵感,以及在数据收集过程中这些数据集中编码了哪些偏见。
计算再现性
如果有一组特定的计算函数/分析(在数据科学中,几乎总是以源代码的形式指定)精确地再现了分析中的所有结果,则分析在计算上是可再现的。我倾向于将可再现性理解为一系列可重复步骤以确定的方式编排。
值得注意的是,这不仅仅是源代码,然而,对于计算上可重复的分析,序列化的“元组”远远大于源文件的磁盘上字节数。计算可再现性包括底层数据、软件、操作序列以及执行它的底层硬件的可再现性。rOpensci 组织的可再现性研究的良好特性列表有助于理解什么构成了良好的计算可再现性。
以下是从 Sandve、Nekrutenko、Taylor 和 Hovig 的可复制计算研究规则中摘录的关于良好可复制性以及团队内和跨团队合作的八条原则:
- 跟踪结果 -每当一个结果可能是潜在的利益,保持跟踪它是如何产生的。至少,你应该记录足够多的程序、参数和手工操作的细节,这样你就可以在一年左右的时间里大致重现结果。
- 编写脚本 -只要有可能,依靠程序的执行而不是手动程序来修改数据。如果无法避免手动操作,您至少应该记下修改或移动了哪些数据文件,以及出于什么目的。
- 创建可再现的环境 -为了准确地再现给定的结果,可能需要使用与最初使用的版本完全相同的程序。利用像 Docker 和配置管理系统这样的工具来保证可重复性。至少,你应该记下你使用的主要程序的确切名称和版本。
- 使用版本控制——即使是对计算机程序最微小的改变也会产生意想不到的后果。至少,您应该不时地存档脚本的副本,这样您就可以粗略地记录代码在开发过程中所经历的各种状态。然而,我们发现最低限度往往是不够的。自动化版本控制系统的使用消除了围绕版本控制最佳实践的许多摩擦。您应该努力拥有一个系统,保证任何程序执行都有一个完全可再现的快照。当您有一个想要重现的情节,但在生成可视化时碰巧没有提交代码时,会有一种特别的挫败感。
- 存储数据和中间结果 -原则上,只要用于产生给定结果的整个过程被跟踪,所有中间数据也可以重新生成。在实践中,容易获得的中间结果可能具有很大的价值。make 和 drake 等系统可以管理复杂的结果依赖图。至少,对运行分析时产生的任何中间结果文件进行存档。然而,最好使用一个系统,可以很容易地记录所有的中间结果,并向您展示它们进行分析,而不会产生明显的摩擦。
- 设置一个随机数种子 -许多分析和预测都包含一些随机性元素,这意味着同一程序每次执行时通常会给出略微不同的结果。例如,聚类算法通常可以找到不同的聚类,并且对初始条件很敏感。作为最低要求,请注意哪些分析步骤包含随机性,以便在重现结果时可以预计到一定程度的差异。
- 存储数据可视化输入 -从图形首次生成到成为分析的一部分,存储数据和生成数据的过程至关重要。随着数据可视化变得越来越复杂,不仅仅是一个图表,而是整个应用程序或交互式仪表板,将可视化管道作为完全可再现的工件进行管理非常重要。作为最低要求,应注意哪些数据构成了给定绘图的基础,以及如何重建这些数据。
- 允许分析层次 -为了验证和完全理解主要结果,检查摘要下的详细值通常是有用的。使这些数据具有流动性和可探索性,至少一次生成、检查和验证摘要背后的详细值。数据科学是一项团队运动,通常你的团队中会有一些非常有才华的人,他们拥有与构建模型所需的编码或数学不一定重叠的专业知识。在这种情况下,为那些非技术用户提供易接*的界面。理想的方法是启用这些接口和分析级别,以便团队中技术含量较低的成员可以参与分析,并根据他们的专业知识帮助纠正过程。
再现性让数据科学团队充满信心。如果没有真正的无摩擦再现性,在生产中推进算法或模型的艺术状态通常会非常具有挑战性。衡量一个模型的新迭代是否实际上是对生产中的模型的改进,或者仅仅是根据更*的数据训练的等效模型,甚至可能是一个挑战。
在 Domino,我们相信知识的无摩擦再现和复合是良好协作过程的基石,并围绕这一观点构建了我们的*台。关于这方面的更多想法,请观看我关于在用户处提供数字出处的演讲!2016 在斯坦福。
可复制性
一旦你建立了可重复性和再现性的实践,协作数据科学过程的黄金标准就是可复制性。可复制性强于可复制性。一项研究只有在你进行完全相同的实验(至少)两次,两次都以相同的方式收集数据,进行相同的数据分析,并得出相同的结论时才是可复制的。可复制性是一种实践,它允许生产中的模型由审计员独立验证,由工程组织重新实现以用于实时系统,并且最重要的是,它可以让我们相信,随着协变量的变化,用新数据随时更新模型仍会提供与原始工作方向和实质上一致的结果。
数据科学中的可复制性经常被误解,因为当涉及到前沿突破时,它的作用主要被认为是在物理和生物科学中。由于一项研究的不可复制性,整个职业生涯都毁了,从著名的弗莱施曼-庞斯崩溃到失败的复制鲍梅斯特和沃斯关于自我损耗的工作的 T2 和其他许多研究。
然而,在协作数据科学中,可复制性往往是数据科学真正推动模型或洞察力发展的原因。数据科学家必须能够采用预先存在的管道或模型,在没有重大摩擦的情况下将其组件化,并使用新数据、新算法或新方法重新运行整个实验或其中的重要部分。要做到这一点,必须能够与原始分析(或当前数据的重新运行)进行并排比较,以获得对实验设计的信心,以及所述设计中的变化如何影响测试期间的行为以及可能影响生产期间的行为。
结论
数据科学团队拥有:
- 受过重复性、再现性和可复制性实践培训的人员
- 鼓励使用这些最佳实践的适当流程
- 允许这些最佳实践被无摩擦地利用的工具
在团队中,分析、模型、指标或见解方面的协作成为第二天性和“捷径”,而不是难以实施的自上而下的命令。数据科学家,即使是单独工作的,也至少在与两方合作,他们过去的自己和未来的自己。
为可再现的数据科学构建 Domino 数据实验室*台让我们与几乎所有行业的数据科学客户进行了大量的互动。我们一次又一次地看到协作对数据科学团队的成功是多么重要,以及无摩擦地建立共享环境对促成这种协作是多么重要。事实上,我们基于对客户的研究开发了数据科学成熟度模型框架。为数据科学家提供一个*台,使他们能够进行“良好的”协作数据科学,这不仅可以在短期内提高他们的工作效率,还可以为组织提供复合知识的优势,以及更可预测的透明成果和量化研究投资的投资回报。
在彭博数据促进良好交换会议上介绍了关于道德数据共享的社区原则
随着这个世界变得越来越受模型驱动,数据伦理是一个日益重要的问题,必须始终放在首位。Domino 积极参与了多项数据伦理计划,这些计划让我们能够贡献我们的专业知识,并与其他有相同热情的领导者交流想法。
本着这种精神,我们很荣幸能够帮助创建关于道德数据共享的社区原则 (CPEDS):这是一项众包工作,旨在为整个数据科学界的数据共享制定道德准则。
这是到目前为止已经完成的工作的简要总结。
-
CPEDS 于 2017 年 9 月在纽约举行的第三届年度彭博良好交换数据 (D4GX)会议上拉开帷幕。
-
在那次事件之后,我们一群人合作起草了第一份原则草案。我很荣幸能成为这个团队的一员,和这些了不起的人一起工作。
-
2 月 6 日,彭博举办了另一场 D4GX 活动——这是第一次在他们的三藩市办公室举办——我们几十人亲自聚集在一起,还有数百人收听直播节目,聆听鼓舞人心的演讲者,如吉迪恩·曼、 DJ 帕蒂尔、娜塔莉·埃文斯·哈里斯、乔伊·博纳古罗和宝拉·戈德曼。但那次活动的亮点,至少对我来说,是我们能够与社区分享 CPEDS 的第一稿,并通过面对面的研讨会和与远程观众的闲聊来征求他们的实时反馈。你可以在这里观看录制的视频。第一套原则涉及七个主题,您可以在 CPEDS 网站上了解更多信息:
-
思想多样性*
-
偏见
-
隐私和安全
-
负责任的沟通*
-
出处和所有权
-
透明度和公开性*
-
问题和答案*
-
Domino contributed to four of the seven. So what’s next? The CPEDS work is ongoing and we need you! Please join the conversation by joining #p-code-of-ethics conversation on Slack or sign up to contribute to the next version of principles. It is important that a large number of people from the data science community collaborate to shape the principles that will ensure ethical use and sharing of data.
比较开源 NLP 库的功能
原文:https://www.dominodatalab.com/blog/comparing-nlp-libraries-in-python
在这篇客座博文中,马齐亚尔·帕纳西和大卫·塔尔比提供了一份选择开源 NLP 库的备忘单。
自然语言处理库是做什么的?
自然语言处理(NLP)在越来越多的人工智能应用中是必不可少的。如果你正在建立一个聊天机器人,搜索专利数据库,将病人与临床试验相匹配,给客户服务或销售电话评分,从财务报告中提取事实或解决 17 个行业的 44 个用例中的任何一个,从自由文本中提取准确的信息是必不可少的。
要构建这样的系统,你的软件必须理解文本中人类语言的词汇、语法和语义。它需要知道句子是如何组成的——以便“每小时 7.25 美元”中的句号不会开始一个新句子。它需要知道动词是如何变化的——以推断违约是否已经发生、将要发生或可能发生。它需要知道否定是如何表达的——以了解患者是否患有糖尿病。它甚至需要理解社会背景——推断出一条写着“滚开”的信息是暴力威胁还是朋友间友好的戳戳。
例如,一个好的 NLP 库将正确地将自由文本句子转换为结构化特征(如每小时成本和糖尿病),这些特征很容易进入机器学习(ML)或深度学习(DL)管道(如预测每月成本和对高风险患者进行分类)。其他用例可能涉及返回问题的最合适的答案、为查询找到最相关的文档或对输入文档本身进行分类。一个好的 NLP 库将使训练你自己的 NLP 模型和与下游的 ML 或 DL 管道集成变得容易。
一个好的 NLP 库还应该实现最新最棒的算法和模型——这并不容易,因为 NLP 正在经历它的 ImageNet 时刻并且最先进的模型正被一个月两次超越。它应该有一个简单易学的 API,可以使用你最喜欢的编程语言,支持你需要的人类语言,非常快,并且可以扩展到大型数据集,包括流和分布式用例。
我们提到过它也应该是免费和开源的吗?
开源 NLP 候选名单
这篇文章旨在帮助你为你的下一个项目选择合适的开源 NLP 库。我们假设您需要构建生产级软件。如果你在做研究,像 Allen NLP 和 NLP Architect 这样优秀的库可以让实验变得更容易,尽管代价是功能的完整性、速度和健壮性。
我们假设您正在寻找广泛使用的、业经验证的生产中的 NLP 库——因为许多其他人已经测试过它,所以这些代码就可以工作。你也在寻找一个有活跃社区的图书馆——一个可以回答你的问题,解决错误,最重要的是不断增加功能,提高准确性和速度的图书馆。因此,我们将候选名单缩小到这五个库:
显然,在 NLP 的一般领域中有更多的库——但是我们在这里关注的是通用库,而不是迎合特定用例的库。例如, gensim 是一个流行的 NLP 库,最初是为主题建模而创建的,不能用于构建完整的 NLP 管道。
更具体地说,我们的候选名单只包括提供这一核心功能集的库:
- 句子检测
- 标记化
- 堵塞物
- 词汇化
- 词性
- 命名实体识别 (NER)
- 依存解析器
- 训练特定领域模型
它们还提供以下部分或全部功能:
- 拼写检查
- 情感分析
- 文字匹配
- 日期匹配
- 组块
- 其他功能
这里比较的所有五个库都有一些可以定义的 NLP 管道的概念——因为大多数 NLP 任务需要组合这些特性中的几个来获得有用的结果。这些可以是经典的或基于深度学习的管道。
Image Credit: Parsa Ghaffari on the Aylien Blog
功能比较备忘单:sPacy 与 NTLK、Spark NLP 与 CoreNLP
最流行的 NLP 库的功能比较如下:
以下是技术功能的对比——对现代计算*台和流行编程语言的支持:
许可和支持
开源并不意味着在任何地方都是一样的——例如,斯坦福大学的 CoreNLP 要求商业使用的付费许可证,而该许可证仍然不提供具有定义的 SLA 的商业支持。希望构建商业、生产级 NLP 解决方案的团队既需要一个不断改进核心库的活跃社区,也需要付费的企业级支持选项。
以下是这些库在许可和支持方面的比较:
斯坦福为 CoreNLP 出售商业许可证,这是商业使用该库所必需的。spaCy 的商业许可和支持由 explosion.ai 提供,它还许可 prodigy 进行快速注释和迭代循环,以及 thinc 机器学习库。John Snow Labs 提供了 Spark NLP Enterprise ,其中包括 onboarding、24x7 支持和高级功能,如实体解析、断言状态检测和取消标识。它还为医疗保健行业提供了Spark NLP,其中包括一套针对医疗保健行业的先进模型和生物医学 NLP 数据集。
预训练模型
尽管大多数 NLP 库支持用户训练新模型,但对于任何 NLP 库来说,提供现有的预训练的高质量模型都是很重要的。然而,大多数 NLP 库只支持通用的预训练模型(POS,NER 等)。).由于模型的许可方式,一些人不允许他们的预训练模型用于商业目的。
以下是每个库附带的通用预训练模型:
并非所有开源 NLP 库都是*等的。考虑到您的编程语言、*台、许可和支持需求,并非所有这些都可以用于您的项目。这篇文章旨在成为缩小选择范围的有用的备忘单。当您了解到新的库或版本应该反映在这里时,请告诉我们,以帮助我们保持更新。
除了功能性,您的下一个标准是比较准确性、速度和可扩展性。祝你在 NLP 的努力中好运!
连接点:Domino 数据实验室陷入数据科学浪潮
原文:https://www.dominodatalab.com/blog/connecting-the-dots-domino-data-lab-drops-into-data-science-wave
最初发表于 Nvidia 的博客。感谢 Nvidia 团队允许我们在这里联合发布。
由来自全球最大对冲基金的三名前同事孵化的初创公司,正因其 GPU 加速*台而受到关注。
当华尔街正在演变成一场宽客游戏时,尼克·埃尔普林、克里斯托弗·杨和马修·格兰纳德看到了一件大事即将发生:一场数据科学浪潮正在各行各业兴起。
因此,三人离开了世界上最大的对冲基金 Bridgewater Associates,并在此后不久创办了 Domino 数据实验室,这是一个开放的数据科学*台,现在在全球人工智能开发者中引起了轰动。
该公司首席执行官埃尔普林说:“我和我的联合创始人建立了许多内部*台和技术,这些宽客在布里奇沃特用来进行定量研究——现在世界其他地方称之为数据科学。”
这家旧金山公司是帮助初创公司扩大规模的 NVIDIA Inception 项目的成员之一,在 8 月份登上了《T2》杂志的年度增长最快的私营公司名单。
布里奇沃特到多米诺
在 2013 年离开布里奇沃特后,三人发现公司最缺乏的是数据科学团队的工业化*台,因此他们创办了 Domino 数据实验室来填补这一空白。
“在布里奇沃特的经验和视角让我们看到了市场的空白,看到了技术和产品可以做什么,”Elprin 说。
Domino 的软件*台为数据科学家自动化了基础设施,使用户能够加速研究、部署模型和跟踪项目。
在多米诺的引擎盖下
作为数据科学增压器,Domino 的可定制环境为用户提供了数据科学工具来加速工作流。
它的 Domino Analytics 发行版为 Python、R、Julia 和其他流行语言的编程提供了一个科学计算栈。Domino 提供对常用交互工具和笔记本的访问,包括 Jupyter、RStudio、Zeppelin 和 Beaker。
Domino 还提供深度学习包和 GPU 驱动,包括访问 TensorFlow、Theano 和 Keras 等框架。该*台支持访问云中的任何 NVIDIA GPUs。
Elprin 说:“与 NVIDIA 合作帮助 Domino 开发产品,让我们共同的客户能够自动将工作负载部署到 GPU 上。“NVIDIA Inception 还通过播客和会议讨论帮助我们扩大了财富 500 强客户群。”
顾客多米诺效应
公司正在排队。Red Hat、戴尔、拜耳、好事达、Gap 和百时美施贵宝都在使用 Domino 来加速他们的数据科学工作流。
Red Hat 企业数据和分析副总裁 Heidi Lanford 在一段视频中表示:“我们在 Domino 上的投资确实取得了回报,可能是我们数据科学社区效率的 10 倍左右。
图片来源:图片由 Shalom Jacobovitz 拍摄,经知识共享许可。
在数据科学堆栈中使用 Spark 的注意事项
原文:https://www.dominodatalab.com/blog/considerations-for-using-spark-in-your-data-science-stack
This article covers the considerations to assess if Spark is the right technology for your data science needs. It also covers Spark’s architecture, alternative frameworks, and Domino’s support for on-demand Spark.
您可能听说过 Apache Spark,甚至可能使用过它。Spark 是一个用于并行数据处理的框架和一组库。它创建于 2014 年,旨在解决 Apache Hadoop 的许多缺点,在分析工作负载方面比 Hadoop 快得多,因为它将数据存储在内存(RAM)中,而不是磁盘上。它还有许多内置的库,将机器学习算法实现为 MapReduce 作业(稍后描述),使它们易于在许多计算资源上并行化。Spark 是开发最活跃的用于大规模数据处理的开源框架。
亚伯拉罕·马斯洛有一句名言:“如果你只有一把锤子,那么一切看起来都像钉子。”就 Spark 而言,许多用户最初被它在非常大的非结构化数据集上进行数据工程/ ETL 工作的能力所吸引。在 Spark 取得初步成功后,他们获得了将它用于其他任务的信心,并很快遇到了它的局限性。例如,许多数据科学家报告说,Spark 在其分布式计算框架中消耗了大量资源,与使用更传统的方法处理多个用例相比,实际上会降低数据处理速度。
本博客探讨了 Spark 的优势和劣势,特别是在现代数据科学和机器学习工作流的背景下,以帮助企业明智地将 Spark 纳入其分析技术战略。
火花建筑
为了理解适当的 Spark 用例的细节,首先理解基本的 Spark 架构是很重要的。Spark 应用程序由一个驱动程序进程和一组执行程序进程组成。驱动程序进程负责三件事:
- 维护关于 Spark 应用的信息;
- 响应用户的程序或输入;
- 在执行者之间分析、分配和调度工作。
执行器负责执行驱动程序分配给它的代码,并向驱动程序节点报告该执行器上的计算状态。
来源:阿帕奇火花
Spark 的计算模型基于弹性分布式数据集(RDDs),这是一个跨集群的对象集合,具有用户控制的分区和存储。Spark 构建 rdd 的方法大量借鉴了 Hadoop 的 MapReduce 设计。“映射”任务将输入数据集分割成独立的块,这些块以完全并行的方式进行处理,然后“缩减”任务对映射的数据进行分组和分区。Spark 的 MapReduce 方法基于一种更先进的模型,称为有向无环图(DAG),它比 Hadoop 中的 MapReduce 更有效地支持迭代。但是它仍然并行处理数据,其中有一个阻塞步骤,然后是一个等待步骤,在这个步骤中所有的东西都同步。
来源:斯坦福大学
评估 Spark 时要考虑的因素
什么时候使用 Spark 是“正确的”答案,并没有固定的公式。通常,您首先需要确定在使用您选择的编程语言的非 Spark 环境中需要什么处理逻辑以及需要多少时间和资源。然后,您需要权衡添加 Spark 等分布式计算框架的利弊(例如,更多开销、更复杂的设置)。一般来说,当您的数据无法放入单台机器的内存中时,Spark 将是最合适的选择——例如,数据超过数百 GB。
Spark 最受欢迎的一些用例包括:
- 流数据: Spark Streaming 统一了不同的数据处理能力,允许开发人员使用单一框架在将数据推入数据存储之前不断清理和聚合数据。Spark Streaming 还支持触发事件检测、数据丰富和复杂的会话分析。
- 交互分析: Spark 的速度足够快,可以在非常大的数据集上进行探索性查询,无需采样。通过将 Spark 与可视化工具相结合,可以交互式地处理和可视化复杂的数据集。
- 机器学习: Spark 附带了一个用于执行高级分析的集成框架,可以帮助用户对数据集进行重复查询。该框架中的组件包括 Spark 的可扩展机器学习库(MLlib)。MLlib 可以在聚类、分类和降维等领域工作。
与其他数据处理选项相比,Spark 涉及更多的处理开销和更复杂的设置。以下是关于为什么 Spark 可能不是某些用例的正确框架的一些考虑因素:
MapReduce 范例的有效性。
Spark 基本上基于 Hadoop 的设计架构,并利用 MapReduce 方法(DAG)在内存中创建数据块(rdd)。当每个块/任务需要大约相同的处理时间时,这种设计模式可能非常有效,但是对于许多由非常异构的任务组成的机器学习工作流来说,这种设计模式可能会很慢。例如,使用 MapReduce 方法训练深度神经网络可能非常低效,因为每一步的算法复杂性都可能存在极大的差异。¹
激发您的数据科学团队的复杂性。
Spark 是用 Scala 编写的,有 Scala、Python、Java 和 r 的 API。Scala 开发人员可以很快学会 Spark 的基础知识,但是要让 Spark 正常工作,他们还需要学习与内存和性能相关的主题,例如:
- 划分
- 节点
- 序列化
- 执行者、JVM 等等…
采用 Spark 通常需要重新培训您的数据科学组织。
团队的调试能力。
调试 Spark 可能会令人沮丧,因为内存错误和用户定义函数中发生的错误可能很难跟踪。分布式计算系统天生复杂,Spark 也是如此。错误消息可能具有误导性或被隐藏,有时通过本地测试的函数在集群上运行时会失败。找出这些情况的根本原因是具有挑战性的。此外,由于 Spark 是用 Scala 编写的,而大多数数据科学家只知道 Python 和/或 R,因此调试一个 PySpark 应用程序可能相当困难。PySpark 错误将显示 Java 堆栈跟踪错误以及对 Python 代码的引用。
保持活力是 IT 面临的挑战。
众所周知,Spark 很难调整和维护。IT 部门通常在 Spark 专用内存和集群管理方面没有深厚的专业知识,因此确保集群不会在繁重的数据科学工作负载和许多并发用户的情况下崩溃是一项挑战。如果您的集群没有得到专业的管理,性能可能会非常糟糕,并且经常会出现因内存不足而导致的作业失败。
火花替代品正在出现
就在五年前,Hadoop 还是分布式数据处理的首选框架。世界上最大的分析会议甚至以它命名。如今,随着许多企业迁移出 Hadoop,集群处于闲置状态。
Hadoop 的迅速崛起和衰落是企业分析技术趋势变化速度的绝佳例子。考虑到这一点,今天有思想的 IT 领导者必须问,“Spark 会留下来吗,或者它会在几年内走上 Hadoop 的道路吗?”
已经有多种分布式计算框架为 Spark 提供了引人注目的成熟替代方案。
Dask
2018 年,Dask 发布,创建了一个强大的并行计算框架,对 Python 用户来说非常有用,可以在单台笔记本电脑或集群上很好地运行。Dask 比 Spark 重量更轻,更容易集成到现有代码和硬件中。
Spark 增加了一个重要的学习曲线,涉及新的 API 和执行模型, Dask 是一个纯 Python 框架,因此大多数数据科学家几乎可以立即开始使用 Dask。Dask 支持 Pandas dataframes 和 Numpy 数组数据结构,因此数据科学家可以继续使用他们熟悉和喜爱的工具。Dask 还与 Scikit-learn 的 JobLib 并行计算库紧密集成,能够以最小的代码更改并行处理 Scikit-learn 代码。
光线
加州大学伯克利分校 RISELab 的研究人员与 Spark 的最初开发有关联,他们指出,现有的数据处理和分布式计算框架无法满足今天复杂的机器学习要求。例如,Spark 和 Hadoop 不支持毫秒级的细粒度计算或动态执行。他们正在从头开始创建 Ray以支持主要的机器学习用例,包括模拟、分布式训练、即时/快速计算以及在交互式场景中的部署,同时保留 Hadoop 和 Spark 的所有可取功能。
最初的基准测试结果非常积极,表明 Ray 在某些应用中胜过 Spark 和 Dask。例如, Ray 和 Dask 在常见自然语言处理任务的基准测试中均优于 Spark ,从文本规范化和词干提取到计算词频表。
来源:走向数据科学
Domino:一个易于访问 Spark 和其他框架的*台
数据科学的创新发生得很快。十年前,每个人都在谈论 Hadoop 的潜力。五年前是火花。今天,我们正处于另一个十字路口,新的分布式计算框架变得越来越普遍。就像你的工具箱中需要的不仅仅是一把锤子,你还需要使用正确的语言、IDE、环境等的灵活性。手头的项目。选择一条道路至关重要,它允许您采用当今最强大的工具,同时具有支持未来新工具的灵活性。
Domino 是一个专门为大型组织的 IT 和数据科学部门构建的*台。它允许数据科学组织使用他们熟悉和喜爱的工具来构建、部署和共享模型。在底层,Domino 直接管理您首选的分布式计算框架,以及您的基础设施资源、工具和 ide。这使得数据科学团队能够以最小的 IT 开销使用他们想要的工具,同时满足 IT 需求。专门针对分布式计算和高性能机器学习,Domino 支持几个框架,包括 Spark 和 TensorFlow,并计划在它们变得更加突出时支持 Dask、Ray 和其他框架。
与一些基于 Spark 的*台不同,Domino 可以将 Spark 和非 Spark 工作负载统一在一个*台上——创建一种技术无关的方法,支持跨内核的并行处理。例如,一名在 Domino 工作的数据科学家可以为分布式计算工作负载(如图像转换)启动 Spark 集群;他们的同事可以使用 GPU 来进行机器学习训练,从而构建 TensorFlow 实例。他们的工作将统一在同一个 Domino *台上,这样他们就可以协作、评论和复制彼此的工作。
Domino 还简化了集群和实例的设置,因此数据科学家不需要争夺 IT 资源。他们所要做的就是选择所需的计算能力,只需点击一下,Domino 就会自动将集群连接到他们的工作区(例如 Jupyter)或批处理脚本。没有开发运维或依赖性管理的痛苦;使用 Domino 在集群中自动加载包。
有了 Domino 对按需 Spark 集群的支持,数据科学家现在可以获得运行突发工作负载所需的能力、速度和灵活性,IT 团队也可以更轻松地支持他们,而无需承担管理单独 Spark 集群的负担。效率和治理已融入其中,IT 可以通过自动取消集群配置来降低计算成本。只需管理一个空间,不需要多个集群或特别请求。它可以消除依赖关系管理的麻烦,这种麻烦会随着不同的包和 Spark 二进制文件而来;Domino 完全管理集群中的包。最重要的是,您可以放心地知道 Domino 是技术无关的,并且将支持硬件集群上并行数据处理的最佳技术。
结论
Spark 有其优势,但它并不是一些供应商让您相信的数据科学的全部。了解它的优点和缺点是很重要的,这样你就可以在有意义的时候使用 Spark,在没有意义的时候避免使用它。但更重要的是,投资那些让你有更多选择的*台,这样你就不会被局限在一个生态系统中,并且可以在新的数据处理框架成熟时采用它们。
¹ 参见“大规模分布式深度网络”Jeffrey Dean 等人
考虑换工作?以下是 3 位顶级数据科学领导者和创新者的必读建议
如果你正在从事数据科学工作,并且想换一份工作,那么在你寻找新的机会或计划下一步职业发展时,顶级数据科学创新者会给出一些建议。他们的职业建议——以及更多建议——都收录在来自多米诺数据实验室的新书《数据科学创新者行动手册》中。
好消息是,你在一个非常令人向往的领域,所以你的下一份工作有几个选择,无论是在你现在的公司还是在新的雇主。那么,考虑你的数据科学职业的最佳方式是什么呢?
求职和你整个职业生涯的职业建议
谷歌的首席决策科学家凯西·科兹尔科夫(Cassie Kozyrkov)提供了一些职业建议,这些建议不仅适用于剔除可能不适合你的才能和抱负的机会,还适用于设定能让你长期快乐的目标。
她解释道:“我人生中最大的成功就是我希望这个星球上的每一个人都能做到的:花时间充分了解自己,以设计实现自我的目标,而不是追求更适合别人的生活。”。
“这也意味着对你周围每个人都想要的东西说不,”她总结道。“每个人都是独一无二的——我们都有自己的古怪之处,所以真正的成功必须从设计我们自己的生活开始,而不是复制别人的生活。”
不要为混蛋工作——也不要让你的工作把你变成混蛋
John K. Thompson 的职业生涯包括在几家大公司担任数据科学领导,他写了一本关于 建立分析团队 s 的书,并且他在 数据科学创新者行动手册 和 的附带博客 中为数据科学家提供了广泛的职业建议。
对于每个人,在职业生涯的各个阶段,他都提出了以下建议:“不要为混蛋工作。”如果你重视长期的工作满足感和幸福感,也不要做这样的人。
“我的一位 MBA 教授告诉我们,你在工作中成为什么样的人,将对你的个人生活产生直接而巨大的影响,”汤普森说。
“这两者不能分开。他补充道:“如果你在工作中粗鲁无礼,让人无法忍受,你的私人生活也会如此。”
Thompson 还为职业生涯早期、中期和高级数据科学家及其领导者提供了具体建议:
年轻的数据科学家
-
好奇。
-
每天都要学习。
-
抓住机会。
职业生涯中期的专业人士
-
努力应对不断增加的复杂性,不要自满,一遍又一遍地解决同样的问题。
-
帮助年轻员工。
-
帮助你的社区。
-
慷慨地付出你的时间和知识。
经验丰富的数据科学领导者
-
要知道,你知道的并没有你以为的那么多。
-
向年轻员工学习。
-
回馈数据科学社区。
寻找能为职业发展提供必要条件的公司
顶级数据科学领导者 Glenn Hofmann 为希望留住数据科学家的领导者和希望做出改变的数据科学家提供了颇具洞察力的建议。
他建议希望雇佣、培养和留住数据科学人才的数据科学领导者“记住,数据科学家和数据科学团队中的其他每个人——包括 MLOps 工程师、运营和项目经理——都希望看到他们的工作有所作为。确保模型被业务部署和使用将有助于吸引人才到您的团队并留住人才。此外,为了吸引人才,你需要提供合适的资源、职业道路、培训计划和学习津贴。”
寻找新机会的精明的数据科学家知道这一点,并寻找为其团队提供适当资源的组织,为其最优秀的人才提供良好的职业发展道路,赞助有趣的培训计划,并为学习津贴提供充足的预算。
寻找最大限度减少 IT-数据科学家冲突的公司
许多数据科学求职者正在寻找比他们在当前工作中体验到的更具协作性的环境。数据科学越来越不仅仅是数据科学家团队内部的协作;相反,这通常是跨部门的努力,有时有些令人担忧。
例如,数据科学家和 IT 之间的关系令人惊讶地存在问题。DataIQ 调查发现,大约三分之一(33.7%)的受访组织将“数据科学与 IT 之间的冲突”视为最大的挑战之一。就数据和分析的采用水*而言,即使是将自己评为“先进”或“即将成熟”的公司也无法避免冲突。对于这两个群体来说,“数据科学和 IT 之间的冲突”是他们最大的挑战(分别为 52.4%和 50%)。
Thompson 说:“数据科学和 IT 之间的冲突表现在许多方面,它通常是因为它像对待其他软件项目一样对待数据科学模型而开始的。缓解冲突的一部分来自于分析 IT 和数据科学部门面临的不同压力和要求。IT 专家并不总是理解建模与软件开发有多么不同。
“模型需要重新训练,以实验的方式开发,并使用许多不同的软件工具制作。他说:“没有必要‘再培训’软件代码,但(数据科学)生产模型需要经常再培训。”。
这种情况的部分补救措施可能是认识到数据科学和数据科学家并不完全适合现有的结构。出于这个原因,有必要重新思考一系列相关的实践和关于数据科学家做什么和他们如何工作的既定思维方式。
“实现数据科学最大价值的公司明白,模型是一种新型的数字生活,需要不同的人、流程和*台(而不是它通常支持的那些),”汤普森说。
有关 2022 年雇佣和留住数据科学家的更多信息,请查看这个有用的页面“管理数据科学团队”
其他特色创新者也参与了数据科学职业战略
下载免费的 数据科学创新者手册 阅读更多来自 Thompson、Kozyrkov 和 Hofmann 以及其他许多人的职业建议和见解。本书中的顶级创新者完整列表包括:
- 凯西·科济尔科夫——谷歌首席决策科学家,他描述了数据科学家、数据工程师和数据科学生态系统中其他人的工作是如何变化的。
- Andy Nicholls——GSK PLC 统计数据科学部门的高级主管,他描述了数据科学家、MLOps 工程师和其他人简化药物审批和临床试验流程的许多部分的机会。
- Mona g . Flores—NVIDIA 医疗人工智能全球负责人,他谈到了应用人工智能和人工智能来转变医疗和制药业务运营的机会。
- 纳贾特·汗——强生公司让桑制药公司首席数据科学官兼战略部&运营研究&开发全球主管,他谈到了数据科学团队成功的要素。
- 罗伯特·西原——Ray 的联合创始人,Anyscale 的联合创始人&首席执行官,他谈到了随着分布式资源变得更容易使用,科学家将需要的技能。
- John k . Thompson—分析思想领袖,畅销书作家,数据创新者&分析,提供更多关于成长中的创新团队的见解。
- Glenn Hofmann—纽约人寿保险公司首席分析官谈如何建立成功的数据科学团队。
在笔记本电脑上进行数据科学研究的成本
原文:https://www.dominodatalab.com/blog/cost-data-science-laptops
数据科学流程的核心是资源密集型的建模和验证任务。在这些任务中,数据科学家将尝试并丢弃数千个临时模型,以找到最佳配置。即使对于小数据集,这也可能需要几个小时来处理。
因此,依赖笔记本电脑或部门服务器处理能力的数据科学家必须在快速处理时间和模型复杂性之间做出选择。
无论哪种情况,性能和收入都会受到影响:
- 模型复杂性降低会导致模型不太精确,从而影响收入。
- 增加的处理时间意味着运行更少的实验,这限制了创新,因此影响了收入。
不太精确的模型的成本
以流失预测为例,这是几乎所有组织都有的事情。下面的分析表明,即使是 5000 个客户的小数据集,简单模型和复杂模型之间的准确度也有 10%的差异。模型准确性 10%的微小差异会因客户流失而导致 28,750 美元的收入损失。
我们的分析基于来自 UCI 知识库的流失数据集。该数据集包含 5,000 名电信客户的列表,每个客户的属性包括帐户长度和客户服务呼叫次数,以及客户是否有过交易。我们假设干预成本为 50 美元,成功率为 60%,每个客户的损失为 500 美元。
我们训练了 3 个模型来预测 1,000 个帐户的测试集上的客户流失。我们使用笔记本电脑质量的硬件,就像许多组织中的数据科学家一样。
模型 | 错过的搅拌 | 不必要的外联 | 费用 |
---|---|---|---|
GLMNET | One hundred and twenty | Seventeen | $36,850 |
马恩岛 | Thirty-eight | Fourteen | $12,100 |
H2O 组合体 | Twenty-four | Eighteen | $8,100 |
使用 R’s glm net 的线性模型
这是数据科学家在硬件限制下可能训练的模型类型的代表。
结果:
- 测试集的总体准确率为 86%
- 120 名不明身份的顾客
- 17 例不必要的接触不太可能流失的客户
- 由于车型表现不佳造成 36,850 美元的损失
使用 R 的 GBM 的 GBM 模型
该模型利用了比线性模型更先进的算法,在预测客户流失方面提高了 8%。
结果:
- 总体准确率 94%
- 38 名不明身份的顾客
- 14 次不必要的外联
- 由于车型表现不佳,损失 12,100 美元
尖端堆叠 H2O 系综
这是建模技术的前沿。这是科学家希望做的那种建模数据,但受到硬件条件的限制。
该模型利用梯度提升机器、随机森林和深度学习神经网络来提供集合预测。它提供了最高的性能和最大的成本节约。
结果:
- 总体准确率为 95.8%
- 24 名不明身份的顾客
- 18 次不必要的外联
- 由于车型表现不佳,损失 8100 美元
尖端模型和简单模型之间的差异是 10%的精确度,这相当于 27,850 美元。请记住,这是一个只有 5000 名客户的小数据集,使用的是保守估计。在大型组织中,不太精确的模型的成本很容易达到几十万甚至几百万。
为什么不总是使用最好的模型呢?答案在于训练次数和有限处理能力的成本。
受限处理能力的成本
高性能模型需要更多的处理能力,在标准笔记本电脑上,训练这些模型可能需要小时。以下是我们分析中每个模型的训练时间:
模型 | 培训时间(笔记本电脑) | 错过的搅拌 | 不必要的外联 | 费用 |
---|---|---|---|---|
GLMNET | 43 秒 | One hundred and twenty | Seventeen | $36,850 |
马恩岛 | 828 秒 | Thirty-eight | Fourteen | $12,100 |
H2O 组合体 | 小时 | Twenty-four | Eighteen | $8,100 |
在笔记本电脑等受限硬件上工作的数据科学家不太可能尝试高性能模型,因为他们要花半天时间才能得到结果。这还没有考虑验证每个模型的结果所需的额外时间。
如果他们为了得到更精确的模型而选择等待几个小时,他们就没有时间去做其他可能会得到更好结果的实验了。这种机会成本导致创新缓慢或停滞,并且无法对组织产生重大影响。
这是一组可怕的选择,然而许多数据科学家每天都处于这种境地。
只要数据科学家被迫在受限的机器上工作,如笔记本电脑或自我管理的部门服务器,组织就将继续亏损和失去竞争优势。
另一个选择:云
解决方案是让数据科学家在云硬件上运行实验。
下表显示了在云中运行时,我们的分析中每个模型的训练时间,证明了在不牺牲时间的情况下开发准确的模型是可能的。
模型 | 培训时间(笔记本电脑) | 培训时间(云) | 错过的搅拌 | 不必要的外联 | 费用 |
---|---|---|---|---|---|
GLMNET | 43 秒 | 9 秒 | One hundred and twenty | Seventeen | $36,850 |
马恩岛 | 828 秒 | 27 秒 | Thirty-eight | Fourteen | $12,100 |
H2O 组合体 | 小时 | 71 秒 | Twenty-four | Eighteen | $8,100 |
尖端的 H2O 模型——在笔记本电脑上需要几个小时——在一台 AWS X1 实例上只需一分多钟,成本约为 39 美分。这为组织节省了 27,850 美元,并让数据科学家有很多时间来尝试其他模型和实验。
结论
让数据科学家在笔记本电脑上工作的成本非常高。即使在处理小型数据集时,数据科学家也必须在开发精确模型和更快开发模型之间做出选择。这两种选择都会导致组织的收入损失。
云是数据科学团队的最佳家园。它使他们能够尝试更大胆的实验并使用尖端技术,从而为组织带来显著且可量化的投资回报。
让数据科学家访问按需和可扩展的云硬件,而不需要供应或维护云服务的最简单、最快速的方法是使用 Domino 等数据科学*台。
在锁定期间创建一个有影响力的数据领导者社区
原文:https://www.dominodatalab.com/blog/creating-a-community-of-impactful-data-leaders-during-a-lockdown
本文最初发表于 LinkedIn 。感谢丹·哈里斯允许我们在这里重新发布它。
今年 3 月,我们精心策划的商务活动、会议日历一夜之间消失了。在意识到虚拟世界将成为新常态之前,有一段短暂的不确定性。
在封锁之前,我的同事尼古拉·曼切夫为数据科学从业者建立了伦敦机器学习会议,当他将会议转移到网上时,出席人数增加了。
我意识到我们需要某种东西来弥合从数据从业者到数据领导者之间的鸿沟。为了取得成功,它需要立即对数据主管有价值。这不是一件容易的事。
重新设想的想法
之前在 Dataiku 任职期间,我成立了一个名为数据和鸡尾酒的团队。我与伊登·史密斯合作,他帮助招募了我们的第一批代表。彼得·杰克森是我们的开场发言人,当时他和卡洛琳·卡鲁泽斯正在完成首席数据官行动手册的终稿,这本书已经成为当前(以及未来)首席数据官的必读书目。
我带着十几个问题去参加了那个活动,在演讲结束后开始小组讨论。我不需要它们。也许是鸡尾酒的缘故,但谈话在彼得演讲后立即开始,并在接下来的两个小时里没有停止!
代表们愿意公开分享他们的挑战,尤其是他们在哪些方面遇到困难,这让我大吃一惊。许多人是他们公司雇佣的第一批数据领导者,并且正在为他们的公司建立全新的数据实践。他们得到了高管层的支持,高管们知道他们需要将数据作为数字化转型的核心,但往往缺乏需要交付什么的细节。
那张白纸既是祝福也是诅咒…
显而易见的是,这些数据领导者也有类似的经历,并希望有一个安全的环境,让他们可以与同行社区分享问题和交流想法。也许与我以前在数据库技术方面的角色相比,这是数据科学相对较新的一面,但这种坦诚的交流是我从未见过的。
当时我知道我们正在做一些事情,我知道我想在 2020 年在多米诺骨牌上复制类似的事情。
进入数据领导者行政休息室
我们需要为虚拟世界重新构思‘数据和鸡尾酒’的概念。我们作为一个团队集思广益,想出了给人们送一份礼物的主意,他们可以用这份礼物在会议期间与专家进行“金钱买不到经验”。
在我们 EMEA 负责人 Colin Mitchell 的高管支持下,我们推出了一个快速登陆页面、个人邀请函和 RSVP 表格。我们不知道人们是否愿意提供他们的家庭住址,或者他们是否感兴趣。我们不必担心,因为我们在 24 小时内超过了 12 名代表的目标,两周后有 30 人参加了我们的第一次活动。
我永远感谢 Graham Pymm 为我带来了一次独特的品酒体验,一次极具魅力的 Glaswegian 式的转变!
为什么数据领导者选择加入我们,而不是建立团体?
这个问题我已经纠结了一段时间。我想,也许我们是较早将互动礼物理念推向市场的,从那以后,我看到许多其他公司也在这么做。但我认为这不是主要原因。我认为我们所挖掘的,是一种真正的需要,那就是在不同的组织中处理类似挑战的同事之间的人类互动,把他们聚集在一起分享想法和挑战,有时是一个可以哭泣的肩膀!
进一步分析,我认为这些因素也起了作用。
1.排他性
我们让它只接受邀请,在发送之前审查每一份邀请,并在授予访问权限之前仔细检查我们的 RSVP,以确保我们保持小组的完整性,只有数据领导者才能访问。例如,你需要管理一个数据部门、业务或团队才能加入。这样,我们可以保持我们的话题具有战略性,谈话与领导力挑战相关。
这个小组是我曾经参加过的面对面会议的最佳替代方案之一!这里的想法确实帮助我在我的 60 名数据科学家团队中扩展和自动化了模型构建。你做得很好!
2.机密
虽然我们将使用 Zoom 作为交付*台,但我们从一开始就决定不录制会议,甚至不使用跟踪与会者的 Zoom 公司网络研讨会版本。相反,我们在我的个人 Zoom 帐户上运行它,所有需要的就是邀请链接和会议密码。我们宣布会议将按照查塔姆大厦规则举行,目的是鼓励开放讨论,促进信息共享。
**### 3.特异性和相关性
我们为第一个活动创建了一个入口调查,在该调查中,我们询问小组成员他们面临的主要数据挑战是什么,以及他们认为应对这些挑战最有见地的方式是什么。虽然他们很高兴听到来自 Domino 和我们合作伙伴的消息,但他们最感兴趣的是听到来自他们同行的真实世界的谈话,以及我们为讨论和辩论创建一个开放的格式。
我们很喜欢来自数据领导者的演讲,如哈文德·阿特瓦尔和本·迪亚斯,但此后我们也加入了福布斯人工智能专栏作家和风险投资家罗布·托尤斯,作者卡洛琳·卡鲁泽斯和数据人事首席执行官杰斯·克拉克的观点。不过,最精彩的部分是我们放下话筒,向观众敞开心扉。我们从来不缺少生动的辩论!
我们很高兴收到我们的会员主动提供的话题和发言,因为这真的有助于保持事情的相关性,并确保我们的会员有很高的再次出席率。
4.社区和网络
在疫情期间,面对面的联系基本上已经不可能,商业模式已经被打乱,我们很遗憾地看到团队被解雇、裁员,甚至成员失去了自己的职位。Data Leaders 行政酒廊在此期间一直是风暴中的一个港口。与此同时,其他团队也在蓬勃发展并不断招聘,我们已经看到了成员组织之间的一些流动性。
每一版的休息室都扩大了一倍,这种增长很大程度上是由会员推荐他们网络中的同行推动的。
5。乐趣
在开始的时候,我非常注意到 Zoom 电话的增加和个人接触的减少正在导致倦怠。随着几乎所有的面对面会议都转向在线,人们最不需要的就是‘另一个放大电话’,不管多么善意。
我个人最喜欢的是 【下班后酒吧锁定】 和令人捧腹的詹姆斯·凯洛,一半的人在会议结束后呆了一个多小时,谈论数据和品尝啤酒!
我们决定通过引入“精选体验”来开启每次会议,从而提升活动的档次。这种体验有适当的质量来反映观众的资历,但有一个物理元素,以便他们可以一起玩。我们向人们运送了葡萄酒、杜松子酒、精酿啤酒、巧克力和咖啡,并请来了专家来指导品尝会。这是通向会谈的一个奇妙的破冰方式。
这只是旅程的开始
我的共同主持人戴夫·布洛克和我正在计划下一次的休闲活动。如果你是一名数据领导者,并且认为成为这个小组的成员可能对你有价值,请给我发一条私信,我很乐意告诉你更多。
最初在英国发起的项目已经迅速扩展到欧洲大部分地区,上个月,我们在美国的团队也开始效仿。数据领导者高管休息室正在走向全球!我们希望你能参与其中!**
使用“叶子”创建交互式犯罪地图
原文:https://www.dominodatalab.com/blog/creating-interactive-crime-maps-with-folium
你可以在这里看到这个多米诺骨牌项目。
一张漂亮的地图让我非常兴奋。但是当谈到用 Python 创建地图时,我一直在不断变化的 Python 库中寻找合适的库。经过一些研究,我发现了叶,这使得用 Python 创建叶地图变得很容易。这篇博文概述了我如何使用 fluous 可视化一个关于旧金山犯罪的数据集。然后,我描述了如何使用 Domino 将 Python 代码转换成自助报告工具。
什么是叶?
是一个强大的 Python 库,可以帮助你创建几种类型的传单地图。事实上,follow 结果是交互式的,这使得这个库对于仪表板的构建非常有用。要获得一个想法,只需在下一张地图上缩放/点击即可获得印象。《T2》中的 github 包含了许多其他的例子。
默认情况下,follow 在一个单独的 HTML 文件中创建一个地图。如果你使用 Jupyter(像我一样),你可能更喜欢使用内嵌地图。这个 Jupyter 例子展示了如何内嵌显示地图。
收集数据
对于这个例子,我需要一些包含位置的有趣数据。我决定使用来自 SF OpenData 的 SFPD 事件数据。使用导出功能(选择 csv)下载整个数据集。
构建树叶地图
安装好数据后,我们可以开始编写脚本来可视化我们的数据。要开始设置,您需要在您的终端中运行pip install folium
来安装 lyum。
Jupyter 笔记本只有几行代码。它将事件文件加载到 pandas 数据帧中,选择前 1000 条记录以加快速度,并创建一个包含交互式地图的内嵌地图,该地图带有基于结果数据集的标记。
import folium
import pandas as pd
SF_COORDINATES = (37.76, -122.45)
crimedata = pd.read_csv("SFPD_Incidents_2015.csv")
# for speed purposes
MAX_RECORDS = 1000
# create empty map zoomed in on San Francisco
_map = folium.Map(location=SF_COORDINATES, zoom_start=12)
# add a marker for every record in the filtered data, use a clustered view
for each in crimedata[0:MAX_RECORDS].iterrows():
_map.simple_marker(
location = [each[1]["Y"],each[1]["X"]],
clustered_marker = True)
display(_map)
当运行这个程序时,它会创建一个带有位置标记的地图,如果位置标记靠得很*,就会聚集在一起(clustered_marker = True
)。这里使用的 tileset 是 OpenStreetMap(这是默认设置)。leav 也可以和其他 tilesets 一起使用,比如 Mapbox 或者 Cloudmade。
通过使用map.create_map(path='map.html')
而不是display(map)
将地图保存为 html 文件
等值区域图
嗯,那很有趣!但是这可能不是比较地图的理想可视化方式。幸运的是,多亏了叶,还有一种创建 choropleth 地图的方法。
维基百科:
choropleth 地图(源自希腊语χώρο(“区域/地区”)+ πλήθος(“大众”))是一种专题地图,其中区域按照地图上显示的统计变量(如人口密度或人均收入)的度量值成比例地进行着色或图案化。
要创建 choropleth,我们需要一个 geojson 文件来创建与数据文件中的旧金山警区相匹配的区域/边界。在谷歌上搜索“旧金山警察局地区地理信息”,我找到了一个政府开放数据网站,它的 Shapefile 几乎符合我的需求。
下一步是将 Shapefile 转换为 geojson 文件。最简单的方法是使用一个 ogr2ogr web 客户端。选择下载的 zip 文件,并将crs:84
放入目标 SRS 字段。将结果保存为 sfpd zones . geo JSON,并将文件上传到 Domino 项目。
创建 choropleth 的额外 Python 代码如下。注意,我使用了整个数据集,而不是前面使用的 1000 条记录。因为 choropleth 基于聚合计数,所以速度不会受到大型数据集的影响。
# definition of the boundaries in the map
district_geo = r"sfpddistricts.geojson"
# calculating total number of incidents per district
crimedata2 = pd.DataFrame(crimedata["PdDistrict"].value_counts().astype(float))
crimedata2.to_json("crimeagg.json")
crimedata2 = crimedata2.reset_index()
crimedata2.columns = ["District", "Number"]
# creation of the choropleth
map1 = folium.Map(location=SF_COORDINATES, zoom_start=12)
map1.geo_json(geo_path = district_geo,
data_out = "crimeagg.json",
data = crimedata2,
columns = ["District", "Number"],
key_on = "feature.properties.DISTRICT",
fill_color = "YlOrRd",
fill_opacity = 0.7,
line_opacity = 0.2,
legend_name = "Number of incidents per district"
它创建了一个如下的 choropleth 地图,在右上角有一个图例。颜色调配器颜色方案是内置的,可以像fill_color = 'YlOrRd'
一样添加。聚合计数存储在一个单独的 json 文件(crimedata2.to_json('crimeagg.json')
)中,该文件稍后将在地图创建过程中用作数据源。
构建自助报告工具
犯罪事件数据不仅仅是地点和地区,而是更加丰富。它还包含类别、日期和时间等变量。例如,这为更好地了解特定类型的事件创造了机会。为了避免为所有的变量组合创建地图,我使用了 Domino 的“Launcher”特性,让其他人根据他们的参数创建他们自己的地图。
Domino 中的启动器是一个自助式 web 表单,允许非技术用户运行您的脚本。要创建一个,我们只需要指定通过 web 表单公开什么参数。
我的启动器将有两个参数:
1。“Dayofweek”是一个多选列表,包含一周中的所有日子。
2。“类别”是一个选择菜单,包含数据中的所有事件类别。
出于懒惰,我决定创建一个小脚本来创建数据中出现的类别列表。
我将第二个单元格的结果复制粘贴到新创建的启动器中的 Allowed Values 字段。
处理启动器请求的脚本是 main.py 。下一段代码处理用户输入,并使用它来过滤数据集:
args = sys.argv
dayselect = args[1].split(",")
crimeselect = args[2]
daycond = crimedata["DayOfWeek"].isin(dayselect)
crimecond = crimedata["Category"] == (crimeselect)
filtered_crimedata = crimedata[crimecond & daycond]
既然我们有了类别和描述信息,为什么不用它作为标记的弹出窗口呢?只需将popup=each[1]['Category'] + ": " + each[1]['Descript']
添加到标记放置功能的参数中。Main.py 包含标记映射代码和 choropleth 代码。
现在我们可以使用启动器创建地图。以下(静态)地图显示了周末(周六和周日)的毒品和麻醉品相关事件。放大创建的地图将使集群分裂。蓝色标记代表个别事件。看到大多数与毒品有关的事件发生在嫩腰区及其附*,可能并不奇怪。
它还创建了一个像这样的 choropleth 地图,讲述了一个类似于带有标记的地图的故事。
奖励:比较地图
现在我们已经创建了这样的代码和启动器,我们可以使用 Domino 比较特性将多个地图并排放置。
我有两次不同的经历,一次是在周末,一次是在工作日。两次运行都成功了。下一步是选择两个运行,并点击顶部的比较。
将打开一个页面,其中包含两次运行的比较。好的一面是它会把地图放在一起。这样我们可以很容易地看到,在我们的例子中,盗窃似乎在周末比在工作日更均匀地分布在旧金山。
这就是我们要做的,一个非常简单的创建和比较地图的方法。我还没有发现非常令人震惊的犯罪事件趋势。所以请在评论中分享你最感兴趣的发现。
使用 Apache Spark 创建多语言管道或避免将 spaCy 重写为 Java
在这篇客座博文中, Holden Karau , Apache Spark Committer ,提供了关于如何使用 Apache Spark 创建多语言管道以及避免将 spaCy 重写为 Java 的见解。她已经写了一篇关于使用 spaCy 为 Domino 处理文本数据的补充博客文章。 Karau 是谷歌的开发者拥护者,也是高性能火花和学习火花的合著者。她在 Twitch 和 Youtube 上也有一个关于她的演讲、代码评审和代码会议的知识库。
介绍
作为一名 Scala/Java data/ML 工程师,您是否发现自己需要使用一些现有的 PySpark 代码,但不想重写所有使用过的库?或者您只是厌倦了 JVM 中的 NLP 选项,想尝试一下 spaCy?Apache Spark 新的基于 Apache Arrow 的 UDF 不仅提供了性能改进,还可以与实验特性相结合,以允许跨语言管道的开发。这篇博文关注的是 spaCy 的使用,我还有另外一篇关于 NLTK 的文章,我将会发布在我的博客上。如果您希望在单语言管道中使用 spaCy 和 PySpark,那么我之前的文章《让 PySpark 与 spaCy 一起工作:克服序列化错误》会对您有所帮助
如果您选择在生产中使用这些技术,请预先注意在 Spark 中调试多语言管道会增加额外的层次和复杂性。你应该看看霍尔登的调试 Spark 视频,如果你有公司费用账户,还有一个在 Safari 上提供的关于调试 Apache Spark 的深度潜水。
从 Scala / Java 调用和注册 Python UDFs
我们的第一步需要为 JVM 设置一种方法来调用 Python,并让 Python 将 UDF 注册到 Java 中。
在 startup.py 中,我们可以创建一个入口点,这样我们的 Java 代码就可以调用 Py4J。这个连接 Python 和 Scala 的样板有点烦人。如果你想看细节(或者破坏魔法),你可以看看 Initialize.scala 和 startup.py 。其中的关键部分是一个注册提供者,它在 Scala & Python:
# This class is used to allow the Scala process to call into Python
# It may not run in the same Python process as your regular Python
# shell if you are running PySpark normally.
class PythonRegistrationProvider(object):
"""Provide an entry point for Scala to call to register functions."""
def __init__(self, gateway):
self.gateway = gateway
self._sc = None
self._session = None
self._count = 0
def registerFunction(self, ssc, jsession, function_name, params):
jvm = self.gateway.jvm
# If we don't have a reference to a running SparkContext
# Get the SparkContext from the provided SparkSession.
if not self._sc:
master = ssc.master()
jsc = jvm.org.apache.spark.api.java.JavaSparkContext(ssc)
jsparkConf = ssc.conf()
sparkConf = SparkConf(_jconf=jsparkConf)
self._sc = SparkContext(
master=master,
conf=sparkConf,
gateway=self.gateway,
jsc=jsc)
self._session = SparkSession.builder.getOrCreate()
if function_name in functions_info:
function_info = functions_info[function_name]
if params:
evaledParams = ast.literal_eval(params)
else:
evaledParams = []
func = function_info.func(*evaledParams)
ret_type = function_info.returnType()
self._count = self._count + 1
registration_name = function_name + str(self._count)
udf = UserDefinedFunction(func, ret_type, registration_name)
# Configure non-standard evaluation types (e.g. Arrow)
udf.evalType = function_info.evalType()
judf = udf._judf
return judf
else:
return None
class Java:
package = "com.sparklingpandas.sparklingml.util.python"
className = "PythonRegisterationProvider"
implements = [package + "." + className]
在 Scala 方面,它看起来像这样:
/**
* Abstract trait to implement in Python to allow Scala to call in to perform
* registration.
*/
trait PythonRegisterationProvider {
// Takes a SparkContext, SparkSession, String, and String
// Returns UserDefinedPythonFunction but types + py4j :(
def registerFunction(
sc: SparkContext, session: Object,
functionName: Object, params: Object): Object
}
构建用户定义的函数是在基类 PythonTransformer 中完成的。主调用通过以下方式完成:
// Call the registration provider from startup.py to get a Python UDF back.
val pythonUdf = Option(registrationProvider.registerFunction(
session.sparkContext,
session,
pythonFunctionName,
miniSerializeParams()))
val castUdf = pythonUdf.map(_.asInstanceOf[UserDefinedPythonFunction])
因为我们现在需要在 JVM 和 python 之间传递一个参数(例如,我们正在使用的语言),所以包装器必须有逻辑来指向所需的 Python 函数和用于配置它的参数:
final val lang = new Param[String](this, "lang", "language for tokenization")
/** @group getParam */
final def getLang: String = $(lang)
final def setLang(value: String): this.type = set(this.lang, value)
def this() = this(Identifiable.randomUID("SpacyTokenizePython"))
override val pythonFunctionName = "spaCytokenize"
override protected def outputDataType = ArrayType(StringType)
override protected def validateInputType(inputType: DataType): Unit = {
if (inputType != StringType) {
throw new IllegalArgumentException(
s"Expected input type StringType instead found ${inputType}")
}
}
override def copy(extra: ParamMap) = {
defaultCopy(extra)
}
def miniSerializeParams() = {
"[\"" + $(lang) + "\"]"
}
}
然后我们需要重构我们的 Python 代码,以便 Scala 代码可以很容易地调用这些参数。在 SparklingML 内部,我们有一个可以使用的基类,scalarvectorizedtransformation function,来处理一些样板文件,看起来像是:
class SpacyTokenize(ScalarVectorizedTransformationFunction):
@classmethod
def setup(cls, sc, session, *args):
pass
@classmethod
def func(cls, *args):
lang = args[0]
def inner(inputSeries):
"""Tokenize the inputString using spaCy for the provided language."""
nlp = SpacyMagic.get(lang) # Optimization for spacy.load
def tokenizeElem(elem):
result_itr = [token.text for token in nlp(elem)]
return list(result_itr)
return inputSeries.apply(tokenizeElem)
return inner
@classmethod
def returnType(cls, *args):
return ArrayType(StringType())
functions_info["spacytokenize"] = SpacyTokenize
SpaCyMagic:处处超越` spacy.load()'
PySpark 面临的一大挑战是序列化问题,对于多语言管道,这一挑战几乎加倍。
# Spacy isn't serializable but loading it is semi-expensive
@ignore_unicode_prefix
class SpacyMagic(object):
"""
Simple Spacy Magic to minimize loading time.
>>> SpacyMagic.get("en")
<spacy.lang.en.English ...
"""
_spacys = {}
@classmethod
def get(cls, lang):
if lang not in cls._spacys:
import spacy
try:
try:
cls._spacys[lang] = spacy.load(lang)
except Exception:
spacy.cli.download(lang)
cls._spacys[lang] = spacy.load(lang)
except Exception as e:
raise Exception("Failed to find or download language {0}: {1}"
.format(lang, e))
return cls._spacys[lang]
然后在我们的代码中,我们通过我们的朋友 SpacyMagic 访问 spaCy。
spaCy load pre-fork 在 Spark 2.4 中有一些有趣的新技巧,但这是另一篇博客文章的主题。(再一次,请关注我的博客,我将在那里分享它。)
用跨语言字数统计把它们联系在一起
如果我们不把重点放在字数上,这看起来就不像是一篇真正的大数据博客文章,但我们将通过使用 Scala 和 Python 的不同方式来完成它。在 Scala 中,我们可以使用我们创建的转换器对单词计数进行标记:
val data = session.load(...)
val transformer = new SpacyTokenizePython()
transformer.setLang("en")
transformer.setInputCol("input")
transformer.setOutputCol("tokens")
val tokens = transformer.transform(data)
val counts = tokens.groupBy("tokens").count()
counts.write.format("json").save("...")
包扎
虽然这些技术对于像 WordCount 这样的简单跨语言管道已经足够好了,但是在构建更复杂的管道时,我们还必须考虑一些其他方面。例如,即使在我们的简单示例中,spaCy 除了标记之外还有更多信息,并且当前在我们的 Panda 的 UDF 中缺少复合类型的数组,这使得返回复杂的结果很困难。
如果你觉得这很有趣,希望你能加入我们,为闪亮的 ML 项目、Apache Arrow 或 Apache Spark Python 和 Arrow 集成做出贡献。
进一步阅读
如果你有兴趣看到这篇文章的幕后,你可以看看这个现场编码会议和相应的闪闪发光的 ml 回购。如果你有兴趣向孩子们介绍分布式系统的神奇世界,请注册了解我的下一本书“分布式计算 4 孩子”。如果一切都着火了,这些调试资源( free talk 和subscription Safari deep-dive)至少应该能帮到你一点点。
使用 XGBoost、SMOTE 和阈值移动的信用卡欺诈检测
在本文中,我们将讨论组织在欺诈检测方面面临的挑战,以及如何使用机器学习来识别和发现人眼可能无法发现的异常情况。我们将通过 XGBoost 使用梯度增强技术来创建一个模型,我将向您介绍可以采取的步骤,以避免过度拟合,并构建一个适合目的并准备用于生产的模型。如果你想亲自尝试这个项目,你可以点击这里 注册一个 免费账户。
信用卡欺诈是金融机构面临的一个重大问题,可靠的欺诈检测通常具有挑战性。在这里,我们展示了如何在现实世界的信用卡欺诈数据集上训练机器学习模型,以及如何采用过采样和阈值移动等技术来解决类别不*衡问题。
从历史上看,欺诈检测是由负责识别和跟踪数据中的可疑模式的分析师执行的。在线交易的快速增长,通常与在线购物、移动支付等相关联。,使得这种方法不可行。现代交易数据集有数百个维度、数百万条记录,并且以在线方式不断更新。像依靠持卡人报告欺诈交易这样的辅助技术不幸被证明是无效的[1]。
Rules-based fraud detection (top) vs. classification decision tree-based detection (bottom): The risk scoring in the former model is calculated using policy-based, manually crafted rules and their corresponding weights. In contrast, the decision tree classifies observations based on attribute splits learned from the statistical properties of the training data.
自动信用卡欺诈检测通常使用以下方法之一来实现:
基于规则的检测 -基于硬编码的规则,这种方法需要大量的人工工作来定义大多数可能的欺诈条件,并制定触发警报或阻止可疑交易的规则。这种方法的一个优点是,它的决策本身是可以解释的——很容易识别将特定交易标记为欺诈的规则。缺点是基于规则的检测是计算密集型的,并且通常被实现为批量(或离线)评分。从维护的角度来看,保持规则更新并不断扫描漏网的假阴性也是一个挑战。
基于机器学习的检测 -使用统计学习是另一种越来越受欢迎的方法,主要是因为它不太费力。它可以实现为无监督(例如异常检测)或监督模型(分类),并且需要较少的维护,因为模型可以自动重新训练以保持其关联最新。它也适用于在线应用,因为评分功能通常非常轻量级。ML 方法的一个缺点是,对于某些算法(例如深度学习),没有保证的可解释性。
在这篇博文中,我们将展示一个基于 XGBoost 的基于 ML 的异常检测的实现。我们将经历一个典型的 ML 管道,在那里我们进行数据摄取、探索性数据分析、特征工程、模型训练和评估。
数据接收和探索性数据分析
我们从导入管道所需的 Python 库开始。然后,我们读取并检查样本数据集。该数据集包含匿名的信用卡交易数据,可从 Kaggle 免费获取。这些数据是 Worldline 和布鲁塞尔自由大学的机器学习小组合作研究的一部分。该数据集包含欧洲信用卡持有人在 2013 年 9 月进行的交易,并已被匿名化-功能 V1,V2,...、V28 是对原始数据应用 PCA 的结果。唯一完整的特征是时间和数量。类别标签的标题为 class,其中 0 表示真实交易,1 表示欺诈。
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import random
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.model_selection import StratifiedKFold
from sklearn.model_selection import GridSearchCV
from imblearn.over_sampling import SMOTE
from xgboost import XGBClassifier
from xgboost import Booster
from xgboost import DMatrix
from sklearn import metrics
from datetime import datetime
dataDF = pd.read_csv("dataset/creditcard.csv")
dataDF.head()
如果我们查看数据帧的维度,我们会注意到数据集总共包含 284,807 个样本。似乎也没有丢失值,但是,由于卡交易数据集通常包含大部分正常交易,只有一小部分欺诈交易,我们的预期是数据集将非常不*衡。我们可以通过检查目标类的分布来确认这一点。
value_counts = dataDF["Class"].value_counts()
value_counts.plot(kind="bar", title="Class distribution of the target variable")
欺诈交易占整个数据集的 0.17%。正如所料,大多数样本都是合法交易。只有 0.17%的交易被标记为欺诈。让我们看看所有属性的基本描述性统计数据。
pd.set_option("display.float_format", lambda x: "%.3f" % x)
dataDF.describe()
检查上面的统计数据可以发现,V1-V28 属性是以零为中心的,但是其他两个输入属性时间和数量却不是这样。
dataDF[["Amount", "Time"]].describe()
我们还可以绘制所有输入属性的直方图,并确保没有任何异常突出。
ax = dataDF.drop("Class", axis=1).hist(figsize=(10,12),bins=100)
# We hide the axes' labels to make the plot neater and more compact
for axis in ax.flatten():
axis.set_xticklabels([])
axis.set_yticklabels([])
对于主成分我们无能为力,但是看起来数量和时间属性需要更详细的检查。
首先,时间的基本统计数据表明这个属性是以时间戳(秒)的形式给出的。我们可以将其转换为当地日期并提取小时数,以尝试确定交易的小时数是否与交易欺诈的可能性相关。
dataDF["Hour"] = dataDF["Time"].apply(datetime.fromtimestamp).dt.hour
fig, ax = plt.subplots(2, figsize=(10,7))
for a in ax:
a.set_xticks(range(24))
dataDF.loc[dataDF["Class"] == 0]["Hour"].hist(bins=np.arange(24)-0.5, ax=ax[0], grid=False)
dataDF.loc[dataDF["Class"] == 1]["Hour"].hist(bins=np.arange(24)-0.5, ax=ax[1], grid=False)
ax[0].title.set_text("Legitimate Transactions")
ax[1].title.set_text("Fraudulent Transactions")
plt.subplots_adjust(hspace=0.3)
似乎合法交易在夜间急剧下降,随着工作日的开始,其比率增加。相比之下,凌晨 2 点左右是欺诈交易的高峰,这看起来很不寻常。此外,欺诈交易的数据看起来分布更加均匀。让我们编写一个简单的函数,它将允许我们在欺诈/非欺诈类之间比较单个属性的基本统计数据。
def compare_leg_fraud(attribute):
leg_trS = dataDF.loc[dataDF["Class"] == 0][attribute].rename("Legitimate").describe()
frd_trS = dataDF.loc[dataDF["Class"] == 1][attribute].rename("Fraudulent").describe()
tr_hourDF = leg_trS.to_frame().join(frd_trS.to_frame())
return tr_hourDF
compare_leg_fraud("Hour")
欺诈交易无疑具有较高的标准差,但鉴于其相对较低的数量,我们无法确定这是真实的模式还是只是统计上的巧合。
我们现在将注意力转移到交易金额上。让我们通过直方图直观显示欺诈交易与合法交易的分布。
fig, ax = plt.subplots(2, figsize=(9,7))
dataDF.loc[dataDF["Class"] == 0]["Amount"].hist(bins=30, ax=ax[0])
dataDF.loc[dataDF["Class"] == 1]["Amount"].hist(bins=30, ax=ax[1])
ax[0].title.set_text("Legitimate Transactions")
ax[1].title.set_text("Fraudulent Transactions")
plt.subplots_adjust(hspace=0.3)
让我们看看 Amount 属性的基本统计信息。
compare_leg_fraud("Amount")
看起来欺诈交易的*均交易金额较高,尽管总交易金额的绝对值明显较低。我们还可以看看前 5 个最频繁的合法交易。
(dataDF.loc[dataDF["Class"] == 0]["Amount"].value_counts(normalize=True)*100).head()
1.000 4.775
1.980 2.126
0.890 1.714
9.990 1.669
15.000 1.154
对比前 5 大欺诈交易
(dataDF.loc[dataDF["Class"] == 1]["Amount"].value_counts(normalize=True)*100).head()
1.000 22.967
0.000 5.488
99.990 5.488
0.760 3.455
0.770 2.033
我们看到,所有欺诈交易中有* 23%的交易金额为 1.0,而合法交易中相同交易金额的百分比接* 5%。我们还看到大量的 0 值交易,这很可能是持卡人详细信息验证交易的结果。
特征工程
在尝试任何功能工程之前,我们要做的第一件事是创建一个维持集。这是为了防止任何信息泄露到我们的测试集中。
trainDF, testDF = train_test_split(dataDF, test_size=0.2, random_state=1234, stratify=dataDF[["Class"]])
trainDF_norm["Amount"] = trainDF["Amount"].subtract(trainDF["Amount"].mean())
trainDF_norm["Hour"] = trainDF["Hour"].subtract(trainDF["Hour"].mean())
testDF_norm = testDF.copy()
testDF_norm["Amount"] = testDF["Amount"].subtract(testDF["Amount"].mean())
testDF_norm["Hour"] = testDF["Hour"].subtract(testDF["Hour"].mean())
trainDF = trainDF_norm
testDF = testDF_norm
tr_value_counts = trainDF["Class"].value_counts()
print("Fraudulent transactions are %.2f%% of the training set." % (tr_value_counts[1] * 100 / len(trainDF)))
tst_value_counts = testDF["Class"].value_counts()
print("Fraudulent transactions are %.2f%% of the test set." % (tst_value_counts[1] * 100 / len(testDF)))
Fraudulent transactions are 0.17% of the training set.
Fraudulent transactions are 0.17% of the test set.
我们在探索性分析中注意到,Amount 列不是零均值居中的。让我们来解决这个问题,并且将小时属性居中,我们将使用它来代替时间。
trainDF_norm = trainDF.copy()
trainDF_norm["Amount"] = trainDF["Amount"].subtract(trainDF["Amount"].mean())
trainDF_norm["Hour"] = trainDF["Hour"].subtract(trainDF["Hour"].mean())
testDF_norm = testDF.copy()
testDF_norm["Amount"] = testDF["Amount"].subtract(testDF["Amount"].mean())
testDF_norm["Hour"] = testDF["Hour"].subtract(testDF["Hour"].mean())
trainDF = trainDF_norm
testDF = testDF_norm
接下来,我们删除时间属性,因为我们将使用小时。
trainDF = trainDF.drop(["Time"], axis=1)
testDF = testDF.drop(["Time"], axis=1)
现在,让我们将自变量和类变量分割到单独的数据框中。
X_train = trainDF.iloc[:, trainDF.columns != "Class"]
y_train = trainDF.iloc[:, trainDF.columns == "Class"]
X_test = testDF.iloc[:, testDF.columns != "Class"]
y_test = testDF.iloc[:, testDF.columns == "Class"]
X_train.head()
过采样
我们已经确定原始数据集是高度不*衡的。这通常是有问题的,因为基于这种数据训练的模型将很难识别少数类。当我们不只是对预测结果感兴趣时(我们知道如果我们假设交易不是欺诈性的,我们在 99.83%的时间里都是正确的),而是检测少数类的实例(例如欺诈),这就变成了一个更大的问题。
在实践中,有两种解决类不*衡的常用技术,这两种技术都会在数据集中引入偏差,以均衡所有类的表示。
欠采样 -欠采样技术从优势阶层中移除观察值,以减少代表过多/代表不足的差距。例如,随机欠采样随机地移除样本(替换或不替换),经常直到多数类中的观察值的数量变得与少数类中的观察值的数量相同。
过采样 -过采样也旨在减少类计数差异,但与欠采样不同,它通过增加少数类中的实例数量来实现这一点。这种策略有不同的方法,最常用的两种是随机过采样和 SMOTE。随机过采样是一个相当简单的解决方案,它简单地制作现有少数类观测值的多个副本,从而增加来自少数类的总观测值的数量。另一方面,合成少数过采样技术(SMOTE) 通过创建合成样本对少数类进行过采样。已经证明 SMOTE 优于简单的欠采样[2]
使用 SMOTE 来纠正我们数据集中的不*衡是相当容易的,这要感谢不*衡学习,这是一个 Python 包,提供了许多重采样技术,包括 SMOTE。
X_train_smote, y_train_smote = SMOTE(random_state=1234).fit_resample(X_train, y_train)
smote_value_counts = y_train_smote["Class"].value_counts()
print("Fraudulent transactions are %.2f%% of the test set." % (smote_value_counts[0] * 100 / len(y_train_smote)))
Fraudulent transactions are 50.00% of the test set.
现在,班级失衡问题已经解决,我们可以继续进行实际的模型培训了。
模特培训
我们现在将使用过采样训练集来训练 XGBoost 分类器。首先,我们定义一个函数,该函数将对分类器的最佳超参数执行网格搜索。该功能的亮点如下:
我们对 params 中给出的超参数进行参数搜索
- 每个模型的交叉验证策略在分层折叠中使用 3 个折叠
- 评估搜索中模型的度量是受试者工作特征曲线下的面积(ROC AUC)
- 该函数打印产生最高 AUC 分数的参数,并返回最佳估计值的参数作为其输出
def xgboost_search(X, y, search_verbose=1):
params = {
"gamma":[0.5, 1, 1.5, 2, 5],
"max_depth":[3,4,5,6],
"min_child_weight": [100],
"subsample": [0.6, 0.8, 1.0],
"colsample_bytree": [0.6, 0.8, 1.0],
"learning_rate": [0.1, 0.01, 0.001]
}
xgb = XGBClassifier(objective="binary:logistic", eval_metric="auc", use_label_encoder=False)
skf = StratifiedKFold(n_splits=3, shuffle=True, random_state=1234)
grid_search = GridSearchCV(estimator=xgb, param_grid=params, scoring="roc_auc", n_jobs=1, cv=skf.split(X,y), verbose=search_verbose)
grid_search.fit(X, y)
print("Best estimator: ")
print(grid_search.best_estimator_)
print("Parameters: ", grid_search.best_params_)
print("Highest AUC: %.2f" % grid_search.best_score_)
return grid_search.best_params_
由于训练集相当大,我们将网格搜索限制为 5000 个观察值的样本。在xgboost_search
检查完所有可能的评估器后,它将打印出用于最佳执行评估器的参数,并将返回一个 XGBClassifier 对象,我们可以用它来检查模型的泛化能力。
请注意,尽管我们使用了相对较小的训练数据子集,但搜索仍需要训练超过 1,600 个模型,这将需要一段时间。
rows = random.sample(np.arange(0,len(X_train_smote.index)).tolist(), 5000)
model_params = xgboost_search(X_train_smote.iloc[rows,], y_train_smote.iloc[rows,])
Fitting 3 folds for each of 540 candidates, totalling 1620 fits
Best estimator:
XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,
colsample_bynode=1, colsample_bytree=0.6, eval_metric='auc',
gamma=1, gpu_id=-1, importance_type='gain',
interaction_constraints='', learning_rate=0.1, max_delta_step=0,
max_depth=4, min_child_weight=100, missing=nan,
monotone_constraints='()', n_estimators=100, n_jobs=8,
num_parallel_tree=1, random_state=0, reg_alpha=0, reg_lambda=1,
scale_pos_weight=1, subsample=1.0, tree_method='exact',
use_label_encoder=False, validate_parameters=1, verbosity=None)
Parameters: {'colsample_bytree': 0.6, 'gamma': 1, 'learning_rate': 0.1, 'max_depth': 4, 'min_child_weight': 100, 'subsample': 1.0}
Highest AUC: 0.98
现在我们有了产生最高分数的参数集,我们可以使用它们在完整的过采样训练集上训练模型。
model = XGBClassifier(objective="binary:logistic", eval_metric="auc", use_label_encoder=False)
model.set_params(**model_params)
model.fit(X_train_smote, y_train_smote)
XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,
colsample_bynode=1, colsample_bytree=0.6, eval_metric='auc',
gamma=1, gpu_id=-1, importance_type='gain',
interaction_constraints='', learning_rate=0.1, max_delta_step=0,
max_depth=4, min_child_weight=100, missing=nan,
monotone_constraints='()', n_estimators=100, n_jobs=8,
num_parallel_tree=1, random_state=0, reg_alpha=0, reg_lambda=1,
scale_pos_weight=1, subsample=1.0, tree_method='exact',
use_label_encoder=False, validate_parameters=1, verbosity=None)
模型评估
我们将使用 ROC AUC 曲线来评估我们的模型在维持集(X_test,y_test)上的表现。为了生成 ROC 曲线,我们计算了不同阈值水*下维持集的真阳性(TP)和假阳性(FP)率。
对维持集调用predict_proba(X_test)[:,1]
将给出样本[latex]{ Y _ I }[/latex]\ text { X \ _ test } _ I[/latex]属于第 1 类(欺诈)的估计概率。给定一个特定的阈值[latex]T[/latex],如果[latex]T>\ hat { Y _ I }[/latex],我们可以将[latex]\ text { X \ _ test } _ I[/latex]归类为欺诈。很明显,改变[latex]T[/latex]会影响 TP/FP 率,这就是 ROC 曲线所代表的。
我们还在图上显示了曲线下的面积(AUC ),因为它等于模型将均匀绘制的随机阳性排序高于均匀绘制的随机阴性的概率。
y_pred = model.predict_proba(X_test)[:,1]
fp_r, tp_r, t = metrics.roc_curve(y_test, y_pred)
auc = metrics.auc(fp_r, tp_r)
plt.figure(figsize=(8, 6))
plt.plot(fp_r, tp_r, label="AUC = %.2f" % auc)
plt.plot([0,1],[0,1],"r--")
plt.ylabel("TP rate")
plt.xlabel("FP rate")
plt.legend(loc=4)
plt.title("ROC Curve")
plt.show()
二元分类问题的标准方法是查看模型产生的概率,如果概率小于 0.5,则将观察值分类为 0 类,如果概率等于或大于 0.5,则将观察值分类为 1 类。在高度不*衡的数据集中,这种解释可能会导致糟糕的预测。偏移阈值(阈值移动)是一种标准技术,用于通过找到分类器产生的概率的最佳解释来改进预测。
欺诈检测中还有一个额外的因素,即一种错误分类的成本远远高于另一种。换句话说,将合法交易归类为欺诈最多是不方便的,但让欺诈交易溜走会带来更可怕的后果。在这种情况下,以减少假阳性为代价来抵消阈值成为一种可行的策略。
可以用多种方式来选择最佳阈值。查看 ROC 曲线,我们可以直观地看到,最佳性能(不考虑错误分类成本)将由位于曲线左上部分的阈值产生(即 TP 率高,FP 率低)。记住这个标准,我们可以定义一个到曲线左上角的距离度量,并找到一个最小化它的阈值。
[latex]T _ { optimal } = \ text { arg max } _ { T } \ sqrt { TP _ r-FP _ r }[/latex]
t_opt_idx = np.argmax(tp_r - fp_r)
t_opt = t[t_opt_idx]
print("Threshold value is: %.2f" % t_opt)
Threshold value is: 0.80
我们也可以手动检查不同阈值的混淆矩阵。
y_pred = model.predict_proba(X_test)[:,1]
fig, axes = plt.subplots(3,3, figsize=(10,10))
for t, ax in enumerate(axes.flat):
threshold = (t+1)/10
y_pred_int = (y_pred > threshold).astype(int)
c_matrix = metrics.confusion_matrix(y_test, y_pred_int)
sns.heatmap(c_matrix, annot=True, cmap="Blues", fmt="d", ax=ax, cbar=False)
ax.title.set_text("T=%.1f" % threshold)
plt.subplots_adjust(hspace=0.5, wspace=0.5)
plt.suptitle("Impact of threshold adjustment on the error matrix")
看上面的图,我们确实可以确认 T=0.8 给出了最好的解释。假阴性和假阳性都很低。提高阈值会导致遗漏更多欺诈交易,降低阈值会使误报数量翻倍。
既然我们对模型的表现感到满意,我们可以将它持久化,并从其他笔记本/评分脚本中使用它。
model.save_model("smote_fraud.xgb")
摘要
在这篇博文中,我们查看了真实世界的信用卡交易数据集,并展示了如何使用机器学习来自动检测欺诈交易。随着新数据的到来,该模型可以自动更新,重新训练过程不需要人工干预。
数据集中的不*衡可以通过使用欠采样/过采样技术来解决,并且可以对概率的解释进行微调,以在错误警报和遗漏的欺诈交易之间产生更好的*衡。关于不*衡学习的含义和技巧的更正式的概述,你可以看[3]。
这篇博文中使用的完整数据集和代码可以在try.dominodatalab.com、获得,这里显示的所有结果都是完全可再现的,这要感谢 Domino reproducibility engine,它是 Domino 数据科学*台的一部分。同样,如果你想自己实现,你可以点击这里注册一个免费账户。
参考
[1] Jose M. Pavía,Ernesto J. Veres-Ferrer,Gabriel Foix-Escura,信用卡事件和控制系统,《国际信息管理杂志》,第 32 卷,2012 年第 6 期,第 501-503 页,ISSN 0268-4012
[2]尼泰什诉舒拉、凯文·鲍耶、劳伦斯·霍尔和菲利普·凯格尔迈耶。2002. SMOTE:合成少数过采样技术。j .阿提夫。里面的第 16 号决议,第 1 段(2002 年 1 月),第 321-357 段。
[3]何和加西亚(2009 年)。从不*衡数据中学习。知识与数据工程,IEEE 汇刊,21,1263-1284。doi: 10.1109/TKDE.2008.239
使用 Python 进行 Crunchbase 网络分析
原文:https://www.dominodatalab.com/blog/crunchbase-network-analysis-with-python
Crunchbase 最*将其后端数据库转换为一个 Neo4j 图形数据库。这将在未来给它带来很大的灵活性,但目前,数据的公开方式与以往类似:在进行任何图形分析之前,必须检索各个实体并使用属性数据来形成它们之间的边。除了在网页上手动遍历链接之外,没有提供图形分析。
为了能够对这些数据进行更强大的操作,我在 Zipfian Academy 工作期间,创建了我的“可视连接”项目。“可视化连接”促进了 Crunchbase 数据的构建和网络分析,并额外提供了可在 NetworkX 或 Gephi 中使用的数据。
下面,我将对 Crunchbase 数据中的收购进行分析,并描述我所使用的技术。软件本身的技术细节记录在公共项目中。
现有数据
代表公司、金融机构和个人的整个数据库数据都存储在项目中。大多数人希望使用 NetworkX gpickle 文件来访问每种节点类型的数据。GraphML 文件也可以直接导入到 Gephi。
所提供的数据包含 24,000 多家金融机构、200,000 人和 200,000 家公司。其中,只有 9861 家公司参与了收购。
构建图表
Visibly Connected 是用 Python 编写的,依赖于 NetworkX 库进行网络存储和图形分析。使用 GraphBuilder 类构建图是最简单的,它是 NetworkX 的有向图的超类。实例化 graph 对象和读取节点相对容易,如下面的代码片段所示。完整的程序见src/graph/build_acquisition_digraph.py
。完整的程序包含了一些从图表中删除不必要数据的技术。
COMPANIES_COMPLETE = r'./data/company_complete.pkl'
x = gb.GraphBuilder()
x.read_gpickle(COMPANIES_COMPLETE)
使用每个节点的属性数据构建关系或边。您提供节点类型和关系列表。关系仅限于 Crunchbase 中定义的关系,目前还仅限于收购(被收购)、收购(收购他人)和投资(向公司提供资金)。请记住开源数据的一个重要偏见:如果有人不想公开信息,他们可以删除它。
.add_relations_from_nodes('company', ['acquisitions', 'acquisition'])
x.summary()
恭喜你,你有人脉了。对于大多数分析来说,你会想要清理一下。不连接任何东西的节点往往对网络分析不感兴趣(个人判断。)小集群可能感兴趣,也可能不感兴趣。下面的行删除未连接的节点,然后是少于四个节点的子图。技术文档中解释的过滤可用于根据任意复杂的条件保留或删除节点。
x.remove_nodes_from(x.isolates())
x.remove_small_components(min_size=4)
x.summary()
最后,如果你想保存或导出你的图表,这是一个单行的事情。GraphML 文件格式可以直接读入 Gephi。可以使用 GraphBuilder 类或 NetworkX 读取 gpickle 文件。
ACQUISITIONS_GPICKLE = r'./data/full_acquisitions_digraph.pkl.gz'
x.write_gpickle(ACQUISITIONS_GPICKLE)
full_acquisitions_digraph_file 和相应的 GraphML 文件可以在项目数据目录以及其他一些目录中找到。
收购图表的结果
上面提到的 python 脚本的第二部分用于为图表生成多个网络和数据。可视化是在 Gephi 中生成的,尽管也可以使用 Matplotlib。在所提供的数据中,有 4640 个子图彼此之间没有联系。它们的大小从 1 到 242 个节点不等,直径从 1 到 14。直径是网络中从任何节点到任何其它节点的最长路径。下图显示了占采集子图 70%的两个图结构。
是的,没错:根据 Crunchbase 的数据,至少有 15 家公司收购了自己,从而产生了单节点 0 直径图。有两个节点的 3276 个图表示一家公司恰好收购了另一家公司。下图显示了每个子图中节点的数量以及它们与子图直径的关系。
显然,涉及少数公司的收购是最常见的。当公司开始吞并一直在吞并其他公司的公司时,事情变得更有趣了。谷歌和它的一些收购就是一个很好的例子。
然而,这张图并不是谷歌收购的所有公司。请注意,将 Mobility Solutions 和 Hellman Friedman 链接到谷歌的节点表明它们被两家公司收购。是的,只是时间不同。
直径为 14 的最大收购子图由两家主要公司组成。从社区的角度来看,他们只有一个脆弱的联系。想知道吗?试用这个软件。
讨论
在我看来,这些收购并不是 Crunchbase 中最有趣的数据。我鼓励你看看剩下的数据,并考虑利用各种基于图形的社区措施。有很多有趣的东西与风险投资、启动资金和人们从一家公司到另一家公司的转移有关。两个简单的想法:
- 哪些风投或天使投资人会先投资好公司?谁总是跟着别人?
- 哪些金融组织基于所资助的公司或参与的融资轮而彼此联系紧密?
请记住,存在明显的偏差。Jamie Davidson 和在 GitHub 上有相关软件的 Benn Stancil 已经写了关于生存偏差的文章,并且在更传统的表格中有一组备用的 Crunchbase 数据。
在项目 README.md 中有更多关于软件、数据和文件的详细信息。如果您有任何问题,请随时与我联系。
Dask 并行计算:一步一步的教程
原文:https://www.dominodatalab.com/blog/dask-step-by-step-tutorial
现在,随着时间的推移,计算能力不断提高是正常的。每月,有时甚至每周,新的设备被创造出来,具有更好的特性和更强的处理能力。然而,这些增强需要大量的硬件资源。接下来的问题是,你能使用一个设备提供的所有计算资源吗?在大多数情况下,答案是否定的,你会得到一个 out of memory
错误。但是,如何在不改变项目底层架构的情况下利用所有的计算资源呢?
这就是达斯克的用武之地。
在许多 ML 用例中,您必须处理巨大的数据集,如果不使用并行计算,您就无法处理这些数据集,因为整个数据集无法在一次迭代中处理。Dask 帮助您加载大型数据集,用于数据预处理和模型构建。在本文中,您将了解更多关于 Dask 的知识,以及它如何帮助并行化。
Dask 是什么?
当开发人员处理小型数据集时,他们可以执行任何任务。然而,随着数据的增加,它有时不再适合内存。
Dask 是一个开源库,在 ML 和数据分析中提供高效的并行化。在 Dask 的帮助下,您可以轻松扩展各种 ML 解决方案,并配置您的项目以利用大部分可用的计算能力。
Dask 帮助开发人员扩展他们的整个 Python 生态系统,它可以与您的笔记本电脑或容器集群一起工作。Dask 是针对大于内存的数据集的一站式解决方案,因为它提供了多核和分布式并行执行。它还为编程中的不同概念提供了一个通用实现。
在 Python 中,像 pandas、NumPy 和 scikit-learn 这样的库经常被用来读取数据集和创建模型。所有这些库都有相同的问题:它们不能管理大于内存的数据集,这就是 Dask 的用武之地。
与 Apache Hadoop 或 Apache Spark 不同,在 Apache Hadoop 或 Apache Spark 中,您需要改变整个生态系统来加载数据集和训练 ML 模型,Dask 可以轻松地与这些库集成,并使它们能够利用并行计算。
最好的部分是你不需要重写你的整个代码库,你只需要根据你的用例进行最小的修改就可以实现并行计算。
Dask 数据帧和 pandas 数据帧之间的差异
数据帧是数据的表格表示,其中信息存储在行和列中。pandas 和 Dask 是用来读取这些数据帧的两个库。
pandas 是一个 Python 库,用于将不同文件(例如 CSV、TSV 和 Excel)中的数据读入数据帧。它最适合处理相对少量的数据。如果你有大量的数据,你会收到一个 out of memory
(OOM)错误。
为了解决 OOM 错误并实现并行执行,可以使用 Dask 库来读取 pandas 无法处理的大型数据集。Dask 数据帧是不同熊猫数据帧的集合,这些数据帧沿着一个索引分割:
当您使用 Dask 数据帧读取数据时,会创建多个小熊猫数据帧,沿索引拆分,然后存储在磁盘上(如果内存有限)。当您在 Dask 数据帧上应用任何操作时,存储在磁盘上的所有数据帧都会触发该操作。
Dask 的使用案例
Dask 数据帧可用于各种用例,包括:
- 并行化数据科学应用: 要在任何数据科学和 ML 解决方案中实现并行化,Dask 是首选,因为并行化不限于单个应用。您还可以在同一硬件/集群上并行处理多个应用。因为 Dask 使应用程序能够利用整个可用的硬件,所以不同的应用程序可以并行运行,而不会出现资源争用导致的问题。
- 图像处理: 这需要大量的硬件资源。如果你在 pandas 或 NumPy 上使用传统的方法,你可能会中止这个项目,因为这些库/工具不能执行多重处理。Dask 帮助您在多个内核上读取数据,并允许通过并行方式进行处理。
有关不同真实世界用例的更多信息,请查看 Dask Stories 文档中的 Dask 用例页面。
Dask 实现
要实现 Dask,您需要确保您的系统中安装了 Python。如果没有,现在就下载并安装它。确保您安装的版本高于 3.7。(3.10 最新)。
软件包安装
如前所述,Dask 是一个 Python 库,可以像其他 Python 库一样安装。要在您的系统中安装软件包,您可以使用 Python 软件包管理器 pip 并编写以下命令:
## install dask with command prompt
pip install dask
## install dask with jupyter notebook
! pip install dask
配置
当您安装完 Dask 后,您就可以使用默认配置(在大多数情况下都有效)来使用它了。在本教程中,您不需要显式地更改或配置任何东西,但是如果您想要配置 Dask,您可以查看这个配置文档。
并行化准备
首先,看一个计算两个数*方和的简单代码。为此,您需要创建两个不同的函数:一个用于计算数字的*方,另一个用于计算数字的*方和:
## import dependencies
from time import sleep
## calculate square of a number
def calculate_square(x):
sleep(1)
x= x**2
return x
## calculate sum of two numbers
def get_sum(a,b):
sleep(1)
return a+b
calculate_square()
函数将一个数字作为输入,并返回该数字的*方。 get_sum()
函数接受两个数字作为输入,并返回这两个数字的和。故意增加一秒钟的延迟,因为这有助于您注意到使用和不使用 Dask 时执行时间的显著差异。现在,在不使用 Dask 的情况下,看看这个逻辑的执行时间:
%%time
## call functions sequentially, one after the other
## calculate square of first number
x = calculate_square(10)
## calculate square of second number
y = calculate_square(20)
## calculate sum of two numbers
z = get_sum(x,y)
print(z)
前面的代码计算数字的*方,并将它们存储在变量 x
和 y
中。然后计算并打印 x
和 y
之和。 %%time
命令用于计算函数执行所花费的 CPU 时间和 wall 时间。现在,您应该有这样的输出:
您可能会注意到,即使在故意延迟三秒钟之后,整个代码也花了 3.1 秒运行。
现在是时候看看 Dask 如何帮助并行化这段代码了(计算*方和的初始函数保持不变)。
首先,您需要导入一个名为 delayed
的 Python Dask 依赖项,用于实现并行化:
## import dask dependencies
import dask
from dask import delayed
导入 Dask 依赖项后,就可以使用它一次执行多个作业了:
%%time
## Wrapping the function calls using dask.delayed
x = delayed(calculate_square)(10)
y = delayed(calculate_square)(20)
z = delayed(get_sum)(x, y)
print(z)
在这个代码片段中,您使用 Dask delayed
函数将您的普通 Python 函数/方法包装成延迟函数,现在您应该得到如下所示的输出:
你可能会注意到 z
并没有给你答案。这是由于在这个实例中, z
被认为是延迟函数的懒惰对象。它包含了计算最终结果所需的一切,包括不同的函数及其各自的输入。要得到结果,必须调用 compute()
方法。
然而,在调用 compute()
方法之前,先检查一下使用 visualize()
方法的并行执行会是什么样子:
%%time
## visualize the task graph
z.visualize()
请注意: 如果您在可视化图形时遇到任何错误,可能会有依赖性问题。你必须安装 Graphviz 来可视化任何图形。用
pip install graphviz
可以做到这一点。
执行图表应该如下所示:
%%time
## get the result using compute method
z.compute()
要查看输出,需要调用 compute()
方法:
您可能会注意到结果中有一秒钟的时间差。这是因为 calculate_square()
方法是并行化的(在前面的图中形象化了)。Dask 的一个好处是,您不需要定义不同方法的执行顺序,也不需要定义要并行化哪些方法。达斯克会为你做的。
为了进一步理解并行化,看看如何将 delayed()
方法扩展到 Python 循环:
## Call above functions in a for loop
output = []
## iterate over values and calculate the sum
for i in range(5):
a = delayed(calculate_square)(i)
b = delayed(calculate_square)(i+10)
c = delayed(get_sum)(a, b)
output.append(c)
total = dask.delayed(sum)(output)
## Visualizing the graph
total.visualize()
这里,代码迭代一个 for 循环,并使用 delayed 方法计算两个值的*方和: a
和 b
。这段代码的输出将是一个有多个分支的图形,看起来像这样:
到目前为止,您已经了解了 pandas 数据帧和 Dask 数据帧之间的差异。然而,当你从事并行化工作时,理论是不够的。现在您需要回顾技术实现,Dask 数据帧在实践中如何工作,以及它们与 pandas 数据帧相比如何。
这里使用的样本数据集可以从这个 GitHub repo 下载。
技术实现
要开始测试 Dask 数据帧的技术实现,请运行以下代码:
## import dependencies
import pandas as pd
import dask.dataframe as dd
## read the dataframe
pandas_dataframe = pd.read_csv('Sunspots.csv')
dask_dataframe = dd.read_csv('Sunspots.csv')
## calculate mean of a column
print(pandas_dataframe['Monthly Mean Total Sunspot Number'].mean())
print(dask_dataframe['Monthly Mean Total Sunspot Number'].mean().compute())
这段代码应该对 pandas 和 Dask 数据帧产生相同的结果;但是内部处理就大不一样了。熊猫数据帧将被加载到内存中,只有当它适合内存时,你才能对它进行操作。如果不适合,就会抛出错误。
相比之下,Dask 创建多个 pandas 数据帧,并在可用内存不足时将它们存储在磁盘上。当您在 Dask 数据帧上调用任何操作时,它将应用于构成 Dask 数据帧的所有数据帧。
除了延迟方法之外,Dask 还提供了其他一些特性,比如并行和分布式执行、高效的数据存储和延迟执行。你可以在 Dask 的官方文档中读到它。
使用 Dask 的最佳实践
每一种使开发更容易的工具或技术都有一些自己定义的规则和最佳实践,包括 Dask。这些最佳实践可以帮助您提高效率,让您专注于发展。Dask 最著名的一些最佳实践包括:
从基础开始
您不需要总是使用并行执行或分布式计算来找到问题的解决方案。最好从正常的执行开始,如果这不起作用,您可以继续使用其他解决方案。
仪表板是关键
当你在研究多重处理或多线程概念时,你知道事情正在发生,但是你不知道如何发生。Dask 仪表板通过提供清晰的可视化效果,帮助您查看员工的状态,并允许您采取适当的执行措施。
高效使用存储
尽管 Dask 支持并行执行,但您不应该将所有数据存储在大文件中。您必须根据可用内存空间来管理您的操作;否则,你会耗尽内存,或者在这个过程中会有一个滞后。
这些只是帮助您简化开发过程的一些最佳实践。其他建议包括:
- 避免非常大的分区: 这样它们就能放入一个工作者的可用内存中。
- 避免非常大的图: 因为那会造成任务开销。
- 学习定制的技巧: 为了提高你的流程效率。
- 不再需要时停止使用 Dask:比如当你迭代一个小得多的数据量时。
- 能坚持就坚持分布式 RAM:这样做,访问 RAM 内存会更快。
- 进程和线程: 注意将数字工作与文本数据分开,以保持效率。
- 用 Dask 加载数据:例如,如果你需要处理大型 Python 对象,让 Dask 创建它们(而不是在 Dask 之外创建它们,然后交给框架)。
- 避免重复调用 compute:,因为这样会降低性能。
有关更多信息,请查看 Dask 最佳实践 文章。
通过 Domino 使用 Dask
Domino Data Lab 帮助您在 Domino 实例的基础设施上动态地提供和编排 Dask 集群。这使得 Domino 用户能够快速访问 Dask,而不需要依赖他们的 IT 团队来为他们设置和管理集群。
当您启动 Domino workspace 进行交互式工作或启动 Domino job 进行批处理时,Domino 会创建、管理并提供一个容器化的 Dask 集群供您执行。
要了解更多关于在 Domino 上使用 Dask 的信息,请查看我们的 GitHub 页面。
Dask:解决并行性、硬件浪费和内存问题的一站式解决方案
早期的程序员、开发人员和数据科学家没有强大的系统来开发 ML 或数据科学解决方案。但是现在,随着强大的硬件和定期的改进,这些解决方案变得越来越受欢迎。然而,这带来了一个问题:数据库不是为利用这些解决方案而设计的,因为它们没有内存容量或者不能利用计算能力。
有了 Dask,您不必担心并行性、硬件浪费或内存问题。Dask 是所有这些问题的一站式解决方案。
当您开始构建一个解决方案(记住内存问题或计算能力)时,您需要将解决方案部署到目标受众可以访问的地方。Domino Enterprise MLOps *台通过提供机器学习工具、基础设施和工作材料来加速数据科学工作的开发和部署,使团队能够轻松协调和构建解决方案。
Domino 5.0:共享和重用可信数据源以提高模型质量
Domino 5.0 中的数据源介绍
数据科学家浪费时间去弄清楚在哪里可以找到他们需要的数据,访问这些数据,并配置正确的工具来连接这些数据。 Domino 5.0 通过数据连接器简化了整个流程,让数据科学团队安全地共享和重用通用数据访问模式。
Domino 数据源提供了一种机制来创建和管理受支持的外部数据服务的连接属性。连接属性被安全地存储,并且不需要安装特定于数据源的驱动程序或库。紧密耦合的库为基于表格和基于文件的数据提供了一致的访问模式。
使用 Domino 5.0,数据科学家团队可以注册和配置对外部数据源的访问,比如 Amazon Redshift、Amazon S3 和 Snowflake。一旦在 Domino 中注册了数据源,团队就可以开始利用数据访问 Python 库来列出和获取注册的外部数据源中的对象,甚至可以直接在 Pandas dataframes 中查询表格数据!
Domino 中的数据源通过消除与驱动程序安装、特定库等相关的 DevOps 障碍,使数据访问民主化。 通过与同事共享数据源连接器来增强团队协作。IT 团队将会很高兴地看到, 支持每个用户和服务帐户凭证的功能,以最大限度地提高灵活性,同时保持最高级别的数据安全性。
它是如何工作的
从 Domino 数据科学家的角度来看,只需点击几下鼠标,就可以为数据源配置一个新的连接器。在 Domino 中,导航到左侧导航栏上的“Data”部分,并选择“Connect to External Data”。
模式窗口出现后,从下拉菜单中选择数据存储的类型。出于演示的目的,我们将使用亚马逊 S3。
首先,您需要添加一些关于您将要连接的亚马逊 S3 桶的基本信息。
接下来,您需要将您的 AWS 凭证添加到 Domino。这个过程是完全安全的,只有您可以查看凭证。即使是 Domino 管理员也不能查看您的凭证。
您可以通过单击“测试凭据”来快速验证凭据是否有效。验证之后,您可以保存新的数据连接器,并开始在 Domino 中使用它。
现在导航到 Domino 中的一个项目,并单击“Data”部分。您将看到您有权访问的数据连接器列表。在我们的例子中,选择您之前配置的亚马逊 S3 连接器。
选择数据源的连接器后,单击“添加到项目”,然后启动一个工作区开始使用它。
正如你将在下面的截图和上面的演示视频中看到的,你可以通过 Domino SDK 直接在亚马逊 S3 处理文件。
在这个例子中,我创建了一个到亚马逊 S3 的连接,然后使用 JupyterLab 下载销售数据 CSV 文件,该文件在我的 S3 存储桶中,以便在 Domino 中使用。
现在数据已经在 Domino 工作区中,我们可以继续编写代码来提取和使用这些数据!
幕后强大的技术
既然我们已经介绍了这在实践中是如何工作的,那么让我们来探索技术细节。
虽然在上面的截图中有很多东西需要解开,但我们可以开始将其分成几个部分。从用户在 Domino 中启动他们的工作空间并开始使用 Python 库 建立到外部数据源的连接开始,我们有许多组件来帮助用户实现这种连接。
当用户从其工作空间或作业中启动查询时,最初会从运行的工作空间容器连接到数据源服务,数据源服务负责管理数据源元数据并促进与下游服务的连接。该服务将在 MongoDB 中执行查找,以收集关于数据源的元数据。MongoDB 不包含任何关于凭证的信息,而是包含关于数据源的元数据,这些元数据将帮助下游服务建立连接。
当您为数据源添加凭证时,它们作为访问密钥和秘密密钥存储在与 Domino 一起部署的 Hashicorp Vault 的实例中。我们通过数据凭证服务安全地检索这些凭证,并将它们传递给数据源代理服务,这是一种无状态的微服务,充当上游服务和用户希望访问的数据源(如雪花、亚马逊 S3 或红移)之间的中间人。既然请求有了适当的元数据和凭证,它就被路由到高可用性数据源代理服务,以连接到亚马逊 S3(在我们的示例中)。
Domino 生产的各种连接器利用特定于供应商的 Go SDK,这有助于满足连接到各种数据源所需的先决条件,比如数据库驱动程序。这将连接数据源的复杂性从 Domino 中的数据科学家那里抽象出来,以便他们每次都可以使用熟悉的方式连接到他们的数据。
结论
访问适当的数据是任何数据科学项目的关键部分。过去,在 Domino 和其他*台上,用户或数据科学家团队很难设置、配置和维护连接到各种数据源所需的凭证和驱动程序。对于非超级用户来说尤其如此。有了 Domino 数据源,启动和运行数据的困难就减轻了。
Domino 是 企业 MLOps *台,它无缝集成了代码驱动的模型开发、部署和监控,以支持快速迭代和最佳模型性能,因此公司可以确保从其数据科学模型中实现最大价值。
图像分类器的数据漂移检测
原文:https://www.dominodatalab.com/blog/data-drift-detection-for-image-classifiers
本文介绍了如何检测将图像数据作为输入的模型的数据漂移,以防止它们在生产中无声地退化。在一个补充的 Domino 项目中运行这个例子。
防止生产中的静默模型退化
在现实世界中,数据是由不同的系统记录的,并且是不断变化的。数据的收集、处理和转换方式会影响数据。由于物理系统的机械磨损而引入噪音,或者如果基础生产过程发生根本变化(例如,监管机构的利率变化、自然灾害、市场中引入新的竞争对手或业务战略/流程的变化等),可能会发生变化。).这种变化会影响预测的准确性,并且需要检查在模型开发期间做出的假设在模型投入生产时是否仍然有效。
在机器学习的背景下,我们认为数据漂移¹ 是导致模型性能下降的模型输入数据的变化。在本文的剩余部分,我们将讨论如何检测将图像数据作为输入的模型的数据漂移,以防止它们在生产中无声地退化。
检测图像漂移
鉴于企业中对深度学习的兴趣激增,将非传统形式的数据(如非结构化文本和图像)吸收到生产中的模型正在增加。在这种情况下,主要依赖数字数据的统计过程控制和运筹学方法很难采用,因此需要一种新的方法来监控生产中的模型。本文探索了一种方法,可用于检测对图像数据进行分类/评分的模型的数据漂移。
模型监控:方法
我们的方法不对已经部署的模型做出任何假设,但是它需要访问用于构建模型的训练数据和用于评分的预测数据。检测图像数据的数据漂移的直观方法是构建训练数据集的机器学习表示,并使用该表示来重建呈现给模型的数据。如果重建误差较高,则呈现给模型的数据与其被训练的数据不同。操作顺序如下:
- 学习训练数据集的低维表示(编码器)
- 使用步骤 1(解码器)中的表示重建验证数据集,并将重建损失存储为基线重建损失
- 使用步骤 1 和 2 中的编码器和解码器重建正在发送的用于预测的一批数据;商店重建损失
如果用于预测的数据集的重建损失超过基线重建损失一个预定义的阈值,则发出警报。
图像数据漂移检测正在发挥作用
下面的步骤显示了涵盖上面详述的方法的相关代码片段。该项目的完整代码是可用的,可以从https://try.dominodatalab.com上的 图像 _ 漂移 _ 检测项目中分叉。
在Image _ Drift _ Detection项目可用的笔记本(Convolutional _ auto encoder . ipynb)布局如下:
- 在 MNIST 数据集² 上训练卷积自动编码器;使用验证损失作为基线来比较新数据集的漂移。
- 向 MNIST 数据集添加噪声,并尝试重建有噪声的 MNIST 数据集;注意重建损失。(如有需要,用作替代基线)。
- 使用步骤 1 中构建的卷积自动编码器重建 nonMNIST3 数据集,并将重建损失与 MNIST 数据集的验证损失或含噪 MNIST 数据集的重建损失进行比较。
我们现在深入相关的代码片段来检测图像数据的漂移。
步骤 1 :通过将以下内容添加到 docker 文件中来安装项目所需的依赖项。你也可以在https://try.dominodatalab.com中使用 Image_Drift_Keras_TF 环境,因为它已经预装了所有的库/依赖项。
RUN pip install numpy==1.13.1
RUN pip install tensorflow==1.2.1
RUN pip install Keras==2.0.6
第二步: 启动 Jupyter 笔记本工作区,加载所需的库。
#Load libraries
from keras.layers import Input, Dense, Conv2D, MaxPool2D, UpSampling2D, MaxPooling2D
from keras.models import Model
from keras import backend as K
from keras import regularizers
from keras.callbacks import ModelCheckpoint
from keras.datasets import mnist
import numpy as np
import matplotlib.pyplot as plt
第三步: 为 autoencoder 指定架构。
#Specify the architecture for the auto encoder
input_img = Input(shape=(28, 28, 1))
# Encoder
x = Conv2D(32, (3, 3), activation='relu', padding='same')(input_img)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(32, (3, 3), activation='relu', padding='same')(x)
encoded = MaxPooling2D((2, 2), padding='same')(x)
# Decoder
x = Conv2D(32, (3, 3), activation='relu', padding='same')(encoded)
x = UpSampling2D((2, 2))(x)
x = Conv2D(32, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)
autoencoder = Model(input_img, decoded)
autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')
第四步: 生成测试、训练和嘈杂的 MNIST 数据集。
# Generate the train and test sets
(x_train, _), (x_test, _) = mnist.load_data()
x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.
x_train = np.reshape(x_train, (len(x_train), 28, 28, 1))
x_test = np.reshape(x_test, (len(x_test), 28, 28, 1))
# Generate some noisy data
noise_factor = 0.5
x_train_noisy = x_train + noise_factor * np.random.normal(loc=0.0, scale=1.0, size=x_train.shape)
x_test_noisy = x_test + noise_factor * np.random.normal(loc=0.0, scale=1.0, size=x_test.shape)
x_train_noisy = np.clip(x_train_noisy, 0., 1.)
x_test_noisy = np.clip(x_test_noisy, 0., 1.)
第五步: 训练卷积自动编码器。
# Checkpoint the model to retrieve it later
cp = ModelCheckpoint(filepath="autoencoder_img_drift.h5",
save_best_only=True,
verbose=0)
# Store training history
history = autoencoder.fit(x_train_noisy, x_train,epochs=10,
batch_size=128,
shuffle=True,
validation_data=(x_test_noisy, x_test),
callbacks = [cp, plot_losses]).history
我们得到的验证损失是 0.1011。
第六步: 得到含噪 MNIST 数据集的重建损失。
x_test_noisy_loss = autoencoder.evaluate(x_test_noisy,decoded_imgs)
Sample of noisy input data (top row) and reconstructed images (bottom row)
我们在有噪声的 MNIST 数据集上获得的重建误差为 0.1024 。与验证数据集的基线重建误差相比,误差增加了 1.3% 。
第七步: 获取 nonMNIST 数据集的重建损失;比较 MNIST 数据集和噪声 MNIST 的验证损失。
non_mnist_data_loss = autoencoder.evaluate(non_mnist_data,non_mnist_pred)
Sample of nonMNIST data (top row) and its corresponding reconstruction (bottom row)
我们在 nonMNIST 数据集上获得的重建误差为 0.1458 。与验证数据集上的基线重建误差相比,误差增加了 44.2% 。
从这个例子中可以清楚地看出,当卷积编码器重建不同于用于训练模型的数据集时,重建损失中存在尖峰。作为检测结果的下一步是用新数据重新训练模型,或者调查导致数据变化的原因。
结论
在本例中,我们看到卷积自动编码器能够根据重建误差量化图像数据集中的差异。使用这种比较重建误差的方法,我们可以检测呈现给图像分类器的输入的变化。但是,将来可以对这种方法进行改进。首先,虽然我们使用试错法来确定卷积自动编码器的架构,但通过使用神经架构搜索算法,我们可以获得更精确的自动编码器模型。另一个改进可以是在训练数据集上使用数据扩充策略,以使自动编码器对于噪声数据以及图像的旋转和*移的变化更加鲁棒。
如果您想了解更多关于如何使用 Domino 监控您的生产模型的信息,您可以观看我们关于“监控大规模模型”的在线研讨会。它将包括对数据漂移和模型质量的持续监控。
参考
- 伽马、若昂;Zliobait,Indre 艾伯特·比费特;佩赫尼茨基、米科拉;阿卜杜勒哈米德·布恰基亚。“概念漂移适应调查” ACM 计算调查第 1 卷,第 1 篇(2013 年 1 月)
- 乐村,Yann 科琳娜·科尔特斯;克里斯托弗 J.C 伯吉斯。MNIST 手写数字数据库。
- notMNIST 数据集
数据伦理:质疑真理和重新安排权力
原文:https://www.dominodatalab.com/blog/data-ethics-contesting-truth-and-rearranging-power
这份多米诺数据科学领域笔记涵盖了克里斯·维金斯最*在柏克莱举办的数据伦理研讨会。本文重点关注 1)定义和设计伦理的拟议框架,以及理解鼓励行业实施伦理的力量的拟议框架,以及 2)数据科学家在开发数据支持产品时应考虑的拟议伦理原则。非常感谢克里斯在这篇文章发表前提供反馈,并允许摘录他的幻灯片。
数据科学家、权衡和数据伦理
随着越来越多的公司成为模型驱动的,数据科学家在推动创新和帮助他们的公司保持经济实力方面处于独特的地位。构建和使用模型时生成的知识产权、工件和见解(即模型上下文)使数据科学家能够直接影响业务问题。数据科学家在其模型的整个生命周期中不断做出权衡决策。
最*关于公司是否将数据伦理纳入考虑的问题引发了公众讨论,来自知名研究人员(特别是模型可解释性)、主流技术出版社,以及知名全球机构的数据科学领导者都发表了意见。克里斯·维金斯,《纽约时报》的首席数据科学家,同时也是哥伦比亚大学的教授最*举办了研讨会“未来的统计学家、首席执行官和参议员应该了解数据的历史和伦理?”在伯克利。在他的演讲中,克里斯提出了一个框架,原则和建议,以帮助在历史背景下操作伦理。他还鼓励数据科学家了解新的数据科学算法如何重新安排权力,以及数据的历史是如何讲述真理和权力的故事。这个演讲提出,为了理解未来,我们需要理解真理和力量是如何一直被争夺的。甚至自 19 世纪以来,当人们收集数据以建立能力时,他们经常“用它们来捍卫自己的权力,而不是赋予手无寸铁的人权力”。
我刚刚看过克里斯在纽约的演讲,他在纽约时报上讲述了他建立团队开发和部署数据科学中的机器学习的工作,我也参加了他最*的数据伦理演讲。虽然数据伦理演示涵盖了构建和部署一个将技术和关键数据方法相结合的课程,但这篇博客文章重点关注一个提议的伦理框架、现代数据伦理问题的示例(例如,偏见、伤害和重新识别)、要考虑的原则和建议。如果对更多的细节感兴趣,可以获得的资料以及一段早期演讲的视频。课堂讲稿和 Jupyter 笔记本也通过 GitHub 分发。非常感谢 Chris 在这篇文章发表前提供反馈,并允许摘录他的幻灯片。
理解数据伦理的分析框架:作为重新安排权力的能力的数据科学
克里斯提出,历史为“思考将要做出的决定”提供了一个框架。他建议查看之前的问题,“历史上的垃圾箱火灾”,或之前确立的有争议的“真相”。通过回顾这些真理是如何被争论的,历史为工业提供了一种“我们可能创造的不同的未来”的感觉对于工业界来说,推断概率结果的想法是很常见的。然而,人们可能不太熟悉的是,创造一种新的数据算法会重新安排权力。Chris 认为,在构建一项能力时有意图,只有这项能力——而不是意图——才能“以某种技术的形式移植给其他人”。它对人们如何能够‘对谁做什么’产生影响,从而影响权力的动态变化。”克里斯表示,他之所以会有这种顿悟,是因为本·雷希特寄给他菲利普·罗加威的论文“密码作品的道德品质”,并建议克里斯在阅读时将“密码学”一词替换为“数据科学”。的论文摘要以“密码术重组权力”为开篇。它配置谁可以从什么地方做什么。这使得加密成为一种固有的政治工具”。
然后,克里斯主张数据伦理应该成为公共话语的一部分,特别是当存在现代问题的影响时,包括人才不愿意为特定公司工作或者当一名工程师因“通过实施专门设计的软件来欺骗排放测试,从而欺骗美国监管机构和大众汽车客户”而被判入狱
克里斯鼓励人们讨论各种历史问题,他让人们回答“新能力如何重新安排权力?”以及考虑权利、伤害和正义的作用。
克里斯还谈到了现代文学是如何指出“互联网出了问题”,引用了凯茜·奥尼尔、T2、萨菲娅·诺布尔、T4、维吉纳·尤班克斯和肖莎娜·祖博夫的分析。Chris 主张,来自研究人员的质疑先入为主的“真理”的现代分析正在影响和塑造行业对数据伦理的认识。(当一名观众提到“所有女性!”在伯克利的演讲中,关于他的引用,他的回答是“没错。对此,我可以添加 Zeynep Tufekci、Hanna Wallach 和许多其他人的论文。这不是一个完整的列表”)。
数据伦理:重新识别和质疑真理(昂首阔步)
Chris 在他的研讨会上指出了许多消费者保护抗议的例子,以及行业如何争论和解决这些问题。然而,他在演讲中提到的两个重新识别的例子可能会引起数据科学家的特别共鸣,尤其是在寻找具有商业意义的例子时。2010 年,网飞取消了他们的第二次推荐竞赛,因为提起了隐私诉讼。相关论文“大型稀疏数据集的稳健去匿名化”,作者阿夫林德·纳拉亚南和维塔利·什马蒂科夫
“证明对单个订户知之甚少的对手可以很容易地在数据集中识别出该订户的记录。使用互联网电影数据库作为背景知识的来源,我们成功地确定了已知用户的网飞记录,揭示了他们明显的政治偏好和其他潜在的敏感信息。”
Chris 提到的一个更早的重新鉴定的例子来自 Latanya Sweeney ,在她的论文中“只有你、你的医生和许多其他人可能知道”。Latanya 指出,虽然一个数据集可能被认为是匿名的,因为一个人的“姓名”不包含在人口统计属性中,但其他数据列可能存在于与该人的姓名配对的列中具有相同人口统计属性的某处。相似的列变成了一个连接键并发生重新识别。克里斯还提到,1997 年,拉坦雅通过电子邮件向马萨诸塞州州长发送了自己的健康记录,当时她还是麻省理工学院计算机系的研究生。
数据伦理:考虑采用贝尔蒙特原则
在他的研讨会上,克里斯指出,伦理不是一个简单的话题。具体来说,实施数据伦理包括技术、哲学和社会学组成部分的结合。这并不奇怪,因为数据科学需要关键素养(例如,对主观设计选择的认识)以及功能性技术素养(例如,数据管理、构建模型等)。).此外,数据科学工作本质上是实验性和概率性的。因此,应用确定性的伦理规则可能会挑战执行力。
Chris 建议行业考虑将道德规范阐述为一套原则,并理解将清楚地传达和考虑出现的紧张点。然后,他主张设计一个适应新社区或新公司的工作系统,以实施这些原则。克里斯在他的演讲中谈到了不同的原则,供人们思考。然而,这篇文章关注的是贝尔蒙特原则。
克里斯借鉴了贝尔蒙特原则,这些原则是为了回应 T2·塔斯基吉的研究而制定的。贝尔蒙特原则经久耐用,并且自 20 世纪 70 年代以来就经过了“压力测试”。人们继续将它们用于交互设计,并作为审核决策的一种手段(在你做出决策之前和之后)。然而,克里斯建议根据公司如何使用数据和我们所处的时代来更新。
例如,在 70 年代,强调“知情同意”是达到“尊重人格”的一种手段。然而,今天,克里斯指出
“知情同意是一个模糊的概念,特别是在与私营公司打交道时,正如 Eben Moglen 所说,他们对我们的数据所做的一切,以及我们使用他们的免费服务来换取免费监视我们的所有方式”。
克里斯建议在“自主性”后面加上知情同意,或者用肯定回答这个问题:“用户有机会自主决定如何使用他们的数据吗?”克里斯还建议重新考虑“不伤害”,最大化利益,因为一个人“永远不和你说话或和你交往也不会伤害你”。第三个原则是“公正”。克里斯建议用“公*”代替“合法”,比如“建立一个系统,让你乐意成为任何参与者,任何利益相关者。”例如,在拼车系统中,乘客、司机和公司都同样快乐吗?无论答案是“是”还是“否”,它都提供了一个在审计期间和开发机器学习算法时要考虑的框架。
Checks and balances on corporate, state, and people power
在一个社区——包括一家公司——定义和设计道德规范之前,他们必须首先意识到这是一个好主意。克里斯还提出了一个框架来理解推动行业首先考虑道德的力量,将制衡描述为国家权力、企业权力和人民权力之间的“三人不稳定游戏”。他简要回顾了当前国家权力围绕消费者保护和反垄断法规重新参与的方式,以及人民权力如何以集体机构的形式在包括数据科学家和软件工程师在内的员工中出现。
摘要
Chris 在他的演讲“未来的统计学家、首席执行官和参议员应该了解数据的历史和伦理吗?”中涉及了与数据伦理相关的广泛话题虽然这篇文章提供了他的研讨会的精华摘录,包括一个提议的框架,行业争议真理的具体例子,以及供数据科学家考虑的建议原则,但更多见解可在他演讲的早期版本的甲板或视频中获得。再次感谢 Chris 允许摘录的幻灯片以及他在发表前对这篇文章的反馈。
使用 Pandas Profiler 和 D-Tale 进行数据探索
原文:https://www.dominodatalab.com/blog/data-exploration-with-pandas-profiler-and-d-tale
我们都听说过数据是新的石油。我总是说,如果是这样的话,我们需要经过一些精炼过程,才能将原油转化为有用的产品。对于数据,这种细化包括进行一些清理和操作,以便更好地理解我们正在处理的信息。
在之前的一篇博文中,我们已经报道了 Pandas Profiling 如何能够加速将我们的数据带入预测建模阶段所需的数据探索。我们讨论了探索性分析的重要性,包括观察缺失数据的频率和计算所有特征的交互作用。
在这篇博客中,我们将继续讨论使用 Pandas Profiler 进行数据探索,并包括另一个工具,对于我们这些更倾向于使用视觉线索的人来说,它可能会很方便。
数据探索的目的
在跳上机器学习马车之前,数据探索是非常重要的一步。它使我们能够围绕手头的数据构建上下文,并让我们开发适当的模型,然后可以正确地解释这些模型。此外,最初的探索还可以为机器学习管道中可能需要包含的一些转换的自动化铺*道路。
始终考虑数据所有者可以提供的关于数据的信息也很重要。例如,我们看到的数字实际上是指类别还是以特定格式提供的日期?探索的类型可能取决于其中一些问题的答案。
在项目的探索阶段,我们希望实现的一些典型目标包括:
- 检测错误数据。
- 确定有多少丢失的数据。
- 理解数据的结构。
- 识别数据中的重要变量。
- 检测数据的有效性。
Python 和熊猫剖析
我们在之前的文章中已经介绍了熊猫烧香,在这篇文章中,我们想强调这个工具使我们能够做到的一些方面。然后,我们将工作流程与另一个:D 故事进行对比。
首先让我们来看看我们将要处理的数据:来自 UCI 机器学习知识库的乳房 x 线照相海量数据集。关于这个数据集的信息可以在这里获得。
该数据集包含用于乳腺癌诊断的诊断性乳房 x 线照片的相关信息。乳房 x 光片实际上是乳房的 x 射线,用于检查或筛查可能没有疾病症状的人的癌症。在检测到异常的情况下,可能需要进一步的乳房 x 光检查来确定异常是否是良性的。
让我们将数据加载到 pandas 中,先在没有 Pandas Profiler 的情况下看一看,看看我们能告诉我们什么。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
根据 UCI 网站提供的描述,我们知道总共有 6 个属性:
- BI-RADS 评估
- 年龄
- 形状
- 边缘
- 严重
我们可以用它来为数据框架中的列提供有用的名称。
url = "http://archive.ics.uci.edu/ml/machine-learning-databases/mammographic-masses/mammographic_masses.data"
names = ['BI-RADS', 'Age', 'Shape', 'Margin', 'Density', 'Severity']
df = pd.read_csv(url, names=names)
masses = df.copy()
请注意,我已经创建了原始数据集(df
)的副本,并将其命名为masses
。万一我们实现的一些操作最终在我们的数据集中产生了意想不到的变化,我们总是可以回到最初的状态。在这种情况下,我们总是可以从 UCI 网站下载数据,但在许多情况下这可能是不可能的。
好,让我们先来看看我们的数据集:
masses.head()
此外,我们可以检查数据是否具有预期的行数。根据我们掌握的信息,共有 961 个条目,其中 516 个为良性,445 个为恶性。利用Severity
栏告诉我们肿块是良性还是恶性,我们可以检测数据是否符合预期:
masses.shape
(961, 6)
masses['Severity'].groupby(df['Severity']).size()
Severity
0 516
1 445
Name: Severity, dtype: int64
在这种情况下,我们使用了 pandas 的功能,根据列Severity
中的值对数据进行分组,并查看组的大小。让我们继续看我们的数据。
我们可以检查每一列包含的信息类型,我们可以用.dtypes
来完成:
masses.dtypes
BI-RADS object
Age object
Shape object
Margin object
Density object
Severity int64
dtype: object
我们可以看到,除了Severity
之外,所有的列都有object
类型。这是 pandas 告诉我们类型要么是字符串,要么是数值和非数值的混合。Severity
由整数组成。
仔细查看数据,您会注意到一些列带有问号?
。对于该数据集,这是数据收集表示缺失数据的方式。当通过read_csv
用na_values
参数加载数据集时,我们可以使用这些信息。让我们看看数据集中的一些数据示例:
masses.iloc[[20, 456, 512],:]
我们现在可以使用replace
函数来转换nan
的缺失值。同时,我们可以利用这个机会将我们的列转换成数值,而不是将它们保留为object
。
masses = masses.replace('?', np.NAN)
masses.loc[:,names[:-1]] = masses.loc[:,names[:-1]].apply(pd.to_numeric)
masses.dtypes
BI-RADS float64
Age float64
Shape float64
Margin float64
Density float64
Severity int64
dtype: object
正如我们看到的,现在列的类型是float
。请注意,虽然原始数据看起来像整数,但我们在列中引入了nan
值,这意味着 pandas 要求列至少是float
。让我们来看一些缺失值已被替换的示例行:
masses[masses['BI-RADS'].isna()]
很好,让我们来看看数据集的描述性统计数据。我们只需使用pandas.describe()
功能,就可以一次看到所有信息:
我们可以看到,我们有年龄在 18 至 96 岁之间、*均年龄为 55 岁半的患者的数据。但是我们如何计算其他列的值呢?有一个 2.72 的Shape
意味着什么?这有意义吗?这就是语境产生影响的时候了。
我们还可以通过替换*均值或中值的缺失值来开始处理缺失数据,或者甚至开始使用一些奇特的插补,例如使用最*邻算法。然而,对数据进行转换而不考虑所考虑的值的含义是完全错误的。
上下文中的数据
我们知道我们可以获得大量的数据,事实上我们可以盲目地获取像上面这样的数据集,并将其投入到机器学习管道中,以达到分类的目的。尽管如此,这样做的危险在于,我们可能会错过显而易见的东西,做出不符合目的的决定。处理这个问题的一个方法是停下来考虑数据的上下文。
在我们的工作示例中,我们可能能够安全地假设Age
变量是以年为单位的患者年龄,但是我们能告诉其他变量什么呢?根据 UCI 页面中的信息,属性如下:
BI-RADS
评估:1 到 5(依次)Age
:患者的年龄(整数)Shape
:肿块形状:圆形=1 椭圆形=2 小叶形=3 不规则形=4(标称)Margin
:质量余量:限定=1 微叶状=2 模糊=3 模糊=4 针状=5(标称)Density
:质量密度高=1 iso=2 低=3 含脂=4(序数)Severity
:良性=0 或恶性=1(二项式)
让我们也考虑一下乳房 x 光检查后会发生什么。我们可以预期,这些结果将由一名合格的放射科医师进行检查,该放射科医师接受过寻找组织中异常肿块的培训。大多数情况下可能是良性的,对于那些不是良性的,有一些迹象表明可能是癌症。在放射科医生查看病例后,他们会写一份报告,描述所发现的异常情况。医生描述结果的一种标准方法是双 rad。它通常从 0 到 6,但根据 UCI 的页面,我们可以看到他们认为他们只有 1-5 的范围。
除了 BI-RADS 评分,医生还使用其他属性,例如形状(圆形、椭圆形、小叶形或不规则形)、肿块中存在的脂肪细胞的数量以及可疑细胞的数量,即密度,以及肿块边缘的外观,即边缘。所有这些属性实际上都是绝对的,事实上其中一些是有序的。这意味着对这些值取*均值或标准偏差实际上没有意义。
现在让我们利用这些信息对数据进行更好的了解。
我们可以从寻找异常值开始。例如,我们不期望找到 1-5 范围之外的任何BI-RADS
值。
masses[(masses.loc[:,'BI-RADS']<1) | (masses.loc[:,'BI-RADS']>5)]
啊哦!看来我们有一些惊喜。首先,数据中存在明显的异常值,因为行 340 的 BI-RADS 为 55!我们也有一些 0 和 6 的行。在这一点上,我们可以回到我们的放射科团队,并验证异常值是(或不是)打字错误,期望值实际上是 5。
对于其他人,我们可以尝试证实他们正在使用完整的 BI-RADS 分类,其中包括用于不完整读数的0
和用于已知活检且已证实为恶性肿瘤的6
。
在这种情况下,由于我们是从网上获得这些数据的,所以让我们考虑以下假设:
- 55 实际上是 5
- 0 必须更改为 1,6 必须更改为 5
请注意,这可能不是数据集原作者的真实意图。然而,它为我们提供了一些可以在这个练习中执行的清洁步骤。
masses.loc[:,'BI-RADS'][masses.loc[:,'BI-RADS']==55] = 5
masses.loc[:,'BI-RADS'][masses.loc[:,'BI-RADS']==0] = 1
masses.loc[:,'BI-RADS'][masses.loc[:,'BI-RADS']==6] = 5
masses[(masses.loc[:,'BI-RADS']<1) | (masses.loc[:,'BI-RADS']>5)]
熊猫侧写师
from pandas_profiling import ProfileReport
profile = ProfileReport(masses, title="Mammographic Mass Dataset Profiling Report")
profile.to_notebook_iframe()
其结果是一个交互式报告,提供了一个非常有用的数据集概述,包括一些总体统计数据。例如,我们可以看到配置文件认为我们有一个数字变量和 5 个分类变量。此外,它认为有 2.8%的丢失细胞。
然后,我们可以查看数据集中的每个变量,例如,让我们查看前两个变量的内容,即BI-RADS
和Age
:
在BI-RADS
的例子中,我们可以看到最普遍的值是类别 4,超过 56%的数据,而类别 1 只有 0.5%。如果我们要在模型中使用这个列,我们现在意识到我们有一个不*衡的数据集。
对于Age
,我们看到一个看起来正常的直方图,峰度为-0.31。请记住,这里使用的是 Fisher 的峰度定义,即正态分布的峰度为零。在这两种情况下,我们都有许多其他信息统计数据可以指导我们的探索。
我们可以查看变量之间的相关性,并能够在不同的相关性度量之间进行选择。我们甚至得到了所选相关性度量的描述。
我们还以不同的可视化格式获得关于缺失值的信息,例如如下所示的零矩阵:
我们可以从熊猫的角度来看这个问题,寻找缺失条目的数量:
for name in names:
missing = masses[masses[name].isna()].shape[0]
print('{0} missing: {1}'.format(name, missing))
BI-RADS missing: 2
Age missing: 5
Shape missing: 31
Margin missing: 48
Density missing: 76
Severity missing: 0
我们可以将报告保存为 HTML 文件以供将来参考:
profile.to_file("mammographic_mass_report.html")
好的,看起来很棒!如果你是一个更加视觉化的人,并且愿意以那种方式去探索呢?嗯,D-Tale 对你来说可能是个不错的选择。我们来看看吧!
使用 D-Tale 进行数据探索
D-Tale 是一个可以帮助我们以可视化的方式获得数据集详细信息的模块。它支持代码导出。这意味着,如果您想要记录、复制或实际学习您的分析的某些部分,您可以获得由该工具创建的代码的导出,并从那里开始。
该模块生成一个报告,涵盖了数据集的概况,它让您应用通用和自定义过滤器,运行可视化,突出显示值等。
让我们试着做一些我们在博客第一部分做的步骤,但是现在使用 D-Tale。让我们导入模块并创建原始数据帧df
的新副本。
import dtale
masses2 = df.copy()
我们现在可以在笔记本中运行一个报告,我们将看看如何执行以下步骤:
- 转换'?'至
NaN
- 移除异常值表单
BI-RADS
- 获取预期范围内的
BI-RADS
值 - 检查变量的数据类型
- 浏览报告
- 导出清理后的数据
准备好了吗?
dt = dtale.show(masses2, notebook=True)
该报告看起来非常像一个电子表格,当您将鼠标悬停在表格上时,您可以看到您可以采取的一些行动。
让我们把问号转换成nan
。对于每一列,我们选择“替换”菜单并填写表格,告诉 D-Tale 进行更改变成了‘南’。请注意,您需要通过单击加号来添加操作。正如您在下面的动画中看到的,该工具生成的代码是可见的。我已经为一个单独的列做了这些,我们将需要对其他列应用相同的更改。
D-Tale 让我们直接修改表中的值,让我们对BI-RADS
列中的异常值进行修改。
此列的其他替换可能更适合使用替换功能。请注意,您可以将各种步骤添加到上下文菜单中,如下所示:
我们可以使用提供的菜单来更改列中的数据类型。例如,我们可以将Severity
列从int
更改为分类。在这种情况下,我们需要告诉 D-Tale 先将值更改为字符串,然后再更改为类别:
我们可以像以前一样探索缺失的数据。在这种情况下,只需选择“缺失分析”菜单:
D-Tale 让我们可以做更多的事情,如查看相关性、创建图表或突出显示值。
我们可以通过从菜单中选择“代码导出”来导出生成的代码:
您还可以看到一个“导出”菜单,让我们将数据保存到 csv 或 tsv 文件中。
摘要
在这篇文章中,我们已经讨论了数据探索的重要性,并看到了上下文如何提供下一步的线索。我们不仅能够创建更好、更合适的转换,而且能够更好地解释我们的变量。
我们看到了如何用三个工具做到这一点:Pandas、Pandas Profiler 和 D-Tale。这些工具可以帮助我们用几行代码获得关于数据集的信息,对于 D-Tale,只需点击几下鼠标。我们探索的结果可以重复,并进一步用于构建适合目的的机器学习模型。
《数据为善》创刊会:DrivenData 的彼得·布尔
原文:https://www.dominodatalab.com/blog/data-for-good-peter-bull-drivendata-meetup
最*,Domino 举办了一次超过 40 名数据科学家的会议,他们来看了来自 DrivenData 的 Peter Bull 发表了一个精彩的演讲,题为为好而众包数据。
Peter 的演讲阐述了如何将统计学、计算机科学和机器学习应用于应对社会领域的挑战。他给出了良好运动数据的大背景,以及各种背景的人如何参与其中的建议。他还谈到了两个新的 DrivenData 竞赛。第一场比赛的目标是利用机器学习来识别鱼类物种,以帮助保护新英格兰的底栖鱼,以及如何利用视频数据进行深度学习是一个令人信服的问题。第二个是,一种新的竞争,向开源项目贡献拉请求可以为竞争者赢得 10 万美元奖金池的积分。这项挑战的目的是:将深度学习置于放射科医生的指尖。
数据质量分析
原文:https://www.dominodatalab.com/blog/data-quality-analytics
HealthJoy 的数据科学总监 Scott Murdoch 博士介绍了数据科学家如何使用分布和建模技术来了解数据中的陷阱,并避免根据脏数据做出决策。
会话摘要
在最*于芝加哥举行的 Data Science PopUp 上,Scott Murdoch 讨论了数据科学家如何理解他们的数据,实施数据质量分析,然后与 IT 合作。默多克主张“信息技术和数据科学实际上应该很好地整合……这是我在任期内学到的一件事。”
会议亮点
- 数据质量分析的定义和脏数据的成本。
- 识别关键字段(唯一键、关键字段等。)来解决问题。
- 涵盖 OLS 回归、K 均值聚类和神经网络建模技术作为跟踪质量的高级方法。
- 实用技巧包括在创建预测时为将来保留系数(种子和权重)。
- 与 IT 集成,为基准指标(百分比 0、频率分布等)创建边际误差范围。),构建脚本,并自动化这些过程
演示文稿
好的,首先,我要感谢团队今天邀请我。我很兴奋能和你说话。我要和你们谈谈数据质量分析,我相信你们中的一些人会对此感到厌烦,因为谁想谈论数据质量。但如果有人知道,那就是这个小组,对吗?
虽然对某些人来说,这可能不是最吸引人的话题,但却是一个非常重要的话题。什么是数据质量分析?这是重要的一点。我们为什么需要它?脏数据的成本是多少?我们将了解您如何理解您的数据、实施数据质量分析,然后与数据集成。这是非常重要的一部分。脏数据会让公司损失很多东西。这可能会降低生产率。为什么?我可能不需要告诉你这些,但我在这里,所以我会的。
如果你做错了什么,你正在做分析,突然你在你的数据中发现了一些东西-一种缺失的感觉,一部分数据缺失了,你做了所有这些分析,你去给你的老板看。糟透了,对吧?他们得往上走。你可能不得不改变结果。
如果你是一家更大的公司,我已经工作了两年,你推出它,它会影响你的品牌认知,如果你用这些数据来驱动决策,这就是你这么做的原因。最重要的是,它会影响收入。
那么,事不宜迟,什么是数据质量分析?基本上,它使用分布和建模技术来理解数据中的陷阱。与节省的费用相比,成本相当低。代价是你的时间,在大公司里,这就是所谓的 FTE(全职员工),或者你的身体时间。如果你自己在做某件事,原谅我的语言,我是经济学家,但是你时间的机会成本。也就是说,如果你不这样做的话,你能做的最好的事情就是。这种节省可能会让你免于尴尬、名誉受损,并获得一定比例的收入。
那么,我们为什么又要在乎呢?当我发现这个数字时,我并没有感到震惊,但当我亲眼看到它时,我觉得有点奇怪。所以,肮脏的数据决策,我应该澄清一下。在美国,根据脏数据或未正确编码的数据做出决策的成本每年约为 3 万亿美元。
我来自医疗保健行业。对我们来说,这大约是每年 3400 亿美元。这是一大笔钱。当你看这三个步骤时,你的目光可能会有点呆滞,因为它们看起来很简单。但是我要告诫大家不要轻举妄动。
当你开始看你的数据时,我想让你想想你在试图解决什么问题。我知道每个人都喜欢,嗯,当然。这就是我们这么做的原因,对吗?
但是我想让你想想你使用的领域。然后我想你有什么类型的数据。更具体地说,我想让你想想你没有哪些数据。好吗?然后,你真正了解你的数据。我的意思是,你的数据里有什么?数据是从哪里来的?来源是什么?在你之前有多少人摸过?它是为它而来的吗?它是从网上来的吗?对于创业公司的人来说,这可能是一个相当简单的问题。对于来自大公司的人来说,你会惊讶地发现,在你接触这些数据之前,有多少人会去接触它们。
在接下来的几张幻灯片中,我希望大家回想一下自己做的最后一个项目。我想让你想想你对这些数据有什么倾向。你对数据做了什么假设?你检查过了吗?你验证了那些假设吗?如果你没有,我不怪你。有时候是时间的问题。但是如果你做了,你的处置是正确的吗?
那么,仅仅通过举手表决,这个房间里有多少人,当他们得到一个新的数据源时,知道他们的数据的唯一键是什么?有点?我看到有人举手。这是一个 It 问题,许多数据科学家并不总是关注它,至少在我看来是这样。唯一键是唯一的行。我会谈到医疗保健数据,但你可以将它应用于任何事情。
我非常熟悉的一件事是索赔数据。如果你从未见过索赔数据,你去医院,对不对?如果因为某种原因,不幸的事情发生了。你骨折了。我也经历过一次。你得去急诊室,对吗?他们有所有这些不同的程序称为 CPT 代码,当你进入急诊室,一个是 x 光。一个是医生的时间。一个是护士的时间。一个是他们给你的药,对吗?所以,你有这些不同的行。
当我向某人提供索赔数据时,他们会说,“好的,这是索赔级别的数据”。再问一次,这到底意味着什么,对吗?这是索赔数据,人们会拿走它,好吧,这是在索赔水*。一般来说,它的意思是它是一个成员,它是一个独特的行是成员,数据服务,索赔号码,因为他们可以对一次访问进行多次索赔,以及索赔行。
这是我在金融数据和健康数据中看到的。这种说法是——对于 IT 部门或组织中的任何人来说,您可能以前见过这种说法。它基本上就像一个更新序列。你会有 10 行相同的硬币。他们甚至可能有相同的允许量。基本上就是某人在这个手术上花费的金额。除了其中的九个,它会有相同的数量,然后第十个可能会不同。事情是这样的,每次供应商提出索赔时,他们都会更新索赔。但他们不会删除旧记录,对吧?所以,你要选最后一个。如果你不知道那个唯一的键,如果你只是假设它在声明级别,你按列做一个求和,你会得到大约 10 倍于你应该得到的。
接下来的事情是理解关键字段。在我将要展示的几个例子中,我将尝试模拟一个人为一个给定的手术支付多少钱。这就是他们所说的允许支付,或允许金额。它基本上意味着保险公司允许参与者支付多少费用。其余由个人负担。然后是提供者,也称为 MPI。然后是承保金额,即员工承保的金额。他们称之为 CPT 代码,这是实际的程序。
我之前也是这么说的。x 光片,一个医生给你检查,他们叫它什么来着,他们给你止痛药,那是在另一个目录下。然后是提供商的专业,这将与提供商和会员的邮政编码相关联。他们还会有一些其他领域,对于任何从事医疗保健的人来说,他们称之为 PHI。会员护理 ID、姓氏、名字。好的。所以,无论何时你在看数据,并且你在系统地做这件事,你应该考虑一套你想要看数据的标准。我倾向于看这里的前三名。我知道很多人都是从后两个开始的。
举手表决,有多少人在使用数据之前创建了一个分布?好的,相当多。有多少人看到少了多少?甚至更多的人。印象深刻。有多少人在零度看到?有多少人看到了价值的比例?那么,前 20 个最常见的值是什么呢?人少了,好吧。
一个月大概有 300 场演出。所以,要抽查的数据太多了吧?他们假设数据是从数据源正确提交的,但是他们没有办法验证这一点。他们所做的就是他们所谓的模式检查。它有正确的列名吗?它有正确的编码吗?是字符串还是 varchar 之类的?但是,他们实际上不会进入该领域,并说,根据我们过去所做的,这是我们期望看到的吗?这就是我今天想告诉你的,好吗?
总之,我在做这个分析。我是在允许的范围内做的。想象一下,你有大约 5 亿个索赔,我做了这个频率。有一个数字——有人对 5 亿张唱片的 5.14%的时间收费。你觉得这合理吗?想想整个美国的所有供应商。一家供应商对 5 亿份索赔中的 5%收取相同的费用。这是一个很大的数字,对不对?巧合的有点过了。嗯,没错。但如果我不调查的话,我是不会知道的。
人们去一个非常大的,我不能说,但是遍布美国的非常大的药检机构进行药检。但这是对的,一开始看起来是错的。然后我确实发现了一些数据有问题的地方。数据不是-我们过去称之为胖手指。这不是人为错误,但它是从提交的一个地方编码错误。所以这就是我们这么做的原因。
对于你正在做的事情,模仿最后两个——直方图,最大值和最小值——是非常有效的,很好的方法。如果您每月或每天、每周都在提交非常大的数据,并且您希望围绕它构建一个流程,因此您有一些基准测试的基础,我会做所有这些以及您能想到的任何其他事情。因为你们中的任何一个都能得到更好的。
好了,这里有一些先进的数据质量技术,我相信这个房间里的每个人都以某种形式或方式做过建模。但是我在这里要讲的是用这些技术来检查你的数据质量。好吗?接下来我要讲两个例子,回归和聚类。神经网络更多地假设回归。
这里有多少人用过神经网络?那很好。大约八年前,我读完了研究生,我无法让我的导师让我使用神经网络。我终于让他们让我用了。但是现在,似乎每个人都在使用它。但那时候很难推销。这让我听起来很老。
好的,对于回归,我要做的是尝试预测允许的金额,也就是某人为一个特定的程序支付的金额,对吗?我想使用的所有字段都在这里。是什么样的医生?医生在哪里?是什么类型的手术?个人负担了多少?是的,这与允许的数量有关。
我想在此基础上建立一个模型,你会得到一组系数,就像你得到的其他回归一样,对吗?你可以得到每个变量的系数。记住这一点。我可以对 k 均值聚类做同样的事情。但是这里的不同之处在于——为了简单起见,我在这里使用了相同的字段——但是假设您想要一个实际提供者上的集群,其中您不一定有您试图预测的明确依赖项,但是您想要对事物进行分组。那就是你用这个的时候。同样的事情,无论你使用聚类,回归,神经网络,任何你能想到的。
最重要的是保留系数,种子,权重。基本上,你要做的是,试着设置这些系数,基本上是为未来做一些预测。我将在下一步展示这一点。
现在我们到了与它集成的部分。举手表决——因为我还是来自一家大公司——数据科学团队中有多少人每月至少与他们的信息技术组织举行一次例会?好的,我明白了-继续。在这里的 100 个人中,我只看到了 10 个人。这很正常,但不应该。IT 和数据科学实际上应该非常好地集成。这是我任职期间学到的一件事。
您可以使用它来基本上采用您在两张幻灯片中找到的那些基准。百分之零点,频率分布。您可以编写一个 Perl 脚本或 Python 脚本,无论您想做什么,来自动化这个过程。基本上,你所做的是——就像许多数据科学家做的其他事情一样——你观察一个分布。您可以创建 1,000 个样本的随机样本。找出均值、中值、标准差,然后你就可以在你觉得合适的地方切掉。所以假设正负 2 个标准差。如果一个特定的-让我们说允许的数量。如果*均赔偿金额从 0 美元到--让我们看看,索赔金额是多少?我认为我见过的最高索赔是一次 10 万美元左右。所以,假设是 0 到 10 万美元,好吗?但那是尾端,对吗?大部分可能在 100 美元到 1000 美元之间,对吗?大概 1500 美元。所以,取这两个范围之间的任意值。当你的新数据进来的时候,你运行均值,你运行标准差,然后比较它们。如果没有阈值,你就会触发警报。然后发送给它。突然间,你可以自动检查你的数据。你做分析的时候少了一个步骤。你可以对建模做同样的事情,这就是我所说的第二步。这是更高级的东西。
基本上,你所做的就是做模型。你保存系数。你运行新的数据就像一个样本。然后你看你的预测率是多少。同样,你可以运行一个新的模型,看看系数之间的差值是多少。他们基本上得到同样的东西。基本上,您希望了解我显示的允许数量与所有新数据和旧数据的不同提供商信息之间的关系。我得到了很多。我可以举更多的例子。但是人们有什么疑问吗?
好吧,我们有几个。如果你还需要我解释什么的话,我说得有点快,因为我以为我已经迟到了,所以。
SCOR 的数据科学:用实例而不是法令来管理数据科学
编者按:这是分享开发企业数据科学战略的公司最佳实践的系列文章的一部分。一些文章将包含关于他们使用 Domino 的信息。
在过去的一年半时间里,我们的数据科学卓越中心(CoE) 极大地推动了数据科学在 SCOR 的应用,并帮助我们的业务部门开发模型来满足客户需求,所需时间比以前缩短了四分之一。
虽然有许多因素促成了我们的成功,从强大的管理层支持到顶尖人才,但有一个因素尤为突出:
牢牢植根于知识共享的理念和实践。
为什么要分享知识?
强调知识共享并不是 SCOR 数据科学学院独有的。这在我们的公司文化中根深蒂固。作为全球第四大再保险公司,我们采用模型驱动的方法来帮助客户控制和管理风险,包括自然风险、气候风险、健康风险、地缘政治风险、网络风险等。我们帮助人们在逆境中重建家园。我们的成功深深植根于我们理解问题并与他人合作解决问题的能力。
- 新冠肺炎患者的长期健康风险是什么?
- 再保险人如何帮助促进可持续发展实践和应对气候变化的行动?
- 组织如何降低成为勒索软件受害者的风险?
为此,我们实施了一个多云策略以及 Domino 的 Enterprise MLOps *台,以提高我们的模型速度,这样我们就可以在过去四分之一的时间内满足客户需求。
*年来,SCOR 的研发部门更名为知识团队,并成立了专门针对特定专业群体的分会,以反映这一重点。我们的数据科学 CoE 就是这些社区之一。(例如,其他包括敏捷性、生物特征风险建模和行为科学。)
特别是对于数据科学,我认为这种知识共享的哲学至关重要。在加入 SCOR 之前,我是一名顾问,看到过无数这样的例子:商业领袖因为狭隘的思维和怀疑态度而抵制全球团队的努力。采取支持员工而不是强加实践的方法使我们能够与欧洲、亚洲和美洲的数据科学和业务同事建立牢固的合作伙伴关系,并避免许多 Coe 面临的阻力。
那么我们如何将知识共享付诸实践呢?
以下是我们使用的五种策略。
- 在当地发生的事情和全球发生的事情之间架起一座桥梁。这包括在业务中安插员工,以促进思想、实践、技术和文档的交流。例如,虽然我们是一个全球团队,但团队成员分散在不同的地点,并对全球团队及其区域市场保持虚线报告结构。这种方法确保我们的数据科学家贴*业务,了解特定市场的具体情况,同时促进思想交流。因此,我们可以将全球实践带到不同的市场,并提升可能有利于其他市场的本地实践。
- 秀,不告诉。我们不提倡严格的项目流程。我们的数据科学专家分享了他们发现的长期有用的最佳实践和模板,并推荐它们作为节省当地团队时间的起点。有时,这是通过文档发生的。例如,假设您已经准备好部署一个应用程序或 API。在这种情况下,我们可以提供说明从概念验证到生产的 IT 要求的文档,以帮助团队更快地前进。有时,它通过工作本身发生,在我们进行的过程中讨论什么在不同的市场有效,以及它是否可能在这里也有效。我们在构建时也考虑到了可重用性,但我们对此始终保持透明。如果你告诉一个业务部门,我们需要建立一个全球通用的特定标准,他们会立即认为这需要更多的时间。通过使它成为我们日常工作的一部分,我们可以快速地移动,同时仍然创建可重用的资产(无论是一段代码还是整个应用程序)。例如,去年,我们以这种方式完成了大约 25 个项目,这是一个可观的数字,显示了我们可以达到的规模。
- 让每个人都参与进来。例如,我们召集了各个地区最优秀的技术专家来开发使用 Python 和 R(我们数据科学团队中最常用的两种工具)的模板和策略。我们让他们查看所有不同的项目,开发一个强大的框架,我们可以从一个项目重用到另一个项目,并在开始创建应用程序或 API 时引入这种系统化的方法。我们还寻求业务负责人对他们建议的反馈——在给定项目中哪些做得好,哪些可以改进——我们不断学习和重新审视我们管理项目的方式。
- 共享工具和基础设施。为了共享知识、实践和代码,我们必须共享工具。为此,我们在 Domino *台上实现了一个多云策略。例如,我们在 Domino 上启动了 dashboarding 计划。我们正在扩展一些现有的仪表板,以监控数据和控制一些不同的模型,以便其他市场可以利用它们。我们已经向欧洲和美国市场推出了一款在澳大利亚开发的产品。我们还使用 Domino 扩展了在欧洲开发的 API 的使用,使其在世界范围内可用。
- 保持联系。我们每月两次与每个市场的高层领导进行电话会议,讨论正在进行的项目和新的挑战。这些电话确保我们能够快速响应不断变化的业务需求,并提供必要的支持。例如,这些电话帮助我们很快确定并交付了一些与新冠肺炎相关的项目。许多企业领导人对我们在如此短的时间内取得的成就印象深刻,并开始围绕数据科学展开更多对话。通常,组织将业务构思与技术开发分开。但是,通过从一开始就让技术专家参与进来,我们可以帮助向更有效的业务解决方案发展。
最终,通过专注于知识共享,我们发现我们可以将数据科学从一种功能转变为一种思维模式,并将新思想从一个市场传播到另一个市场。
关于全球一级再保险公司 SCOR
SCOR 是全球第四大再保险公司,为客户提供多元化和创新的解决方案和服务,以控制和管理风险。应用“风险的艺术和科学”,SCOR 利用其行业公认的专业知识和尖端的金融解决方案来服务其客户,并为社会的福利和弹性做出贡献。
SCOR 为其客户提供了最佳的安全级别,标准普尔、穆迪、惠誉和 AM Best 的 AA-评级或同等评级。该集团在 2020 年创造了超过 160 亿欧元的保费,并通过其全球 36 个办事处为 160 多个国家的客户提供服务。
欲了解更多信息,请访问:www.scor.com。
纽约时报的数据科学
原文:https://www.dominodatalab.com/blog/data-science-at-the-new-york-times
克里斯 《纽约时报》首席数据科学家威金斯在 Rev. Wiggins 上发表《纽约时报的数据科学》主张数据科学家发现影响业务的问题;将问题重新框架为机器学习(ML)任务;执行 ML 任务;并以有效的方式将结果反馈给业务部门。他讲述了他的团队如何用描述性、预测性和规范性的 ML 解决方案解决业务问题的例子。这篇文章提供了会议的精华、文字记录和视频。非常感谢克里斯·维金斯在这篇文章发表前提供的反馈。
会话摘要
在 Rev 会议“纽约时报的数据科学”中,克里斯·维金斯提供了关于纽约时报的数据科学小组如何通过开发和部署 ML 解决方案来帮助新闻编辑室和业务在经济上变得强大的见解。Wiggins 建议数据科学家吸收业务问题,将它们重新组织为 ML 任务,执行 ML 任务,然后清晰简明地将结果反馈给组织。他主张,一个有效的 ML 解决方案不会以 Google Slides 结束,而是成为“一个托管的工作 API 或 GUI 或一些人们可以投入工作的工作代码”。Wiggins 还深入研究了应用非监督、监督和强化学习来解决业务问题的例子。Wiggins 还指出,数据科学、数据工程和数据分析是 T4 和纽约时报 T5 的不同团队。特别是数据科学组,包括来自“各种各样的智力训练”的人,包括认知科学、物理、金融、应用数学等。Wiggins 在会议结束时表示,他期待着从更加多样化的工作申请中进行招聘。
本次会议的一些亮点包括
- 在历史背景下定义数据科学家的思维模式和工具集
- 将数据科学视为数据科学家将 ML 应用于现实世界问题的一门手艺
- 数据科学家必须具备分析技术技能,并能够与非技术利益相关方进行清晰简洁的沟通。
- 评估业务利益相关者是否试图解决描述性、预测性或规范性的问题,然后将问题分别重新组织为监督学习、非监督学习或强化学习。
- 在《纽约时报》中深入探讨构建和部署 ML 模型的示例,包括面向描述性主题建模的 Readerscope(受众洞察引擎),关于谁可能订阅/取消订阅的预测模型,以及通过高度策划的编辑内容推荐的说明性示例。
要了解更多关于本次会议的见解,请观看视频或通读文字记录。
录像
副本
克里斯·维金斯:
我和你有大约 30 分钟的时间。我将在《纽约时报》上告诉你们所有关于数据科学的内容,如果时间不够,我的电子邮件地址和我的 Twitter 都在这里。随时给我发电子邮件。如果你不记得其他事情,只要记住我们在招人。不,我只是在开玩笑。我们在招人,但是...我的演讲有点像皮特·斯科莫罗奇的演讲和帕科·内森的演讲,有点像是塞进了应用程序。我今天要讲的很多东西,希望能引起你们今天早些时候在 Paco Nathan 或 Pete 的演讲中听到的共鸣。
正如广告所说,我在哥伦比亚大学和《纽约时报》之间来回奔波,在《纽约时报》我领导着一个数据科学小组。哦,顺便说一句,如果你发微博给我,我现在应该警告你,我和 Twitter 有一种“黑暗森林”的关系,这意味着我阅读,但我不写,所以如果你要发微博给我,告诉我你的电子邮件地址,这样我可以通过其他渠道联系你。数据科学。数据科学在纽约时报。
首先,我必须告诉你我们是做什么的....当我们在纽约时报做“数据科学”的时候。不同的公司对“数据科学”的理解是不同的。例如,脸书几年前刚刚将他们所有的“数据分析师”重新标记为“数据科学家”。当有人说他们“做数据科学”时,这可能意味着许多不同的事情。下面是我们如何看待《纽约时报》的数据科学思维和工具集。因为我是一个学者,我喜欢看原始的创始文件。这是一份关于数据科学的古老文档,特别是 Jeff Hammerbacher 的一篇文章。这里有多少人认识杰夫·汉默巴克?只有几个人听说过他?有多少人听说过杰夫·哈默巴赫尔?好吧。杰夫·哈默巴赫尔在脸书创立了数据科学或数据基础设施。有多少人听说过脸书?很好。他和一个叫马克·扎克伯格的人一起上大学。他做了一年金融,然后就超级无聊了。他打电话给马克说:“马克,你有什么事吗?”马克说,“是的,我们有很多数据。请帮助我们理解它。”他去了脸书大约四年,然后退休了。2009 年退休时,他有些空闲时间。他收集了这本可爱的散文集。他在书中说,
“在脸书,我们觉得不同的职位头衔,比如研究科学家、商业分析师,不太适合我团队中的多样化工作。“数据科学家”可能用 Python 构建多级处理管道,设计假设测试,用 R 对数据样本执行回归分析,用 Hadoop 设计和实现算法,或者以清晰简洁的方式将我们的分析结果传达给组织的其他成员。为了抓住这一点,我们想出了“数据科学家”这个头衔"
我真的很喜欢这一段。
十年后再来看,这确实是一个有趣的段落。Python 已经有了足够的武器等级,我们不会再堕落到 R 级了。抱歉,各位。我曾经是你们中的一员,但我们不再陷入 r。Hadoop 肯定正在发生,但这是谷歌的问题,因为现在在 iron 解决方案上构建了我们自己的 Hadoop 后,在处理了一段时间的红移后,我们现在只是将其全部交给 BigQuery。后台有一个分布式 MapReduce,但我们不需要知道。据我们所知,我们感觉像是在输入 SQL。但是,以清晰简洁的方式将结果传达给其他人,这绝对是我对数据科学团队员工的要求。我想要数据科学家,我可以和来自产品或营销部门的人或不会说微积分的人一起呆在一个房间里,这说明了皮特说过的很多事情。我不希望产品经理成为研究和开发有用产品的人和最终用户之间的信息瓶颈。我们希望人们能够以清晰简洁的方式与组织中的其他人交流。
另一个试图向我上面的人解释我们在数据科学组做什么的古老而规范的文档是这个。有多少人看过这个维恩图?很好,好的。这是一个非常数据科学的人群。你甚至可能认识德鲁·康威,那时他还只是个研究生。他试图解释他在一次阶层规划会议上听到的内容,当时人们正在谈论数据科学。
我仍然相信数据科学是试图将机器学习应用于一些现实世界问题的工艺。
同样,营销或产品部门的人不会来对你说,“请用多项式核来最小化这个铰链损耗。”一个真正的活生生的人有一个现实生活中的问题,比如“我想知道如何让更多的人订阅我的产品”或者“我想让人们不要离开我的产品”。他们带着一些现实世界的问题来找你。作为数据科学家,你的工作是找出如何将现实生活中的问题重新构建为机器学习任务,执行机器学习任务,并以对他们有用的方式向他们传达结果。如果你是 Eric Colson 所说的“全栈”数据科学家,并且你是 prod 的成员,那就更好了,这意味着你实际上是在推送代码,产生一个实时 API、一个实时 GUI,一些其他人可以投入工作的东西,这就是数据科学家如何真正增加我的经验价值。我们可能会觉得这些是数据科学的古老文档。
正如 Paco 今天早上介绍的那样,在思维模式中有一些甚至更早的古代文档,甚至带有“数据科学”这个短语。一份文件来自异端统计学家比尔·克利夫兰。像他那个时代的许多异端统计学家一样,他在贝尔实验室。贝尔实验室确实证明了约翰·图基的心态,正如帕科今天早上向你们介绍的那样,现在我有几双图基 swag 袜子可以送给我的朋友。比尔·克里夫兰和贝尔实验室的许多其他统计学家确实生活在当时的谷歌和脸书时代。他们是政府容忍的垄断企业。他们有所有的书呆子,所有的计算机,以及所有关于你们所有人一直在互相说什么的数据。我们学到了很多关于如何利用数据耗尽的经验——这是一个常见的短语,Pete 暗示了一个产品产生大量有用数据的方式——他们是对的。他们拥有这个国家所有的电信,这意味着大量的其他数据,但这是另一个话题。总之。贝尔实验室基本上是当时的“数据科学”。2001 年,比尔·克利夫兰写了一篇文章说,“你做错了。”当然,他与之交谈的人不是业内的其他人。他在与学者交谈时,回到了 Paco 之前的观点,即数据科学实际上是由行业发明的思维模式。这是几篇类似文章中的一篇,但那是另一篇了。
我们还试图帮助我们的高管理解可互换使用的单词之间的区别。人们交替使用 AI、ML 和“深度”这三个词。我们试图以不同的方式使用它们。没有 ML 当然也可以有 AI 吧?如果你写一个像伊莱扎一样的聊天机器人,这里有很多人工智能。“艾”是志向。我想做一个模仿真实智能的东西。但这不一定是要从数据中学习的东西。如果你对这种历史感兴趣,并且希望 Paco 激起你对其中一些历史的兴趣,我鼓励你看看其他的基础文献,比如 Herb Simon 的这篇伟大的文章。赫伯·西蒙在 1983 年写了这篇文章,他说,“是谁在阻碍我的人工智能,并把他们的 ML 放在我的人工智能里?”赫伯·西蒙当然不是傻瓜。他是少数几个获得诺贝尔奖和图灵奖的人之一,他的想法是,“你们所有人都很懒,你们应该给它编程。不要试图让计算机为你编程。”任何人。AI 和 ML 不一定一样。AI 是一种渴望,ML 是一种试图让你得到一些“我”的方法。
让我们回到数据科学。现在,我已经告诉了你一些我对数据科学的看法,以及我们在纽约时报、对数据科学的看法,你可能想知道这些与纽约时报有什么关系?这是一个合理的问题,尤其是当你想到《纽约时报》时,你会想到这个问题。这是一张纽约时报在 1851 年生日的照片,在它生命的绝大部分时间里,这就是用户与纽约时报互动的体验。你可能想知道你会把一个数据科学小组放在纽约时报的什么地方。
为了向你解释我们小组的位置,我必须给你看一下《纽约时报》的组织结构图。这是《T2》和《纽约时报》的组织结构图。
教堂。教会是拥有并捍卫新闻业的人。国家就是一切。
我在州政府。
我想说明的是,我领导的团队并不制作那些令人敬畏的信息图。那些人很棒。我们是朋友,我们是兄弟。道具。不是我的人。我们不做数据新闻。我们咨询记者,当我们能帮上忙的时候,我们尽力帮忙,但是那些人有截止日期,我已经向 NeurIPS 和其他公司提交了论文。我这辈子已经有够多的截止日期了。我不想写新闻。相反,我们在做你看不到的事情。
我们正在努力帮助企业在经济上变得强大。我们在状态上是稳固的,特别是,我们在一个叫做数据的子群中。当我出现的时候,我正在向 BI 的负责人汇报,他向 CTO 汇报,CTO 向 CIO 汇报,CIO 向数字产品的 EVP 汇报,EVP 向 CEO 汇报。在这一点上,数据是一个直接向 CEO 报告的功能。我在纽约时报工作的五年里...六、五年半,数据变得更接*一等公民,事实上向首席执行官报告。
数据科学小组的部分目标是对整个教会和国家都有用,因为数据尤其可以对编辑、广告人和各种不同的项目有用。我将向你们展示一些我们将数据科学付诸实践的项目示例。该组织的口号是“开发和部署机器学习解决方案,以解决新闻编辑室和业务问题。”我的意思是,除了在 scikit-learn 中找到的方法之外,您可能需要稍微扩展一下机器学习方法。足够深入地了解机器学习是有用的,以至于你知道如何超越 scikit 中的内容,并且你可能会部署它。希望你能部署它,对吧?
我们时不时会制作一些以谷歌幻灯片结尾的东西,但我们的目标是制作一些可以托管的工作 API,或者 GUI,或者一些人们可以投入工作的工作代码。这就是我在与团队外的人交谈时对标语的想法。当我与团队之外的人交谈时,我也会尝试解释我的团队做什么,以及更大的数据分析师团队做什么。我提出的一种方式是,“你在寻找建立一个预测模型吗?还是一个规定性的模型?还是描述性的模型?”今天我将向你们展示的不同问题...我用不同的方式思考。我发现,当我与团队以外的人交谈时,一个有用的框架是,来自产品、营销或编辑部的人,“你在寻找描述吗?预测在没有治疗的情况下会发生什么?或者你是在找我帮你决定什么是最佳治疗,以获得你想要的结果?”在我的团队里我说。“实际上,这些是无监督学习、监督学习和强化学习,但不要告诉团队以外的任何人,因为那样会让他们的眼睛变得呆滞,会认为我们在说某种星际语言。”但这是人们可以理解的。
思考这些问题的另一种方式是在某种功能、营销活动或其他东西的生命周期中。有时人们会找到我,他们会给我一个数据集,他们说,“给我找纳斯卡妈妈或其他细分市场。”我会说,“好吧。你真的是在让我向你描述这个数据集,但你为什么想找到纳斯卡妈妈们呢?”“嗯,我真的很想知道哪些会流失,哪些会订阅。”“好吧,那你真的不想要描述。你真的想要一个预言。你真的很想知道这些人中哪一个会成为订户。”他们说,“嗯,不。我想知道我应该给哪些人这个提议,我应该给哪些人显示蓝色按钮。”我说,“好吧。你真正想要的是一个规定性的模型。你真的想...你真的已经知道你想采取什么行动,你想让我帮你找出最佳治疗方案,而不是在没有治疗的情况下会发生什么。”让人们经历和思考这些事情通常与商业伙伴对他们真正想做的事情考虑得有多深有关。
当然,这看起来很像科学。
如果你在科学上花些时间,你会知道同样的规则也适用,那就是你建造一些东西,你建造一个预测,然后你把它放到野外。它不起作用,然后这有助于你重新理解你对数据的心理模型出了什么问题,或者你对人的心理模型出了什么问题。很好。描述的例子有哪些?让我给你们看一些问题的例子,在这些问题中,我们已经能够建立对有用数据的描述。
一个是这个叫做 Readerscope 的工作 GUI。Readerscope 是一个告诉你谁在哪里读了什么的工具。“什么”是一个主题模型。“谁”涉及第三方数据,声称此人可能是决策者或纳斯卡妈妈之类的人。“哪里”是地理定位。对我们来说,你知道,这开始就像一个科学项目,有一些花哨的主题建模,然后我们把它展示给我们在广告业的朋友,他们说,“太棒了。我们可以将其货币化。”突然间,我们有了两个项目经理,两个前端开发人员和一个后端开发人员,这就变成了一件美好的事情,看起来不再像一个科学项目。相反,我们把它展示给其他公司的营销部门的人看,这些人正在考虑为《纽约时报》的像素付费,他们会问,“你的读者是谁,他们到底在看什么?”我们说,“我们可以展示给你看。
这里有一个工具可以帮助你了解谁是人,他们过度索引的主题是什么。您可以将鼠标悬停在这些不同的主题上,查看与这些主题相关的单词。“这有助于人们了解谁是我们的读者。同样,举例来说,这只是一种描述,而不是对将要发生的事情的预测。
然后,我们可以深入研究,并指出哪些文章对该组或该主题进行了过度索引。我们看到你可以通过“谁”、“什么”或“在哪里”来理解人们。好吧。这是一个描述工具的例子。
预测工具的一个例子是什么?嗯,如果你使用任何数字订阅服务,你能想象的第一件事就是建立一个模型,预测你的哪些用户将成为订阅者,哪些订阅者将取消订阅。事实上,我的第一天——我结束了在纽约时报的休假——我在那里的第一天...我仍然保留着那天下午 3:00 发给我当时老板的电子邮件,邮件中说,“我们真的需要一个模型来预测我们的哪个订户将会取消,”就像 table stakes 需要一个模型来预测哪个订户将会取消一样。当然,如果你得到的东西有很高的预测能力,那很好。作为一名数据科学家,你可以晚上睡觉,你知道你不是在构建一个随机数生成器,但是产品部的人,他们不想知道你可以预测谁会有风险。他们想知道什么是危险的行为。当然,我们努力建立不仅可预测而且可解释的模型。
向上帝发誓,我今天在 Paco 演讲之前有这张幻灯片,但是这是 Leo Breiman 提出的一个很好的观点。如果你不知道 Leo Breiman,他已经不在了,但 Leo 是另一个异端统计学家的好例子,一个西海岸异端统计学家,他显示了他作为一个适当的数学概率学家的真诚,写了一本有趣的书,然后离开了在加州大学洛杉矶分校的终身职位,在地球上行走了一段时间,为各种客户做咨询,包括全新的 EPA 和其他一群试图找出不同外国潜艇之间的差异的人。在途中,他建造了随机森林和其他一些东西。在他和我们在一起的时间快结束时,他回到了伯克利的学术界,试图向他的统计学家同事解释,“你做错了。”这是他的一篇关于“你做错了”的论文,其中他谈到了他在机器学习社区中观察到的算法文化,以及在统计学中更传统的生成模型社区。他还知道,因为他在现实世界中工作过,所以有时人们想知道哪些客户有风险,有些人想知道他们的风险行为是什么。有时人们想要一个预测,有时他们想要一个解释。正如他在奥卡姆困境这一节中所说,“森林是 A+预测因子”。但他接着说,“他们的可解释性被评为 F 级。”早在最*对可解释的机器学习的兴趣复苏之前,Leo 和其他理解预测和人们想要的之间的*衡的人就在研究它。然而,在可解释性方面,决策树的得分是 A+。这是一个很好的例子,当客户希望预测,但也希望一些可解释性。
与许多数字媒体公司不同,纽约时报仍然以枯树的形式发布新闻。我们把枯树运送到不同的商店,必须有人决定明天早上应该把多少棵枯树送到 1066 号商店、137 号星巴克或者类似的地方。有很多方法可以做到这一点。假设,您可以在 20 世纪 90 年代的 AS400 机器上使用大约 10,000 行用 COBOL 编码的启发式代码。或者你可以用科学。我们现在用科学来做这件事。具体来说,我们有机器学习模型来推断不同商店的可能需求分布。一旦你知道了分布,这就是一个老问题,有时被称为报童问题。如果你参加第一年的研究生运筹学课程,在给定需求分布的情况下获得最有利可图的分配被称为报童问题。我们是一个报摊,所以我们有这个问题。此外,我们可以在仔细的 A/B 测试中使用科学,我们可以显示不同的商店,不同算法的分配,然后我可以向首席执行官科学地证明,通过使用科学,我每年节省了多少数据科学家的工资。在部署端,有人将一堆枯树扔进了商店,但在 BQ 之外,还有 scikit-learn。在上面的某个地方,Python 正在分配一定数量的文件,这些文件最终会以某人扔枯树的形式作为产品部署。很好。其他花式预测题。
《纽约时报》的另一个问题是...与枯树有关....把墨水涂在枯树上。当一名摄影记者拍下一张照片,然后发送给《纽约时报》的编辑时,这种事情每天都会发生数千次,其中一些照片最终会成为印刷品。文件是从相机、手机或其他内置在墙上的无电池监控设备中获取的。谁知道呢?然后,一个非常仔细和耐心的编辑必须检查并重新*衡所有的颜色直方图,所有的 CMYK,直到它完全达到正确的照片*衡,因为否则当它最终变成墨水并进入印刷机时,你只会得到一个黑色的方块。
在排气的过程中,我们有一个很棒的前后数据集,是一个耐心的编辑做的,现在我们基本上可以给他们一个温暖的开始。我们可以说,“看。这是照片...这是摄影记者相机里的文件。下面是我们对一个无限耐心的编辑如何去做的建议。”使用深度学习,我们甚至可以超越这一点,我们可以说,“这是 12 号编辑可能会重新*衡它,”而不是,“这是……”如果你有足够的数据集,你实际上可以学习不同的编辑器风格。做这件事的令人敬畏的天体物理学家最*已经离开并加入了谷歌的人工智能小组,对我来说很不幸,但他在使用谷歌的工具将这件事付诸实施方面做得很好。这很有效。这是一个视觉问题,所以它既适用于我们的 MSE,也适用于你的眼球。但是这里有另一个可行的方法。
我们建立的另一个项目是这个项目,这是一个夏季实习生项目,有一个本科生和我一起在哥伦比亚大学工作,然后她作为数据科学实习生和我一起工作,我们建立了这个项目,有点像一个科学项目,看看你能不能实际预测人们在阅读纽约时报的不同报道时会有什么感觉。最初的想法是,如果你不仅知道故事的部分,而且知道“这是一个严肃的故事,或者这是一个非常快乐的故事”之类的话,也许你可以建立一个更好的推荐引擎,或者也许你可以进行更复杂的分析起初我在想,“好吧,我用我拥有的数据,而不是我想要的数据来战斗,所以拥有这些数据是很好的,但我不会让编辑坐下来给故事贴标签,谁感觉快乐,悲伤或诸如此类的。”但后来我意识到我可以众包它。我们众包了它。我们实际上让人们给一堆故事贴上标签,并说他们感受到不同的感觉,然后我们使用一些深度学习模型,这些模型实际上可以预测人们会有什么样的感觉。对于这样一个故事,“雪儿从来不是一个超级粉丝,但她喜欢做雪儿,”你可以说,“嗯,这是,你知道的,‘受鼓舞的’、‘快乐的’、‘被逗乐的’和一堆其他的感觉。然后,这是一个有趣的暑期项目,你知道,就像一个实习生的暑期实习项目,她已经在 Chartbeat 有一份全职工作等着她,所以这只是一种玩笑,看看我们是否能做到这一点。然后我把它给我的广告朋友看,他们说,“太棒了。我们可以把它货币化。"
突然之间,我们有了一个完整的后端团队,他们将攻击我们的 API,然后将其转化为广告策略,现在你可以根据一篇文章给你的感觉来销售优质广告。其逻辑是,不要说,“我希望我的品牌出现在一篇文章的旁边,你知道,旅游,”它可能是你希望你的品牌出现在一篇文章的旁边,这篇文章让人感觉“有灵感”、“有希望”或“有冒险精神”或类似的东西。我们可以做到。
当我说“它起作用了,它起作用了,它起作用了”时,我的意思是它起作用了,因为我们在测试数据上得到了准确的预测,所以我晚上可以睡觉了。它的工作原理是人们为此付费。这实际上是一种商业行为,我们通过做这件事来赚取数据科学家的薪水。从某种意义上说,当广告客户更有策略地瞄准目标时,他们实际上看到了更多的提升。比如,你有一张与某种特殊好奇心相关的图片,你应该把它放在会让人感到“好奇”的文章旁边。
另一件很酷的事情是,它不涉及任何人。这里不涉及 PII。我没有做任何关于人的分析,并声称某人是纳斯卡妈妈或对天知道什么感兴趣的商业决策者。我只是在对文本进行分析。这是更好的语境相关性广告。它成功了,成功了,成功了。挺好玩的。我以前没有众包,但你会得到有趣的效果,就像人们真的会给你发电子邮件,告诉你他们对这个实验的感受。通过弄清楚,你知道,不同的感觉如何相互联系,有一些有趣的计算社会科学要做。另一件让我感到奇怪的事情是,你知道,在我在哥伦比亚的研究中,没有人在事后为这个项目制作了一个沥青*台,但是现在人们实际上...在《纽约时报》中,有一个团队制作了这个演示*台,展示事情实际上是如何运作的。上周我们刚刚在一个广告集团获得了一个奖项。我在哥伦比亚大学写的论文中,没有一篇是有人为我做了一个像这样的移动*台。
这是一个人们...我们也谈论我们如何运送东西,所以我会说一点我们如何运送东西。当我在 2013 年出现的时候...有痛苦。如果你想要数据,这意味着你要编写 Java MapReduce,你要坐在 S3 打一桶桶 JSON。然后,当事情变得真正文明时,你可以说蜂巢或猪。然后最终你可以和维护亚马逊红移星团的人战斗。然后有人决定,一个好主意是让我们购买自己的机器,并在这些机器上安装 Hadoop,这种方法会悄无声息地失败,并且需要您更接*金属并理解 Java 错误日志。在这一点上,所有的都是谷歌的问题,都在 GCP。小组中的开发人员,他们用 Python 编写;他们利用 sci kit-大量学习。我们有持续集成解决方案。为了可视化,我们没有构建自己的仪表板。我们用的是 Chartio。每个人都很满意。然后,最终调度的作业由 Airflow 和 Cloud Composer 管理。作为一个例子,在这个项目中,当我们预测感受时,我们也使用张量流...并充分利用 scikit-learn 作为我们的解决方案。这种感觉在某种意义上起作用,你可以去看看,然后说,“嗯,明尼苏达州的家庭故事让人们感到快乐;医生误诊的事情让人感到难过。”这是一套合理的解决方案。所有东西都从 GitHub 中管理的代码库通过 Docker 转移到 GCP,然后这就成了 GCP 的问题——谷歌的问题——就像我们不会在这个问题上超过谷歌一样。太好了。
这些是描述和预测的例子。处方的例子是什么?很多时候,人们并不想知道在没有治疗的情况下会发生什么。他们想知道最佳治疗方案是什么。一个很好的例子就是观众发展挑战。受众发展意味着当你是一名编辑并点击发布时,你与故事的关系并没有结束,因为仍然有机会确保人们了解故事。同样,在大约 150 年的时间里,用户体验是一棵摊开在桌子上的枯树,而现在人们正在体验手掌中的新闻。关于我们如何在社交渠道上推广这些东西,有一些策略需要考虑。我们建立了一些奇特的机器学习,根据你是否在不同的社交渠道上推广,来预测不同的参与度水*——对于不同的参与度定义。这很好,但是我怎么把它交到编辑手里呢?好吧,结果是编辑器不会启动 Python。我们花了一段时间思考我们可以构建什么样的 web 应用程序,但是根据以前的经验,尽管我们在 Flask 中拥有出色的开发技能,编辑们不会停止他们正在做的事情,并打开一个新的 web 应用程序。
然而,在 2014 年,2015 年编辑们爱上了 Slack。Slack 的 Josh [Willis]昨天向你介绍了 Slack。然后我们这些除了命令行之外不特别擅长界面的人就可以了,因为我们只需要考虑如何让我们的机器学习可读,也就是说易读。编辑可以和这个机器人互动。软件工程师变成了一个产品人,来到新闻室,看着他们做他们做的事情,做所有这类的产品研究,然后建造这个人们可以与之互动的机器人。你可以问它一些问题,比如“我应该在脸书上发布什么?”或者你可以让它打断你,说,“说真的,你应该把这个贴在脸书上。”
另一个说明性问题的例子是对于有个性化的部分内容,我们如何做到这一点?嗯,我们可能不希望我们的编辑为每一个选举报道做决定,例如,这个选举报道只对俄亥俄州有兴趣,还是对俄亥俄州和阿拉巴马州都有兴趣?我们宁愿放手让数据...我们为一小部分内容构建了一个上下文相关的 bandit 解决方案:被编辑认为与选举相关的内容;内容将被放入一个受控的小部件,就像一个选举箱,然后我们可以放手,让上下文强盗。出于时间的考虑,我不打算教你语境强盗。这就像做 A/B 测试,只不过之后你再也不用开会了。如此语境化...就像刚刚想到的土匪一样,多武装的土匪就是会议杀手。不要在会后开会说,“哦,我喜欢 B,但另一个人喜欢 C,然后 CEO 喜欢选项 D,”你只需放手让强盗去做,你永远不需要再开会,因为代码会动态地为你感兴趣的 KPI 赢得胜利。
做土匪有很多种方法。出于时间的考虑,我不会告诉你太多,除了我们最喜欢的是最古老的。最古老的是 1933 年的一项技术,这非常有趣,当时一群人在为他们最新的 PAC 界限和算法捶胸顿足,然后获胜的是 1933 年的东西。顺便说一下,这是雅虎的一些研究人员在 2011 年写的一篇论文,他们将自己的花哨算法与 1933 年的算法和 1933 年的算法进行了比较,这非常酷。如果你们中的一些人是学者,你的论文没有被引用,不要担心。这是这篇发表于 1933 年的论文的引用次数。直到 2011 年才有人注意到这一点。突然就像“砰!这才是 biddy!”只是,你只需要等 80 年然后你的论文就会被大量引用。是的,现在你可以把这个东西作为一种服务。我不会告诉你我们为了扩展它而做的奇特的数学。相反,我只会说一点点,试图呼应 Paco 和 Pete 所说的关于我们已经了解到的关于完成事情的事情。我们学到的要把事情做好的主要东西是,如果你想改变文化,你需要按照“人”、“想法”和“事情”的顺序来做,这是从军队里学来的。这是美国空军飞行员约翰·伯伊德的一句话,我们真的...我们无法完成任何事情,除非我们从合适的人那里买进,他们愿意让我们进行试验和尝试。我们所有人都对各种各样的“事情”感到非常兴奋。
我在皮特今天下午的演讲之前放了这个,但是皮特提到了莫妮卡·罗加蒂的需求层次理论。你知道,当你出现时,你是第一个数据科学家,你可以通过做一些花哨的人工智能和 ML 来进行一些挑衅,但如果你没有正确的数据基础设施,那么就很难真正影响流程。一开始,五年前,我们在做一些挑衅的事情,构建我们自己的 Flask 应用程序,但实际上整合到其他人的流程中需要公司真正提升其所有数据基础架构,他们已经做到了。
出于时间的考虑,我不会谈论太多,除了回到我之前关于脸书的笑话的另一件事是,在学术界,我们倾向于将所有这些工作混为一谈,数据治理,数据分析师,数据科学家,数据工程师,但是纽约时报看到了不同的头衔,不同的群体。我们努力与各方合作,包括 Paco 提到的数据治理。我们有一个非常好的数据治理团队。我们这样做的一部分是从各种各样的智力培训中雇佣人员。目前团队中的人来自物理、金融、应用数学、双 E、cog sci,这在众包和其他方面非常有用,我们还在招聘。我们期待着从更加多样化的工作申请中招聘人才。就这样,我有两秒钟的时间来提问。
谢谢您们。
【编者按:为了可读性,本文经过了编辑。]
Voicebox 的众包语言理解
原文:https://www.dominodatalab.com/blog/data-science-at-voicebox
我们最*采访了 Voicebox 的数据科学和众包总监 Daniela Braga 博士。
丹妮拉,谢谢你的面试。让我们从谈论你的背景开始我们在一起的时间。
我的背景是言语科学。我在这个地区工作了十五年。我在葡萄牙和西班牙的学术界呆了六年。在过去的九年里,我一直在这个行业工作,包括在葡萄牙、北京和华盛顿州雷德蒙的微软演讲小组工作了七年。最*,我一直专注于数据科学,在微软集团和最*的 Voicebox Technologies 将众包引入了演讲。这些努力为两家公司节省了* 50%-80%的成本。我一直致力于在数据驱动的技术世界中构建高质量的控制工作流程和可扩展的吞吐量,这需要无止境的数据供应。
你是如何对语音识别感兴趣的,更具体地说,是对自然语言理解感兴趣的?
这是一个有趣的故事,因为它是偶然发生的。当我获得语言学学士学位后,我在葡萄牙的大学里看到了一份招聘启事。Porto 的工程学院正在寻找一位语言学家来帮助他们开发欧洲葡萄牙语的首个文本到语音和自动语音识别系统。这发生在 2000 年 7 月中旬。求职截止日期已过,大学里空无一人。我的一个朋友鼓励我无论如何都要打这个号码,当场就打。我以为这毫无意义,但我做到了。一个低沉的男声拿起电话,原来还没人申请。所以我得到了这份工作。我采访了波尔图大学语音实验室的负责人,他告诉我,“在这个新领域(语音技术),聘请语言学家与工程师合作已经成为一种新趋势。整个欧洲都在发生。我们还不知道语言学家如何以及为什么有用,但如果你能帮助我们搞清楚,你就有这份工作。”我在这里,仍然在语音技术领域工作。我想我找到了答案。
你有非常丰富的学术和专业背景,能分享一些职业亮点吗?
让我看看。我相信第一个是我博士论文的主题。这是在数据驱动技术完全成为语音科学主流之前。即使在今天,文本到语音(TTS)技术也有许多基于规则的技术。我是第一个为文本到语音转换开发完全基于规则的前端的人,并成功地将其应用于欧洲葡萄牙语、巴西葡萄牙语和加利西亚语,加利西亚语是西班牙使用的一种语言,与葡萄牙语有着共同的过去。这是非常独特的,考虑到在那之前,已经用数据驱动技术进行了几次尝试,但没有一次取得相同的结果。
第二个是能够说服微软的语音团队来处理 TTS 系统的开发和葡萄牙大部分欧洲语言的重要语言组件。在两年内,我的团队能够向他们发布 Project Exchange 14(包含 26 种语言)。
最新的亮点是能够说服 Voicebox Technologies,与机器学习相关的众包是扩大语音技术产品规模的最佳方式,可以更快、更具成本效益地覆盖全球,同时保持质量。
你在 Voicebox 做什么工作?
我已经重组了 Voicebox 的数据团队。我刚来的时候,这家公司曾经依赖客户提供数据。我改变了公司在数据方面的能力,使我们能够通过网络服务和 API 向客户公开数据服务,以及我们的对话理解产品。在过去的两年里,我一直在发展一个由 15 人组成的团队,服务于公司对多语言数据收集、数据清理/处理/标记、机器学习、数据评估、摄取、存储、数据库、安全、报告和分析的需求。
你发现的最令人惊讶的见解或发展是什么?
出于基于规则的思维模式(因为我的语言学背景),我目睹的最令人惊讶的发展是语音技术的科学范式从基于规则到数据驱动技术的转变。现在这说得通了,但它并不总是显而易见的。我很快适应了从基于规则到众包的转变,这一切都是为了服务于数据驱动技术日益增长的需求。
数据科学和语音识别的未来会是什么样子?众包如何融入这一切?
它不再仅仅是语音识别;是语言理解。语音识别在语音层面处理命令和控制,而语言理解解释用户的意图,并以有意义的结果做出响应。语音技术需要大量的数据。虽然我们可以说自然语言理解在美国英语中相对成熟,但对于世界上其余的 7000 种口语来说,情况并非如此。
众包为语音技术使用的机器学习技术带来了必要的人类判断
国际上对支持语音的技术的市场需求正在增长。当前的数据驱动技术需要大量的数据来训练和测试语音识别和自然语言理解模块。数据永远不会完整,因为它需要持续更新的企业、兴趣点、名人、书籍和音乐发行等列表。众包为语音技术使用的机器学习技术带来了必要的人类判断。例如,为了训练一个声学模型(这是一个语音识别组件),您需要至少 1000 个扬声器,每个扬声器讲一个小时。这些发言者需要在性别、年龄和地区方面保持*衡。你可以训练一个系统来识别不同的方言和社会学家。这就是众包的用武之地,在这种类型的变化中,仍然没有办法取代人类。
今年你在做什么个人/专业项目,为什么/如何让你感兴趣?
自动化我们的众包工作流程,通过报告和分析功能以及数据可发现性创建数据可视化。这是一项新的服务,允许内部和外部客户浏览和查询我们所有不同的数据库和数据类型,从声音到文本数据。
哪些出版物、网站、博客、会议和/或书籍对你的工作有帮助?
我关注并参加传统的语音技术活动,在这些活动中,您可以看到该领域的最新和最大的发展(如 Interspeech、ICASSP、ACL、LREC 等会议)。我阅读了谷歌研究博客(T0)和微软研究博客(T1),Crowdsourcing.org 新闻,以及《企业家》、《商业内幕》和 TechCrunch 等出版物。我也一直在关注数据科学领域正在发生的事情,但我的注意力仍然非常分散。
你发现了哪些最有帮助的机器学习方法?你认为最有帮助的是什么?你最喜欢使用的工具/应用程序是什么?
目前,深度神经网络是语音技术的 ML 技术的圣杯。如果你将 DNNs 应用于你的主题,你可以在任何地方得到一篇被接受的论文。在我们的领域中,Word2vec 和其他技术也显示出非常有趣。
对数据科学/机器学习的学生或从业者有什么忠告吗?
在大数据世界中,开源数据正变得越来越流行,构建机器学习包并将其作为服务提供似乎是将你的技能集货币化的最佳方式之一。
丹妮拉,非常感谢你抽出时间!我们很高兴了解你和你在 Voicebox 所做的革命性工作。
在 Linkedin 上关注丹妮拉,并访问【语音信箱】(丹妮拉·布拉加语音信箱)。
AWS 上的数据科学:优势和常见陷阱
两年多前,我们写了许多企业对云的错误恐惧。事情变化得多快啊!如今,我们合作的每一家企业要么是在使用云技术的 T2,要么正在迁移到那里。我们与一些公司合作,这些公司仅在两年前还坚持认为他们“不能使用云”,现在正在采取战略举措,“到 2017 年底在 AWS 中开展实际工作。”我们看到这种情况发生在各个行业,包括金融、保险、制药、零售,甚至政府。
AWS 对于数据科学工作负载尤其具有吸引力,这些工作负载受益于针对计算密集型实验的弹性计算的爆发,并且通常受益于 GPU 等专用硬件。例如,对冲基金和银行公司可以通过在机器上分散工作来更快地回溯测试投资策略。制药研究团队可以运行更快的蒙特卡罗模拟来加速药物设计。试验驾驶员遥测模型或图像识别的保险公司可以更容易地从深度学习技术中受益。
为了实现云在数据科学方面的全部潜力,组织必须解决一系列外围用例,而不仅仅是提供对基础架构的访问。因为我们从第一天起就用一流的 AWS 集成构建了 Domino ,它为云中的数据科学工作流提供了一个集成的、完整的解决方案。下面,我们介绍了过去两年观察数据科学团队向云迁移时遇到的一些常见问题和陷阱。
DevOps 自动化
您不希望您的数据科学家在开发运维任务上花费时间,比如创建 ami、定义安全组和创建 EC2 实例。数据科学工作负载受益于 Jupyter 或 RStudio 等工具中用于探索性分析的大型机器,以及支持团队突发需求的弹性可扩展性,或数据科学实验的并行执行,这些实验通常是计算密集型的。
成本控制、资源监控和报告
数据科学工作负载通常受益于价格昂贵的高端硬件。当数据科学家能够更多地访问可扩展计算时,您如何降低成本失控的风险、强制实施限制以及在多个小组或团队之间进行分配?
环境管理
数据科学家需要敏捷性来试验新的开源工具和软件包,这些工具和软件包的发展速度比以往任何时候都快。系统管理员必须确保环境的稳定性和安全性。如何在紧张中*衡这两点?
绘图处理器
神经网络和其他有效的数据科学技术受益于 GPU 加速,但配置和利用 GPU 仍然是说起来容易做起来难。如何为您的数据科学家提供对 GPU 的高效访问,而不使他们陷入 DevOps 配置任务中?
安全性
AWS 在其环境中提供了世界一流的安全性,但是您仍然必须选择如何为运行在 AWS 上的应用程序配置安全性。当您的数据科学家转移可能代表您最有价值的知识产权的逻辑(源代码)和数据集时,这些选择可以在降低风险方面发挥重要作用。
了解更多信息
Domino 本机运行在 AWS 中,可以安装在您的 VPC 中,或者在我们的托管环境中使用。包括孟山都、Mashable、Eventbrite、DBRS 在内的公司,以及对冲基金、银行和保险公司都在 AWS 中使用 Domino 作为其数据科学家的力量倍增器。如果你想学习如何操作,请告诉我们。
银行业中的数据科学:过去、现在和未来
这是德克萨斯州奥斯汀数据科学论坛上众多精彩会议之一。不要错过 2016 年 9 月 14 日在洛杉矶数据科学弹出式窗口向世界领先的数据科学家学习的下一次机会。查看演讲者阵容并立即获取门票。
利用 Docker 实现数据科学敏捷性
这篇文章描述了 Domino 如何使用 Docker 为数据科学家和研究人员解决许多相互关联的问题,这些问题与环境敏捷性和工作的可重复性有关。
背景
在 Domino,我们非常依赖 Docker。但是,虽然大多数关于 Docker 的讨论都集中在工程师如何使用 Docker 来发布他们的软件,但我们在我们的产品本身中使用 Docker,以允许数据科学家轻松控制什么样的环境(包、库等)。)工作时使用。换句话说,我们将 Docker 公开为一个面向用户的特性(除了在内部将其用作 DevOps 工具之外)。
对于那些不熟悉 Domino 的人来说,快速了解一下背景:这是一个*台,数据科学家在这里运行他们的代码(例如 R、Python 等),跟踪他们的实验,分享他们的工作并部署模型。集中式基础架构和知识管理使数据科学家更具生产力,并支持更具可重复性的协作式数据科学。
环境管理问题
研究人员和数据科学家的一个共同难题是“环境管理”我用这个术语来描述与安装软件和软件包、配置设置、个人或团队进行分析工作相关的一系列问题。我们最常看到的一些问题是:
- 研究人员在安装新的软件包时经常受到中央 IT 资源的限制。如果这个过程太慢或太费时,组织就不能停留在现代技术和工具的前沿。开源生态系统比以往任何时候都发展迅速,组织需要测试和采用新技术和方法的灵活性。
- 撇开新的包不谈,缓慢或官僚的过程会延迟对标准工具和包(新版本的 R、Python 等)的更新,导致关键组件过时多年。
- 对于不同的人,代码的工作方式是不同的(或者有时根本不起作用),因为他们的环境是不同的(例如,不同版本的包)。
- 新员工或团队成员难以入职,因为设置他们的环境需要很长时间。
- 旧的项目变得不可用,旧的结果变得不可能重现,因为自代码编写以来,环境已经发生了变化。
- 升级(例如,更改 R 或 Python 的底层版本,或者升级特定的包)是有风险的,因为很难知道什么会停止工作。
通常,公司在环境管理方面遵循两种途径之一。其中的每一个都解决了上面的一些问题,但是加剧了其他问题:
- 公司让用户控制他们自己的环境。这给用户带来了灵活性和敏捷性,但不可避免地会导致不一致的环境。通常,这意味着工作被孤立在研究人员的机器上,使得共享和协作更加困难,也限制了用户的计算资源。
- 公司锁定中央环境,例如大型共享“研究服务器”。它控制这些机器。用户可以访问一致的环境,但是这些环境很难改变。
基于 Docker 构建的计算环境
Domino 定义了计算环境的一级概念:一个包含一组软件和配置文件的环境,当分析代码运行时,这些文件应该在适当的位置。这是强大的,原因有几个:
- 环境附加到您的代码所在的项目。因此,如果有人在 12 个月后重访一个项目,或者一个新员工加入一个项目,您可以确保代码将按预期工作,不管您的计算机上安装了什么。
- 研究人员可以改变环境,升级或安装新的图书馆,而不需要通过它,关键是,不影响任何其他人的环境。
- 与研究人员操纵他们自己的机器的设计不同,Domino 的环境是集中存储和管理的。研究人员可以很容易地共享环境,并且环境可以一次为每个人升级。
实际上,计算环境是基于 Docker 映像构建的。当研究人员运行代码时,他们的代码是在一个从该图像开始的容器中运行的。
使用 Docker 是特别强大的,因为它让我们保存图像的过去版本,这样我们就可以记录用于生成任何过去结果的确切环境。
新功能
让我们来看看这种设计支持的一些工作流。
使用不同版本的常用工具
假设您的一些用户使用 Python 3,一些用户使用 Python 2。或者有些使用标准 R 分布,有些使用 R 的 Revolution Analytics 分布。您可以为每种配置创建环境,数据科学家可以选择他们工作时想要使用的环境:
创建尽可能多的环境,并管理它们的共享和许可方式,以便在您的组织内创建各种标准环境选择。
升级重要的库
在幕后,Domino 允许您通过运行 Docker 命令来指定环境的内容。要了解这一点,假设默认环境是 R 3.2,而您想升级 R 3.3。因为我们很谨慎,假设我们想在我们自己的项目中测试这种变化,以验证它在向所有人推广之前是否正常工作。
我们可以复制“默认”环境,并在其上添加我们想要运行的任何 Docker 命令。
现在,我们只需更改我们的项目以使用这个新环境,并重新运行我们的代码。
我有一个过去运行过的回归测试脚本,“test。r”。一旦我更改并选择了新环境,我就可以重新运行该脚本。至关重要的是,我可以重新运行上次运行的确切版本,因此我可以肯定,我在结果中看到的任何差异都将完全是由于 R 升级,而不是我的代码中的更改。
我们甚至可以比较在一个环境和另一个环境中运行的结果,以确保没有任何变化。
要深入了解如何比较 Domino 中不同实验的结果,请查看我们过去关于数据科学的“单元测试”和模型调优和实验的帖子。
复制过去的作品
除了给数据科学家带来更多的灵活性,Domino 为代码的每次执行保留了一个不可变的记录,包括它在哪个环境中运行的信息。因此,对于任何过去的结果,很容易找到并恢复用于重现任何过去结果的确切软件集。
我们可以更进一步。除了在改变环境后比较实验结果之外,还可以配置 Domino 在运行代码时保存环境状态的文本快照。这让您可以使用我们的区分功能来检查在同一个实验的两次不同运行之间哪些包或软件可能发生了变化。
在这个例子中,我们有一个在不同时间运行的 python 脚本,我们感兴趣的是识别底层环境中的任何变化。比较也能告诉我们这一点。
结论
Docker 是一项非常强大的技术。除了为 DevOps 团队启用新的工作流之外,它还可以优雅地解决数据科学家日常面临的许多问题。以 Docker 为基础,Domino 的“计算环境”功能使研究人员能够灵活地轻松试验新的包,而不会破坏同事环境的稳定性。与此同时,计算环境使研究人员能够重现结果,并审核已安装软件和软件包的变更。
企业中的数据科学:来自易贝、Stitch Fix、Teleon Health 和 RISELab 的见解
原文:https://www.dominodatalab.com/blog/data-science-enterprise
最*,我们与几位数据科学领导者就企业数据科学的组织设计和工具举行了一次小组讨论。观看完整视频:
面向鸟类(和所有人)的数据科学
原文:https://www.dominodatalab.com/blog/data-science-for-the-birds-and-everyone
奥杜邦的数据科学工作是如何产生影响的
编者按:这是一系列文章的一部分,分享公司在成为模型驱动的道路上的最佳实践。一些文章将包含关于他们使用 Domino 的信息。
我是一名训练有素的科学家。我有生态学博士,保护生物学硕士,生物学本科。今天,我是一个已经有 100 多年历史的非营利组织的临时首席科学家:国家奥杜邦协会。
你可能听说过我们。我们关注整个美洲的鸟类保护。为什么是鸟?生态学家早就观察到,鸟类繁衍的地方,人类也繁衍生息。因此,如果我们能保护鸟类,我们就能更好地保护地球。
在过去的六年里,我们的数据科学实践显著增长。我们希望了解气候变化对鸟类数量的影响,并为我们的保护和宣传工作提供信息。像大多数组织一样,我们经历了通过使用移动电话和网络服务捕获的数据量的急剧增加。这些技术扩展了我们所谓的“社区科学”,志愿者可以分享观察和其他相关数据。我们构建了 180,000 个模型,分析了来自科学家和社区成员的超过 1.4 亿次观察,并预测了不同变暖情景对 604 种鸟类的影响。然后我们建立了鸟类和气候可视化工具,这是一个基于邮政编码的在线工具,任何人都可以看到气候变化对他们社区的影响。
从表面上看,在 Audubon 建立一个数据科学团队似乎与在盈利世界建立一个团队不同。许多人可能认为在这里扩展数据科学会很容易,因为毕竟我们的组织是建立在科学和数据之上的。但在现实中,我们面临着许多相同的文化和组织挑战,各行各业的公司在跨组织扩展工作时都会面临这些挑战。奥杜邦有“业务单元”,专注于不同的优先事项,如海岸、耕地或气候。此外,还有州政府的实地办公室,致力于解决更多的地方性保护问题。正如我提到的,我们是一个有 100 多年历史的科学组织。已经有很多伟大的量化工作在进行。我们必须展示机器学习模型将如何为我们已经在做的事情增加价值。此外,我们不得不从一个孤立运作的科学团队转变为一个与业务部门整合以解决其问题的团队。
为了打破孤岛、简化流程和留住人才,我们的科学团队像数据科学卓越中心(CoE)一样运营。在这篇博客中,我将讨论我们建立一个强大的科学团队的旅程,以及我们采取的步骤,以确保我们拥有正确的技能、流程和技术,将模型驱动的方法纳入鸟类保护工作。
我们从哪里开始?
在最*的数据科学弹出窗口中,Domino 首席数据科学家 Josh Poduska 和来自 Slalom Consulting 的代表讨论了定义 CoE 的能力。我们的科学团队今天解决了他们描述的许多相同的元素。
我们正处于工作的中游,但我们的努力已经在产出和最终用户采用方面产生了重大影响。
以下是我们创建科学团队时采取的五个步骤,旨在建立一个功能卓越的中心:
- 围绕我们的“客户”调整我们的工作,使所有数据科学工作与组织目标保持一致。我们花了大量时间会见奥杜邦保护战略的领导者,讨论每个小组的优先事项,并展示了与我们工作的明确联系。这是关键的第一步,涉及大量的文化变革和交流。我们建立的牢固关系和取得的成功带来了更多的机会。例如,我们为我们的一个州办公室开发了一个模型,这是第一个州办公室的数据科学项目。项目成功的消息不胫而走,其他国家领导人希望与我们合作的机会开始像滚雪球一样越来越多。
- 阐明了我们可以提供的能力。我们还确定了哪些类型的数据科学将为组织提供最大的价值。因此,我们现在关注三个关键领域:
-
预测模型帮助团队确定可能影响鸟类的问题或威胁,预测未来的挑战,并确定成功缓解这些威胁的政策。
-
显示鸟类数量下降和增加的趋势,以便团队可以衡量他们的计划是否成功。
-
跨数据进行空间优化,帮助我们的组织找到开展保护工作的最佳地点。
-
制定核心价值观指导人才管理。我们的数据科学团队已经从 2 人发展到 16 人。为了帮助吸引和留住顶尖人才,并确保我们在扩大工作规模时拥有技能,我们制定了核心价值观来指导我们的团队。当然,我们寻找强大的数据科学技能来创造出版质量的科学。但除此之外,我们的价值观强调软技能,如谦逊、同理心和耐心,这对于赢得最终用户对我们工作的认可至关重要。我们还在我们的核心价值观中加入了成长思维,以确保作为一个团队,我们不断学习和应用新技能。拥有增长思维有助于我们进行更多创新,并提高我们的数据科学家的工作满意度。我们有很高的保留率,我相信给人们一个在他们的岗位上学习和成长的机会是关键。* 投资技术基础设施、工具和数据合作伙伴关系,促进大规模数据科学。例如,我们评估了不同的数据集,这些数据集将有助于确定对保护最重要的地方。我们现在从一些收集观鸟信息的组织中获取数据,比如 eBird、iNaturalist 和 Movebank。我们仍然有数据缺陷,但我们有程序来帮助我们确定新的数据源来填补空白。我们还希望确保我们的数据科学团队尽可能高效。这将我们带到了 Domino 数据科学*台,它允许我们更快地协作、迭代和探索不同的参数设置。我们为 604 种物种中的每一种建立了 160 个机器学习模型,覆盖了两个不同的季节——冬季和夏季——在短短几个月内总共超过 18 万个模型。能够复制和利用结果对我们的产出产生了相当大的影响。最*,我们开始重新评估我们的技术基础设施。我们有很多 CSV 文件的数据和各种操作系统。数据仓库将允许我们更有效地向最终用户部署数据服务。* 确定成功指标以显示我们的影响力。在营利性组织中,Coe 通常会确定成本节约或收入增长的关键绩效指标(KPI ),以衡量其数据科学工作的成功与否。在这里,我们做同样的事情,但是我们谈论的不是成本和收入,而是栖息地。具体来说,我们保护了多少栖息地,拯救了多少鸟类?
数据告诉我们什么?
今天,气候变化是鸟类数量的最大威胁。通过我们的工作,我们已经能够展示在不同的变暖情景下,鸟类的活动范围会发生怎样的变化。如果一个物种现有的范围不再适合居住,它会扩展到一个新的区域吗?或者,它们会面临灭绝吗?最脆弱的物种是那些面临其现有分布范围严重丧失的物种,它们不太可能迁移到新的区域。预后不佳。根据我们关于鸟类和气候变化的最新报道,,如果气温上升 3 摄氏度,将*三分之二的北美鸟类将面临灭绝的危险。但随着我们*年来获得的深刻见解,我们现在也可以看到潜在政策变化的影响:立即采取积极行动,将全球气温上升控制在 1.5 摄氏度以内,可以提高 76%的濒危物种的机会。我们的数据科学工作将继续为这一对话提供有价值的见解,并帮助动员我们* 100 万会员和支持者采取行动。随着我们在 CoE 模式下建立我们的科学团队,我们相信我们作为一个组织的影响力将会增长。
欲了解更多信息
- 国家奥杜邦学会案例研究
- 新闻稿:新奥杜邦科学:由于气候变化,三分之二的北美鸟类濒临灭绝
- 鸟类和气候可视化器
- 奥杜邦杂志的气候问题
感官中的数据科学
原文:https://www.dominodatalab.com/blog/data-science-in-the-senses
By Paco Nathan, Managing Partner, Derwen, Inc. on May 10, 2019 in
本博客最初发布于 KDnuggets 这里。
今年 Rev 大会的晚间活动将是意义上的数据科学。那是在纽约,5 月 23 日星期四。
今天就注册 Rev 并使用此代码获得折扣: PACORev25 —参见本文末尾了解更多关于会议的详细信息。
感官中的数据科学活动将展示目前在人工智能艺术领域掀起波澜的惊人项目——博特尼克、福克·RNN、本·斯内尔、乔希·厄本·戴维斯等——利用数据和机器学习实现感官体验的项目。下面先睹为快:
Botnik 是一个由作家、艺术家和软件开发人员组成的社区,他们使用机器来创造有趣的东西。例如,在网上查看他们的画廊,比如由一个经过 70,000 多首现有乡村歌曲训练的模型生成的新鼻音曲调。或者深度学习生成的言情小说已经在超过 20,000 个丑角言情标题上进行了训练。谁能否认这样不可抗拒的罪恶快感,如助产士牧牛人或医生丈夫的男人,出于艾的礼貌?或者(我最喜欢的)这个超级有用的整理,把玛丽·*藤所有杂乱的剧集整理成一个浓缩的剧本:
现在,这无疑点燃了欢乐的火花。他们的作品是大数据、一些文本分析、概率和大量讽刺的结果,Botnik 将其作为现场表演,有时甚至是卡拉 ok 式的人工智能增强滑稽动作。在我们的感官中的数据科学活动中,他们将发表演讲来解释魔法并现场表演!
民谣 RNN ,总部位于伦敦金斯敦大学,利用深度学习从乐谱中学习凯尔特民谣音乐,然后生成新的乐谱供人演奏。查看他们的开源 GitHub repo 。O'Reilly AI London 2018 大会在圣詹姆斯苏塞克斯花园举行的激动人心的 AI 音乐:音乐制作的深度学习活动中展示了民谣 RNN。在感官数据科学上,民谣 RNN 将放映一段介绍他们作品的短片,此外他们还为活动的 DJ 提供了一份播放列表。他们还会有一个带耳机和显示器的展台来演示 https://folkrnn.org/软件,Rev 的与会者可以在那里创作他们自己的歌曲。
有传言说,博特尼克和民间 RNN 一直在合作的基础上介绍了通过 Rev 会议。一个用 AI 生成新的乐谱,另一个写歌词。我们渴望看到接下来会发生什么!
本·斯内尔 ,住在纽约,是一位研究计算的物质性和生态的人工智能艺术家。举一个有趣的例子,本训练他的电脑成为一名雕塑家:花几个月的时间筛选博物馆藏品,广泛研究大师作品,磨练技术,试图根据记忆重现它曾见过的每一件古典雕塑。机器学习应用程序被亲切地命名为 Dio(以希腊神狄俄尼索斯的名字命名),它已经将其研究转化为组件的视觉词汇,并从中构建更复杂的形状和表情。作为所有这些工作之后的顶点项目,本向迪奥提出了一个简单的挑战:“闭上你的眼睛,然后梦见一种新的形式,一些以前从未存在过的东西。”
“计算机无形处理能力的痕迹存在于它的身体形态和包含其思想和记忆的物质碎片中。”在我们的感官数据科学活动中,来看看 Ben 的展览,体验 Dio 的梦想成真的物质性,这是 AI 创作的第一批雕塑之一。
**
Josh 将介绍一个关于创建动画的简短演讲,并有一个以他的 GAN 生成的动画合成为特色的装置,在整个晚上循环播放。
声纹——上一次你在餐馆或酒吧时,你是否几乎听不到同桌其他人的声音?你一定要大喊大叫,只是为了互相交谈吗?是啊,我也是。我们都应该感谢臭名昭著的“顶级厨师”马雷欧·巴塔利在美国餐馆建立了震耳欲聋的趋势。
作为回应,SoundPrint 开始开发一款智能手机应用来测量和分析声音水*。他们建立了一个声纹“大使”网络(真的包括你的),悄悄收集世界各地餐馆、酒吧、咖啡馆和其他公共场所的分贝测量值——收集到一个声音估计的地理空间数据库中,“像 Yelp!,而是为了噪音。”他们的众包解决方案非常适合检查一个场所是否适合谈话,是否对听力健康安全,非常适合寻找一个更安静的地点进行约会或商务会议。
最*,SoundPrint 一直在扩展他们的数据库工作,以包括听力健康分析、办公室和医院环境分析,以确保符合噪音指南、预测评分、声学取证等。SoundPrint 将在 Data Science in the Senses 上展示,此外,他们还将为与会者提供一个展台,让他们了解如何使用该应用程序及其数据集。顺便说一句,SoundPrint 正在寻找数据科学团队的合作伙伴——那些对数据有兴趣的用例的人。在 Rev 抓住他们!
分析风味系统—美食图 AI 的制作者——利用机器学习为食品和饮料生产商创造服务,帮助他们为目标消费者人口统计数据建模、理解和优化风味/香气/质地。他们的创新量化了产品的风味特征及其原料成分。
在感官中的数据科学活动中,分析风味系统公司将设立一个展位,与会者可以使用一个应用程序根据他们的口味设置偏好,然后配制个性化的饮料。双份的!
Kineviz 利用其 GraphXR *台开发视觉分析软件和解决方案,用于执法、医疗研究和知识管理等领域。GraphXR 使用 Neo4j 在统一的动画上下文中分析链接、属性、时间序列和空间数据。在感官数据科学活动上,Kineviz 将展示他们对 权力的游戏 数据的分析和可视化。说真的,托蒙德·巨人贝恩会是莱安娜·莫尔蒙的父亲吗?# gameoftrones
我对 Rev 会议、我们的感官中的数据科学晚间活动(作为会议讲座后的社交活动)、我们的优秀演讲者阵容介绍数据科学领域的领导力以及企业团队可以相互学习的内容感到非常兴奋。此外,我们将邀请诺贝尔奖获得者 丹尼尔·卡内曼 作为我们的主题演讲,展示“直觉判断和选择心理学”——通过现代行为经济学和长期以来关于人类理性在决策中的假设角色的假设,详细探索机器学习。
今天注册 Rev 并使用此代码享受折扣: PACORev25 。
那里见!
Twitter Facebook Gmail Share**
Instacart 的数据科学:按需盈利
原文:https://www.dominodatalab.com/blog/data-science-instacart
在本次数据科学弹出式会议中,Instacart 数据科学副总裁 Jeremy Stanley 深入探讨了 Instacart 如何利用数据科学实现利润最大化。
数据科学采访:首席科学家 d stillery Claudia per lich
原文:https://www.dominodatalab.com/blog/data-science-interview-claudia-perlich-chief-scientist-dstillery
我们最*采访了 Dstillery 的首席科学家 Claudia Perlich。在加入 Dstillery 之前,她赢得了许多数据挖掘比赛,以及来自行业和学术界的多个奖项。
Claudia,请简单介绍一下你自己,以及你是如何对数据工作感兴趣的。
我在东德长大,这很有趣,因为那里根本没有广告。所以我直到 15 岁左右才看到自己的第一个广告。早期,我对数学非常感兴趣,并决定在德国学习几年计算机科学,之后我作为交换学生来到科罗拉多州的博尔德,在那里我上了第一门课程,即现在所知的数据科学。这门课是关于人工神经网络的,那时我就迷上了。我真的很喜欢看数据和故事中令人着迷的部分,试图对其进行建模。从那时起,我继续走这条路;我在德国完成了我的学位,最终回到了纽约市的商学院。我获得了信息系统的博士学位,但主要还是在追求我对机器学习、预测建模和数据挖掘的兴趣。
后来,我加入了沃森中心的 IBM 研究机构,该机构因制造沃森计算机而闻名,该计算机最*赢得了一场危险游戏。在那里,我是预测建模小组的一员,使用数据和预测建模处理各种事情,或者在内部为 IBM 工作,或者在外部为他们的客户工作,这些客户是通过咨询服务进来的,并且有非常具体的数据相关问题。我还花了很多时间参加数据挖掘比赛,并赢得了很多比赛:)。我一直喜欢接触非常不同的数据集,并挑战自己构建最佳解决方案。
我发现我可以传播我学到的一些东西,并帮助把我的发现带到医学和其他与生活相关的领域。
你是如何开始使用 Dstillery 的?
2010 年,Media6Degrees 找到了我,现在叫做 Dstillery ,一家数字广告领域的公司。他们通过我在 NYU 的学术顾问找到了我,他向我推荐了一些我在博士期间研究的用于广告定位的技术。他们邀请我加入他们的团队,从那以后我一直担任 Dstillery 的首席科学家。这是一个很好的场所,提醒我为什么喜欢在广告行业工作,这真的是尝试不同事情的最终机会,并找出什么在数据科学中行得通,什么行不通。我们拥有难以置信的数据访问权限,这既具有挑战性,也非常有益。我发现我可以传播我学到的一些东西,并帮助把我的发现带到医学和其他与生活相关的领域。
您记得使用的第一个数据集是什么?你用它做了什么?
我工作的第一个数据集,对我个人来说并不十分鼓舞人心,然而,从数学难题的角度来看,它非常鼓舞人心。这可能是在 1995 年左右,人工神经网络的全盛时期,现在被改造成“深度学习”,但那时我们还没有计算能力。我从事的项目使用了教育数据;我们试图看看是否可以根据学生的成绩和考试分数来预测他们的成功。我最难忘的学习经历是:即使我们真的想打败线性模型,你也无法打败它。我们真的很努力地让神经网络看起来很好,我们只是无法击败一个相对简单的模型,它的性能至少与标准相当,甚至更好。在我的工业生涯中,我注意到,如果你能很好地使用它们,总是更简单的模型具有不可思议的力量。经过这次实验,我意识到 50 年代的好的旧统计数据可以让你走得更远。
如果你能很好地使用它们,总是简单的模型拥有不可思议的力量。
【Dstillery 解决什么具体问题?你会如何向不熟悉它的人描述它?
Dstillery 是围绕使用机器学习和预测建模的原则建立的,以帮助放大正确的人群,让他们看到正确的广告。当我加入 Dstillery 时,我没有任何营销经验,因为我上过商学院,所以知道一些基本知识。然而,数据给营销带来的根本转变是能够将许多“粗糙的概念”抛在身后。营销人员倾向于以某种方式思考和谈论他们的受众,例如:“中年足球妈妈。”事实是,尽管我可能在技术上合格,但我讨厌被归类为中年足球妈妈…!对我来说还有很多,我的兴趣是如此广泛,以至于营销人员长期以来因为缺乏更好的数据而使用的这些非常“粗糙”的受众描述是非常不够的。
现代看待人口统计的方式是弄清楚,你到底想和谁交往?你到底想给谁看广告?我们能让机器帮助我们反映人类生存的全部复杂性吗?我们可以找到点击广告的人,但是我们如何解决如何吸引他们并改变他们的行为呢?这就是 Dstillery 正在尝试做的事情,查看精细的信息:你查看的 URL,你正在使用的应用程序,可能是我昨天看到你的物理位置,并以匿名方式解析所有这些数据, 将它输入一个算法,然后说:“根据我在这个非常精细的层面上对你的了解和观察,你对这个特定营销商的这个特定报价感兴趣的概率是多少——以及利用数据和机器学习的能力来说,“根据对产品的兴趣排名,我只会向 1%的人显示广告”。
你想解决的最大的机会/问题是什么?
发展数据科学技术的另一个重要领域是测量因果关系。我们需要超越相关性与因果性的争论,并且说我们实际上可以了解这一点,如果某种互动真的有某种影响以及为什么。如果这些技术被证明是可行的,我们可以把它们带到医学领域,并在几乎个人的基础上应用于测试环境。如果你想到个性化医疗,这是非常相似的。过去,一种诊断只有一种药物,如果你看看人们今天在癌症研究中所做的事情,就会发现为你个人开发的特定药物——对你最有效的药物。我在许多不同的行业中都看到了这一点。我们正从宽泛的消费者描述转向关注个人以及我们能为他们做的最好的事情。这反映在我们处理更多数据的能力上。Dstillery 在广告中是这样做的,但是我们正在创造的技术有更广泛的应用。
我们正在创造的技术有着更广泛的应用。
你最喜欢使用哪些工具/应用程序?
我们使用了很多非 SQL 解决方案,比如 Cassandra。在数据科学的另一端,我们有一个基于 Hive 的 Hadoop 堆栈,它为数据团队提供对数据的访问。我们记录每一条到达我们服务器的数据;数量级大约是一万亿字节。我们希望让我们的数据科学团队能够轻松访问这些传入的数据,以便他们能够在此基础上构建模型。我们的整个系统几乎都是自动化的。建模部分是添加了新技术的逻辑回归。我们通常从学术研究中提取,并在产品中实现我们自己的版本。在工业环境中使用它的贡献是真正实现鲁棒性,并找出我们如何自动化整个过程。我们一天要制作成千上万个这样的模型。在早期,当我还是 IBM 的数据科学家时,我有大约三周的时间来构建一个模型,而现在我们每周都在构建数千个模型。我正在设计一个基于机器学习构建解决方案的流程。我们的数据科学团队在制作原型时使用 Python、R 和 Perl,并使用 Hive 和 Cassandra 从 Hadoop 中提取数据。
哪些出版物、网站、博客、会议和/或书籍对你的工作有帮助?
我个人很喜欢面对面的互动,所以我真的很喜欢会议。我的主要会议在 kdd.org 举行,这是一个有 20 年历史的学术会议,有很强的应用性。他们有来自医药、制造、能源和广告的论文,我发现跟上学术界正在做的事情以及行业中的应用状态是非常有意义的。如果你在寻找更理论化的东西,你会去日本、 ICML 、 ECML 。诸如 O'Reilly's Strata 和预测分析世界等行业会议对于行业内的网络和实施状态非常重要。有一份名为大数据杂志的新出版物,他们试图在算法和分析的学术界之间架起一座桥梁,同时也着眼于应用方面。机器学习期刊,机器学习研究, KDNuggets 和数据科学中心都有一些有趣的文章。
除了 Dstillery,你最*还参与了哪些有趣的项目?
我通过在 NYU 大学授课以及在许多行业会议上发言来分享我的知识。去年,我在纽约市组织了一次数据挖掘会议,有 2500 人参加,主题是数据科学对社会有益。我们把非营利组织聚集在一起,让他们与具备分析型技能的个人配对,帮助他们解决重要问题。如你所知,对拥有数据科学技能的人有很大的需求,而且供应越来越多。然而,最大的问题实际上是将这些技能与正确的工作相匹配。只要“数据科学家”这个头衔没有明确定义,招聘经理就不确定他们需要什么样的技能,公司也很难表达他们想要什么。有很多不同的模型。例如,Facebooks 和 Googles 希望工程师了解数据,而在 Dstillery,我们寻找的主要是懂数据并有一定编码能力的人。一个完全不同类型的人可以胜任这两种不同类型的角色。我热衷于将人们连接到合适的职位,在那里他们可以努力工作并发挥影响力。
对于刚开始学习机器的学生或从业者,有什么至理名言吗?
做一些你真正喜欢做的事情。
做某事没有意义,因为它在某个时间流行。尤其是有了数据,你可以专攻的东西多了去了;真正让你兴奋的是什么,这完全取决于你自己。对我来说,这是一个侦探游戏,找出我的数据中发生了什么,以及真正能够建立最佳模型的竞争力。你需要在你真正擅长的和你喜欢做的之间找到一个很好的*衡,这种兴奋正是我在面试中说服我雇佣你的原因。
克劳迪娅——非常感谢你抽出时间!我真的很喜欢了解你在 T2 的工作。
在推特上关注克劳迪娅。
Pinterest 的众包和机器学习
我们最*采访了 Pinterest 的数据科学家詹姆斯·鲁宾斯坦。詹姆斯,首先感谢你接受采访。让我们从你的背景和你如何对数据科学感兴趣开始。
你的 30 秒简历是什么?
我是 Pinterest 探索团队的数据科学家,但我更喜欢被称为“迪斯科科学家”。
在加入 Pinterest 之前,我是苹果地图和 iTunes 团队的统计学家。在此之前,我在易贝担任投标团队和搜索度量的产品经理,在那里我介绍了一个实验赌丨博市场、一个新的投标层、在线调查和众包搜索质量评估。
在我的空闲时间,我制作音频组件,破解干衣机,酿造啤酒,和家人一起出去玩。
你记得使用的第一个数据集是什么?你用它做了什么?
他们说你永远不会忘记你的第一次,这是完全错误的。然而,我确实记得自己是克莱姆森大学的本科生,在我工作的商店里向学生和顾客分发调查问卷。然后我会手动输入数据,并使用 t 检验或其他一些基本统计数据通过 SPSS 运行数据,以寻找人群中的差异。
你和一些最具创新性的公司合作过。有什么想分享的亮点吗?在你的职业生涯中,到目前为止你最自豪的是什么?
我为我(和我的团队,因为数据科学是一项团队运动)在易贝完成的工作感到非常自豪。我们通过创建调查*台,为易贝团队创造了倾听“客户声音”的新渠道。
我们还通过提供独立于实时网站指标(即相关性)的数据,推动了搜索团队内部的许多决策。这些见解现在仍在推动公司的决策,尽管是以不同的方式,由不同的团队来做。
我也很自豪能成为 Pinterest 团队的一员。我和了不起的人一起工作,把了不起的产品带给世界。我们的团队非常努力地工作,以确保 discovery 团队发布的每一个 algo 都是“Pinterest 质量”,对此我也感到自豪。
你认为众包和数据科学以及 ML 将走向何方?什么是*期然后是远期?
我们使用人工评估做两件事:驾驶和得分。转向是提供输入来告诉你哪里情况不好/好,提供 ML 的输入。评分是衡量事情进展的好坏。在短期内,我认为我们会看到更多的从得分到使用这些人为标记的数据进行指导的转变。
在未来,我们可能会看到人和机器之间更紧密的循环,机器学习、训练数据收集和测量都在*乎实时地进行。在遥远的未来,我们将在训练机器方面做得如此出色,以至于我们都可以在没有任何人工监督的情况下在海滩上放松。
你能告诉我们你在 Pinterest 做的工作吗?
我主要致力于测量各种发现算法的性能。探索团队负责帮助你在 Pinterest 上找到你喜欢的东西,无论是通过搜索、Homefeed 还是推荐。我们通过人工评估和现场实验来衡量这种体验。我还致力于测量引脚质量,试图训练 ML 算法区分什么是好引脚,什么是不太好的引脚。
你想解决的其他机会/问题领域有哪些?
一个很大的挑战是我们如何知道一个 Pin 什么时候是好的。什么使它变得好?为什么人们使用一些图钉而不使用其他图钉?当我们第一次看到一个图钉创作时,我们如何知道这个图钉是否会引起图钉爱好者的兴趣?
我最感兴趣的另一个主题是构建评估管道,以便公司中的任何人都可以轻松获得我们在网站上使用的所有不同算法的度量。
你在实验设计和统计方面有着有趣的背景,你能谈谈你的背景如何给你作为数据科学家的职业生涯带来一些优势吗?
我认为我所做的很多事情都是设计调查。在某种程度上,这和我在大学时在布莱凯特礼堂给学生发调查问卷没什么不同。
你需要适当的调查设计,不会让回答者产生偏见,你需要确保结果是因为数据,而不是因为用户的偏见。
建立适当的实验控制也是至关重要的,这并不总是被认为是实验的关键组成部分。
最后,还有统计数据——理解如何以及何时应用它们是很重要的。不过我承认,有很多人比我更擅长更广泛的统计数据,我很乐意寻求帮助或第二种意见。这是在 Pinterest 工作的好处之一:尽管我们的团队很小,但我们有一些在各自领域非常优秀的人,他们愿意帮我找到正确的答案。
你最喜欢使用的工具/应用程序是什么?
嗯,在众包方面,我们通常使用 Crowdflower 或 Mechanical Turk。不过,我们确实在不同的市场使用不同的供应商。你必须将正确的人群与正确的任务相匹配。
说到数据分析,我和 R 合作过很多事情。在过去的几年里,我学习了更多关于 Python 的知识,这很棒。
对数据科学/机器学习的学生或从业者有什么忠告吗?
是的,学习科学。去和真实的人做些真实的实验。找出混淆因素,询问噪音的来源,尝试从尽可能少的参与者那里获得意义。数据科学不会取代科学,而是补充科学。
在 Twitter 和 Pinterest 上关注詹姆斯。在 Pinterest 工程博客上关注 Pinterest 的数据科学。
数据科学采访:Reonomy 首席数据科学家 Jason Dolatshahi
我最*采访了 Reonomy 的首席数据科学家 Jason Dolatshahi。
Jason,请告诉我们一些你的背景,以及你是如何对数据科学感兴趣的。
我一直喜欢学习和解决问题,所以我学了数学和物理。我以前从事金融营销,数字广告,现在在 reonomy 工作。我最初来自圣地亚哥,现在我住在布鲁克林。
你是如何对数据科学和机器学习产生兴趣的?
在我人生的某个阶段,我有一份有点无聊的工作。所以我下定决心学习 Python,它帮助我建立了金融模型。我就是这样发现了数据科学和机器学习。这个话题似乎涉及了很多我不太了解的很酷的东西,所以我被吸引住了。
你还记得你是什么时候意识到数据的力量的吗?
第一次了解是在大学的时候;我第一次亲眼看到是在一个交易台上。在此期间,我的工作是自营交易。我从金融市场发现并驱动交易信号,收集数据,并根据这些见解执行策略。
你在经济学院做什么工作?
我们是商业地产市场的初创公司。我们业务的很大一部分是通过智能地使用数据来创造价值。我们的产品是为投资者、贷款人、经纪人和其他市场参与者提供的研究*台。像许多其他小公司一样,数据科学工作包括大量的后端工程。
你发现的最令人惊讶的见解或发展是什么?
到目前为止,我发现的最基本的物理模型是谐振子,例如钟摆的运动。此外,我喜欢套用一位最著名的物理学家的话,他说“一个年轻的理论物理学家的职业生涯包括以不同的抽象程度对待谐振子”。但类似地,数据科学家的职业生涯包括了解这样一个事实,即在不同的抽象程度上,“你 80%的问题解决发生在建模之前”。
数据科学家的职业生涯包括了解这样一个事实,即在不同的抽象程度上“80%的问题解决发生在建模之前”
你认为商业地产和数据科学以及 ML 将何去何从?
我认为商业地产将变得更加数据驱动。数据科学的应用领域也将越来越广。例如,我认为这将增加私人和公共部门对具有定量问题解决技能的人的需求。医学是头号关键领域,我希望在这个领域看到一些重要的突破。测序一个基因组的成本在 1000 美元左右,这比第一个人类基因组计划后的 20 年要少得多。
在雇佣数据科学家时,你们有哪些方法(如果有的话)?一个成功的候选人最重要的是什么?
我有兴趣看到候选人运用定量推理。我也喜欢了解他们对自己不知道的事情的态度。但对我来说最重要的技能是统计直觉。为此,我会给你一个实际的任务带回家,稍后展示结果。这将向我展示候选人是否具备所需的数据和沟通技巧。我现在正在应聘经济学的职位,如果你认为你具备所需要的条件,我们就来聊聊吧。
在大会上教授数据科学时,您是如何应用自己的知识的?对实习学生有什么建议吗?
未来的数据科学家应该专注于基本技能和统计推理。他们应该试着用简单的术语理解技术,例如为什么他们以的方式工作。不要被数学符号、编程语言、技术吓倒;这些都只是一种工具,或者达到目的的手段。数据科学是一门实践学科,它是围绕权衡取舍而构建的。你需要在自己的工作中认识到这些权衡,并做出明智的选择。这包括但不限于构建预测模型的环境。最后但同样重要的是:“深入思考简单的事情”——另一句名言。
试着用简单的术语理解技术,例如为什么它们以这样的方式工作。不要被数学符号、编程语言、技术吓倒;这些都只是一种工具,或者达到目的的手段
你有如此丰富的数据科学背景,你能分享一些你做过的最有趣的工作吗?还是一两个有纪念意义/有意义的项目?
我在一家移动广告初创公司建立了一个后端数据处理架构,基于 Python、redis 和亚马逊 EMR。即使在我们被收购后,它仍然存在于生产中。然后,我在一个大型广告合作项目中创建了可视化效果,获得了很大的吸引力,并最终被各种商业用途所采用。最*,我开发了一个功能,让 Reonomy 的用户在使用 ElasticSearch 时,可以获得某个人或公司所有权的整体情况。这是一个大项目,因为你必须建立简化的工作流程,许多市场参与者必须与一群人一起手动进行,这将洞察力的时间减少了几个数量级。
未来的数据科学家应该专注于基本技能和统计推理
到目前为止,在你的职业生涯中有什么让你感到最自豪的事情吗?
关于数据科学,我最喜欢的是学习新事物和创新的机会。我真的很喜欢我所做的工作,它带来了惊人的结果,我也很喜欢教学和帮助人们看透复杂性。
今年你在做什么个人/专业项目,为什么/如何让你感兴趣?
我目前专注于函数式编程或数学家编程。我最喜欢的科目之一是机器学习在生物和医学问题上的应用。
你发现了哪些机器学习方法,或者你认为这些方法最有帮助?你最喜欢使用的工具/应用程序是什么?
一般来说,越简单越好。我日常使用的工具是 Python、pandas、tmux、vim 和 unix。我也用 scikit-learn。
Jason——非常感谢你抽出时间!真的很高兴能更多地了解你在经济学院所取得的成就。
数据科学访谈:Thoughtworks 的资深数据科学家 Sean McClure
我们最*采访了 Thoughtworks 的高级数据科学家 Sean McClure 博士。肖恩,首先感谢你的采访。让我们从你的背景和你如何对数据科学感兴趣开始。
你的 30 秒简历是什么?
我的学术背景是科学计算,我曾用高性能计算机和尖端算法来计算基于纳米技术的设备的分子属性。我爱上了使用计算机和数据来解决非常具有挑战性的问题。获得博士学位后,我开始了自己的高级分析业务,利用机器学习和数据库技术帮助企业进行分析竞争。在做了几年之后,我加入了 T2 的 ThoughtWorks,成为了我现在工作的数据科学家。我喜欢写作和公开演讲,也喜欢弹钢琴。
你是如何对数据科学和机器学习产生兴趣的?
在我读博士期间,我接触了各种试图在计算机上解决挑战性问题的方法。我很快认识到机器学习技术在解决我的领域中的问题的力量。我看到,我作为一名科学研究人员的经验可以与机器学习中使用的方法相结合,以解决远远超出学术界的问题。当我毕业时,数据科学刚刚开始升温,我觉得这是我的技能和热情的自然延伸。
当你意识到数据的力量时,有没有一个特定的“啊哈”时刻?
我早期的一个项目是在医疗保健领域,涉及构建一个试图将各种症状与疾病结果关联起来的应用程序。尽管该产品远非完美,但它让我看到了数据的力量,以及它在世界上的变革性。这是我意识到我们可以用数据做很多重要工作的时刻之一,它可以对我们的人性产生积极的转变影响。
数据的力量可以改变世界
你在 ThoughtWorks 做什么工作?
在 TW,我构建自适应应用程序,通过从环境中学习来帮助自动化决策。我与软件开发人员合作,将我构建的模型集成到现实世界应用程序的工作代码库中。在 ThoughtWorks,我们认为这是下一代软件,其中敏捷性的理念超越了设计阶段,贯穿于软件的整个生命周期。
在你的职业生涯中,到目前为止你最自豪的是什么?
这是我第一次从企业领导那里得到证实,我的工作为组织增加了价值。从领域专家那里得到积极的反馈,说你的工作产生了真正的影响,这是一种很棒的感觉。
你发现的最令人惊讶的见解或发展是什么?
我在一家搜索引擎营销(SEM)公司工作,我们试图在大量的市场数据中寻找模式。我们发现,虽然许多营销活动被员工处理得很好,但也有其他一些活动与普遍持有的信念相去甚远。虽然这是我们在那里的核心原因,但在组织的数据中发现新的机会仍然是一个令人愉快的惊喜。
今年你做了哪些个人/专业项目,为什么/如何让你感兴趣?
今年,围绕将自动化构建到现有的业务流程中,充满了许多激动人心的事情。我最*完成了一个应用程序,它吸收了成千上万手动输入的文本描述,并呈现出正在讨论的核心主题。这被用来发现大型系统中出现的主要故障;多年来在文档中手工描述的故障。这是一个很好的例子,教一台机器做一些需要很多人和数千小时才能完成的事情。它使用了自然语言处理中的概念,我认为这将在未来的智能数据产品中扮演非常重要的角色。
数据科学的未来是什么样的?
我们仍处于定义这一领域的早期阶段,以及它对寻求分析竞争的组织意味着什么。我认为,在未来,我们将会看到大量的宣传逐渐消失,并成为一个坚实的学科,将数据转化为有价值的产品。将数据转化为价值的需求只会增加,而实现这一点的方法就是进行高质量的科学研究;导致模型的研究,这些模型捕捉驱动我们感兴趣的领域的潜在模式。我个人正在努力在我的写作和公开演讲中帮助定义这个领域,并确保炒作不会干扰对基于大量数据的伟大科学的需求。
我认为,在未来,我们将会看到大量的炒作逐渐*息,并成为一个坚实的学科,将数据转化为有价值的产品
哪些出版物、网站、博客、会议和/或书籍对你的工作有帮助?
亚塞尔·s·阿布·穆斯塔法的《从数据中学习》是一本值得不时阅读的好书。它很好地解释了制造机器的可行性,这些机器可以学习和描述我们作为数据科学家每天应用的许多核心概念。我也经常使用 DeepDyve ,它允许人们租借学术文章。这样我们就可以了解最新的研究,而不必支付大量的期刊订阅费。
你发现了哪些机器学习方法,或者你认为这些方法最有帮助?你最喜欢使用的工具/应用程序是什么?
机器学习构成了我们作为数据科学家使用的各种算法的核心。我不认为你可以将任何一种方法置于另一种之上,直到你试图解决的特定挑战暴露了它的一些秘密。这些就像在发现过程中突然出现的标志,暗示可能证明可行的方法和途径。但最终,采用多种方法,让大自然告诉你什么可行,什么不可行,这才是关键。对于工具和应用程序,我首先使用 R 和 Python,因为它们拥有最丰富的科学计算库。这种多样性对于允许科学家从各种不同角度探索数据并揭示如何对感兴趣的系统建模的洞察力至关重要。我在使用 R 和 Python 的 IPython 时也使用 R studio。当缩放模型有意义时,我会寻找像 Spark 这样的工具,这些工具在使机器学习可扩展和快速方面取得了很大进展。H20 也开始看起来有希望成为扩展我们科学的工具。除此之外,我还负责 NoSQL 数据库和 Hadoop 生态系统。
对数据科学/机器学习的学生或从业者有什么忠告吗?
- 关注核心概念,因为它们是永恒的
- 投入并不断练习。失败是学习的唯一途径。我最*就此写了一篇文章,名为你应该关注的唯一技能。
失败是学习的唯一途径
肖恩-非常感谢你的时间!我非常喜欢深入了解你在 Thoughtworks 取得的成就。
肖恩·麦克卢尔可以在这里在线找到,并访问 Thoughtworks 。
数据科学:唐纳德·特朗普的另一个不同之处
原文:https://www.dominodatalab.com/blog/data-science-just-one-way-donald-trump-different
如果你是一名对政治工作感兴趣的数据科学家,不要费心申请特朗普竞选团队——但希拉里有一份工作给你。
在最*的一次美联社采访中,唐纳德·特朗普对数据作为竞选战略工具的价值大打折扣。他的计划是基于他的人格力量去赢得胜利。这位假定的共和党提名人指出了奥巴马的个性,他说:“奥巴马比他的数据处理机器获得更多的选票,我想我也是如此。”
就像特朗普的许多事情一样,这是一个非传统的观点。大多数政治专业人士认为奥巴马 2008 年的竞选在使用数据方面具有开创性,尤其是在获得选票方面。奥巴马在初选中对右翼战场的关注为他赢得了希拉里·克林顿都没有意识到的代表票。
对于任何重大的政治竞选活动,数据科学都是运作的大脑。数据科学家可以回答的问题涵盖了竞选的每一个方面:在哪里筹款,为哪个州而战,向观众传达什么信息,谁是摇摆选民。在这些问题上,数据每次都胜过意见。
抛开战略问题不谈,政治活动的很大一部分就是直接营销。候选人在广告上花费数千万美元。政治广告与汽车、尿布和啤酒的广告同时出现。数据科学是公司将广告瞄准正确受众的方式。这就是地毯式轰炸和智能炸弹的区别:用少得多的钱产生多得多的影响。
对于特朗普来说,他筹集到的资金还不到希拉里·克林顿的一半,努力扩大他的广告收入是有意义的。相反,到目前为止,他从新闻自由中获益匪浅。他的竞选花费比⅓少,只有希拉里竞选花费的 20%。
但是随着竞选转向大选,新闻自由的优势可能会缩小。此外,他控制媒体的能力很大程度上是因为他愿意发表非常规言论。如果他需要传递有针对性的信息,无法运行数据驱动的广告活动将成为一个巨大的负担。
另一方面,克林顿竞选团队正在寻找更多的数据科学家来帮助他们找出如何最好地分配资源以获得最佳结果。他们的分析师从事筹款、广告、地理分析等工作。目前分析团队有十几个空缺职位,从初学者到有经验的研究员都有。一些有趣的工作包括:
- 战场州分析师
- 国家数据和分析总监
- (或者你经验少,可以做个副主任
- 数据科学领导
- 数据科学家
想要帮助唐纳德·特朗普(Donald Trump)“让美国再次伟大”的数据科学家可能会在他们和他们的候选人之间发现一堵墙。另一方面,克林顿竞选团队准备利用数据做出决策。
更新:今天早上在一篇关于 fivethirtyeight.com的文章中,Joshua Darr 探讨了川普限制数据在其竞选中的作用的决定将对共和党产生的影响。不是在影响选举结果方面,而是总统选举提供了一个难得的机会,既可以比其他选举收集更多的数据,又可以培养下一代能够利用这些数据的人才。
数据科学发起了一场全球对抗新冠肺炎的战斗
原文:https://www.dominodatalab.com/blog/data-science-launched-a-global-fight-against-covid-19
By David Bloch, Data Science Evangelist, Domino on April 21, 2020 in Perspective
随着世界以疯狂的速度限制新冠肺炎的影响和传播,数据科学行业呼吁采取行动,帮助加快新预防措施和技术的研究,并就指数增长率和呆在家里限制传播的重要性等主题教育人们。
在前所未有的规模上,卫生、学术和政府组织开始公开数据集,以供分析、探索和研究。这些相同的数据集正被新闻媒体用来讲述新型冠状病毒的故事,并教育公众有关社交距离等措施,这些措施可以降低感染率,并帮助医院应对病毒。
在 Domino,我们响应了这一号召,为希望为新冠肺炎研究做出贡献的数据科学家提供了一个免费的环境。该环境已经预先配置了对数据的访问,许多代码片段使其易于开始。注册后,数据科学家可以请求访问更多计算。
我们希望提供这样的环境能让数据科学家更容易起步,并为新冠肺炎研究做出贡献。我们还在下面提供了一些资源,我们发现这些资源发人深省,对我们自己的探索和实验很有帮助。
如何在 Domino 中访问新冠肺炎项目
- 参观 try.dominodatalab.com 并报名。
- 完成入职培训后,查看并注册访问新冠肺炎传染病数据项目。
- 请遵循项目中提供的 readme.md 文件,以获得有关所包含内容的更多信息。
- 有关 Domino 环境的更多信息,请查看我们在 docs.dominodatalab.com的入门指南。
Source:
Domino Try
数据科学家如何帮助对抗传播
科学研究进程中的一个关键原则是“站在我面前的巨人的肩膀上”的能力。对于研究人员来说,获得以前的假设、实验和其他科学家的知识来帮助建立新的见解是很重要的。
云计算的采用以及笔记本工作解决方案的流行,使得研究人员可以轻松分享他们的工作笔记、算法和数据等底层资源。许多组织寻求利用其内部数据科学能力来帮助加快对该病毒的研究。例如:
- 阿里巴巴集团的科学研究院开发了一种 T2 新冠肺炎诊断模型 T3,利用计算机断层扫描(CT)和医学成像分类来诊断新冠肺炎病毒。该系统将由经验丰富的医生进行的典型的 10-15 分钟诊断缩短到 20 秒钟,这在医疗资源不堪重负的情况下是至关重要的时间节省。
- ka ggle-一个举办一系列比赛的*台,在这些比赛中,企业提供挑战和数据,以找到财务奖励的解决方案-已经创建了资源中心和一系列起点文章,以帮助数据科学界在追求提供新智能的过程中轻松起步。
- Zindi-一家总部位于南非的初创公司一直在连接非洲的数据科学家社区,宣布向其 12,000 名数据科学家提供现金奖励,以参与寻找可用于帮助抗击新冠肺炎的新见解和信息。
- 微软与分享了一系列学术论文,这些论文配有一些工具,可以更容易地使用自然语言处理技术搜索文献,帮助研究人员快速找到相关信息。他们还结合了以前对与新冠肺炎病毒作用方式相似的病毒的研究实例,如 SARS 病毒。
- 再保险供应商 SCOR 专门成立了一个工作组来分析新冠肺炎疫情危机。该团队由来自其知识社区的专家组成,包括医生、流行病学家、精算师和数据科学家。基于约翰·霍普金斯大学提供的数据存储库,他们在 Domino 中构建并发布了一个公共 web 应用程序,以帮助在基本信息的实际显示中可视化新冠肺炎趋势。最初成立的目的是建立生物特征风险模型,多专业工作组意识到共享数据有助于更好地向公众提供信息。
- Bayer 数据科学家 Jeffrey Pobst 在 Domino 中开发了一个应用程序,来分析维基百科中与新冠肺炎相关的跨语言词汇的趋势——查看标题为“冠状病毒”、“疫情”、“新冠肺炎”的页面流量,以及有趣的“卫生纸”、“洗手液”、“抗病毒药物”、“远程办公”等相关页面。该应用程序强调了社会一直在研究什么,好奇心如何在不同的地理区域内上升和下降,并可能围绕这个疫情随着时间的推移在区域内看到的文化影响呈现有趣的相关性。
- 感受到数据科学和人工智能应用的潜力,白宫敦促技术机构为研究做出贡献。
科学界迫切需要发现有助于抗击病毒传播的新见解来源,这导致了前所未有的跨国和跨国信息共享。大型跨职能虚拟团队聚集在一起,更好地通知人们,提供更好的洞察力和清晰度,最终帮助政府共同努力解决问题。
数据可视化如何更好地传达故事
数据科学家应用数据可视化技术来探索信息,并在形成和测试假设之前获得大量数据集。
随着政府寻求实施各种政策,如社会距离和要求人们自我隔离,数据越来越多、也是最重要的用途之一是向人们提供政策原因以及为什么这些政策会有效的建议。
下面是一系列文章和博客帖子,它们使用数据可视化来创建新的见解,并清晰地传达给读者。它们也可以作为研究者可能寻求的不同方法和假设的思想启动器。
-
信息是美丽的发表了一系列信息图表,这些图表从大量数据中提炼出受病毒影响者的人口统计信息。
-
纽约时报为提供了一系列模拟和滑块;让人们能够根据疾病的传染性和死亡率轻松评估影响;按照国家和州提供信息,利用人口统计数据以及我们目前对病毒的了解。
-
约翰霍普金斯大学的团队已经在 T2 建立了一个惊人的资源中心,里面充满了数据集和信息,其中包括 T4 的一个综合仪表板,记录了与病毒及其在人群中传播有关的关键数据。
-
《华盛顿邮报》提供了一系列的 T2 动画,展示了疾病传播的不同场景。他们介绍了社会距离背后的目的,并展示了它如何帮助减缓病毒的传播,给卫生部门一个更好的机会来管理其影响。
Source:
Information is Beautiful
其他资源
-
Fast AI 为提供了一系列关于数据科学在解决新冠肺炎问题中的作用的见解和想法,有助于定义和描述手头的问题,并展示了数据科学家如何提供帮助。
-
走向数据科学发表了一篇博客,帮助人们建立了一个与冠状病毒传播相关的仪表板,以及他们的对 COVID 增长模式的探索性分析,并访问了他们的底层代码库。
-
约翰·霍普金斯大学通过 GitHub 公开了其数据集,全天发布多次数据更新,供数据科学家和分析师访问。
-
哈佛大学在其中国数据实验室网站上发布了 T2 的文献、学术案例研究、数据集和代码库。
Source:
Towards Data Science
来自英国最大零售银行的数据科学领导者将在 Rev 2 中讨论负责任的人工智能
By Karina Babcock, Director Corporate Marketing, Domino on March 27, 2019 in Perspective
随着组织越来越多地将大量模型部署到生产中,以及这些模型影响重要的商业决策,“可解释的人工智能”已经成为一个热门的讨论话题。至关重要的是,要了解每种模型的基础、演变和使用,以确保它们正在做它们在野外应该做的事情,并且如果它们偏离了轨道,能够有效地识别和排除故障。
Domino 首席数据科学家 Josh Poduska 解释说,“在更广泛的模型管理框架的背景下,我们将允许组织掌握每个模型的活动、成本和影响的支柱称为‘模型治理’。”"
在处理金融服务等受监管行业时,这一概念尤为重要。英国最大的零售银行劳埃德银行集团(Lloyds Banking Group)将于今年 5 月派遣其数据科学负责人汤姆·克罗宁(Tom Cronin)和数据科学家托拉·孙心怡(Tola Schmidt)前往纽约,在数据科学领导者峰会上深入探讨这一主题。
汤姆领导着一个由 50 多名“探路者和开拓者”组成的团队,他们正在向劳埃德的同事和客户提供人工智能产品。作为 Tom 团队的一员,Tola 在最*于伦敦举行的数据科学会议上发表了评价最高的演讲;她的个人使命是通过统计技术在现实生活中的应用来激励年轻一代,从而“将数学带入生活”。
以下是他们 Rev 演讲的简短概要,题为“负责任的人工智能”:
随着统计模型在决策中的使用在生活的各个领域变得越来越普遍,从我们可以获得的抵押贷款到我们可以在 Tinder 上向左滑动的人,我们解释这些模型的能力从未如此重要。在本次会议中,我们将向您介绍可解释人工智能(XAI)的概念,它使我们能够解释机器学习模型做出的决定。
数据科学领袖播客探讨了 MLOps、数据道德、团队结构等
今天,我们推出了“数据科学领导者”,这是一个新的播客系列,致力于通过记录和分享真实故事、突破性战略和关键见解,帮助团队扩展蓬勃发展的数据科学实践,构建企业数据科学成功模型,这些都来自那些已经做到的人。
我们最*采访了“数据科学领导者”的主持人戴夫·科尔(Dave Cole),听听他在采访领导者时学到了什么,并希望听众能够了解,这些领导者的丰富经验推动了数据科学团队所能实现的极限。
你为什么要启动数据科学领袖播客?
科尔:我曾经是首席分析官,当时,我作为一名从业者,在分析和理解数据科学方面有着丰富的经验。但我不太明白的是,成为数据科学领导者意味着什么。这意味着理解诸如你的数据科学家应该在你的组织中的什么位置;如何衡量数据科学团队;团队应该如何与业务用户互动。
我觉得成为数据科学领域的领导者有点与众不同,关于这一领域伟大领导者的报道很少。这个角色有一些非常独特的方面,我只是想解释一下。我们的目标是帮助所有的数据科学领导者以及有抱负的数据科学领导者相互学习。
这一点尤其重要,因为有很多不同的方法可以成功胜任这一角色,而且很多取决于各种变量,比如你所处的行业、你所在的组织类型、你的团队规模等等。这也是我喜欢跨行业跟各种领导对话的格式的原因。这是一种有助于理解不同的方法的格式,这些方法适用于不同的高管构建高绩效团队。
你的第一集是《纽约时报》首席数据科学家克里斯·维金斯。关于那次谈话,你印象最深刻的是什么?
科尔:对于像《纽约时报》首席数据科学家这样的人来说,数据伦理是一个重要的问题,我认为这并不奇怪。但真正有趣的是,意识到——坦率地说,定义——作为一名有道德的数据科学家意味着什么,被视为时报数据科学团队的一项重要职责和一个方面。听到 Chris 谈论他如何处理数据伦理,他们如何写下道路规则,甚至创建角色和委员会来支持数据伦理工作,我很感兴趣。
回答数据伦理问题很有意思。我希望在数据科学家中看到更多。这是一个非常重要的话题,尤其是考虑到像欧盟一般数据保护条例或加州消费者隐私法案这样的法规。我在本期播客中采访了另一位嘉宾,我们就数据的未来进行了一些数据伦理的讨论。虽然《纽约时报》可能对数据伦理有独特的强调,但这应该是每个数据科学家都必须真正思考的问题。
关于克里斯的领导风格,有趣的是他对自己团队的期望。你会听到他在播客中谈到他期望他的数据科学家可能会不时向他们的首席执行官展示。所以,他们必须是伟大的沟通者;他们必须能够回答问题,并将他们所做的工作转化为 CEO 能够接受的清晰而简明的建议。这是我在整个对话中看到的一个主题:理解代码和统计数据还不够好;你也必须能够翻译它。
通过采访这些嘉宾,您对数据科学的当前或未来状态有什么了解?
Cole:首先,我了解到数据科学领导者面临一些共同的挑战。例如,围绕数据科学家是否应该集中或嵌入到各个业务部门,或者是否应该有某种混合模式,有这样的对话。关于这场辩论的利弊,我学到了很多,我们也谈了很多。
此外,数据科学领域的领导者强烈希望宣传数据科学的成功,并衡量不仅仅是 ROI。人们一致认为,成功不仅仅在于我们将这种模式投入生产后节省了多少成本。数据科学的领导者需要考虑一些措施,例如数据科学团队应该进行的适量研究,或者如何为可以获得资金的项目寻找好主意。有趣的是,这些想法不一定总是来自你的传统业务领域。他们可以来自您的数据科学团队本身。对我来说,了解不同的公司是如何做到这一点的真的很有趣。
最后,我惊讶地了解到各行各业的数据科学领导者是如何专注于提供业务影响的。我了解到没有一个行业能引领他们所有人。总的来说,各行业似乎都有一种对数据幻灭的共同情绪,这促使我采访的领导者确保他们将模型放在公司业务的最前沿。我希望这个播客能帮助更多的人做好这件事。
你能告诉我们一些你很想让观众听到的即将播出的剧集中的瞬间吗?
科尔:我和赛默飞世尔公司 DNA 测序部门的生物信息学主管菲奥娜·海兰谈过,在那次谈话之前,我从来不知道什么是生物统计学家,什么是生物信息学。我们包括了一本“生物学 101”入门书,以更好地理解一些基本的人类 DNA 概念如何转化为数据科学,这真是一场令人着迷的对话。我们甚至继续谈论冠状病毒以及数据科学本身是如何被用来制造疫苗的;我们略微谈到了测试,这是一个热门话题,非常有趣。
此外,我和作家约翰·汤姆逊的谈话非常激动人心。他是一名作家,已经写了两本书,他正在写第三本,围绕着数据的未来。我们讨论了他关于如何使用数据、数据隐私以及数据伦理的哲学。
最后,我和 Paylocity 的首席数据科学官 Adam McElhinney 就 people analytics 进行了一次非常有趣的谈话。每个公司都有一个人力资源部门,从他那里听到一些数据科学如何被用来试图限制面试过程中的偏见、公*薪酬和类似性质的事情的使用案例真的很有趣。
你希望在以后的剧集中回答哪些问题?
Cole:每次与新的数据科学领导者交谈时,我都会发现有不同的方法适合他们。虽然我认为有一些方法绝对更好,但我发现每种方法都有利弊。
我得出的结论是,数据科学领导者的风格,以及他们的数据科学团队所处的阶段,可以真正决定他们如何最好地管理和构建他们的团队。而且,那将会进化。因此,在某个时候,退一步谈谈数据科学团队随着规模和责任的增长而发生的演变将是一件好事。
数据科学领导者:你们人太多了
原文:https://www.dominodatalab.com/blog/data-science-leaders-there-are-too-many-of-you
感谢 Cassie Kozyrkov 贡献了这篇博客,它最初发表在 Medium 的迈向数据科学。
数据科学有一个问题。实际上是几个问题,但是从头开始,让我们从一个问题开始:领导力。
今天,我在数据科学(该学科涵盖了、人工智能、统计、数据汇总和可视化)领导者的峰会上发表了演讲。当我看着领导当今数据科学团队的最聪明的开拓者的脸的海洋时,我发现自己在想,“你们太多了。”
FiveThirtyEight 的 Nate Silver 向同样的数据科学领导者听众发表演讲
想想这是怎么一回事!在峰会上问任何人,他们可能会告诉你,如果你认为人才短缺很糟糕,那么数据科学领域的领导人才短缺就更糟糕了。
如今,大多数数据科学领导者都是我喜欢称之为“超越数据科学家”的人那些追求科学、工程或统计方面的正规训练的人,然后,奇迹般地,有一天醒来发现他们更感兴趣的是让数据变得有用,而不是为了追求数学的复杂性。
数据科学的领导者克服了所有的困难。
数据科学领导者:你们有太多的人,因为你们克服了所有的困难而存在。由于几乎没有做任何事情来训练你,你比我们应得的要多。这个幸福的意外是怎么发生的?没有人教你如何做你所做的,所以你的存在是我们的幸运。你的计划是希望在研究了十几年的方程式后,你就能知道如何领导了吗?如何做出好的决策?正如我的 SRE 同事所说,“希望不是策略。”
你应该有更多的人,但是计划是什么?
如果你喜欢定理,这里有一个:你的时间是有限的,所以如果你用它来学习费曼或德费内蒂,你就不会花同样多的时间来培养其他技能。我们不能指望数据科学家超越并立即知道如何成为优秀的领导者和决策者。谁会教他们这些?你不会通过整天写代码或证明定理来学习它。
相反,要成为优秀的领导者和决策者,他们必须谦逊地认识到自己萎缩肌肉中的弱点,并勤奋地掌握第二项技能。有时他们会带着很多伤痕艰难地学习。作为一个一开始就认为概率论是宇宙中最热门的东西的人,我非常清楚这有多痛苦。
有个态度问题。我们真的重视这些技能吗?
如果你的经历和我一样,你可能已经在一个亲数学的亚文化中长大,在这个亚文化中,对任何闻起来像“软”技能的东西表现出蔑视是一种时尚。这都是关于你是多么热衷于熬夜证明一些定理或用你的第六语言编码。当你被夹在那种视角中间时,你可能不会想到你应该重视领导力(或者沟通、商业意识、创造力和同理心等)……如果你变得软弱,你的同学会尊重你吗?
部分解决方案是改变时尚,让这些技能成为像原始数据科学这样有吸引力的领域中不可或缺的一部分。如果昂首阔步必须是年轻人的一部分,那么至少让他们相信,最高的荣誉是同时拥有两种肌肉。毕竟是事实。
说到确保数据科学团队得到有效领导,我们是依靠运气还是训练?
门槛很高,并不是每个有工作的人都能真正做到。
数据科学领域的领导力不仅仅是一学期的数字。是它自己的怪兽。你不仅必须对决策和信息如何推动行动有深刻的理解,还需要敏锐的嗅觉来发现如何有效地影响特定业务领域的细微差别,如果这还不够,你还需要了解各种技能的生态系统,这些技能需要汇集在一起才能使大规模数据科学项目取得成功。而这只是进入这个游戏的最低要求。
这是一个相当高的门槛,并不是每个领导数据科学团队的人都能达到。雇主们,你怎么知道你是否真的在雇佣一个人来领导你的数据团队呢?如果您的团队已经有了糟糕的数据科学领导,该怎么办?你怎么知道的?几乎没有任何关于这个角色的智慧可供你依靠。你能问谁呢?
数据科学是泡沫吗?
当今世界正在产生前所未有的数据。然而,有时我会被问到这样的问题,“数据科学是泡沫吗?“我希望我能坚定地回答,”肯定不会!“事实是,这要看情况。可悲的是,当我与各行各业的人聊天时,我总是听到同样的故事:“我们的数据科学家毫无用处!他们所做的就是坐着发表论文。我们会有足够多的有技能的领导者来防止这种司空见惯的现象吗?如果数据科学家不能证明自己的价值,他们不会在这些岗位上呆很久。
期望一个刚毕业的科学博士知道如何对商业做出有意义的贡献是不公*的。那不是他们花了那么多年学的东西。如果没有了解数据科学所涉及的内容并知道如何将数据与业务联系起来的人的指导,他们将面临重重困难。为了确保数据科学不是泡沫,我们迫切需要专业化的领导。它将从哪里来?
数据科学领导者的培训项目在哪里?希望不是策略。
人们,让我们感激我们是多么幸运!不知何故,优秀的数据科学领导者确实存在,技能也在那里。不是有效获得的技能,因为双重掌握是连续获得的,也许很痛苦,但仍然是正确的技能。我希望你和我一样强烈地感受到这种紧迫性。我们中少数几个经历了艰难困苦的人需要开始用更好的方式训练我们更多的人。
就我而言,我承诺尽我的一份力量。在过去的几年里,我一直在谷歌努力培养一种新的思考者,定位于作为团队的一部分,有效地领导或工作,专注于将数据科学应用于实际问题。为了培养正确的技能,我们从数据科学和工程中汲取了一些想法,并用行为科学和管理科学对其进行了补充。结果只是看起来跨学科,直到你看到共同的核心:决策和驱动它们的信息。这就是为什么我们开始称它为决策智能工程(不过如果你愿意,你也可以把它想成应用数据科学++的原因)。
让我们培养一种新的思考者:拥有让数据科学团队成功的技能的决策者。
我一直认为,数据科学是一项受益于技能多样性的团队运动,所以我设计了我们的培训计划,以鼓励各种背景的人参与进来。事实证明,伟大的数据科学领导者不一定是被超越的数据科学家。
我为我们在谷歌员工中培养这些技能所取得的成就感到骄傲…但这还不够。没有必要让每个人都依赖快乐的意外和完全沉浸在一个以上的学科中来建立相同的技能。我希望阅读这篇文章至少能激发一些了解数据科学决策者技能的人和我一起认识到数据科学本身就是一门学科,并尽可能广泛地分享我们的智慧。
面向企业的数据科学素养
原文:https://www.dominodatalab.com/blog/data-science-literacy-for-the-enterprise
By Zachary Brown, Lead Data Scientist, S&P Global Market Intelligence on February 07, 2019 in
数据科学、高级分析和开源技术提供的优势对于现代企业在快速发展的技术环境中保持相关性和竞争力至关重要。创业公司正在通过利用新的技术和分析技术来改变客户对整个行业的期望,从而颠覆各种行业。许多较大的组织可能难以采用新的分析方法,而广泛采用的最佳方式是通过在业务的各个方面利用分析的文化转变。
无论是大公司还是小公司,都在成倍增加他们的数据科学团队,以此来转变他们的业务,并通过数据科学推动整个企业的技术变革。但是仅仅雇佣数据科学家并不能保证大多数公司设想的范式转变。这一关键转变的关键是数据科学素养。
S&P Global-信用评级、数据和分析、研究和基准的金融服务提供商-我们以提供重要见解的悠久历史而自豪。该公司的历史可以追溯到 1860 年,当时 Henry Varnum Poor 出版了一本美国铁路行业投资者指南,为投资者做出明智的投资决策提供了重要的见解。
该公司诞生于数据和分析流程的智能、有效的应用,现在我们可以在任何地方用预测模型补充这些应用;我们的核心竞争力围绕着我们的模型驱动能力。正如许多公司可能意识到的那样,保持和发展这种方法不仅仅意味着数据科学家团队处理数据——要真正实现文化变革,我们需要用基本数据科学素养武装员工。
从哪里开始?
首先,我们必须决定用什么机制来对分布在全球各地的 17,000 名员工进行数据科学教育。我们需要弄清楚如何实施一个能够以有趣和互动的方式扩展的培训计划。我们还需要考虑对广泛的参与者群体有价值的一套正确的资源和材料,教育那些数据科学新手,同时也为更高级的学习者提供有用的实践经验。
我们决定提供一种数据科学教育的混合方法,利用大规模在线开放课程(MOOCs)中提供的开源学习材料,并补充额外的内部资源,将所有课程模块与特定的“熟悉”应用联系起来。为此,我们确定了本次会议的四个主要组成部分:
- 来自开源 MOOC 的视频和练习
- 由内部专家主持的实时互动审查会议
- 促进参与者之间讨论和交流的在线论坛
- 在线数据科学*台,用于促进技术材料的管理、交付和执行
在选择正确的课程时,我们开始寻找一个既能提供足够的广度和深度来吸引广泛的基础,又不牺牲技术严谨性的课程。信不信由你,虽然数据科学对业务至关重要,但对普通员工来说,学习数据科学可能不是最大的吸引力。
我们的目标是确定一门与员工工作优先级相一致的课程,以及一门我们可以将领域和公司特定信息融入其中的课程。在互动会议中,我们邀请了 S&P 全球市场智能数据科学部门的成员来主持讨论,并展示现有的计划,以展示数据科学技术目前在组织中的应用情况。我们还希望找到一个免费且易于使用的论坛*台,让参与者与讲师互动,更重要的是,与其他参与者互动。最后,我们需要从技术上简化员工设置数据科学环境并获得所需的技术支持。
我们是这样做的。
- 我们求助于 Udacity 的开源课程 UD120:机器学习简介进行基于计算机的指导培训,包括讲座(视频)和编码练习,员工在 GitHub 库中进行了为期 10 周的培训。
- 我们利用 Piazza 的免费 Q & A *台来促进员工之间的异步沟通和协作。
- 我们主持了每周一次的现场会议,进行同步评审。在这些会议期间,我们做了几件有助于评估项目进展和持续成功的事情:
- 复习本周的材料。
- 提供补充信息或推荐资源,为员工提供进一步研究的话题。
- 回顾编码练习并解决任何障碍或挑战。
- 参与互动、开放式的问答。
- 将课程学习和练习应用到标准普尔的实际数据科学项目中。
- 我们求助于 Domino 数据实验室*台,从本质上充当支撑这个程序的“粘合剂”。多米诺:
- 托管我们的课程材料。
- 为员工提供了一个共享的工作*台,使他们能够根据需要轻松增加和减少计算资源,并促进轻松的协作和结果共享。
- 简化了向员工“推送”课程材料更新的流程。
最*怎么样?我们看到了什么结果?
该计划首次运行了 10 周,在此期间,来自多个全球部门的 130 多名员工参与其中。在整个 10 周中,在每次指导学习会议和在线论坛中,参与都很活跃。
我们一直在收集非常积极的反馈。以下是我最喜欢的一些参与员工的轶事:
- "复习课是有用的,因为它指导了课程,澄清了中途出现的疑问。"
- “很难在 10 周内涵盖数据科学模型的广度。我认为数学课和编码实践的结合是理解的最好方法。”
- “我认为技术练习很好地激发了你的好奇心,人们会一头扎进有趣的部分。引导式会议非常有利于看到真实世界的例子,也是提问的机会。”
- “我喜欢听不同的数据科学家解释概念。视觉效果很棒,回答问题也很有帮助。”
在所有 17,000 名 S&P 员工都具备“数据科学素养”之前,我们还有很长的路要走,但我们已经有了一个良好的开端,并期待看到该计划如何培养一种比我们今天更受模型驱动的文化。
数据科学模型互为基础
原文:https://www.dominodatalab.com/blog/data-science-models-build-on-each-other
亚历克斯·利兹,在多米诺数据科学弹出窗口上展示了“建立本地客户模型”。Leeds 讨论了 Squarespace 数据科学团队如何构建模型来解决关键的业务挑战,以及如何利用复杂的组织结构来加速数据科学工作。这份 Domino 数据科学领域笔记提供了他演讲的亮点和视频剪辑。完整的视频记录也可用于观看。此外,如果您想了解关于在整体数据科学实践中构建和管理模型的更多信息,那么可以考虑 Domino 的模型管理论文或大规模管理数据科学的实践指南。
数据科学实践
在“建立本地客户模型”中,Alex Leeds 讨论了 Squarespace 数据科学团队如何应对业务挑战,或者说,“我们应该在哪里、在哪些城市进行有针对性的本地化营销”?在几周内,数据科学团队通过构建一个模型来解决业务问题,该模型可以预测成功,并使业务利益相关方能够确定关注哪些城市。数据科学团队能够在几周内构建预测模型(和许多其他模型),因为他们已经有了一个生态系统。包括但不限于数据科学实践的生态系统。
Leeds 指出“数据科学实践依赖于大量其他步骤”,包括数据收集、定性研究和市场测试(即每年 30 多次实验),这些步骤“也为我们在模型中进行的分析提供了素材”。利兹还指出,数据科学家和数据工程师“并肩”工作是“公司的巨大优势”,因为它使数据科学家能够“非常快速地获得数据”,并“对我们正在利用的信息充满信心,甚至只是开始”。在演讲的结论中,利兹还指出,“有许多模型进入了分析”,如何“数据科学模型相互建立”,“模型多样性迫使技能集多样性”,“并与组织流程互动”。
处理业务问题或挑战
在演讲中,Leeds 概述了数据科学团队解决业务问题的方法。该方法包括确定 Squarespace 表现良好的城市,“收集特定地点的数据”,“确定绩效的驱动因素”,以及“利用这些驱动因素来制定商业战略”。这种方法使该团队发现,在城市层面“重要”或预测成功的一些因素包括 30-44 岁之间的人口比例。潜在的上下文含义是,这个年龄范围内的人正在建立业务,并使用网站开展业务。这是一个有趣的发现,因为利益相关者的假设是更年轻的人口统计将是成功的预测者。利兹还指出,有许多预测成功的附加指标,但只有两个附加指标包括拥有研究生学位的人的百分比和食品车的数量。
虽然预测指标很有趣,但是 Squarespace 是如何利用这些结果来影响业务战略的呢?利兹指出,这些结果有助于 Squarespace 确定关注哪些地点。
数据科学实践的意义
Leeds 以这个项目作为讨论“在实践中做数据科学”的载体来结束他的演讲。利兹指出,虽然该团队建立了一个模型来预测成功,但“有许多模型进入了这一分析。”
他指出“模型建立在彼此的基础上”,并使团队能够“进行非常快速的分析”,并为组织提供具体的建议。利兹还主张在模型集合中有“一些有趣的多样性”。他还指出
这些数据来源和模型来源将会创造出这个有趣的组织过程。您需要有足够接*您的组织的某些分支的数据科学家来构建知情的模型。甚至在这个非常干净、非常简单、非常普通的问题中,我们在不同的城市做得怎么样?我们下一步应该关注哪里?….我们实际上描述了一个系统,它在组织结构和实践方面都非常复杂。”
结论
在“构建本地客户模型”中,Alex Leeds 深入探讨了 Squarespace 数据科学团队如何通过构建模型和组织结构来加速数据科学工作,从而解决关键的业务挑战。虽然这份 Domino 数据科学领域笔记提供了演讲的亮点,但的完整视频可供观看。此外,如果您想了解在整体数据科学实践中构建和管理模型的更多信息,那么可以考虑 Domino 的模型管理论文或大规模管理数据科学的实践指南。
^(Domino 数据科学领域笔记提供数据科学研究、趋势、技术等亮点,支持数据科学家和数据科学领导者加快工作或职业发展。如果您对本博客系列中涉及的数据科学工作感兴趣,请发送电子邮件至 writeforus(at)dominodatalab(dot)com。)
数据科学不仅仅是机器学习
原文:https://www.dominodatalab.com/blog/data-science-more-than-machine-learning
本 Domino 数据科学领域笔记提供了来自 Addhyan Pandey 的 Domino 数据弹出式演讲“在汽车行业利用数据科学”的亮点和视频剪辑。Addhyan Pandey 是 Cars.com 的首席数据科学家。这篇博文中的亮点包括 Pandey 使用 word2vec 来识别*台上的重复车辆,他的数据科学团队如何将预测模型称为“数据产品”,以及该公司的整体数据科学方法。虽然这篇文章涵盖了亮点和视频摘录,但他的演讲的完整视频是可用的。如果您对此类内容感兴趣,请访问 Domino 数据科学弹出播放列表或考虑参加 Rev 。
汽车行业的数据科学
Cars.com 首席数据科学家 Addhyan Pandey 在他的演讲中探讨了数据科学如何在整个公司实施,以及数据科学如何不仅仅是机器学习,“在汽车行业利用数据科学”。潘迪报道如何
- 一个电子商务网站的核心价值主张是他们的推荐系统的相关性
- 他在公司开始工作时,使用了 word 2 vec T1 来识别*台上的重复车辆
- 数据科学团队将预测模型称为“数据产品”
- 该公司目前的数据科学工作方法包括建立“一个强大的产品,建立一个可扩展的、准确的、真正具有非常低的计算时间的模型”。
当问题不仅仅是联系买家和卖家时
Pandey 以讨论 Cars.com 的收入流如何包括订阅和广告模式开始了他的演讲。因此,数据科学团队试图解决的问题不仅仅是连接买家和卖家。目标是“管理汽车的整个生命周期”,与电子商务市场中的买家和卖家进行多点接触。Pandey 指出,推荐系统,尤其是其相关性,是确保用户继续参与电子商务市场的核心价值主张。
使用 word2vec 进行关联
潘迪指出,当他开始在 Cars.com 工作时,他看到“一大堆文字”的卖家信息,“如果我要买车,我永远不会去读这些信息,因为我在一个能给我提供精确信息的网站上接受过培训……”甚至要弄清楚“两辆相似的车,真的很难”。这是一个相关的建议问题。潘迪决定通过“把所有这些单词放在一个向量空间中……”来解决这个问题。将所有这些词聚集在向量空间中,并得到特定车辆的向量”。这使得数据科学家可以“计算两者之间的余弦相似度”。此外,识别*台上的重复车辆是使用 word2vec 的额外好处。
作为数据产品的预测模型
Pandey 还在演讲中指出,“当你谈论数据科学时,只谈论特定的模型是不公*的…如果我只是建立一个模型,而不知道如何实现它,我就没有公*对待整个系统。我们把所有的预测模型都称为数据产品”。他讨论了三种数据产品,包括
- “数据管道化,基本上是聚合,为数据科学家做大量的数据准备,这样他们就不会浪费 80%的时间,而且还能很快提高整体实时推荐预测。”
- “算法本身。数据科学家真的花了很多时间试图为给定的问题建立最佳模型。这是我们第二大技术产品。”
- “第三个问题是,一旦你有了这个,你如何扩展它?你如何确保你的系统完美无缺?或者如果不是完美无缺,你怎么能达到艺术完美的特定状态?这就是我们的机器学习*台。这基本上是扩展所有这些预测模型,供每个人使用,这是我们在组织内民主化或去中心化数据科学的另一种方式。”
数据科学的“全貌”。很复杂。
在演讲的最后,Pandey 讨论了他对数据科学的观点是如何在这些年里发生变化的。2011 年,他认为数据科学是一种预测模型。然后,随着他与更多的团队合作,他扩展了自己的视角。2017 年,他指出数据科学的“全貌”更加“复杂”,数据科学团队需要“构建一个强大的产品……构建一个可扩展、准确、计算时间非常短的模型。”
虽然这篇博文涵盖了潘迪演讲的一些重点内容,但完整视频可供观看。多米诺数据科学事件的其他录音演讲也可在获得。但是,如果您更喜欢亲自参加活动,那么可以考虑参加即将到来的 Rev 。
^(Domino 数据科学领域笔记提供数据科学研究、趋势、技术等亮点,支持数据科学家和数据科学领导者加快工作或职业发展。如果您对本博客系列中涉及的数据科学工作感兴趣,请发送电子邮件至 writeforus(at)dominodatalab(dot)com。)
数据科学的过去和未来
原文:https://www.dominodatalab.com/blog/data-science-past-future
Paco Nathan 在 Rev .上发表了“数据科学,过去&未来”这篇博文提供了一个简明的会议摘要、一段视频和一份书面文字记录。
会话摘要
在 Rev 的"数据科学,过去&未来", Paco Nathan 涵盖了对几十年来一些常见的有影响的主题的背景洞察,也提供了一个帮助数据科学家、研究人员和领导者考虑未来的“镜头”。通过这个镜头,行业能够吸收和重复一些当前的“热点问题”,并推断在其工作过程中可能出现的决策、结果和见解的潜在影响。Nathan 还提供了最*调查的摘录和见解,以帮助提供额外的背景。
会议的主要亮点包括
- 数据科学作为跨学科领域的出现——来自工业界,而不是学术界
- 挑战现状的进步遵循类似的公式,包括“硬件能力以戏剧性的飞跃发展”;“作为响应,软件层提供了新型的控制系统和概念抽象”;总之,这些表现为计算资源和数据速率的大幅增长”;以及“行业团队利用日益先进的数学来解决新颖的商业案例”。
- 为什么在机器学习的背景下,数据治理不再是一个“枯燥的话题”,以及《华尔街日报》的“数据治理全球清算”如何与“利用数据科学团队进行新业务案例的奖金”潜在相关。
- 如何“看到数据科学的价值并了解模型的企业高管,他们现在正在加倍下注,并投入更多资金。”是调查中的一个意外收获
https://www.youtube.com/embed/dwvbKzdq1NI?feature=oembed
副本
帕科·内森:
谢谢你,乔恩[鲁尼]。我真的很感激。我很荣幸能够在这里发言,也很高兴能够参与 Rev。这是一种*衡。今年 Rev 真的发出了一种声音。这是关于谈话和讨论的混合。是关于出席者的。这是关于观众和走廊谈话。这是商业、工程、数据科学等领域中重要事物的完美融合。很少遇到这种情况,我们真的很兴奋。我肯定想提供一些呼喊。你也看到了乔恩在这里,做着出色的主持工作。此外,Karina Babcock 是我们的另一位联合主席,她真正将所有这些整合在一起,值得我们鼓掌。我应该提一下卡瑞娜刚发来的统计数据。我们已经有将* 700 人注册了。我们有 668 人注册。只有大约 600 人登记并获得了徽章...这是我们去年的两倍多,增长非常好。恭喜你。
回到我的话题。如果你想看幻灯片,它们会在 Twitter 上。如果你有智能手机,使用二维码,你可以在你的手机上加载它。会有很多幻灯片,可能比需要的材料更多,但如果你想深入了解一些背景知识和很多链接。我有一种预感,其中的一些链接你以后可能会想追查。
我做的很多工作是开发主题,走出去进入行业,找出什么是有趣的项目,这些项目意味着什么样的变化,谁是改变发生的人,他们有哪些共同的问题,他们正在努力解决,我们如何才能让这些问题浮出水面?这是我和多米诺一起做的事情之一。我做了一个每月专栏,试图揭示我们看到的一些主题。
我想展示一下我们的过去。在数据科学领域,肯定还有其他人对此谈得更多,我们将指出他们。但是,我将提供一个视角来审视数据科学在过去几十年中发生了怎样的变化,然后将其应用于四个紧迫的问题。我们现在正在应对的一些非常棘手的问题,这对我们未来的发展意味着什么?
首先,如果你没看过这个,约翰·图基...对了,我们有给约翰·图基的袜子。约翰·图基是贝尔实验室的数学家。早在 1962 年,他写了一篇名为“数据分析的未来”的论文简单来说,在 1962 年,甚至很多大学都还没有电脑。能够使用机器来处理数据的想法还是比较新的。这是未来。对很多人来说,这几乎是科幻小说。即将到来的事情的影响,能够进行大量的数据分析,进行大量的数据处理,以及将会产生什么影响,这些都是非常新的。图基完成了这篇论文。这是一本很棒的读物。这是 50 年前,差不多 60 年前,但他谈论的是跨学科的东西。他说这不仅仅属于统计学。如果你看看图基,为什么他会在那里,他在统计上做了令人难以置信的工作。
他也确实提供了很多关于数据可视化的早期想法。如果你读过《爱德华·塔夫特》或者上过这门课,你会听到关于约翰·图基的一切。但问题是,新兴事物是跨学科的。它涉及大量的计算机械和自动化工作。它涉及到许多有趣的新东西,即数据管理。它涉及到大量的应用数学工作,一些统计学和可视化的深度,以及大量的沟通技巧。其他谈论过这类历史的人要多得多。此外,今天晚些时候,我们将邀请《纽约时报》的克里斯·维金斯和哥伦比亚的记者发表演讲。克里斯已经做了出色的工作,记录了许多深入的历史,现在也在教授这方面的知识。我也绝对推荐克里斯。
我最*做了“五十年的数据管理和超越”,它着眼于大致相同的时间段。几十年来,我们看到,在每一个十年中,行业都面临着数据管理业务需求方面的挑战。大约每十年就有新类型的框架出现,以满足这类需求。借用马歇尔·麦克卢汉的一句话,如果你听说过“媒介就是信息”这个委婉的说法,真的,这是一个非常密集的陈述[听不清 00:05:09]。麦克卢汉所说的是,当新媒体被引入时,它不会取代以前的媒体。这只会让事情变得更复杂。从我们管理数据的历史来看,我们也看到了这一点,随着新型数据管理框架的出现,它们并没有取代以前的框架。
可以说,60 年代的层次数据库是最重要的数据库之一,现在普遍用于信用卡交易。关系数据库并没有取代它们,但问题是它们使它们变得更加复杂。了解如何以及为什么使用不同类型的数据框架,以及这对您所做的决策、结果以及您提出的见解有什么影响。
这里有几段历史。还有很多其他的。然而关键是,这是来自工业界,而不是学术界。在某种程度上,学术界仍在努力将数据科学融入某种学科。甚至我在大学里看到的一些很棒的课程,他们会把它和这边的电子工程或者那边的统计学联系起来,有点把它束之高阁。但这是跨学科的,我们会详细讨论。
在过去的 60 年里,自从图基首次描述了一些这种现象,有一种效应一次又一次地发生。你可以用它作为一个镜头,来分析在这段历史中的任何一个特定的时间点,或者仅仅是未来会发生什么。这个镜头分四步描述。第一,硬件能力在发展。它们通常以脉冲形式出现——有阶跃函数。这是因为硬件能力是物理学中非常基础的工作,也是研究和电子工程中的大量工作。但是,在材料科学方面也有很多工作要做,这并不是一步一步来的。这是一步一步来的。
然后软件会适应。软件在很多方面对硬件发生的事情做出反应。软件不断发展,出现了新的抽象层。作为一名计算机科学家,我们一直在兜售不同类型的抽象层以及不同类型的控制系统的概念方法。总之,这些因素导致计算能力、CPU、内存、网络、存储等方面的激增。与此同时,我们看到了数据速率的跃升。随着时间的推移,这两者逐渐增加。
行业对此的典型反应是将越来越多的高级数学应用于业务用例。最终,将更高级的数学放入硬件层在经济上变得非常重要。你知道,举个例子,如果你在 20 年前谈论预测分析,这个领域的主要人物会把你笑出房间。他们会说,“你知道吗?预测分析,是的,没那么多。”我的教授们,像布拉德·埃夫隆和其他人,也因在这个问题上犯了一些真正的 T2 式的错误而出名。
如果你 10 年前出去谈论机器学习在工业中的重要性——我当时就在那里——你会遭到很多反对。人们会说,“你知道,也许是谷歌、亚马逊。但是对于大多数企业来说,使用机器学习...不完全是。这是不可能的。你知道,像电信和保险这样的公司,他们并不真的需要机器学习。”但这改变了。
如果你五年前在工业领域谈论图形和图形算法以及图形数据表示的重要性,因为大多数商业数据最终都是某种形式的图形。你要谈论数学,高级数学,它需要在图形硬件的底层,你会遇到巨大的阻力。我知道,是我干的。因为你开始讨论,不仅仅是矩阵和向量,你会讨论一些叫做张量和张量分解的东西。五年前,人们笑了。这就像为什么商业人士会关心一个叫做张量的东西?现在,谷歌花了多少,10 位数营销 TensorFlow?我不知道。抱歉。如果我弄错了,向谷歌道歉?这种事情一次又一次地发生。
其中一个应用是关于数据治理。同样,我们在 Domino 上做了一个关于这个的专栏。此外,在过去的一年里,我为奥赖利做了一份行政简报。如果您愿意,可以查看这些链接,其中有更多关于数据治理的详细信息。我知道了数据治理,这是一个有趣的想法,但有很多错误的开始,有点枯燥的话题。但在过去几年机器学习的背景下,这突然不是一个干巴巴的话题了。这突然成为我们正在处理的最重要的问题之一。
让我们深入研究一下。顺便说一下,奥赖利的本·洛里卡给我布置了一个课题,研究...数据治理正在发生什么变化?我们可以从一些历史背景中得出这个结论。早在 70 年代,我们有大盒子,大型机。我从 70 年代开始编程。我不知道是否有人在 70 年代开始编程。拜托了。这会让我感觉好点。谢谢你。太好了。好吧。我感觉好多了。我们有这些大盒子,它们没有明显的区别。你在这些大机器上运行应用程序,应用程序会调用操作系统中的一些库。但是,就像每个应用程序都运行一些数据一样,如果需要的话,还会运行一些网络,这并不是真正的差异化。他们有其他终端设备,如读卡器,可能还有绿屏或电传打字机。这些都是通过专有线路连接的,事情就是这样。
到了 80 年代,盒子变得与众不同。你有不同类型的服务器在运行。他们中的一些人开始充当客户,他们可以通过开放的网络标准打电话。现在,以太网出现了。你有开放的协议标准,一个服务器可以调用另一个服务器并访问 API。你得到了一些区别,你得到了这个大的客户机/服务器体系结构。当我在研究生院的时候,我们系见证了两个新想法的推出。其中一个,开始有点不确定,但后来变得很大,它被称为 SUN 工作站。另一个,有点不确定,他们被大学查封了,但是它变得很大,所以大学获得了相当多的股权。它叫做思科。与此同时,楼上有个家伙,温顿·瑟夫,他创造了这个叫 TCP/IP 的新东西。作为一名研究生,看到许多这样的东西被发射出去是一种乐趣。有一点数据治理,因为现在有数据库服务器,但仍然不多。
进入 90 年代,我们从网络转向了互联网络。我们有 TCP/IP。我们有很多有趣的网络协议,这导致了事物的爆炸,万维网等等。不仅仅是客户机/服务器,现在我们有了更多的区别。这变得更加复杂。我们有三层,三层。表示层是关于,比如说,web 浏览器,对,你可以在 web 浏览器中做什么。但是业务逻辑越来越多地回到中间层,也称为应用服务器、web 服务器,后来被称为中间件。然后在底层,你有你的数据管理,你的后台,对不对?除了数据库服务器,您还拥有数据仓库和商业智能。一些数据治理开始真正出现在那里,但它实际上更侧重于数据仓库。
后来事情发生了变化。进入 2000 年,你可以确定一个时间,1997 年第三季度,有四个团队确定。到那时,他们都得出了同样的结论。他们追求几乎相同的解决方案。回去真的很棒,再一次,在幻灯片上追踪链接。 Greg Linden 关于拆分亚马逊网站的文章。埃里克·布鲁尔谈论 Inktomi,雅虎的起源!搜索。杰夫·迪恩谈论谷歌的起源,这甚至让我无从下手。然后我的朋友 Randy Shoup 讲述了易贝是如何从四台服务器发展成多台服务器的。
事实是,他们都认识到,在当时,当您拥有数据库服务器时,随着您的业务增长,您将获得越来越大的硬件设备,并且您将从 Oracle 获得越来越大的许可证。他们意识到,电子商务和他们看到的增长率,第一,他们不能得到足够大的盒子。第二,他们买不起甲骨文的许可证。相反,这四个团队,他们所做的就是说,“好的。让我们把这个庞大的整体式 web 应用程序拆分开来,在数千台商用硬件服务器上运行,主要是 Linux。我们会有服务器农场。现在,服务器农场的问题是,这种商品硬件,他们经常摔倒。你想有很多关于他们的日志,只是检查他们做得怎么样。
凭借这一点,如果你获得客户互动的日志文件,你将它们聚集起来,然后你获得聚集的数据,对它们运行机器学习模型,你可以产生数据产品,你将这些数据产品反馈到你的网络应用中,然后你就可以在业务中获得这种效果。这导致了吴恩达著名的“数据的良性循环”这就是云的起源,服务器农场。这就是大数据的起源。这是机器数据世界中数据快速增长的起源,也是机器学习的商业用例。
现在,这里发生的另一件事是这是 2000 年。这就是 cloud 推出的时候。我们在建筑领域得到了更多有趣的工作。还有许多有趣的威胁,以及安全方面正在发生的变化。那时我在网络安全部门工作。你有id,你有嵌入式应用网关,你有模拟人生和其他的东西。更多的智慧被推到了边缘,这是一个主题。你还推出了智能手机。有更多的移动设备。这种情况开始变得相当复杂。然而,数据治理在很大程度上仍然在数据仓库之上。然后我们十年后推出。2000 年代末是你开始组建团队和行业的时候,正如 Josh Willis 昨晚精彩展示的那样,你开始组建一些被称为“数据科学”团队的团队。当时,我领导了几个早期团队,被称为“数据科学”。
进入 2010 年,我们有了数据科学实践,我们有了大数据工具的发展,我们有了大数据的更复杂的使用以及云中正在发生的事情。你开始看到点解决方案。就在他们 2012 年推出之前,我去星巴克和 Alation 的创始人见了一次面,画的是众所周知的餐巾背面。基于大数据的数据治理已经开始发生。你也看到了数据科学更具战略性的应用。这些工作流将反馈到您的业务分析中。安全性继续发展,云继续发展,越来越多的移动设备。
然后我们滚动时钟到现在,我们在哪里。这是一个更加复杂的景观。进入 21 世纪 20 年代,这是托马斯和亚历克斯在小组讨论中描述的非常精彩的内容。我喜欢那样。他们提到了许多重要的观点。事实上,我的演讲更多的是解开这些主题,并展示其背后的时间线。我们有这个复杂的环境,大量的数据共享,数据经济,外部数据,大量的移动设备。现在,我们有低功耗的设备和推理在上面运行。你可以使用 TensorFlow.js,将深度学习模型的资源占用降低 5-6 个数量级,并在甚至没有电池的设备上运行它。
好吧,我们有一个非常复杂的景观。it 中的数据治理部分变得越来越重要。所有这些都有合规性,因为这现在真的很重要,但是,数据治理解决方案,他们的点解决方案,有些用于移动设备,有些用于边缘推理,有些用于边缘安全和 cdn,如 Cloudflare 和 AWS Shield 等。有的针对大数据,有的针对数据仓库等。没有共同之处。那里真的没有技术栈。有一些正在发展的开放标准,但这部分确实需要解决。可以说,这是我们面临的最大问题之一。它也是数据科学的驱动力。《华尔街日报》称 2018 年为“数据治理的全球清算年如果你不知道,2018 年全球有数亿人受到安全漏洞和数据隐私泄露的影响。也是在这一年, GDPR 开始生效。我对受此影响的几家最大的公司进行了视频采访,就在它生效前两天,在伦敦,这很棒。现在,我们有 CCPA 将于明年在加州和美国其他州上线,紧随其后的是 GDPR 风格的法规。
当然,也是在那一年,我们有了关于脸书和《剑桥分析》的整个新闻周期。可以说,许多有趣的基于广告的商业模式和企业监控*台正在浮出水面。你可以在新的周期中看到脸书。你可以看到脸书站在国会前。可以说,甲骨文在这方面是一个更大的玩家,尽管他们在如何做公关方面更老练一些。就企业监控而言,甲骨文可能是那里最大的鱼。
我想说的是,系统架构、驱动软件层的硬件以及威胁和风险方面的整个格局都发生了变化。它改变了我们应对它的方式。你会看到这些驱动因素包括风险和成本,但也包括机会。
这也是托马斯和亚历克斯谈论的一些内容。这些事情改变了我们,改变了我们的行业。事实上,这就是我们如何利用数据科学团队的优势所在。这就是你获得数据科学投资回报的原因。这就是我们现在的处境,这就是我们面临的挑战。
我的同事,O'Reilly 的 Ben Lorica,他和我为 ABC 做了三个关于采用的大型调查,即人工智能、大数据和企业中的云。我们在 Domino 上有一篇关于这个的文章。还有,这些调查,这些都是迷你书:如果你想抢,都是免费下载的。我们刚做了三个。我们还有另外两个在筹备中。但我们试图做的是一项对比研究。我们试图寻找大鱼,寻找采用数据科学的企业公司,那些成功的,已经在生产中进行机器学习模型五年或更长时间的公司。让我们来对比一下这些人和那些刚刚开始的人。你知道,什么是德尔塔?我们能从中学到什么?
我试图将一些高层次的发现描述为生存分析。你可以考虑有三个水桶。有些公司基本上是不成功的。他们还没有真正进入这个领域。还有一些公司已经做了几年了。他们正在发展他们的实践。他们正在评估和采纳。还有一些公司,他们在机器学习和生产方面已经取得了五年或更长时间的成功。每个桶的共同点是什么?
当你看到落后者,不成功的人,排名第一,他们被埋在技术债务中。如果你看一下他们的数据基础设施,你会发现他们抱怨的一件事,尤其是他们在协作工具方面有太多的技术债务需要解决。他们的数据基础设施不支持它。他们正在与数据孤岛作战。事实上,这需要数年时间——这种企业转型需要数年时间来修复。那么问题是,即使他们今天开始,也需要很长时间。问题是他们今天不会开始,因为从高层来看,公司文化没有认识到这种需要。这不是当务之急。这是来自高层管理人员、董事会等。如果你没有这种公司文化,你就无法跨越这些障碍。即使你有高层的支持,另一个问题是,他们没有足够的人来有效地管理产品,这些人可以将技术能力转化为商业机会。如果没有这些人在一线单位,这是不会发生的。如果你把这三个挑战加在一起,就会淘汰超过 50%的企业。超过 50%的企业还需要数年时间才能在这一领域具有竞争力。此外,不仅仅是要有竞争力,而且正如过去的专家小组所讨论的那样,要考虑业务效率。他们需要投资多少亿美元,与那些拥有先发优势的公司相比,效率如何?他们还需要数年时间才能达到这一点。
如果您查看中间的部分,他们有三个共同的报告内容。一个是数据质量,清理数据,缺乏标记数据。你猜怎么着他们应该对此感到担忧,这是一个大问题。太好了,他们正在努力。他们还抱怨人才短缺。他们就是找不到足够多的有合适技能的人来雇佣,而且他们在现有劳动力的再培训和技能提升方面有困难,这是一个永恒的问题。另一件事,我们去年报道的另一个现象是,一旦你开始做好准备,一旦你完成了桌面赌注,你开始有协作基础设施来展现数据洞察力,有些事情就会浮现出来。你开始注意到,“嘿,我们有一些安全问题。”“嘿,我们遇到了一些数据隐私问题。”"嘿,我们有一些公*和偏见的问题."“嘿,我们有一些其他的道德和合规问题,我们将不得不处理这些问题。”你会陷入很多资本和时间的竞争中。
现在,深入到成熟的部分,他们报告了两个共同点。一个是关于工作流程的再现性。就机器学习而言,这非常重要,因为你在处理随机系统。所以可重复的工作流程是一个非常困难的问题。另一件事是关于超参数调整。有一些公司,比如 Determined AI,在这方面做得非常出色。这意味着成熟的实践不想把所有的钱都花在云供应商身上。当他们训练大量深度学习模型时,他们希望做一些更有效的事情。成熟阶段的问题是优化,而不是阻碍。这些都是很好的问题。
所以这是一种观察公司和评估的方式,他们在哪里?他们面临的困境是什么?此外,这也是了解供应商并了解他们正在解决的棘手问题的好方法。这个机会有多大?另一种方法是你可以把它分成不同的部分,看看负债和资产。坦率地说,处于中间的公司,不一定是科技独角兽,它们真的很有趣,因为它们往往有很多拥有领域专业知识的人。他们还倾向于访问大量有趣的数据集,这些数据还没有被货币化。他们有办法,他们有一条路,如果他们想与先行者,科技巨头竞争,因为通常科技巨头不具备该领域的专业知识。
有一些研究——O ' Reilly 正在做这些研究,麻省理工学院斯隆管理学院也做了一些很棒的研究——我在这里总结了一些,并放了一些链接。此外,麦肯锡全球研究所的 Michael Chui 和其他人进行了一项不可思议的研究,这有点可怕。问题是,这些研究是趋同的,它们倾向于显示同样的东西。基本上,在使用数据的公司、了解数据的公司、正确了解模型的公司等方面,富人和穷人之间存在差距。,而且这个差距还在扩大。
现在,在我们的对比研究中,有哪些公司做得很好?他们报告的共同点是什么?第一,他们使用专门的角色。他们已经接受使用数据科学团队和数据工程团队,而不是仅仅说,“不,不,那是业务分析师。”这是一个标记。另一个原因是,Nick 在昨天的主题演讲中提出的观点是,在使用专家、内部数据科学团队方面非常出色。这是游戏中赢家的做法。那些经营不善的公司倾向于依赖外部顾问。
另一件让我们感到惊讶的事情是,更复杂的公司有使用可靠清单的实践。他们以前犯过错误,他们不会再犯同样的错误。当他们在生产中推出机器学习模型时,他们正在整理什么该做,什么不该做的清单。那很好。我真的很高兴看到这一点。实际上,我们对他们的积极主动感到惊讶。第四点是完全出乎我们意料的事情。你知道,通常,当你考虑运行项目、运行团队时,在设定项目优先级方面,在描述项目成功的关键指标方面,这通常取决于产品管理。但就使用数据科学的成熟公司而言,他们更依赖于他们的数据科学领导,而不是他们的产品经理。
再一次深入探究。这意味着,如果你把产品管理从网络应用程序开发和游戏开发中分离出来,并尝试使用这种嵌入式系统?它不起作用。这本书实际上还没有写这个领域的产品管理,尽管 Pete Skomoroch 今天晚些时候会讲,并且肯定会听他讲些什么。他所说的还没有出现在生产线上,但这是必须的。
好吧——这是在哪里发生的?这种差距是从哪里开始出现的?我可以指出 2001 年。非常有趣。首先,有些事情...一件小事叫做。发生的公司破产,只是一件小事。此外,这也是数据仓库和商业智能的全盛时期。我的意思是,可以说,商业智能的概念来自 50 年代末。他们在 80 年代末确实表达得很好,但他们在整个 90 年代得到了重视。这变成了一种嵌入式机构。坦率地说,在早期领导数据科学团队时,您几乎总是不得不与 BI 团队竞争。也是在 2001 年,发表了“敏捷宣言”。这变成了另一种嵌入式机构,一种我们仍在努力的机构。问题是...这里有多少人读过“敏捷宣言?”好吧。我会说大概 20%或 30%。“数据”这个词没有出现,这也不是他们的首要任务。他们没有考虑数据。那是后来才想到的。他们在考虑基于代码的迭代。一代开发人员,他们把数据库等同于关系数据库,这是不正确的。凭借这一点,他们对数据的复杂程度是系统的易读性,关系型的卖点的一部分,等同于数据的易读性,这是不正确的。这是一种搞垮公司的方法。
但是那些有先发优势的公司,他们向 NoSQL 做了一个急转弯。我们在数据科学方面所做的,他们真的抛弃了很多以前的做法。你知道,他们动作很快,而且他们打破了东西。真正的编年史...我喜欢的是 Leo Breiman 的论文,名为“两种文化”,始于 2001 年,他真实地记录了这种巨变,真实地谈论了预测分析的兴起,尽管他的许多同事都嘲笑他。
我对此的描述是,我们已经有了一代主流开发人员,他们被告知编码是最重要的,数据是第二位的,这在业界仍然很普遍。但是,先行者公司已经改变了观念,认为学习是最重要的,数据是一种竞争优势。现在,这两种说法不一致。有很多人相信前者,不会采纳后者。如果他们不相信,你就不能重新训练他们。这是我们正在努力解决的一个根本性的脱节问题。可能对于前一类的人来说,如果他们达不到这个水*,嗯,有一些好的建筑工作。
原因如下,因为企业高管更清楚。看到数据科学的价值并了解模型的企业高管们现在正在加倍下注,他们投入了更多的资金。这是我们调查中最大的惊喜。我们有 5%、10%、15%的预算,然后我们有 20%或更多的 IT 预算投资在机器学习上。在成熟阶段,43%的受访者表示他们将总 IT 预算的 20%或更多用于机器学习和数据科学。这对我们来说是一个非常非常大的惊喜。我想说的是,这个差距正在扩大。如果你没有认识到这一点,并且不理解为什么会发生变化的驱动因素,这个行业将会继续前进。
现在我想转到,我们如何利用这些工具并加以应用?我有四个场景和一些有争议的话题,但希望能提供一个基于我们从哪里来的视角,来看它是如何解决的,以及它在未来会走向哪里。
第一个是关于公司文化。再说一次,谈论高管...去年 12 月,我参加了世界经济论坛的一个研讨会。我们为今年早些时候在瑞士举行的达沃斯会议制定了人工智能议程。我们在这方面的许多运营原则都是基于这样的发现,当你去 50%或更多的企业时,那只是不了解机器学习,问题在高层,在执行人员中的人,甚至更多的是董事会。我提到我在 70 年代开始编程,但是这些人可能比我老。事情是这样的,他们已经了解了六个适马,他们在此基础上建立了自己的事业。他们了解了精益。他们学到了很多需要你摆脱不确定性的过程。但现在,他们被告知这些更年轻的科技独角兽正在追赶他们,他们正在使用机器学习,而董事会并不理解这一点。你知道,这些是概率系统。这怎么可能有意义呢?他们被告知必须接受不确定性。这说不通。但问题是,如果他们不果断采取行动,他们的竞争对手就会采取行动,当然监管者也会采取行动。
有一些很棒的声音在谈论这个。雅各布·沃德,他是《大众科学》的资深编辑他现在在斯坦福大学。雅各布·沃德是第一个...除了皮特·斯科莫罗奇,这两个人最先提醒我,丹尼尔·卡内曼和他的同事才是真正遇到这个问题并描述它的人。我强烈推荐 Jacob Ward 谈论行为经济学对基于数据的决策的影响。另外,另一个真正有趣的人是凯西·科兹尔科夫。她是谷歌云的首席决策科学家,她有一些关于经验教训的精彩演讲,在谷歌部署机器学习时犯的错误。谷歌能从他们在机器学习上的错误中学到什么?这如何适用于其他公司的决策呢?对此最好的总结来自 Ajay Agrawal 代表麦肯锡撰写的文章,他谈到了决策的分解,以及如何让人和机器的团队合作做出大规模决策。这里的要点是,我们在拆分决策方面存在很多问题。行为经济学是这方面的北极星。
在公司治理方面,我们有很多工作要做。好消息是,对于我们这些做业务开发的人来说,你总是想在有利的时候卖出。好消息是一半的可用市场甚至还没有开始。太好了。坏消息是,对于我们这些使用 GPT 和 J 曲线等工具做一些未来情景的人来说,当你开始把数据和研究放在一起时,真的有一个交汇点。仅仅过了四五年,富人和穷人之间的差距就变得至关重要。那些还没有开始的公司,他们真的太落后了,不值得投资。他们变得很多..嗯,这可能表明很多 M&A 活动。你知道,其他更进步的大公司会吞并他们来获得客户。这是一条不归路。另一个例子是大量的需求,就像大卫·多诺霍在他的数据科学史中谈到的需求迷因,数据科学的工作迷因。那个位置很好。将来我们会有工作的。
好吧。接下来,如果我能通过这里…一个不同的场景。其他四个中的一个,更有争议。是关于硬件的。硬件发生了什么变化?这可能是我遇到的最大阻力,但也有一些比我更著名的演讲者开始使用它。在过去的 20 年里,我们一直在软件工程中学习硬件,处理器的硬件形式并没有真正改变。因为摩尔定律,我们只会得到更好、更快、更便宜的处理器。看都不要看。我们有 Java 和 JVM 语言。我们根本不需要探测硬件。这不是一个真正的问题。我们有虚拟化。你知道,只是...不要在意。问题是这样的。硬件比软件发展得更快。软件比过程发展得更快。你知道,在过去的 20 年里,我们一直被教导在软件工程中,过程是一把大伞。你可以把它应用到很多不同种类的项目中。但这一点以及硬件方面的事实都变了。
现在,硬件发展更快。当然,在处理器方面,你可以看到 GPU...Nvidia 真的很幸运有 GPU 在那里,他们不明白为什么他们突然变得流行机器学习,但它对他们有利。但不仅仅是 GPU,还有 TPU、IPU、DWPUs 和一系列 ASICs。已经有一些非常有趣的公司开始这样做了。这不仅与处理器有关,还与交换机结构中发生的事情有关。
如果你看看 TensorFlow 的一些起源, Jeff Dean 的早期谈论,他们谈论使用新型网络设备,不一定使用 TCP/IP,甚至更远。实时流传输的延迟可以达到亚毫秒级。这也是被驱动的原因...就像亚历克斯在上次演讲中提到的。它还与内存结构有关,英特尔正在与项目 Arrow 合作,在大型内存结构上使用 FPGAs 作为智能前端,以及由此可以获得的令人难以置信的效率。摩尔定律已死,但还有希望。有一些项目,比如 Project Jupyter——就开源协议而言,Jupyter 的开放标准部分比其他许多项目都更能说明问题。Apache Arrow 是我在 Apache 最喜欢的项目,它真的在那里的驾驶座上。但是也要看看加州大学伯克利分校里塞实验室和整个射线星座以及他们在做什么。这些项目非常了解这种变化,硬件比软件移动得快,比过程移动得快。好吧,我还有一点时间。
2005 年,一位同事搬到了西雅图,他正在做一个新项目,他一直打电话给我,问我一些关于一种新服务的奇怪问题。我对此感到困惑,但我试图做这件事的试验品。然后在 2006 年,他们告诉我去看看一个网站,注册一个东西。我做到了,不经意间成为了亚马逊之外最早做 100%云架构的三个人之一。我的团队是许多早期 AWS 服务的试验品。我签了很多保密协议。我和亚马逊的关系由来已久,但我能说的也就这么多了。
开始计时。2006 年底,我们在管理一些 NLP 工作流时遇到了麻烦。其中一个工程师建议了一个刚刚出来的新的开源项目,我们成为了它的早期用户之一。它被称为 Hadoop。然后我们在云中运行 Hadoop 遇到了一些瓶颈。2008 年,有一张 JIRA 门票,作为一名工程经理,我给伦敦一位名叫汤姆·怀特的年轻工程师开了一张 3000 美元的支票,他推动了一项修复工作。我们能够获得在云中运行 Hadoop 的效率。然后我们在亚马逊的朋友打电话来说,“嘿,你已经有了云中最大的 Hadoop 集群。”我们成了什么的案例研究...当时它被称为“157 项目”——你仍然会在文档中看到它,但它被重命名为弹性 MapReduce 。
大约一年后,伯克利...在这个领域成长起来的我心目中的英雄之一是戴夫·帕特森。Dave 带领他的研究生采访了许多与云有关的人,许多不同的竞争对手,并试图了解正在发生的事情。他们写了这篇论文,这篇论文是有先见之明的。它阐明了未来 5 到 10 年云计算将会发生什么。它就这么搞定了。我被邀请去评论它,然后在伯克利做了一个客座演讲。在我评论了戴夫·帕特森的论文后,你可以看到一段视频,视频中我被戴夫·帕特森从体内取出内脏。但在观众中,有研究生,一年级的博士生,他们是 Apache Mesos 和 Apache Spark 的创始团队。这些年来,我和这两个团队一起做了很多工作。
戴夫带领他现在的研究生发表了一项后续研究,名为《一天中的 10 年》,书名为“伯克利对无服务器的看法”。“如果你想在这个领域工作,如果你还没有读过这篇论文,停下你正在做的事情,拿起论文读一读。值得投入时间。关键是,它真的需要处理很多来自 Eric Jonas 在云经济学方面的工作,以及事情是如何变化的。埃里克将于明年前往美国芝加哥大学,加入迈克尔·富兰克林的行列,似乎伯克利的许多有趣的人也是如此。
他们的观点是,你可以想到...当 AWS 第一次发布时,他们把它简化了。他们内部有非常复杂的服务,但是他们把它简化了,让那些习惯使用 VMware 的系统管理员和企业可以识别它,他们可以把他们的应用程序分割开来。但那是 10 年后的事了。现在,对更高级的功能有了更多的需求,并且有了一个被称为无服务器的整体。这很重要,他们在这里详细说明了原因和方式,风险是什么,以及一些限制。但这就是正在发生的事情。如果说上一篇论文对未来五年有先见之明的话,说真的,这一篇更有先见之明。他们所指的部分内容是计算和存储如何持续脱钩,换句话说,不要涉足太多电气工程,但那里正在发生的事情基本上是 Hadoop 和 Spark 的驱动因素已经逆转。这就是为什么这个实验室有雷,这基本上是,指定的火花杀手。
关于硬件发展的另一件事...我们在 Domino 上写了一篇关于这个的文章。我会指出这一点。阿拉斯代尔·艾伦和皮特·沃顿谈论边缘推理,并在非常低功耗、小尺寸的设备上运行巨大的机器学习模型。在这个房间的墙壁单元里可能有一些这样的设备。他们说的话有点吓人,但这就是正在发生的事情。这甚至超过了我刚才谈到的其他变化的范围。展望未来,摩尔定律已经结束,但库米定律和与之相伴的、兰道尔原理,这些都在起作用。我们将会看到巨大的效率,因为在某些方面,摩尔定律允许我们非常草率。还有,看向雷。即...当你分解用例时,那就是摆脱 Spark 的东西。看看 Ray 和 Modin 以及其他同行,他们如何利用服务,如何利用当代硬件。
此外,数据科学越来越不注重业务分析,而更注重边缘推理。如果你的团队不这么想,你应该评估一下。一个是共享基础设施和政府会议企业。我是 JupyterCon 的主席,布莱恩·格兰杰和我注意到在会议的准备阶段,很多企业进入了 Jupyter。我会说,从一个朋友的角度,大卫·沙夫,他是第一资本公司的数据工程总监。你知道,大卫说,“嘿,看,一方面,我可以购买数据基础设施的专有系统,然后我必须培训我的员工,可能需要六个月。另一方面,我可以雇佣知道如何进行机器学习的研究生。他们可以在第一天使用 Python 和 Jupyter 部署银行需要的机器学习应用程序。我到底为什么要花钱买一个专有系统,然后让我的员工在六个月内脱离正轨,却发现它甚至没有那么有效?”我们看到很多开源软件,尤其是 Jupyter,进入了像 Capital One 这样的组织。毫无疑问,彭博下了大赌注,做出了很多贡献,亚马逊和其他公司也是如此。此外,国防部正在基于 Jupyter 的基础设施上做大量工作。对我来说,那里的一个工作论点是,数据科学中的难题不再是硅谷的问题。他们在现场,尤其是在大型组织中,尤其是在受监管的环境中。越来越多的开源项目正在关注那些需要优先考虑特性的监管环境。这也是企业和政府能找到很多共同点的地方。
我们有 Julia Lane 谈论 Coleridge Initiative 和支持元数据和数据治理和传承的项目 Jupyter 的工作。我也参与其中,为 NYU 做顾问。此外,如果你看看戴夫·斯图尔特的演讲,他谈到 nbgallery 和国防部如何使用基于 Jupyter 的大规模基础设施。此外,国防部如何在 GitHub 上公开源代码[https://nbgallery.github.io/]。我认为我们会在开源中看到更多的非厂商贡献,以及更少的承诺者之争。当然,这来自政府和企业。
好吧。我知道我没时间了,但是很快,我会讲完的。最后同样重要的是模型解读,不是你想的那样。这真是一个超级难的问题。我会指出...我们有...上个月关于多米诺骨牌的专栏文章详细介绍了。本·洛里卡对做了一次很棒的播客采访。Forough 博士研究的是模型解释,然后她意识到,“嘿,等一下。这里存在一些大问题。”几个月前,我和扎克·利普顿在 CMU 参加了一个小组讨论,他也是另一个会说“嘿,等一下。模型解释,可解释性。这其中有些确实是错误的。”有重要的理由和呼吁使模型更易解释和说明。数据科学团队需要接受这一点,并使用这些工具来反映和理解正在发生的事情。但是就现在将这种工具放到利益相关者面前而言,这是非常有问题的。只是解释一下,从弗洛夫所说的...我绝对推荐她的采访。
要点是这样的。Twitter 上流传着一个笑话“如果是用 Python 写的,那就是机器学习。如果是用 PowerPoint 写的,那就是 AI。”我是说,这是有道理的,但也是有害的。我觉得那真的是错误的视角。机器学习是数学优化的一个子集。我们可以画出损失函数和正则项的方程。但是,我们可以说 ML 是关于工具和技术的,但是 ML 的使用...套用 Forough 的话,“机器学习的使用最终会涉及到大量的人机交互。”涉及到很多社会系统。如果你只是认为机器学习是关于工程的,你就失去了等式的另一半。
展望未来,它的应用是什么?如果你试图解释机器学习中正在发生的事情,而你只看到了一半,你就会弄错。我认为一个定义应该是说人工智能是关于对社会系统的影响。为了说明这一点,如果我们观察复杂的工作流来准备数据训练集,然后创建模型并评估它们...如果我们看部署机器学习模型的商业风险以及如何理解正在发生的事情,如果我们只是简单地看着工件,模型,并试图解剖它,那就是一个窥视孔分析。我们正透过窥视孔盯着一个非常复杂的问题。相反,如果我们要降低风险并试图理解和解释模型以及正在发生的事情,我们必须查看整个工作流程中的信息,一直追溯到最初从业务流程中收集数据。有人正在研究更好的方法,不要在很多很多步骤中丢弃信息和人工输入。
这一点极其重要。这就是数据治理的用武之地,因为这是血统的本质。有很多人比我更擅长谈论这个。斯坦福大学的克里斯·雷(Chris Ré)有一个完整的项目深入研究,我甚至不打算进入这个领域。但是浮潜是开源项目,克里斯又在谈论如何利用血统。他们用通气管谈论的是弱监管,他们称之为数据编程的东西。你如何用数学函数来描述提供标签的专家,以及他们的好坏?你如何能一直追溯到数据收集?同样在斯坦福大学的珀西·梁(Percy Liang)研究了影响背后的数学原理。我们将会看到越来越多的这种技术被应用到机器学习过程中。有一些来自微软的事后分析,叫做 InterpretML 使用 EBM,可解释的商业机器,上周发布,非常好。
但这里的要点是,数据科学团队需要重新思考他们如何管理数据工作流,一直到拥有非常严格的方法来整合训练集,不要在每一步都丢弃信息。当审计人员来敲门时,这将是一个问题。Chris Ré有一个关于血统的观点,以及模型管理和血统在哪里遇到困难,以及数据治理如何解决我们目前在机器学习方面遇到的最困难的问题。我有一个关于主动学习(半监督学习)的 exec 简报,这将有助于这方面的一些工作,但我不会详细谈论它。
这确实指出了一个事实,第一,人工智能的产品管理,这本书还没有写。我们正在了解。皮特·斯科莫洛奇将报道更多。在更大的范围内,如果有人来找你说,“机器学习只是工程”,认真地送他出门。我的意思是,这是我们现在必须处理的最困难的问题。这是我们看到的脱节的一部分,如果没有它,我们将无法解决监管问题和治理问题。六十年来,我们已经有了这种镜头。这就是事物如何演变和改变的,而且仍在继续。
谢谢您们。我期待着事后与人交谈。如果你想找到我,这里有一些地方。谢谢你。
编辑注:为了可读性,文字稿经过了编辑。
新手的数据科学问题解决
原文:https://www.dominodatalab.com/blog/data-science-problem-solving-for-novices
本文概述了数据科学,然后介绍了一个将数据科学应用于交通规划的真实示例。
什么是数据科学?
目前围绕数据科学,尤其是 AI(人工智能)有很多炒作。根据我 20 年的数据科学经验,我发现以下定义很有帮助:
- 数据科学:在复杂的数据集中寻找模式,以建立预测未来可能发生的事情和/或解释系统的模型的学科。
- 机器学习:应用算法和技术建立数据科学模型的过程。
- 深度学习:一类机器学习算法,使用具有许多隐藏层的神经网络。深度学习通常用于图像分类和自然语言处理。
- AI(人工智能):一类系统或解决方案,其运行方式在自主程度和范围上与人类不相上下。
要做好数据科学,你需要结合计算机/编程技能、数学和统计知识以及行业/领域专业知识。
如果没有数学和统计知识,数据科学模型可能会被误用,结果可能会被曲解。
分析的演变
在过去十年中,公司内部的数据科学发生了巨大的变化。大多数《财富》500 强公司现在都处于“主动”阶段,能够对其业务的某些领域做出准确的预测,例如预测对直邮营销活动的回应率。该行业现在渴望达到“动态”阶段,在这一阶段,他们的运营完全是模型驱动的。
数据科学生命周期
我经常看到数据科学生命周期的六个阶段。
- 构思:这是最初确定项目范围、确定价值/投资回报、决定是否投资数据科学项目的地方。
- 数据获取和探索:这是识别有前景的数据源、捕获和探索数据,然后准备数据(清理、组合等)的地方。).
- 研发:一旦准备好数据,团队就能够测试假设,用不同的模型进行实验,并评估结果。
- 验证:这是一个质量保证阶段,在投入生产之前,模型在技术上、伦理上和功能上都要经过企业的验证。高度监管行业中的公司通常有完整的团队负责模型验证,在某些情况下,还会任命一名首席合规官。
- 交付:这是模型发布的地方。模型实际上可以是任何数据产品。Web 应用程序、集成 API、仪表板、报告,甚至自动电子邮件都是流行的形式。
- 监控:数据和行为会随着时间的推移而变化,因此监控数据漂移、模型准确性、使用、性能和价值非常重要,这样可以尽早发现问题,并改进模型。
现在,我将介绍如何将这种数据科学生命周期应用到现实世界的项目中。
真实世界示例:将数据科学应用于交通规划
几年前,我帮助一个大城市优化公交线路。他们试图鼓励市民使用公共交通,但偶尔会在一个车站排长队,乘客无法挤上巴士,会被滞留。我的任务是开发一个模型,这样可以提前两天优化路由表,大容量公交车可以与当天的高需求路线配对,人们不会被困。
客户要求除模型交付之外的整个项目在六周内完成,这对于这种性质的项目来说太短了。我在这段时间里尽了最大努力。在项目的事后分析中,我发现回顾我能交付什么和不能交付什么是非常有教育意义的。由于时间压力,我不得不跳过的步骤是经常被跳过的步骤,这些步骤提供了对数据科学项目中实际发生的事情的见解。
构思阶段
在构思阶段,我评估了可行性,并在与企业主的一系列会议中定义了问题陈述。我没有时间做一个彻底的现有技术审查。这是关键的一步,因为你很少是第一次处理一个问题,从内部和外部的同事那里可以学到很多东西。量化这个项目的价值/投资回报率也被忽略了。在这种情况下,估计滞留乘客的成本,然后随着滞留乘客的减少而合计价值是可行的。
数据采集和勘探阶段
完成构思阶段后,我开始探索和获取相关数据。最后,我收集了前两年以下方面的数据:
- 过去的骑手
- 总线容量
- 路线和站点详细信息
- 天气
根据这些数据源,我设计了以下附加功能来丰富数据集:
- 星期几
- 一天中的时间
- 季节
- 假日
- 温度
- 降雨
- 地理标识符
我从 BI 团队收集数据(我后来发现,他们的数据是从 BI 团队获得的)。事后看来,直接找到来源(IT)会更好,因为 BI 团队的数据并不像原始来源那样完整。
我准备数据的目标是让每一行都代表一个停止,以便尝试一个数字预测模型(回归模型而不是经典的时间序列)。该站点前几天的数据需要在该行上可见。下图显示了我设计的一些输入/列。最后三列用于绘图和作为预测的目标。其他列是模型的输入。
我希望当时能够使用像 Domino 这样的*台,因为我会受益于以下 Domino 特性:
- 数据科学家可用的硬件灵活性和选择。可以使用功能较弱的硬件在数据样本上编写数据准备代码以节省成本,然后使用功能更强的硬件在整个数据集上执行。不幸的是,客户端没有使用 Domino,所以我必须一直使用更强大(也更昂贵)的硬件。
- 文件和再现性。只有大量的商业和研究逻辑进入数据准备阶段。它是文献和机构知识最重要的地方之一。在代码文件的注释中,您只能写下这么多。而且实验血统几乎不可能人工追踪。不幸的是,如果没有 Domino,我们就无法访问任何早期的文档,未来参与该运输机构的数据科学家将无法全面了解数据准备工作是如何展开的。
研发阶段
在完成数据获取和探索阶段之后,我开始了研究和(模型)开发阶段。我特别使用一种机器学习软件解决方案,在建模环境中连续测试了大约 30 种算法。这是在具有数亿行的数据集上完成的。我捕获了每种方法的准确性度量,例如 RMSE、R *方和残差分析。
最终的模型,一个带有正则化的回归模型,被证明是相当具有预测性的。80%的止损预测与实际发生的相差在+/-1%以内。
我对这些结果很满意,但是,我希望我那时能有像 Domino 这样的*台。在这个模型开发阶段,我会受益于更快的开发。Domino 支持对硬件、环境和代码包的弹性访问,所以我可以并行执行而不是串行执行模型。Domino 还支持各种各样的开源和专有算法以及 ide,这些对我的实验会有所帮助。如果没有这些限制,我可能会开发出一个更精确的模型。
验证、交付和监控阶段
由于时间限制,验证不在本项目的范围内。领导者应该确保为生命周期中这个越来越重要的步骤做好预算,以减少模型风险。BI 团队在企业数据仓库的基础上构建了一个 Power BI 仪表板,以提供预测的路线容量,并允许探索未来的预测以及过去的结果。
客户本可以从 Domino 这样的*台中获益,原因如下:
- Domino 本来可以支持有用的工具,使从验证到交付的转换变得容易。对于这个客户来说,在验证和交付之间有一个清晰而痛苦的中断。从 BI 系统的角度来看,该模型是一个完全的黑箱。Domino 是解释黑盒是如何构建和工作的解码器。
- 交付团队不得不重新创建在初始建模中完成的大部分工作,并且只有代码和一个 Microsoft Word 文档来帮助他们。使用 Domino,工作的可再现性和版本控制被自动捕获,跨团队的协作得到了极大的改进。
- 此外,甚至没有人在任何团队会议上提出模型监控。有了 Domino Model Monitor,监控工具就可以确保对模型性能的持续审查,并与业务目标保持一致。
结论
希望这篇博客能让你对数据科学有一个很好的概述,它是如何在现实世界的项目中应用的,以及当约束不考虑现实时,通常在哪里偷工减料。数据科学可以成为解决大型数据集预测问题的极其强大的工具。
随着团队的成长,像 Domino 这样的数据科学*台对于尽可能有效地应用数据科学来说是无价的。Domino 可以在整个过程中提供帮助,包括:
- 从灵活、有弹性的计算环境中加快数据准备和模型测试。
- 鼓励开发可以修改和部署的文件和机构知识。
- 为模型操作提供完整的沿袭,使从研究到验证再到部署的过渡变得无痛而透明。
- 通过单一*台简化所有数据科学模型的模型监控。
数据科学!软件工程
原文:https://www.dominodatalab.com/blog/data-science-software-engineering
为什么理解数据科学和工程之间的关键差异很重要
随着数据科学在组织内变得越来越成熟,工程领导者经常被拉进与数据科学团队成员的领导,促成协作。虽然数据科学和软件开发之间有相似之处(例如,两者都包括代码),但善意的工程领导者可能会对数据科学做出假设,从而导致可避免的冲突和无效的工作流。冲突和非生产性的工作流程,然后由工程领导负责解决。与软件开发不同,数据科学更类似于研究,具有独特的计算需求,团队通常与业务利益相关者密切合作,而工程团队通常不会与他们合作。
数据科学更像研究而不是工程
工程包括建造一些事先已经被理解的东西。这允许工程团队跟踪、监视、预测和控制工程过程。然而,数据科学项目通常以回答一个可能转变为洞察力或模型的问题为中心。这种对回答问题的专注是数据科学成为探索性和实验性研究过程的原因。这也导致对数据科学基础架构和工具的灵活性和敏捷性的需求超过了工程领域的需求。
可变计算需求
工程团队构建可以在高性能架构上运行的软件。工程团队使用基础设施进行测试和 QA,并且基础设施需求是静态的和可预测的。个人工程师通常在一台 16-32GB 内存和四至八个内核的机器上工作。相比之下,数据科学项目的计算能力是不可预测和不变的。数据科学工作涉及计算密集型实验。内存和 CPU 可能是一个瓶颈。例如,为一个实验编写代码可能需要 30 分钟,然后在笔记本电脑上运行这个实验可能需要八个小时。为了避免这种类型的瓶颈,数据科学家可以利用大型机器在内核之间并行处理工作,或者将更多数据加载到内存中。
与组织的其他部分整合
虽然工程与组织的整体优先事项相一致,但工程团队通常是独立的,他们的工作不需要与财务、营销或人力资源团队紧密集成。数据科学项目通常专注于回答业务利益相关者的问题。例如,在构建员工保留模型时,数据科学团队将与人力资源团队密切合作。
在这篇文章中,我们讨论了数据科学与研究的相似性,数据科学的可变计算需求,以及数据科学家如何经常与工程团队通常不接触的业务利益相关者密切合作。如果您有兴趣阅读有关如何在您的组织内实现数据科学的更多信息,请参见大规模管理数据科学实用指南。
数据科学工具:理解多元宇宙
在数据科学的多元宇宙中,工具选项继续扩展和发展。虽然肯定有工程师和科学家可能固守在一个或另一个阵营中(例如,R 阵营与 Python,或者 SAS 与 MATLAB),但数据科学工具的分散趋势越来越明显。
随着具有不同背景的新团队成员的加入,随着来自不同*台的新数据源的出现,或者利益相关者需要新的可交付成果,效忠于特定的阵营会适得其反。Domino 的 Enterprise MLOps *台在设计时就考虑到了这种多样性,因此随着您的项目和数据科学工具生态系统的发展,您的团队可用的选项将不会局限于单一的方法。
什么是数据科学工具?
像大多数专业人员一样,数据科学家需要专业的工具来高效地工作。这些数据科学工具用于访问、清理和转换数据、探索性分析、创建模型、监控模型以及将模型嵌入外部系统。
数据科学工具的类型
工具可以是开源的,也可以是商业的。它们可能基于 GUI,或者需要丰富的编程经验。有些非常专业,有些则更像是“瑞士军刀”,可以执行多种功能。工具的主要类别和一些示例包括:
数据源
数据科学家使用的数据源几乎是无穷无尽的。从*面文件(如 csv)到关系数据库(如基于 SQL 的数据库),再到大数据存储(如 Hadoop)和云数据库(如雪花)。对于数据科学家来说,他们需要一种方法来轻松访问这些数据源,并清理、转换和组合数据。通常,数据库的处理能力可用于复杂的计算或记录评分。一旦发生数据访问,他们通常会在分析之前使用喜欢的语言/IDE 来处理数据。
数据语言
语言通常分为两类,商业语言和开源语言。SAS 和 MATLAB 是两大商业语言。 MATLAB 既是一种专有的编程语言,也是一种用于集成大量数据、函数和算法的软件*台。同样, SAS 是一个语言和软件*台,以其处理大量数据的能力和广泛的分析能力而闻名。
当今最流行的开源语言是 R 和 Python。r 是一种用于各种数据科学任务的编程语言,其功能可以通过包和不同的 ide 进行扩展。Python 最初是为软件开发而创建的,现在用于各种环境,包括深度学习研究和模型部署。对于不同类型的任务,数据科学家对于他们更喜欢哪种语言非常固执己见。至关重要的是,他们可以在最新版本中轻松访问它们,这样他们就可以高效地完成工作,而不必在每次想要做模型时手动构建环境。
集成开发环境(ide)
IDEs(有时也称为笔记本)是一种编码工具,它使开发和测试代码变得更加容易。它们提供了一个单一的地方,其中包括将不同的包放在一起,原型模型,与存储库集成和组织工作。一些常见的 ide 有 RStudio 和 Jupyter Notebook。RStudio 是 R 语言的 IDE,主要用于统计分析和数据可视化。Jupyter Notebook 是一个 Python IDE,允许数据科学家创建和共享代码、等式、可视化和叙述性文本。
与数据科学语言一样,程序员对他们喜欢使用的 ide 非常固执己见。
包装
包是一组代码模块,它们在 ide 或语言中提供专门的功能或编程构建块。通过消除每次构建模型时从头编写代码的需要,它们为数据科学家节省了大量时间。例子包括 Shiny、PyTorch 和 Tensorflow。闪亮的是一个 R 包,它支持构建交互式 web 应用程序,这些应用程序可以在后端执行 R 代码。 PyTorch 主要用于 Python 的高级功能,如多维数据数组上的计算,并提供强大的 GPU 支持。 TensorFlow 是一个用于机器学习的开源框架,特别专注于深度神经网络的训练和推理。
计算
数据科学是计算密集型的,因此数据科学家需要轻松、快速地访问适当的计算环境——无论是在云中还是在本地。图形处理单元(GPU)是专门为加速计算机图形和图像处理而设计的电路。它们已经成为并行处理大数据块的算法的关键要求。数据科学家的关键是创建对这些环境的自助访问,这样他们就不会浪费时间执行开发任务来设置他们的环境。
图书馆
Spark、Dask 和 Ray 等计算库和引擎旨在为各种数据科学用例加速大量数据的处理,提高工作效率和利用计算密集型算法的能力。
外部系统
大规模工作的数据科学家需要一种方法来跟踪工作并相互协作。应用程序开发界也使用的两个常见系统是 GitHub 和吉拉。
选择数据科学工具时的关键考虑因素
数据科学工具需要高效且相对易用。通常,编码必须手工完成,但是要求越少,工作就越快,效率就越高。因此,像 GUI 和数据可视化这样的特性实际上是大多数数据科学工具的标准。包和库通过消除日常任务也有助于提高工作速度。这种效率扩展到了工具之间的协同工作,避免了在工作继续之前重新编码模型或重新格式化数据。
当考虑自动化数据科学生命周期中主要步骤的工具(如 AutoML 工具)时,请确保您可以利用您的数据科学家来改进模型,以确保您可以获得最大的竞争优势。一种方法是使用自动化大部分工作的工具进行概念验证,然后用代码构建最终的生产就绪模型。
工具的普及性也很重要。新工具不断出现,并且可能具有吸引人的特性。但是在将产品添加到您的生态系统之前,您需要考虑支持、获得团队成员的能力以及更新和支持该产品的严格程度。
任何工具都有一个最重要的特点,那就是用户对它的喜爱,这一点从未在技术规格中列出。例如,你会注意到,那些使用 R 多年的人通常对 Python 有抵触情绪,而那些非常熟悉 MATLAB 的人会更喜欢它。与此同时,当一种不同的工具可以比他们一直使用的工具做得更好时,数据科学家本质上很少拒绝创新的号召。
数据科学工具:企业 MLOps *台中的集成
在企业环境中,使用的数据科学工具能够相互协调工作至关重要,无论它们的基础语言或结构有何不同。如果工作必须重新编码才能投入生产,或者数据必须在使用前用中间程序重新格式化,这将是巨大的资源浪费,并且有可能引入错误和破坏沿袭。这就是企业 MLOps *台的用武之地,它提供了一个可以在同一个项目中使用不同工具的地方,以获得无缝、高效的体验。
Domino Enterprise MLOps *台
将所有这些工具结合在一起是 Domino Enterprise MLOps *台的好处之一。
它包括四个关键工具领域,用于在专为协作而构建的集中*台上构建、培训、部署和管理多个模型:
- 工作台:允许您构建和运行不同的模型,同时比较它们之间的结果。
- Launchpad: 允许您以不同的格式发布您部署的模型。
- Domino Model Monitor: 允许您从单一门户监控生产中模型的性能。
- 知识中心:允许您在整个企业中轻松查找和重用项目结果,同时在整个组织中保持一致的标准和最佳实践。
在企业环境中,有各种背景不同的优秀团队成员一起工作,他们能够专注于自己的专业知识,同时能够与他人合作,这一点很重要。有了 Domino 'sEnterprise MLOps platform,数据科学家就有了他们需要的*台,可以将项目的最佳工具整合在一起,确保高效的工作流程,并轻松地相互协作..
要亲自体验 Domino Enterprise MLOps *台,您可以注册免费试用,或者观看该*台的演示。
David Weedmark 是一位出版作家,曾担任过项目经理、软件开发人员和网络安全顾问。
数据科学用例
原文:https://www.dominodatalab.com/blog/data-science-use-cases
在这篇文章中,唐·迈纳讲述了如何识别、评估、优先处理和挑选下一步要解决的数据科学问题。
评估数据科学用例的三个阶段
规划下一步要处理的数据科学用例与决定下一步在其他领域处理的用例没有太大区别。在计划任何用例之前,您需要理解您的总体业务策略和目标。然而,在数据科学中进行深思熟虑的规划是非常重要的,因为数据科学带来了其独特的挑战,商业世界仍在努力适应其现有的流程。这些挑战大多源于高风险、不确定的工作需求和多种潜在结果。在这篇文章中,我将分享一些关于如何决定首先或其次处理哪些数据科学用例的想法,这些想法基于我作为数据科学顾问帮助公司(从财富 500 强到初创公司)的成功经验。我喜欢将用例评估和选择过程分成三个阶段,使其更易于管理。我将在这篇文章中深入讨论的三个阶段是:
- 列出您的潜在用例
- 评估每个用例
- 区分用例的优先级
我将在这篇文章中描述的这个过程是为了能够足够灵活地适应你和你的企业所处的任何情况。在你列出、评估和优先化你的用例之后,你将能够绘制它们。整个过程旨在帮助您做出决策,同时以一种有效的方式与组织的其他成员分享决策。
绘制用例:风险与工作量
我的方法来自一些人可能熟悉的规划方法。它使用一个正方形的图表来描绘用例的风险和他们的努力程度,并使用气泡的大小作为值。一般来说,你想做的用例在右上角,是大气泡。不幸的是,对我们来说,通常最高价值的目标是高努力和高风险,所以这是一个决定你可以投入多少努力,你对风险的容忍度是多少,以及你今天需要多少价值的问题。
从一个用例列表到这个数据科学的图表,比一开始看起来更具挑战性,这也是本文的主题。首先,我将谈论构建一个良好的用例列表,然后我将谈论如何度量每个用例的工作量、价值和风险,然后剩下的就是制作我们的图表了!
列出您的潜在用例
什么是数据科学用例?通常是假设或者问题。有时它是在寻找一个答案,有时是一个解释,或者有时它只是确认一些事情是真实的。归根结底,这是一个可以用数据来回答的问题。
对于数据科学来说,列出潜在的用例似乎很容易。每个人都有很多想法,但有两个偏见的来源会导致他们留下好的想法。
- 偏爱自己亲身了解的事物。 没有人能够完全了解整个组织,尤其是在数据方面。有太多的数据需要每个人去了解。
- 对人们认为太难或不可能的事情抱有偏见。 数据科学中的新技术和方法从根本上改变了什么问题可以回答,但人们被他们的数据库管理员训练成有些问题不应该问。数据科学越来越受欢迎的整个原因是因为一系列新的技术和技巧,它们开辟了解决以前不可能解决的问题的方法——所以让我们利用这一点。
承认这种偏见确实是克服它所需要做的一切,但我确实一次又一次地在刚刚开始数据科学的组织中看到这种偏见。建立一个健康的列表将有助于把所有事情都放在桌面上,让每个人都在同一页面上,并且将让您比较和对比多个不同种类的用例的价值、风险和工作水*。
克服这些偏见的最佳方式是每个人之间的协作交流:数据科学家、遗留系统的 DBA、业务线所有者和最终用户。
每个角色都给画面带来了独特的视角。如果你把列出用例的工作留给任何一个角色,你可能会留下一些好的东西。DBA 可能对计算上不可能解决的“未解决问题”有很好的感觉,比如两个数据集之间的大规模连接,或者“不太适合”数据库技术,比如自然语言处理用例。业务线和最终用户会知道什么是重要的,但需要数据科学家的鼓励,以确认他们想要的是可能的。最终用户可能已经习惯于从他们的数据库管理员那里要求某种类型的查询是不可能的,但是数据科学家现在可以说“是”。
我发现最好的方法是让每个人在一个房间里呆一个小时,在白板上写尽可能多的用例!在本练习结束时,您应该知道每个用例的名称,以及该用例的简短描述。
评估用例
对于每一个用例,我们都希望对三个方面有一个好的认识:价值、努力程度和风险。每个用例都有不同的组合。一开始,评估数据科学中的用例对组织来说很难。主要原因是人们认为数据科学项目是软件或 IT 项目,而不是它自己独特的东西。一旦有人开始在 JIRA 制造“数据科学故事”,我会努力让他们停下来。数据科学项目不是软件或 IT 。
数据科学项目与软件工程项目
在软件工程中,你有一个想法,你对你想要构建什么有一个非常好的想法,你知道如何构建它,并且你猜测它需要多长时间。这仍然很难,但是这个项目有一个明确的目标和一条清晰的道路。软件项目因超出预算和延迟而臭名昭著,但如果不认真对待,数据科学可能会更糟。
在数据科学中,你可以在一个用例上工作多久都行。如果你做的时间“不够长”,你的结果会很糟糕。如果你在上面工作“太长时间”,你开始得到递减的回报,并且产出不值得努力。规划数据科学更多的是付出适当的努力,在特定的时间框架内做到最好,而不是达到某种目标。
在练习的这个阶段结束时,您将为每个用例分配一个价值分数,为每个用例分配一个工作量的数量级,以及为每个用例分配一个发生风险的可能性百分比。这些将为您提供构建我之前展示的图表所需的值。
价值
数据科学中的价值是通过科学从数据中获得的知识——而不是机器学习或某些应用程序或其他东西。机器学习或应用是我们通过数据科学获得的有价值的知识的应用。知识第一。
因此,要找出数据科学用例的价值,您需要考虑几个问题:
- 从对该用例进行数据科学研究中获得的知识的价值是什么?
- 你将从数据集中学到什么?
- 关于你将要测试的假设,你会学到什么?
- 如果你得到一个好的结果,这些知识的价值是什么?
- 如果你得到一个不好的结果,那知识的价值是什么?
为每个用例考虑所有这些问题,并把它们总结成获得这个特定问题的知识有多有价值的一般意义。
对于不同的人和不同的组织,价值也有不同的含义。一些组织可能更看重公司的价值而不是利润。一些组织处于竞争极其激烈的商业环境中,需要真正拓展有价值的东西。或者在政府组织或慈善组织的情况下,价值可以是非货币的。不管怎样,用例的价值必须考虑组织整体目标的环境。
我更喜欢用 0-10 的线性标度来衡量价值。使用像货币数字这样的东西工作量太大,容易出错。我们只是在寻找一个大概,更重要的是用例之间的相对价值。7 比 6 稍微值钱一点,但是比 2 值钱多了。
努力程度
就像我之前说的,在数据科学中,评估工作量确实很有挑战性。数据科学中的评估工作与其说是计算数据科学家的工作时间,不如说是让了解问题的数量级。我发现,估算一名数据科学家的时间量级要容易得多,同时还能向组织中的每个人解释获得结果有多难。
以下是我通常使用的“数量级”:
- 1 小时。 超级简单,我可以通过启动一个 SQL 查询并构建一个快速图表来完成。没有风险。我知道数据摆在那里,结果是可以预测的。如果这里用了机器学习,那是因为我知道数据是有预测性的,只是懒得自己写规则。
- 1 天。 相当容易,但我想确保我有适当的时间来测试和理解我的结果,建立一些关于结果的合理演示,并可能尝试一两种不同的方法。我有很好的预感,这些数据是有预测性的,或者已经准备好产生这样的结果。我要做的事情几乎没有风险。
- 1 周。 这种情况越来越严重,但仍处于谱的低端。可能会有一些风险,但如果这个问题无法解决,我会很快弄清楚。我们需要做一些数据探索,因为我不确定数据是否完全准备好了,但我很确定是这样的。我应该有一些时间来微调我的结果,提高准确率。
- 1 个月。 这是我们开始能够探索未知问题的时候,但我们有一种很好的感觉,如果问题是可以解决的,那么它应该很容易解决。我们不知道数据是否准备好了,我们可能需要花一周的时间来收集和整理一些数据。在第一周之后,做一个“检查”并做一个数据探索报告,以便与利益相关者重新同步,并重新估计工作的价值和水*,这可能是好的。我们也不确定哪种方法会奏效。如果有监督的标签不够好,我们可能需要对无监督学习进行某种黑客攻击,或者一种奇特的深度学习方法可能是合适的,但我们不确定会进入这种方法。
- 1 季度。 这是一个复杂的问题,我们不确定数据中有什么,我们将如何解决它,以及结果会是什么。一个季度应该给你足够的时间来获取数据,克服任何数据挑战,尝试几种方法,以及调整结果,提交报告,并在整个过程中进行分析。
- 1 年。 这就是事情变得有趣的地方。这是一个需要一些创新的方法来解决的问题。我们会做一些研究,发明新的算法或方法,如果有时间,我们可能会在研究杂志上发表。这越来越冒险,大多数组织没有胃口做这么长的事情。每当我把一个问题放进这个桶里,它几乎意味着你不应该在这个问题上工作,除非这个问题的价值是天文数字或者是你的企业生存的基石。
- 一生一世。 基本上解决这个问题会是某人一生的工作,是开玩笑的意思。我保留这个标签是为了当有人让我做我认为不可能的事情时。基本上,这个问题的解决方案很可能在解决问题本身上更有价值。
当评估每个用例时,尝试将它们放入其中一个类别。通常,要做到这一点,您需要终端用户或业务线向数据科学家解释他们想要做什么。也许数据科学家可能需要向了解数据的人询问一些问题。最后,数据科学家应该能够给你一个问题数量级的感觉。这就是资深的、更有经验的数据科学家的用武之地,因为他们对这类事情有更好的理解。
风险
很多时候,我们渴望仅仅停留在评估某件事情的价值和努力程度上。软件和 IT 项目很多时候没有太多的技术风险,所以我们通常可以忽略它。然而,在数据科学中,在某些情况下很可能出现负面结果,甚至更有可能出现这种情况。我用风险的度量来说明一个事实,即并不是所有的事情都会如我们所愿。
有两个主要方面的风险需要考虑。第一个是,数据实际上有足够的预测性来找到我们正在寻找的答案的可能性有多大?如果数据质量差或者问题很难回答,那么风险会更高。第二个是正在使用的技术中的风险。如果有一种全新的、未经证实的技术需要用来解决问题(比如深度学习),那么风险就会增加。或者,如果数据量非常大,我们不确定我们的数据*台能否处理,那么风险就会增加。同样,与衡量价值一样,一名经验丰富的数据科学家或一些外部帮助将在适当评估风险方面发挥很大作用。
我喜欢给风险一个粗略的%分数,它告诉我们整个用例进展顺利的可能性有多大(例如,我们得到了一个有价值的结果)。就像价值的数量级和价值的线性标度一样,这些都有些武断,你应该关注数字的整体意义。例如,50%是一个掷硬币的机会,我们不确定会发生什么。99%意味着我们确信它会成功,但我们会为一些不好的事情发生留有余地。80%意味着我们非常确定会没事,但仍有一些未知的问题需要解决。10%的可能性很小,我们不指望它会起作用,但还是有机会的。
确定数据科学用例的优先级
既然我们已经有了一个好的用例列表,并且已经评估了每一个用例的价值、工作量和风险,那么我们现在可以弄清楚要做什么了。
优先级排序可能是三个阶段中最简单的,但是只有当你建立了一个潜在用例的良好列表并且正确地评估它们的时候。基本上,如果您在此之前做得很好,那么应该清楚应该首先处理哪些用例。优先化是考虑每一个潜在用例的价值、努力和风险,并看到哪一个应该首先完成。一般来说,我们应该向高价值、低努力和低风险的方向发展,但不幸的是,对我们来说,这些因素通常是相关的。很多时候,我们需要选择风险来获得一个非常有价值的结果,或者选择一个低努力和低价值的用例来展示一些增量价值和证明一个概念。
有一些显而易见的选择,应该首先处理用例。那些低工作量、高价值和低风险的。这些在正方形的右上角,有一个大泡泡。如果你有这些中的任何一个,先做它们。还有一个显而易见的选择是根本不考虑去做。这些是高努力、低价值和高风险。有时人们只是需要一个了结,并同意不值得花时间。一旦发生这种情况,你可以停止被它分散注意力,专注于更实际的用例。
一旦显而易见的用例被排除,选择首先做哪个用例可能会很复杂,因为这取决于您的个人情况。这取决于你有多厌恶风险,你有多需要一场胜利来证明价值,或者其他几个因素。从处理风险的能力、推动价值的需求以及需要投入多少人力资源来解决这个问题等方面考虑,现在对你的组织来说什么是重要的。
随着时间的推移,你的优先顺序可能会改变,因为你雇佣了更多的人,从高层获得了更多的信心,或者愿意承担更多的风险,所以要经常进行重新评估!
结论
我希望通过阅读这篇文章,你已经了解到,无论有没有我的特定过程,都有可能理性地思考接下来要解决哪些数据科学用例。归根结底,我认为任何好的流程都会做到以下几点:
- 尝试在列出潜在用例时消除偏见。敢于对你曾经认为不可能的事情说“是”。
- 不仅要评估用例的价值和努力程度,还要评估风险程度。
- 对自己诚实,你的组织的优先事项是什么,并调整你在风险和人力方面的限制,以及你需要从某事中获得多少价值。
数据科学与工程:紧张点
原文:https://www.dominodatalab.com/blog/data-science-vs-engineering-tension-points
这篇博文提供了亮点和来自专家组的完整文字记录,“数据科学与工程:真的必须这样吗?”与艾米·海尼克、帕科·内森和皮特·沃顿在多米诺总部。讨论的主题包括围绕构建和部署模型的协作的当前状态、可能出现的紧张点,以及如何解决这些紧张点的实用建议。
介绍
最*,我有机会主持了一个名为“数据科学与工程:真的必须这样吗?与艾米·海内克、帕科·内森和皮特·沃顿在多米诺总部。作为 Domino 的内容负责人,我的责任是确保我们的内容提供高度的价值、密度和分析严谨性,从而从多个角度激发出令人尊敬的坦诚的公共话语。直接应对挑战的演讲,包括未解决的高风险问题。也是为了帮助加速数据科学工作。
数据科学和工程之间的合作只是我在 Domino 任职期间以及之前在 O'Reilly Media 担任数据科学和数据工程方面的数据编辑期间听到的故事之一。正是在这个先前的角色中,我第一次见到了杰出的小组成员,他们友好地拨出最*的周四晚上来讨论在构建和部署模型时关于协作的不同观点。小组讨论中坦诚讨论的几个主题包括出现的潜在紧张点、解决紧张点的问题以及对潜在未来状态的乐观思考。这篇博客文章涵盖了小组讨论的要点以及一份完整的文字记录。关于此主题的其他内容已经发布,其他行业专家也将发布更多内容。
视角:围绕构建和部署模型的协作的当前状态
每位小组成员都在工程、数据科学、机器学习和研究领域拥有丰富的行业经验。我们从他们现在所看到的,以他们自己目前的状态开始讨论,为晚上的讨论提供一个基准。这也有助于我们每个人了解关键差异和观点,以便让我们所有投资于数据科学的人能够相互学习。
Amy Heineike 转述说,在她大约 55 人的初创公司 Primer
“我们最终引进了能够沟通数据科学和工程的人。我们将这个团队称为“产品工程”,其中包括知道如何构建机器学习模型、知道如何进行数据科学、有一点产品直觉以及知道如何将东西投入生产的人。”
皮特·沃顿赞同这一观点,并补充说
“当我和 Amy 早些时候就这个问题聊天时,我们讨论了全栈机器学习的想法。因为我也看到了,如果你没有最终用户体验的所有权,你最终只会构建学术模型,这些模型对于在 ImageNet 之类的东西中获取指标非常有用,但你不会学习所有你需要学习的东西,以将其转化为最终用户的真正有效的模型。拥有产品和研究技能的结合;这是一种超能力。你实际上能够以一种方式将产品提供给人们,这种方式是许多理论上不知道机器学习的团队,如果他们没有这种经验,可能会很难做到的。试图鼓励人们真正掌控整个过程非常重要。”
Paco Nathan 根据他对各公司的建议和 T2 在奥莱利地层和人工智能会议上的工作,看到了广泛的模型开发工作流程,他指出
“我可能会从另一个角度看问题,因为就像你说的,我认为这些都是很好的例子。我将从与我交谈过的许多公司和案例研究中了解一些观点,在企业内部,数据科学和数据工程团队之间存在很大的分歧。它们几乎是孤立的。好像一年前,我会听到这样的争论,比如说,数据科学团队中想使用 Python 或 R 的人和数据工程团队中想用 Java 重新编码的人之间的争论。这种情况已经持续了很长时间。我相信这种情况已经改变,我们正在看到一个大的上升,例如,Jupyter 正在被用于公*和乏味的环境中,并弥合了多语言之间的差距,我认为 Arrow 和其他人可能也对此有所贡献……我希望筒仓正在倒塌。”
尽管在开发和部署模型的过程中存在一些影响协作的细微差别,有趣的是,主人翁意识是一个共同的主题。不管模型开发是在一个新公司还是一个更大的组织。然而,这种对工作和成果的拥有感可能会导致跨职能的协作团队或筒仓。组织以不同的方式团结在协作周围,与构建和部署模型相关的大量工作可能会导致潜在的紧张点,团队需要解决这些问题。
张力点
在讨论了协作的当前状态之后,讨论转变为坦率地识别在开发和部署模型时出现的潜在紧张点。确定具体的紧张点以及潜在的“为什么?”在它们的背后,让我们所有数据科学领域的人都可以迭代和解决问题的方法,以解决紧张点。讨论中出现的潜在紧张点包括围绕模型开发的“大量工作”、不同技术的组织需求、不一致的期望以及缺乏可重复性。
喜力指出,有一个
“构建一个数据驱动的产品需要大量的工作……其中一小部分是构建机器学习模型。整个管道的其余部分是广阔的....它包括“我们如何定义我们实际上试图解决的问题?“,”我们将要运行的原始数据是什么?“我该如何清洗和准备呢?“,”我可以使用什么标记的数据来训练算法?我需要带一组人来做标记吗?我需要建立什么工具来实现它们?“所有那些东西。然后,有很多关于“这个模型如何适应我的整个应用程序和代码库”的问题。然后输出它“;”它属于用户体验的哪一部分?我需要展示什么东西,以便人们理解模型的输出,使它可以被解释?“这整个宇宙的东西并不是在构建模型,而是与构建模型密切相关。这是一个技术性和挑战性的问题。我认为思考谁对这些不同的部分负责是有用的。….我认为,如果你的团队视野非常狭窄,只对那块馅饼的一部分感到兴奋,并认为完成其余部分是其他人的工作……或者,如果你处于这样一种情况,他们不能接触其余部分,因为这是其他人的工作,他们不被允许进入,也许有一个他们不能接触的不同的代码库,这似乎将成为紧张局势的来源。”
Nathan 为工作量、需求和“为什么”提供了另一种视角在企业内部出现的潜在孤岛和紧张点背后
“这种跨团队是多学科的。这是正确的道路。我在企业中看到的另一个方向是,可能有一个根深蒂固的现任团队在做商业智能,并且已经做了很多年,他们拥有自己的数据仓库。一些团队尝试不同的技术,显然他们要做的是创建一个不同的团队,给他们不同的角色,不同的名字。然后你在同一个组织里有竞争的团队。现在,我们正在引入更多的学习和令人兴奋的事情,这些事情超出了企业中的数据科学家正在做的事情的范围。所以,现在他们为机器学习工程师引入了一个新的角色,有了一个新的团队,它将分成两部分。我认为这是企业中出现的一种紧张关系,但另一方面,由于合规性问题,组织选择孤立 it 是有原因的。在金融领域的一些地方,我们看到可能有一个团队处理数据并开发模型,他们必须将这些模型交给另一个团队进行审计。实际上,不同的人在它进入生产之前会查看它,他们会给团队设置防火墙,这样他们就不能一起工作了。这在某种程度上破坏了跨学科的东西,但这正是我们努力解决合规性问题的方式。”
在讨论过程中,我指出,在我之前担任 O'Reilly 的数据编辑时,我听到了许多最*毕业的数据科学家的故事,他们在比较他们在学术界的工作和他们在行业内的预期工作时遇到了紧张点。然后我询问小组,他们是否仍然看到不一致期望的例子,
典狱长:“我想,我们谈到了安德烈·卡帕西,他的滑球很棒。他是特斯拉的人工智能主管。他有一张他攻读博士学位时的幻灯片。他只是在展示他的饼状图...他 90%的时间都在考虑模型,10%的时间在考虑数据。他有这个图表,现在他在工业界,他花 80%的时间思考数据,纯粹是因为在学术环境中,数据集是给定的。你试图将你的结果与其他人进行比较,所以你必须在数据集和如何保持稳定上达成一致。然而,在这个行业的大部分时间里,你实际上可以通过更新、改进、改变你的数据集、改变标签来进行改进,这可能会对系统产生真正的冲击,因为这是一种完全不同的技能,在学术界很难掌握。我认为这是最大的冲击之一。”
海尼克:“对,没错。我认为这又回到了一个问题,要实现一个数据驱动的产品,需要预先做大量的工作。我想,我们以前谈过。有几个人已经成功地扮演了一个角色,他们真的花了所有的时间去思考更多的模型架构。只有少数人能做到这一点,我认为只有少数几个问题让人们超级专注地制作这些模型,但我认为大多数正在做的工作需要这种子问题的参与广度。我认为它们非常有趣,但它们与人们期待的不同。”
这导致了关于可复制性或缺乏可复制性的讨论,这是学术界、整个科学界和行业内的一个紧张点
内森:“因为我相信你们很多人已经看过了,但是现在有一场关于科学中可重复性的大讨论。我们从这个数据和分析过程中开发的一些工具现在正在反馈到更传统的科学研究中,以帮助使研究报告更具可重复性。有一场对话,是关于我们如何不仅在科学中,而且在企业和行业中实现这一点,以使整个组织的结果具有可重复性,这样你就不会对你看到的结果争论不休。”
典狱长:“在再现性方面重复一下....对于现有的许多机器学习论文来说,这也是一个巨大的挑战。我想,如果你拿起一张机器学习的纸,试着从阅读开始,实际上复制结果,这通常会非常非常棘手。有时候,即使对谷歌内部的人来说,这也很棘手。我们也有自己的重复性问题,在机器学习方面,我们需要真正改进工具,提高期望值。挑战的一部分是,这些论文中的一些,数据集很难得到。所以,这确实阻碍了我们的许多尝试。”
虽然完全有可能花整整一个小时的小组讨论来确定潜在的紧张点,但我们将讨论转移到了迭代和解决问题的方法上,以解决紧张点。
解决紧张点的实用建议
当迭代和解决问题的方法来解决与围绕构建和部署模型的协作相关的紧张点时,出现了许多主题。一个主题包括考虑心态的转变。心态的转变包括拥有一种主人翁意识,对子问题产生“好奇心”,并考虑采取“不断学习”的观点。另一个主题包括通过配对、产品原型(即“Ozzing 向导”)、技术讲座/每周研讨会和组织文化期望来建立或强化不同职能角色之间的沟通渠道。通过跨职能工作或交叉培训努力实现跨学科理解也是出现的另一个主题。
所有权
关于主人翁意识,海涅克指出
“如果你对自己所负责的事情有一个非常开阔的视野,如果你对许多难题感到好奇,并且在你看来,如果你拥有许多难题的所有权,...因此,如果你的最终目标是“我想建造并发布一些有趣的东西”,这就消除了一些紧张感。
典狱长还表示
“当你有一个围绕一组需求团结一致的团队,每个人都沉浸在所有这些需求中,你会从中获得非常惊人的结果。这是紧张的反义词,但对一切就绪的团队来说,这是一个很好的对比。”
好奇心和学习心态
完全透明,所有小组成员在小组会议开始前会面,就紧张点的协作和问题解决进行初步讨论。考虑“好奇”或“对问题空间好奇”最初是由 Heineike 提出的,当时所有的小组成员都表示兴奋。这让我询问海尼克,请他在面板上解释一下:
海涅克:“我真正喜欢的一件事是意识到从工程的角度看这些问题有多少种不同的方式;数学,机器学习镜头或 UX 镜头,并让它在 Primer 上工作。我们四年前就开始了。我们四个人在一个房间里,两台坏掉的电脑,不知何故现在我们有 55 个人了。我环顾房间,看到所有这些人都有深厚的技能,所有这些不同的领域,实际上,非常兼收并蓄,不同类型的背景。只是看到所有这些汇集在一起,并意识到当你回头看时,天体物理学家花了一年时间来优化这一点,工程师花了一年时间在百老汇上,然后她回到大师赛去思考语言的一代。这需要所有这些兼收并蓄的人走到一起去做。”….“我认为,当我们进入问题时,如果你能真正接受存在子问题的事实,一些很大的子问题,如果你能以此为乐,那么我认为你有一个非常伟大、快乐的职业生涯在你面前。我认为归根结底就是这样。这里有一个折衷的作品....我们实际上在 Primer 团队中有相当多的计算科学家,Anna 是计算化学工作的博士[指向观众],这些人对算法感兴趣是因为他们想帮助解决一个问题。我认为,如果你把用户问题看作是需要解决的有趣的事情,如果你发现自己走在所有这些不同的道路上,有一段时间你沉浸在 UX,你会想,“哦,用户是如何看待机器学习输出的。“也许他们不像我理解他们那样理解他们,他们已经在这个模型上钻研了很长时间,并且已经解决了这个问题。或者,你突然发现你自己被桥接了,所以我们有你包装的文件,编码,贴在服务器上很快。你对这些作品越好奇,我觉得这很有趣。你可以让不同的人聚在一起,一起工作,一起娱乐。”
Nathan 讲述了他在为数据科学团队招聘时寻找的好奇心是一种怎样的品质:
“只是其中的一个片段....为数据科学团队招聘员工,这一直是我们招聘员工时做得更好的事情....是去特别是物理科学或物理工程领域,雇佣那些在某个领域的人,比如航空/航天,或者我雇佣了很多物理领域之外的人。因为他们有很多天生的好奇心。现在也有很多很好的方法让硬科学....我们在数据科学中看到的....正在帮助通知对方……”
进入一种学习的心态也与“好奇”有关,和海涅克有关
“我认为在这个行业里,一切都在不断变化,唯一不变的是感觉你不知道自己在做什么。你必须不断学习。我觉得每六个月我都会做一次总结,并意识到有一些我不知道如何去做的巨大的新事物要学。通常在关键时刻,你会说,“好吧。我明白了。“我认为如果你能接受这一点,”好吧,我会一直学习,我会做一些新的事情,这没关系。“也意识到其他人都在那条船上。会有一些你知道的事情,也会有一堆你不知道的事情。如果你能谦虚地说,“实际上我不知道你在说什么。“当他们告诉你他们非常兴奋的事情,而你在等待解释,这样你们可以很快地互相学习。我认为这是真正的关键。”
沟通
在解决面向协作的紧张点时,建立和强化沟通渠道非常重要。几个可行的执行方法包括配对、产品原型(即“Ozzing 向导”)、技术讲座/每周研讨会和组织文化期望。
喜力建议配对作为解决紧张点的一种方式
“我们发现 Primer 的一个很好的做法是,在产品团队中,数据科学家、工程师和产品经理都在一个团队中。他们将每天相互交流,直接对话。我想可能会有一些组织方面的东西可以帮助你....所以你们坐在一起,这是件好事。实际上你只需要多说一点。您希望数据科学家不要害怕去阅读应用程序的代码,然后开始询问关于它的问题,并开始解释他们遇到的问题。然后,工程师将询问有关数据科学部分的问题,以及它们所依赖的是什么。然后让对话继续下去。”
沃顿建议对合作持积极开放态度
....我喜欢把类似“嘿,这是我的简单语音识别工具”的东西放在一起,所有的基础设施就像“嘿,这是我创建的数据集,这是我创建的一些指标”,然后就把它放在那里。当知道人们比我更关注模型时,他们的眼睛会亮起来,他们会说“啊,我们可以做得比这更好。“他们不必担心数据清理的所有棘手问题。数据收集,以及所有其他的东西。这是一种很好的激励方式。”
沃顿还建议进行一次产品原型的练习,或“Ozzing 向导”,以帮助建立和强化沟通渠道:
“这有点不同,但我最喜欢的方法之一,尤其是当我们是一个小团队时,实际上产品原型是一种叫做 Ozzing 向导的东西,在那里你实际上有一个人在幕后而不是一个瓶子。另一端的东西,比如,聊天,或者你知道,谁得到了像一个屏幕截图,但实际上并没有进入。所以人们...根据他们在屏幕上看到的实际情况,基本上必须假装是模特。这就像是一个非常有趣的派对游戏。但它真的,就像你在实际产品上得到的迭代。因为通常情况下,产品团队或产品人员(如果是一家初创公司)不会真正理解他们必须考虑的所有问题,也不会像机器学习解决方案那样在头脑中建模。如果你能告诉他们,即使是一个在这个世界上活了 25 年的人,也不能用他们得到的信息解决这个问题,那么我们很可能无法训练一个模型来做到这一点。”
沃登还建议清楚地阐明这项工作对研究人员的回报和影响
“我看到的最鼓舞研究人员的事情之一是,人们非常清楚他们需要研究人员正在研究的东西,实际上给他们指明方向,并说,“看,如果你能解决这个问题,这将是一件非常重要的事情。“一个例子是,我在我的一些微控制器上做了很多工作,并喜欢尝试做一些非常小的负足迹设备。为了在上面进行图像识别,你只能使用 250 千字节的内存...你没有太多的空间。我真的很关心,“好吧,那么小的图像网络能有多好?一些研究人员在内部会说,“哦,是的,我确实想过用这样的东西来玩,但是我不知道是否有人会真的使用它,所以我不打算发表它。但这是我的结果。嘿,你想合作什么的吗?”这是满袋的另一面。不一定要把这整件事都强加给研究人员。也许我与之交流和交谈的只是研究人员,他们实际上愿意和我交谈。他们真的很兴奋听到他们的研究可以被使用的方法,并得到关于方向的想法,他们应该思考的重要的未解决的问题。这真的让他们的一天,当你喜欢,“哦,我们实际上采取了这一点,我们认为它很有趣,我们打开它,我们这样使用它。你的工作确实有所作为。你不仅仅是一个 PDF 创建者。”
Nathan 深入探讨了每周一次的研讨会或技术讲座如何成为解决协作紧张点的潜在解决方案
“在一家规模较大的公司,比如 170 人,我们会把不同的数据科学家分配到不同的产品团队。但是我们想从那些不经常互相交谈或者看不到他们的项目的人们那里得到更多的反馈。所以我们做了每周一次的研讨会,我们会邀请利益相关者。我们会邀请财务负责人来听听。我们会要求人们不要在许多试探性的问题上过于咄咄逼人,但有点像,你可以参与,但不要试图让他们为难,因为我们真的想在这里分享。他们让我们开的更像是研究生研讨会。总体来说效果不错。通过这种方式,团队之间有很多很好的反馈。”
内森还指出了组织文化期望是如何帮助像网飞这样的公司的
“我喜欢的另一个很好的例子是网飞的数据基础设施。米歇尔·乌福德是这方面的领导者之一。我想我们在 JupyterCon 就此进行了辩论。真正打动我的是米歇尔真正强调了文化对于解决这类问题的重要性。我认为这是我们在小组中讨论的广泛范围...他们的例子是,团队想出了某种文化方式来解决问题,并让很多人一起工作。我认为,尝试通过角色来发现这一点,或者清单是什么?我认为你真的需要在文化上传播这一点。”
Nathan 还指出,监管环境通常对合作有文化期望
“我认为这个行业有一个有趣的趋势,高度监管的环境有如此多的要求,但他们也有如此多的需要去尝试和完成一些事情,这成为一个明确的要求。 我们在情报界、金融、医疗保健以及对隐私进行外部控制的地方看到了这一点。但是我们在开源领域看到了更多有趣的发展。一年前我绝不会想到这一点。但它正在发生。”
交叉训练
在之前关于当前状态的对话中,Heineike 和 Warden 都提到自己是多学科跨职能团队的一员,或者目前正处于多学科跨职能团队中,而 Nathan 则提到了企业内部有意识的交叉培训是如何有效解决以协作为导向的紧张点的:
“我看到的一个建议是多做交叉训练。一个我可以参考的好例子...Richa Khandelwal 是波特兰耐克公司数据工程经理之一。她在 OSCON 大学做了一个非常棒的演讲,讲述了他们如何让数据工程团队的人参加数据科学训练营,以便他们能够体会到与数据科学家一起工作意味着什么,反之亦然。他们把一个团队的人带到另一个团队进行交叉训练。我认为这是一个很好的方法,可以打破一些障碍,也可以设定期望值,并有望让人们拥有更多筹码。”
这些只是解决紧张点的一些建议。如果感兴趣,在这篇博文的完整文字记录部分有更多的见解。
你希望未来的状态是什么样的?
在花了大部分时间反复讨论面向协作的紧张点的识别和问题解决之后。我们讨论了潜在的未来状态,结束了小组讨论。或者他们希望未来的国家是什么样子。毫不奇怪,尽管扮演着不同的角色,但每个小组成员对数据科学未来的希望都有相似之处。每个小组成员都提到了好奇心,并提供了额外的见解。
海涅克:“…当数据科学第一次被创造出来的时候,它正在成为一种东西。有很多人最终认同了这个术语。来自各种背景的人,因为对一些数据集好奇而走进来。我认为随着该领域的成熟,这有点有趣,因为你可以参加这些正式的项目,有很多人参加机器学习项目和计算机科学系。我很好奇这将如何发展。我们看到这个领域正在走向成熟,人们可以遵循一些更清晰的路径。从某种意义上说,这意味着人们进来时背景的缩小。另一方面,你有所有这些可用的工具、模型和方法,让真正广泛的人群参与进来,带来不同的观点。我真的希望我们能保持这种多样性,并利用这些工具的存在,这很好,而不是最终走上这样一条道路,即每个人都必须通过相同的项目和相同的公司,只有一条道路,这样我们就可以保持一些创造力。”
内森:“我喜欢好奇心这部分。你认为你要去法学院并成为一名执业律师,你的职业就是持怀疑态度。我们需要另一种被认为是好奇的职业。他们可以互相制衡。我喜欢调查,我们做了很多调查,我看到一些有趣的谈话,关于人们做关于雇佣数据科学家的故事,以及分析数据需要什么。TapRecruit 已经做了很多这样的工作。他们发现一件有趣的事情是,寻找“高级数据科学家”的角色实际上不如试图让某人担任“数据科学家”的角色。因此,你会看到那些出色的环境科学家、天体物理学家或诸如此类的人转而申请后者。然后,尝试看看对初级数据科学家的要求真的很有趣,因为它们切入了基本的特质,比如好奇心,比如愿意花 80%的时间清理数据。我认为,我更愿意少关注高层,而更多地关注未来的发展道路和那里的特点。”
典狱长:“我也很喜欢好奇心这个主意。我在 Jetpac 花费大量时间试图寻找优秀的旅行照片,并试图浏览数十亿张 Instagram 照片、脸书照片和 Flickr 照片,以找到某个特定地方的完美照片的原因之一。我们做了一些事情,比如通过识别人们脸上的胡子来寻找潮人经常出没的地方,诸如此类。但是我意识到,我们团队中的一些人比程序员更善于找出指导应该是什么。但是他们必须通过我们给我们需求,让我们建立模型。我最自豪的事情之一...我能够建立一个系统,在一个预先训练好的图像分类器上进行转移学习,我们的营销人员可以给它 100 张照片,分为 10 个不同的类别,它实际上会学习识别,比如,“哦,你想在照片中识别狗吗?给它一堆有狗在的照片,一堆没有狗的照片就行了。“没有任何程序员的干预,他们可以在应用程序中部署并创建自己的模型。我真正希望的是,我可以帮助自己摆脱程序员的工作。我们有这种非常奇怪的结构,我们有懂得如何用这种非常神秘的语言写规则的神职人员。我们必须尽量减少这些琐事,以便能够与计算机对话。如果我们能改变一些事情,这样任何能给出一堆例子的人都可以选择正确的模型,然后给它一堆例子,得到一些像样的东西,然后快速迭代,这就是我未来真正兴奋的事情。我也是这么想的。我希望它能在整个组织中扩散,而不是如此孤立和条块分割。我有点希望 web 服务像 21 世纪初一样在企业中兴起。人们只需启动一个 web 服务器,其他人将在内部网内访问它,it 部门根本不参与。他们(它)变得非常恼火,然后他们不得不最终放弃,让人们去做。我有点希望机器学习成为销售、营销、支持和其他人都能轻松掌握并解决问题的东西。”
结论
数据科学和工程之间的协作是一个众所周知的挑战。这一挑战有可能阻碍创新,阻碍数据科学工作的加速。在数据科学领域,我们是否应该耸耸肩,说“事情就是这样。”或者说“这是一个太难解决的问题。我宁愿去解决别的事情。”然而,数据科学不正是基于解决以前无法解决的问题的理念吗?我从杰出的数据科学家和杰出的工程师那里听到了很多关于他们在开发和部署模型的合作中遇到挫折的故事。这不是一个不可克服的问题。例如,小组成员友好地提供了不同的见解来帮助解决这个问题。从我的角度来看,在这个问题上,缺乏从多个角度进行深入分析的严格公共话语。具体来说,分析严谨的话语是基于互相帮助和利用彼此想法的意图。主持该小组并提供来自多位行业专家的其他见解的目的是积极参与公共讨论,并致力于解决以协作为导向的紧张点。如果你有兴趣参与这次公开演讲,请随时联系我。
完整抄本
这部分提供了小组讨论的完整记录。为便于阅读,对文本进行了编辑。
安·斯潘塞,你好。非常感谢你和我们共度良宵。感谢您抽出时间,我还要特别感谢我们的小组成员。我叫安·斯潘塞,是达美乐的内容主管。Domino 是一个数据科学*台,致力于加速数据科学工作。我的责任是确保我们的内容反映我们的核心价值观之一。我们的核心价值观之一是寻求真理,讲真话。对我们来说极其重要的是,我们的内容注入了这种价值观,并且贯穿始终。因为我们的内容旨在提供高水*的价值,并引发关于如何推动数据科学发展的对话,真正诚实、坦率、尊重的对话。在前世,我是 O'Reilly Media 的数据编辑,专注于数据科学和数据工程,这就是我如何认识这些小组成员的。在过去的生活中,我与他们合作,我非常感谢今天我在 Domino 的当前角色,我可以继续与他们合作,并受到他们的启发。如果你们每个人能花点时间向观众介绍一下自己,我会很高兴的。
帕科·内森,德文:大家好,我叫帕科。帕科·内森。我在塞瓦斯托波尔的德文公司工作。直到最*,我还一直为奥赖利工作。我的背景是机器学习,并在该行业领导数据团队多年。然后我去了一段时间,成为 Apache Spark 的开源传道者。主要是我一直在和 Strata Data 大会和 AI 大会合作;世界各地的会议。我真的喜欢尝试鸟瞰这个行业正在发生的事情,并与许多不同的团队交谈,了解他们在做什么。
艾米·海尼克,Primer :大家好,我是艾米·海尼克,Primer 的产品工程副总裁。我的背景是数学,最初是一名数据科学家。我之前就在思考这个问题,我作为数学家的背景引导我进入 Quid,然后是 Primer,这是四年前开始的。我们正在建造可以读写文本的机器,包括大型语料库和非结构化数据,将见解汇总成有用的报告。
皮特·沃顿,谷歌:我是皮特·沃顿。TensorFlow 移动嵌入式方面的技术领导者和我有一家名为 JetPac 的初创公司,大约四年前被谷歌收购。我真的很喜欢 TensorFlow,我可以和很多谷歌团队以及很多外部团队一起工作,他们有各种非常有趣的数据问题,我可以学到各种东西,偶尔还可以帮助他们。
安·斯潘塞:非常感谢你们的自我介绍。所以,今晚小组的主题是关于合作。特别是在开发和部署模型上的协作。我们今晚谈话的结构;我们将从围绕模型开发和部署的当前协作状态开始。然后我们会稍微讨论一下潜在的未来状态,或者人们希望的未来状态。然后我们将向观众提问。只是一件家务事,我确实要求,如果你决定提出一个问题,如果你的问题能够一口气说完,并以一个问题结束,那就太好了。我觉得这对观众来说不成问题,但我想我们都经历过。此外,我们将在明天结束对拉科西娜的捐赠和抽奖活动,让每个人都有机会捐赠。我非常感谢我们迄今为止已经为 La Cocina 筹集了数百美元,如果您想参加抽奖赢取 Strata 的青铜级通行证,请在活动结束后自由活动。让我们从围绕模型开发和模型部署的当前协作状态的讨论开始。根据小组中每个人在数据科学和工程方面的丰富经验,您对当前状态有什么看法?
Amy Heineike: 我们在 Primer 所做的其中一件事,我们已经谈了很多次[向 Pete Warden 做了手势],就是我们最终引进了能够沟通数据科学和工程的人。我们将这个团队称为“产品工程”,其中包括知道如何构建机器学习模型、知道如何进行数据科学、有一点产品直觉以及知道如何将东西投入生产的人。我认为对我们来说,我们真正考虑的是如何让团队(个人或分享他们技能的个人组成的小团队)能够解决有趣的数据问题,然后实际发布该功能,这实际上是一个非常简单的过程。我们有能力做出贡献,这真的很有趣,实际上也很自由。我应该说,这里有几个来自 Primer 的人。我们现在正在疯狂招聘,他们超级聪明,和他们聊天真的很有趣,如果你对任何事情都感兴趣,你应该在之后和他们聊天。
Pete Warden: 我想你之前提到过全栈机器学习。
艾米·海涅克:我确实说过,是的。
Pete Warden: 这是我和 Amy 早些时候讨论这个问题时非常喜欢的一个阶段,是关于全栈机器学习的想法。因为我也看到了,如果你没有最终用户体验的所有权,你最终只会构建学术模型,这些模型对于在 ImageNet 之类的东西中获取指标非常有用,但你不会学习所有你需要学习的东西,以将其转化为最终用户的真正有效的模型。拥有产品和研究技能的结合;这是一种超能力。你实际上能够以一种方式将产品提供给人们,这种方式是许多理论上不知道机器学习的团队,如果他们没有这种经验,可能会很难做到的。试图鼓励人们真正掌控整个过程非常重要。
Paco Nathan: 我可能会从另一个角度来看,因为就像你说的,我认为这些都是很好的例子。我将从与我交谈过的许多公司和案例研究中了解一些观点,在企业内部,数据科学和数据工程团队之间存在很大的分歧。它们几乎是孤立的。好像一年前,我会听到这样的争论,比如说,数据科学团队中想做 Python 或 R 的人和数据工程团队中想用 Java 重新编码的人之间的争论。这种情况已经持续了很长时间。我相信这种情况已经改变了,我们正在看到一个大的上升,例如,Jupyter 正在被用于公*和乏味的环境中,并弥合了多语言的差距,我认为 Arrow 和其他人可能也对此有所贡献。我希望筒仓正在倒塌。
安·斯潘塞:说到筒仓,听起来筒仓肯定存在潜在的协作紧张点。你愿意就此谈一谈吗?
艾米·海尼克:当然。我们真正学到的一件事是,如果你考虑构建一个数据产品…这是假设数据中会出现一些有趣的东西…构建一个数据驱动的产品需要大量的工作…其中一小部分是构建机器学习模型。整个管道的其余部分是广阔的....它包括“我们如何定义我们实际上试图解决的问题?”“我们将要运行的原始数据是什么?”“我该如何清洗和准备?”,“我可以使用哪些带标签的数据来训练算法?我是否必须引入一个团队来做标记,我需要构建什么工具来支持他们?”所有这些东西。然后,还有所有这些关于“这个模型如何适应我的整个应用程序和代码库?然后是它的输出它属于用户体验的哪一部分?我需要展示什么东西,以便人们理解模型的输出,使它可以被解释?“这整个宇宙的东西并不是在构建模型,而是与构建模型密切相关。这是一个技术性和挑战性的问题。我认为思考谁对这些不同的部分负责是有用的。…."我认为,如果你的团队视野非常狭窄,只对那块馅饼的一部分感兴趣,并认为完成其余部分是其他人的工作……或者,如果你处于这样一种情况,他们不能接触其余部分,因为这是其他人的工作,他们不被允许进入,也许有一个不同的代码库,他们不能接触,这似乎将是紧张局势的来源。我觉得光是反思他们就很有意思。思考这种广泛的问题和技能,这些都是整合一些东西所需要的。很有意思。我真正喜欢的一件事是意识到从工程的角度看这些问题有多少种不同的方式;数学,机器学习镜头或 UX 镜头,并让它在 Primer 上工作。我们四年前就开始了。我们四个人在一个房间里,两台坏掉的电脑,不知何故现在我们有 55 个人了。我环顾房间,看到所有这些人都有深厚的技能,所有这些不同的领域,实际上,非常兼收并蓄,不同类型的背景。只是看到所有这些汇集在一起,并意识到当你回头看时,天体物理学家花了一年时间来优化这一点,工程师花了一年时间在百老汇上,然后她回到大师赛去思考语言的一代。这需要所有这些兼收并蓄的人走到一起去做。
Pete Warden: 这实际上让我想到了我在谷歌认识的许多成功团队,即移动视觉团队,以及他们所做的工作;他们是开发 MobileNet 的团队,MobileNet 是业界领先的模型之一,实际上在非常非常小的空间内进行图像识别和图像分类,因此非常适合移动应用程序。但是他们的方法真正有趣的是他们是这样的...再次回到全堆栈的想法,他们有安德鲁·霍华德,他是提出这种真正突破性架构的人,他的驱动力是“嘿,我们需要尽可能精确、尽可能小和尽可能快的东西”。所以,相对工程权衡。但是他实际上是和收集新奇数据的团队坐在一起工作。他们实际上在试图找出更好的标注数据的方法,想出去除不正确标签的方法,获得更多数据,并找出他们何时需要更多数据。在同一个团队里,他和 Benoit Jacob 以及其他一些人一起工作,他们正在做这些低级的组装优化,以使这个东西在手机上运行得非常非常快。他们正在做所有这些 ARM NEON 工作,这实际上反馈到模型的设计中,因为他们喜欢,“嘿,如果这一层中有 8 的倍数,这意味着我的汇编例程实际上可以运行得更快一些”。另一方面,如果他们可以通过包括训练数据或填写标签来使模型更加准确,那么这意味着他们可以将准确性保持在同一水*,缩小模型,并看到准确性从更高的水*下降,因此他们可以通过改善数据集的标签来改善延迟。当你有一个围绕一组需求而统一的团队,并且每个人都沉浸在所有这些需求中时,你会从中获得非常惊人的结果。这是紧张的对立面,但对一切都准备好的团队来说,这是一个很好的对比。
Paco Nathan: 这种跨领域团队是多学科的。这是正确的道路。我在企业中看到的另一个方向是,可能有一个根深蒂固的现任团队在做商业智能,并且已经做了很多年,他们拥有自己的数据仓库。一些团队尝试不同的技术,显然他们要做的是创建一个不同的团队,给他们不同的角色,不同的名字。然后你在同一个组织里有竞争的团队。现在,我们正在引入更多的学习和令人兴奋的事情,这些事情超出了企业中的数据科学家正在做的事情的范围。所以,现在他们为机器学习工程师引入了一个新的角色,有了一个新的团队,它将分成两部分。我认为这是企业中出现的一种紧张关系,但另一方面,由于合规性问题,组织选择孤立 it 是有原因的。在金融领域的一些地方,我们看到可能有一个团队处理数据并开发模型,他们必须将这些模型交给另一个团队进行审计。实际上,不同的人在它进入生产之前会查看它,他们会给团队设置防火墙,这样他们就不能一起工作了。这在某种程度上破坏了跨学科的东西,但这正是我们努力应对合规性的方式。
安·斯潘塞:我想稍微解释一下这种紧张感,我记得几年前我在 O'Reilly 做数据编辑的时候,我记得当时有许多数据科学家来找我,他们表示他们刚刚获得博士学位,他们刚刚开始工作,有一段时间因为错误的期望而感到紧张。对吗?“我以为我会在这个项目上工作,但在开始日期,这不是我正在做的事情”。当时,我记得有像 Insight Fellows 这样的项目来帮助解决这个问题。你在目前的会议上有没有看到类似的事情,或者对真正进入这个领域的人的期望与他们开始后的经历有什么不同?
皮特·沃顿:我非常喜欢谷歌的一点是,它有一种非常好的文化,人们期待我们从事工程工作。在研究方面,很大程度上有一种工程文化,它不是关于“嘿,你不能做研究”,而是关于思考所有的权衡以实现最终目标。我认为这是一个非常有利的环境,你可以...我说的是安德鲁·霍华德,他在日本出版了一些东西。他在做这些开创性的架构,但他也花了很多时间倾听客户团队的意见,并与 NEON 汇编人员交谈,了解他们的目标是什么?我有什么选择来权衡呢?这可能很难向一个有学术背景的人解释。我认为,我们谈到了安德烈卡帕西,他有一个伟大的幻灯片。他是特斯拉的人工智能主管。他有一张他攻读博士学位时的精彩幻灯片。他只是在展示他的饼状图...他 90%的时间都在考虑模型,10%的时间在考虑数据。他有这个图表,现在他在工业界,他花 80%的时间思考数据,纯粹是因为在学术环境中,数据集是给定的。你试图将你的结果与其他人进行比较,所以你必须在数据集和如何保持稳定上达成一致。然而,在这个行业的大部分时间里,你实际上可以通过更新、改进、改变你的数据集、改变标签来进行改进,这可能会对系统产生真正的冲击,因为这是一种完全不同的技能,在学术界很难掌握。我认为这是最大的冲击之一。
艾米·海尼克:对,没错。我认为这又回到了一个问题,即要实现一个数据驱动的产品,需要做的工作范围非常广泛。我想我们以前谈过。有几个人已经成功地扮演了一个角色,他们真的花了所有的时间去思考更多的模型架构。只有少数人能够管理它,我认为只有少数几个问题需要人们超级专注地制作这些模型,但我认为大多数正在做的工作需要这种子问题的参与广度。我认为它们非常有趣,但它们与人们期待的不同。
Paco Nathan: 我看到的一个建议是多做交叉训练。一个我可以参考的好例子...Richa Khandelwal 是波特兰耐克公司数据工程经理之一。她在 OSCON 大学做了一个非常棒的演讲,讲述了他们如何让数据工程团队的人参加数据科学训练营,以便他们能够体会到与数据科学家一起工作意味着什么,反之亦然。他们把一个团队的人带到另一个团队进行交叉训练。我认为这是一个非常好的方法,可以打破一些障碍,也可以设定期望值,并有望让人们拥有更多筹码。
安·斯潘塞:我记得我们其他的一些对话...听起来我们肯定是在解决问题,解决一些紧张局势,对吗...我记得艾米有一个很好的“好奇”或“对问题空间更好奇”的框架。你能帮我打开包装吗?
Amy Heineike: 是的,我认为当我们进入问题时,如果你真的能接受存在子问题,一些很大的子问题的事实,如果你能以此为乐,那么我认为你有一个非常伟大、快乐的职业生涯在你面前。我认为归根结底就是这样。这里有一个折衷的作品....我们实际上在 Primer 团队中有相当多的计算科学家,Anna 是计算化学工作的博士[指向观众],这些人对算法感兴趣是因为他们想帮助解决一个问题。我认为,如果你把用户问题看作是一件有趣的事情来解决,如果你发现自己走在所有这些不同的道路上,有一段时间你沉浸在 UX,你会想,“哦,用户是如何看待机器学习输出的。”也许他们不像我理解他们那样理解他们,我已经在这个模型上研究了很长时间,并且已经解决了这个问题。或者,您突然发现自己对如何更容易或可伸缩地部署代码感兴趣。你对这些作品越好奇,我觉得这很有趣。你可以让不同的人聚在一起,一起工作,一起娱乐。
帕科·内森:只是其中的一个片段....为数据科学团队招聘,这一直是我们配备人员时更好的做法....是去特别是物理科学或物理工程领域,雇佣那些在某个领域的人,比如航空/航天,或者我雇佣了很多物理领域之外的人。因为他们有很多天生的好奇心。现在也有很多很好的方法让硬科学....我们在数据科学中看到的....正在帮助彼此传递信息。因为我确信你们中的很多人已经看过了,但是现在有一个关于科学中可复制性的大讨论。我们从这个数据和分析过程中开发的一些工具现在正在反馈到更传统的科学研究中,以帮助使研究报告更具可重复性。有一个对话,是关于我们如何不仅在科学中,而且在企业和行业中实现这一点,使整个组织的结果具有可重复性,这样你就不会对你看到的结果争论不休。
皮特·沃顿:在再现性方面重复一下....对于现有的许多机器学习论文来说,这也是一个巨大的挑战。我想,如果你拿起一张机器学习的纸,试着从阅读开始,实际上复制结果,这通常会非常非常棘手。有时候,即使对谷歌内部的人来说,这也很棘手。我们也有自己的重复性问题,在机器学习方面,我们需要真正改进工具,提高期望值。挑战的一部分是,这些论文中的一些,数据集很难得到。所以,这确实阻碍了我们的很多尝试。
Paco Nathan: 那你有什么要求吗?如果人们在谷歌内部发布一些东西?他们需要附上他们的代码吗?或者有某个回购的网址?这是怎么回事?
皮特·沃顿:我总是喜欢他们使用 TensorFlow(带着微笑和咯咯的笑声),我的意思是,严肃地说,有某种代码工件是非常受鼓励的。我觉得甚至不一定要写下来。人们只知道,为了对世界有用,甚至对谷歌的其他人有用,这种事情需要发生。
Paco Nathan: 现在你越来越多地看到研究论文使用芝诺多[【https://guides.github.com/activities/citable-code/】]和其他方式作为参考,作为 Github 的书面回购,甚至作为媒体发布后可以更新的链接。我知道 Fernando Perez 最*发表了关于这一点的文章,这是保持报告可持续性的一些小技巧。
Amy Heineike: 我想对论文问题有一点不同的看法。因为我们发现的一件事是,有时会有一份非常酷的文件出来,当你打开它时,你会意识到里面有很多你不需要的复杂内容,你可以扔掉它们。阅读这篇论文的关键是试图找出他们有什么真知灼见?然后你即兴发挥。我觉得有很多想法都是因此而产生的。从某种程度上来说,再现性并不重要,如果你完全复制它。我们希望有更好的方法来知道我们是否会对一篇论文感到非常失望,或者它是否真的很酷。进入出版物没有什么酷的,实际上当你把它剥开的时候,没有任何东西可以让你继续下去。
安·斯潘塞:为了解决一些紧张点,特别是关于论文的问题,我记得以前的谈话中人们都在谈论取舍....关于发表论文和接触研究人员的支持网络之类的。你愿意打开一点吗?
皮特·沃顿:我看到的最鼓舞研究人员的事情之一是,人们非常清楚他们需要研究人员正在研究的东西,实际上给他们指明方向,并说,“看,如果你能解决这个问题,这将是一件非常大的事情。”一个例子是,我在我的一些微控制器上做了很多工作,并喜欢尝试做一些非常小的负足迹设备。为了在上面进行图像识别,你只能使用 250 千字节的内存...你没有太多的空间。我真的很关心,“好吧,那么小的图像网络能有多好?”一些研究人员在内部会说,“哦,是的,我确实想过用这样的东西来玩,但是我不知道是否有人会真的使用它,所以我不打算发表它。但这是我的结果。嘿,你想合作什么的吗?”这是全部筹码的另一面。不一定要把这整件事都强加给研究人员。也许我与之交流和交谈的只是研究人员,他们实际上愿意和我交谈。他们真的很兴奋听到他们的研究可以被使用的方法,并得到关于方向的想法,他们应该思考的重要的未解决的问题。这真的让他们的一天,当你喜欢,“哦,我们实际上采取了这一点,我们认为它很有趣,我们打开它,我们这样使用它。你的工作确实有所作为。你不仅仅是一个 PDF 创建者。”
Paco Nathan: 我们在一次 Jupyter 会议上看到了一个非常有趣的案例。是国防部发来的。我想提出来是因为这是一种不同的借款。从某种意义上说,这类似于人们在研究他们想要分享的东西。只是,在情报界,你不能直接走到隔壁房间的人面前分享结果,因为你可能会进监狱。他们必须想办法让我们继续进行这种交叉合作,而不违反真正严格的数据隐私控制。有一个产品叫做 nb gallery[https://nbgallery.github.io/]出自 In-Q-Tel 的 41 号实验室。国防部的戴夫·斯图尔特一直在谈论这个问题。他们刚开始接触我们时有点害羞,因为他们说,“你认为国防部以外的人会感兴趣吗?”坦白说,任何银行都应该对此感兴趣。他们想出了在笔记本上记录问题陈述和解决方案的方法。然后能够自动地撕掉笔记本中的任何数据,以便其他团队可以查看和使用它。表面上,他们会放入其他数据,但仍然具有安全合规性。奇怪的是,现在你可以让情报部门将他们的代码提交回 GitHub。就像为 Jupyter 开发的东西被放回*台,然后像 Capital One 或其他公司进入并采用。我认为行业中有一个有趣的趋势,即高度监管的环境有如此多的要求,但他们也有如此多的尝试和完成一些事情的需求,这正是我们在情报界、金融、医疗保健以及完全控制隐私的地方看到的。这就是我们在开源中看到的更有趣的发展。一年前我绝不会想到这一点。但它正在发生。
Amy Heineike: 是的,对我们来说,我们产品的设计原则之一是,我们获取大量文本并对其进行总结,我们展示的所有内容都应该能够点击进入并查看其来源。这是为了向你展示这是一件非常有趣的事情...它从何而来。也许它是作为一个事实出现在很多文献中的。我们想到的一个问题是,如果它出现在不同的地方...它以什么不同的方式出现?哪一种方式具有代表性?当你试图解决问题时,会出现很多有趣的子问题。
皮特·沃顿:关于动力还有一件事。当你谈论那个的时候,我正在想这个。我实际上喜欢做的一件事是...我不擅长做模型....我喜欢把类似“嘿,这是我的简单语音识别工具”的东西放在一起,所有的基础设施就像“嘿,这是我创建的数据集,这是我创建的一些指标”,然后就把它放在那里。当知道人们比我更关注模型时,他们的眼睛会亮起来,他们会说“啊,我们可以做得比这更好。”他们不必担心数据清理带来的所有痛苦。数据收集,以及所有其他的东西。这是一种很好的激励方式。这导致了像卡格尔这样的事情。这是一个数据竞争框架网站,你可以在这里竞争,看看你能与世界各地成千上万的人一起解决机器学习问题。你可以得到这些现成的列,上面有所有这些公司提供的指标。我发现这是一个很好的进入机器学习的方式,并学习它的实际应用。
艾米·海内克:皮特的博客[【www.petewarden.com】T2]是关于一些最好的小教程。我想我最喜欢的是当你有一个猫探测器。[笑声]。几行。就几行。
安·斯潘塞:关于这一点,既然我们似乎是在为人们提供实用的建议,那么对于人们,或者刚刚开始尝试解决他们所看到的一些合作问题的人们来说,你还有什么想说的吗?
Paco Nathan: 我喜欢的另一个很好的例子是网飞的数据基础设施。米歇尔·乌福德[https://twitter.com/MichelleUfford是这方面的领导者之一。我想我们在 JupyterCon 就此进行了辩论。真正打动我的是米歇尔真正强调了文化对于解决这类问题的重要性。我认为这是我们在小组中讨论的广泛范围...他们的例子是,团队想出了某种文化方式来解决问题,并让许多人一起工作。我认为,尝试通过角色来发现这一点,或者清单是什么?我认为你真的需要在文化上传播它。
Amy Heineike: 我认为在这个行业中,一切都在不断变化,唯一不变的是你不知道自己在做什么。你必须不断学习。我觉得每六个月我都会做一次总结,并意识到有一些我不知道如何去做的巨大的新事物要学。通常在关键时刻,你会说,“好吧。我得到了这个。”我认为如果你能接受这一点,“好吧,我会一直学习,我会做一些新的事情,这没关系。”也意识到其他人都在那条船上。会有一些你知道的事情,也会有一堆你不知道的事情。如果你能谦虚地说,“实际上我不知道你在说什么。”当他们告诉你他们非常兴奋的事情,而你在等待解释,这样你们可以很快地互相学习。我认为这是真正的关键。
Pete Warden: 关于实用的建议,重复一下,如果你能找到合适的材料,那么用机器学习做一些有用的事情会出奇的快。传统的学术道路是博士之类的东西,如果你想真正深入研究,从头开始创造新的模型之类的东西,这是非常有价值的。但是对于开始和实际使用这些东西来说,有很多很棒的材料,你可以随便拿起。我认为 Fast.ai 有很棒的免费课程,非常侧重于工程,非常实用。有各种各样非常棒的解决方案。不要因为想“哦,我必须学会所有这些术语”而感到厌烦。有很多方法可以让你一头扎进去,开始玩东西,边玩边学。
Paco Nathan: 我能说说敏捷吗?这是我经常遇到的一件事,尤其是在企业中,因为你提到任何关于工程或数据的事情,你都会听到敏捷这个词作为回应。这是一种回声反应。所以有一代管理人员是在这种环境下成长起来的,对吗?我会提到大卫·塔尔比,我很喜欢他在《太*洋 AI》的演讲。他和 NLP 在医疗保健和医院做了很多工作。他进来展示了这些失败案例,当他们部署的模型与他们部署后的意图相反时。当你考虑一个敏捷团队时——无论你使用敏捷、看板,还是任何方法变体。当你在考虑构建一个 web 应用程序时,你会让你真正资深的人提前考虑这个问题,所以你的架构师、你的团队领导,他们会很早就参与到这个过程中来。然后随着产品的成熟,越来越多级别不高的人参与进来。所以他们正在构建不同的单元测试和更小的功能。这是一条成熟度曲线,与天赋水*相对应。大卫·塔尔比提出的一件事是,随着机器学习,随着数据科学部分投入生产,基本上是相反的。如果你只有一个数据集,你想创建一个模型,这就像一个家庭作业。你可以做现成的。一旦你在生产中就地部署了模型,你开始看到所有没有人预料到的奇怪的边缘情况,你必须解决这些问题,这是真正资深的人必须参与的地方,他们有这方面的专业知识。你可以从小处着手,然后真正引进大的武器。在我看来,什么是数据科学?机器学习、数据管理和统计的一些组成部分可能会变得非常奇怪——我在大学时不得不处理很多事情。这是对生产中的机器学习模型进行故障诊断,理解统计中的一些真正深度是你可以避免作为一个公司陷入困境的地方。不是很多人有这种能力。我就说不是敏捷,是相反。我不知道敏捷反过来是什么意思,但它难倒了我。[笑声]
Amy Heineike: 我认为正在发生的一件有趣的事情是.....所以有一天,当数据科学第一次被创造出来的时候,它正在成为一种东西。有很多人最终认同了这个术语。来自各种背景的人,因为对一些数据集好奇而走进来。我认为随着该领域的成熟,这有点有趣,因为你可以参加这些正式的项目,有很多人参加机器学习项目和计算机科学系。我很好奇这将如何发展。我们看到这个领域正在走向成熟,人们可以遵循一些更清晰的路径。从某种意义上说,这意味着人们进来时背景的缩小。另一方面,你有所有这些可用的工具、模型和方法,让真正广泛的人群参与进来,带来不同的观点。我真的希望我们能保持这种多样性,并利用这些工具的存在,这很好,而不是最终走上一条道路,每个人都必须通过相同的项目和相同的公司,只有一条道路,所以我们可以保持一些创造力。
Paco Nathan: 我很好奇,你们公司会有首席数据科学家吗?你会走那条路吗?比如在管理层。这是我们已经问过很多公司的问题。或者你更愿意尝试让它在团队中多样化?那种领导能力。
Amy Heineike: 在 Primer,我们所有的产品都是数据驱动的,所以我认为大多数人,大多数工程团队都有某种计算算法的经验。这是一个非常成熟的(公司)问题。
皮特·沃顿:我不知道。我的第一直觉是,这听起来像有一个首席编程官,你知道吗?[笑声]就像这个技能应该有点像这个横向技能。你希望管理层的人能真正理解。我不能说他们是否知道。
安·斯潘塞:听起来我们正在慢慢进入这种未来状态,艾米正在讨论团队可能会是什么样子。对吗?包括 Paco 反复强调首席数据科学家角色的潜力。[笑声]基于这一点。我们去未来状态吧。艾米稍微提到了她想看到的东西。就潜在的未来状态而言,其他人呢?要么是你认为会发生的,要么是你想看到的。
帕科·内森:我喜欢好奇心这部分。你认为你要去法学院并成为一名执业律师,你的职业就是持怀疑态度。我们需要另一种被认为是好奇的职业。他们可以互相制衡。我喜欢调查,我们做了很多调查,我看到一些有趣的谈话,关于人们做关于雇佣数据科学家的故事,以及分析数据需要什么。TapRecruit 已经做了很多这样的工作。他们发现一件有趣的事情是,寻找“高级数据科学家”的角色实际上不如试图让某人担任“数据科学家”的角色。因此,你会看到那些出色的环境科学家、天体物理学家或诸如此类的人转而申请后者。然后,尝试看看对初级数据科学家的要求真的很有趣,因为它们切入了基本的特质,比如好奇心,比如愿意花 80%的时间清理数据。我想我会更少地关注更高的层面,而更多地关注未来的道路和那里的特征
皮特·沃顿:我也很喜欢好奇心这个想法。我在 Jetpac 花费大量时间试图寻找优秀的旅行照片,并试图浏览数十亿张 Instagram 照片、脸书照片和 Flickr 照片,以找到某个特定地方的完美照片的原因之一。我们做了一些事情,比如通过识别人们脸上的胡子来寻找潮人经常出没的地方,诸如此类。但是我意识到,我们团队中的一些人比程序员更善于找出指导应该是什么。但是他们必须通过我们给我们需求,让我们建立模型。我最自豪的事情之一...我能够建立一个系统,在一个预先训练好的图像分类器上进行转移学习,我们的营销人员可以给它 100 张照片,分为 10 个不同的类别,它实际上会学习识别,比如,“哦,你想在照片中识别狗吗?给它一堆有狗在的照片,一堆没有狗的照片就行了。”无需任何程序员的干预,他们就可以在应用程序中部署并创建自己的模型。我真正希望的是,我可以帮助自己摆脱程序员的工作。我们有这种非常奇怪的结构,我们有懂得如何用这种非常神秘的语言写规则的神职人员。我们必须尽量减少这些琐事,以便能够与计算机对话。如果我们能改变一些事情,这样任何能给出一堆例子的人都可以选择正确的模型,然后给它一堆例子,得到一些像样的东西,然后快速迭代,这就是我未来真正兴奋的事情。我也是这么想的。我希望它能在整个组织中扩散,而不是如此孤立和条块分割。我有点希望 web 服务像 21 世纪初一样在企业中兴起。人们只需启动一个 web 服务器,其他人将在内部网内访问它,it 部门根本不参与。他们(它)变得非常恼火,然后他们不得不最终放弃,让人们去做。我有点希望机器学习成为销售、营销、支持和其他人都能轻松掌握并解决问题的东西。
艾米·海涅克:还有一部分是关于收养的。与各种各样的客户一起工作很有趣的一个原因是,有时实际上意识到,对于一些人来说,看着机器学习算法的结果,理解如何思考它是多么困难。例如,如何理解精确回忆?事实证明,对于那些想要一个能为他们提供结果的系统的人来说,精确回忆并不是那么容易解释的。其实概念上挺难的。这将是有趣的,因为模型和系统是建立在人们在正常情况下使用的数据之上的...所以他们家里有谷歌助手,对吧。他们有 Siri,他们开始想我怎么理解这个?有许多逻辑问题我们必须解决。当算法出错时。虽然谷歌搜索没有马上找到你想要的东西没关系,但是有很多系统....包括银行合规...很多严肃的事情我们需要小心。我认为这其中有一部分是关于让更多的人参与进来,因为我们可以建设。可能还有另一个部分,就是让更多的人参与进来,这样他们可以带来他们的专业知识,帮助我们思考我们正在构建的东西的含义,以及这对我们算法的用户意味着什么。
安·斯潘塞:让我快速核对一下时间。我想我们可以开始提问了。但是在我开始之前,在我们开始提问之前,有没有人对模型开发和部署的合作有什么最终的想法?
Paco Nathan: 好的,最*在 O'Reilly 会议上有一个趋势:深度学习在这些会议上做得非常好,有太多关于模型和机器学习的内容,但现在我们开始看到它有更多的分支,不仅仅是关于学习的部分。我的意思是,智力和认知还有很多其他方面,比如理解环境,能够做像时间表这样的事情。还有很多其他领域可能真的很有趣,所以我真的希望我们会有很多人致力于学习部分。但是,同样,作为一门计算机科学学科,追求更困难的问题。就像我们在 80 年代早期的“人工智能研究”一样,人工智能是关于一个更广泛的背景的东西,而学习部分只是其中的一小部分。所以我希望我们能解决这个问题,然后转向更难的事情。
安·斯潘塞:我们开始提问吧。让我们看看他们是否能让麦克风的情况继续下去。既然你拿着它,你想问个问题吗?
索思哈德·琼斯:当然。我是索萨德。我在多米诺公司做营销。作为一名营销人员,我的问题是,我有很多关于数据工程、数据科学、部署模型的人和开发模型的人之间合作的谈话。像我这种什么都不懂的营销人员怎么办?我是说真的。业务线呢?在哪里....[麦克风熄灭]
安·斯潘塞:你如何看待他们的融入?你如何看待商业利益相关者融入整个事件?
Paco Nathan: 主要是我们可以开始定义什么是风险方面的指标,什么是绩效方面的指标。kri 和 KPI 可以通过这种方式修改业务规则?答案是,在很多方面是的,但可能不完全是。到底怎么贴合?你如何让机器学习产品做的事情更加透明?我认为我们必须努力解决这个问题。我认为这是目前高管层和董事会面临的一个真正的难题。做决策的人让机器参与他们的决策,我们该如何权衡呢?
Amy Heineike: 我认为作为构建算法的人,我们有一种责任,去找出如何解释它们,并讨论其中的一些核心问题。我认为标签是一个有趣的例子,模型从标签中的模式反射回新的信息。你知道,这是一种令人惊讶的思考方式,如果你进入它,这种数据是什么并不明显。但是,是的,我认为我们应该非常认真地考虑如何向订婚的人解释这件事。
Pete Warden: 我认为一个真正重要的角色是你,你知道,营销人员,还有电话支持人员,他们实际上比坐在他们办公桌前的任何人都更了解我们的客户需要什么,更不用说做模型创建、编码或类似的事情了。你得到的机会越多,你就有越多的机会坐下来和那些标注数据的人,那些建立模型的人,那些写度量标准来评估模型做得有多好的人,说,“我知道你没有想过这个,但是我们有这个巨大的问题。每个人都在抱怨,你知道,不管它是什么,你的模型没有帮助。”然后,很多时候,人们会说“哦,哦,好吧,”那是...如果你真的可以...这不应该是你的责任,但不幸的是,这经常发生。
Paco Nathan: 在 Velocity 有一个有趣的演讲,GitHub 的一位机器学习人员(Ojomu Miller)做了一个主题演讲[https://www . oreilly . com/ideas/a-new-vision-for-the-global-brain-deep-learning-with-person-inst-of-machines],她谈到了深度学习模型以及你在不同层次中看到的那种架构。然后她拿起组织结构图,把它旋转了 90 度,做了同样的事情,并说“我们习惯了拥有相似结构的人组成的组织。机器学习模型看起来像是单向流动的,但是对于人的组织,我们看起来像是反方向流动的。但应该差不多”。这说明有很多反馈循环。看看我们如何为客户将机器学习部署到组织中,我认为你必须考虑你的员工及其领域专业知识。你想想你的模型在做什么,你想想你的客户,这三者之间都有双向反馈。你的人在帮助训练模型,应该向他们学习。你应该像这样,在某种程度上聚合你的组织在模型中所知道的东西。来自模型的反馈应该反映出这一点,如果没有,那么就有问题了。同样,模型通过产品与客户互动,如果这不起作用,你会接到支持电话,对吗?希望你也有专业的服务,销售人员等等,和你的客户交流。每个接触点都有双向对话。我认为,如果你不把一件事看成线性系统——这是一些输入,这是一个黑盒,这是一些输出——但如果你把一件事看成一个有机体,有许多反馈循环和许多动态,那么你就有一个更好的方式,让知道如何经营企业的人真正以一种真正健康、动态的方式与它互动。
观众 B: 所以我想把这个问题反过来问一下,如果你坐在数据科学或工程的包厢里,你如何在你和...我是一名数据科学家....你和工程师之间,或者相反,或者你和产品之间,或者市场营销,或者类似的事情?甚至是我们今天一直在谈论的,比如成为一名全栈数据科学家,或者别的什么。
安·斯潘塞:谁愿意先回答这个问题?
Amy Heineike: 我们发现 Primer 的一个很好的做法是,在产品团队中,数据科学家、工程师和产品经理都在一个团队中。他们将每天相互交流,直接对话。我想可能会有一些组织方面的东西可以帮助你....
观众 B: 我们是一家初创公司,所以我们很小
艾米·海涅克: …所以你们坐在一起,这是件好事。实际上你只需要多说一点。您希望数据科学家不要害怕去阅读应用程序的代码,然后开始询问关于它的问题,并开始解释他们遇到的问题。然后,工程师将询问有关数据科学部分的问题,以及它们所依赖的是什么。然后开始对话。
Paco Nathan: 在一家规模较大的公司,比如 170 人,我们会做的是将不同的数据科学家分配到不同的产品团队。但是我们想从那些不经常互相交谈或者看不到他们的项目的人们那里得到更多的反馈。所以我们做了每周一次的研讨会,我们会邀请利益相关者。我们会邀请财务负责人来听听。我们会要求人们不要在许多试探性的问题上过于咄咄逼人,但有点像,你可以参与,但不要试图让他们为难,因为我们真的想在这里分享。他们让我们开的更像是研究生研讨会。总体来说效果不错。通过这种方式,团队之间有很多很好的反馈。
Amy Heineike :我们在 Primer 内部进行技术对话,我们这样做...每隔一周,我们会举行机器学习团队展示的会议,然后是全公司范围的会议。每个人都非常兴奋,特别是技术讲座,销售人员会出现,每个人都会出现,因为很多人都在公司,因为他们很兴奋我们可以真正追求最先进的模型并解决这些超级有趣的问题。我认为有时这种论坛是一件好事。来展示,或者谈谈我们遇到的有趣的挑战,诸如此类的事情。
Pete Warden: 这有点不同,但是我最喜欢的方法之一,特别是当我们是一个小团队时,实际上产品原型是一种叫做 Ozzing 向导的东西,在那里你实际上有一个人在窗帘后面而不是一个瓶子。另一端的东西,比如,聊天,或者你知道,谁得到了像一个屏幕截图,但实际上并没有进入。所以人们...根据他们在屏幕上看到的实际情况,基本上必须假装是模特。这两种都像是一个非常有趣的派对游戏。但它真的,就像你在实际产品上得到的迭代。因为通常情况下,产品团队或产品人员(如果是一家初创公司)不会真正理解他们必须考虑的所有问题,也不会像机器学习解决方案那样在头脑中建模。如果你能向他们展示,即使是一个在这个世界上活了 25 年的人,也不能用他们得到的信息来解决这个问题,那么我们可能无法训练一个模型来做到这一点。让他们思考“好吧,我们到底需要生产什么?”。是的,这是我最喜欢的破冰方式之一,如果你想的话。
Southard: 我们现在让它(麦克风)工作了。
安·斯潘塞:哦,真可爱。这边有个问题,我不知道具体在哪里。
约翰:嗨,我叫约翰。关于这个问题,生产后的调试周期。对这种情况会持续多久有什么指导吗?它收敛吗?生产目标之间有任何差异吗?你知道,像 API,web 应用程序,或者某种嵌入式目标呢?然后,当您进行更新时,it 部门的预期行为是什么?
帕科·内森:我们的很多东西真的很重要。第一部分很简单。正在进行中。我的意思是,如果你的业务中有可操作的东西,它应该是持续的。你应该监视它。这是问题的第二部分。一旦你将这些类型的产品部署到自动化的东西中,或者与你的客户一起自动化的东西中,他们将改变与你的客户的交互。我们正在寻找改变输入数据的方法。你会期望它必须被调整和校准。但我不认为它会停止。我认为这应该是对运营的观点,就像 C-Level 式的业务运营,这是你所给予的一部分。
我愿意考虑我们现在正在处理的任何问题。我想我可以笼统地说,因为现在几乎所有公司都在研究技术,所有公司都必须处理数据。我认为我们应该着眼于这些问题,我们将通过一个团队和自动化来解决它们。对于任何给定的问题,这将是一个权衡。有些问题一开始会少人。有些在开始时自动化程度较低。但我认为,以此为基准和期望,我们部署的模型将会不断调整和校准。我们现在只是勉强能够理解我们称之为公*的数学。这将是一个非常长的对话,围绕着它有许多合规性。这是另一个正在进行的领域。那是不是-
约翰:是的。
Amy Heineike: 我认为数据也总是在变化,因为世界总是在变化。即使模型在某一点得到了重建,它也不一定会继续成为一个好模型。
皮特·沃顿:是的,至少当我在一家初创公司的时候,我们曾经开玩笑说,我们在模型中真正关心的最终指标是应用商店的评级。因此...
约翰:那目标呢,对吗?我的意思是,部署在汽车视觉系统中的东西和全球应用程序是有区别的,对吗?有什么智慧或经验吗?
帕科·内森:嗯,请讲...我的一些背景是在广告技术领域,所以在一个大型广告网络中,主管们总是问有什么好处。你必须证明这一点,他们很友好地在每个团队的区域顶部放置了显示器,大液晶显示器,这样你就可以报告你每小时的指标,他们可以在大楼里走动,只是看着并指出当时表现不太好的人。没有压力....但是,是的,我认为最终你必须通过某种初始部署阶段,到你展示这对于降低风险有什么样的提升或什么样的暴露,或者不管你的意图是什么,你的目标是什么。希望你能从某个角度看到积极的一面。你得到一些周转投资。如果你达不到这一点,那么可能会有更大的问题。或者至少我是这么看的。这回答了吗?
约翰:嗯。
安·斯潘塞:我想我们已经超时了,但是有没有人有最后一个想挤进来的问题?哦,等等,有吗...你需要*一点吗,还是你很好?好吧。让我们看看麦克风是否工作。
观众 C: 是的,当你想到即将到来的全球关注的自动化用户友好的媒体助理的最新情况,如谷歌云、AutoML,你认为它们不会在几年内成熟,或者你认为你会说这些数据科学家的工作遇到了麻烦?
帕科·纳森:好吧,我就说一个数据点。我们刚刚在奥赖利做了一个大调查。我们进行了调查,我们在全球范围内获得了超过 11,000 名关于采用机器学习的受访者,大多数是在企业中。我们希望看到,这是问题之一,我认为 AutoML 的采用率为 2%。离完全过时还有很长的路要走。
Amy Heineike: 我确实认为你试图解决的问题的框架,并确保你实际上是在定义一个值得解决的问题,并且输入的数据和输出的标签实际上反映了你想要解决的问题。这并不是微不足道的,所以如果我们能达到模型部分微不足道的程度,仍然有所有这些工作在进行,而且是巨大的...因为卡格尔一直在附*。如果你想走出去,让成千上万聪明的博士生用一个惊人的模型解决你的问题,只要把它贴在 Kaggle 上就行了。问题是 Kaggle 竞赛的准备工作非常困难,所以这就是为什么我们没有通过 Kaggle 来解决数据科学的问题。
艾米·海尼克:你喜欢 AutoML 吗?****
皮特·沃顿:你说的。
安·斯潘塞:好的,非常感谢你今晚抽出时间。我们实际上在接下来的 15 分钟左右都不会关闭。当我参加这些活动时,我实际上不是那个在所有人面前提问的人。我通常是在这部分关闭后问问题的人。所以放心吃吧。我想有一些糖果和甜食之类的东西。我们要到 8:30 以后才会关门。
帕科·内森:还有披萨吗?
安·斯潘塞:我想还有披萨。我从这里看到了披萨,所以请随意上来问问题。非常感谢你。
为便于阅读,本文经过编辑。
数据科学家访谈:来自 Wix.com 的 Robert Woolfson
原文:https://www.dominodatalab.com/blog/data-scientist-interview-robert-woolfson-from-wix-com
我们最*采访了 Robert Woolfson,他是曼彻斯特大学的计算机科学博士,现在领导着 Wix.com 大学的数据科学团队。
罗伯特,首先感谢你接受采访。先说你的背景。
到目前为止,数据科学只是我生活中很小的一部分。数据没有。在我的职业生涯中,我们使用人工智能(主要是神经网络和遗传算法)来创建自动化交易系统,首先根据历史数据进行训练、优化和测试,然后再投入实际交易。我的博士学位致力于建立一个优化、测试和证明交易系统可靠性的框架。在我之前的工作中,我也开始学习大数据和 Hadoop,但无法真正找到一种方法将它实际用于我正在做的事情,但我抓住了并行、分布式系统的想法,并行处理是我开始考虑的事情。
金融数据一直是我的专长,但我确实厌倦了它,几年来我一直在攻读博士学位,几年来我一直在研究数据。我很沮丧总是处理同样的问题,我觉得我需要一个新的挑战。从那时起,我开始更积极地关注数据科学领域,最后我参加了 Wix 的面试,当时我不知道他们在处理大数据。面试真正让我兴奋的是,我们做了一个案例研究,这是一个分析性的例子,不是专门使用大数据,而是更理论化,对我来说非常有趣,我做得足够好,通过了面试,现在我在这里。
提前思考是做好研究的关键。
您记得使用的第一个数据集是什么?你用它做了什么?
我记得我工作的第一个数据集是在大学期间,我在处理历史金融数据。道琼斯的历史价格和过去 100 年的历史*均价格。这是我用来运行神经网络的数据,以寻找日常变化运动中的不同模式。这是一个本科生项目,它更侧重于创建神经网络的工作,而不是准确预测股票市场的运动。当时我对交易和股票市场非常感兴趣,它们都是关于数字和数据的。但这是一个本科项目,从那以后我已经走了很长一段路。技术发生了变化,数据变得更大了。
如何看待数据科学家这个头衔?
有些人真的很喜欢“数据科学家”因为听起来比分析师好听。就像任何事情一样,你可以称自己为工程师、程序员或开发人员,这取决于你在和谁说话。我真的不在乎。有时当人们不知道什么是数据科学家时,我会告诉他们我是一名分析师,有时我会告诉他们我是一名程序员。
现在,我们来谈谈 Wix。
Wix 有一系列不同类型的分析师。我们试着不要把头衔看得太重,我们可以有任何我们想要的头衔,只要不是首席头衔。我的内部头衔是“数据魔术师”,我的一个同事是“数据科学教授”。我们只是乱搞头衔,因为我从来不想把自己从团队中分离出来,我们都一起工作,每个人都做一份部分分析、部分统计、部分数据科学的工作。
简单介绍一下 Wix。你会如何向不熟悉它的人描述它?
Wix 是一个自己做网站的*台。如果你不知道如何编码,如果你不知道 Javascript 和 HTML,你可以来 Wix,你可以使用我们的*台来建立一个专业的网站。它非常简单,只需拖放,Wix 和第三方应用程序中有许多功能,您可以添加这些功能,使您的网站不仅看起来漂亮,而且具有大量功能,如商店或博客。创建一个好看的网站真的很容易,而且你可以免费完成。
您如何在 Wix 使用数据科学?
我和我在 Wix 的团队正在推动一个分析过程。作为一名博士,我从一个假设开始,提出一个假设,检验我的假设,我不是在专门讨论 P 值检验。我试图实现的是一个思维过程。我们已经开始完成一项研究,我想看看数据和如何提出正确的问题。这不是说“我们可以看看这些数据吗,因为它可能很有趣”,而是看一看我们可以从中提出正确问题的数据。在我看数据之前,我试着问这些问题,它们的答案不是 A 就是 b,这是我的两个选择,然后我可以更进一步。在开始我的分析之前,我大概知道我会期待什么,因此我知道如果我得到答案 A 或答案 b,我会做什么。我的路在我面前,很清楚。我只需要做一些技术性的工作来找出下一步该怎么走。
我们方法中的最后一步是,如果您对需要做出的更改有所了解,那么数据科学家的工作就是成为该更改的产品经理。因此,我们将问题概念化,这将由遇到问题的产品经理或高级员工来处理,然后我们提出正确的问题并创建一个假设,这将导致可操作的洞察力,并在我们得到答案后管理这一变化。这是我们试图在 Wix 的所有分析任务中实施的数据科学流程。
今年你一直在做什么,为什么/如何让你感兴趣?
在 Wix,我们知道提供更好的产品意味着更多的用户会转向 premium。我们使用数据提供持续的产品反馈。我们有产品本身,开发者正在构建。产品中的功能将数据作为事件发送,由于 BI 团队是数据架构师和工程师,这些数据存储在 Hadoop 文件系统中。这些数据被聚合并存储到 SQL 数据库中。整个分析团队可以访问 Hadoop 和数据库来研究数据并给出反馈。创建一个持续的反馈回路,向管理层反馈我们的工作情况,同时也向产品本身反馈他们的表现如何,是否存在任何问题。因此,我们可以不断创造出优秀的产品。很多都涉及到 A/B 测试,与产品团队坐在一起的分析师管理 A/B 测试,所以任何时候我们想要做出改变,我们都可以看到它是在伤害我们还是帮助我们。
如果我们发现性能方面的问题,我们会专注于减少滞后时间等。来自数据的知识是我们的专长,我们目前是整个组织中每个人的知识和数据之间的纽带。目前,分析师是数据、开发人员和产品经理之间的桥梁。但随着时间的推移,我们正在寻找有助于此的工具,这样产品经理自己就可以访问数据集,这将从本质上解放分析师,使他们可以专注于更深入的研究。
来自数据的知识是我们的专长,我们目前是整个组织中每个人的知识和数据之间的纽带。
我们经历了某种转变。Wix 做了一个超级碗广告,全是关于“开公司,建网站”的概念。我们不仅仅是建立一个网站,还有商业元素。我们去年发布了酒店,允许人们管理一个小酒店,你可以在前端为你的酒店增加房间,也可以在后端管理预订,包括支付和所有的功能。就数据而言,我们接下来要考虑的是,我们如何继续利用这些数据来帮助我们的用户在业务上取得更大成功。整个公司都参与帮助人们建立他们的企业。
我们也从 OKCupid 和 Pinterest 数据博客中受到很大启发,我们正在考虑在 Wix 实施类似的东西。这一举措的唯一问题是许多数据是专有的。因此,我们正在考虑创造性的方法来发布数据见解并进行讨论。
您发现哪些数据科学方法最有帮助?
我们在 Wix 实施的流程是一种工具。方法论的一部分是能够在任何时候呈现。我希望人们从空白的 PowerPoint 演示文稿开始他们的研究,并在进行过程中开始构建。最棒的是,你可以从你的团队得到持续的反馈,这样你可以节省很多时间。我一直在思考的是,如何更好地管理这些流程,如何让我的数据科学家更高效。
对刚开始学习数据科学的学生或从业者有什么忠告吗?
关键是要学会如何提出正确的问题。问正确的问题,但也要考虑可能的结果。我在高中时从一位物理老师那里学到了一些东西,他说,“在你接触计算器或电脑之前,估计一下正确答案是什么。”你大概可以估计得足够接*,考虑一下,至少当你从你的计算机得到一个答案时你会知道,如果它不是正确的数量级,那么你在某个地方犯了一个错误,它需要第二次检查。提前思考是做好研究的关键。
非常感谢您的宝贵时间!真的很高兴在 Wix 了解更多关于你的研究和你正在做的事情。
参观Wix.com跟随罗伯特@ type 1 cycling
数据科学家?程序员?它们是互斥的吗?
原文:https://www.dominodatalab.com/blog/data-scientist-programmer-mutually-exclusive
这篇 Domino Data Science Field Note 的博文提供了 Hadley Wickham 的 ACM Chicago 的演讲中的亮点,“你不能在 GUI 中做数据科学”。在他的演讲中,Wickham 主张,与 GUI 不同,使用代码提供了可再现性、数据来源和跟踪变化的能力,以便数据科学家能够看到数据分析是如何发展的。作为 ggplot2 的创造者,Wickham 也提倡将可视化和模型结合起来使用,以帮助数据科学家找到他们数据中的真实信号,这并不奇怪。这篇博文还提供了来自原始视频的剪辑,并遵循了附属于原始视频记录的知识共享许可。
数据科学:迭代过程中的价值
RStudio 的首席科学家 Hadley Wickham 在 ACM 芝加哥会议上发表了题为“你不能在 GUI 中进行数据科学”的演讲,该演讲涵盖了数据科学的工作流程和工具。例如,Wickham 提倡使用可视化和模型来支持数据科学家在他们的数据中找到真正的信号。他还建议利用编程语言的优势,包括可再现性、数据来源和查看数据分析如何随时间演变的能力。他还谈到了他喜欢 R 编程语言的什么。从他的角度来看,使用 GUI 没有考虑到这些好处。根据本次演讲的幻灯片,他将数据科学定义为“数据成为理解、知识和洞察力的过程”,这一点尤为重要。GUI 故意混淆这个过程,因为你只能做 GUI 发明者希望你做的事情。
可视化和模型
在回答“为什么编程?”这个问题之前在他的演讲中,Wickham 讨论了两个“主要引擎”,这两个引擎有助于数据科学家理解数据集内正在发生的事情:可视化和模型。可视化是一种工具,使数据科学家能够迭代“模糊的问题”,并帮助他们完善它。或者提出问题并“试图让它足够精确,这样你就可以定量地回答它。”Wickham 还提倡使用可视化,因为它可能会让数据科学家感到惊讶,或者让他们看到他们没有想到会看到的东西。在演讲中,Wickham 指出“你看到的第一个可视化总是会揭示数据质量错误,如果它没有揭示数据质量错误,那就意味着你还没有发现错误。”然而,他也指出可视化并不能很好地扩展,并建议使用模型来补充可视化。当数据科学家能够使他们的问题足够精确以使用算法或汇总统计时,就使用模型。模型比可视化更具可扩展性,因为“在问题上投入更多的计算机比投入更多的大脑要容易得多。”
为什么编程?再现性、出处和跟踪变化
Wickham 提倡使用编程语言而不是 GUI 来进行数据科学,因为它提供了再现工作、理解数据来源(这也与再现性相关)的机会,以及查看数据分析如何随着时间的推移而发展的能力。Wickham 特别指出的两个有用的工作流程包括剪切粘贴和使用堆栈溢出。虽然在《幽默》中提到了这些工具,但代码是文本,很容易剪切和粘贴文本,包括错误消息到堆栈溢出中以找到解决方案。此外,理解数据来源能够实现可再现性,因为它使数据科学家能够“稍后用新数据重新运行代码,并获得您可以使用的更新结果”。使用代码还可以让数据科学家通过 GitHub 等开放方式分享他们的工作。在他演讲的这一部分,Wickham 提到了 GitHub 上的一个项目,在这个项目中,人们可以看到一系列提交,深入到提交,并看到“数据分析现在的情况,但你可以看到它是如何随着时间的推移而发展的。”他将此与 Excel 进行了对比,后者为人们提供了在不知道出处或没有回滚选项的情况下意外随机化数据的机会。
为什么用 R 编程?尽管有怪癖?包裹。
由于 Wickham 是 RStudio 的首席科学家,他表示,虽然他认为“Python 也很棒”,但他“特别喜欢”。吸引韦翰的几个 R 特征包括
- 它是一种函数式编程语言,允许你“通过用各种方式组合函数来解决问题”
- R 如何提供查看代码结构的能力
- R 如何“赋予我们这种不可思议的能力,来创建适合数据科学过程某些部分的小领域特定语言”。
这也导致了构建 R 包的可能性。Wickham 指出,软件包允许人们通过将复杂的问题分解成更小的部分来解决它们,这些更小的部分可以从一个项目中取出,然后“以不同的方式重新组合”(可再现性),来解决一个新的问题。
结论
正如 Wickham 将数据科学定义为“数据成为理解、知识和洞察力的过程”,他提倡使用数据科学工具,从迭代、惊喜、可再现性和可扩展性中获得价值。特别是,他认为成为数据科学家和程序员并不相互排斥,使用编程语言有助于数据科学家理解他们数据中的真实信号。虽然这篇博客文章只涵盖了 Wickham 的 ACM 芝加哥演讲的一些关键亮点,但完整的视频可以观看。
^(Domino 数据科学领域笔记提供数据科学研究、趋势、技术等亮点,支持数据科学家和数据科学领导者加快工作或职业发展。如果您对本博客系列中涉及的数据科学工作感兴趣,请发送电子邮件至 writeforus(at)dominodatalab(dot)com。)
数据科学家访谈:埃森哲 EBay 的 Skylar Lyon
原文:https://www.dominodatalab.com/blog/data-scientist-series-skylar-lyon-from-ebay-for-accenture
最*,我们采访了代表埃森哲在 EBay 工作的高级数据科学家 Skylar Lyon。
你的 30 秒简历是什么?
我在密苏里州的堪萨斯城出生并长大,去了东部的学校获得了本科学位,在那里我对数据工程和科学产生了兴趣。我在国防行业工作了大约七年,开发和部署预测分析,主要是时空类型的分析,然后决定尝试咨询生活,看看硅谷发生了什么。到目前为止,它很短,但非常令人兴奋,我真的很乐观,充满希望,只是这里的能量,它真的很有感染力,很有趣。当我不玩数据或坐在电脑前时,我通常会参加耐力运动,或者尝试爬山或在山里跑很长的距离。山脉和海洋是真正让我扎根的地方,我认为花时间审视自己很重要——这是我做得最好的方式。
数据在你的个人生活中有多重要?
不久前,在我的生活中有很长一段时间,我完全被自己的个人健康和表现的数据所驱动。我每天早上起床,在起床前检查我的静息心率和心率变异性分数,然后立即检查水合程度,然后称体重。很多天,我会整天戴着心率监测器,并且总是在锻炼期间,只是为了收集所有这些统计数据。每个星期天,我都会坐下来,计划下一周每天的锻炼计划,并坚持下去。如果我骑自行车,我会使用功率表通过功率数据进行训练,停留在非常具体的功率/目标区域,我会每周进行调整。我接受了季度血液测试,以确保所有这些水*都在我希望的水*。即使是现在,如果有人给我一个植入芯片的机会,可以记录很多生物特征,我也绝对会接受。
是什么让你不再关注数据驱动?
I wanted to return to "truer" just racing for the fun of it and not worrying about my results and performance quite as much and just enjoy the moment
你不能改进你没有测量的东西。在我生命的那个时期,我测量一切,寻求运动的进步。我参加了更激烈的比赛,我被激烈的比赛搞得精疲力尽,我想回到【更真实】的状态,只是为了乐趣而比赛,而不是太担心我的成绩和表现,只是享受这一刻。所以这是一个组合,我的佳明手表也坏了。我发现如果不记录和分析数据,我就无法健身。我不得不立即买一块新手表。我已经变得依赖数据,如果不能实时看到我的数据,我就无法进行锻炼。它变得有点痴迷,现在我什么都不看了。但是我确信在我们知道之前,我会回到那列火车上;很难远离苹果手表。
你是如何对数据工作感兴趣的?
我加入了弗吉尼亚大学的系统工程项目,事实上,我选择这个项目只是因为它关闭的门最少,它没有给我任何职业道路上的束缚。当时我不确定自己想要什么。我记得在我的第三年,我们真的一头扎进了系统工程,这实际上是应用数学和统计学——大量的商业应用——一般问题的解决。在我们的数据建模课上,我们研究了挑战者号的灾难,并对导致爆炸的 o 形圈运行了回归模型。就在那时,我意识到数据是多么强大和有洞察力。通过更好地理解数据和提出更好的问题来获得这些见解,您可以节省数千小时的劳动、人类生命和资本,这些都在事故中化为乌有。那是我的“啊哈时刻”,也是我真正对数据的力量感兴趣的时候。
您记得使用的第一个数据集是什么?你用它做了什么?
第一组固定数据[挑战者数据]让我兴奋不已。在现实世界中,我在联邦计算机研究公司工作,负责我们为军队开发的预测分析*台。这个想法是帮助预测路边炸弹,IED(简易爆炸装置),这非常令人兴奋和有趣,因为我真的觉得我在帮助部队保护和拯救生命,并为此使用数据。我们开发的这些模型被部署到伊拉克和阿富汗,我实际上两次去伊拉克部署这些模型,和士兵们坐在一起,和他们一起工作,这是一次改变生活的经历。
你能分享一些你在战壕里的有趣经历吗?
The idea there was to help predict roadside bombs, IEDs ... It rose out of need for IED prediction but we generalized the model for all sorts of event prediction.
在更冒险的层面上,我乘坐黑鹰直升机在巴格达上空飞行,飞到伊拉克东部各省,并驾驶车队在城市中穿行。当我们经过这个国家时,透过 MRAPs 非常小非常厚的窗户向外看去,真是太迷人了。除此之外,另一件令人难以置信的事情是我们在那里行动的规模和范围,因为你并不真正了解(VBC)胜利大本营是什么;在真正到达那里之前,很难真正理解它是什么样子的。它确实是一个独立的城市,有自己的基础设施、电网、洗衣设施和餐饮设施。它是巨大的!我永远不会从美国的新闻报道中知道。这确实改变了我对现代行动的范围和规模的看法。
关于我们的预测建模,另一件很酷的事情是,它源于对 IED 预测的需要,但我们将该模型推广到所有类型的事件预测。只是展示了如何用一个非常具体的用例开发一个模型,然后将其一般化以捕获一个更广泛的问题集。太令人兴奋了。
今年你一直在做什么,为什么/如何让你感兴趣?
The amount of data EBay has captured over the years is absolutely enormous! They have one of the largest data warehouses in the world. So the data is all there, now it’s a matter of figuring out what we do with it.
不到一年前,我改变了想法,决定看看除了国防之外,世界上还有哪些其他的数据应用。因此,我开始与易趣和营销界合作,试图更好地了解客户及其意图和行为。尤其是在硅谷,在这个最*的项目中,我最感兴趣的是与外部供应商合作,将其他工具集整合到现有环境中,并研究我们如何真正理解这一切。EBay 这些年捕获的数据量绝对是巨大的!他们拥有世界上最大的数据仓库之一。所以数据都在那里,现在的问题是弄清楚我们用它做什么。过去使用的许多传统工具无法处理这种规模的真正大数据。
说到工具,你有没有发现你喜欢的很棒的工具或应用?
我认为我最初的研究有两个主要焦点,那就是数据库中的内存处理,我认为两者都为不同的问题提供了实用的解决方案。内存中对于交互式数据操作和洞察建模是非常好的,对于数据-即然而,事实证明,对于 EBay 来说,内置数据库在一个完全不同的规模上非常有效;横向扩展到 Pb 大小的数据,这种数据目前很难在内存中捕获,但对于夜间批处理作业等同样重要。这两种技术很好地互补了。
从建模的角度来看,看到神经网络和深度学习模型的复兴很有趣。最*,随着许多令人兴奋的最新发展,它们被证明是特别强大的。像大多数事物一样,模型时有时无,目前神经网络非常热门,它被证明可以将回归和随机森林类型模型推进一步。然后就变成了可用的计算量,你能训练这些模型并足够快地运行它们以证明它们的复杂性,越来越多的答案是肯定的——这是非常强大和有趣的。
你认为机器学习和深度学习的未来在哪里?我们要去哪里?
这个领域是半新的,又是新的。我认为这是因为现在我们有了早期没有的计算能力和能力来真正利用深度学习,所以正如我前面提到的,现在它正在复苏,每个人都在投入金钱、时间和精力,这是一个热门话题。我看到了趋势的形成和整个景观——创新的速度只会加快,我认为这将让许多人措手不及,他们周围的世界将会变化得多快。当我到了我母亲的年龄时,世界将会完全不同,我的父母已经看到了世界的许多变化,但他们现在看到的世界,大部分在 30 年前对他们来说是可识别的,我不确定再过 30 年这个世界会有多可识别。我认为,这很大一部分将由机器学习模型和运行这些模型的难以置信的计算量来驱动。自动驾驶汽车和无人机,那只是冰山一角。一旦每个人都在一个他们都连接在一起的容器中移动,当效率真的达到我们难以理解和认识的水*时。
机器学习领域有哪些创新者和思想领袖?谁是在早期做正确事情的创新者?
老实说,这个社区。我认为它的大部分是由社区驱动的,我认为研究机构下到孩子们只是在一台旧电脑上黑客,他们都在驱动它。我认为这是因为它的前景和潜力。谷歌在提供这方面的思想领导力方面取得了巨大进步,并为这些举措投入了大量资金和人力资源。忽视它们和它们的影响是愚蠢的。 H2O 是我合作过的另一家供应商,他们在推进这些数学模型方面做了很多工作。他们刚刚举行了他们的第一次会议——H2O 世界——今年有一群非常聪明的人,他们不仅展示和证明了你提到的思想领导力,而且还参加了会议,进行了学习。与会者将带着自己的想法运行,找出利用这些工具的方法,并提出新的应用程序。我最*看到的一个巧妙的应用是帮助预测一个生长年份是否会生产出顶级葡萄酒。那很有趣。
对刚开始学习数据科学的学生或从业者有什么忠告吗?
I think the most important part is to keep an open mind and also not discount assumptions in the data because it’s very easy to do and to gloss over that.
数据科学现在是一个非常热门的领域,它令人兴奋,而且变化很快。我认为最重要的部分是保持开放的心态,也不要低估数据中的假设,因为这很容易做到,也很容易掩盖。很多时候,你只是想获得数据,然后在数据上加上一个模型,然后说这是结果,这是结果,但实际情况要比这微妙得多。实际上,它的大部分涉及准备阶段,回到旧的 80/20,它的大部分涉及清理数据,搜索异常值,拟合正确的分布,并真正了解数据的形状。我认为数据的形状是最重要的部分。我认为,一旦你理解了这一点,并且能够对数据、假设、可用的工具、要使用的模型保持一种非常开放的思维和观点,那么你就不仅仅是随大流,而是发现原创的见解——这是令人兴奋的部分。而这一切都源于对数据形态的理解和保持开放的心态。
我们非常感谢 Skylar 抽出时间。可以关注他@ skyyhigh
数据科学家:仍然是“21 世纪最性感的工作”?
原文:https://www.dominodatalab.com/blog/data-scientist-still-the-sexiest-job-of-the-21st-century
早在 2012 年,《哈佛商业评论》宣称:“数据科学家:21 世纪最性感的工作。”作者 Thomas Davenport 和 D.J. Patil(现任美国白宫首席数据科学家)在他们的文章中花了很多篇幅来定义数据科学家的工作。当时,大型企业刚刚意识到数据科学在释放数据力量方面的重要性。作为一个相对较新的学科,他们指出,对数据科学家的需求远远超过了供应,“数据科学家的短缺正在成为一些行业的严重制约因素。”
结合起来,它日益增长的影响力和达文波特和帕蒂尔预测的人才短缺让数据科学有了更多的能见度,特别是在 Glassdoor 随后进行的劳动力市场调查之后。该组织广受期待的年度报告通过三个因素分析工作:1)基本工资中位数,2)美国公司的职位空缺数量,3)担任该职位的员工的总体工作满意度。不出意外,Glassdoor 在 2016 、 2017 、 2018 以及 2019 再次将“数据科学家”列为“全美最佳工作”。虽然在 2020 年已经滑落到第三位,但很明显,现在仍然是成为数据科学家的大好时机。
对于数据科学家来说,看到薪水、工作机会和工作满意度的上升令人兴奋。他们当然赢得了这一荣誉,因为数据科学已经成为许多财富 500 强公司的关键竞争优势,并在制定关键业务决策时为数据科学家赢得了董事会席位。但是…达文波特和帕蒂尔八年前预测的供应短缺仍然成立吗?或者,技术进步和商业环境的变化是否给了公司更多机会来大规模建立数据科学团队?
根据定义,数据科学家是独角兽
在我们深入探讨这些问题之前,让我们先来看看导致合格数据科学家短缺的主要因素之一。数据科学和数据科学家的定义有很多,但无论来源如何,数据科学家都需要三种非常重要的技能:
- 数学和统计学。数据科学的端到端流程深深植根于数学和统计学。例如,从通常杂乱和不同的数据中创建理解需要统计分析。数据科学家应用的技术,包括所有的机器学习,在很大程度上是基于数学公式的。
- 领域专长。关于特定行业或部门的知识,包括其业务挑战和各自的术语,极大地增加了数据科学家找到(然后解决)正确的业务问题的可能性。
- DevOps。数据科学家在其工作的研发阶段对数据、存储、计算等有高度专业化的需求。之后,他们需要应用重要的 DevOps 步骤来将他们的模型投入生产。
考虑到数据科学家必须掌握的各种技能,难怪公司很难找到他们!
更少的 DevOps =更多的合格候选人
在这个博客网站上,我们谈论了很多关于数据科学*台可以给想要扩展数据科学和机器学习的组织带来的好处。例如,我的同事大卫·布洛赫在 6 月份写了一篇很棒的博客,其中有一些关于公司如何增加其机器学习实践成功机会的指导原则。他提到了给予数据科学家实验自由的重要性,并以验证和复制新建模方法的强大流程作为支持。但是,像 Domino 这样的数据科学*台的出现真的能帮助公司改善他们招聘和聘用合格数据科学家的方式吗?
在数据科学*台的众多优势中,它们为数据科学家提供了对可扩展计算的自助式访问,以进行强大的实验。强大的资源,包括多核 CPU、GPU 和最新的分布式计算框架,如 Spark 和 Ray,只需点击几下,就可以轻松启动,而无需非常了解 DevOps。Domino 将自动分发所有必需的包和依赖项,这样就不会再有开发人员头疼的问题和浪费 IT 时间。
在过去的几年中,我们看到人们越来越担心数据科学模型能否将其应用到生产中,从而增加商业价值。事实上,一些估计已经将永远达不到生产的模型的数量置于高达 80-90%的位置!作为回应,任何普遍接受的安全性、可伸缩性、集成等 DevOps 实践都被应用到模型世界中。由此产生的系统和流程通常被称为 ModelOps 或 MLOps,旨在更快地将模型投入生产,并克服传统上阻止模型部署的障碍。
一些公司已经建立了单独的团队来处理机器学习模型的部署,但我们也看到许多公司正在转向一个框架,让数据科学家负责端到端的过程。在这些情况下,数据科学家必须从熟悉的数据科学世界中转移出来,开始使用新型工具(例如 Kubernetes、Docker 和 EC2)、约束和技能。
数据科学*台简化了部署流程,只需点击几下鼠标即可将模型投入生产。例如,您可以使用一种简单的自助式 API 端点部署方法在 Domino 中部署和托管模型。在 Domino 中部署模型可以深入了解完整的模型谱系,以及用于创建调用模型的函数的所有软件的确切版本。它还提供了所有生产资产(API、应用程序等)的概述。)并将这些资产链接到个人、团队和项目,以便可以跟踪使用情况,并且可以在其他项目中轻松重用这些资产。
数据科学*台为扩展数据科学创造了一个理想的环境,包括面向数据科学家的各种研发选项和 MLOps,以及改进的 IT 治理。它们消除了数据科学家成为 DevOps 大师的需要,并允许他们将更多时间放在数据科学上,而不是花在克服 DevOps 麻烦和与之斗争上。数据科学家的好处显而易见,但对于人力资源招聘团队来说,使用数据科学*台消除了寻找独角兽的需求。这使得他们可以将搜索重点放在更深层次的潜在合格候选人上。
大规模招聘数据科学团队时的其他因素
传统上,大学在培养具有很强的数学和统计技能的人才方面做得很好。现在,随着对数据科学家的大量需求,有超过 500 所大学提供专门的数据科学学位课程。这些项目的毕业生进入职场时都有使用 Python 和 R 等语言的经验,并且通常非常熟悉许多最新的开源软件包和数据科学工具。在某些情况下,他们甚至有使用 MATLAB 或 SAS 等流行商业软件的经验。
随着时间的推移,这些毕业生在特定领域或部门与数据分析师、商业领袖和其他同事密切合作,积累了他们的专业知识。他们对数据中的细微差别有着敏锐的理解,并本能地知道该问什么问题,这样他们就能更快地开发出更好的模型。
地理位置曾经是公司招聘数据科学家能力的重要因素。总部位于旧金山或纽约等数据科学家高度集中的地区的公司拥有丰富的人才库,如果他们愿意,可以建立拥有数百名数据科学家的数据科学团队。但是,对于美国其他地区的公司来说,这根本不是一个可行的选择。随着公司适应新的工作环境和运营模式以应对新冠肺炎,他们对远程员工变得更加开放。我们看到农村地区的公司正在与大都市地区的跨国公司有效竞争数据科学人才。而且,生活在农村地区的数据科学家有更多的就业机会。
我们还看到数据分析师、软件开发人员和其他非传统数据科学家使用自动化机器学习和其他工具来扩展他们的技能。随着公司寻求将数据科学应用于其运营的更多方面,这些“公民数据科学家”正在尝试基本的数据科学任务。这是一个供给和需求同时增加的情况。在实践中,传统的、代码优先的数据科学家仍在从事他们一直关注的相同战略项目,但现在承担了指导公民数据科学家和刚刚进入劳动力市场的初级数据科学家的额外责任。
那么…供给赶上需求了吗?
自从达文波特和帕蒂尔写了关于数据科学家的开创性文章以来的八年里,我们已经看到美国数据科学工作的数量以及在 LinkedIn 上自称数据科学家的人数都有了显著增长。Job site Indeed 报道称,自 2013 年以来,数据科学职位发布量增加了两倍多,在许多其他网站上也可以找到类似的统计数据。数据技能*台 QuantHub 在 2020 年 4 月做了一项深度分析,得出的结论是职位发布仍然比职位搜索快 3 倍。
当然,新冠肺炎的出现改变了几乎所有行业的就业增长预测。数据科学和其他技术工作受到了沉重打击,需求和供给之间的差距已经缩小。也就是说,我们看到许多客户在 COVID 期间增加了对数据科学的投资。一些人将数据科学视为进一步区分和创造可持续优势的一种方式,而另一些人则将其视为生存的手段。
没有人确切知道 2021 年会发生什么,也没有人知道“数据科学家”是否会再次登上“美国最佳工作”的榜首。但是,如果过去的历史和我们从客户那里看到的迹象有任何意义的话,我敢打赌是数据科学家。
数据科学家是分析师,软件工程师
原文:https://www.dominodatalab.com/blog/data-scientists-analysts-software-engineers
在这个数据科学弹出式会议中,电子艺界的数据科学主管 W. Whipple Neely 解释了为什么数据科学家的职责不仅仅是数据科学。
DataOps 更快地为 Moneysupermarket 提供数据科学价值
By Harvinder Atwal, Chief Data Officer, The Moneysupermarket Group on May 28, 2020 in Perspective
编者按:这是一系列文章的一部分,分享公司在成为模型驱动的道路上的最佳实践。一些文章将包含关于他们使用 Domino 的信息。
几年前,我在 Moneysupermarket 的团队偶然发现了 DataOps。我所说的失误是指我们没有积极着手实施 DataOps 方法,该方法作为一种更快地运营和扩展数据科学的方式已经开始获得关注。相反,出于基本需要,我们开始应用来自软件开发、产品管理和产品工程的最佳实践。
发生了什么事?
它始于一个简单的问题:我们能否利用数据科学,根据客户的金融需求、风险状况和态度,为他们提供个性化的沟通和内容?
Moneysupermarket 的主要使命是帮助消费者在从保险和信用卡到公用事业和旅游的所有事情上省钱。去年,我们服务了超过 1300 万活跃用户,并通过我们的四个品牌(MoneySuperMarket、TravelSupermarket、MoneySavingExpert 和 Decision Tech)为消费者节省了约 20 亿英镑。
我们有数千种产品,但当时,我们的营销团队在与客户沟通时采用了一刀切的方式。我们认为个性化是增加收入的关键。例如,营销团队可以使用数据科学来定制时间、语言和内容,向不同类型的客户发送不同版本的简讯,而不是向所有客户发送一份简讯。
商业利益相关者对这个概念很感兴趣,但是为了获得他们的全力支持和资助,我们需要向他们展示结果——而且要快。我们只有两个月的时间来证明模型驱动的个性化方法比利益相关者最初打算的假设和规则驱动的方法更好。
我们的数据科学流程没有针对速度进行优化。这种情况并不罕见。大多数数据科学团队可能会指出数据科学生命周期中的瓶颈,例如无法快速访问他们需要的数据、工具和计算资源,或者无法快速部署实验并与利益相关方进行迭代。这些瓶颈阻碍了他们实现投资的全部回报。
事实上,根据 NewVantage Partners 最*的调查,只有 7.3%的组织认为他们的数据和分析状况非常好。
我们必须改变我们的工作方式。
我们决定借鉴软件开发、产品工程和产品管理的最佳实践,快速创建一个最小可行的产品,用于个性化通信。我们希望整合三种基本方法:
- 敏捷实践,尤其是在与商业利益相关者合作的时候。我们与营销利益相关者坐下来确定最终目标(例如,是改善客户体验还是增加收入?),要测试哪些假设,以及哪些数据产品可以满足这些目标。通过这样做,我们可以确保我们的最终产品能够满足他们的需求,并获得他们的全力支持。我们还创建了快速反馈循环,使我们能够通过营销测试新模型,这样我们就可以看到哪些有效,哪些无效,然后快速完善我们的模型。
- 精益制造原则帮助消除数据科学生命周期中的浪费和瓶颈,提高最终数据产品的质量,并监控数据流。我们还希望让数据科学家更加自给自足,并确保工作的可重复性和可重用性。例如,我们的 Domino *台是我们的 DataOps 生态系统的重要组成部分,帮助我们减少浪费,并在数据科学家构建和部署模型时实施更好的控制。
- DevOps 文化,应用版本控制、配置管理、持续集成和持续运营等概念,更快、更可靠地开发和部署模型。
甚至我们都对结果感到惊讶。
通过应用这些实践(所有这些都是 DataOps 的基础),我们大大缩短了开发、测试和部署新的个性化模型所需的时间。在三个月的时间里,我们在分析实验。不到六个月,我们的新个性化模型就部署完毕并开始发挥作用,这比我们最初的预期要早得多。
如今,我们有 1,400 种不同的简讯,每一种都是根据客户的金融态度和知识量身定制的。例如,我们的模型发现,积极情绪和专有名词的使用增加了客户的转化率,这些客户更懂金融,知道他们想从我们的价格比较网站上得到什么和需要什么。相比之下,不太懂金融的客户更容易对使用负面情绪和“可能”、“应该”和“会”等情态动词的内容做出反应
从那以后,我们更加正式地采用 DataOps 来衡量我们的成功。
这项工作为我们最终的 DataOps 之旅奠定了基础,这一旅程使我们能够使用可扩展和可重复的流程以及高度优化的工具快速前进。
通过 DataOps,我们缩短了几周、几个月甚至几年的流程,使 Moneysupermarket 能够更快地创新并释放新的市场机会。
我们现在已经生产了 50 多种型号,从优化客户旅程和客户体验,到个性化产品和内容,再到与合作伙伴协商价格,我们的运营涉及方方面面。这带来了数百万英镑的额外收入,并使我们能够在竞争激烈的市场中保持领先地位。
DataOps 需要基于收集数据和根据反馈采取行动的持续改进心态。我们不断寻求通过不断提高我们创建和迭代数据产品的速度来增加我们对客户和利益相关者的影响。
了解更多信息:
- 阅读关于货币超级市场的多米诺案例研究。
- 阅读哈文德在转移到数据运营接受《计算机周刊》的采访
- 阅读哈文德的书,实用数据操作:大规模交付敏捷数据科学
无需 Domino 环境设置的 GPU 深度学习
原文:https://www.dominodatalab.com/blog/deep-learning-gpus-without-environment-setup
我们已经看到数据科学家对使用 GPU 来训练深度学习模型的兴趣激增。虽然支持这一点的库(例如 keras、TensorFlow 等)已经变得非常强大,但数据科学家仍然受到限制其生产力的配置问题的困扰。
例如,最*在 keras 博客上的一篇帖子描述了如何在 AWS 上使用 keras——它有九个步骤,其中许多涉及 DevOps 工作,例如设置端口转发。如果你没有使用深度学习 AMI,你需要安装 GPU 驱动程序,正确配置软件包以识别 GPU 设备,并处理许多其他技术细节。
Domino 通过 Docker 将基础设施自动化(例如,启动 EC2 机器,包括 GPU)与“环境配置”无缝结合,让用户使用已经设置好的配置来构建和共享可重用的计算环境。我们最*构建并共享了一个安装并正确配置了通用 GPU 工具的环境,因此它们将在 AWS GPU 硬件上无缝工作。
有了这一改变,在 Domino 上使用最新的深度学习包只需两步:
- 选择 GPU 硬件层。
- 选择支持 GPU 处理的环境。
看起来是这样的:
Domino 可以让您轻松地将您的机器扩展到亚马逊强大的 P2 实例,该实例号称具有高达 70 万亿次单精度浮点性能!
为了让你的深度学习包利用它运行的 GPU 硬件,你必须正确地配置和构建环境。不用通读关于如何安装 CUDA 、 cuDNN 以及最后你最喜欢的深度学习库的文档,Domino 让你轻松地构建你的定制环境一次,并轻松地共享该环境。
为了方便云用户使用 GPU,我们提供了一个名为“[Domino 托管] GPU 工具”的公共环境如果您想将 GPU 与 Theano、Tensorflow(有或没有 Keras)或 Neon 一起使用,请随意使用该环境并跳过设置。
如果你是深度学习的新手或者仍然在学习 Domino *台,我们最*发布了几个 Domino 项目,它们使用 GPU 和深度学习库来训练 LSTM 模型。这些项目中的演示使用 IMDB 数据集来训练 LSTM 模型,该模型根据评论的文本来预测电影评论的情感。
- 涅槃乐队
- 提亚诺
- TensorFlow
你可以自由地对项目进行分支,进行实验,并探索自己使用 GPU 进行深度学习的新世界。尽情享受吧!
深度学习图解:构建自然语言处理模型
非常感谢 Addison-Wesley Professional 提供了从书中摘录《自然语言处理》的权限,深度学习图鉴作者克罗恩, Beyleveld ,以及 Bassens 。该摘录涵盖了如何创建单词向量并将其用作深度学习模型的输入。一个补充的 Domino 项目是可用的。
介绍
虽然计算语言学或自然语言处理(NLP)领域已经存在了几十年,但对深度学习模型的兴趣和使用的增加也推动了 NLP 在行业内的应用。数据科学家和研究人员需要大量的技术、软件包和工具来加速核心工作流任务,包括准备、处理和分析数据。利用 NLP 有助于研究人员和数据科学家更快地完成核心任务。由于 Domino 致力于加速数据科学工作流程,我们联系了 Addison-Wesley Professional (AWP)以获得从书中摘录大量“自然语言处理”章节的权限,深度学习插图。我们感谢AWP·皮尔森提供摘录作品的许可,并使我们能够提供一个补充的多米诺项目。
第一章介绍:自然语言处理
在本书的第 2 章[]中,我们介绍了语言的计算表示,特别强调了单词向量是一种定量捕捉单词含义的有效方法。在本章[摘录]中,我们将介绍一些代码,这些代码将使您能够创建自己的单词向量,并将其作为输入提供给深度学习模型。
你在本章中建立的自然语言处理模型将结合我们已经应用的神经网络层:本书第五章到第九章的密集层和第十章的卷积层。我们的 NLP 模型还将包含新的层类型——来自递归神经网络家族的层类型。rnn 本身处理自然语言等序列中出现的信息,但事实上,它们可以处理任何序列数据,如金融时间序列或给定地理位置的温度,因此它们非常通用。本章最后有一节是关于通过多个并行流处理数据的深度学习网络的,这一概念极大地拓宽了设计模型架构时的创造力范围,正如你将看到的那样,还可以提高模型的准确性。
预处理自然语言数据
您可以采取一些步骤来预处理自然语言数据,这样您在下游执行的建模可能会更准确。常见的自然语言预处理选项包括:
- 记号化:这是将一个文档(例如一本书)拆分成一系列离散的语言元素(例如单词),我们称之为记号。
- 将所有字符转换为小写字母。句首大写的单词(如她)和后面用在句子中的单词(她)意思相同。通过将语料库中的所有字符转换成小写,我们忽略了任何大写的使用。
- 去除停用词:这些是经常出现的词,往往包含相对较少的区别意义,如的、的、的、的。对于停用词的精确列表没有普遍的共识,但是根据您的应用程序,确保某些词是(或不是)可能是明智的。)被认为是停用词。例如,在本章中,我们将建立一个模型来将电影评论分为正面或负面。一些停用词列表包括否定,如没有、不是和不会,这对我们的模型识别电影评论的情感可能是至关重要的,所以这些词可能不应该被删除。
- 删除标点符号:标点符号通常不会给自然语言模型增加太多价值,因此经常被删除。
- 词干化:词干化是将单词截断到词干。例如,单词 house 和 housing 都有词干 house。特别是对于较小的数据集,词干分析可能会很有成效,因为它将具有相似含义的单词汇集到单个标记中。将会有更多这种词干标记的上下文的例子,使得像 word2vec 或 GloVe 这样的技术能够更准确地识别单词向量空间中标记的适当位置(参见图 2.5 和 2.6) [【书中的 ]。[注意:词汇化是词干化的一种更复杂的替代方法,需要使用参考词汇。就本书的目的而言,词干提取是将多个相关单词视为单个单词的充分方法。]
- 处理 n-grams :一些单词通常以这样一种方式共同出现,即单词的组合比几个单独的概念更适合被认为是一个单独的概念。举个例子,纽约是一个二元模型(一个n-长度为二的克数),而纽约是一个三元模型(一个n-长度为三的克数)。当链接在一起时,单词 new、 york 和 city 具有特定的含义,用单个标记(因此是单词向量空间中的单个位置)比用三个单独的标记更好地捕捉这些含义。
根据我们设计模型所针对的特定任务,以及我们要输入的数据集,我们可能会使用所有、部分或不使用这些数据预处理步骤。当您考虑将任何预处理步骤应用到您的特定问题时,您可以使用您的直觉来衡量它最终是否对您的下游任务有价值。我们已经提到了一些例子:
- 词干可能对小语料库有帮助,但对大语料库没有帮助。
- 同样,将所有字符转换为小写可能有助于处理小型语料库,但是,在包含更多单词单独使用示例的大型语料库中,比如、将军(形容词,意为“广泛传播”)与将军(名词,意为军队指挥官)之间的区别可能很有价值。
- 删除标点符号并不是在所有情况下都有好处。例如,考虑一下,如果您正在构建一个问答算法,它可以使用问号来帮助它识别问题。
- 例如,否定作为停用词对于一些分类器可能是有帮助的,但是对于情感分类器可能不是。在停用词列表中包含哪些词对您的特定应用程序至关重要,因此要小心使用。在许多情况下,最好只删除有限数量的停用词。
如果你不确定给定的预处理步骤是否有帮助,你可以通过合并该步骤并观察它是否影响你的深度学习模型下游的准确性,来根据经验调查这种情况。一般来说,语料库越大,有用的预处理步骤越少。有了一个小的语料库,你可能会担心遇到罕见的单词或者在你的训练数据集的词汇之外的单词。通过将几个罕见的单词集中到一个普通的单词中,您将更有可能根据一组相关单词的含义有效地训练一个模型。然而,随着语料库变得越来越大,生僻字和未登录词变得越来越不是问题。有了一个非常大的语料库,这很可能有助于避免将几个单词汇集成一个单一的公共符号。这是因为将会有足够多的实例,即使是出现频率较低的单词,来有效地模拟它们的独特含义,以及模拟相关单词之间相对微妙的细微差别(否则可能会被汇集在一起)。
为了提供这些预处理步骤的实际例子,我们邀请您查看我们的自然语言预处理 Jupyter 笔记本【或者互补多米诺项目】。
它首先加载许多依赖项:
import nltk
from nltk import word_tokenize, sent_tokenize
from nltk.corpus import stopwords
from nltk.stem.porter import *
nltk.download('gutenberg')
nltk.download('punkt')
nltk.download('stopwords')
import string
import gensim
from gensim.models.phrases import Phraser, Phrases
from gensim.models.word2vec import Word2Vec
from sklearn.manifold import TSNE
import pandas as pd
from bokeh.io import output_notebook, output_file
from bokeh.plotting import show, figure
%matplotlib inline
这些依赖项大多来自于nltk
(自然语言工具包)和 gensim(另一个 Python 的自然语言库)。当我们在下面的示例代码中应用它时,我们解释我们对每个独立依赖项的使用。
标记化
我们在本笔记本中使用的数据集是一个小型语料库,其中包含古登堡计划(Project Gutenberg)中的过版权书籍。[注:古登堡计划以印刷机发明者约翰内斯·古腾堡的名字命名,是数万本电子书的来源。这些书是来自世界各地的经典文学作品,它们的版权已经过期,可以免费获得。参见gutenberg.org。]
这个语料库在 nltk 中可用,因此可以使用下面的代码轻松地加载它:
from nltk.corpus import gutenberg
这部小小的文集只有 18 部文学作品,包括简·奥斯汀的《爱玛》,刘易斯·卡罗尔的《爱丽丝梦游仙境》,以及一个名不见经传的人威廉·莎士比亚的三部戏剧。(执行gutenberg.fileids()
打印所有 18 个文件的名称。)通过运行len(gutenberg.words())
,您可以看到语料库达到了 260 万个单词——这是一个易于管理的数量,意味着您可以在一台笔记本电脑上运行本节中的所有代码示例。
要将语料库标记成句子列表,一种选择是使用 nltk 的sent_tokenize()
方法:
gberg_sent_tokens = sent_tokenize(gutenberg.raw()
通过运行gberg_sent_tokens[0]
访问结果列表的第一个元素,您可以看到古登堡计划语料库中的第一本书是 Emma,因为这第一个元素包含书的标题页、章节标记和第一句话,所有这些都(错误地)与换行符(\n)混合在一起:
'[Emma by Jane Austen 1816]\n\nVOLUME I\n\nCHAPTER I\n\n\nEmma Wood-
house, handsome, clever, and rich, with a comfortable home\nand happy
disposition, seemed to unite some of the best blessings\nof existence;
and had lived nearly twenty-one years in the world\nwith very little to
distress or vex her.'
第二个元素中有一个独立的句子,可以通过执行gberg_sent_tokens[1]
来查看:
"She was the youngest of the two daughters of a most affectionate,
\nindulgent father; and had, in consequence of her sister's marriage,\nbeen
mistress of his house from a very early period."
您可以使用 nltk 的word_tokenize()
方法将这个句子进一步标记到单词级别
word_tokenize(gberg_sent_tokens[1])
这将打印一个单词列表,去掉所有空格,包括换行符(见图 11.1)。例如,单词父亲是第二句中的第 15 个单词,通过运行这行代码可以看到:
word_tokenize(gberg_sent_tokens[1])[14]
虽然sent_tokenize()
和word_tokenize()
方法可以方便地处理您自己的自然语言数据,但有了这个古腾堡语料库项目,您可以方便地使用其内置的sents()
方法来一步实现相同的目标:
gberg_sents = gutenberg.sents()
这个命令产生gberg_sents
,一个列表的标记化列表。较高级别的列表由单个句子组成,每个句子包含一个较低级别的单词列表。适当地,sents()
方法也将标题页和章节标记分离成它们自己的单独元素,正如您通过调用gberg_sents[0:2]:
所观察到的
[['[', 'Emma', 'by', 'Jane', 'Austen', '1816', ']'],
['VOLUME', 'I'],
['CHAPTER', 'I']]
正因为如此,艾玛的第一个实际句子现在单独作为gberg_sents
的第四个元素,因此为了访问第二个实际句子中的第 15 个单词(父亲),我们现在使用gberg_sents[4][14]
。
将所有字符转换为小写
对于剩余的自然语言预处理步骤,我们首先将它们迭代地应用于单个句子。当我们稍后结束这一部分时,我们将在整个 18 个文档的语料库中应用这些步骤。
回头看图 11.1,我们看到这个句子以大写的单词 She 开头。
如果我们想忽略大小写,这样这个单词就被认为与 she 相同,那么我们可以使用string
库中的 Python lower()
方法,如例 11.1 所示。
示例 11.1 将句子转换为小写
[w.lower() for w in gberg_sents[4]]
这一行返回与图 11.1 相同的列表,除了列表中的第一个元素现在是 she 而不是She
。
删除停用字词和标点符号
图 11.1 中的句子的另一个潜在的不便是,它充满了停用词和标点符号。为了处理这些,让我们使用+
操作符将 nltk 的英语停用词列表与string
库的标点符号列表连接在一起:
stpwrds = stopwords.words('english') + list(string.punctuation)
如果你检查一下你创建的stpwrds
列表,你会发现它包含了许多通常没有太多特殊含义的常用词,比如 a 、a,以及a。[注意,这三个特定的单词被称为冠词,或者限定词。然而,它也包含像 not 这样的词和其他负面的词,如果我们建立一个情感分类器,这些词可能是至关重要的,比如在句子中,“这部电影不好。”]
在任何情况下,为了从一个句子中去掉 stpwrds 的所有元素,我们可以使用一个列表理解,就像我们在例 11.2 中所做的那样,它包含了我们在例 11.1 中使用的小写。
例 11.2 用列表理解删除停用词和标点符号
[w.lower() for w in gberg_sents[4] if w.lower() not in stpwrds]
相对于图 11.1,运行这一行代码返回一个更短的列表,现在只包含每个单词都倾向于表达一点意思的单词:
['youngest',
'two',
'daughters',
'affectionate',
'indulgent',
'father',
'consequence',
'sister',
'marriage',
'mistress',
'house',
'early',
'period']
堵塞物
要词干,可以用波特算法【注:波特,M. F. (1980)。后缀剥离算法。程序,14,130–7。]由 nltk 提供。为此,您创建一个PorterStemmer()
对象的实例,然后将它的stem() method
添加到您在示例 11.2 中开始的列表理解中,如示例 11.3 所示。
例 11.3 在我们的列表理解中添加词干
[stemmer.stem(w.lower()) for w in gberg_sents[4] if w.lower() not in stpwrds]
这将输出以下内容:
['youngest',
'two',
'daughter',
'affection',
'indulg',
'father',
'consequ',
'sister',
'marriag',
'mistress',
'hous',
'earli',
'period']
这类似于我们之前输出的句子,除了许多单词已经被词干化:
- 子代到子代(允许复数和单数术语被同等对待)
- 房屋到房屋(允许类似房屋和房屋的相关词语被视为相同)
- early 到 earli (允许不同时态如 early 、early和 earliest 被视为相同)
这些词干示例对于像我们这样小的语料库可能是有利的,因为任何给定单词的示例都相对较少。通过将相似的单词汇集在一起,我们获得了汇集版本的更多出现,因此它可以被分配到向量空间中更准确的位置(图 2.6)。然而,对于一个非常大的语料库,其中有更多的罕见词的例子,区别对待一个词的复数和单数变化,将相关词视为唯一的,并保留多种时态可能是一种优势;这些细微差别可能会传达出有价值的意义。
搬运n-克
要将像 New York 这样的二元模型视为单个令牌而不是两个,我们可以使用 gensim 库中的Phrases()
和Phraser()
方法。如例 11.4 所示,我们以这种方式使用它们:
Phrases()
训练一个“检测器”来识别任意给定单词对在我们的语料库中一起出现的频率(技术术语是二元搭配)相对于该对中每个单词单独出现的频率Phraser()
获取由Phrases()
对象检测到的二元搭配,然后使用该信息创建一个可以有效地通过我们的语料库的对象,将两个连续标记中的所有二元搭配转换为单个标记
示例 11.4 检测并置二元模型
phrases = Phrases(gberg_sents)
bigram = Phraser(phrases)
通过运行bigram.phrasegrams
,我们输出每个二元模型的计数和分数的字典。图 11.2 提供了本词典最上面的几行。
图 11.2 中的每个二元模型都有一个计数和一个与之相关的分数。例如,在我们的古腾堡语料库中,二元组两个女儿只出现了 19 次。这个二元模型的得分相当低(12.0),这意味着相对于分开出现的频率而言,两个和的女儿这两个词出现的频率并不高。相比之下,二元模型 Miss Taylor 出现的频率更高(48 次),术语 Miss 和 Taylor 一起出现的频率远远高于它们单独出现的频率(得分为 453.8)。
浏览图 11.2 中的二元模型,注意它们被大写单词和标点符号破坏了。我们将在下一节解决这些问题,但同时让我们探索如何使用我们创建的bigram
对象将两个连续的二元模型转换成一个。让我们通过对一串有空格的字符使用split()
方法来标记一个短句,如下所示:
tokenized_sentence = "Jon lives in New York City".split()
如果我们打印tokenized_sentence
,我们只输出一个单字列表:['Jon', 'lives', 'in', 'New', 'York', 'City']
。然而,如果我们通过使用bigram[tokenized_sentence]
将列表传递给 gensim bigram 对象,那么列表就包含了 bigram:['Jon', 'lives', 'in', 'New_York', 'City']
。
在您通过运行 bigram 对象在您的语料库中识别出 bigram 之后,您可以通过将这个新的、填充了 bigram 的语料库通过Phrases()
和Phraser()
方法来检测三元模型(例如 New York Cit y)。这可以再次重复以识别 4-gram(然后再次识别 5-gram,等等);然而,这样做的回报是递减的。二元模型(或至多三元模型)应该足以满足大多数应用。顺便说一下,如果你继续用古腾堡语料库项目检测三元组,纽约州*不太可能被检测到。我们的古典文学文集并没有经常提到它。
在对单个句子的预处理步骤进行了一些示例之后,我们现在编写一些代码来预处理整个古腾堡语料库项目。这也将使我们能够在一个清理过的不再包含大写字母或标点符号的语料库上并置二元模型。
在本章的后面,我们将使用斯坦福大学的安德鲁·马斯和他的同事整理的电影评论语料库,用 NLP 模型预测评论的情绪。[注:马斯等人(2011 年)。学习用于情感分析的词向量。计算语言学协会第 49 届年会会议录,142-50。]在他们的数据预处理步骤中,马斯和他的同事决定留下停用词,因为它们是“情绪的象征”[注意:这符合我们的想法,正如我们在本章前面提到的。]他们还决定不词干化,因为他们觉得他们的语料库足够大,以至于他们基于词向量的 NLP 模型“在数据表明时,学习相同词干的词的相似表示。”换句话说,在模型训练期间,具有相似含义的单词应该在单词向量空间(图 2.6)中找到它们到相似位置的方法。
在他们的带领下,我们也将在预处理古腾堡语料库时放弃停用词去除和词干提取,如例 11.5。
示例 11.5 从古登堡计划语料库中删除大写和标点符号
lower_sents = []
for s in gberg_sents:
lower_sents.append([w.lower() for w in s if w.lower()not in list(string.punctuation)])
在这个例子中,我们从一个名为lower_sents
的空列表开始,然后使用 for 循环将预处理过的句子添加到这个列表中。[注意:如果您正在预处理一个大型语料库,我们建议使用可优化和可并行的函数式编程技术来代替我们的简单(因此也容易理解)for 循环。]为了预处理循环中的每个句子,我们使用了例 11.2 中的列表理解的变体,在这种情况下,仅删除标点符号,同时将所有字符转换为小写。
去掉标点符号和大写字母后,我们可以重新开始检测语料库中的搭配二元模型:
lower_bigram = Phraser(Phrases(lower_sents))
相对于示例 11.4,这次我们通过将Phrases()
和Phraser()
方法链接在一起,在一行中创建了 gensim lower_bigram 对象。图 11.3 显示了对lower_bigram.phrasegrams
的调用输出的顶部:将这些二元模型与图 11.2 中的进行比较,我们确实观察到它们都是小写的(例如泰勒小姐),而包含标点符号的二元模型是看不到的。
然而,进一步检查图 11.3 中的结果,似乎计数和分数的默认最小阈值都太宽松了。也就是说,像两个女儿和她的妹妹这样的词对不应该被认为是双字词。为了获得我们认为更合理的二元模型,我们试验了更保守的计数和分数阈值,将它们增加 2 的幂。按照这种方法,我们通常满足于将可选的Phrases()
参数设置为 32 的 min(imum) count 和 64 的 score threshold ,如示例 11.6 所示。
示例 11.6 用更保守的阈值检测并置二元模型
lower_bigram = Phraser(Phrases(lower_sents,
min_count=32, threshold=64))
虽然并不完美,[注:这些当然是统计*似值!]因为仍然有一些有问题的二元模型,如大交易和几分钟,对lower_bigram.phrasegrams
的调用的输出现在基本上是合理的,如图 11.4 所示。
有了例 11.6 中指定的lower_bigram
对象,我们终于可以使用一个 for 循环来迭代地为自己添加一个清理过的句子语料库,如例 11.7 所示。
示例 11.7 创建包含二元模型的“干净”语料库
clean_sents = []
for s in lower_sents:
clean_sents.append(lower_bigram[s])
用 word2vec 创建单词嵌入
有了自然语言 clean_sents 的干净语料库,我们可以很好地将语料库中的单词嵌入到单词向量空间中(图 2.6)。正如您将在本节中看到的,这样的单词嵌入可以用一行代码生成。然而,这一行代码不应该盲目执行,它有相当多的可选参数需要仔细考虑。考虑到这一点,在深入研究示例代码之前,我们将讨论单词向量背后的基本理论。
word2vec 背后的基本理论
在第二章中,我们提供了对什么是词向量的直观理解。我们还讨论了潜在的想法,因为你可以“通过一个单词的朋友来了解它”,那么一个给定单词的意思可以很好地表示为它周围出现的单词的*均值。word2vec 是一种无监督的学习技术——也就是说,它应用于自然语言的语料库,而不使用任何可能或可能不存在于该语料库的标签。这意味着任何自然语言的数据集都适合作为 word2vec 的输入。[注:Mikolov,t .等人(2013 年)。向量空间中单词表示的有效估计。arXiv:1301.3781]
当运行 word2vec 时,您可以在两种底层模型架构之间进行选择— skip-gram (SG)或连续单词包(CBOW 发音为 see-bo),尽管从“相反”的角度最大化了概率,但这两种方法通常都会产生大致相当的结果。为了理解这一点,请重新考虑图 2.5 中玩具大小的语料库:
you shall know a word by the company it keeps
在其中,我们认为单词是目标单词,它右边的三个单词和左边的三个单词都被认为是上下文单词。(这对应于三个单词的窗口大小——这是我们在应用 word2vec 时必须考虑的主要超参数之一。)利用 SG 架构,给定目标单词,预测上下文单词。[注意:用更专业的机器学习术语来说,skip-gram 架构的成本函数是在给定当前目标单词的情况下,最大化来自语料库的任何可能的上下文单词的对数概率。]对于 CBOW,情况正好相反:基于上下文单词预测目标单词。[注意:同样,在 ML 技术术语中,CBOW 的成本函数是在给定当前上下文单词的情况下,最大化来自语料库的任何可能的目标单词的对数概率。]
为了更具体地理解 word2vec,让我们更详细地关注 CBOW 架构(尽管我们同样可以关注 SG)。使用 CBOW,目标单词被预测为所有上下文单词的*均值,所有上下文单词被共同考虑为。“共同地”意味着“一次全部”:不考虑上下文单词的特定位置,也不考虑上下文单词是出现在目标单词之前还是之后。CBOW 架构具有这种属性,就在它名字的“单词包”部分:
** 我们取目标单词左右两边窗口中的所有上下文单词。
- 我们(形象地说!)把所有这些上下文单词扔进一个袋子里。如果这有助于你记住单词的顺序是不相关的,你甚至可以想象摇动袋子。
- 我们计算包中包含的所有上下文单词的*均值,使用该*均值来估计目标单词可能是什么。
If we were concerned about syntax—the grammar of language (see Figure 2.9 for
a refresher on the elements of natural language)—then word order would matter.
But because with word2vec we’re concerned only with semantics—the *meaning* of
words— it turns out that the order of context words is, on average, irrelevant.
考虑到 CBOW 名字的“BOW”组件的直观性,让我们也考虑一下它的“连续”部分:目标单词和上下文单词窗口从语料库的第一个单词一直到最后一个单词连续地滑动一次一个单词。在沿途的每个位置,给定上下文单词,估计目标单词。通过随机梯度下降,词在向量空间中的位置可以被移动,从而这些目标词估计可以被逐渐改进。
实际上,如表 11.1 所总结的,当你处理一个小语料库时,SG 架构是一个更好的选择。它很好地代表了词向量空间中的稀有词。相比之下,CBOW 的计算效率要高得多,因此当您处理非常大的语料库时,它是更好的选择。相对于 SG 来说,CBOW 也代表了出现频率稍好的词。[注意:无论您使用 SG 还是 CBOW 体系结构,在运行 word2vec 时,您还有一个额外的选择,那就是训练方法。为此,你有两种不同的选择:分层 softmax 和负采样。前者涉及规范化,更适合生僻字。另一方面,后者放弃了规范化,使其更适合普通单词和低维单词向量空间。就本书的目的而言,这两种训练方法之间的差异是微不足道的,我们不会进一步讨论它们。]
尽管 word2vec 是将自然语言语料库中的单词嵌入到向量空间中最广泛使用的方法,但它绝不是唯一的方法。word2vec 的一个主要替代品是 GloVe——单词表示的全局向量——它是由杰出的自然语言研究人员 Jeffrey Pennington、Richard Socher 和 Christopher Manning 引入的。【注:15。Pennington 等人(2014 年)。GloVe:单词表示的全局向量。自然语言处理经验方法会议论文集。]当时——2014 年——三人是斯坦福大学的同事。
GloVe 和 word2vec 的基本方法不同:word2vec 使用预测模型,而 GloVe 是基于计数的。最终,这两种方法都倾向于产生在下游 NLP 应用中表现相似的向量空间嵌入,一些研究表明,word2vec 在选择的情况下可能会提供稍微更好的结果。GloVe 的一个潜在优势是,它被设计为在多个处理器甚至多个机器上并行化,因此如果您希望创建一个包含许多独特单词和非常大的语料库的单词向量空间,它可能是一个不错的选择。
word2vec 和 GloVe 的当代领先替代品是 fastText。[注:开源 fastText 库可在 fasttext.cc. Joulin,a .等人(2016)处获得。高效文本分类的窍门。arXiv: 1607.01759。Bojanowski,p .等人(2016 年)。用子词信息丰富词向量。arXiv: 1607.04606。请注意,具有里程碑意义的 word2vec 论文的主要作者托马斯·米科洛夫是这两篇具有里程碑意义的 fastText 论文的最终作者。这种方法是由脸书大学的研究人员开发的。fastText 的一个主要优点是它在子单词级别上操作——它的“单词”向量实际上是单词的子组件。这使得 fastText 能够解决与本章开始的预处理部分中提到的稀有单词和词汇表外单词相关的一些问题。
评估单词向量
无论你如何创建你的词向量——无论是用 word2vec 还是其他方法——在评估词向量的质量时,有两个广泛的角度可以考虑:内在和外在评估。
外部评估包括评估你的词向量在你感兴趣的下游 NLP 应用中的性能——比如,你的情感分析分类器,或者你的命名实体识别工具。虽然外部评估可能需要更长的时间来执行,因为它们需要您执行所有的下游处理步骤-可能包括训练一个计算密集型深度学习模型-如果它们与 NLP 应用程序的准确性的明显改善有关,那么您可以确信值得保留对您的词向量的更改。
相比之下,内在评估包括评估你的词向量的性能,而不是在你的最终 NLP 应用上,而是在一些特定的中间子任务上。一个常见的任务是评估你的单词向量是否与图 2.7 所示的算术类比很好地对应。例如,如果您从 king 的单词向量位置开始,减去man
和add woman
,您会在 queen 的单词向量位置附*结束吗?注:托马斯·米科洛夫和他的同事在他们 2013 年的 word2vec 论文中开发了一个包含 19500 个此类类比的测试集。这套测试设备在 download.tensorflow.org/data/questions-words.txt 的[有售。]
相对于外在评估,内在测试更快。它们还可以帮助您更好地理解(从而解决)更广泛的 NLP 过程中的中间步骤。然而,内在评估的局限性在于,它们可能不会最终提高下游 NLP 应用程序的准确性,除非您已经确定了中间测试和 NLP 应用程序的性能之间可靠的、可量化的关系。
运行 word2vec
如前所述,如示例 11.8 所示,word2vec 可以在一行代码中运行——尽管有相当多的参数。
示例 11.8 运行 word2vec
model = Word2Vec(sentences=clean_sents, size=64,
sg=1, window=10, iter=5,
min_count=10, workers=4)
下面是我们从 gensim 库中传递给 Word2Vec()方法的每个参数的明细:
sentences
:传入一个类似 clean_sents 的列表列表作为语料库。较高级列表中的元素是句子,而较低级列表中的元素可以是单词级标记。size
:运行 word2vec 将产生的单词向量空间中的维数。这是一个可以从外部或内部变化和评估的超参数。像本书中的其他超参数一样,也有一个金发女孩的最佳点。比如说,通过指定 32 个维度并以 2 的幂来改变这个值,您可以找到一个最佳值。维度数量加倍将使下游深度学习模型的计算复杂性加倍,但如果这样做会导致明显更高的模型准确性,那么这种外在评估表明,额外的复杂性可能是值得的。另一方面,将维数减半将下游的计算复杂度减半:如果这可以在不明显降低 NLP 模型精度的情况下完成,那么就应该这样做。通过执行一些内在检查(我们很快就会看到),我们发现对于这种特殊情况,64 维比 32 维提供了更合理的单词向量。然而,将这一数字增加一倍至 128,并没有带来明显的改善。sg
:设置为 1 选择跳格结构,或保留默认值 0 选择 CBOW。如表 11.1 所总结的,SG 通常更适合像古腾堡语料库这样的小数据集。- 对于 SG 来说,窗口大小为 10(总共 20 个上下文单词)是一个很好的选择,所以我们将这个超参数设置为 10。如果我们使用 CBOW,那么窗口大小 5(总共 10 个上下文单词)可能接*最佳值。在任一情况下,这个超参数都可以从外部或内部进行试验和评估。然而,对这个超参数的微小调整可能没有明显的影响。
iter
:默认情况下,gensimWord2Vec()
方法在输入的语料库上迭代五次(即,滑过所有单词)。word2vec 的多次迭代类似于训练深度学习模型的多个时期。对于像我们这样的小语料库,单词向量经过几次迭代后会得到改进。另一方面,对于一个非常大的语料库,即使运行两次迭代,在计算上也可能是极其昂贵的——而且,因为在一个非常大的语料库中有如此多的单词示例,单词向量可能不会更好。min_count
:这是一个单词在语料库中出现的最少次数,以适应单词向量空间。如果给定的目标单词只出现一次或几次,则需要考虑的上下文单词的例子数量有限,因此它在单词向量空间中的位置可能不可靠。因此,大约 10 的最小计数通常是合理的。计数越高,可用于下游 NLP 任务的词汇就越少。这是另一个可以调整的超参数,外部评估可能比内部评估更有启发性,因为您必须处理的词汇表的大小可能会对您的下游 NLP 应用程序产生相当大的影响。workers
:这是您希望专门用于培训的处理核心的数量。如果您机器上的 CPU 有八个内核,那么八个内核就是您可以拥有的最大并行工作线程数。在这种情况下,如果您选择使用少于八个内核,您会将计算资源留给其他任务。
在我们的 GitHub 存储库中,我们使用 word2vec 对象的 save()方法保存我们的模型:
model.save('clean_gutenberg_model.w2v')
不用自己运行 word2vec,您可以使用下面的代码加载我们的单词向量:
model = gensim.models.Word2Vec.load('clean_gutenberg_model.w2v')
如果您选择我们创建的单词 vectors,那么下面的例子将产生相同的输出。[注意:每次运行 word2vec 时,词汇中每个单词在单词向量空间中的初始位置都是随机分配的。因此,提供给 Word2Vec() 的相同数据和参数每次都会产生唯一的单词向量,但是语义关系应该是相似的。]我们可以通过调用len(model.wv.vocab)
来看自己词汇量的大小。这告诉我们,在我们的 clean_sents 语料库中,有 10,329 个单词(更确切地说,是标记)至少出现了 10 次。[注意:词汇大小等于我们的语料库中出现至少 10 次的标记的数量,因为我们在示例 11.8 中调用Word2Vec()
时设置了min_count=10
。[英语背诵文选我们的词汇中有一个词是 dog。如图 11.6 所示,我们可以通过运行model.wv['dog']
输出它在 64 维词向量空间中的位置。
作为对我们的单词向量质量的基本内在评估,我们可以使用 most_similar()方法来确认在我们的单词向量空间中的相似位置找到具有相似含义的单词。[注意:从技术上讲,两个给定单词之间的相似度是通过计算余弦相似度来计算的。]例如,要输出单词向量空间中与父亲最相似的三个单词,我们可以运行以下代码:
model.wv.most_similar('father', topn=3)
这将输出以下内容:
[('mother', 0.8257375359535217),
('brother', 0.7275018692016602),
('sister', 0.7177823781967163)]
这个输出表明母亲、兄弟和姐妹是我们的词向量空间中与父亲最相似的词。换句话说,在我们的 64 维空间中,最接*的词。[注意:即,在那个 64 维向量空间中具有最短的欧几里德距离。[英语背诵文选对父亲来说就是母亲这个词。表 11.2 提供了一些额外的单词示例,这些单词与我们从单词向量词汇表中挑选的特定单词最相似(即最接*),考虑到我们的小型古腾堡语料库,这五个单词看起来都非常合理。[注意,表 11.2 中的最后一个测试词“夫人”是因为二元搭配才可用的(见例 11.6 和 11.7)。]
假设我们运行下面一行代码:
model.wv.doesnt_match("mother father sister brother dog".split())
我们得到输出 dog,表明 dog 相对于所有其他可能的单词对是最不相似的。我们还可以使用下面的行来观察父亲和狗之间的相似性得分仅为 0.44:
model.wv.similarity('father', 'dog')
这个 0.44 的相似性分数远低于父亲和母亲、哥哥或妹妹中的任何一个之间的相似性,因此毫不奇怪的是狗在我们的词向量空间中相对远离其他四个词。
作为最后一个小的内在测试,我们可以计算如图 2.7 所示的词向量类比。例如,我们可以执行以下代码:
model.wv.most_similar(positive=['father', 'woman'], negative=['man'])
得分最高的词出来是母亲,这是类比的正确答案。
假设我们同样执行以下代码:
model.wv.most_similar(positive=['husband', 'woman'], negative=['man'])
在这种情况下,得分最高的单词是 wife,也是正确的答案,因此
表明我们的单词向量空间可能总体上是正确的。
A given dimension within an n-dimensional word-vector space does not necessarily
represent any specific factor that relates words. For example, although the real-world
differences in meaning of gender or verb tense are represented by some vector direction
(i.e., some movement along some combination of dimensions) within the vector space,
this meaningful vector direction may only by chance be aligned—or perhaps correlated—with
a particular axis of the vector space.
这与涉及 n 维向量空间的一些其他方法形成对比,在 n 维向量空间中,轴旨在表示一些特定的解释变量。许多人熟悉的一种方法是主成分分析(PCA),这是一种用于识别对给定数据集中的方差有贡献的线性不相关(即正交)向量的技术。PCA 和词向量空间中以点的形式存储的信息之间的这种差异的必然结果是,在 PCA 中,第一个主成分贡献了大部分方差,因此您可以专注于它们而忽略后面的主成分;但是在词向量空间中,所有的维度都可能是重要的,并且需要被考虑。这样,像 PCA 这样的方法对于维数减少是有用的,因为我们不需要考虑所有的维度。
绘制单词向量
人类的大脑不太适合在大于三维的空间中想象任何东西。因此,以其原始格式绘制单词向量(可能有几十甚至几百个维度)是不可能的。令人欣慰的是,我们可以使用降维技术将高维单词向量空间中的单词位置*似映射到二维或三维空间中。我们推荐的降维方法是t-分布式随机邻居嵌入(t-SNE;发音为 tee-SNE),由 Laurens van der Maaten 与 Geoff Hinton 合作开发(图 1.16)。[注:范德马滕,l .,&辛顿,G. (2008)。使用 t-SNE 可视化数据。机器学习研究杂志,9,2579–605。]
示例 11.9 提供了来自我们的自然语言预处理笔记本的代码,用于将我们的 64 维古腾堡项目导出的词向量空间降低到二维,然后将得到的 x 和 y 坐标存储在熊猫数据帧中。对于TSNE()
方法(来自 scikit-learn 库),我们需要关注两个参数:
n_components
是应该返回的维数,因此将其设置为 2 会产生二维输出,而设置为 3 会产生三维输出。n_iter
是输入数据的迭代次数。与 word2vec(示例 11.8)一样,迭代类似于与训练神经网络相关的时期。更多的迭代对应于更长的训练时间,但是可以改善结果(尽管只是在一定程度上)。
示例 11.9 用于降维的 t-SNE
tsne = TSNE(n_components=2, n_iter=1000)
X_2d = tsne.fit_transform(model.wv[model.wv.vocab])
coords_df = pd.DataFrame(X_2d, columns=['x','y'])
coords_df['token'] = model.wv.vocab.keys()
运行示例 11.9 中的 t-SNE 可能会在您的机器上花费一些时间,所以如果您对运行以下代码感到不耐烦,欢迎使用我们的结果:
coords_df = pd.read_csv('clean_gutenberg_tsne.csv')
[注意:我们在使用以下命令对我们的单词向量运行 t-SNE 之后创建了这个 CSV:coords_df.to_csv('clean_gutenberg_tsne.csv'
,index=False
)。请注意,因为 t-SNE 是随机的,所以每次运行它都会得到一个唯一的结果。]
无论你是自己运行 t-SNE 来生成coords_df
还是加载我们的,你都可以通过使用head() method
来检查数据帧的前几行:
coords_df.head()
执行 head()的输出如图 11.7 所示。例 11.10 提供了用 t-SNE(例 11.9)创建二维数据的静态散点图(图 11.8)的代码。
示例 11.10 词向量空间的静态二维散点图
_ = coords_df.plot.scatter('x', 'y', figsize=(12,12),
marker='.', s=10, alpha=0.2)
就其本身而言,图 11.8 中显示的散点图可能看起来很有趣,但是我们几乎不能从中获得可操作的信息。相反,我们建议使用散景库来创建一个高度互动的——且可操作的——绘图,如示例 11.11 中提供的代码。[注意:在示例 11.11 中,我们使用 Pandas sample()方法将数据集减少到 5,000 个标记,因为我们发现在交互使用散景图时,使用比这更多的数据会导致用户体验不佳。]
示例 11.11 二维字向量数据的交互式散景图
output_notebook()
subset_df = coords_df.sample(n=5000)
p = figure(plot_width=800, plot_height=800)
_ = p.text(x=subset_df.x, y=subset_df.y, text=subset_df.token)
show(p)
示例 11.11 中的代码使用 t-SNE 生成的x
和y
坐标生成了图 11.9 中的交互式散点图。
通过切换图右上角的滚轮缩放按钮,您可以使用鼠标放大云内的位置,以便文字变得清晰可见。例如,如图 11.10 所示,我们确定了一个主要由衣服组成的区域,附*有相关的聚类,包括人体解剖、颜色和面料类型。以这种方式探索提供了一种很大程度上主观的内在评估,即相关术语(尤其是同义词)是否如您所期望的那样聚集在一起。进行类似的操作时,您可能还会注意到自然语言预处理步骤的特定缺点,例如包含标点符号、双字母或其他您可能不希望包含在单词向量词汇表中的标记。
ROC 曲线下的面积
我们很抱歉打断了有趣的,互动的文字矢量绘图。我们需要在这里从特定于自然语言的内容中短暂休息一下,引入一个将在本章的下一节中派上用场的度量,届时我们将评估深度学习 NLP 模型的性能。
到目前为止,我们的大多数模型都涉及到多类输出:例如,当处理 MNIST 数字时,我们用 10 个输出神经元来表示输入图像可能代表的 10 个数字中的每一个。然而,在本章的剩余部分,我们的深度学习模型将是二元分类器:它们将只区分两个类别。更具体地说,我们将建立二元分类器来预测电影评论的自然语言是对应于好评还是差评。
与处理多类问题的人工神经网络不同,人工神经网络需要与类一样多的输出神经元,而作为二元分类器的人工神经网络只需要一个输出神经元。这是因为没有与具有两个输出神经元相关的额外信息。如果向二元分类器提供某个输入 x,并且它为其中一个类计算某个输出[latex]\hat{y}[/latex],那么另一个类的输出就是 1 - [latex]\hat{y}[/latex]。例如,如果我们将一个电影评论输入到一个二进制分类器中,它输出该评论是正面评论的概率是 0.85,那么该评论是负面评论的概率一定是 1 0.85 = 0.15。
因为二元分类器具有单一输出,所以我们可以利用相对于主导多类问题的过度黑白准确性度量而言复杂的度量来评估我们的模型的性能。例如,典型的精度计算会认为,如果[latex]\hat{y}[/latex] > 0.5,则模型预测输入 x 属于一个类,而如果它输出小于 0.5 的值,则它属于另一个类。为了说明为什么像这样具有特定的二进制阈值是过于简单的,考虑这样一种情况,其中输入电影评论导致二进制分类器输出[latex]\hat{y}[/latex] = 0.48:典型的准确度计算阈值将保持这一点-因为这个[latex]\hat{y}[/latex]低于 0.5 -它被分类为负面评论。如果第二次电影检查对应于[latex]\hat{y}[/latex] = 0.51 的输出,则该模型几乎不再有信心认为该检查相对于第一次检查是正面的。然而,因为 0.51 大于 0.5 的准确度阈值,所以第二次评论被归类为正面评论。
准确性度量阈值的严酷性可以隐藏我们的模型输出质量的细微差别,因此在评估二元分类器的性能时,我们更喜欢称为接收器工作特性曲线下面积的度量。ROC AUC,作为度量标准的简称,起源于第二次世界大战,当时它被开发用于评估雷达工程师在试图识别敌方目标时的判断性能。
我们喜欢 ROC AUC 有两个原因:
- 它将两个有用的指标——真阳性率和假阳性率——混合成一个汇总值。
- 它使我们能够在从 0.0 到 1.0 的整个[latex]\hat{y}[/latex]范围内评估我们的二元分类器的输出性能。这与准确性度量形成对比,准确性度量仅在单个阈值评估二元分类器的性能,通常为[latex]\hat{y}[/latex] = 0.50。
混乱矩阵
理解如何计算 ROC AUC 指标的第一步是理解所谓的混乱矩阵,正如您将看到的,它实际上并不那么混乱。相反,该矩阵是一个简单的 2 × 2 表格,显示了一个模型(或者,就像二战时的一个人)在试图充当二元分类器时有多混乱。你可以在表 11.3 中看到一个混淆矩阵的例子。
为了用一个例子来说明混淆矩阵,让我们回到热狗/非热狗二进制分类器,我们在前面的许多章节中用它来构造愚蠢的例子:
当我们向一个模型提供一些输入 x,并且它预测该输入代表一个热狗,那么我们正在处理表格的第一行,因为预测 y = 1。在这种情况下,
- 真正:如果输入是实际上一个热狗(即实际上 y = 1),那么模型正确地对输入进行了分类。
- 假阳性:如果输入是实际上不是热狗(即实际 y = 0),那么模型是混淆了。
- 假阴性:如果输入实际上是一个热狗(即 actual y = 1),那么模型在这种情况下也是混淆的。
- True negative:如果输入实际上不是热狗(即 actual y = 0),则模型正确地对输入进行了分类。当我们向一个模型提供一些输入 x,并且它预测该输入确实而不是代表一个热狗时,那么我们正在处理表格的第二行,因为预测 y = 0。在这种情况下,
计算 ROC AUC 指标
简单介绍了混淆矩阵后,我们现在可以使用一个玩具大小的例子来计算 ROC AUC 指标本身。假设,如表 11.4 所示,我们为二元分类模型提供了四个输入。
这些输入中有两个实际上是热狗(y = 1),有两个不是热狗(y = 0)。对于这些输入中的每一个,模型输出一些预测的[latex]\hat{y}[/latex],所有四个都在表 11.4 中提供。
为了计算 ROC AUC 指标,我们依次将模型输出的每个[latex]\hat{y}[/latex]值视为二元分类阈值。先从最低的[latex]\hat{y}[/latex]开始,为 0.3(见表 11.5 中“0.3 阈值”一栏)。在此阈值,只有第一个输入被分类为非热狗,而第二个到第四个输入(所有[latex]\hat{y}[/latex] > 0.3)都被分类为热狗。我们可以将这四种预测分类与表 11.3 中的混淆矩阵进行比较:
- 真阴性(TN):这实际上不是热狗(y = 0),并被正确预测为热狗。
- 真阳性(TP):这实际上是一个热狗(y = 1),并被正确预测。
- 假阳性(FP):这实际上不是一个热狗(y = 0),但它被错误地预测为一个。
- 真阳性(TP):像输入 2 一样,这实际上是一个热狗(y = 1),并被正确预测。
将分类阈值设置为 0.5,再次将阈值设置为 0.6,重复相同的过程,允许我们填充表 11.5 的剩余列。作为一个练习,仔细阅读这两列可能是明智的,将每个阈值的分类与实际 y 值和混淆矩阵(表 11.3)进行比较,以确保您很好地掌握了这些概念。最后,请注意,最高的[latex]\hat{y}[/latex]值(在本例中为. 09)可以作为潜在的阈值跳过,因为在这样高的阈值下,我们会认为所有四个实例都不是热狗,使其成为上限而不是分类边界。
计算 ROC AUC 指标的下一步是计算三个阈值的真阳性率(TPR)和假阳性率(FPR)。等式 11.1 和 11.2 使用“0.3 阈值”栏来分别提供如何计算真阳性率和假阳性率的示例。
为了方便起见,在表 11.5 的底部还提供了计算阈值 0.5 和 0.6 的 TPR 和 FPR 的算法的简写版本。同样,也许你应该测试一下你是否可以用自己的时间来计算这些值。
计算 ROC AUC 的最后一步是创建一个图,如图 11.11 所示。构成受试者工作特性(ROC)曲线形状的点是表 11.5 中每个可用阈值(在本例中为 3 个)的假阳性率(横坐标,x 轴坐标)和真阳性率(纵坐标,y 轴坐标),加上图的左下角和右上角的两个额外点。具体来说,这五个点(在图 11.11 中显示为橙色点)是:
- (0,0)为左下角
- (0,0.5)从 0.6 开始
- (0.5,0.5)从 0.5 开始
- (0.5,1)从 0.3 开始
- (1,1)用于右上角
在这个玩具大小的示例中,我们只使用了四个不同的[latex]\hat{y}[/latex]值,因此只有五个点决定 ROC 曲线的形状,使曲线更像阶梯形。当有许多可用的预测提供许多不同的[latex]\hat{y}[/latex]值时——这是现实世界中的典型情况 ROC 曲线有更多的点,因此它不那么呈阶梯状,而更呈曲线状。ROC 曲线的曲线下面积(AUC)正是它听起来的样子:在图 11.11 中,我们用橙色标出了该区域,在本例中,AUC 占所有可能面积的 75%,因此 ROC AUC 指标为 0.75。
与 chance 一样有效的二元分类器将生成一条从图的左下角到右上角的直线对角线,因此 ROC AUC 为 0.5 表示该分类器与掷硬币一样有效。完美的 ROC AUC 为 1.0,这是通过在所有可用的[latex]\hat{y}[/latex]阈值中 FPR = 0 和 TPR = 1 来实现的。当您设计二元分类器以在 ROC AUC 指标上表现良好时,目标是在[latex]\hat{y}[/latex]阈值范围内最小化 FPR 和最大化 TPR。也就是说,对于您遇到的大多数问题,达到完美的 ROC AUC 1.0 是不可能的:在数据中通常有一些噪音——也许是很多噪音——使得完美无法实现。因此,当您处理任何给定的数据集时,都会有一些(通常是未知的!)最大 ROC AUC 分数,因此无论你的模型作为问题的二元分类器有多理想,都有一个 ROC AUC 上限,没有模型可以突破。
在本章的剩余部分,我们使用具有启发性的 ROC AUC 指标,以及您已经熟悉的更简单的准确性和成本指标,来评估我们设计和训练的二进制分类深度学习模型的性能。
基于相似网络的自然语言分类
在本节中,我们将本章中介绍的概念(自然语言预处理最佳实践、词向量的创建和 ROC AUC 度量)与前几章的深度学习理论联系在一起。正如我们之前已经提到的,在本章的剩余部分,你将实验的自然语言处理模型将是一个二元分类器,它预测一个给定的电影评论是正面的还是负面的。我们首先使用您已经熟悉的神经网络类型(密集和卷积)对自然语言文档进行分类,然后转向专门处理序列中出现的数据的网络。
加载 IMDb 电影评论
作为性能基线,我们将首先训练和测试一个相对简单的密集网络。完成这项工作的所有代码都在我们的密集情感分类器 Jupyter 笔记本【或者互补多米诺项目】中提供。
示例 11.12 提供了我们的密集情感分类器所需的依赖性。这些依赖关系中的许多都可以从前面的章节中识别出来,但其他一些(例如,加载电影评论的数据集,在我们训练时保存模型参数,计算 ROC AUC)是新的。像往常一样,我们将在稍后应用这些依赖项时详细介绍它们。
示例 11.12 加载情感分类器依赖性
import keras
from keras.datasets import imdb # new!
from keras.preprocessing.sequence import pad_sequences # new!
from keras.models import Sequential
from keras.layers import Dense, Flatten, Dropout
from keras.layers import Embedding # new!
from keras.callbacks import ModelCheckpoint # new!
import os # new!
from sklearn.metrics import roc_auc_score, roc_curve # new!
import pandas as pd
import matplotlib.pyplot as plt # new!
%matplotlib inline
将尽可能多的超参数放在文件的顶部是一个很好的编程实践。这使得试验这些超参数变得更加容易。这也使你(或者,事实上,你的同事)在稍后(可能更多)返回文件时,更容易理解你在文件中做了什么。考虑到这一点,我们将所有的超参数放在 Jupyter 笔记本的一个单元格中。示例 11.13 中提供了代码。
示例 11.13 设置密集情感分类器超参数
# output directory name:
output_dir = 'model_output/dense'
# training:
epochs = 4
batch_size = 128
# vector-space embedding:
n_dim = 64
n_unique_words = 5000
n_words_to_skip = 50
max_review_length = 100
pad_type = trunc_type = 'pre'
# neural network architecture:
n_dense = 64
dropout = 0.5
让我们来分解一下这些变量的用途:
加载电影评论数据是一行程序,如例 11.14 所示。
示例 11.14 加载 IMDb 电影评论数据
(x_train, y_train), (x_valid, y_valid) = \
imdb.load_data(num_words=n_unique_words, skip_top=n_words_to_skip)
来自 Maas 等人(2011)的这个数据集由来自公开可用的互联网电影数据库(IMDb;imdb.com。它由 50,000 条评论组成,其中一半在训练数据集(x_train)
中,一半用于模型验证(x_valid)
。当提交他们对给定电影的评论时,用户还提供一个星级,最多 10 颗星。根据这些星级标准,(y_train and y_valid)
的标签是二元的:
- 得分为四星或更低的评论被视为负面评论(y = 0)。
- 与此同时,得分为 7 星或以上的评论被归类为正面评论(y = 1)。
- 中等评论——五星或六星的评论——不包括在数据集中,这使得二元分类任务对于任何模型都更容易。
通过在调用imdb.load_data()
时指定参数num_words
和skip_top
的值,我们分别限制了单词向量词汇表的大小并删除了最常见的(停止)单词。
In our Dense Sentiment Classifier notebook, we have the convenience of loading our IMDb
film-review data via the Keras imdb.load_data() method. When you’re working with your own natural language data, you’ll likely need to preprocess many aspects of the data yourself. In addition to the general preprocessing guidance we provided earlier in this chapter, Keras provides a number of convenient text preprocessing utilities, as documented online at keras.io/preprocessing/text. In particular, the Tokenizer() class may enable you to carry out all of the preprocessing steps you need in a single line of code, including - Tokenizing a corpus to the word level (or even the character level) - Setting the size of your word-vector vocabulary (with num_words) - Filtering out punctuation Converting all characters to lowercase - Converting tokens into an integer index
检查 IMDb 的数据
执行x_train[0:6]
,我们可以检查来自训练数据集的前六个评论,其中前两个如图 11.12 所示。这些评论本身采用整数索引格式,数据集中的每个唯一标记都由一个整数表示。前几个整数是特殊情况,遵循 NLP 中广泛使用的通用约定:
- 0:保留作为填充标记(我们很快会将它添加到比
max_review_length
短的评论中)。 - 1:将是开始标记,它将指示审查的开始。但是,按照下一个要点,起始标记是前 50 个最常见的标记之一,因此显示为“未知”
- 2:在语料库中非常频繁出现(即,它们在前 50 个最常见的单词中)或很少出现(即,它们在前 5050 个最常见的单词之下)的任何记号将在我们的单词向量词汇表之外,因此用这个未知记号来替换。
- 3:语料库中出现频率最高的词。
- 4:出现频率第二高的单词。
- 5:出现频率第三高的,依此类推。
使用示例 11.15 中的以下代码,我们可以看到训练数据集中前六个评论的长度。
示例 11.15 打印六个评论中的令牌数
for x in x_train[0:6]:
print(len(x))
它们是相当可变的,范围从 43 个令牌到 550 个令牌。简而言之,我们将处理这些差异,将所有评论标准化为相同的长度。
电影评论以图 11.12 中的整数索引格式输入到我们的神经网络模型中,因为这是一种存储令牌信息的高效内存方式。例如,将标记作为字符串输入,这将需要更多的内存。然而,对于我们人类来说,以整数索引的形式来检查评论是没有意义的(坦率地说,也是无趣的)。为了将评论视为自然语言,我们创建了如下单词索引,其中PAD
、START
和UNK
习惯上分别表示填充、开始和未知标记:
word_index = keras.datasets.imdb.get_word_index()
word_index = {k:(v+3) for k,v in
word_index.items()} word_index["PAD"] = 0
word_index["START"] = 1
word_index["UNK"] = 2
index_word = {v:k for k,v in word_index.items()}
然后,我们可以使用示例 11.16 中的代码来查看我们选择的电影评论—在这种情况下,是来自训练数据的第一个评论。
示例 11.16 以字符串形式打印评论
' '.join(index_word[id] for id in x_train[0])
得到的字符串应该与图 11.13 所示的输出相同。
记住图 11.13 中的评论包含了输入到我们神经网络中的标记,我们可能会发现阅读没有所有UNK
标记的完整评论是令人愉快的。在调试模型结果的某些情况下,能够查看完整的审查甚至可能是实际可行的。例如,如果我们在n_unique_words
或n_words_to_skip
阈值上过于激进或保守,通过比较图 11.13 中的回顾和完整的回顾,这可能会变得明显。有了我们的词汇索引(index_words)
,我们只需下载完整的评论:
(all_x_train,_),(all_x_valid,_) = imdb.load_data()
然后我们修改例 11.16,在我们选择的全检查列表上执行join()
(即all_x_train
或all_x_valid
),如例 11.17 所述。
示例 11.17 以字符串形式打印完整审核
' '.join(index_word[id] for id in all_x_train[0])
执行此操作将输出我们选择的评估的全文——同样,在本例中,是第一次培训评估——如图 11.14 所示。
标准化审查的长度
通过执行前面的示例 11.15,我们发现电影评论的长度存在可变性。为了运行 Keras 创建的 TensorFlow 模型,我们需要指定在训练期间将流入模型的输入的大小。这使得 TensorFlow 能够优化内存和计算资源的分配。Keras 提供了一个方便的pad_sequences()
方法,使我们能够在一行中填充和截断文本文档。这里我们用这种方法标准化我们的训练和验证数据,如例 11.18 所示。
示例 11.18 通过填充和截断标准化输入长度
x_train = pad_sequences(x_train, maxlen=max_review_length,
padding=pad_type, truncating=trunc_type, value=0)
x_valid = pad_sequences(x_valid, maxlen=max_review_length,
padding=pad_type, truncating=trunc_type, value=0)
现在,当打印评论(例如,用x_train[0:6]
或它们的长度(例如,用例子 11.15 的代码),我们看到所有的评论都有相同的长度 100(因为我们设置了max_review_length = 100
)。用类似于示例 11.16 的代码检查 x _ train[5]——它以前只有 43 个标记——我们可以观察到审查的开始被填充了 57 个PAD
标记(见图 11.15)。
密集网络
有了足够的 NLP 理论,以及我们加载和预处理的数据,我们终于准备好利用神经网络架构来根据电影评论的情感对其进行分类。例 11.19 给出了这项任务的基线密集网络模型。
示例 11.19 密集情感分类器架构
model = Sequential()
model.add(Embedding(n_unique_words, n_dim,
input_length=max_review_length))
model.add(Flatten())
model.add(Dense(n_dense, activation='relu')) model.add(Dropout(dropout))
# model.add(Dense(n_dense, activation='relu'))
# model.add(Dropout(dropout))
model.add(Dense(1, activation='sigmoid'))
让我们一行一行地分解架构:
- 我们使用一个 Keras
Sequential()
方法来调用一个顺序模型,就像我们在本书中对所有模型所做的那样。 - 与 word2vec 一样,
Embedding()
层使我们能够从文档语料库中创建单词向量——在本例中,是 IMDb 训练数据集的 25,000 条电影评论。相对于用 word2vec(或 GloVe 等)独立创建单词向量。)正如我们在本章前面所做的,通过反向传播训练你的单词向量作为你的更广泛的 NLP 模型的一个组成部分有一个潜在的优势:单词在向量空间内被分配的位置不仅反映了单词的相似性,还反映了单词与模型的最终特定目的的相关性(例如,通过情感对 IMDb 评论的二元分类)。单词向量词汇表的大小和向量空间的维数分别由 n_unique_words 和 n_dim 指定。因为嵌入层是我们网络中的第一个隐藏层,所以我们还必须将输入层的形状传递给它:我们使用 input_length 参数来实现这一点。 - 正如在第 10 章中一样,
Flatten()
层使我们能够将多维输出(这里是来自嵌入层的二维输出)传递到一维密集层。 - 说到
Dense()
层,我们在这个架构中使用了一个由 relu 激活组成的层。 - 我们为基线模型选择了一个相当浅的神经网络架构,但是您可以通过添加更多的
Dense()
层来稍微加深它(参见注释掉的行)。/李> - 最后,因为只有两个类要分类,所以我们只需要一个输出神经元(因为,正如本章前面所讨论的,如果一个类的概率为 p,那么另一个类的概率为 1p)。这个神经元是 sigmoid,因为我们希望它输出 0 到 1 之间的概率(参见图 6.9)。
In addition to training word vectors on natural language data alone
(e.g., with word2vec or GloVe) or training them with an embedding layer
as part of a deep learning model, pretrained word vectors are also
available online.
正如使用在 ImageNet(第 10 章)中的数百万幅图像上训练的 ConvNet 一样,这种自然语言迁移学习是强大的,因为这些词向量可能已经在极大的语料库(例如,所有维基百科或英语互联网)上训练过,这些语料库提供了大量细微差别的词汇,训练自己将是昂贵的。预训练单词向量的示例可在本报告和本报告中找到。快速文本库还提供 157 种语言的子词嵌入;这些可以从 fasttext.cc 下载。
在本书中,我们不涵盖用预训练的单词向量(无论它们是下载的还是从你的深度学习模型中单独训练的,就像我们在本章前面的Word2Vec()
中所做的那样)代替嵌入层,因为你可能会喜欢如何做这一点有许多不同的排列。请看 Keras 的创造者 françois·乔莱的这个简洁的教程。
执行model.summary()
,我们发现我们相当简单的 NLP 模型有相当多的参数,如图 11.16 所示:
- 在嵌入层,320,000 个参数来自 5,000 个单词,每个单词在 64 维单词向量空间中指定一个位置(64 × 5,000 = 320,000)。
- 6,400 个值从嵌入层流出,通过展*层进入密集层:我们的每个电影评论输入由 100 个标记组成,每个标记由 64 个词向量空间坐标指定(64 × 100 = 6,400)。
- 密集隐藏层中的 64 个神经元中的每一个都从扁*化层流出的 6400 个值中的每一个接收输入,总共 64×6400 = 409600 个权重。当然,64 个神经元中的每一个都有一个偏差,这一层总共有 409,664 个参数。
- 最后,输出层的单个神经元有 64 个权重——前一层中每个神经元的激活输出一个权重——加上其偏置,总共有 65 个参数。
- 总结每一层的参数,我们总共有 730,000 个。
如例 11.20 所示,我们用一行在最*的章节中应该已经熟悉的代码来编译我们的密集情感分类器,除了——因为我们在二进制分类器中有单个输出神经元——我们使用binary_crossentropy
成本来代替我们用于多类 MNIST 分类器的categorical_crossentropy
成本。
示例 11.20 编译我们的情感分类器
model.compile(loss='binary_crossentropy', optimizer='adam',
metrics=['accuracy'])
使用示例 11.21 中提供的代码,我们创建了一个ModelCheckpoint()
对象,该对象允许我们在训练期间的每个时期后保存我们的模型参数。通过这样做,我们可以在稍后的模型评估中返回到我们选择的时期的参数,或者在生产系统中进行推断。如果output_dir
目录不存在,我们使用makedirs()
方法来创建它。
示例 11.21 在每个时期后为检查点模型参数创建对象和目录
modelcheckpoint = ModelCheckpoint(filepath=output_dir+ "/weights.{epoch:02d}.hdf5") if not os.path.exists(output_dir):
os.makedirs(output_dir) ###Insert Figure
像编译步骤一样,我们的情感分类器的模型拟合步骤(例 11.22)应该是熟悉的,也许除了我们使用回调参数传入modelcheckpoint
对象。[注意:这不是我们第一次使用回调参数。我们以前使用过这个参数,它可以接受多个不同的callbacks
的列表,向 TensorBoard 提供关于模型训练进度的数据(参见第 9 章)。
示例 11.22 拟合我们的情感分类器
model.fit(x_train, y_train,
batch_size=batch_size, epochs=epochs, verbose=1,
validation_data=(x_valid, y_valid),
callbacks=[modelcheckpoint])
如图 11.17 所示,在第二个时期,我们实现了最低的验证损失(0.349)和最高的验证准确性(84.5%)。在第三个和第四个时期,模型严重过拟合,训练集的精度远远高于验证集。到第四个时期,训练准确率达到 99.6%,而验证准确率低得多,为 83.4%。
为了更彻底地评估最佳历元的结果,我们使用 Keras load_ weights()
方法将第二个历元(weights.02.hdf5
)的参数加载回我们的模型,如例 11.23 所示。[注意:虽然该方法被称为load_weights()
,但它加载了所有模型参数,包括偏差。因为权重通常构成模型中的绝大多数参数,所以深度学习实践者通常将参数文件称为“权重”文件。Keras 的早期版本对纪元使用零索引,但是最*的版本从 1 开始索引。]
示例 11.23 加载模型参数
model.load_weights(output_dir+"/weights.02.hdf5"
然后,我们可以通过在x_valid
数据集上传递predict_proba()
方法来计算最佳历元的验证集 y_hat 值,如示例 11.24 所示。
示例 11.24 预测所有验证的 y_hat
y_hat = model.predict_proba(x_valid)
例如,使用 y_hat[0],我们现在可以看到模型对验证集中第一个电影评论的情绪的预测。对于此评论,[latex]\hat{y}[/latex] = 0.09,表明模型估计有 9%的几率评论是正面的,因此有 91%的几率是负面的。执行 y_valid[0]通知我们,此评论的[latex]\hat{y}[/latex]= 0—也就是说,它实际上是一个负面评论—因此模型的[latex]\ hat { y }[/latex]相当不错!如果你对负面评论的内容感到好奇,你可以对例 11.17 稍加修改以访问all_x_valid[0]
列表项的全文,如例 11.25 所示。
示例 11.25 打印完整的验证审查
' '.join(index_word[id] for id in all_x_valid[0])
检查单个分数可能会很有趣,但是通过查看所有的验证结果,我们可以更好地了解模型的性能。通过运行示例 11.26 中的代码,我们可以绘制所有验证[latex]\hat{y}[/latex]值的直方图。
示例 11.26 绘制验证数据[latex]\hat{y}[/latex]值的直方图
plt.hist(y_hat)
_ = plt.axvline(x=0.5, color='orange')
直方图输出如图 11.18 所示。
该图显示,该模型通常对给定评论的情绪有强烈的意见:25,000 个评论中的约 8,000 个评论(其中约 32%)被赋予小于 0.1 的[latex]\hat{y}[/latex],约 6,500 个评论(约 26%)被赋予大于 0.9 的[latex]\hat{y}[/latex]。
图 11.18 中的橙色垂直线标志着 0.5 的阈值,通过简单的准确性计算,高于该阈值的评论被认为是正面的。正如本章前面所讨论的,这样一个简单的阈值可能会产生误导,因为相对于[latex]\hat{y}[/latex]刚刚超过 0.5 的评论而言,模型预测 yˇjust be-low 0.5 的评论在情感上不会有太大差异。为了更细致地评估我们的模型作为二元分类器的性能,我们可以使用 scikit-learn 度量库中的roc_auc_score()
方法直接计算验证数据的 ROC AUC 得分,如示例 11.27 所示。
实施例 11.27 计算验证数据的 ROC AUC
pct_auc = roc_auc_score(y_valid, y_hat)*100.0
"{:0.2f}".format(pct_auc)
使用format()
方法以易读的格式打印输出,我们看到接收器工作特性曲线下的面积百分比是(相当高的)92.9%。
为了了解模型在哪里崩溃,我们可以使用示例 11.28 中的代码创建一个 y 和[latex]\hat{y}[/latex]验证集值的数据框架。
示例 11.28 创建 y 和 y 值的 ydf 数据帧
float_y_hat = [] for y in y_hat:
float_y_hat.append(y[0])
ydf = pd.DataFrame(list(zip(float_y_hat, y_valid)),
columns=['y_hat', 'y'])
用ydf.head(10)
打印得到的ydf
数据帧的前 10 行,我们看到如图 11.19 所示的输出。
像我们在示例 11.29 和 11.30 中所做的那样查询ydf
数据框架,然后通过改变示例 11.25 中的列表索引来检查这些查询表面的各个评论,您可以了解导致模型产生最大错误的评论的种类。
示例 11.29 具有高[latex]\hat{y}[/latex]分数的十个负面验证审查案例
ydf[(ydf.y == 0) & (ydf.y_hat > 0.9)].head(10)
示例 11.30 十个低[latex]\hat{y}[/latex]分数的阳性验证审查案例
ydf[(ydf.y == 0) & (ydf.y_hat > 0.9)].head(10)
在图 11.20 中提供了一个假阳性的例子——一个具有非常高的模型分数([latex]\hat{y}[/latex] = 0.97)的负面评论(y = 0),它是通过运行示例 11.29 中的代码来识别的。[注意:我们通过运行下面的代码来输出这个特定的评论——验证数据集中的第 387 个评论:' '.join(index_word[id]
for id in all_x_valid[386])
。]图 11.21 提供了一个假阴性的示例,即一个模型得分非常低([latex]\hat{y}[/latex] = 0.06)的阳性综述(y = 1),它是通过运行示例 11.30 中的代码识别的。[注:R un ' '.join(index_word[id] for id in all_x_valid[224]
)自己打印出同样的评论。]
对我们的模型进行这种事后分析,一个潜在的缺点是,我们的密集分类器不是专门用于检测可能预测电影评论情绪的序列中出现的多个标记的模式。例如,像标记对不好这样的模式很容易被模型检测出来,作为负面情绪的预测,这可能很方便。
卷积网络
如第 10 章所述,卷积层尤其擅长检测空间模式。在这一节中,我们使用它们来检测单词之间的空间模式——如不好的序列——并看看它们是否可以改善我们的密集网络在根据情感对电影评论进行分类方面的性能。这个 ConvNet 的所有代码都可以在我们的卷积情感分类器笔记本中找到。
该模型的依赖关系与我们的密集情感分类器的依赖关系相同(见示例 11.12),除了它有三个新的 Keras 层类型,如示例 11.31 中所提供的。
示例 11.31 其他 CNN 依赖项
from keras.layers import Conv1D, GlobalMaxPooling1D
from keras.layers import SpatialDropout1D
例 11.32 中提供了我们的卷积情感分类器的超参数。
示例 11.32 卷积情感分类器超参数
# output directory name:
output_dir = 'model_output/conv'
# training:
epochs = 4
batch_size = 128
# vector-space embedding:
n_dim = 64
n_unique_words = 5000
max_review_length = 400
pad_type = trunc_type = 'pre'
drop_embed = 0.2 # new!
# convolutional layer architecture:
n_conv = 256 # filters, a.k.a. kernels
k_conv = 3 # kernel length
# dense layer architecture:
n_dense = 256
dropout = 0.2
相对于来自我们的密集情感分类器的超参数(参见示例 11.13):
- 我们有一个新的、唯一的目录名(“
conv
”),用于在每个训练时期之后存储模型参数。 - 我们的时代数和批量大小保持不变。
- 我们的向量空间嵌入超参数保持不变,除了
- 我们翻了两番,达到 400 人。我们这样做是因为,尽管输入量有了相当大的增加,并且我们的隐藏层数也有所增加,但是我们的卷积分类器相对于我们的密集情感分类器来说仍然具有少得多的参数。
- 使用
drop_embed
,我们将在嵌入层中添加 dropout。
- 我们的卷积情感分类器在嵌入层之后将具有两个隐藏层:
- 具有 256 个滤波器(
n_conv
)的卷积层,每个滤波器的单个维度(长度)为 3 (k_conv
)。当在第 10 章中处理二维图像时,我们的卷积层有二维过滤器。自然语言——无论是书面语言还是口头语言——只有一个与之相关的维度(时间维度),因此本章中使用的卷积层将具有一维滤波器。 - 具有 256 个神经元(
n_dense
)和 20%脱落的密集层。
- 具有 256 个滤波器(
加载 IMDb 数据和标准化评论长度的步骤与我们的密集情感分类笔记本中的步骤相同(参见示例 11.14 和 11.18)。模型结构当然是相当不同的,并在例 11.33 中给出。
示例 11.33 卷积情感分类器架构
model = Sequential()
# vector-space embedding:
model.add(Embedding(n_unique_words, n_dim,
input_length=max_review_length))
model.add(SpatialDropout1D(drop_embed))
# convolutional layer:
model.add(Conv1D(n_conv, k_conv, activation='relu'))
# model.add(Conv1D(n_conv, k_conv, activation='relu'))
model.add(GlobalMaxPooling1D())
# dense layer:
model.add(Dense(n_dense, activation='relu'))
model.add(Dropout(dropout))
# output layer:
model.add(Dense(1, activation='sigmoid'))
分解模型:
- 我们的嵌入层和以前是一样的,除了它现在应用了 dropout。
- 我们不再需要
Flatten()
,因为Conv1D()
层接受嵌入层输出的两个维度。 - 我们在一维卷积层中使用
relu
激活。该层有 256 个独特的过滤器,每个过滤器都可以在通过特定的三令牌序列时自由地专门激活。对于 256×398 的输出形状,256 个滤波器中的每个滤波器的激活图具有 398 的长度。[注:如第 10 章所述,当二维滤波器在图像上卷积时,如果不先填充图像,我们会丢失周边的像素。在这个自然语言模型中,我们的一维卷积过滤器的长度为 3,因此,在电影评论的最左侧,它以第二个标记为中心开始,在最右侧,它以倒数第二个标记为中心结束。因为在将电影评论送入卷积层之前,我们没有在两端填充电影评论,因此我们从两端丢失了相当于 40011 = 398 的信息。我们对这次失败并不难过。 - 如果你喜欢,欢迎你添加额外的卷积层,例如,取消第二个
Conv1D()
的注释 - 全局最大池常见于深度学习 NLP 模型中的降维。我们在这里用它把激活图从 256 × 398 压扁到 256 × 1。通过应用它,最大值计算操作仅保留了给定卷积滤波器的最大激活的幅度,并且我们丢失了滤波器可能已经输出到其 398 元素长的激活图的任何时间位置特定的信息。
- 因为来自全局最大池层的激活输出是一维的,所以它们可以被直接馈送到密集层,该密集层(再次)由 relu 神经元组成,并且应用了丢弃。
- 输出层保持不变。
- 该模型总共有 435,000 个参数(见图 11.22),比我们的密集情感分类器少几十万个。尽管如此,在每个时期,该模型将花费更长的时间来训练,因为卷积运算在计算上相对昂贵。
关于该模型架构,需要注意的一个关键事项是,卷积滤波器并不检测简单的三个一组的字。相反,他们正在检测单词向量的三元组。根据我们在第 2 章中的讨论,将离散的、一个热点的单词表示与在高维空间中逐渐模糊含义的单词向量表示进行对比(见表 2.1),本章中的所有模型都变得专门将单词的含义与评论情绪相关联——而不是仅仅将单个单词与评论情绪相关联。例如,如果网络得知标记对“不好”与负面评论相关联,那么它也应该将该对“不好”与负面评论相关联,因为好和好具有相似的含义(因此应该在词向量空间中占据相似的位置)。
编译、检查点和模型拟合步骤与我们的密集情感分类器相同(分别参见示例 11.20、11.21 和 11.22)。模型拟合过程如图 11.23 所示。具有最低验证损失(0.258)和最高验证准确度(89.6%)的时期是第三个时期。将该时期的模型参数加载回来(使用示例 11.23 中的代码,但指定了weights.03.hdf5
),然后我们为所有验证数据预测[latex]\hat{y}[/latex](与示例 11.24 中完全一样)。创建这些[latex]\hat{y}[/latex]值的直方图(图 11.24)(使用与示例 11.26 中相同的代码),我们可以直观地看到,我们的 CNN 比我们的密集网络具有更强的评论情感意见(参见图 11.18):大约有一千多个[latex]\hat{y}[/latex] < 0.1 的评论,还有几千个[latex]\hat{y}[/latex] > 0.9 的评论。计算 ROC AUC(使用示例 11.27 中的代码),我们输出了 96.12%的高分,表明 CNN 的信心没有放错地方:这是对密集网络已经高达 93%的分数的显著改进。
为顺序数据设计的网络
我们的 ConvNet 分类器优于我们的密集网络——可能在很大程度上是因为它的卷积层擅长学习预测某些结果的单词模式,例如电影评论是正面还是负面。卷积层中的过滤器往往擅长学习短序列,如三个一组的单词(回想一下,我们在示例 11.32 中设置了k = 3
),但自然语言的文档,如电影评论,可能包含更长的单词序列,当考虑在一起时,将使模型能够准确预测一些结果。为了处理像这样的长数据序列,存在一系列深度学习模型,称为递归神经网络(RNNs),其中包括专门的层类型,如长短期记忆单元(LSTMs)和门控递归单元 (GRUs)。在这一节中,我们将介绍 RNNs 的基本理论,并将它们的几种变体应用于我们的电影评论分类问题。我们还介绍了注意力——一种特别复杂的自然语言数据建模方法,为 NLP 应用程序设定了新的基准。
正如本章开始时提到的,RNN 家族,包括 LSTMs 和 GRUs,不仅非常适合处理自然语言数据,还非常适合处理任何出现在一维序列中的输入数据。这包括价格数据(例如,金融时间序列、股票价格)、销售数字、温度和发病率(流行病学)。虽然除了 NLP 之外的 RNN 应用超出了本教材的范围,但是我们在标题时间序列预测下整理了在 jonkrohn.com/resources 随着时间建模定量数据的资源。
递归神经网络
考虑下面的句子:
乔恩和格兰特正在一起写一本书。他们真的很喜欢写它。
人类的大脑可以很容易地理解第二句话中的概念。你已经知道第二句中的“他们”指的是你的作者,“它”指的是我们正在写的书。虽然这个任务对你来说很容易,但是,对一个神经网络来说却不是那么简单。
我们在上一节中构建的卷积情感分类器只能在一个单词两侧的两个单词的上下文中考虑这个单词(k_conv = 3
,如示例 11.32 所示)。在这么小的文本窗口中,神经网络没有能力评估“他们”或“它”可能指的是什么。我们人类的大脑可以做到这一点,因为我们的思想相互循环,我们重温早期的想法,以形成我们对当前环境的理解。在这一节中,我们介绍了递归神经网络的概念,它就是这样做的:它们的结构中内置了环路,允许信息随着时间的推移而持续存在。
递归神经网络(RNN)的高级结构如图 11.25 所示。在左边,紫色的线表示在网络的步骤之间传递信息的环路。正如在一个密集的网络中,每个输入都有一个神经元一样,这里的每个输入也有一个神经元。我们可以在右边更容易地观察到这一点,这里是打开的 RNN 示意图。句子中的每个单词都有一个递归模块(为了简洁起见,这里只显示了前四个单词)。[注意:这也是为什么我们必须在预处理过程中填充较短的句子:RNN 期望一个特定长度的序列,因此如果序列不够长,我们添加填充标记来弥补差异。然而,每个模块接收来自前一模块的额外输入,并且这样做时,网络能够传递来自序列中较早时间步长的信息。在图 11.25 的例子中,每个单词由 RNN 序列中不同的时间步长表示,因此网络可能知道“乔恩”和“格兰特”正在写书,从而将这些术语与序列中后来出现的单词“他们”联系起来。
从计算上来说,递归神经网络比专门的“前馈”神经网络(如我们在本书中使用的密集网络和 CNN)更复杂。如图 8.6 所示,前馈网络包括从输出层向输入层反向传播成本。如果网络包括一个递归层(如SimpleRNN
、LSTM
或GRU
),那么成本不仅要反向传播到输入层,还要反向传播到递归层的时间步长(从后面的时间步长返回到前面的时间步长)。请注意,当我们从后面的隐藏层反向传播到前面的隐藏层时,学习的梯度会消失(见图 8.8),同样,当我们从递归层中后面的时间步长反向传播到前面的隐藏层时,学习的梯度也会消失。因此,序列中较晚的时间步长比较早的时间步长在模型中有更大的影响。[注意:如果您怀疑序列的开头(例如,电影评论开头的单词)通常比结尾(评论结尾的单词)与您使用模型(情感分类)解决的问题更相关,您可以在将序列作为输入传递到网络之前反转序列。这样,在网络的循环层中,序列的开始将在结束之前反向传播。]
在喀拉斯实施 RNN
在 Keras 中,向神经网络架构添加递归层以创建 RNN 是很简单的,正如我们在我们的 RNN 情感分类器 Jupyter notebook【或互补多米诺项目中所阐述的那样。为了简洁和可读性,请注意以下代码单元在本章的所有 Jupyter 笔记本中都是相同的,包括我们已经介绍过的密集和卷积情感分类器笔记本:
- 加载依赖项(例 11.12),除了在给定的笔记本中通常有一个或两个附加的依赖项。
- 我们将分别记录这些添加内容——通常在我们介绍笔记本电脑的神经网络架构时。
- 加载 IMDb 电影评论数据(示例 11.14)。
- 标准化审查长度(示例 11.18)。
- 编译模型(例 11.20)。
- 创建
ModelCheckpoint()
对象和目录(例 11.21)。 - 拟合模型(示例 11.22)。
- 从最佳历元加载模型参数(例 11.23),关键例外是我们选择加载的特定历元根据哪个历元具有最低验证损失而变化。
- 为所有验证数据预测[latex]\hat{y}[/latex](示例 11.24)。
- 绘制[latex]\hat{y}[/latex]的直方图(例 11.26)。
- 计算 ROC AUC(例 11.27)。
变化的代码单元是那些我们:
- 设置超参数
- 设计神经网络架构
我们的 RNN 的超参数如例 11.34 所示。
示例 11.34 RNN 情感分类器超参数
# output directory name:
output_dir = 'model_output/rnn'
# training:
epochs = 16 # way more!
batch_size = 128
# vector-space embedding:
n_dim = 64
n_unique_words = 10000
max_review_length = 100 # lowered due to vanishing gradient over time pad_type = trunc_type = 'pre'
drop_embed = 0.2
# RNN layer architecture:
n_rnn = 256
drop_rnn = 0.2
相对于我们以前的情感分类器笔记本的变化是:
- 我们将训练的时期翻了两番,达到 16 个,因为在早期的时期没有出现过度适应。
- 我们将
max_review_length
降低到 100,尽管这对一个简单的 RNN 来说已经太多了。在学习的梯度完全消失之前,我们可以用 LSTM 反向传播大约 100 个时间步长(即,自然语言模型中的 100 个标记或单词)(在下一节中讨论),但是在普通的旧 RNN 中的梯度在大约 10 个时间步长之后完全消失。因此,在我们注意到这个模型的性能降低之前,max_review_length 可能会降低到小于 10。 - 对于本章中的所有 RNN 家族架构,我们尝试将单词向量词汇增加一倍,达到 10000 个令牌。这似乎为这些架构提供了改进的结果,尽管我们没有严格测试它。
- 我们设置了
n_rnn = 256
,所以我们可以说这个循环层有 256 个单元,或者,我们可以说它有 256 个单元。同样,256 个卷积过滤器使我们的 CNN 模型能够专门检测 256 个独特的单词含义三元组,43 这种设置使我们的 RNN 能够检测 256 个独特的单词含义序列,这些序列可能与评论情绪相关。[注意:“单词含义”在这里是指单词向量空间中的位置]
例 11.35 提供了我们的 RNN 模型结构。
示例 11.35 RNN 情感分类器架构
from keras.layers import SimpleRNN
model = Sequential()
model.add(Embedding(n_unique_words, n_dim,
input_length=max_review_length))
model.add(SpatialDropout1D(drop_embed))
model.add(SimpleRNN(n_rnn, dropout=drop_rnn))
model.add(Dense(1, activation='sigmoid'))
在这个模型的隐藏层中,我们用一个 Keras SimpleRNN()
层来代替一个卷积层或一个密集层(或两者都有),它有一个 dropout 参数;因此,我们不需要在单独的代码行中添加 dropout。与将密集层放在卷积层之后不同,在递归层之后添加密集层相对不常见,因为它提供的性能优势很小。无论如何,你都可以尝试添加一个Dense()
隐藏层。
运行这一模型的结果(在我们的 RNN 情感分类器笔记本中完整显示)并不令人鼓舞。我们发现,训练损失在前六个时期稳步下降后,在那之后开始跳跃。这表明,即使在训练数据中,模型也很难学习模式,相对于验证数据,它应该很容易做到这一点。事实上,到目前为止,本书中适合的所有模型都有训练损失,可靠地衰减了一个又一个时期。
随着培训损失的反弹,验证损失也在反弹。我们在第七个时期观察到最低的验证损失(0.504),这对应于 77.6%的验证准确性和 84.9%的 ROC AUC。对于情感分类器模型来说,这三个指标都是最差的。这是因为,正如我们在本节前面提到的,在梯度减小到参数更新小到可以忽略不计之前,rnn 只能反向传播大约 10 个时间步长。因此,简单的 rnn 在实践中很少使用:更复杂的递归层类型,如 LSTMs,可以反向传播约 100 个时间步长,更为常见。[注意:我们能想到的简单 RNN 实用的唯一情况是,您的序列只有 10 个或更少的连续时间步长的信息,这些信息与您用模型解决的问题相关。对于某些时间序列预测模型,或者如果您的数据集中只有很短的自然语言字符串,可能会出现这种情况。]
长短期记忆单位
如前一节末尾所述,如果相关信息和需要它的上下文之间的空间很小(少于 10 个时间步长),简单的 rnn 就足够了;然而,如果任务需要更广泛的背景(在 NLP 任务中经常是这样),有另一种循环层类型非常适合它:长短期记忆单位,或 LSTMs。
LSTMs 是由塞普·霍克雷特和 jürgen·施密德胡伯在 1997 年提出的[注:霍克雷特,s .,&施密德胡伯,J. (1997)。长短期记忆。神经计算,9,1735-80。]但如今它们在 NLP 深度学习应用中的应用比以往任何时候都更广泛。LSTM 层的基本结构与图 11.25 中的简单重现层相同。
LSTMs 接收来自数据序列的输入(例如,来自自然语言文档的特定标记),并且它们还接收来自序列中的前一时间点的输入。不同的是,在一个简单的递归层(例如,Keras 中的SimpleRNN()
)的每个细胞内,你会发现一个单一的神经网络激活函数,如双曲正切函数,它转换 RNN 细胞的输入,以生成其输出。相比之下,LSTM 层的细胞包含更复杂的结构,如图 11.26 所示。
这个示意图可能会让人望而生畏,不可否认的是,我们同意,对 LSTM 细胞内部的每个组件的完整的一步一步的分解对于本书来说是不必要的详细。[注:要想彻底了解 LSTM 细胞,我们推荐克里斯托弗·奥拉的高度可视化的《解释者》,这本书在 bit.ly/colahLSTM.大学有售]也就是说,有几个关键点我们还是应该在这里涉及一下。第一个是横跨 LSTM 单元顶部的单元状态。注意,细胞状态不通过任何非线性激活函数。事实上,细胞状态只经历了一些微小的线性转换,但除此之外,它只是从一个细胞传递到另一个细胞。这两个线性变换(乘法和加法运算)是 LSTM 层中的像元可以向像元状态添加信息的点,这些信息将被传递到该层中的下一个像元。在任一情况下,在信息被添加到单元状态之前,都有一个 sigmoid 激活(在图中由σ表示)。因为 sigmoid 激活产生 0 和 1 之间的值,所以这些 sigmoid 充当“门”,决定是否将新信息(来自当前时间步长)添加到单元状态。
当前时间步的新信息是当前时间步的输入和前一时间步的隐藏状态的简单连接。这种连接有两次机会被合并到细胞状态中,要么是线性的,要么是在非线性 tanh 激活之后,无论是哪种情况,都是这些 sigmoid 门决定信息是否被合并。
在 LSTM 确定了将什么信息添加到单元状态之后,另一个 sigmoid 门决定是否将来自当前输入的信息添加到最终单元状态,并且这产生当前时间步长的输出。请注意,在不同的名称(“隐藏状态”)下,输出也被发送到下一个 LSTM 模块(它代表序列中的下一个时间步),在那里它与下一个时间步的输入组合,再次开始整个过程,并且(与隐藏状态一起)最终的单元状态也被发送到代表下一个时间步的模块。
我们知道这可能很难处理。另一种提取 LSTM 含量的方法是:
- 通过给定 LSTM 单元中的每个时间步长,单元状态使得信息能够沿着序列的长度持续存在。这是 LSTM 最长的记忆。
- 隐藏状态类似于简单 RNN 中的循环连接,代表 LSTM 的短期记忆。
- 每个模块代表数据序列中的特定点(例如,来自自然语言文档的特定标记)。
- 在每个时间步长,做出关于序列中特定时间步长的信息是否与局部(隐藏状态)和全局(单元状态)上下文相关的几个决定(使用那些 sigmoid 门)。
- 前两个 sigmoid 门确定来自当前时间步长的信息是否与全局上下文(单元状态)相关,以及它将如何组合到该流中。
- 最终的 sigmoid 门确定来自当前时间步长的信息是否与本地上下文相关(即,它是否被添加到隐藏状态,其兼作当前时间步长的输出)。
我们建议花点时间重新考虑图 11.26,看看你是否能理解信息是如何通过 LSTM 细胞的。如果你记住,乙状结肠门决定信息是否通过,这个任务应该更容易。无论如何,本节的主要要点是:
- 简单的 RNN 单元在时间步长之间只传递一种类型的信息(隐藏状态),并且只包含一个激活函数。
- LSTM 细胞明显更复杂:它们在时间步长之间传递两种类型的信息(隐藏状态和细胞状态),并包含五种激活功能。
使用 Keras 实现 LSTM
尽管有额外的计算复杂性,正如我们在 LSTM 情感分类器笔记本中展示的,用 Keras 实现 LSTMs 是轻而易举的事情。如例 11.36 所示,我们为 LSTM 选择了与简单 RNN 相同的超参数,除了:
- 我们更改了输出目录名。
- 我们将变量名更新为
n_lstm
和drop_lstm
。 - 我们将训练的历元数减少到 4,因为 LSTM 比简单的 RNN 更早地开始过度适应训练数据。
示例 11.36 LSTM 情感分类器超参数
# output directory name:
output_dir = 'model_output/LSTM'
# training:
epochs = 4
batch_size = 128
# vector-space embedding:
n_dim = 64
n_unique_words = 10000
max_review_length = 100
pad_type = trunc_type = 'pre'
drop_embed = 0.2
# LSTM layer architecture:
n_lstm = 256
drop_lstm = 0.2
我们的 LSTM 模型架构也和我们的 RNN 架构一样,只是我们把SimpleRNN()
层换成了LSTM()
;见例 11.37。
示例 11.37 LSTM 情感分类器架构
from keras.layers import LSTM
model = Sequential()
model.add(Embedding(n_unique_words, n_dim,
input_length=max_review_length))
model.add(SpatialDropout1D(drop_embed))
model.add(LSTM(n_lstm, dropout=drop_lstm))
model.add(Dense(1, activation='sigmoid'))
我们的 LSTM 情感分类器笔记本中提供了训练 LSTM 的完整结果。总之,训练损失随着时代的推移而稳步下降,这表明模型拟合比我们简单的 RNN 进行得更常规。然而,结果并不是一帆风顺的。尽管它相对复杂,我们的 LSTM 只执行以及我们的基线密集模型。验证损失最小的 LSTM 纪元是第二个纪元(0.349);它的验证准确率为 84.8%,ROC AUC 为 92.8%。
双向 LSTMs
双向 lstm(或简称为 Bi-lstm)是标准 lstm 的巧妙变体。后者涉及仅在一个方向上的反向传播(通常在时间步长上向后,例如从电影评论的结尾向开头),而双向 LSTMs 涉及在一些一维输入上在两个方向上的反向传播(在时间步长上向后和向前)。这种额外的反向传播使计算复杂度加倍,但是如果准确性对您的应用程序至关重要,那么它通常是值得的:Bi-lstm 是现代 NLP 应用程序中的一种流行选择,因为它们能够在输入文档中的给定标记之前和之后学习模式,这有助于实现高性能的模型。
将我们的 LSTM 体系结构(例 11.37)转换成双 LSTM 体系结构是没有痛苦的。我们只需要在Bidirectional()
包装器中包装我们的LSTM()
层,如例 11.38 所示。
示例 11.38 双向 LSTM 情感分类器架构
from keras.layers import LSTM
from keras.layers.wrappers import Bidirectional # new!
model = Sequential()
model.add(Embedding(n_unique_words, n_dim,
input_length=max_review_length))
model.add(SpatialDropout1D(drop_embed))
model.add(Bidirectional(LSTM(n_lstm, dropout=drop_lstm)))
model.add(Dense(1, activation='sigmoid'))
从 LSTM 到双 LSTM 的直接转换产生了巨大的性能收益,正如模型拟合的结果所示(在我们的双 LSTM 情感分类器笔记本中提供了完整的信息)。具有最低验证损失(0.331)的纪元是第四个,其验证准确率为 86.0%,ROC AUC 为 93.5%,使其成为我们迄今为止第二好的模型,仅次于我们的卷积架构。
堆叠递归模型
堆叠多个 RNN 家族层(无论是SimpleRNN()
、LSTM
还是其他类型)并不像在 Keras 中堆叠密集层或卷积层那样简单,尽管这并不困难:它只需要在定义层时指定一个额外的参数。
正如我们所讨论的,递归图层接受有序的输入序列。这些层的循环性质来自于它们对序列中每个时间步长的处理,以及将隐藏状态作为输入传递给序列中的下一个时间步长。在到达序列中的最终时间步长时,循环层的输出是最终隐藏状态。
所以为了堆叠循环层,我们使用参数return_sequences=True
。这要求递归层返回层序列中每个步骤的隐藏状态。结果输出现在有三个维度,与输入序列的维度相匹配。递归层的默认行为是只将最终隐藏状态传递给下一层。如果我们将这些信息传递到一个密集的层,这种方式非常有效。然而,如果我们希望网络中的后续层是另一个循环层,那么该后续循环层必须接收一个序列作为其输入。因此,为了将来自序列中所有单个时间步长的隐藏状态数组(而不是只有单个最终隐藏状态值)传递给这个后续的递归层,我们将可选的return_sequences
参数设置为True
。[注意:还有一个 return_state 参数(和 return_sequences 一样,默认为 False)要求网络除了返回最终的隐藏状态之外,还要返回最终的单元格状态。这个可选参数不经常使用,但是当我们想要用另一个层的单元状态初始化一个循环层的单元状态时,它很有用,就像我们在“编码器-解码器”模型中所做的那样(在下一节中介绍)
为了观察这一点,我们来看看例 11.39 中所示的双层双 LSTM 模型。(注意,在这个例子中,我们仍然保留最终递归层的缺省值return_sequences=False
,以便仅返回这个最终递归层的最终隐藏状态,用于网络中的进一步下游。)
示例 11.39 堆叠递归模型架构
from keras.layers import LSTM
from keras.layers.wrappers import Bidirectional
model = Sequential()
model.add(Embedding(n_unique_words, n_dim,
input_length=max_review_length))
model.add(SpatialDropout1D(drop_embed))
model.add(Bidirectional(LSTM(n_lstm_1, dropout=drop_lstm,
return_sequences=True))) # new!
model.add(Bidirectional(LSTM(n_lstm_2, dropout=drop_lstm)))
model.add(Dense(1, activation='sigmoid'))
从本书第一章开始,你已经多次发现,神经网络模型中的附加层可以使它学习越来越复杂和抽象的表示。在这种情况下,由辅助双 LSTM 层促成的抽象转化为性能增益。堆叠的 Bi-LSTM 以显著的优势胜过其非堆叠的表亲,其 ROC AUC 为 94.9%,验证准确性在其最佳时期为 87.8%(第二,其验证损失为 0.296)。完整的结果在我们的堆栈式 Bi LSTM 情感分类器笔记本中提供。
尽管我们的堆叠式双 LSTM 架构比我们的卷积架构复杂得多,尽管我们的堆叠式双架构专为处理自然语言等顺序数据而设计,但其性能仍落后于我们的 ConvNet 模型的精度。也许一些超参数实验和微调会产生更好的结果,但最终我们的假设是,因为 IMDb 电影评论数据集如此之小,我们的 LSTM 模型没有机会展示它们的潜力。我们认为,更大的自然语言数据集将有助于在与 LSTM 层相关的许多时间步长上进行有效的反向传播。[注意:如果你想自己测试我们的假设,我们在第 14 章提供了适当的情感分析数据集建议。]
RNNs 家族中 LSTM 的一个亲戚是门控循环单位(GRU)。gru 的计算强度略低于 lstm,因为它们仅涉及三个激活函数,但它们的性能通常接* lstm 的性能。如果多一点计算能力对你来说不是一个障碍,我们认为选择 GRU 而不是 LSTM 没有什么优势。如果您有兴趣尝试 Keras 中的 GRU,只需导入 GRU()图层类型并将其放入模型架构中即可,否则您可能需要放置 LSTM()图层。查看我们的 GRU 情感分类器笔记本,获取实际操作示例。[注:Cho,k .等人(2014 年)。使用统计机器翻译的 RNN 编码器-解码器学习短语表示。arXiv:1406.1078。]
Seq2seq 和注意
涉及所谓的序列到序列(seq 2 seq;发音为“查找到查找”)模型接受一个输入序列并生成一个输出序列作为它们的乘积。神经机器翻译 (NMT)是 seq2seq 模型的典型类别,谷歌翻译的机器翻译算法是 NMT 在生产系统中使用的一个例子。【注:谷歌翻译自 2016 年起纳入 NMT。你可以在 bit.ly/translateNMT.了解更多信息]
NMTs 由一个编码器-解码器结构组成,其中编码器处理输入序列,解码器生成输出序列。编码器和解码器都是 RNN,因此在编码步骤中存在隐藏状态,该隐藏状态在 RNN 的单元之间传递。在编码阶段结束时,最终的隐藏状态被传递给解码器;这个最终状态可以被称为“上下文”这样,解码器以输入序列中正在发生的内容开始。尽管这个想法在理论上是合理的,但是上下文常常是一个瓶颈:模型很难处理真正长的序列,因此上下文失去了它的影响力。
注意力是为了克服与上下文相关的计算瓶颈而开发的。[注:Bahdanau 等人(2014 年)。通过联合学习对齐和翻译的神经机器翻译。arXiv:1409.0473】。简而言之,我们将隐藏状态的完整序列传递给解码器,而不是将单个隐藏状态向量(最后一个)从编码器传递给解码器。这些隐藏状态中的每一个都与输入序列中的单个步骤相关联,尽管解码器可能需要来自输入中多个步骤的上下文来告知其在解码期间任何给定步骤的行为。为了实现这一点,对于序列中的每一步,解码器计算来自编码器的每个隐藏状态的分数。每个编码器隐藏状态乘以其分数的 softmax。[注意:回想一下第 6 章,softmax 函数采用一个实数向量,并生成一个概率分布,其类别数与输入向量相同。]
这有助于放大最相关的上下文(它们会有较高的分数,因此有较高的 softmax 概率),同时屏蔽不相关的上下文;本质上,注意力对给定时间步长的可用上下文进行加权。加权的隐藏状态被求和,并且这个新的上下文向量被用于预测解码器序列中每个时间步长的输出。
按照这种方法,模型有选择地检查它所知道的关于输入序列的信息,并且只使用必要的相关信息来通知输出。是关注整个句子最相关的元素!如果这本书专门讨论 NLP,我们至少会有一章讨论 seq2seq 和注意力。就目前情况而言,我们必须让您来进一步探索这些技术,这些技术提高了许多 NLP 应用程序的性能。
自然语言处理中的迁移学习
机器视觉从业者多年来一直受益于已经在大型、丰富的数据集上进行了预训练的细微差别模型的现成可用性。正如第 10 章末尾的“迁移学习”一节所述,临时用户可以下载具有预训练权重的模型架构,并快速将其特定的视觉应用扩展到最先进的模型。最*,这种迁移学习也很容易应用于 NLP。[注意:当我们在本章前面介绍 Keras Embedding()层时,我们谈到了单词向量的迁移学习。本节涵盖的迁移学习方法(ULMFiT、ELMo 和 BERT)在精神上更接*于机器视觉的迁移学习,因为(类似于由深层 CNN 表示的分层视觉特征;见图 1.17)它们允许自然语言元素的层次化表示(例如,子词、单词和上下文,如图 2.9 所示)。相比之下,单词向量没有等级;它们只捕捉语言的单词层次。]
首先是 ULMFiT(通用语言模型微调),其中工具被描述和开源,使其他人能够使用模型在预训练期间学习的很多东西。[注:霍华德,j .,和鲁德,S. (2018)。用于文本分类的通用语言模型微调。arXiv:1801.06146]通过这种方式,可以根据特定任务的数据对模型进行微调,从而需要更少的训练时间和更少的数据来获得高精度的结果。
此后不久,ELMo(来自语言模型的嵌入)被公之于众。【注:彼得斯,M.E .等人(2018)。深层语境化的词语表达。arXiv:1802.05365。]在本章介绍的标准单词向量的更新中,单词嵌入不仅依赖于单词本身,还依赖于单词出现的上下文。ELMo 不是为字典中的每个单词嵌入一个固定的单词,而是在为每个单词分配特定的嵌入之前查看句子中的每个单词。ELMo 模型是在一个非常大的语料库上进行预训练的;如果您必须自己训练它,它可能会占用您的计算资源,但是您现在仍然可以在自己的 NLP 模型中使用它作为一个组件。
我们要提到的最后一个迁移学习开发是来自 Google 的 BERT(来自 transformers 的双向编码器表示)的发布。[注:Devlin,j .等人(2018 年)。BERT:用于语言理解的深度双向转换器的预训练。arXiv: 0810.04805。]与 ULMFiT 和 ELMo 相比,针对特定 NLP 任务调整的预训练 BERT 模型可能更有助于在广泛的应用中实现新的最先进的基准,同时需要更少的训练时间和更少的数据。
非顺序架构:Keras 功能 API
为了解决给定的问题,有无数种方法可以将我们在本书中已经讨论过的层类型重新组合,以形成深度学习模型架构。例如,参见我们的conv·LSTM 堆栈情感分类器笔记本,其中我们特别创造性地设计了一个模型,该模型涉及一个卷积层将其激活传递到一个双 LSTM 层。57 然而,到目前为止,我们的创造力受到了我们使用 Keras Sequential()
模型的限制,该模型要求每一层直接流入下一层。
虽然顺序模型构成了深度学习模型的绝大部分,但有时非顺序架构——允许无限的模型设计可能性,并且通常更复杂——可能是有保证的。58 在这种情况下,我们可以利用 Keras functional API ,它利用模型类而不是我们在本书中迄今为止使用的顺序模型。
作为一个非顺序架构的例子,我们决定重复使用我们性能最高的情感分类器——卷积模型,看看我们能否从众所周知的柠檬中挤出更多的果汁。如图 11.27 所示,我们的想法是有三个并行的卷积层流,每个卷积层从一个Embedding()
层接收字向量。
在我们的卷积情感分类器笔记本中,这些流中的一个将具有三个令牌的过滤器长度。其中一个过滤器的长度为 2,因此它将专门学习似乎与将电影评论分类为积极或消极情绪相关的词向量对。第三个卷积流将具有四个令牌的过滤器长度,因此它将专门检测单词含义的相关四元组。
我们的三卷积流模型的超参数在示例 11.40 以及我们的多 ConvNet 情感分类器 Jupyter 笔记本【或互补多米诺项目中提供。
示例 11.40 多 ConvNet 情感分类器超参数
# output directory name:
output_dir = 'model_output/multiconv'
# training:
epochs = 4
batch_size = 128
# vector-space embedding:
n_dim = 64
n_unique_words = 5000
max_review_length = 400
pad_type = trunc_type = 'pre'
drop_embed = 0.2
# convolutional layer architecture:
n_conv_1 = n_conv_2 = n_conv_3 = 256
k_conv_1 = 3
k_conv_2 = 2
k_conv_3 = 4
# dense layer architecture:
n_dense = 256
dropout = 0.2
新的超参数与三个卷积层相关联。所有三个卷积层都有 256 个滤波器,但如图 11.27 所示,这些层形成并行流,每个层都有一个唯一的滤波器长度(k)
,范围从 2 到 4。
例 11.41 中提供了我们的多 ConvNet 模型架构的 Keras 代码。
示例 11.41 多 ConvNet 情感分类器架构
from keras.models import Model
from keras.layers import Input, concatenate
# input layer:
input_layer = Input(shape=(max_review_length,),
dtype='int16', name='input')
# embedding:
embedding_layer = Embedding(n_unique_words, n_dim,
name='embedding')(input_layer)
drop_embed_layer = SpatialDropout1D(drop_embed,
name='drop_embed')(embedding_layer)
# three parallel convolutional streams:
conv_1 = Conv1D(n_conv_1, k_conv_1,
activation='relu', name='conv_1')(drop_embed_layer)
maxp_1 = GlobalMaxPooling1D(name='maxp_1')(conv_1)
conv_2 = Conv1D(n_conv_2, k_conv_2,
activation='relu', name='conv_2')(drop_embed_layer)
maxp_2 = GlobalMaxPooling1D(name='maxp_2')(conv_2)
conv_3 = Conv1D(n_conv_3, k_conv_3,
activation='relu', name='conv_3')(drop_embed_layer)
maxp_3 = GlobalMaxPooling1D(name='maxp_3')(conv_3)
# concatenate the activations from the three streams:
concat = concatenate([maxp_1, maxp_2, maxp_3])
# dense hidden layers:
dense_layer = Dense(n_dense,
activation='relu', name='dense')(concat)
drop_dense_layer = Dropout(dropout, name='drop_dense')(dense_layer)
dense_2 = Dense(int(n_dense/4),activation='relu', name='dense_2')(drop_dense_layer)
dropout_2 = Dropout(dropout, name='drop_dense_2')(dense_2)
# sigmoid output layer:
predictions = Dense(1, activation='sigmoid', name='output')(dropout_2)
# create model:
model = Model(input_layer, predictions)
如果您以前没有见过 Keras 模型类,这种架构可能看起来有点令人担忧,但是当我们在这里逐行分解它时,它应该会失去它可能具有的任何令人生畏的方面:
- 使用
Model
类,我们独立地指定Input()
层,而不是将其指定为第一个隐藏层的 shape 参数。我们明确指定了数据类型(dtype
):16 位整数(int16
)的范围可以达到 32,767,这将容纳我们输入的单词的最大索引。59 与该模型中的所有层一样,我们指定了一个可识别的名称参数,这样当我们稍后打印该模型时(使用model.summary()
)将很容易理解所有的内容。 - 每一层都被赋予一个唯一的变量名,如
input_layer
、embedding_layer
和conv_2
。我们将使用这些变量名来指定模型中的数据流。 - 使用 Model 类最值得注意的方面是任何层调用后第二对括号中的变量
name
,使用函数式编程语言的开发人员对此会很熟悉。 - 这指定哪个层的输出流入给定层。比如
embedding_layer
的第二组括号中的(input_layer
)表示输入层的输出流入嵌入层。 Embedding()
和SpatialDropout1D
层采用本章前面相同的参数。SpatialDropout1D
层的输出(带有一个名为drop_embed_layer
的变量)是三个独立的并行卷积层的输入:conv_1, conv_2, and conv_3
。- 如图 11.27 所示,三个卷积流中的每一个都包括一个 Conv1D 层(具有唯一的
k_conv
滤波器长度)和一个GlobalMaxPooling1D
层。 - 由三个卷积流的每一个的
GlobalMaxPooling1D
层输出的激活由concatenate()
层连接成激活值的单个阵列,该阵列接受输入列表([maxp_1, maxp_2, maxp_3
])作为其唯一的参数。 - 级联的卷积流激活作为输入提供给两个
Dense()
隐藏层,每个隐藏层都有一个与之相关联的Dropout()
层。(根据n_dense/4
的说法,第二个致密层的神经元数量是第一个致密层的四分之一。) - 由 sigmoid 输出神经元([latex]\hat{y}[/latex])输出的激活被分配给变量名预测。
- 最后,模型类通过两个参数将模型的所有层联系在一起:输入层的变量名(即
input_layer
)和输出层的变量名(即predictions
)。
我们精心设计的并行网络架构最终为我们提供了一个适度的能力提升,使我们在本章中获得了性能最佳的情感分类器(见表 11.6)。正如我们在 Multi ConvNet 情感分类器笔记本中详细描述的那样,最低的验证损失出现在第二个时期(0.262),这个时期的验证准确率为 89.4%,ROC AUC 为 96.2%,比我们的Sequential
卷积模型好 0.1%。
摘要
在这一章中,我们讨论了预处理自然语言数据的方法、从自然语言语料库中创建单词向量的方法,以及计算接收机工作特性曲线下面积的过程。在本章的后半部分,我们将这些知识应用于各种深度学习 NLP 模型的实验,以将电影评论分为好评或差评。其中一些模型涉及您在前面章节中熟悉的层类型(即密集层和卷积层),而后面的模型涉及 RNN 家族的新层类型(LSTMs 和 GRUs),并且在本书中首次涉及非顺序模型架构。
表 11.6 总结了我们的情感分类实验的结果。我们假设,如果我们的自然语言数据集更大,双 LSTM 架构可能会优于卷积架构。
Domino 编辑提示:我们已经将“脚注”嵌入到叙述中,以增加在线可读性。**
深度学习和神经网络简介
原文:https://www.dominodatalab.com/blog/deep-learning-introduction
像深度学习和神经网络这样的短语在公众心目中可能是人工智能的代名词,但对于与他们一起工作的数据科学团队来说,它们是自成一类的。在自动驾驶汽车的仪表板后面,在我们每天使用的在线应用程序下面,是一系列复杂、交织的算法,这些算法的灵感来自人类大脑的神经生物学。
什么是深度学习?
深度学习是一种机器学习,或 ML,旨在根据输入(X)预测输出(Y)。它通常在涉及具有大量输入属性的数据时使用。深度学习的工作原理是首先识别输入和输出之间的模式,然后在给定以前没有遇到过的数据时,使用这些信息来预测新的输出。例如,深度学习算法可以通过向股票提供其过去表现的数据来预测股票的未来表现。
深度学习与机器学习
ML 是一个广泛的计算机系统类别,它可以通过使用分析数据、发现模式并从这些模式中得出推论的算法,在没有人类干预的情况下进行学习和适应。ML 是人工智能(AI)的子集。深度学习是机器学习 的一个 子集,而神经网络是深度学习的一个子集。
为什么要用深度学习?
当有大量数据要处理,并且组织有基础设施来支持其在合理时间内的大量计算时,深度学习可以比其他 机器学习模型 更具优势。因为深度学习不允许特征检查,也不需要大量的特征工程,所以当你处理大量的非结构化数据时,它特别有用。
你可以使用的数据越多,深度学习就越有可能成为更好的解决方案。随着数据的扩展,深度学习变得更加高效。在一个可用数据除了周复一周、年复一年地扩大之外什么都不做的世界里,深度学习的采用可能会继续升级。
深度学习是如何工作的?
成功的深度学习模型是使用 数据科学生命周期(DCLS) 创建和实现的。这包括四个阶段:管理、开发、部署和监控。
- 管理:定义问题陈述,选择算法,获取数据。
- 开发:使用不同的算法和超参数训练多个模型。然后,在新数据上测试表现最佳的模型,以确保它们继续按照预测表现。对于深度学习模型,过度拟合通常是一个问题。当模型变得过于复杂,无法适应以前没有遇到过的新变量时,就会出现这种情况。
- 部署:模型被移动到它的生产环境中,并且用户被训练使用它。
- 监控: 对模型进行监控,确保其继续*稳运行。如果出现偏差、概念漂移或数据漂移等问题,自动监视器可以立即通知数据科学团队。
深度学习算法分析输入数据,找到数据中的模式,然后预测输出数据。虽然是算法本身做到了这一点,但它的有效性取决于数据的质量以及数据科学团队如何调整算法的超参数。
该算法通过数据分层工作:在输入数据层和输出数据层之间是多个隐藏层,算法在这些隐藏层中工作,排序、分析和建立数据点(节点)之间的联系。这就是深度学习中“深度”一词的由来,因为在输入层和输出层之间通常有许多隐藏层。
该算法在输出层生成预测后,会将其预测与实际输出进行比较,并在出现差异时使用一种称为反向传播的方法进行自我校正。从输出开始,它向后遍历各层,调整其参数,直到结果与实际输出非常接*。
神经网络在深度学习中的作用
人工神经网络是一套算法,其灵感来自人脑的神经生物学。这些网络由 人工神经元 组成,对应于每个隐藏数据层上的节点。每个人工神经元都使用一个激活功能,其中包含一个打开它的特征。
每个节点接受多个加权输入,处理它们,将一个 激活函数 应用于这些输入的总和,然后产生一个输出。然后,下一个节点从之前的节点获取信息,并生成自己的输出。
激活函数的一个例子是 sigmoid 函数,它接收神经元的线性组合输入,并将其重新调整到从 0 到 1 的范围。这很有用,因为函数的输出可以解释为有效的概率分布。此外,sigmoid 是可微分的,允许神经元的权重通过反向传播进行调整,以防其输出与期望的目标不匹配。
建议将节点排列在均匀分离的层中是过于简单化了。这些层的结构可能异常复杂,不同的网络使用不同的层来给出不同的结果。一个 前馈神经网络 就是这样一个简单明了的网络。目前使用的网络拓扑还有很多。
深度神经网络的挑战
神经网络当然不是所有问题的解决方案。对于大量的复杂数据,它们可能比其他 ML 模型更有效,但这些模型的复杂性意味着需要更多的时间和资源来训练、测试和部署它们。
由于数据量较小,深度学习与线性回归或 SVM(支持向量机)等其他算法相比没有太大优势。
成长的机会
深度学习比更简单的算法更耗费资源。随着 CPU 和 GPU 每年变得越来越强大,与几年前相比,今天更多的组织可以利用深度学习。特别值得注意的是 NVIDIA 等公司在 GPU 方面的 进步。由于 GPU 拥有比 CPU 更多的内核,以及更高的内存带宽,因此它们对于神经网络所需的并行计算来说异常强大。
这是通过采用分布式计算和云计算来实现的,分布式计算和云计算将资源负载分布在多个系统上,或者通过互联网使用更强大的服务器。
深度学习被高度采用的另一个原因是算法本身的进步,这些算法改变了深度学习的工作方式。例如,如果你正在训练一个深度学习模型, RELU 函数 可能会给你比 SIGMOID 函数好得多的结果,因为它给你的消失梯度问题更少。
深度学习中的学习类型
在深度学习内部,有各种学习供 数据科学家 和 ML 从业者使用。
监督学习
利用监督学习技术,利用与输入数据相对应的输出数据来训练深度学习模型。例如,如果您正在训练一个模型来识别垃圾邮件,您将为该模型提供电子邮件数据,并指定哪些电子邮件是垃圾邮件,哪些不是。然后,该模型将使用反向传播进行自我调整,以使其预测与提供给它的输出数据相匹配。
使用 监督学习 的深度学习模型通常用于旨在理解人类语言的自然语言处理(NLP),以及用于处理图像和视频的计算机视觉(CV)。
无监督学习
当输出数据在训练期间没有提供给模型时,使用无监督学习。在这种情况下,只给模型提供输入数据,目的是在提供的数据集中发现潜在的有趣模式。
使用这种技术的神经网络的例子是深度信念网络(DBN),其包括由【RBMs】或可变自动编码器(VAEs)组成的栈,并且可以在无监督或有监督的设置中使用。这些通常应用于视频识别、运动捕捉、图像分类甚至图像生成任务。
强化学习
强化学习包括训练 ML 模型做出一系列决策。模型学习在非结构化的复杂环境中实现目标。当与深度学习算法一起使用时,这被称为【DRL】。DRL 用于库存管理、需求预测、供应链管理以及金融投资组合管理和股票市场交易。
迁移学习
迁移学习是一种技术,其中用于一项任务的模型被重新用作另一项任务的另一个模型的起点。 转移学习 可用于自然语言处理或计算机视觉。当第一个模型已经被训练时,它特别有用,加速了开发时间。然而,在第二个模型被训练和测试之后,它的好处才能被确定。
深度学习在行动
对于这样一种相对较新的技术,深度学习已经淹没了商业的各个领域。对于消费者来说,深度学习和神经网络可能是当今汽车技术中最熟悉的,就像特斯拉生产的汽车中的自动驾驶系统一样。今天使用的深度学习的其他例子包括:
- 电子商务:用于根据客户的独特行为向他们定制产品推荐。
- 安全性:用于保护计算机系统免受病毒侵害,以及信用卡持卡人免受欺诈。
- 物流:用于计划、监控和修改运输路线,同时预测交货时间。
因为神经网络是通用的*似器,所以实际上没有什么可以限制它们在人类工作的任何领域中的使用。最困难的领域之一,也是几年前还被认为是不可能的领域,是在医学诊断领域。然而,神经网络也在这一领域取得了重大进展,一些人工智能诊断模型在诊断方面与人类医生一样成功,甚至略胜一筹。
最后的想法
培训、测试和部署深度学习模型需要大量的资源和工具,从综合库到鼓励和支持团队协作和组织治理的*台。
深度学习和机器学习在金融服务中的应用
原文:https://www.dominodatalab.com/blog/deep-learning-machine-learning-uses-in-financial-services
在过去的几年里,机器学习和深度学习已经成为医疗保健、零售、银行和保险等领域的核心部分。这个列表可以无限地继续下去——几乎没有一个领域不应用机器学习(ML)来提高系统的整体效率和准确性。随着世界经济的快速增长,自动处理事情的需求也在增长。
当我们谈论经济时,银行和保险,有时被称为金融服务,是我们想到的两个主要行业。根据埃森哲 的一份报告,人工智能解决方案可能在未来几年为金融服务增加高达 10 亿美元的价值。存在的不仅仅是一个,而是几个 报告 讨论人工智能与金融服务的整合如何增加潜在利益。
包括银行和保险在内的整个金融领域正越来越多地转向在线*台。像新用户注册、身份验证、交易、购买金融服务和保险等事情都可以在网上完成。随着这种转变,出现了对流程自动化、安全性以及快速、优化处理客户查询的需求。嵌入决策系统的机器学习(ML)和深度学习(DL)是满足这些需求的一站式解决方案。它们有助于减少手动任务,增加现有流程的价值,从而改善整个财务系统。像预测信用评分、评估不同类型贷款的客户档案、使用聊天机器人处理客户查询以及检测银行和保险中的欺诈只是组织在 ML 的帮助下可以实现的一些主要用例。
在本文中,您将了解更多关于机器学习和深度学习如何改善金融服务的信息。还将向您介绍不同的金融用例,以及应用于这些领域的机器学习算法。
为什么机器学习和深度学习适用于金融服务?
机器学习是计算机科学的一个分支,它使用数学和统计学来分析数据并做出预测。深度学习是机器学习的一个子领域,它特别使用神经网络来执行涉及非结构化数据的更复杂的任务。机器学习广泛用于回归、分类和聚类等任务,这些任务使用 表格数据,或以行和列格式排列的数据。这通常被称为传统的人工智能方法。深度学习更适合处理更复杂的任务,如处理图像、语音和文本。要训练不同的神经网络模型,深度学习需要海量的数据,以及在记忆和处理方面强大的系统。要了解更多关于作为机器学习和深度学习一部分的算法和模型,请查看 深度学习和神经网络简介。
现在已经向您介绍了 ML 和 DL,让我们讨论一下使用它们的一些主要好处。
-
模式识别: 机器学习方法利用数学和统计的方法来识别数据中的模式。手动在数据中寻找模式非常耗时,而且充满了人为错误——如果模式能够被找到的话。诸如分类或聚类之类的算法可以很容易地找到区分不同类别的模式。这些方法的主要好处之一是,它们能够对以前没有见过的数据进行分类。例如,如果您正在进行欺诈检测,并且有一个实例您的模型没有经过训练,因此不熟悉,该算法仍然能够将该实例识别为可能具有欺诈性的异常值。
-
优化: 随着快速发展的全球化经济和在线*台的快速增长,人们越来越需要更快、更准确地处理金融行业的方方面面。为了取代手动方法,组织使用了两种主要的解决方案。一种是传统的基于规则的方法,第二种是基于 ML 的方法。在基于规则的方法中,规则的创建是手动处理的,这既困难又耗时,并且难以考虑边缘情况。ML 提供了一种不同的方法,由计算机协助人类做出决定。人类仍然需要准备数据,这些数据然后将被输入到 ML 模型训练过程中。最终结果是一个模型,它输出用于决策的规则。因为这些规则不是手工制作的,所以节省了大量的时间和人力,也大大降低了出错的几率。
-
持续改进: 对于很多真实世界的用例,比如欺诈检测或者物体检测,数据分布会随着时间而变化。这可以是数据或概念漂移的形式。如果您的解决方案不能处理这些问题,您将需要手动干预来合并更改。另一方面,如果您使用基于 ML 或 DL 的解决方案,手动干预可能是不必要的。有了适当的模型监控系统,系统可以重新训练模型以解决漂移,从而保持精度。
ML 和 DL 解决方案的财务用例
现在你已经知道什么是机器学习和深度学习了,让我们看看它们在金融领域的一些主要用例。
贷款风险评估
贷款风险,有时也称为信用风险,是指客户无法偿还贷款或信用卡债务,或无法履行合同义务的可能性。对于全球的银行、风险投资公司、资产管理公司和保险公司来说,这是一个代价高昂的问题。手动识别客户的风险概况是一项复杂且耗时的任务,尽管已经将在线信息验证形式的自动化引入到该过程中,但是仍然难以识别客户的风险概况。这就是这些公司现在转向 ML 和数据科学解决方案来解决这个问题的原因。ML 和 DL 解决方案帮助组织识别潜在客户的信用风险,允许将他们划分到不同的利率区间。
基于 ML 的贷款风险评估解决方案
贷款风险评估是一个 二元分类问题 因为你只会有两个输出,类“0(无风险)”和“1(有风险)”。因为这是一个分类问题,所以有许多模型非常适合这个任务。致力于这个问题的组织发现,集成学习模型如 随机森林分类器 和 XGBoost 模型 具有最佳性能。
在贷款风险评估模型中,您处理的大多数用例都有固有的不*衡数据——无风险样本总是比有风险样本多。这意味着模型的准确性很难评估。例如,假设您在 100 行真实数据上测试您的模型,数据集有 90 个无风险样本,10 个被归类为有风险。如果模型报告它们都没有风险,那么模型的准确率是 90 %,因为所有的阴性样本都被正确标记,即使阳性样本都没有被正确标记。但是这个模型在实际操作中是没有用的,因为它不能成功地识别高风险贷款。需要仔细考虑用于评估算法的开发策略和指标,以便考虑数据中的任何自然偏差。
客户分析
客户分析是分析客户行为和偏好的过程。关于客户的数据包含他们的购买模式、地理信息和交易类型等信息。这有助于企业获得信息,如他们共同的客户人口统计数据和客户购买行为,这为他们的业务决策提供了信息。基于 ML 和 DL 的解决方案都用于客户分析。客户分析的一些主要示例如下:
- 客户细分: 可以根据人口统计或行为等信息将客户分组。通过识别这些细分市场,组织能够更好地了解他们的客户在寻找什么,以及他们没有触及的市场细分市场。聚类算法,尤其是 k-means 聚类,用于创建基于行为的客户细分。
- 流失分析: 这是一个确定客户停止使用你的服务的比率的过程,也可能包括他们停止使用的原因。这是一个二元分类问题,为此使用了像逻辑回归、决策树和集成学习模型这样的 ML 模型。
- 情绪分析: 情绪分析是确定顾客对某一产品或服务的满意度的过程。情感分析使用文本分析技术,这些技术使得从文本数据中分析和提取有用信息成为可能。无论是机器学习算法如朴素贝叶斯 还是 DL 算法如 RNNs(递归神经网络) 都用于此。
- 推荐系统: 推荐系统是用来向他们推荐他们可能想要的产品或服务的模块。推荐系统使用的方法有 协同过滤和基于内容的推荐。
定价和优惠
当一个组织推出一种产品或服务时,一个重要的考虑因素是它的价格。许多组织都有专门的团队为不同的客户群创建不同的优惠,但为了改善结果并提供更快的前进方式,机器学习越来越多地用于创建这些优惠。
这可以通过使用聚类算法来实现,该算法有助于相似产品的聚类。例如,如果一家保险公司正在推出新产品,可以将聚类算法应用于该公司提供的所有产品,创建相似产品的组,其中一个组将包含新产品。然后,公司可以使用该组产品的价格点来通知新产品的定价。聚类算法也可以以类似的方式用于为特定的客户群创建报价。
索赔裁决
理赔是解决(包括支付或拒绝支付)投保人提出的索赔的过程。例如,如果某人有一份车辆保险,他们发生了事故,导致他们的车辆损坏,他们将向保险公司索赔。保险公司的代表评估索赔和任何支持文档,如警方报告、照片和来自其索赔理算员的信息。
如果保险公司发现索赔是真实的,他们通过支付适当的金额来调整索赔,否则他们拒绝索赔。所有的保险索赔,不管是什么类型的保险,都遵循一个相似的流程,这个流程在历史上都是手工完成的。通常这需要大量的时间,并且由于需要访问索赔现场而具有很高的财务成本。
*年来,保险公司转向了一种不同的理赔解决方案: 计算机视觉,这是深度学习的一个分支。许多主要的保险公司现在使用无人机拍摄索赔申请的房屋图像。然后,对图像运行多个基于深度学习的 对象检测 和分类模型,以识别基于损坏的类型和严重程度,然后用于处理索赔。
一家这样的公司是欧洲大型保险公司 Topdanmark。在迁移到 Domino 数据科学*台后,Topdanmark能够使用图像和自然语言处理技术将审批时间从四天缩短到仅仅几秒钟。模型比人快 800 倍,它们现在负责 65%的索赔。
标记欺诈
财务欺诈一直是财务相关组织面临的主要问题之一。根据联邦调查局 2021 年 互联网犯罪报告,仅在美国就有创纪录的 847,367 起互联网欺诈投诉,导致 69 亿美元的损失。这些欺诈索赔涉及一系列主题,包括信用卡、贷款偿还、虚假索赔、身份盗窃和文件伪造。然而,网络诈骗案件只是金融诈骗的一个方面。不幸的是,在线和线下欺诈在金融和保险行业非常普遍。一些常见的金融欺诈类型有:
- 虚假的保险索赔,
- 身份盗窃,
- 盗用公款,
- 传销,
- 不诚实的会计,
- 以及许多其他越来越有创意的金融欺诈方式。
处理欺诈的传统方式是使用基于规则的方法。在这种方法中,一组数据工程师手动创建规则,以区分欺诈性和非欺诈性交易。但是,手动创建涵盖所有欺诈情形的规则是不可能的,而且随着数据的增长,维护一个全面的规则集会耗费大量资源并且非常复杂。
使用分类和聚类算法来处理更现代的欺诈检测方法。公司希望能够实时识别欺诈性使用,使他们能够在欺诈发生之前阻止它。
最常见的欺诈类型之一是与信用卡相关的欺诈。鉴于信用卡交易数量巨大,检测信用卡欺诈是一项严峻的挑战。机器学习可能是解决这种挑战的最佳方式,在本案例研究中的 ,您将看到如何构建一个用于信用卡欺诈检测的机器学习模型。其步骤类似于构建任何类型的机器学习模型:首先读取数据集,然后进行探索性数据分析,接着是数据清洗和特征工程。您需要处理的一个具体问题是处理数据集中的不*衡,这种不*衡是由于大多数信用卡交易是真实的,而只有一小部分是欺诈性的。
处理完数据集中的不*衡后,您可以继续训练和评估模型。一旦您对结果感到满意,就该部署模型并使用它来检测现实生活中的信用卡欺诈了。与你所想的相反,这个过程并没有到此结束。部署的机器学习模型需要被持续地监控和定期地重新训练,通常借助于 MLOps *台。
经济建模
我们生活的经济极其复杂,其中有无数相互交织的经济主体。为了以我们期望的方式影响或推动经济,我们首先需要理解它,尽管它很复杂。这就是模特的用武之地。经济模型只不过是现实世界经济的简化。通常,有一个经济模型试图解释的结果变量,以及以我们想要理解的方式影响结果变量的独立变量。从技术上讲, 模型 是不同变量的数学表示,显示了它们之间的逻辑和数量关系。这可能与任何业务相关,尽管它最常用于金融领域,并用于从数据中获得业务洞察力。
例如,如果您想要预测 GDP 增长率,您可以建立一个模型,其中结果变量是 GDP 增长率本身,自变量是影响它的所有因素,如消费者信心、通货膨胀率、汇率和许多其他因素。当然,该模型不能完美地预测 GDP 增长率,但它仍然非常有用。这就是世界银行、国际货币基金组织和欧洲委员会等组织定期创建这种模型的原因。
经济建模没有标准的机器学习算法,因为所需的模型因组织和数据类型的不同而有很大差异。不过,一些几乎通用的步骤是数据预处理和 特征工程,它们可以揭示大量关于数据的信息。然后,任何机器学习算法都可以使用处理后的数据来执行组织要求的任何任务。
金融建模与此密切相关,金融模型是对金融领域真实场景的简化。对于任何严肃的金融机构来说,金融模型都是不可或缺的,它们是整个金融服务业的核心。这就是为什么改进模型开发流程对金融机构来说至关重要。其中一种方法是使用 Domino 数据科学*台这样的*台。通过使用该*台, 金融建模领域的领导者穆迪分析公司提高了模型开发的效率,将模型开发到部署的周期从 9 个月缩短到 4 个月,并将模型投入生产的速度提高了 6 倍。
贸易
在金融中, 交易 是用金钱买卖一家公司的股票。在股票市场上,每天都有不同的股票被买卖,机器学习也在这里留下了印记。由于全球经济的性质,它受到不可预测的政治和自然事件的严重影响,没有模型可以预测市场的每一次波动。然而,它们可以给你市场运动的指示。
交易一般是一个依赖时间的过程,归类为 时间序列分析。市场分析中常用的基于 ML 的解决方案有 基于支持向量机的预测模型和基于 RFC 的预测模型。这些模型有时在市场突然变化的现实世界中表现不佳,因为它们完全基于过去的数据做出依赖于时间的预测。
更有效的解决方案是既能处理海量数据,又能处理新闻和其他可能影响市场的事件。由于这个原因, 递归神经网络【RNN】模型通常是首选的,因为它们既可以处理文本数据,又可以对与时间相关的特征进行建模。
就像在许多金融应用中一样,机器学习正越来越多地用于制定交易策略。结合算法交易,机器学习可以创建一些真正强大的交易模型。
算法交易 指的是编写一个程序,该程序将遵循关于何时在市场上买卖证券的某些交易指令。它已经使用了几十年,历史上是用一套手工编码的指令。然而,机器学习越来越多地用于获得那组指令,其中将包括关于是购买还是出售的指令,资产定价过高或过低的价格点,在特定情况下购买或出售多少证券,以及其他重要的交易指令。
在开发和部署交易策略的过程中,像 Domino 这样的 MLOps *台几乎是必不可少的。例如,全球投资经理 Coatue Management、 使用 Domino 来增强他们的投资研究流程。Domino 的*台使 Coatue 能够提高他们的生产力,实现显著的运营节约,加快他们的研究周期,并在生产中部署模型。
新产品创造
这是许多行业目前关注的一个用例。利用以前产品的信息,组织正在使用机器学习来开发新产品。一个很好的例子就是根据客户的地理信息为他们创建新的保险单。
机器学习可以用来改进产品开发过程的许多阶段。使用机器学习模型,公司可以确定新产品的必要性。即使只是使用自然语言处理来分析客户评论,也可以给公司提供新产品、现有产品改进或改善业务的方法。除了识别新产品想法,机器学习还可以帮助新产品概念的设计。
运营效率
机器学习帮助公司优化许多任务,使他们能够改善客户和员工的体验,并提高他们的运营效率。以银行业为例,直到最*几年,像开户、查看交易细节和申请贷款这样的任务才可以在网上几乎即时完成,而不是直接与某人交谈并等待回复。有了 ML、DL 这样的先进技术,所有这些事情都在网上非常高效地进行。
没有预定义的 ML 模型可以提高不同行业的运营效率,但几乎所有的算法最终都会提高效率。例如,在金融部门,对在线用户注册和验证流程进行了调整。在这些过程中,用户提交一张自拍和他们的身份证,然后使用诸如 光学字符识别、 声音识别、 人脸匹配 等算法来验证用户信息。通常,像 CNN 和 RNN 这样的神经网络是这个用户验证过程的核心,而其他监督和非监督算法则用于帮助组织改善他们现有的解决方案。
保险承保
在保险中, 核保 是识别与待保业务相关的风险的过程。保险公司分析这些风险,然后最终确定企业的保险单成本。与本文中讨论的许多任务一样,这曾经是一个手动过程,但是保险公司现在依靠基于 ML 和 DL 的技术来增强承保过程。
机器学习在核保领域有三个主要应用。第一个是分析某人的索赔风险。在索赔风险用例中,公司试图确定投保人提出索赔的可能性。通常,这会导致二元分类问题,其中正类表示可能会提出索赔的人,负类表示不太可能提出索赔的客户。第二个用途是确定事故的严重程度。这是一个 多类分类 问题,分类为低、中、高。严重性影响索赔将支付的金额。最后,ML 用于根据客户资料生成保险报价。这是业务规则的组合,融合了多种监督学习算法的输出,如分类、聚类和流失分析。
在金融服务中使用 ML 和 DL 的挑战
机器学习的挑战通常与模型表现不佳、功能工程不佳、用户采用和/或坏数据等相关。在金融领域,你不仅有这些问题,而且还有必须解决的额外挑战。
监管要求
金融部门受到高度监管,有许多法律管理数据的收集、存储和使用;贷款惯例;和消费者权利。无论决策是通过手工过程还是自动化过程做出的,都必须严格遵守这些要求。
一个常见的监管要求是,银行和其他金融机构必须能够向消费者解释他们是如何做出决定的,也就是说,这些机构必须能够举出拒绝贷款或提高利率的具体主要原因。这使得复杂的多层神经网络的使用在法规遵从性方面存在问题,因为模型复杂性的增加使得很难查明影响结果的具体因素。
另一个关键的监管要求是,金融机构必须能够复制任何模型的结果。为了能够做到这一点,所有影响模型结果的因素(比如数据、代码和使用的任何工具)都需要被记录下来。然而,机器学习模型可能非常复杂,有许多因素影响模型结果。因此,如果没有合适的系统,记录模型开发几乎是不可能的。
这就是 MLOps *台(比如 Domino 的 enterprise MLOps *台)的用武之地。它包括一个强大的再现性引擎,可以自动跟踪代码、数据或工具的变化。这使得组织在需要时可以很容易地快速重现模型结果。领先的保险公司好事达保险公司 成功地使用 Domino 的 MLOps *台 来记录和复制工作,以用于研究和审计目的。在转移到 Domino 的*台之前,Allstate 花了几个月的时间来重建现有的模型,并回答监管机构的问题。
偏见
从一开始就需要考虑反歧视和其他消费者权益法律,并将其构建到您的模型中。在美国, *等信贷机会法案 使得歧视一些个人特征成为非法;在欧盟, 通用数据保护法规(GDPR) 为贷款人创建了一项法律义务,要求他们拥有确保其模型中没有偏见的机制。虽然确保您的模型在评估客户时不直接考虑种族或性别相对容易,但确保它不考虑可能代表这些类别的因素也很重要,例如居住在特定地区或上过特定学校。应该对模型进行广泛的测试,以确保它们不会在决策过程中引入非法的偏见。
机器学习模型可能带来的潜在歧视或偏见给金融机构带来了声誉风险。甚至一些世界上最大的公司也因为歧视性的模式而受到公众和监管机构的审查。一个例子是 2019 年推出的 苹果信用卡。然而,在推出后不久,用户就注意到该模型存在性别歧视。与男性相比,女性获得的信贷额度较低,即使她们的信用评分和收入较高。另一个臭名昭著的例子是 亚马逊用于招聘员工的型号 ,后来被发现强烈歧视女性。该模型基于历史数据进行训练,在这些数据中,男性提交的简历远远多于女性。这个模型接受了这种偏见,并学会了偏爱男性候选人。
数据访问和治理
在金融服务中使用数据有几个复杂性,这在其他行业中不太常见。金融机构通常拥有按产品分类的数据,这使得为模型提供全面的数据集变得困难。此外,还有大量管理此类数据的存储、使用和访问的法规,尽管这些法规的范围和严格程度因国家而异。
在金融服务领域,确保您的数据准确、最新、干净、公正、完全代表总体情况,并且符合数据位置法规,比以往任何时候都更加重要。如果做不到这一点,不仅会导致不准确的模型,还会导致对你的公司的指控和金融监管机构的高额罚款。说到与数据相关的罚款,其中许多是由于数据泄露。然而,根据 公*信用报告法案,金融机构也可能因无法解释模型结果而被罚款,例如,无法解释贷款申请被拒绝的原因。
由于财务数据的高度敏感性,限制对数据的访问也很重要,而且通常是法律要求的。数据团队应尽可能使用匿名数据,并应注意确保消费者的隐私在整个过程中始终是首要考虑因素。
传统技术
可能有一些用例,您需要构建的不仅仅是一个模型,而是几个相互依赖的模型。在这种情况下,有两个主要考虑因素:一个是系统的整体准确性,另一个是如何连接各种流程。机器学习和深度学习可能需要大量的硬件架构来成功训练模型,而传统系统通常不具备处理数据处理要求或部署要求的能力灵活性。
模型风险管理
如今,金融机构非常依赖模型。银行、保险公司和其他金融机构在任何给定时间都可能有数百甚至数千个模型在生产,并且这个数字每年都在大幅增加。不仅模型的数量在不断增加,它们的复杂性也在增加,机器学习和深度学习技术变得更加突出。
金融机构中使用的模型数量多且复杂,这带来了很多风险,因为这些模型中的任何一个不正常工作都可能对机构造成重大损害。风险可能来自模型本身的缺陷,也可能来自被误用的正确模型。不管是什么原因,有缺陷的模型或它们的误用会产生显著的问题,比如财务损失或糟糕的商业决策。一个臭名昭著的例子是 JP 摩根,该公司在 2012 年因模型错误遭受了超过 60 亿美元的损失。有缺陷的模型也在 2007-2008 年金融危机中扮演了重要角色。
由于与使用模型相关的风险可能很大,因此需要一个框架来管理这些风险。这就是模型风险管理发挥作用的地方。模型风险管理框架涉及对潜在错误模型或误用正确模型所产生的风险进行监控。需要这样一个框架,既要符合严格的监管要求,又要尽量减少模型故障可能带来的损失。每个使用定量模型进行决策的金融机构都需要有一个可靠的模型风险管理框架来监督模型带来的风险。
实施模型风险管理框架的最佳方式是通过 MLOps *台。MLOps 需要以最有效的方式开发、部署和监控生产中的机器学习模型,对于扩展复杂的数据科学流程至关重要。
模型治理
模型治理是一个框架,通过这个框架,金融机构试图最小化上面解释的模型风险。它是更大模型风险管理框架的一个子集。模型治理包括许多与模型相关的过程,从它的开始到在生产中使用。
模型治理过程甚至在模型被开发之前就开始了,通过确定应该在模型上工作的人以及他们在模型中的角色。在开发模型时,必须记录模型的所有版本。当模型被部署时,模型治理应该确保它正常工作,并且不会经历数据或概念漂移。这些流程中的大部分将由 MLOps *台处理。
在金融机构中拥有强大的模型治理框架将最大化模型的质量和有效性,同时最小化其风险。当一个模型没有按预期执行时,一个好的模型治理框架应该很快意识到这一点。它还应该处理在金融领域使用机器学习的挑战,例如对偏见和遵守监管要求的担忧。
许多公司在其模型治理框架中使用 Domino 的 MLOps *台。例如,,四大信用评级机构之一的 DBRS ,在看到 Domino 的治理能力后,部署了 Domino 作为他们所有数据项目的中心*台。另一个例子是一家领先的 【财富 500 强】保险公司,该公司受益于 Domino 企业 MLOps *台提供的实验、数据集、工具和环境的自动跟踪和完全可再现性。
模型验证
模型验证是模型风险管理框架的关键部分。它处理的是确保模型如预期的那样运行,并且它们解决了预期的问题。模型验证是在模型被训练之后,投入生产之前完成的。然而,验证并不止于此。该模型还会在部署后立即进行验证,以确保它在生产环境中正常工作。之后,只要模型还在生产中,就应该经常执行模型验证,以确认模型仍然在预期的标准下工作。模型验证应该由不同于训练模型的团队来完成,以确保结果不会有偏差。
模型部署和监控
构建、部署和监控 ML/DL 模型是高度技术性和细致的工作,不可能用手工流程大规模完成。Domino Data Lab 的企业 MLOps *台旨在帮助数据科学团队提高大规模数据科学的速度、质量和影响。Domino 是开放和灵活的,允许专业数据科学家使用他们喜欢的工具和基础设施。数据科学模型快速投入生产,并通过集成的工作流保持最佳性能。Domino 还提供了高度管制的企业所期望的安全性、治理和法规遵从性。
这些功能有助于金融机构为用例创建模型驱动的解决方案,例如:
- 核保和财务评分: Domino 帮助保险组织,包括 财富 500 强全球领导者,识别、测试和管理整个投资组合的风险,包括核保、定价、欺诈检测和法规遵从性。
- 欺诈检测: Domino 帮助您创建不同的分类和基于计算机视觉的解决方案来检测银行和保险业的欺诈。它可以帮助组织识别欺诈性索赔或交易,并在运行时报告它们。即使是《财富》500 强保险公司 中的 也能够通过使用 Domino 的*台改进欺诈检测、风险管理并显著缩短周期时间。
- 个性化: Domino 可以帮助您高效地分析关于个人的数据,在此基础上,您可以为不同的客户创建不同的个性化优惠和产品。 Gap 使用多米诺骨牌 通过提供更个性化的体验来增加客户参与度。
这些只是解决方案的一部分,借助Domino Enterprise MLOps Platform,您可以在 ML 和 DL 领域做更多事情。
结论
在本文中,您已经了解了机器学习和深度学习帮助金融服务行业的企业改进现有解决方案或创建新解决方案的一些方法。作为一个高度监管、高风险的部门,金融部门特别容易受到模型中导致严重后果的小错误的影响。
用 DL4J 和 Domino 进行深度学习
原文:https://www.dominodatalab.com/blog/deep-learning-with-dl4j-and-domino
The screenshot above shows several different "Runs" of the dl4j code on Domino, each one executing a different dl4j example. The selected run is the multi-core MNIST example, running on a 4-core machine.
面向 Java 的深度学习
深度学习是机器学习的一个热门子领域,已被证明可以有效地学习通常只能由人类“解释”的数据集中的抽象表示。比如图像处理(人脸识别、图像搜索)、音频分类、文本分析。
Deeplearning4j 是一个“商业级、开源的深度学习库...旨在用于商业环境,而不是作为一种研究工具。”因为我们正在构建 Domino 来处理相同的商业级分析用例,所以我们迫不及待地想了解关于这个库的更多信息。
因此,昨晚我们很兴奋地参加了 SF 数据挖掘会议,在那里 dl4j 的创造者 Adam Gibson 谈到了深度学习。有一点他说得非常清楚——一遍又一遍——深度学习不是万能的,也不是解决所有问题的好办法。具体来说,他的建议是将其用于媒体(图像、视频、音频、文本)和时间序列分析(例如,传感器数据馈送)。昨晚,当一名观众问及使用它进行欺诈检测(在这种情况下,检查分类逻辑至关重要)时,亚当说了类似这样的话:“我甚至不想在这里看到你。”=)我们欣赏这种诚实和直率。
虽然对 dl4j 的了解越来越多,但让我们更兴奋的是让 dl4j 在 Domino 上运行起来=)
尽管许多 Domino 用户使用 Python、R 和其他脚本语言,但从本质上来说,Domino 是一个任意代码执行器,因此它可以运行您想使用的任何语言的任何代码。因此,启动并运行一个 java 示例是小菜一碟。
为什么这很有用
dl4j 功能强大且灵活,但并不是所有的数据科学家和机器学习从业者都是软件工程师和基础设施专家。Domino 为您省去基础设施设置和配置的麻烦。例如,您不必担心如何为 AWS 机器设置所有需要的库,以及如何获得所有 maven 依赖项来编译 dl4j 示例代码。
通过使用 Domino,所有的设置都是为您处理的,您只需点击一下鼠标就可以在任何硬件上运行您的代码。同时,Domino 跟踪您的代码的每次运行,包括您的结果,因此您可以复制过去的工作并与其他人共享。或者您可以将您的模型打包成一个自助式 webform,以便非技术利益相关者可以使用它。
用 h2o.ai 进行深度学习
原文:https://www.dominodatalab.com/blog/deep-learning-with-h2o-ai
这篇文章提供了深度学习的简要历史教训和概述,以及使用 H2O.ai 将脚趾浸入水中的快速“如何”指南。然后,我描述了 Domino 如何让我们在可扩展的硬件上轻松运行 H2O,并跟踪我们深度学习实验的结果,以将分析提升到下一个级别。
重复过去会有回报
“深度学习”这两个词最*成了风险投资的时髦用语,也成了讨论即将到来的机器人末日的新闻素材。尽管深度学习不是我们想要的机器学习银弹,但谷歌、脸书、易贝和其他公司已经创建了许多令人印象深刻的深度学习应用程序,可以访问海量数据集。例如,在最*的 Re。在波士顿举行的工作深度学习峰会上,谷歌的凯文·墨菲讨论了一个新项目,该项目使用深度学习来自动计算食物图像中的卡路里。这个消息像病毒一样在 T4 传播开来,就像一个会议上关于深度学习的幻灯片一样!当天晚些时候,在同一场会议上,亚历杭德罗·杰米斯(Alejandro Jaimes)展示了雅虎是如何超越仅仅给图片加标签,而对照片的“趣味性”等概念进行分级的。换句话说,深度学习可以用来学习创造力吗?
然而,在我们深入研究之前,让我们退后一步,问一问“为什么突然出现了深度学习炒作?”深度学习并不新鲜。事实上,深度学习的基础主要是一种更性感的方式,即使用梯度下降的反向传播和更大量的隐藏神经网络层。对于那些上过机器学习课程的人来说,backprop 可能是一个熟悉的术语。当我们大多数人都想知道为什么艾迪·墨菲认为一直发布“Party是个好主意的时候,一位著名的心理学家(大卫·鲁梅尔哈特)和未来的深度学习之父(杰弗里·辛顿)发表了开创性的、被高度引用的论文“通过反向传播错误学习表征”。
不幸的是,backprop 在 90 年代和 2000 年代过时了,但由于 2010 年代的一些关键发展,它又回来了(就像 80 年代的其他东西一样):1)大大增加的计算能力,2)大得多的数据集,以及 3)一些关键的算法调整(即 dropout,AdaGrad/AdaDelta 等。)来提高准确率。摩尔定律和互联网允许反向传播模型使用更大的训练集,具有不止一个隐藏的“神经元”层。然后,在 2006 年,Hinton 发表了另一篇被广泛引用的论文,“一种深度信念网络的快速学习算法”,它在很大程度上恢复了神经网络的合理使用。
如果你想知道深度学习算法的许多变体如何工作的细节,有几十种优秀的资源可供使用。以下是我最喜欢的几个:
- https://deeplearning.net/tutorial/
- https://www.youtube.com/watch?v=n1ViNeWhC24
- https://www.youtube.com/watch?v=S75EdAcXHKk
和 H2O 一起深度学习
这篇文章的其余部分将展示如何使用 h2o.ai 在 Domino 中启动并运行深度学习实现。有许多其他可用的包可以运行你的深度学习分析,但为了简单起见,让我们坚持以 h2o 作为一个好的起点。h2o 是用 Java 编写的,但是它绑定了 R 和 Python,这使得它非常灵活。
让我们开始吧。引用某人的话:“从本地考虑。全球行动。”换句话说,从在本地机器上安装 h2o 开始。Python 和 R 的安装都非常简单,除了一个小问题,这似乎是许多 Mac 用户在 Java 方面经常遇到的问题。即使您下载了最新版本的 Java,它仍可能在终端窗口中显示为 1.6 版。解决方法是将 JAVA_HOME 改为 1.8 版路径。
首先,进入 h2o 下载页面,下载 zip 文件。然后打开一个终端并运行:
cd ~/Downloads
unzip h2o-3.0.0.16.zip
cd h2o-3.0.0.16
java -jar h2o.jar
好了,现在让我们直接在 R 中安装 h2o。将以下命令复制并粘贴到 R 中,一次一个,以查看每个命令的输出:
# The following two commands remove any previously installed H2O packages for R.
if ("package:h2o" %in% search()) { detach("package:h2o", unload=TRUE) }
if ("h2o" %in% rownames(installed.packages())) { remove.packages("h2o") }
# Next, we download packages that H2O depends on.
if (! ("methods" %in% rownames(installed.packages()))) { install.packages("methods") }
if (! ("statmod" %in% rownames(installed.packages()))) { install.packages("statmod") }
if (! ("stats" %in% rownames(installed.packages()))) { install.packages("stats") }
if (! ("graphics" %in% rownames(installed.packages()))) { install.packages("graphics") }
if (! ("RCurl" %in% rownames(installed.packages()))) { install.packages("RCurl") }
if (! ("rjson" %in% rownames(installed.packages()))) { install.packages("rjson") }
if (! ("tools" %in% rownames(installed.packages()))) { install.packages("tools") }
if (! ("utils" %in% rownames(installed.packages()))) { install.packages("utils") }
# Now we download, install and initialize the H2O package for R.
install.packages("h2o", type="source", repos=(c("https://h2o-release.s3.amazonaws.com/h2o/rel-shannon/16/R")))
library(h2o)
localH2O = h2o.init()
# Finally, let's run a demo to see H2O at work.
demo(h2o.kmeans)
好了,现在让我们用 Python 安装。注意这只适用于 Python 2.7!
pip install requests
pip install tabulate
pip uninstall h2o
pip install https://h2o-release.s3.amazonaws.com/h2o/rel-shannon/16/Python/h2o-3.0.0.16-py2.py3-none-any.whl
一旦你完成了全新的 h2o 安装,你可以在 GitHub 上克隆我的教程。
现在,如果你在 deep-domino 文件夹中,我们准备打开dl_h2o.r
(或dl_h2o.py
),你会看到这个特定的例子使用的是俄亥俄州立大学综合癌症中心的 Donn Young 博士收集的前列腺癌数据集。分析的目的是确定基线检查时测量的变量是否可用于预测肿瘤是否已穿透前列腺包膜。所提供的数据是以胶囊为基础的主要研究中变量的子集。
在加载数据并做了一些预处理后,H2O 使得只用一行代码运行深度学习算法成为可能。在 R 中:
model = h2o.deeplearning(x = setdiff(colnames(prostate.hex),
c("ID","CAPSULE")),
y = "CAPSULE",
training_frame = prostate.hex,
activation = "RectifierWithDropout",
hidden = c(10, 10, 10),
epochs = 10000)
或者在 Python 中:
model = h2o.deeplearning(x=prostate[list(set(prostate.col_names()) - set(["ID", "CAPSULE"]))],
y = prostate["CAPSULE"],
training_frame=prostate,
activation="Tanh",
hidden=[10, 10, 10],
epochs=10000)
让我们快速分解一下 h2o.deeplearning 论点:
x
是我们的特性列表减去ID
和CAPSULE
列,因为我们将使用,CAPSULE
作为我们的y
变量,training_frame
是,嗯,我们的火车数据帧(触目惊心!),activation
表示当信号乘以网络中某个神经元的权重时使用的非线性激活函数的类型,hidden
表示,在本例中,我们希望使用三层,每层 10 个神经元,并且epochs
设置要执行的训练数据集的遍数。
就是这样!现在,我们简单地在模型上运行预测,然后检查我们的深度学习分类器的表现如何,如下所示:
predictions = model.predict(prostate)
predictions.show()
performance = model.model_performance(prostate)
performance.show()
Domino 中更好的 H2O 分析
在 Domino 中运行我们的 Python 脚本之前,有一点需要注意。h2o 喜欢安装在/usr/local
中,而默认情况下 Python 会在/usr
中寻找它。这可不是什么好事。你会在dl_h2o.py
的前几行看到我们的修正:
import sys
sys.prefix = "/usr/local"
import h2o
h2o.init(start_h2o=True)
更多动力
如果还没有,在 Python 或 R 脚本上点击 Run 来查看 Domino 中的输出。向下滚动到底部的“最大指标”,您会看到我们获得了 98.4%的准确率。还不错!不幸的是,用 Domino 的免费 0.5 内核& 0.5GB RAM 层和
引用 Homer Simpson 的话我现在就要!“Domino 可以轻松扩展您的硬件,以便更快地看到结果。我继续在 R 中运行深度学习演示,以查看不同层的持续时间。
| 硬件层 | 持续时间 |
| 免费(0.5 个内核,1GB) | 4m,20s |
| 小型(双核,8GB) | 1 米,11 秒 |
| 中型(4 核,16GB) | 38s |
| 大型(8 核,30GB) | 34s |
简单的实验跟踪和比较
最后,像所有其他机器学习方法一样,您需要改变参数,如隐藏神经元(和层)的数量或激活函数,以查看在特定数据集上什么效果最好。为了让生活更简单,我强烈推荐使用 Domino 的诊断统计特性来快速浏览关键性能指标。在我们的 R 演示脚本中,我们可以提取关键统计数据,并将其添加到一个 dominostats.json 文件中,如下所示:
r2 <- performance@metrics$r2
mse <- performance@metrics$MSE
auc <- performance@metrics$AUC
accuracy <- performance@metrics$max_criteria_and_metric_scores$value[4]
diagnostics = list("R^2"=r2, "MSE"=mse, "AUC"=auc, "Accuracy"=accuracy)
library(jsonlite)
fileConn <- file("dominostats.json")
writeLines(toJSON(diagnostics), fileConn)
close(fileConn)
Python 以稍微不同的方式处理这些指标的输出,并且具有稍微简单一些的格式:
r2 = performance.r2()
mse = performance.mse()
auc = performance.auc()
accuracy = performance.metric('accuracy')[0][1]
import json
with open('dominostats.json', 'wb') as f:
f.write(json.dumps({"R^2": r2, "MSE": mse, "AUC": auc, "Accuracy": accuracy}))
Domino 在项目中检查这个文件,然后将这些 JSON 元素添加到 Runs 输出屏幕。
现在让我们回过头来,将激活函数从 tanh 修改为 converterwithdropolito,并再次运行分析。同样,我们在底部得到了我们关键指标的一个很好的概要,但是现在这里还有一个额外的项目。如果我们选择两次运行并点击“Compare ”,下面的屏幕截图让我们以一个漂亮的表格格式并排看到我们的关键指标。
哎哟。看起来 converterwithdropoligo 不是这里正确的激活函数。
结论
现在,您知道了如何开始使用 H2O 的 Domino 来运行和比较深度学习分析。我们仅仅触及了 H2O 深度学习能力的皮毛。目前有 49 个不同的输入参数可以用 h2o.deeplearing 进行修改,所以即使一行代码让你自己编写了一个深度学习神经网络,你仍然需要学习很多东西,以获得最大的回报。谢天谢地,现在有很多令人惊叹的深度学习资源。快乐学习!
深度强化学习
原文:https://www.dominodatalab.com/blog/deep-reinforcement-learning
本文提供了《深度强化学习》一书的节选,深度学习图鉴作者克罗恩,贝维尔德,以及巴森斯。本文包括强化学习理论的概述,重点是深度 Q 学习。它还包括使用 Keras 构建一个深度 Q 学习网络,在模拟视频游戏环境中学习。非常感谢 Addison-Wesley Professional 允许摘录这一章。一个补充的 Domino 项目是可用的。
介绍
机器学习领域的最新成就,如开发一个在围棋比赛中击败人类的程序,都是由强化学习推动的。强化学习是通过结合奖励和惩罚来激励程序,训练程序通过试错来达到目标的过程。一个代理人在一个环境的限制下工作,以最大化其报酬。从游戏到模拟进化,强化学习一直被用作探索突现行为的工具。在 Domino 寻求帮助数据科学家加速他们的工作时,我们联系了 AWP·皮尔森,请求他允许我们从克罗恩、贝维尔德和巴森斯所著的《深度学习图解:人工智能的可视化互动指南》一书中摘录“深度强化学习”一章。非常感谢 AWP·皮尔逊提供了摘录作品的许可,并使我们能够提供一个补充的 Domino 项目。
这个项目解决了经典的车杆问题,也就是*衡一根连接在可移动车上的杆。内容包括
- 使用 Keras 和 OpenAI Gym 创建深度学习模型并提供训练环境
- 定义代理
- 代理和环境之间的交互建模
深度强化学习
在本章中,我们将
- 涵盖强化学习的基本理论,特别是称为深度 Q 学习的深度强化学习模型
- 使用 Keras 构建深度 Q 学习网络,学习如何在模拟的视频游戏环境中脱颖而出
- 讨论优化深度强化学习代理性能的方法
- 介绍深度 Q 学习之外的深度 RL 代理系列
强化学习的基本理论
回想一下第 4 章,具体来说,图 4.3 表明强化学习是一种机器学习范例,包括:
- 一个代理在一个环境中采取一个动作(假设该动作在某个时间步长 t 发生)。
- 环境向代理返回两种类型的信息:
- 奖励:这是一个标量值,提供代理在时间步长 t 采取的行动的量化反馈。例如,这可以是 100 点,作为在视频游戏“吃豆人”中获得樱桃的奖励。代理的目标是最大化它积累的奖励,因此奖励是加强代理在特定环境条件下发现的生产行为。
- 状态:这是环境如何响应代理的动作而变化。在接下来的时间步( t + 1)中,这些将是代理选择动作的条件。
- 循环重复上述两个步骤,直到达到某个终端状态。例如,可以通过获得最大可能的奖励、获得一些特定的期望结果(例如自动驾驶汽车到达其编程目的地)、用完分配的时间、用完游戏中允许的最大移动次数或者游戏中的代理死亡来达到这种最终状态。
强化学习问题是顺序决策问题。在第 4 章的中,我们讨论了一些特殊的例子,包括:
- Atari 视频游戏,如吃豆人、乒乓和突围
- 自动驾驶车辆,如自动驾驶汽车和空中无人机
- 棋盘游戏,如围棋、国际象棋和日本象棋
- 机器人手臂操作任务,如用锤子移除钉子
车杆游戏
在这一章中,我们将使用 open ai Gym——一个流行的强化学习环境库(图 4.13 中提供了示例)[int the book]——来训练一个代理玩 Cart-Pole,这是在控制理论领域工作的学者之间的一个经典问题。在推车杆游戏中:
- 目标是*衡推车顶部的杆子。柱子在一个紫色点处与手推车相连,该点作为一个销,允许柱子沿水*轴旋转,如图 13.1 所示。[注意:图 4.13a 中提供了一个推车杆游戏的实际屏幕截图。]
- 手推车本身只能水*移动,要么向左,要么向右。在任何给定的时刻——在任何给定的时间步长——购物车必须向左或向右移动;它不能保持静止。
- 游戏的每一集开始时,手推车被放置在屏幕中心附*的随机点上,杆子处于接*垂直的随机角度。
- 如图 13.2 所示,当出现以下任一情况时,一集结束
- 杆子在推车上不再*衡——也就是说,当
杆子的角度从垂直方向向水*方向移动得太远时 - 购物车触及边界——屏幕的最右边或最左边
- 杆子在推车上不再*衡——也就是说,当
- 在你将在本章中玩的游戏版本中,每集的最大时间步数是 200。因此,如果这一集没有提前结束(由于失去*衡或离开屏幕),那么游戏将在 200 个时间步后结束。
- 每集的每一个时间点都有一点奖励,所以最高奖励是 200 点。
车杆游戏是一个流行的入门强化学习问题,因为它非常简单。对于自动驾驶汽车,实际上有无限多种可能的环境状态:当它沿着道路行驶时,它的无数传感器——相机、雷达、激光雷达、加速度计、麦克风等等——以每秒千兆字节的数据量级,从车辆周围的世界传输大量的状态信息。[注:与雷达原理相同,但使用激光代替声音。与之形成鲜明对比的是,车杆游戏只有四条状态信息:
- 购物车沿一维水*轴的位置
- 2.手推车的速度
- 极点的角度
- 极点的角速度
同样,自动驾驶汽车可能会做出一些相当细微的动作,比如加速、刹车和左右转向。在推车杆游戏中,在任何给定的时间步长 t ,只能从两个可能的动作中选择一个动作:向左移动或向右移动。
马尔可夫决策过程
强化学习问题在数学上可以定义为一种叫做马尔可夫决策过程的东西。MDP 的特点是所谓的马尔可夫属性——假设当前时间步长包含来自先前时间步长的关于环境状态的所有相关信息。对于手推车-杆子游戏,这意味着我们的代理将通过仅考虑手推车的属性(例如,它的位置)和杆子的属性(例如,它的角度)来选择在给定的时间步长 t 向右或向左移动。[注意:马尔可夫属性在许多金融交易策略中被假定。例如,交易策略可能会考虑给定交易日结束时在给定交易所上市的所有股票的价格,而不会考虑前一天的股票价格。]
如图 13.3 所示,MDP 由五个部分定义:
- S 是所有可能状态的集合。按照集合论惯例,每个单独的可能状态(即小车位置、小车速度、极角和角速度的特定组合)由小写的 s 表示。即使当我们考虑相对简单的车杆游戏时,其四个状态维度的可能重组数量也是巨大的。举几个粗略的例子,手推车可以在屏幕的最右边缓慢移动,杆子垂直*衡,或者手推车可以在杆子以大角度顺时针转动的情况下快速移动到屏幕的左边。
- A 是所有可能动作的集合。在车杆游戏中,这套只有两个元素(左和右);其他环境有更多。每个单独的可能动作被表示为 a 。
- R 是给定一个状态-动作对——某个特定状态与某个特定动作配对——的奖励分配,记为( s,a )。这是一种概率分布:完全相同的状态-行为对( s,a )可能在不同的场合随机产生不同数量的奖励 r 。[注意:虽然这在一般的强化学习中是正确的,但车杆游戏是一个相对简单的完全确定的环境。在推车杆游戏中,完全相同的状态-动作对( s,a )实际上每次都会产生相同的回报。为了说明强化学习的一般原理,我们在本节中使用了一些例子,这些例子暗示了车杆游戏比它实际上更不确定。]奖励分配的细节R——它的形状,包括它的均值和方差——对代理人来说是隐藏的,但可以通过在环境中采取行动来瞥见。例如,在图 13.1 中,您可以看到购物车在屏幕中居中,柱子稍微向左倾斜。【注:为了简单起见,这个例子我们忽略大车速度和极角速度,因为我们无法从这个静态图像中推断出这些状态方面。]我们预计,相对于将向右移动的动作与此状态配对而言,将向左移动的动作与此状态 s 配对*均来说会对应于更高的预期奖励 r :在此状态下向左移动 s 会导致杆子更加直立,增加杆子保持*衡的时间步长数,从而倾向于导致更高的奖励 r 。另一方面,在这种状态下向右移动 s 会增加杆子朝水*方向倒下的可能性,从而倾向于游戏提前结束,并获得较小的奖励 r 。
- p 和 R 一样,也是概率分布。在这种情况下,它表示在当前时间步 t 中给定特定状态-动作对( s,a )的下一个状态(即 st+1 )的概率。像 R 一样, P 分布对代理是隐藏的,但是它的各个方面可以通过在环境中采取行动来推断。例如,在推车杆游戏中,代理学习向左动作直接对应于推车向左移动是相对简单的。[注意:与本书中的所有其他人工神经网络一样,深度强化学习代理中的 ann 是用随机起始参数初始化的。这意味着,在任何学习之前(例如,通过玩几集推车游戏),代理人甚至不知道某个状态-动作对 (s,a) 和下一个状态 st+1 之间最简单的关系。例如,尽管对于玩车杆游戏的人来说,向左的动作应该导致车向左移动可能是直观和明显的,但是对于随机初始化的神经网络来说,没有什么是“直观”或“明显”的,因此所有的关系必须通过游戏来学习。]更复杂的关系——例如,图 13.1 中捕捉到的状态 s 中的左动作往往对应于下一个状态 st+1 中更垂直取向的极点——将更难学习,因此需要更多的游戏性。
- γ (gamma)是一个超参数,称为贴现因子(也称为衰变)。为了解释它的意义,让我们暂时离开推车杆子游戏,回到吃豆人。同名的 Pac-Man 角色探索一个二维表面,收集水果可以获得奖励点数,如果被追逐他的鬼魂之一抓住就会死去。如图 13.4 所示,当代理人考虑预期奖励的价值时,它应该将可以立即获得的奖励(比如,获得距离吃豆人只有一个像素的樱桃的 100 分)看得比需要更多时间才能获得的同等奖励(距离 20 个像素的樱桃的 100 分)更高。眼前的奖励比遥远的奖励更有价值,因为我们不能指望遥远的奖励:一个幽灵或其他危险可能会妨碍吃豆人。【注:γ贴现因子类似于会计中常见的贴现现金流计算:一年后的预期收入相对于今天的预期收入进行贴现。在这一章的后面,我们将介绍价值函数(V)和 Q 值函数(Q)的概念。V 和 Q 都包含了γ,因为它防止了它们在具有无限可能的未来时间步长的游戏中变得无界(从而在计算上不可能)。]如果我们设置 γ = 0.9,那么一个时间步长之外的樱桃将被认为值 90 分,[注意:100 ×γt = 100 × 0.91 = 90]而 20 个时间步长之外的樱桃将被认为仅值 12.2 分。[注:100×γt =100×0.920 =12.16 ]
最优策略
MDP 的最终目标是找到一个函数,使得代理在遇到所有可能的环境状态 S 中的任何特定状态 S 时,能够采取适当的动作 a (从所有可能的动作 A 的集合中)。换句话说,我们希望我们的代理学习一个函数,使它能够映射 S 到 A 。如图 13.5 所示,这样的函数用π表示,我们称之为策略函数。
用通俗的语言来说,政策函数π的高级思想是这样的:不管代理人发现自己处于什么样的特定环境,它应该遵循什么样的政策才能使其报酬最大化?对于这种回报最大化思想的更具体的定义,欢迎你仔细阅读:
在这个等式中:
- J(π)被称为目标函数。这是一个我们可以应用机器学习技术来实现回报最大化的功能。[注:本书中提到的成本函数(又称损失函数)是目标函数的例子。成本函数返回一些成本值 C,而目标函数 J(π)返回一些回报值 r。对于成本函数,我们的目标是最小化成本,因此我们对它们应用梯度下降(如图 8.2 中的山谷下降三叶虫所示)。相比之下,对于函数 J(π),我们的目标是最大化回报,因此我们在技术上对其应用梯度上升(想象图 8.2 的图像,想象一只三叶虫徒步旅行以识别山峰),即使数学与梯度下降相同。]
- π表示将 S 映射到 A 的任何策略函数。
- π∫表示将 S 映射到 a 的特定最优策略(在所有潜在的π策略中)。也就是说,π∫是一个函数,它将返回一个动作 a,该动作将导致代理获得最大可能的未来折扣奖励。
- 计算贴现的未来报酬
在所有未来时间步长(即 t>0),我们执行以下操作。
通过将它们全部相加(使用σ)。
深度 Q 学习网络的基本理论
在上一节中,我们将强化学习定义为马尔可夫决策过程。在本节的最后,我们指出,作为 MDP 的一部分,我们希望我们的代理——当它在任何给定的时间步长 t 遇到任何给定的状态 s 时——遵循某个最优策略π∫,这将使它能够选择一个行动 a,使它能够获得的贴现未来报酬最大化。问题是——即使是像车杆游戏这样相当简单的强化学习问题——也很难计算出(或者至少计算效率非常低)最终计算出最大的累积未来折扣奖励
因为所有可能的未来状态 S 和所有可能的行动 A 在这些未来状态下可能采取的行动,有太多可能的未来结果需要考虑。因此,作为一种计算捷径,我们将描述 Q- 学习方法,用于估计在给定情况下最优行动 a 可能是什么。
价值函数
Q-learning 的故事最容易通过解释值函数来描述。价值函数由 V π ( s 定义。它向我们提供了一个指示,即如果我们的代理从一个给定的状态 s 开始遵循它的策略π,那么该状态的价值有多大。
作为一个简单的例子,再考虑一下图 13.1 中的状态。[注意:正如我们在本章前面所做的,我们只考虑大车位置和杆子位置,因为我们不能从这个静止图像推测大车速度或杆子角速度。假设我们的代理人已经有一些合理合理的政策π来*衡极点,那么我们期望它在这种状态下获得的累积贴现未来回报可能相当大,因为极点接*垂直。于是,这个特定状态 s 的值 V π ( s )为高。
另一方面,如果我们想象极点角度接*水*的状态 s h,它的值——Vπ(sh)——更低,因为我们的代理已经失去了对极点的控制,因此该事件很可能在接下来的几个时间步长内终止。
q 值函数
Q- 价值函数建立在价值函数的基础上,不仅考虑状态:它还考虑特定动作与给定状态配对时的效用——也就是说,它重新组合了我们的老朋友,即由(s,a)表示的状态-动作对。因此,在价值函数由 V π (s)定义的情况下,Q 值函数由 Qπ定义( s,a )。[注意:Q 值中的“Q”代表质量,但是你很少听到从业者称之为“质量-价值函数”]
让我们再次回到图 13.1。将动作左(姑且称之为a1)与状态 s 配对,然后从那里遵循一个极点*衡策略π,通常应该对应于一个较高的累积贴现未来回报。因此,这个状态-动作对( s,aL )的 Q 值是高的。
相比之下,让我们考虑将图 13.1 中的动作右(我们可以称之为 aR )与状态 s 配对,然后从那里遵循极点*衡策略π。尽管这可能不会被证明是一个惊人的错误,但相对于采取左行动,累积的贴现未来回报可能会稍微低一些。在这种状态下 s ,向左的动作通常会使竿子变得更加垂直(使竿子能够更好地控制和*衡),而向右的动作通常会使竿子变得更加水*——因此,控制更少,并且该事件更有可能提前结束。总而言之,我们期望( s,aL )的 Q 值高于 (s,aR )的 Q 值。
估计最佳 Q 值
当我们的代理遇到某个状态 s 时,我们希望它能够计算出最优 Q 值,记为Q∫(s,a) 。我们可以考虑所有可能的行动,具有最高 Q 值的行动——最高的累积贴现未来回报——将是最佳选择。
同样,即使对于相对简单的强化学习问题,最终计算最优策略π∫(方程 13.1)在计算上也是困难的,因此,最终计算最优 Q 值 Q∫(s,a)在计算上也是困难的。通过深度 Q 学习的方法(如第 4 章中介绍的;见图 4.5),但是,我们可以利用人工神经网络来估计最佳 Q 值可能是多少。这些深度 Q 学习网络(简称 dqn)依赖于这个等式:
在这个等式中:
- 最佳 Q 值(Q∫(s,a) )正在被逼*。
- Q 值*似函数除了其通常的状态 s 和动作 a 输入之外,还结合了神经网络模型参数(由希腊字母 theta,θ表示)。这些参数是我们从第 6 章开始熟悉的常用人工神经元权重和偏差。
在推车杆游戏的环境中,装备有等式 13.2 的 DQN 代理人可以在遇到特定状态 s 时,计算将动作 a(左或右)与该状态配对是否对应于更高的预测累积折扣未来奖励。比方说,如果预测左与更高的累积贴现未来回报相关,那么这就是应该采取的行动。在下一节中,我们将编写一个 DQN 代理,它包含一个 Keras 构建的密集神经网络,以演示如何实现这一点。
For a thorough introduction to the theory of reinforcement learning,
including deep Q-learning networks, we recommend the recent edition of
Richard Sutton (Figure 13.6) and Andrew Barto’s Reinforcement Learning:
An Introduction,15 which is available free of charge at bit.ly/SuttonBarto.
定义 DQN 代理
在我们的 Cartpole DQN Jupyter 笔记本中提供了我们的代码,用于定义一个学习如何在环境中行动的 DQN 智能体——在这个特定的例子中,它恰好是来自 OpenAI Gym 环境库的 Cart-Pole 游戏。[注意:我们的 DQN 代理直接基于 Keon Kim 的,可从他在 bit.ly/keonDQN.的 GitHub 库获得]它的依赖关系如下:
import random
import gym
import numpy as np
from collections import deque
from keras.models import Sequential from keras.layers import Dense
from keras.optimizers
import Adam
import os
名单中最重要的新成员是gym
,开放式人工智能健身房本身。像往常一样,我们在应用时会更详细地讨论每个依赖项。我们在笔记本顶部设置的超参数在示例 13.1 中提供。
示例 13.1 大车极 DQN 超参数
env = gym.make("CartPole-v0")
state_size = env.observation_space.shape[0]
action_size = env.action_space.n
batch_size = 32
n_episodes = 1000
output_dir = "model_output/cartpole/"
if not os.path.exists(output_dir):
os.makedirs(output_dir)
让我们一行一行地看看这段代码:
- 我们使用开放式人工智能健身房
make()
方法来指定我们希望我们的代理与之交互的特定环境。我们选择的环境是车杆游戏的零版本(v0),我们把它赋给变量env
。在你自己的时间里,你可以选择一个替代的开放人工智能健身房环境,如图 4.13 所示。
从环境中,我们提取两个参数:
示例 13.2 中提供了创建 DQN 代理 Python 类的大量代码,称为DQNAgent
。
示例 13.2 深度 Q 学习代理
class DQNAgent:
def __init__(self, state_size, action_size):
self.state_size = state_size
self.action_size = action_size
self.memory = deque(maxlen=2000)
self.gamma = 0.95
self.epsilon = 1.0
self.epsilon_decay = 0.995
self.epsilon_min = 0.01
self.learning_rate = 0.001
self.model = self._build_model()
def _build_model(self):
model = Sequential()
model.add(Dense(32, activation="relu",
input_dim=self.state_size))
model.add(Dense(32, activation="relu"))
model.add(Dense(self.action_size, activation="linear"))
model.compile(loss="mse",
optimizer=Adam(lr=self.learning_rate))
return model
def remember(self, state, action, reward, next_state, done):
self.memory.append((state, action,
reward, next_state, done))
def train(self, batch_size):
minibatch = random.sample(self.memory, batch_size)
for state, action, reward, next_state, done in minibatch:
target = reward # if done
if not done:
target = (reward +
self.gamma *
np.amax(self.model.predict(next_state)[0]))
target_f = self.model.predict(state)
target_f[0][action] = target
self.model.fit(state, target_f, epochs=1, verbose=0)
if self.epsilon &gt; self.epsilon_min:
self.epsilon *= self.epsilon_decay
def act(self, state):
if np.random.rand() &lt;= self.epsilon:
return random.randrange(self.action_size)
act_values = self.model.predict(state)
return np.argmax(act_values[0])
def save(self, name):
self.model.save_weights(name)
初始化参数
我们从示例 13.2 开始,用一些参数初始化该类:
state_size
和action_size
是特定于环境的,但是在车杆游戏中分别是 4 和 2,如前所述。memory
用于存储记忆,这些记忆可以随后回放,以便训练我们 DQN 的神经网络。内存被存储为一个名为 deque (读作“deck”)的数据结构的元素,它与一个列表相同,只是——因为我们指定 maxlen = 2000——它只保留 2000 个最*的内存。也就是说,每当我们试图将第 2001 个元素追加到 deque 上时,它的第一个元素就会被删除,总是留给我们一个包含不超过 2000 个元素的列表。gamma
是我们在本章前面介绍的贴现因子(又称衰变率)γ(见图 13.4)。此代理超参数在未来时间步长中贴现预期奖励。有效γ值通常接* 1(例如,0.9、0.95、0.98 和 0.99)。越接* 1,我们对未来回报的折现就越少。[注意:事实上,如果你设定γ = 1(我们不建议这样),你根本不会贴现未来的回报。]调整强化学习模型(如γ)的超参数可能是一个复杂的过程;在本章快结束时,我们将讨论一个叫做 SLM Lab 的工具,它可以有效地实现这一目标。epsilon
——用希腊字母ε表示——是另一个强化学习超参数,叫做探索率。它代表了我们的代理的随机行动(使它能够探索这样的行动对下一个状态 st+1 的影响和环境返回的回报 r 的影响)相对于我们允许它的行动利用它的神经网络通过游戏积累的现有“知识”的频率的比例。在玩任何一集之前,代理人都没有游戏经验可利用,所以最常见的做法是 100%的时间开始探索;这就是我们设置epsilon = 1.0
的原因。- 随着代理获得游戏经验,我们非常缓慢地衰减它的探索速度,以便它可以逐渐利用它所学到的信息(希望使它能够获得更多的奖励,如图 13.7 所示)。也就是说,在代理播放的每一集的结尾,我们用它的ε乘以
epsilon_decay
。此超参数的常见选项为 0.990、0.995 和 0.999。[注意:类似于设置γ = 1,设置epsilon_decay
= 1 将意味着ε根本不会衰减——也就是说,以连续的速率探索。对于这个超参数来说,这是一个不寻常的选择。] epsilon_min
是勘探率ε可以衰减到多低的下限(最小值)。该超参数通常设置为接*零值,例如 0.001、0.01 或 0.02。我们将它设置为 0.01,这意味着在ε衰减到 0.01 之后(在我们的案例中,到第 911 集时将会如此),我们的代理将只探索它所采取的 1%的动作——在其他 99%的时间里利用它的游戏体验。[注意:如果在这个阶段这个探索率的概念有些不清楚,当我们稍后检查我们代理的逐集结果时,它会变得更清楚。]learning_rate
是我们在第 8 章中介绍的相同的随机梯度下降超参数。- 最后,
_build_model()
——通过包含其前导下划线——被建议作为一个私有方法。这意味着这个方法只推荐在“内部”使用——也就是说,只由类DQNAgent
的实例使用。
建立智能体的神经网络模型
例 13.2 的_build_model()
方法致力于构建和编译一个 Keras 指定的神经网络,该网络将环境状态 s 映射到每个可用动作 a 的智能体 Q 值。一旦通过游戏训练,智能体将能够使用预测的 Q 值来选择它应该采取的特定动作,给定它遇到的特定环境状态。在这个方法中,没有你在这本书里没见过的东西:
- 我们指定一个顺序模型。
- 我们在模型中添加了以下几层神经元。
- 第一个隐藏层是致密的,由 32 个 ReLU 神经元组成。使用
input_dim
参数,我们指定网络输入层的形状,它是环境状态信息 s 的维度。在 cart-pole 环境中,这个值是一个长度为 4 的数组,每个元素对应一个 Cart 位置、Cart 速度、Pole 角度和 Pole 角速度。[注意:在 Cart-Pole 以外的环境中,状态信息可能要复杂得多。例如,对于像 Pac-Man 这样的 Atari 视频游戏环境,状态 s 将由屏幕上的像素组成,这将是二维或三维输入(分别用于单色或全色)。在这种情况下,第一个隐藏层的更好选择是卷积层,如Conv2D
(见第 10 章)。] - 第二隐层也很密集,有 32 个 ReLU 神经元。如前所述,我们将通过在本章后面讨论 SLM 实验室工具来探索超参数选择——包括我们如何专注于特定的模型架构。
- 输出层具有对应于可能动作数量的维度。[注:本书中任何先前只有两种结果的模型(如第 11 和 12 章)都使用了单个乙状结肠神经元。在这里,我们为每个结果指定单独的神经元,因为我们希望我们的代码能够超越车杆游戏。虽然 Cart-Pole 只有两个动作,但许多环境有两个以上的动作。]在推车杆游戏中,这是一个长度为 2 的数组,一个元素代表左边的,另一个元素代表右边的。与回归模型一样(见示例 9.8),使用 DQNs,直接从神经网络输出 z 值,而不是转换成 0 到 1 之间的概率。为了做到这一点,我们指定了
linear
激活函数,而不是 sigmoid 或 softmax 函数,否则这本书将占主导地位。**
- 输出层具有对应于可能动作数量的维度。[注:本书中任何先前只有两种结果的模型(如第 11 和 12 章)都使用了单个乙状结肠神经元。在这里,我们为每个结果指定单独的神经元,因为我们希望我们的代码能够超越车杆游戏。虽然 Cart-Pole 只有两个动作,但许多环境有两个以上的动作。]在推车杆游戏中,这是一个长度为 2 的数组,一个元素代表左边的,另一个元素代表右边的。与回归模型一样(见示例 9.8),使用 DQNs,直接从神经网络输出 z 值,而不是转换成 0 到 1 之间的概率。为了做到这一点,我们指定了
*** 正如我们在编译回归模型(示例 9.9)时所指出的,当我们在输出层使用线性激活时,均方差是成本函数的合适选择,因此我们将compile()
方法的 loss 参数设置为mse
。我们回到我们的日常优化选择,Adam
。**
**## 记忆游戏
在任何给定的时间步长 t,也就是说,在强化学习循环的任何给定迭代过程中(参见图 13.3),DQN 代理的remember()
方法运行,以便在其memory
队列的末尾添加一个内存。该队列中的每个存储器由关于时间步长 t 的五条信息组成:
- 代理遇到的状态 s[t]
- 代理采取的动作aT2
- 环境返还给代理人的报酬rT2
- next_state s[t+1] 环境也返回给代理
- 如果时间步长 t 是剧集的最后一次迭代,则布尔标志 done 为真,否则为
false
通过记忆回放进行训练
DQN 代理的神经网络模型通过回放游戏的记忆来训练,如例 13.2 的train()
方法所示。该过程从从memory
队列(最多可容纳 2000 个内存)中随机抽取 32 个minibatch
(根据代理的batch_size
参数)内存开始。从一个更大的主体经历集合中抽取一小部分记忆样本,可以提高模型训练的效率:比如说,如果我们使用 32 个最*的记忆来训练我们的模型,那么这些记忆中的许多状态会非常相似。为了说明这一点,考虑一个时间步长 t ,其中小车位于某个特定位置,杆接*垂直。相邻的时间步长(例如,t-1, t + 1, t + 2)也可能处于几乎相同的位置,极点处于接*垂直的方向。通过从大范围的记忆中取样,而不是从时间上最接*的记忆中取样,模型将在每一轮训练中获得更丰富的经验来学习。
对于 32 个采样的记忆中的每一个,我们进行如下一轮模型训练:如果done is True
——也就是说,如果记忆是一集的最后一个时间步——那么我们明确地知道,从这个时间步可以获得的最高可能的奖励等于reward
r[t] 。因此,我们可以设置target
奖励等于reward
。
否则(即if done is False
)我们会尝试估计target
的回报——最大的未来贴现回报——可能是多少。我们从已知的reward
r[t] 开始进行估算,然后加上贴现因子γ。]最大未来 Q 值。通过将下一个(即未来)状态 s[t+1] 传递到模型的predict()
方法中来估计可能的未来 Q 值。在 Cart-Pole 游戏的上下文中这样做将返回两个输出:一个输出用于左操作,另一个输出用于右操作。这两个输出中较高的一个(由 NumPy amax
函数确定)是最大的预测未来 Q 值。
无论target
是明确已知的(因为时间步长是一集的最后一步)还是使用最大未来 Q 值计算来估计的,我们都在train()
方法的for loop
中继续前进:
- 我们再次运行
predict()
方法,传入当前状态 st。和以前一样,在推车杆游戏的上下文中,这返回两个输出:一个用于左边的动作,一个用于右边的动作。我们将这两个输出存储在变量target_f
中。 - 无论代理在这个内存中实际采取了什么动作,我们都使用
target_f[0][action] = target
来用目标回报替换那个target_f
输出。[注意:我们这样做是因为我们只能根据代理人实际采取的行动来训练 Q 值估计值:我们根据next_state
s[t+1] 来估计目标值,并且我们只知道代理人在时间步长 t 实际采取的 s[t+1] 是多少。我们不知道如果代理采取了不同于它实际采取的行动,环境可能会返回到什么下一个状态。]
我们通过调用fit()
方法来训练模型。
- 模型输入是当前状态st 并且它的输出是
target_f
,它包含了我们对最大未来贴现回报的*似。通过调整模型的参数(由方程 13.2 中的 θ 表示),我们因此提高了其准确预测在任何给定状态下更有可能与未来报酬最大化相关的行为的能力。 - 在很多强化学习问题中,
epochs
可以设置为1
。我们不需要多次循环利用现有的训练数据集,而是可以廉价地参与更多集的车杆游戏(例如)来生成我们想要的尽可能多的新训练数据。 - 我们设置
verbose=0
是因为我们在这个阶段不需要任何模型拟合输出来监控模型训练的进度。正如我们稍后演示的,我们将逐集监控代理的性能。
选择要采取的行动
为了在给定的时间步长 t 选择要采取的特定动作at[t],我们使用代理的act()
方法。在此方法中,NumPy rand
函数用于对 0 到 1 之间的随机值进行采样,我们称之为 v。结合我们代理的epsilon
、epsilon_decay
和epsilon_min
超参数,此v
值将为我们确定代理是采取探索性行动还是剥削性行动:
- 如果随机值 v 小于或等于探索速率ε,则使用
randrange
功能选择随机探索动作。在早期情节中,当ε较高时,大多数动作将是探索性的。在以后的剧集中,随着ε越来越衰减(根据 epsilon_decay 超参数),代理采取的探索动作会越来越少。 - 否则——也就是说,如果随机值 v 大于ε——代理选择一个动作,该动作利用模型通过记忆重放学习的“知识”。为了利用这一知识,将
state
s[t] 传递给模型的predict()
方法,该方法为代理理论上可能采取的每个可能的动作返回一个激活输出。我们使用 NumPyargmax
函数来选择与最大激活输出相关联的动作at。[注意:回想一下,激活是线性的,因此输出不是概率;相反,它是对这一行动的贴现的未来回报。]
{注意:在前面讨论我们的DQNAgent
类的初始化参数时,我们介绍了探索性和开发性的行为模式,它们在图 13.7 中被有趣地展示出来。]
保存和加载模型参数
最后,save()
和load()
方法是一行程序,使我们能够保存和加载模型的参数。特别是对于复杂的环境,代理的性能可能是不稳定的:在很长一段时间内,代理可能在给定的环境中表现得非常好,但后来似乎完全失去了它的能力。由于这种剥落,明智的做法是定期保存我们的模型参数。然后,如果代理的性能在后面的剧集中下降,则可以从一些早期剧集中加载较高性能的参数。
与开放的健身房环境互动
创建了我们的 DQN 代理类之后,我们可以用下面这行代码初始化该类的一个实例,我们将其命名为agent
:
agent = DQNAgent(state_size, action_size)
例 13.3 中的代码使我们的agent
能够与一个开放的健身房环境交互,在我们的特殊情况下,这是一个推车杆游戏。
Example 13.3 DQN agent interacting with an OpenAI Gym environment
for e in range(n_episodes):
state = env.reset()
state = np.reshape(state, [1, state_size])
done = False
time = 0
while not done:
#env.render()
action = agent.act(state)
next_state, reward, done, _ = env.step(action)
reward = reward if not done else -10
next_state = np.reshape(next_state, [1, state_size])
agent.remember(state, action, reward, next_state, done)
state = next_state
if done:
print("episode: {}/{}, score: {}, e: {:.2}"
.format(e, n_episodes-1, time, agent.epsilon))
time += 1
if len(agent.memory) > batch_size:
agent.train(batch_size)
if e % 50 == 0:
agent.save(output_dir + "weights_"
+ "{:04d}".format(e) + ".hdf5")
回想一下,我们已经将超参数n_episodes
设置为 1000,示例 13.3 包含一个大 for 循环,允许我们的代理参与这 1000 轮游戏。游戏的每一集都由变量 e 计算,包括:
- 我们用随机的
state
[t]来用env.reset()
开始这一集。为了按照模型期望的方向将状态传递给我们的 Keras 神经网络,我们使用reshape
将其从列转换为行。[注意:我们之前在示例 9.11 中出于同样的原因进行了这种换位。]
** 我们使用代理的remember()
方法将这个时间步的所有方面(state
s[t] ,在该处采取的动作,奖励 r[t] ,下一个state
s[t+1] ,以及标志完成)保存到内存中。
我们设置state
等于next_state
,为循环的下一次迭代做准备,这将是时间步长 t + 1。* 如果剧集结束,我们将在剧集上打印汇总指标(输出示例见图 13.8 和 13.9)。* 给我们的时间步计数器time
加 1。* 如果使用代理的train()
方法,通过重放其游戏记忆来训练其神经网络参数。[注意:您可以选择将此训练步骤上移,使其位于 while 循环内。每一集将会花费更长的时间,因为你将会更频繁地训练代理人,但是你的代理人将会在更少的几集内解决车杆游戏。]* 每 50 集,我们使用代理的save()
方法存储神经网络模型的参数。*
*如图 13.8 所示,在我们代理的前 10 集的车杆游戏中,得分很低。它没能让游戏持续超过 42 个时间步(即 41 分)。
在这些初期阶段,勘探率ε从 100%开始。到第 10 集时,ε已经衰减到 96 %,这意味着代理在大约 4%的时间步长上处于开发模式(参考图 13.7)。然而,在训练的早期阶段,这些剥削行为中的大部分可能实际上是随机的。
如图 13.9 所示,到第 991 集时,我们的代理已经掌握了车杆游戏。
在最后的 10 集里,它每一集都保持了 200 个时间步长,取得了 199 的满分。到了第 911 集,28 探索率ε已经达到了 1%的最小值,所以在所有这些最后一集里,代理人在大约 99%的时间步长里都处于开发模式。从这些最后几集的完美表现来看,很明显,这些剥削行为是由一个神经网络指导的,这个神经网络受到了前几集游戏经验的良好训练。
正如本章前面提到的,深度强化学习代理经常表现出挑剔的行为。当你训练你的 DQN 代理玩推车游戏时,你可能会发现它在后来的几集里表现很好(比如说,在第 850 集或第 900 集左右连续出现 200 次每集),但在最后一集(第 1000 集)时表现很差。如果最终是这种情况,您可以使用 load()方法从一个更早的、更高性能的阶段恢复模型参数。
SLM 实验室的超参数优化
在本章的许多地方,我们一口气介绍了一个超参数,然后在下一口气中我们指出,我们稍后将介绍一个名为 SLM Lab 的工具,用于调整该超参数。好了,那一刻已经到来![注:“SLM”是奇怪回路机器的缩写,奇怪回路概念与关于人类意识经验的想法有关。参见 Hofstadter,R. (1979 年)。Gödel,埃舍尔,巴赫。纽约:基础书籍。]
SLM Lab 是由 Wah Loon Keng 和 Laura Graesser 开发的深度强化学习框架,他们是加州的软件工程师(分别在移动游戏公司 MZ 和谷歌大脑团队工作)。该框架在本报告中可用,并具有与深度强化学习相关的广泛实施和功能:
- 它允许使用许多类型的深度强化学习代理,包括 DQN 和其他人(即将在本章中)。
- 它提供了模块化的代理组件,允许你设计出你自己的新型深层 RL 代理。
- 你可以直接把代理放到许多不同环境库中的环境中,比如 OpenAI Gym 和 Unity(见第 4 章)。
- 代理可以同时在多个环境中接受培训。例如,单个 DQN 代理可以同时解决 OpenAI 健身房推车杆游戏和 Unity *衡球游戏 Ball2D。
- 您可以将您的代理在给定环境中的表现与其他人的努力进行比较。
至关重要的是,对于我们的目的,SLM 实验室还提供了一种无痛的方法来试验各种代理超参数,以评估它们在给定环境中对代理性能的影响。例如,考虑图 13.10 所示的实验曲线图。在这个特殊的实验中,一名 DQN 特工被训练在一系列不同的试验中玩推车杆子游戏。每一次试验都是一种药剂的实例,具有为多次发作训练的特定的、不同的超参数。试验之间的一些超参数变化如下。
- 密集网络模型体系结构
- [32]:单个隐藏层,具有 32 个神经元
- [64]:也是一个单独的隐藏层,这次有 64 个神经元
- [32,16]:两个隐藏层;第一组有 32 个神经元,第二组有 16 个
- [64,32]:也有两个隐藏层,这次第一个隐藏层有 64 个神经元,第二个隐藏层有 32 个神经元
- 跨所有隐藏层的激活功能
- 乙状结肠的
- 双曲正切
- 热卢
- 优化器学习率(η),范围从零到 0.2
- 探索率(ε)退火,其范围从 0 到 100[注:退火是ε衰变的替代物,用于相同的目的。在ε和ε_ min 超参数设置为固定值(分别为 1.0 和 0.01)的情况下,退火中的变化将调整ε_ decay,使得在指定的情节中将达到 0.01 的ε。例如,如果退火设置为 25,那么ε将以一定的速率衰减,使得它从第一集的 1.0 均匀降低到 25 集之后的 0.01。如果退火设置为 50,那么ε将以这样的速率衰减,即从第一集的 1.0 均匀降低到 50 集后的 0.01。]
SLM 实验室提供了许多用于评估模型性能的指标(其中一些可以沿着图 13.10 的纵轴看到):
- 实力:这是对代理获得的累积奖励的衡量。
- 速度:这是代理能够
多快达到它的强度(也就是多少集)。 - 稳定性:在代理解决了如何在环境中表现良好的问题后,这是对它在后续事件中如何保持其解决方案的度量。
- 一致性:这是一种在具有相同超参数设置的试验中药剂性能重现性的度量。
Fitness :同时考虑上述四个
指标的总体概要指标。使用图 13.10 捕获的实验中的适合度度量,似乎以下超参数设置对于玩推车杆游戏的 DQN 代理是最优的:
- 一种单隐层神经网络架构,单层中有 64 个神经元,性能优于 32 个神经元的模型。
- 隐层神经元的双曲正切激活函数。
- 大约 0.02 的低学习率(η)。
- 退火超过 10 集的探索率(ε)试验优于退火超过 50 或 100 集的试验。
运行 SLM 实验室的细节超出了本书的范围,但是这个库在 https://github.com/kengz/SLM-Lab.有很好的记录
DQN 以外的代理人
在深度强化学习的世界中,像我们在本章中构建的深度 Q 学习网络相对简单。值得称赞的是,DQNs 不仅(相对而言)简单,而且相对于许多其他深度 RL 代理,它们还能有效地利用可用的训练样本。也就是说,DQN 代理商确实有缺点。最值得注意的是:
- 如果在给定的环境中,状态-动作对的可能数量很大,那么 Q 函数会变得非常复杂,因此估计最佳 Q 值 Q *变得很难。
- 即使在计算上很容易找到 Q *的情况下,相对于其他一些方法,DQN 也不擅长探索,因此 DQN 无论如何也不会收敛到 Q *上。
因此,即使 dqn 是样本有效的,它们也不适用于解决所有问题。
为了结束这一深度强化学习章节,让我们简单介绍一下 DQNs 之外的代理类型。如图 13.11 所示,深层 RL 代理的主要类别包括:
- 价值优化:这些包括 DQN 智能体及其衍生物(如双 DQN、决斗 QN)以及通过优化价值函数(包括 Q 值函数)解决强化学习问题的其他类型智能体。
- 模仿学习:这一类别的代理(例如,行为克隆和条件模仿学习算法)旨在模仿通过演示教给他们的行为,例如,向他们展示如何将餐盘放在碗架上或如何将水倒入杯中。虽然模仿学习是一种迷人的方法,但它的应用范围相对较小,我们在本书中不做进一步讨论。
- 模型优化:这类智能体学习在给定的时间步长内,根据( s,a )预测未来状态。这种算法的一个例子是蒙特卡罗树搜索(MCTS),我们在第四章中介绍了 AlphaGo。
- 策略优化:这类 Agents 直接学习策略,即直接学习图 13.5 所示的策略函数π。我们将在下一节更详细地讨论这些。
*
策略梯度和强化算法
回想一下图 13.5,强化学习代理的目的是学习一些将状态空间 S 映射到动作空间 a 的策略函数π。使用 DQNs,实际上使用任何其他值优化代理,π是通过估计一个值函数间接学习的,例如最优 Q 值 Q*。对于策略优化代理,π是直接学习的。
策略梯度(PG)算法可以直接在π上执行梯度 ascent32,例如一种特别著名的强化学习算法,称为“强化”。33 像“强化”这样的 PG 算法的优势在于,它们可能会收敛到一个相当最优的解决方案,34 因此它们比 DQN 这样的价值优化算法更适用。代价是 PGs 的一致性较低。也就是说,相对于 DQN 等价值优化方法,它们的性能差异更大,因此 PGs 往往需要更多的训练样本。
演员-评论家算法
如图 13.11 所示,行动者-批评家算法是一个 RL 代理,它结合了价值优化和策略优化方法。更具体地说,如图 13.12 所示,演员-评论家结合了 Q-学习和 PG 算法。在高层次上,所得到的算法包括一个循环,该循环在以下各项之间交替:
- Actor:决定采取行动的 PG 算法。
- 批评家:一种 Q 学习算法,它批评演员选择的动作,提供如何调整的反馈。它可以利用 Q-learning 中的效率技巧,如记忆回放。
从广义上讲,行动者-批评家算法让人想起第 12 章的生成性敌对网络。GANs 在环路中有一个发电机网络和一个鉴别器网络,前者产生假图像,后者对其进行评估。actor-critic 算法在一个循环中有一个 actor 和一个 critic,前者采取由后者评估的动作。
actor-critic 算法的优点是,与 DQN 相比,它可以解决更广泛的问题,而相对于增强算法,它的性能差异更小。也就是说,由于 PG 算法的存在,演员-评论家仍然有些样本效率低下。
虽然实现增强和 actor-critic 算法超出了本书的范围,但是您可以使用 SLM Lab 自己应用它们,并检查它们的底层代码。
摘要
在这一章中,我们介绍了强化学习的基本理论,包括马尔可夫决策过程。我们利用这些信息构建了一个深度 Q 学习代理,解决了 Cart-Pole 环境。最后,我们介绍了 DQN 之外的深度强化学习算法,比如强化和演员评论。我们还描述了 SLM Lab——一个深度 RL 框架,具有现有的算法实现以及用于优化代理超参数的工具。
本章结束了本书的第三部分,第三部分提供了机器视觉(第 10 章)、自然语言处理(第 11 章)、艺术生成模型(第 12 章)和顺序决策代理的实际应用。在第四部分,也是本书的最后一部分,我们将为你提供一些松散的指导,让这些应用适应你自己的项目和爱好。****
定义指标以推动机器学习模型的采用和价值
原文:https://www.dominodatalab.com/blog/defining-clear-metrics-to-drive-model-adoption-and-value-creation
企业数据科学最大的讽刺之一是,尽管数据科学团队擅长使用概率模型和诊断分析来预测收入或确定资产的潜在价值流,但在大多数情况下,很少有分析技术应用于他们衡量数据科学计划价值的方式。人们常说,企业内部没有任何变化,因为你已经建立了一个模型。
在某些情况下,数据科学确实会产生直接创收的模型,例如针对人们提供可以立即兑现的优惠的情境交易引擎。但是在大多数情况下,模型是价值创造的推动者,通过转变过程来创造新的效率或收入,或者通过实现更好的决策。
这是挑战的一部分,评估一个好决策的价值是困难的。
事后回顾糟糕决策对资产负债表的影响实在是太容易了。尽管如此,我们经常会失去关于可能影响底线结果的输入、假设和外部因素的背景。但是好的决策呢?我们如何跟踪通过更好的决策支持(如机器学习模型或诊断可视化)实现的价值,而不是由经验丰富的经理做出决策?
在数据科学项目的启动阶段,根据关键成功指标进行调整
数据科学家需要更好地在组织内部推销他们自己的成功。展示这些成功的一个关键要素是在任何项目启动阶段为利益相关者设定明确的期望。当你在设计你的问题陈述和与现有数据相关的初始假设时,开始解释你可以用什么指标来衡量有意义的成功。
这些指标可以分为三个主要类别
- 领先指标
- 把这些看作是一个好的迹象,表明你正在采取的行动和活动将会带来积极的结果。这些信息可以是销售队列中处理的机会总量,或者是基于建议和提示记录在职业安全*台中的潜在健康和安全风险数量。
- 滞后指标
- 这些指标只能在完整的预测阶段结束时进行测量;也就是说,如果我们预测某种商品的价格将会上涨,并且我们采取了行动,比如设定一个期货合约来创造一个固定价格,那么我们只能在商品价格刷新时衡量这种预测是否成功。这为我们提供了识别模型性能的真实指标。
- 使用/健康指标
- 跟踪模型的总体使用情况和运行状况对于将更多数据科学项目转化为数据科学产品至关重要,数据科学产品是最终用户用来帮助转变业务运营和改进决策的工具。这些常常被数据科学团队遗忘,但最终会导致理解任何摩擦点。模型结果可能需要迭代,以便在业务中更有影响力。
如何创建简明的指标来设定更清晰的预期
就像在工作描述中写关键绩效指标一样,清晰、简洁、精确的指标非常重要。
评估模型的良好指标应包括以下内容:
- 指标类型(领先/滞后/使用)
- 度量名称
- 指标的描述
- 可以评估指标的频率
- 该指标为何重要的基本原理
就指标的基本原理达成一致,并确定可以跟踪该指标的频率,这是与您的业务利益相关者设定明确预期的一个重要阶段。
通过与您的利益相关者就可以使用哪些指标来评估可能的性能达成一致,意味着您不必等待一个完整的预测周期来评估模型的影响,反过来也意味着您能够确定在模型的初始构建中可能没有确定的其他重要因素。
如果我们只跟踪落后的绩效指标,那么我们就不能根据领先指标积极地影响一个模型将如何产生结果,我们可以以更快的节奏来衡量这些领先指标。
例如,许多销售组织每季度跟踪销售情况。这是因为完成一项销售活动需要很长时间。如果我们只在销售周期结束时审查模型的性能,我们可能会错过可以帮助我们改进或迭代模型本身以取得更大成功的主要元素。
我们可能会通过对问题的探索性分析来确定与成功的良好结果相关的度量。
Metric examples for a model optimizing sales results
假设我们已经建立了一个模型,根据人口统计分析和下一个最佳行动风格的产品推荐来识别具有最高成交率的潜在机会。我们还利用这种模式通过数字营销活动锁定潜在客户,因此,我们现在希望看到我们的机会渠道会显著扩大。
我们的愿望是通过更好地使产品符合他们的要求,并考虑捆绑销售等其他策略,来提高我们在渠道中的机会总量,并增加这些机会的价值。
我们可以通过查看我们渠道中的潜在机会总数、这些机会的交易得分(即销售人员认为交易可能完成的可能性)以及我们的机会相对于销售目标的总价值来跟踪这一点。
因为这些指标不需要我们是否成功完成销售的最终结果,我们可以以更高的频率跟踪它们,并使用它们来确定我们的模型结果对绩效产生的积极影响。
相反,如果我们没有看到对这些指标的积极影响,我们需要改进我们的模型运行方式以创造更好的结果,在这种情况下,我们将根据模型结果的真实测试所产生的新见解来迭代模型。
跟踪这些指标有助于我们理解我们的模型在初始阶段是否成功。它们还通过让销售团队更好地了解模型的表现,帮助我们推动采用。
利用使用/健康指标推动模型最终用户采用
正如 Gartner、Harvard 和其他组织提醒我们的那样,大多数模型无法在现代企业组织中投入生产。虽然许多人认为这个问题是技术部署挑战的问题,我们最*与 DataIQ 进行的一项调查指出,最终用户对模型的采用是主要的绊脚石。
越来越需要从产品管理原则中抽出一页来部署数据科学项目。
- 数据科学项目可以被认为是代码、计算和某种接口。
- 在数据科学产品中,我们开始考虑终端用户参与、模型结果和与之交互的工具的迭代设计,以及持续的管理、监控和模型价值的测量。
考虑到这一点,我们必须确定健康和使用指标,使我们能够了解我们的模型结果如何被我们的最终用户采用,这些最终用户对该工具的看法如何,以及我们应该考虑进行哪些潜在的更改以使模型结果更具影响力。
再次使用我们的销售示例,我们确定了以下指标来跟踪我们的模型结果的使用情况/健康状况
- 销售代理查看模型结果的次数。
- 一项调查,旨在确定销售代理认为该模型与其销售流程的相关性。
- 通过投票来确定任何潜在的改进或迭代,从而改进工具。
这些指标允许我们比模型成功的指标更深入。它们支持数据科学团队和模型最终用户之间的双向交流。任何与模型性能相关的怪癖或者任何模型没有被采用的地方都可以被识别出来,并包含在一个整体的入职框架中。
Example model adoption framework for end-users
使用这些指标来制定推广计划有助于我们获得一致的早期反馈,这不依赖于我们评估模型是否有效的漫长销售周期。
包括对我们的用户进行投票,以了解他们如何看待模型以及他们可能做出的任何更改,这使我们进一步了解我们可能无法单独获得结果指标,并确保他们有一种方式来传达他们的想法,并感受到他们参与了数据科学产品本身的整体成功。
在采用的各个阶段,这些指标有助于保持业务部门的参与,并了解模型如何帮助推动其部门的成果,同时也意味着,在确定数据科学部门产生的价值时,我们有了更清晰的途径来确定我们的模型在业务的不同部分实现的商业价值。
结论
许多企业数据科学团队认为在个人层面跟踪数据科学项目的价值是一件棘手的事情。这通常是因为数据科学使业务部门能够更好地做出决策或改变他们的运营方式,这意味着直接的价值并不总是容易找到。
确保所有数据科学计划都包括成功的措施和指标,这是与业务部门保持一致并对模型结果如何实现价值产生明确预期的关键部分。尽管如此,这些度量标准不能仅仅依赖于最终结果——比如基于模型推荐的成功销售。
将这些指标整合到您的模型采用框架中有助于在业务最终用户和数据科学家之间建立更好的一致性。这有助于确保更多的模型投入生产,不仅仅是技术生产,还包括最终用户对模型结果的采纳。
从模型驱动的保险产品推荐中实现 200 万欧元的年利润增量
ConTe.it 和 Admiral Group Europe 的数据科学
在全球范围内,保险公司面临着消费者对便利性、速度和服务的日益增长的期望。许多人转向数据科学和实时分析来推动创新服务和能力。
以 ConTe.it 为例。总部位于罗马的 ConTe.it 是专门从事汽车和摩托车保险的直接保险公司 Admiral Group 的意大利品牌。Admiral Group 及其品牌在全球拥有 500 多万客户,在竞争激烈的保险业中,创新、便利和客户满意度已经成为他们的标志。
ConTe.it 数据科学主管 Francesco Maggina 预计,在未来五年内,机器学习将成为公司 DNA 的一部分,并改变一切,从他们如何为客户定价到他们处理索赔的速度。为此,他和来自该公司西班牙(Admiral Seguros 品牌)和法国(L'olivier 品牌)品牌的数据科学领导者采用了 Domino 数据科学*台来加速算法模型的开发和部署,这将有助于他们更好地了解和服务他们的客户。在 Domino 上构建和部署的一个新的推荐引擎已经使 ConTe.it 能够更快地引导客户找到他们需要的产品。它提高了客户满意度,并有望增加 200 万欧元的利润,通过这些有针对性的客户建议已经获得了超过 50 万欧元的额外收入。
下面的信息图表总结了他们的故事。点击阅读案例研究了解更多详情。
戴尔的 Randi Ludwig 分享了她对数据科学团队的看法
原文:https://www.dominodatalab.com/blog/dell-s-randi-ludwig-shares-her-perspective-on-data-science-teams
几个月前,达美乐和戴尔联手在得克萨斯州奥斯汀举办了一场数据科学盛会。在那次活动中,戴尔数据科学家 Randi Ludwig 分享了她对营造协作环境以培养忠诚的数据科学团队的见解。这篇博客概括了 Randi 关于数据科学社区的数据科学弹出式演讲,并展望了她在 Rev 2 数据科学领袖峰会上关于联合数据科学团队结构的演讲。
Randi 开始了她的数据科学弹出会议,强调了她的教育背景和各种学习风格的经验,以强调个人通过做或教授他人某个主题来学习。这种对学习的洞察非常重要,因为她讨论了信任、开放的沟通渠道以及激励团队和个人参与作为建立成功的数据科学团队的三个基本要素。
建立信任
为了在工作场所建立信任,雇主需要创造一个社区能够繁荣的环境。在这种情况下,创建一个数据科学家社区需要他们有机会参与进来,相互了解,排除故障,并最终相互教授和学习。Randi 解释说,一旦在社区中建立了关系,团队成员就会敞开心扉。这是营造学习和教学环境的关键。
为了实现创新,团队成员需要感觉到他们可以探索新事物并提出问题。与他人讨论新的话题和想法可能会令人生畏,尤其是在潜在关系不存在的情况下。数据科学家需要有一个试错的地方;创新和进步的安全之地。
作为经理或企业,你为员工创造的参与和讨论想法的环境越多,他们就越有可能跳出框框思考,并在有意见时畅所欲言。这可以最终促进产品改进和问题解决方案,并增加员工保留率。
“不舒服就不提问,要会提问才能学习。”- Randi Ludwig,戴尔数据科学家
开放的交流渠道
数据科学家的部分学习和改进过程取决于他们在一个参与性和信息可访问的环境中工作。创建一个在线空间或为此提供一个*台对于团队共享数据和构建模型至关重要。没有协作和一起实践和学习的能力,改进和创新就会受到阻碍。根据 Randi 的说法,数据科学家在持续对话、结合模型开发和团队合作的环境中茁壮成长。
与 Github 允许软件工程师在不同时间存放代码和访问数据类似,数据科学家也在不断地构建模型和探索数据集。共享*台的可访问性是一种需要。(对戴尔来说,这就是 Domino 的用武之地。)
激励团队和个人
让员工参与到协作环境中可能很困难。以物理和数字方式创造环境是一回事,但如果没有直接的要求,积极参与可能会很难。Randi 表示,这是公司可以为员工提供独特激励的地方。
激励的例子包括与参加数据相关会议的领导团队共度时光;HomeAway 证明了这一点,它提供了公司领导团队参与的正式学习机会。旨在探索某些产品主题并与高层管理人员接触的网络活动是激励员工参与的一种激励。Randi 提到,直接资助数据课程也是激励整个企业参与的一种强有力的方式。这不应该仅限于数据科学家,还应该对组织中希望了解正在进行的工作或可能过渡到数据科学职位的其他人开放。
认可那些愿意并积极参与内部社区来学习、进步和增强你的产品的参与者。所有数据科学团队都应该学习和改进他们的工作。
在员工之间建立信任,建立开放的沟通渠道,激励个人和团队,营造一个协作的工作环境,培养忠诚的数据科学家,让他们感觉自己是某个事物的一部分。
团队结构
5 月 23 日,Randi 将根据她在戴尔的经历,以《星际迷航》的风格讨论建立联合数据科学团队结构的好处。如果您对以下会议描述感兴趣,请考虑加入我们在纽约举办的 Rev 活动!
大胆行动–在戴尔构建联合数据科学
您如何确保数据科学家与业务紧密相关,并构建能够有效解决关键业务问题的解决方案?您可以在业务部门中嵌入数据科学家。
“我把她所有的都给她了,船长!”
那么,对于那些分散的数据科学家来说,如何摆脱孤岛,确保最佳实践,并避免返工呢?你可以把它们合并成一个集中的组织。
“这是非常不合逻辑的。”
嵌入式与集中式——如果你能同时拥有两个世界的优势会怎样?在戴尔服务组织内,他们实施了联合数据科学模型。Randi 将讲述戴尔组织的演变、要避免的陷阱以及 champion 的优势。
让我们长寿,共同繁荣!
关于兰迪·路德维希的更多信息
Randi R. Ludwig 是戴尔技术支持和部署服务部的数据科学家。她为涉及戴尔产品的技术支持、保修和维修的业务问题带来了数据科学解决方案。她还专注于提高管理层对数据科学的认识,并将全球戴尔数据科学家连接到一个可以相互协作和学习的网络社区中。此外,她还是 ATX 数据科学领域女性的共同组织者,致力于促进多样性,并为该领域的新人营造一个欢迎的空间。在进入行业之前,Randi 在 UT Austin 获得了天体物理学博士学位,包括对活动星系核和学生如何学习天文学的研究,这使她获得了各种统计数据挖掘技术和多种数据集的经验。
设计一流的 MLOps 管道
原文:https://www.dominodatalab.com/blog/designing-a-best-in-class-mlops-pipeline
如今,数据科学家面临的最大挑战之一是以高效且可重复的方式将模型从开发阶段转化为生产阶段。通过这种方式,机器学习(ML)管道寻求识别该过程中涉及的步骤。一旦定义了这些步骤,就可以对其进行自动化和编排,从而简化数据科学的生命周期。
简而言之,机器学习操作( MLOps )管道将 ML 工作流的每个部分抽象为可操作的模块,这反过来允许数据科学生命周期自动化。这有助于更快地开发、培训、验证和部署生产模型。
在本文中,您将了解典型的 ML 管道的结构,以及在设计一流的 MLOps 管道时要考虑的最佳实践和技巧。
MLOps 管道看起来像什么
在目前可用的许多机器学习文献中,以及在许多数据科学*台的文档中,您会发现如下所示的 ML 管道图:
如您所见,在传统的 ML 管道中有六个明确定义的阶段:
- 数据收集: 数据收集由与数据摄取相关的过程组成,包括将来自不同来源的原始数据传输到其存储位置,通常是数据库。从那里,团队成员可以访问它进行准确性和质量验证。
- 数据验证: 在此阶段,对数据的准确性和质量进行验证。
- 数据预处理: 准备好之前验证过的原始数据,以便能够被不同的 ML 工具处理。这包括将原始数据转换成适合使用的特征。
- 模型训练: 这是数据科学家通过训练和调优多个模型,然后选择最佳模型进行实验的地方。
- 模型分析和验证: 在此阶段,在将经过训练的模型部署到生产环境之前,将对其性能指标进行验证。
- 模型部署: 这个阶段包括注册一个模型,并准备好供业务使用。
对于 MLOps 管道有一种不同的思考方式,它考虑了整个 ML 模型生命周期,从项目启动的那一刻开始,直到在 projection 中对其进行监控(包括最终的再培训):
在本文的其余部分,您将了解在设计一流的 MLOps 管道时需要考虑的事项。
设计一流 MLOps 管道的最佳实践
设计同类最佳 MLOps 管道的目的是最大限度地减少模型生命周期中的摩擦。这可以通过自动化来完成;然而,说起来容易做起来难。
正如您在上一节中看到的,MLOps 管道由许多移动部分组成,因此实现它们之间的协同是复杂的,更不用说自动化了。幸运的是,随后列出的技巧和最佳实践可以帮助您的团队完成这项工作。
分而治之
因为设计 MLOps 管道可能是一项艰巨的任务,所以将它分成更小、更易于管理的步骤被认为是一种最佳实践。这里的关键是彻底定义每个过程,以便于优化和后续的自动化。
例如,在开发阶段,管道中易于优化的一个过程是为您的团队提供一个或多个 ML 框架或过程来执行实验。尽管乍一看似乎很简单,但这一步有其自身的挑战,例如软件版本之间的依赖冲突,以及确定工具所需的资源。因此,另一个有用的技巧是限制每个管道步骤的范围,以避免使其过于复杂。
理想结果的参考可以在 Domino 的自动化环境创建中找到,它允许科学家使用各种分布式计算框架和 ide,这些框架和 ide 在 Docker 映像中自动提供,并链接到您的文件和数据源。
编制 MLOps 管道时保持简单
一旦您有了明确定义的步骤,您就应该着手编排 MLOps 管道。换句话说,确定数据将如何被设计,以及当它从一个步骤移动到下一个步骤时将遵循什么方向和顺序。一个好的技巧是避免不必要的复杂性,使用 ML 编排工具来促进这项任务。然而,请记住,大多数 ML 编排系统的学习曲线往往是陡峭的,所以提到的时间节省假设您的团队已经克服了这个障碍。
如果您正在寻找这一悖论的最有效解决方案,答案就在 达美乐的 数据科学*台,这是唯一一个提供数据科学生命周期端到端编排的*台。
不要忘记记录所有的变化
设计 MLOps 流水线消耗相当多的资源。出于这个原因,记录您对管道所做的所有更改是一个最佳实践。这有助于重用或重新规划管道,从而加快新模型的开发。
另外,类似的原理也适用于你的实验。跟踪实验和模型便于复制。Domino Experiment Manager 最有价值的特性之一是它能够跟踪所有结果以及代码、数据、Docker 图像、参数和重现它们所需的其他内容。此外,Domino 的实验管理器版本自动允许您的团队对每次运行进行标记和评论,以便更好地跟踪结果并确定哪个配置得分最高。
自动化,但不忽略大局
最终,MLOps pipelines 的目标是加快交付可操作的结果,从而做出更好的业务决策。换句话说,在设计 MLOps 管道时,您的团队可能必须在功能方面做出让步,以促进自动化和流程编排。
在灵活性和复杂性之间找到理想的*衡并不容易,因为涉及到许多移动部件,而且一些设计决策会影响整个管道。正因为如此,数据科学家的核心职能技能不是为了解决 it 基础架构的技术方面和限制而设计的,这也于事无补。例如,将经过训练的模型转换成适合消费的格式。模型的容器化不同于创建一个现成的 API。DevOps 工程师,而不是数据科学家,通常处理这些任务,因此模型格式的变化可能是一个主要的不便。
幸运的是,Domino *台允许数据科学家根据需要将模型作为 API、Docker 容器或应用程序自行发布——这一切都得益于其强大的 UI,并且不需要编写任何代码。
避免供应商锁定
在这一点上,一个及时的建议是不惜一切代价避免使用专有技术的诱惑,希望享受来自单个供应商的各种功能,而不需要您进行编排。这是一个错误,你的组织最终将为此付出代价。
这是避免供应商锁定的最佳实践,在这方面,没有什么比 Domino 更好的了——它是唯一开放的工具和语言无关的 MLOps *台,经得起未来的考验。
请记住,模型监控不是可选的
你会发现有些管道一旦投产就忽略了监控模型的重要性。这与 ML 管道以模型部署结束的错误信念有关,这是一个违背最佳实践的严重错误,因为监控对于确保模型预测保持准确至关重要。此外,由于模型会随着时间的推移而退化,重新训练它们的需求是不可避免的。
建议记住,MLOps 管道从一开始就是循环的;一旦部署了一个模型,就必须不断地监控它的性能,以确定跳回到初始阶段的正确时机。
在 Domino,监控的重要性得到了强调,这就是为什么他们的*台会自动监控数据和模型质量漂移,以便在生产数据不再与用于培训的数据兼容时发出警报,这样数据科学家就可以及时重新培训和重新发布这些模型。
不要低估协作的力量
设计 MLOps 管道的最后一个技巧是不要低估协作的力量。如前所述,Domino 相信一流的 MLOps 管道是一个跨越整个数据科学生命周期的管道。不同的团队有时在不知道的情况下处理类似的问题,这有什么意义呢?综合所有数据科学家的知识和经验不是更有效率吗?
Domino 提供了一个集中式*台,可以自助访问工具和基础设施,数据科学家可以在这里发现、重用、复制工作,并最终节省时间和资源。
扩散模型——不仅仅是增加噪音
原文:https://www.dominodatalab.com/blog/diffusion-models-more-than-adding-noise
进入你最喜欢的社交媒体网站,使用搜索功能寻找 DALL-E。你可以查看 此链接 查看 Twitter 中的一些例子。上下滚动一点,你会看到一些乍一看很容易辨认的图像。根据所描绘的场景,如果你多注意一点,你可能会发现在某些情况下图像有些不太对劲。在最好的情况下,可能会有一点(或很多)失真,在其他一些情况下,场景是完全古怪的。不,艺术家并不打算包括这种扭曲或古怪,就此而言,很可能这位艺术家甚至不是人。毕竟,DALL-E 是一个计算机模型,之所以这么叫,是因为它是受人喜爱的皮克斯机器人 Wall-E 和超现实主义艺术家 萨瓦尔多·达利 的混合体。
你看到的图像是由文本输入数字生成的。换句话说,你提供你感兴趣的场景的描述,机器学习模型创建图像。我们生活在怎样的未来,对吗?DALL-E 模型于 2021 年 1 月由 OpenAI ,宣布,最* DALL-E 2 于 2022 年 7 月下旬进入测试阶段。2022 年 8 月下旬,OpenAI 推出了 超涂——一种将图像延续到其原始边界之外的方法。不同的实现已经发布,您可以使用各种各样的实现。例如,看看Craiyon从文本中获得你自己的 AI 图像创作。
下面是我请求获取 jackalopes 图像的一些例子——你可能知道我把它们称为数据科学家的寓言……有关更多信息,请查看 使用 Python 的数据科学和分析。 在任何情况下,你都可以看到获得的一些描绘相当不错,例如第二行的第三个条目显示了一幅貌似真实的图画,很明显是一只长着鹿一样鹿角的野兔。在其他情况下,结果并没有那么好,例如,看看第 1 行和第 2 行的第二个条目——头部的尺寸与所选的身体明显不匹配,一个太小,另一个太大。无论如何,在克雷永(原名 DALL-E mini )创建这些例子的短暂时间内,我不会如此快速地创建这些例子。
OpenAI 发布的最初的 DALL-E 实现使用了 GPT-3 的版本,如果你需要了解更多,请查看我在这个网站上的帖子,标题为 “变形金刚-自我关注救援” 。结合对比语言-图像预训练,或简称为 剪辑 和扩散建模,DALL-E 能够生成多种风格和排列的图像。这篇博文的重点是探索扩散模型背后的东西。让我们开始吧。
什么是扩散模型?
像许多伟大的概念扩展一样,扩散模型的灵感来自物理学,在这种情况下,使用的名称并不羞于显示其根源。扩散是一个过程,其中一些东西-原子、分子、能量、像素-从一个较高浓度的区域移动到另一个较低浓度的区域。当你把糖溶解在一杯咖啡里时,你会很熟悉这一点。起初,糖粒集中在你杯子顶部的一个特定位置,如果任其自然,它们会随机移动并自行分布。如果你通过搅拌来帮助这个过程,浓度梯度会加快,你可以一边享受你的加糖咖啡,一边保持清醒。
正如我们上面提到的,机器学习中的扩散模型从非*衡热力学中的扩散中获得灵感,其中该过程增加了系统的熵。这意味着扩散过程是自发的、不可逆的,换句话说,粒子(原子、像素等。)通过过程展开,但不会自发地重新排序。根据信息论,这相当于由于添加了额外的噪声而丢失了信息。
在 Sohl-Dickstein 等人题为 “使用非*衡热力学的深度无监督学习” 的论文中,非*衡统计物理学提供的动机是他们方法的核心。这个想法是通过慢慢地扰乱和破坏手边的数据分布结构来利用扩散的影响。与物理过程不同,目的是学习反向扩散(那应该叫做集中吗?)过程来恢复和生成数据中的结构。
像在热力学方法中一样,我们定义了扩散步骤的马尔可夫链,以将系统随机噪声添加到我们的数据中。反向扩散过程的学习使我们能够从噪声中构建具有所需属性的数据样本,在这种情况下,就像下图中从嘈杂的图像到笑脸表情符号。
简而言之,我们正在讨论一个两步过程:
- 前向扩散步骤,其中系统地添加高斯噪声,直到数据实际上是噪声;和
- 一个重建步骤,我们通过使用神经网络学习条件概率密度来“去噪”数据。
考虑上面的图表,我们已经概述了两个步骤。对于来自真实数据分布(x_0 \simeq q(x) )的数据点,前向扩散过程以\(T\)步向样本添加小的高斯噪声。步长由方差调度控制,使得((0,1) }^T_{t=1}中的\,并且我们得到(q(x _ t | x _ { t-1 } = n(x _ t;\sqrt{1-\beta_t} x_{t-2},\beta_t I) )。在我们的图表中,对于步骤 1,我们从( x_0 )处的笑脸表情符号开始。当我们在每一步添加噪声时,我们洗掉了原始图像。在(T \到\infty )点,我们有一个各向同性的高斯分布。
在我们的第二步,我们采取了一个嘈杂的图像,我们感兴趣的是重建我们的笑脸表情。这是基于这样的假设,即如果我们可以逆转步骤 1 中的过程,我们就可以从高斯噪声输入中重建真实样本。遗憾的是,我们不能容易地估计( q(x_{t-1} | x_t) \,因此需要学习一个模型( p_{\theta} )来逆转扩散过程。这就是图像生成的神奇之处。该模型所基于的马尔可夫公式确保了给定的反向扩散转移分布仅依赖于先前的时间步长,从而允许我们发展该过程。
当训练我们的扩散模型时,我们实际上是在寻找使训练数据的可能性最大化的反向马尔可夫转移。
使用不同方法生成图像
如果生成图像是游戏的名称,那么可能存在上述扩散模型的其他替代方案。让我们来看一些选择,并将它们与扩散模型进行比较和对比。
我们的图像生成的一种可能性是使用变分自动编码器(VAEs ),它通过将输入缩减到更低维度的潜在空间来进行编码。当我们解码结果时,模型试图重建输入,从而生成我们的图像。注意,vae 不仅被要求生成我们的图像,而且被要求以更紧凑的方式来表示它们(维度减少)。这意味着模型正在有效地学习生成训练数据的概率分布的基本特征。在某些情况下,这可能是一个缺点。
在这种情况下,通常提到的另一种可能性是使用基于流量的模型。在这种情况下,我们不使用编码器和解码器。相反,我们使用一系列可逆变换来直接模拟概率分布。我们不是对输入进行编码,而是对数据使用由神经网络参数化的函数( f )。当检索结果时,我们只需使用函数的反函数,即(f^{-1} )。我们可以看到这是如何成为一个问题。
第三种可能性是使用甘斯。生成对抗网络(GAN)是一种使用深度学习的生成建模方法。实际上,它包括学习输入数据中的模式,从而可以使用该模型来生成新的示例,这些示例很可能是从原始数据中提取的。在 GAN 架构中,我们有两个神经网络,它们相互竞争来生成数据的合成实例。在本博客之前的一篇文章中,我们已经讨论了使用 GANs 的优势。为了用 GAN 从噪声中生成图像,我们的出发点是有用的条件变量的噪声。图像由所谓的生成器生成,结果由鉴别器判断是(或不是)从训练集中提取的良好的似是而非的数据。使用 GANs 时需要我们注意的一些方面是:在鉴别器太好的情况下,梯度消失的可能性;或者在生成器学习只产生特定输出的情况下模型崩溃,迫使鉴别器拒绝任何东西和一切。在 2021 年发表的一篇论文中扩散模型在图像合成上击败了 GANs,Dhariwal 等人展示了“扩散模型如何能够实现优于当前最先进的生成模型的图像样本质量。”
扩散模型似乎在生成图像方面占了上风,然而,它们也不是没有问题。在最*的一篇由两部分组成的文章(第一部分和第二部分)中,NVIDIA 的研究人员认为,尽管扩散模型实现了高样本质量和多样性,但它们在采样速度方面并不出色,这限制了它们在实际日常应用中的采用。然后,他们继续介绍 NVIDA 开发的解决这一问题的三种技术,即:
- 潜在空间扩散模型通过首先将数据嵌入*滑的潜在空间来简化数据,在该空间中可以训练更有效的扩散模型。
- 临界阻尼朗之万扩散,一种改进的前向扩散过程,非常适合更简单、更快速的去噪和生成。
- 去噪扩散 GANs 通过表达性多模态去噪分布直接学习显著加速的反向去噪过程。
扩散建模已经被证明是图像生成中非常稳健的方法。更重要的是,基于相同方法制作的音频和视频的进步已经得到了展示。下一次,当你看到一个嘈杂的画面或听到一些对你来说听起来像噪音的东西时,停下来想一想,这可能是一个美丽的场景、一部感人的电影或一首美妙的交响乐的开始。谁能想到!
2018 年 Rev 的多样性和包容性
原文:https://www.dominodatalab.com/blog/diversity-and-inclusion-at-rev-2018
By Grace Chuang, Manager of Sales Development, Domino Data Lab on September 04, 2018 in
Rev 2018 年是多米诺数据科学领袖峰会的开幕日,我们很高兴通过我们的多米诺多样性&包容性俱乐部旅行资助将新鲜的想法带到这次活动中。我们的目标是通过为不同的申请者提供旅行和住宿,为打破阻碍数据科学专业多元化和包容性的障碍做出贡献。
我们询问了我们的 Domino 多样性和包容性赠款接受者关于 Rev 的一些收获,以及是什么让他们来参加会议。你可以在下面读到它们(为了篇幅和清晰起见,编辑了一些摘录):
玛丽琳·费雷拉
关于玛丽莲
Marielen 是巴西跨国软件公司 TOTVS 的数据科学家,之前曾与 CERN 合作,研究神经网络应用、3D 声音的开发以及通过蓝牙低能量处理通信信号以感知人类存在。她共同创立了圣保罗机器学习和数据科学女性分会。
玛丽琳的 Rev 体验
数据责任(通过道德数据科学产生积极的社会影响)小组让我思考我的工作,以及我真的希望我的同事们开始讨论这样的话题。很荣幸能和韦斯·麦金尼(熊猫的创造者)在一起,这让我对开源项目有了更多的思考。我等不及明年去了!
拉蒙·耶佩斯
关于雷蒙
Ramon 正在加州萨克拉门托的太*洋大学攻读数据科学硕士学位。他最*以统计学家的身份在美国农业部工作,对数据科学的基本概念感兴趣(创建算法、利用大型信息数据库以及在公司内部应用经济概念)。他有着广泛的生活经验,之前曾在墨西哥领事馆和美国驻西班牙马德里大使馆工作。
拉蒙的牧师经历
作为数据科学专业的研究生,参加 Rev 大会是一次宝贵的经历。我能够了解数据科学社区的当前问题。例如,一个持续的主题是,我们需要标准化数据科学领域的一些流程,以提高公司的生产力。总的来说,会议很棒。我以后一定会以数据科学家的身份参加。
特里萨·格伯特
关于特里萨
Theresa 目前正在卡内基梅隆大学攻读统计学和机器学习博士学位。她的研究侧重于从照片中了解癌前细胞的特征,长期目标是开发完全预防癌症的药物。她特别热衷于让非统计研究人员理解和探索他们的数据。在空闲时间,她为非营利组织提供免费的统计咨询。
特里萨的牧师经历
Rev 是少有的兑现承诺的会议。作为一名学者,我希望从行业领导者那里了解行业挑战和可行的解决方案,并与现任和有抱负的领导者讨论数据科学文化。演讲人*易*人,话题从数据科学中的伦理问题到特征选择的蒙特卡罗方法。我能与之交往的与会者的素质给我留下了深刻的印象。我的亮点是与谷歌首席数据科学家 Cassie Kozyrkov 讨论数据科学培训。
优秀需要一个中心吗?
原文:https://www.dominodatalab.com/blog/do-you-need-a-center-to-be-excellent
云分析主管 Brian Loyal 和拜耳作物科学公司数据科学副总裁 Naveen Singla
编者按:这是分享开发企业数据科学战略的公司最佳实践的系列文章的一部分。一些文章将包含关于他们使用 Domino 的信息。
几年前,我们加入了越来越多为数据科学创建卓越中心(COE)的公司行列。德勤的一项调查发现,超过三分之一的大公司有卓越中心或能力中心。麦肯锡认为,在成功扩展高级分析的公司中,这一数字高达 60%。
当时,数据科学工作正在拜耳作物科学蓬勃发展,业务部门正在培养自己的从业人员骨干,以便他们可以利用高级分析和机器学习能力。但是,随着越来越多的数据科学用例出现在业务的不同角落,我们希望确保我们有正确的防护栏。这让我们从组织的角度重新评估我们如何管理数据科学,并最终创建一个 COE 来帮助制定治理数据科学的企业战略。从那时起,我们的 COE 扩展了其章程,以培养通用能力和最佳实践来实现大规模数据科学。
最终,我们学到的是,让一个团队专注于跨越组织和最佳实践的问题有很多好处。
听听 Brian Loyal 讨论拜耳作物科学为何推出 COE。
https://www.youtube.com/embed/JvcNujw3fzw
有什么优势?
对我们来说,这些优势包括:
- 数据科学团队之间更好地共享知识。例如,我们观察到从业者对代码和模型的重用增加,这有助于加速新数据科学产品的开发。
- COE 致力于解决跨多个业务部门的重大挑战,例如让从业者更容易挖掘基因组数据,从而提高数据科学的效率。
- 将数据科学和业务战略更好地与侧重于数据科学能力的投资结合起来,这是领导者们正在努力实现的。
- 改善人才获取,重点关注数据科学社区和知识共享,吸引高性能数据科学家的关注。
一路走来,我们学到了什么?
建立一个 COE 或任何类型的中心都不容易。在我们与致力于实施或扩展其企业数据战略的其他人的交谈中,我们通常会提出以下建议:
等到你达到临界质量
虽然我们认为“中心”(在我们的案例中,COE)对于从企业角度治理数据科学很重要,但不要从第一天就设置它。让实践成长一点,然后看看什么时候你达到了需要一个管理机构的临界质量。
在 Bayer Crop Science,当我们开始构建 COE 时,有 200 多名数据科学从业人员在业务部门工作。我们最初的战略直接聚焦于公司领导日益增长的担忧,这使我们能够比其他方式更快地获得关注。
思考如何增加价值
一旦我们的 COE 解决了眼前的治理问题,我们就将注意力转向确定加速数据科学价值的方法。我们称之为“COE 重启”,并成立了两个关键运营团队来支持我们的工作:
- 与研发、供应链和商业等关键业务部门保持一致的垂直团队,帮助他们实现收入和成本削减目标。在这里,我们的 COE 员工主要识别和交付总体数据科学功能,如预测定价模型或基因组学模型,这可能有利于多个业务部门或职能部门。如果业务线还没有数据科学和分析团队,我们的卓越中心将填补空白,帮助开展特定于业务线的数据科学项目,同时业务线领导开始组建自己的数据科学团队。
- 一个横向团队,其任务是构建可以惠及所有人的基础能力和实践。这包括实现 Domino 数据科学*台以使孤立的团队更容易共享数据、代码和模型,并建立社区建设实践以进一步鼓励协作。我们认为这种对社区的强调是至关重要的,并产生了倍增效应。例如,全公司从业者之间自发的聚会和论坛现在已经变得司空见惯,创造了一个自我维持的协作和知识共享循环。
听听那些在战壕里的人
通常,集中式团队和业务之间会有一些摩擦,因为联合团队担心公司法令会阻碍业务目标的实现。为了解决这个问题,我们采取了自上而下和自下而上的方法。这包括创建一个数据科学委员会,将整个公司的数据科学领导者和高级数据科学员工聚集在一起,以塑造组织内数据科学的未来。该委员会确保每个企业的数据科学团队在新流程中拥有发言权,并在决策中感受到主人翁感,这有助于确保采用新功能,并克服在标准化流程和实践方面出现的不可避免的障碍。
衡量你的成功
这对于提升数据科学的总体价值,尤其是卓越中心的工作价值至关重要。我们跟踪许多不同的指标,包括:
- 采用数据科学来推动更好的业务成果,例如为推动业务决策而部署的模型数量,以及基于数据科学做出的业务决策数量。
- 模型的财务影响。在一些地区,比如 R&D,一个新产品可能需要长达 7 年的时间才能上市并产生财务回报,我们不仅仅关注传统的投资回报。例如,我们经常关注 R&D 项目的“命中率”——每一步有多少产品成功进入管道——着眼于持续改进。我们希望这个数字逐年上升,过去几年我们已经看到了积极的趋势。
我们还对公司中从事或支持数据科学工作的任何人进行年度调查,以了解哪些工作有效,哪些工作无效。这些调查揭示了令人惊讶的见解,这些见解导致了我们做事方式的改变。
没有让数据科学规模化的灵丹妙药。尽管如此,我们发现拥有企业数据科学战略有助于我们更快实现这一目标。这些实践,还有其他的,可以帮助铺*道路。
观看名为“利用最佳科学推动成果的最佳实践”的网络研讨会,我(Brian)将与一家领先保险解决方案提供商的数据科学总监 Matt Cornett 和一家全球金融情报公司的人工智能工程总监 Patrick Harrison 一起讨论更多最佳实践。
Docker,但是对于数据
棉被的联合创始人兼首席技术官 Aneesh Karve 访问了 Domino MeetUp,讨论数据基础设施的发展。这篇博文提供了会议摘要、视频和演示文稿。Karve 也是“用 Jupyter 和 Quilt 进行可复制的机器学习”的作者。
Session Summary
被子数据的联合创始人兼首席技术官 Aneesh Karve 讨论了数据像源代码一样被管理的必然性。版本、包和编译是软件工程的基本要素。他问道,如果没有这些元素,我们为什么要做数据工程呢?Karve 深入研究了 Quilt 的开源工作,以创建一个跨*台的数据注册表,该注册表可以存储、跟踪和整理进出内存的数据。他进一步阐述了生态系统技术,如 Apache Arrow、Presto DB、Jupyter 和 Hive。
本次会议的一些亮点包括:
- 数据包代表“可部署、版本化、可重用的数据元素”
- “我们观察了过去三年的计算轨迹,发现容器的垂直增长不仅带来了标准化,而且成本大大降低,生产率大大提高。从虚拟化的角度来看,您接下来要考虑的是数据。我们能为数据创建一个类似 Docker 的东西吗?”
- 如果你有代码依赖,你
pip install -r requirements.txt
,然后你import foo
,import bar
然后开始工作。数据依赖注入要混乱得多。您通常有许多数据准备代码,从网络获取文件,将这些文件写入磁盘,然后有自定义的解析例程,然后运行数据清理脚本。 - 了解了脸书通量模式后,看看 React,不变性提供了很多可预测性。
- 计算和存储的分离,如 Presto DB 等技术所示。与其衡量你收集了多少数据,不如衡量你能多快将数据转化为代码。那叫数据回报。
- 鉴于代码的 linter 和语法检查器无处不在,提倡为数据使用 linter,以确保数据符合特定的配置文件。
- DDL,数据描述语言,是棉被编译器和蜂巢生态系统之间的桥梁。
- 如果你有 Drill,pandas,Cassandra,Kudu,HBase,Parquet,所有这些节点都得到了很好的优化,它们是高性能的。然而,你实际上在哪里度过你的时间呢?Karve 指出,您花费 80%的时间来移动数据,您失去了所有这些性能优化,并且您还有许多非规范化的、重复的逻辑。
https://fast.wistia.net/embed/iframe/at7vn34fbo
Domino 3.0:帮助世界运行在模型上的新特性和用户体验
这篇博文介绍了 Domino 3.0 的新特性。Akansh Murthy 是 Domino 的技术产品经理,之前在 Domino 和 Kareo 担任软件工程师。
介绍
Domino 3.0 通过消除模型操作瓶颈、加速研究和生产力,简化了数据科学家的生活。正如去年 5 月我们的数据科学领袖峰会 Rev 所述,将数据科学集成到组织中需要一个*台,该*台不仅要支持数据科学家的需求,还要支持使用数据科学家工作的业务利益相关者和支持数据科学家基础架构的 it 人员的需求。
为此,我们很高兴发布 Domino 3.0!
此版本包括两个主要的新功能领域,可满足客户的普遍要求:
- 发布和发现数据科学“应用”的简单方法(例如,Shiny、Flask、Dash 等。)
- 用于了解数据科学组织中跨工作负载的计算使用情况的工具。
我们还改进了 UI,使导航和搜索更加高效,并扩展了*台 API,使 Domino 更容易集成到专有工作流中。最终,这些新功能使我们更接*于我们更广阔的愿景模型管理。
应用发布和启动板
在与我们的 data scientist 用户进行多次访谈后,我们意识到他们被迫经历许多内部障碍,只是为了扩展他们工作的基础架构,延长了让他们的工作可见并可获得反馈的时间。
有了 Domino 3.0,数据科学家可以完全控制应用的发布,而不需要 IT 和 DevOps 团队的参与。具体来说,新的发布流程支持对应用运行的硬件进行定制,以根据应用所需的资源、标题和描述、应用的使用统计数据以及查看应用的精细权限进行适当扩展。
应用程序发布后,可以在 Launchpad 中查看,launch pad 是一个门户网站,业务利益相关方可以在其中发现和访问您发布的应用程序。这样可以将应用快速交付给利益相关方,从而获得快速反馈。
我们建立了灵活的许可机制,因此您可以控制谁可以访问您的应用程序,或者是否应该公开发布。
Domino 还可以跟踪您的应用程序被使用的频率以及谁在使用它们。这可以让您了解您的数据科学工作是否以您期望的方式得到利用,并提供一种方式来展示其在您的组织中的影响。
我们认为 Launchpad 将成为游戏规则的改变者,让数据科学的工作对组织中的其他人可见,加速协作和模型迭代。
控制中心
我们还不断听说,IT 管理员和数据科学领导者希望获得粒度级别的成本信息,这将有助于他们做出决策,例如在哪里分配更多硬件,以及查看哪些项目的成本最高。基于这一认识,我们希望整合这些信息,使其易于查找和分析;于是,控制中心诞生了。
控制中心可让您了解整个数据科学组织的计算支出和使用情况,以便做出更明智的资源分配和成本控制决策。
此信息还可以按用户、项目或硬件类型进行筛选,以获得更精细的成本分配。
为了允许更多的定制,我们通过一个 API 公开这些数据,该 API 设计用于与商业智能工具一起工作,因此用户可以将数据集成到现有的工作流和仪表板中。现在,管理员可以使用 Tableau 等工具分析*台活动,甚至可以将数据拉回到 Domino,在 Jupyter 中进行分析或用 Shiny 显示。
这仅仅是 Domino 自动捕获的迷人的元数据类型的开始,我们很高兴能够继续致力于揭示更多的元数据,以帮助我们的用户管理他们的数据科学组织。
新的用户体验和用户界面
我们更新了用户界面的外观,以简洁的外观简化了工作流,让我们的数据科学家用户更容易看到关键产品领域和工具。
新的导航位于侧面而不是顶部,可折叠以允许更多的屏幕空间,这对数据科学家来说是宝贵的,它定义了 Domino 的三个不同区域(实验室、启动板和控制中心)。这允许不同的用户在 Domino 产品中有各自的家——实验室中的数据科学家、Launchpad 中的模型消费者和控制中心中的 IT 管理员。
我们还重新设计了我们的搜索界面,使得搜索结果可以从产品的任何部分的导航栏中访问。查找和重用过去工作的能力对数据科学家来说非常重要,因此我们希望在不离开当前环境的情况下更快地找到有用的内容。我们的搜索引擎索引了*台中所有工作的文件、评论、结果和实验元数据。
我们对收到的早期反应感到兴奋,并相信我们的重新设计朝着为最终用户提供更流畅体验的方向迈出了一步。
公共 API
最*,我们看到一种趋势,即客户构建自己的用户界面,但仍然希望与 Domino 交互。为了便于 API 访问关键的 Domino 功能,我们发布了许多新的 API,可供客户或任何感兴趣的开发人员使用。这些 API 为 Domino 提供了一个全新的生态系统,我们计划公开提供更多的 API。查看我们的 API 文档了解更多信息。
今后
通过减少模型操作瓶颈和提高数据科学家的工作效率,使模型产品对业务利益相关者更加可见,并向 IT 管理员和数据科学领导者公开重要的计算支出数据,Domino 3.0 成为一个端到端*台,可帮助组织构建模型管理功能。在接下来的几个月里,我们将发布对上述新特性的增强,并提供模型监控和治理的新功能。
如果您是一名数据科学家或数据科学领导者,正在构建您的组织,并且对此感兴趣,请观看演示并与我们聊天。如果你是一名对解决这样的问题(以及更多)感到兴奋的工程师,请查看我们的职业页面。为让世界靠模型运转干杯!
Domino 4.3 反映了我们对企业级安全性的专注
原文:https://www.dominodatalab.com/blog/domino-4-3-reflects-our-dedication-to-enterprise-grade-security
By John Brunn, Chief Information Security Officer, Domino on September 09, 2020 in Product Updates
上周我们宣布了Domino 的数据科学*台 Domino 4.3 的最新版本,这代表着企业数据科学家和支持他们的 IT 团队向前迈进了一大步。新特性包括一个新的 Domino 身份验证服务,它将帮助 IT 团队在保持安全性和控制力的同时进行扩展。
Domino 身份验证服务
我们的客户使用 Domino 作为数据科学的记录系统,因此对用户管理有严格的要求。他们希望根据数据科学家在 Domino 系统中的地位,授予或限制对数据科学系统(如数据源或外部服务)的访问权限,这类似于您在 SSO(单点登录)系统中看到的情况。
Domino 正在扩展其企业级身份验证功能,包括通过一个短暂的 Domino 令牌 (OpenID)身份与 Domino APIs 和第三方服务建立信任的选项。任何接受 JSON Web 令牌(JWT)令牌和 Domino 的 JSON Web 密钥集(JWKS)的外部服务都可以使用这些身份令牌进行身份验证。这个功能有效地将 Domino 的身份扩展到了第三方服务。
可能利用该身份服务的一些服务包括:
- Okera ,负责的数据治理
- AWSAssumeRoleWithWebIdentity,用于与 OpenID Connect 兼容的身份提供者协同工作的安全凭证
- 保险库,用于对令牌、密码、证书、加密密钥和其他敏感数据进行安全访问控制
- 自定义 API
当与 Domino 健壮的 SSO 功能结合使用时,这些增强使得 Domino 管理员可以更容易地授予或撤销用户访问权,同时限制用户可以从哪里进行连接。Domino 为其客户提供了创建 API 来扩展 Domino 身份的基础,因此它对其企业数据科学工作流有更多的安全性和控制。
关注安全性
Domino 致力于在我们*台的各个方面提供企业级的安全性、控制和可靠性。自从五月份加入 Domino 以来,我关注的一个领域就是建立一个主动的信息安全扫描过程。今天,我很高兴地向大家报告,Domino 已经通过并超过了世界上一些最有安全意识的组织的严格审查。
作为该流程的一部分,我们对内部流程和工具进行了重大改进,以符合企业应用程序监控和安全报告要求,例如:
- Domino 日志可以暴露给兼容 Fluentd 的聚合工具
- 应用健康指标可以集成到普罗米修斯监控系统中
- 容器和依赖项支持漏洞扫描和补救
财富 100 强中超过 20%的公司都是达美乐的客户。与这些公司的 IT 部门密切合作,帮助我们调整了发展路线图,以满足他们支持大规模企业数据科学的独特需求。Domino 4.3 是这种不懈努力的最新成果,它确保满足最苛刻的安全和控制要求,并且经常超出这些要求。
了解更多信息
- 了解达美乐 SOC 2 Type II 认证。
Domino 4.4 解放了数据科学家,以最大限度地提高生产力
原文:https://www.dominodatalab.com/blog/domino-4-4-liberates-data-scientists-to-maximize-productivity
By Bob Laurent, Sr. Director of Product Marketing, Domino on June 21, 2021 in Product Updates
去年 3 月,当新冠肺炎效应刚刚开始影响企业时,数据科学家站在许多公司的第一线,快速重建模型,帮助高管在前所未有的时期导航。现在,随着世界重新开放,公司正在适应新常态,数据科学家再次分析数据,构建(和重建)模型,并帮助进步的公司利用新的数据科学用例,在某些情况下,全新的商业模式。
如果 15 个月前不清楚,现在当然清楚了。数据科学家正在推动世界上最复杂的公司解决世界上最重要的问题。11 月,我写了为什么数据科学家仍然是“21 世纪最性感的工作”,这是在托马斯·达文波特和 D.J .帕蒂尔在《哈佛商业评论》发表这一观点*十年后。Glassdoor 将“数据科学家”列为 2016-2019 年的“全美最佳工作”,在 2020 年初跌至第三位后,在 2021 年又回到了第二位。
数据科学家是特殊的
为什么?他们所做的事情需要独特的技能、见解和经验,这是一项高度复杂的工作,部分是科学,部分是艺术。他们需要深入的业务领域专业知识,还需要使用最新的数据科学工具和技术进行创新的自由和灵活性。他们还需要访问强大的基础设施,包括 GPU 和分布式计算框架,以执行复杂的分析,这是他们日常工作的一部分。
许多公司,尤其是拥有大型数据科学团队的公司,理解这一需求,但不知不觉地给数据科学家设置了障碍,限制了他们的生产力。例如:
- 数据科学家无法获得他们需要的工具和计算,并且经常花更多的时间来解决 DevOps 挑战,而不是进行高效的数据科学工作。
- 他们无法找到并重用过去的工作。数据科学家浪费宝贵的时间在每个项目上“重新发明轮子”,因为数据科学没有既定的标准或最佳实践。
- 模型和模型工件(例如,应用程序/API)需要迭代,但是使用不同的工具、语言和包(以及每种的不同版本)使得很难与其他数据科学家和业务利益相关者协作。
- 当没有一致的工作方式时,将模型投入生产是缓慢而困难的。如果一个模型幸运地进入生产,不一致或不存在的模型监控实践会消耗大量数据科学家的时间。
数据科学家想要的自由和灵活性往往与其坚持的控制和治理相冲突。公司必须做出权衡,因此,数据科学家经常被迫使用功能有限的解决方案,并且不能自由地在手头工作的最佳工具之间切换。
多米诺倡导数据科学家
我们知道,当数据科学家不必考虑如何让技术发挥作用,从而可以专注于手头的业务问题时,他们处于最佳状态。我们的*台一直为数据科学家提供自助工具和可扩展计算,帮助他们提高工作效率。我们相信让他们以自己喜欢的方式工作,这样他们可以更快地开始工作并立即提高工作效率,而不必再浪费时间在开发运维问题上来解决基础架构挑战。
“有了 Domino Data Lab,他们可以自由地做他们需要做的事情,而且他们从来不会对技术有任何疑问——因为他们只是继续做下去。就像音乐家弹钢琴,或者拿起小提琴。”–Topdanmark 机器学习主管 Stig Pedersen
今天,我们自豪地宣布多米诺 4.4。此版本以这一愿景为基础,提供了重新想象的工作空间体验——面向数据科学的下一代数据科学工作台,数据科学家最大限度提高工作效率所需的最重要功能触手可及。你可以把这想象成一架现代 F-35 战斗机的驾驶舱,信息随时可用,飞行员需要的所有最重要的能力都触手可及。
新功能有助于最大限度地提高工作效率
大多数供应商强迫数据科学家进入一个连续的工作流,包括打开一个工作区,完成工作,提交结果,然后在进入下一个任务之前关闭工作区。使用 Domino 4.4 中的持久工作区,数据科学家可以在并行工作流中操作,在并行工作流中可以同时打开多个开发环境,以获得最大的生产率。用户可以根据需要启动、停止和恢复工作区会话(以节省基础设施成本),工作在会话之间持续进行。这确保了他们永远不会丢失工作,并且能够在任何他们想要的时候将他们的工作提交给版本控制。
Domino 自动跟踪实验的所有工件,因此数据科学工作是可再现的、可发现的和可重用的——增加了数据科学团队的吞吐量并降低了监管风险。这些工件被记录为 Domino 文件系统(DFS)的一部分,但许多公司更喜欢使用基于 Git 的集中式代码存储库(例如, GitHub 、 GitLab 、 Bitbucket ),以便数据科学代码可以与其公司 CI/CD 工作流的其余部分集成,从而提高合规性和治理。
Domino 市场领先的再现能力现在通过 CodeSync 得到了增强,因此数据科学家可以在他们业务中使用的现代 IT 堆栈中无缝工作。CodeSync 支持所有的通用 Git 工作流,比如创建分支、提交代码、推送更改等等——所有这些都可以在 Domino 工作区内与您选择的 Git 服务提供商进行交互。这种 Git-first 的体验让用户能够更好地控制复杂工作流的同步和版本控制,并使他们能够轻松地与其他团队成员进行版本控制、基于代码的协作。
数据科学家希望利用来自多个来源的各种不同类型的数据来进行更好的实验。基于云的解决方案需要将数据复制到云中,这带来了安全性和同步问题。在 Domino 4.4 中,我们让连接到外部 NFS 卷变得更加容易,这样数据科学家就可以在 Domino 之外使用更多类型的数据进行更多的实验。而且,他们不必像使用不灵活的云供应商工具那样移动数据。
但是,有时有必要在站点之间移动数据,如果通信被拦截,这将使数据面临风险。我要提到的最后一个特性本身并不是生产力的提高,但它会让数据科学家和 it 团队睡得更香。Domino 4.4 支持传输中的加密和传输层安全性(TLS)——一种保护传输中数据的行业标准方法。
包裹
这些新功能使有经验的数据科学家更容易最大限度地提高他们的工作效率,但它们也使新的和新手数据科学家受益,因此他们可以更快地加入进来,并更快地以有意义的方式做出贡献。我们的新工作空间体验消除了许多新数据科学家在其他*台上面临的关于设置环境、管理库、启动工作空间等的“冷启动”障碍。我们向 IT 团队展示了这一点,让他们意识到他们可以为新用户提供受监管的安全访问,并在适当的位置安装护栏,以防止丢失工作、意外运行和巨额云计算账单。
现有的 Domino 客户现在可以升级到新版本。如果您不是 Domino 客户,请考虑一下 Forrester Consulting 在分析 Domino Enterprise MLOps Platform 的总体经济影响时得出的结论。
Domino 4.6:模型驱动业务的更大信心和灵活性
By Bob Laurent, Sr. Director of Product Marketing at Domino on September 16, 2021 in Product Updates
在过去五年中,数据科学变得越来越复杂:
-
数据科学家必须处理的数据量呈指数级增长
-
数据科学家使用的技术已经变得如此计算密集,以至于他们需要多核 CPU、GPU 和分布式计算
-
人们依赖模型来支持最关键的业务决策,每天都有大量的预测
尽管数据科学家曾经能够在笔记本电脑上本地开发和运行代码,但如今他们通常需要更多基础架构才能取得成功。更多的基础架构通常意味着对复杂开发运维工作的更多要求,以及数据科学家的时间浪费。而且,随着越来越多的公司变得以模型为导向,数据科学家发现他们需要分配更多的时间来监控生产中的模型,否则就有可能让他们的首席信息官以各种错误的理由登上华尔街日报的封面。
Domino 4.6 简介
幸运的是,Domino 用户可能无法理解他们的同行每天面临的基础设施和模型监控挑战。我们在 Domino 4.4 中介绍了我们的下一代数据科学工作台,今天我们将推出 Domino 4.6 ,它提供了企业级模型监控的附加选项、分布式计算的选择以及许多其他创新和改进,我很高兴能够与大家分享。您马上就会看到,Domino 4.6 提供了:
-
对运营您业务的模型更有信心,在每天数百个功能和数十亿次预测的规模上
-
提高灵活性数据科学家可以自助访问手头任务/项目的最佳工具和基础设施,包括 Ray.io 和 Dask 分布式计算
-
无缝的用户体验以一致、完全集成并符合最佳实践的方式完成数据科学家需要完成的重要工作
企业级模型监控
最*由韦克菲尔德研究公司和多米诺数据实验室 进行的一项 调查显示,82%的美国大公司(年收入超过 10 亿美元)的数据高管表示,他们的公司领导层应该担心糟糕或失败的模型可能会给公司带来严重后果。然而,DataIQ 最*的另一项 调查显示,* 27%的商业领袖依赖于特定的流程进行模型监控,或者只是不知道模型是如何被审查的。只有 10%的人使用自动化模型监控功能来帮助他们确保运行关键业务功能的模型反映当今快速变化的业务环境。
正是考虑到这些挑战,我们很兴奋地宣布我们新的 Domino 弹性监控引擎。这一突破性的技术进步使 多米诺模型监视器(DMM) 能够在数十亿次每日预测中计算数据漂移和模型质量——是以前版本的 100 倍以上!
DMM 现在可以无限扩展模型监控容量,以支持最苛刻的监控要求。它可以接收和分析来自亚马逊 S3 和 Hadoop 兼容文件系统(HCFS)的海量数据,其中包括 Azure Blob Store、Azure Data Lake (Gen1 和 Gen2)、谷歌云存储和 HDFS。不需要在存储位置之间复制数据,因此可以立即分析数据,而不用担心版本控制、安全性和其他可能会质疑模型准确性的问题。
如果您一直在推迟添加自动化模型监控,您会危及您公司的声誉、竞争力,最重要的是,它的底线。这是另一个诱因。有了 Domino 4.6,DMM 可以与我们的核心产品一起安装在任何环境中,包括所有主要的云*台(AWS、GCP 和 Azure),如果您更喜欢的话,还可以安装在本地。通过单点登录(SSO)和跨整个 Domino Enterprise MLOps *台的其他集成,用户可以获得从模型开发到部署再到监控的无缝体验。
分布式计算选择
对于数据科学家来说,为特定工作选择和使用最佳工具的能力极其重要。这就是为什么多年来 Domino 的一个指导原则是拥抱最好的开源和商业工具、包、语言、数据源等等——并以消除典型 DevOps 挑战的方式将它们合并到 Domino 中。这一理念延伸到了分布式计算环境,在这种环境中,我们已经支持了短暂的 Spark 一年多,为数据科学家提供了一种极其简单的方式来将 Spark 添加到他们的工作环境中。
在 Domino 4.6 中,我们增加了对按需和 Dask 的支持——这是开源社区中出现的两种最热门的分布式计算形式。如果你不熟悉分布式计算,它允许数据科学家处理大量数据,用于机器学习和其他复杂的数学计算,如深度学习。这两个框架都利用了最先进的机器学习库,可以轻松地扩展单机应用程序,以解决更强大的机器学习问题,而对底层代码几乎没有或根本没有更改。
Ray 的核心是一组核心低级原语( Ray Core ),它们为分布式训练、超参数调整和强化学习提供了巨大的价值。Ray 已经被 许多开源 ML 框架 采用为基础框架,这些框架现在有社区维护的 Ray 集成。Dask 还提供了许多与现有数据科学库的集成,使其成为并行化现有基于 Python 的数据科学代码的最佳选择,只需进行最小的调整。对于使用 Pandas 和 NumPy 库或 Scikit-learn 训练接口大量操作大量数据的计算来说,这是一个特别好的选择。更多关于 Ray 和 Dask 相比 Spark 的优缺点的信息,请查看 最*的博客 。
在 Domino 中创建工作区时,添加 Ray 和 Dask 集群(或者 Spark)非常容易。用户所要做的就是指定一些参数,比如工人的数量和每个工人的能力。从那里开始,Domino 将在后台完成所有繁重的工作,在底层 Domino 基础设施上建立集群,建立网络和安全规则,并在集群的整个生命周期中自动管理集群。不需要 DevOps 经验!
Domino 在真正的企业规模上对三个最流行的分布式计算框架的免开发*台支持是行业首创。这是我们对数据科学团队承诺的一部分,让他们能够为手头的工作选择最佳框架(和一般工具),而不局限于其他*台规定的单一选择,也不需要依赖 It 来创建和管理集群。
更多激动人心的企业 MLOps 功能
我们感到自豪和荣幸的是,超过 20%的财富 100 强企业依靠 Domino 来帮助他们克服基础设施摩擦,更轻松地协作,并帮助更快地将模型投入生产。但随之而来的是,我们有责任继续创新,以满足我们企业客户的许多独特需求。
Domino 4.6 中的其他特性包括:
-
亚马逊 EKS 的多米诺认证。我们已经将亚马逊的托管 Kubernetes 产品 【亚马逊 EKS 整合到我们高度安全、经过全面测试和性能优化的“认证”Domino 产品系列中。在这个版本中,我们让云原生客户能够利用亚马逊 EKS 以最高的信心和操作性能运行 Domino。他们已经在人员培训、建立基础设施管理最佳实践等方面进行了投资。都可以用来简化 Domino 的安装和未来的升级。
-
Git 库创建&浏览。在 Domino 4.4 中,我们宣布用户能够 将数据科学代码 与 Git 支持的存储库(例如 GitHub、GitLab 和 Bitbucket)同步,并使他们的工作与现有 CI/CD 工作流保持一致,以改善合规性和治理。我们将这种能力提升到了一个新的水*,为创建新的 Git 存储库提供了原生支持。用户可以上下浏览 Git 树的内容并查看提交历史——所有这些都不需要离开熟悉的 Domino GUI 环境。
-
用快照读/写 Domino 数据集。 Domino 数据集 在整个 Domino *台上提供高性能、版本化和结构化的文件系统存储。用户现在可以创建“快照”——一个项目的大量数据的精选集合——并与同事无缝共享,以保持实验的可重复性。
包裹
Domino 4.6 是大量用户研究和开发工作的顶点,我迫不及待地想让您使用它。如果您是现有的 Domino 客户,可以立即升级到 Domino 4.6。如果没有,您可以在为期 14 天的免费试用中体验 Domino 提供的所有企业级多点操作功能。
Domino 5.1 简化了对数据源的访问,从而提高了建模速度
建立一个伟大的机器学习模型通常始于获取关键数据——关于临床试验中的患者、拖欠的贷款、个体商店的交易等。尽管人们大肆宣传要创建一个“数据湖”来存放公司的所有数据,但对大多数公司来说,现实情况是数据通常位于各种不同的位置,包括内部和云中。而且,在拥有许多不同部门、不同需求和不同存储要求的大型组织中,这些位置的数量增长很快。
这就是为什么我们在 Domino 5.1 中为更多种类的数据源添加了连接器。今天发布的这个版本建立在我们在一月份将 Domino 5.0 推向市场的创新之上,为我们的许多客户提高了模型速度。通过消除常见的 DevOps 障碍,包括需要编写代码来安装驱动程序和特定库,我们使数据科学团队更容易访问重要数据。
它是如何工作的
上个月,Andrew Coleman 写了一篇详细的博客,解释数据科学家如何使用预建的连接器作为基于表格和基于文件的数据的一致访问模式的一部分。在 Domino 5.0 中,我们为雪花、亚马逊 S3 和亚马逊红移开发了原生数据源连接器。
| | | |
今天,作为 Domino 5.1 发布的一部分,我很兴奋地宣布为微软 Azure 数据湖存储、谷歌云存储、 Oracle 数据库、微软 SQL Server 、PostgreSQL和 MySQL 增加了六个连接器:
| | | |
| | | |
用户不用花时间编写访问数据的脚本,只需进入 Domino 中的“data”部分,单击“Connect to External Data ”,选择合适的数据源,填写基本信息,包括他们的登录凭证。就是这样!连接属性作为访问密钥和秘密密钥安全地存储在与 Domino 一起部署的 Hashicorp Vault 的实例中。
Domino 5.1 还简化了对通用外部数据卷(EDV)的访问,以便在远程文件系统上装载和访问数据——允许数据科学家使用更多类型的数据进行更好的实验。Domino 列出了使用每个注册 EDV 的项目,以深入了解数据是如何使用的,以及用于什么目的。
结论
如果你还记得的话,我们现在已经为所有三个主要的云提供商以及雪花提供了预构建的连接器。此外,如果有一个数据源我们还没有为其构建本机连接器,用户可以创建新的连接器并与同事共享,以帮助民主化对重要数据的访问。
关于如何在 Domino 中配置数据源的详细信息,可以查看我们的文档。如果你错过了我们的 Domino 5.0 发布会,Atul Gawande(著名外科医生、作家和性能改进专家)和 Najat Khan 博士(首席数据科学官和强生公司让桑制药公司研发战略&运营全球负责人&,你可以在这里观看重播。
Domino 5.3 提高了企业数据科学的速度和影响
当今最成功的组织将人工智能和机器学习模型置于其业务的核心,通过加速创新、改善客户体验和做出更快、更少偏见的决策来创造竞争优势。构建人工智能驱动的应用和体验的数据科学团队需要跨混合、多云和内部环境灵活访问最新工具和任何数据。成功构建推动数字化转型的模型还需要企业和政府所期望的安全性、治理和合规性,而不管底层基础架构如何。
今天,我们很自豪地宣布 Domino 5.3 的正式上市——这是一个强大的版本,直接解决了这些需求,以提高大规模数据科学的速度、质量和影响。这些新功能对于那些希望在迎接新的、更大的挑战时变得更加模型驱动的公司来说意味着什么。
跨混合/云计算环境扩展数据科学
企业 需要混合和多云计算数据科学能力 以在组织运营和存储数据的任何地方扩展模型驱动的结果—跨云、内部基础架构、部门和区域。事实上,Forrester 最*对人工智能基础设施决策者的调查 表明了这一需求——71%的人认为他们的人工智能*台对混合云的支持对于执行他们的人工智能战略非常重要,29%的人认为这已经非常重要。
我们 在 6 月份宣布了 我们的混合和云计算架构“Nexus”,今天我们很兴奋地为选定的 Domino 客户提供私人预览。Nexus 是一个单一*台,允许您在任何云、区域或内部的任何计算集群上运行数据科学和机器学习工作负载。它统一了整个企业的数据科学孤岛,因此您可以在一个地方构建、部署和监控模型。
参与设计评审或获得演示的 Domino 客户对它的潜力感到非常兴奋:
- 保护数据主权。Nexus 不会浪费时间(和金钱)跨区域移动数据来访问计算资源,而是将计算带到数据所在的位置,这是一个强大的范式转变,有助于应对复杂基础设施中的数据重力。通过按地区限制对数据的访问,您可以更好地控制数据本地化法规的实施,例如 GDPR。
- 减少计算支出。 Nexus 将允许用户选择工作负载的处理位置,因此您可以以尽可能低的成本获得合适的性能。例如,您可以将计算密集型工作负载重定向到内部基础架构(例如,GPU 硬件集群),以降低每月云基础架构成本。
- 面向未来的基础设施。没有一家公司希望被局限于单一的云供应商,尤其是当 最*的中断 暴露出重大的业务风险时。有了 Nexus,您就可以放心地实施混合/多云战略,从而保持一致的运营。
您可以获得更多关于 Nexus 的信息,观看演示,甚至可以在这里 请求成为我们私人预览 的一部分。
更轻松地访问关键数据源
15 年来,我们的行业一直在谈论能够找到和使用数据的挑战,今天,这仍然是一项令人恐惧的工作,浪费了数据科学家大量的时间。这是因为大多数解决方案都专注于在数据库级别解决问题,使用数据仓库、数据目录和其他独立产品为多种类型的用户服务
在 Domino 5.0 中,我们引入了我们独特的方法,将数据目录集成到数据科学家已经花费了大部分时间的 Domino *台中。高级搜索功能、集成的数据版本控制和预建的连接器相结合,加快了模型速度,从而最大限度地提高了数据科学团队的工作效率。
作为业界最开放、最灵活的*台,Domino 已经包含了最流行数据源的连接器。Domino 5.3 增加了连接到 Teradata 仓库和查询亚马逊 S3(表格)数据库的能力。对于使用 Trino 集群的客户,Domino 5.3 还包括一个 Trino 连接器,可以连接到 其他数据源 ,包括 Cassandra、MongoDB、Redis 和 Delta Lake。
| | | | |
| | | | |
| | | | |
我们连接数据的独特方法消除了与安装驱动程序、库等相关的常见 DevOps 障碍。使用 Domino,您只需选择想要使用的连接器,并填写基本信息,包括您的登录凭证。连接属性作为访问密钥和秘密密钥安全地存储在与 Domino 一起部署的 Hashicorp Vault 实例中。我们的解决方案还简化了部署和监控模型的流程,并追溯到用于模型训练的原始数据。
要了解更多信息,包括我们如何轻松获取您需要的关键信息的演示,请查看这个 博客 。
使用 GPU 实现深度学习
尖端、现代、模型驱动的企业已经在使用多米诺骨牌和先进的深度学习技术来实现医学突破,分析来自网络攻击和欺诈的新威胁,并改善客户关系。例如:
- 强生的让桑制药公司使用多米诺骨牌将深度学习模型的训练速度提高了 10 倍,通过全切片图像分析更快、更准确地诊断和描述癌细胞。
- 欧洲一家大型保险公司 Topdanmark 在 Domino 中使用自然语言和图像处理技术来自动处理索赔,让客户的生活更快地回到正轨。
Domino 已经为训练高级深度学习模型提供了最好的环境。借助 Domino 5.3,我们可以让模型驱动的企业大规模开发和生产深度学习,而无需开发运维技能。
Domino 5.3 使得部署的模型可以使用 GPU 进行模型推理,而不是必须依赖较慢的 CPUs 因此,实现了深度学习和其他大规模并行计算应用程序的显著性能提升。 研究 表明,在类似的成本下,GPU 对于深度学习应用的推理速度是 CPU 的 5 到 15 倍。
通过结合 GPU 进行模型推理,公司能够部署依赖于先进框架的模型,如【tensor flow】和高性能 GPU 加速*台,如英伟达 V100 和英伟达 T4。他们还可以利用开源社区中发生的快速创新来整合和部署强大的算法(例如, BERT on 抱脸 )和预先训练好的图像识别框架(例如, OpenMMLab 检测工具箱 )。
控制和审核对敏感数据的访问
在高度监管的生命科学行业,公司需要绝对确保在临床试验的任何阶段都没有引入患者偏见。能够控制和审核谁被授权在研究过程中查看各种数据对于分析的完整性至关重要。
Domino 5.3 为依赖 Domino 作为现代统计计算环境的制药公司提供了新的法规遵从性和治理功能。不可更改的审计追踪概述了谁被授权访问项目中的数据,以遵守 GxP 关于临床试验监管提交的指导原则。
用 Domino 5.3 提高速度和影响力
Domino 5.3 提高了企业数据科学的速度和影响,具有市场领先的能力来统一混合和多云基础设施,民主化数据源,并推动深度学习。要了解更多有关我们如何在混合云和云计算中释放数据科学的信息,请查看我们新的 Nexus 网页 ,其中包括一个 Nexus 演示。并且,发现Domino 5 的所有强大功能和独特优势。 在 LinkedIn 中关注我们,获取关于新 Domino 5.3 博客的更新以及我们计划在 11 月举行的虚拟活动的详细信息,您一定不想错过。
多米诺+埃森哲携手加速临床研究
原文:https://www.dominodatalab.com/blog/domino-accenture-accelerate-clinical-research-together
By Thomas Robinson, VP of Strategic Partnerships & Initiatives, Domino on December 02, 2020 in Company Updates
在这个疫情的关键时期,人们对如何发现和开发药物治疗的兴趣增加了——人们对科学背后的科学感兴趣。
我们在 Domino Data Lab ,领先的开放式企业数据科学管理*台的提供商,受到超过 20%的财富 100 强企业的信任,加入了埃森哲的 INTIENT Network 合作伙伴生态系统,该生态系统旨在与软件和生命科学组织合作,加速药物发现和开发工作,以改善患者结果。这意味着现在,通过 FDA 认证的 Accenture INTIENT 临床管理分析环境构建在 Domino 数据科学*台上,作为核心工作台,为制药公司提供端到端的临床试验解决方案。
INTIENT 网络是埃森哲 INTIENT *台的组成部分。它支持整个生命科学企业的洞察力和协作,以提高从药物发现到临床研究的生产率、效率和创新。埃森哲与选定的独立软件供应商(ISV)和组织(包括 Domino 数据实验室)合作,将其技术和内容集成到 INTIENT 临床产品套件中。在 Domino 数据科学*台的帮助下,生命科学团队现在可以通过协作和完全可再现性成功测试数万个假设。
正如许多人现在通过观看和等待新冠肺炎疫苗的开发而知道的那样,在开发一种治疗方法时,需要进行大量的数据建模和统计分析。需要简化对这些数据的管理。为了解决这个问题,Domino *台现在将在一个通用的信息学框架内提供给生命科学公司,该框架处理核心基础设施需求,如数据接收和清理、安全和 IP 管理、请求管理工作流、企业搜索、数据治理和协作环境。通过在 INTIENT 内部提供 Domino 数据科学*台,我们将与全球健康和生命科学研究机构在临床试验工作流程方面的专业知识带给了一批新的制药公司,推动研究创新。客户获得了一个集中化的研究*台,该*台通过技术和工具选择提供了安全性和可扩展性。
我们相信,我们在生态系统中的参与以及与 INTIENT 的集成将为科学家提供一个至关重要的工作台,支持他们解释药物开发中产生的越来越多的丰富多样的数据。
Domino *台集中了整个企业的数据科学工作和基础设施,用于协作模型开发、培训、部署和整体生命周期管理——具有敏捷性和效率。有了 Domino,科学家和临床研究人员可以更快地创新,团队协作,并在安全性、监督和合规性方面建立在以前的工作基础上。数据科学领导者可以更好地了解项目,IT 团队可以管理和控制基础架构的使用和成本。有关该*台的更多信息,请访问网站。
Domino 和 DataRobot 一起提供更多价值
原文:https://www.dominodatalab.com/blog/domino-and-datarobot-deliver-more-value-together
By Karina Babcock and Dan Ganancial on March 08, 2018 in Product Updates
我们很兴奋地宣布 DataRobot 成为 Rev 的白金赞助商,多米诺数据科学拉力赛 将于 5 月 30 日至 31 日在三藩市举行!为了提供更多关于 Domino 和 DataRobot 之间合作关系的背景,下面是 DataRobot 全球合作伙伴营销总监 Dan Ganancial 写的一篇文章,最初发布在 DataRobot 博客上。
今天的预测分析项目需要大量的协作和团队合作才能成长和成功。然而,有限的资源——例如没有足够的可用的和熟练的数据科学家以及不提供高度自动化的工具——正在阻碍着即使是最优秀的团队。这是伙伴关系和协作介入解决这些限制的时刻,因为公司联合起来提供确保成功所需的资源。就像俗话说的,“三个臭皮匠,顶个诸葛亮。”两个预测分析*台协同工作比一个*台单独工作要好。这种合作体现了两家公司如何实现*衡,并在共享项目和机会方面同步合作。
DataRobot 拥有来自世界各地的各种合作伙伴,并重视这些联系。一个有效和成功合作的例子是与 Domino 数据实验室的合作。DataRobot 和 Domino 共同提供了一种独特的工具组合,使预测分析团队、数据科学家和其他领域专家能够提高工作效率,并提供项目成功所需的资源。这种合作体现了两家公司如何实现*衡,并在共享项目和机会方面同步合作。他们相互取长补短,并基于他们的共同点成功地联合起来。
预测建模变得更加简单
预测分析的一个主要限制是手动创建模型,这是一个耗时且充满挑战的过程,阻碍了许多公司的进步和生产力。Domino 正在申请专利的可再现性和协作引擎为您提供了一个协作编码环境,在这个环境中,您的数据科学团队可以一起工作来准备数据、开发或使用重要的模型,以及部署您的模型。
接下来是 DataRobot。我们提供自动化机器学习,帮助您的团队快速开发几十个模型来考虑,同时提供理解这些模型如何工作的透明度。DataRobot 内置的高级透明度和可视化功能使技术熟练的用户能够准确地看到某个模型是如何执行的,以及如何更好地理解底层数据。DataRobot 在其排行榜上按准确度对所有模型进行排名,允许您快速评估模型。DataRobot 的高级自动化确保您可以找到最适合手头任务的型号。
一旦选择了模型,就有多个部署选项可供选择。DataRobot 提供了三个选项,Domino 允许 API 端点发布< /a >。Domino 还提供了额外的项目协作和共享,这是一种很好的方式,可以用每个参与人员的输入来完成项目。将选定的模型从 DataRobot 引入 Domino 为更多的协作和进一步的细化提供了机会。
使用 Domino 和 DataRobot 时的端到端工作流:
- 准备数据,进行手工特征工程,并在 Domino 中构建模型
- 将数据发送给 DataRobot,以自动构建、验证和调整更多模型供用户考虑
- 模型验证和模型洞察可以在 DataRobot 和 Domino 中完成
- 可以对模型进行比较,然后使用 DataRobot 部署最佳、最准确的模型,或者通过 Domino 进行额外的项目协作和共享
- 使用 Domino 上的 Shiny 和 Flask 应用程序,可以将模型预测转化为可视化和业务决策,并且可以在 Domino 中部署完整的管道,这可以通过 API 获得
几个主要企业已经在一起使用 Domino 和 DataRobot。Domino 允许这些组织的数据科学家编写用于提取数据的脚本、特性工程,然后保存文件或使用 DataRobot API 以编程方式使用 DataRobot 构建模型。然后,数据科学家可以在 DataRobot 中探索可能模型的排行榜,发现数据中揭示的重要模式。他们还可以调整如何将预测转化为商业决策,并创建有洞察力的可视化。
从那里,数据科学家可以在 Domino 的编码器友好的笔记本环境中迭代地手工调整最佳模型,这提供了无限的库支持、版本控制和完全的可再现性——一个真正的端到端数据科学*台。
Domino Data Lab 和 DataRobot 使数据科学家能够加速模型的开发和交付。通过这种协作,两种解决方案的用户都能够获得快速模型开发、自动化机器学习、无缝协作和一键式模型部署等关键功能。这极大地提高了生产率,消除了预测建模过程中的瓶颈。
关于作者:
Dan Ganancial 领导 DataRobot 的合作伙伴营销,他负责推动与联盟和渠道合作伙伴的联合营销计划。Dan 是一名营销专家,在合作伙伴、产品和战略营销方面拥有超过 10 年的经验。在他的职业生涯中,他担任过与咨询销售、业务开发和营销相关的多个职位,在推动客户和收入增长方面取得了骄人的成绩。在推特上关注他: @datarobotdan
Domino 和 MathWorks 合作,通过增强 MATLAB 和 Simulink 云产品加速 R&D
MathWorks 从 1984 年开始加速数据科学与工程。如今,他们的【MATLAB】和Simulink产品是世界上最简单、最高效的工程和科学设计环境,拥有强大的算法和特定领域的模型。它的 400 多万用户社区正在积极地将模型整合到汽车、航空航天和能源等垂直行业的工作流中,以提高生产力,并将重点从*凡的工作转移到创造价值的智力工作上。
成为模型驱动型企业的挑战
将模型整合到产品和业务流程的核心将在未来十年推动前所未有的增长,让模型驱动的企业能够以更准确的预测击败竞争对手。在公司开始试验并慢慢将模型转移到生产场景的这些年里,出现了许多反复出现的挑战:
-
随着多个数据科学小组选择不同的技术堆栈和数据科学语言(如 MATLAB、Python 和 R),跨团队共享知识受到*台差异和缺乏集成的限制。
-
复杂的数据科学工作需要使用强大的工具和计算资源。一台具备处理深度学习等任务所需处理能力的工作站很快就会变得昂贵——一个多 GPU 桌面可能会高达数万美元。
-
金融和医疗保健行业的监管机构需要了解模型是如何开发的,以及使用了哪些数据和代码来创建它们。这需要对 IT 治理、安全性和可再现性进行严格控制。
Domino + MathWorks:支持可伸缩的基础设施和共享知识以加速模型开发
Domino Data Lab 和 MathWorks 合作的目的就是为共同客户解决这些挑战。我们本周在 MATLAB EXPO 上发布的合作伙伴声明建立在两家公司在网络优先体验中提供最佳集成的成功基础之上。
我们两家公司的使命是加速数据科学工作的开发和部署,同时加强协作和治理。对于 MathWorks 的 MATLAB 和 Simulink 用户来说,Domino 合作伙伴关系的好处是显而易见的。
知识共享和工具的广泛支持使数据科学团队能够在以往工作的基础上,与同行自由协作:
- 从任何地方都可以轻松访问 MATLAB,包括所有主要的云*台。用户通过浏览器访问他们的工具,省去了购买只在工作时间使用的昂贵工作站的需要。
- Domino 中的共享数据集使数据发现变得更加容易,并允许团队协作进行多种建模工作。
- 改善与其他工具(JupyterLab、RStudio、SAS 等)用户的协作。)携手解决最棘手的业务挑战。
- 自动版本控制,因此可以随时复制 MATLAB 和 Simulink 中的项目,以支持审计和合规性要求。
灵活的基础架构和自助式沙箱为数据科学团队提供了强大的能力和灵活性,而不会牺牲 IT 治理。
- 对 NVIDIA GPUs 和其他强大计算的大众化访问(例如,更多 CPU 内核、大型 RAM 机器和 Spark 和 Ray 等框架上的分布式工作负载)加速了从标记数据到训练模型的 ML 相关任务
- Simulink 和 Simscape 中的仿真和建模效率更高,这得益于它能够支持包含数十个 CPU 内核的容器。
- 与 Domino 的批处理执行无缝集成,用于预定的培训和启动器,以便与同行共享 MATLAB 和 Simulink 算法。
最重要的是,MathWorks 的半年发行版可以在整个组织中即时推出,而无需在整个企业的桌面机群中安装。向 Domino *台添加新的 MATLAB 发布映像允许用户在版本之间无缝切换,从而允许用更新的版本验证现有模型。。
具有推动市场潜力的真实世界影响
我们的合作仍处于早期阶段,但我们已经看到了市场的热情。总体而言,客户欣赏这些共享功能,特别是:快速获得答案。IT 和数据科学领导者重视硬件和支持成本节约。同时,Domino 的项目跟踪工具为他们提供了对项目进度和支出的清晰洞察。
洛克希德·马丁公司通过使用 Domino 和 MathWorks 集中整个企业的工具,并选择 NVIDIA 作为其在高性能计算领域的选择,为 300 名数据科学家带来了超过 2000 万美元的数据科学效率和成本节约。借助这一三管齐下的解决方案,it 简化了协作和知识共享,同时自动化了阻碍数据科学家工作效率的手动开发任务。
一家全球性的制药公司加快了与癌症和其他慢性和威胁生命的疾病的斗争,成功地测试了数万个假设,并具有完全的重现性,同时加快了向 FDA 提交测试结果的速度。它能够打破在 MATLAB、Python、R 和 SAS 中工作的 500 多名数据科学家之间的孤岛,并更快地生产模型,以将发现发布给模型输出的跨职能“消费者”——所有这些都在 Domino *台中完成。
我们期待实现更多功能,并帮助客户推动模型驱动的创新。
为什么“云”不再足够:Domino 在 NVIDIA GTC 展示混合/多云*台
原文:https://www.dominodatalab.com/blog/domino-at-gtc-sept-2022
更新日期:2022 年 9 月 23 日:参见我们在英伟达 GTC 发布的消息:“Domino 数据实验室宣布与英伟达合作推出新的生态系统解决方案,以加速混合和多云端 MLOps 之旅”
人工智能和机器学习是否像最*的 协议 文章所暗示的那样,“正在远离云端”?这是最*一个流行的问题,最* VentureBeat 的一篇文章 中也提出了这个问题,文章指出“云生态系统最大的弱点之一是难以抓住本地机会。”另一个数据点与前两个数据点一致:挑战性的宏观经济条件和日益激烈的竞争使得网飞这样的公司——曾经是通过采用云来扩大规模的典型——重新评估云成本(正如《华尔街日报》最*报道的)。
Domino 与 NVIDIA 和 Ventana Research 合作编写了一份新的白皮书,探索未来的变化。在 首席数据和分析高管的 5 大 AI 考虑事项 、 中,我们探讨了下一代 AI 基础设施的关键因素,以有效管理复杂、混合/多云环境中的 AI/ML 工作负载。这些也是下周在 2022 年 9 月 19 日至 22 日 NVIDIA 的免费虚拟 GTC 会议上 Domino 会议的核心话题。
混合/云计算数据科学控制成本,提升性能
云的采用——特别是可扩展的按需计算的即时可用性——推动了机器学习(ML)的民主化。但随着数据科学领域的发展,云计算本身的承诺不再满足训练计算密集型人工智能和深度学习模型的复杂公司的需求。 凯特凯耶来自礼宾 备注:
“云计算不会去任何地方,但一些公司正在将他们的机器学习数据和模型转移到他们自己内部管理的机器上。采纳者花更少的钱,获得更好的性能。”
Domino 的 Kjell Carlsson 补充道,模型训练计算需求会根据数据量、模型类型、超参数优化的程度 — 以及数据科学家的工作时间表而大幅波动。一种混合方法将内部计算与“突发”到云以获得额外容量的能力相结合,为不同工作负载提供了规模合适的环境的终极成本控制措施。
数据主权和模型延迟推动了数据和计算的共存
控制计算成本并不是这一趋势的唯一驱动力。Ventana Research 指出,数据输入和输出引入了另一个成本考虑因素,因为提取和分析 1pb 的数据可能会花费高达 50,000 美元。除此之外, 数据主权 和隐私法规通常会将数据集锁定在单个地理区域内,同时需要考虑数据重力性能(例如在分布式或边缘用例中协同定位数据和计算以进行实时预测)。正如 Ventana Research 的 SVP &研究主管大卫·门宁格所说:
“到 2026 年,几乎所有的跨国组织都将投资本地数据处理基础设施和服务,以减轻与数据传输相关的风险。”
Domino 在 GTC 英伟达展示混合/多云*台
去年六月, Domino 宣布了 其新的 Nexus 混合企业 MLOps *台,由 NVIDIA 提供支持。从那以后,Domino 一直在努力工作,以实现无缝混合/多云 MLOps,我们渴望在 NVIDIA GTC 大会上展示令人兴奋的创新,这是人工智能和元宇宙时代的领先开发者大会。
多米诺是钻石级赞助商 ,在 NVIDIA GTC,从 9 月 19 日至 22 日的免费虚拟会议。不要错过我们的会议:
AI Anywhere:Johnson 如何在混合和多云计算环境中扩展数据科学
9 月 20 日星期二下午 2:00-2:50 PDT
通过基于聊天的问答机会,直接与来自 Johnson & Johnson、Domino 和 NVIDIA 的专家进行实时交流。强生公司云项目办公室全球负责人 Vikash Varma 将与 Domino 战略合作伙伴和企业发展副总裁托马斯·罗宾逊以及 NVIDIA 业务开发、医疗保健和生命科学总监兼全球负责人 Rory Kelleher 一起,深入探讨在混合和云计算环境中协调数据科学工作负载的关键考虑因素。点击此处查看会议点播。
面向混合云未来的下一代人工智能基础设施(与 NetApp 和 NVIDIA 共同展示) 按需提供 9 月 19 日
Domino、NetApp 和 NVIDIA 一直在合作,为企业范围的数据科学治理、跨团队协作和运营效率提供所需的人工智能卓越中心和整体解决方案。我们将展示我们的最新解决方案,以帮助在混合环境中实现无缝数据科学和数据管理,因此不要错过与产品专家的这次会议。点击此处查看专题讲座点播。。
想知道更多我们将在 NVIDIA GTC 发布的预览吗?下载 Ventana Research 的 首席数据和分析高管的 5 大 AI 考虑事项 ,了解在混合/多云中扩展企业数据科学的关键考虑事项。
多米诺联合创始人讨论为什么模型运行世界
原文:https://www.dominodatalab.com/blog/domino-co-founder-discusses-why-models-run-the-world
By Mac Steele, Director of Product, Domino Data Lab on August 21, 2018 in
如果软件吃掉了世界,模型将会管理它。
Domino 联合创始人 Matthew Granade 最*在华尔街日报合写了一篇文章,题为“模特将主宰世界”这篇文章呼应了多米诺的观点,即每家公司都将很快依靠模型运行,否则将面临生存威胁。
今天的许多行业领导者已经在模型上运行。他们明白,数据科学的成功来自于建立新的组织能力,而不仅仅是银弹算法或雇用独角兽。同样的动态也激发了人们对 Domino 五年前帮助创建的数据科学*台空间的浓厚兴趣。我们很高兴这个想法正在成为主流!
以下是文章的简短摘录:
马克·安德森的文章“为什么软件正在吞噬世界”于 2011 年 8 月 20 日发表在本报上。安德森的分析是有先见之明的。他指出的公司——T2、网飞、亚马逊、Spotify——确实蚕食了他们的产业。较新的软件公司——滴滴、Airbnb、Stripe——也参与进来。今天,大多数行业领先的公司都是软件公司,并不是所有的公司都是这样开始的。例如,Aptiv 和 Domino's Pizza 是其所在行业的长期领导者,它们采用软件来保持或扩大其竞争优势。创新公司的投资者现在在问接下来会发生什么。我们相信一个新的、更强大的商业模式已经从它的软件前身发展而来。这些公司构建其业务流程,将基于“闭环”数据的持续学习模型置于其工作的中心。当构建正确时,他们会创建一个强化循环:他们的产品变得更好,允许他们收集更多数据,这允许他们建立更好的模型,使他们的产品更好,并继续前进。这些都是模型驱动的业务。它们是由各行各业的在职者和初创者创造的。如果软件吃掉了世界,模型将会管理它。阅读全文(注:需订阅)。
在 Domino,我们正在构建一个*台来支持模型驱动的业务。如果您有兴趣了解更多,请阅读我们最*的白皮书,了解各行各业的组织如何将模型置于其业务核心的详细信息。
Domino 数据实验室和 Alexander Thamm 在数据和人工智能夏季会议上推出数据科学之旅加速器
Domino Data Lab 和Alexander ThammGmbH[at]是德语国家数据驱动创新和商业模式战略开发和实施的领导者,将于今天在 Alexander Thamm 的数据和人工智能夏季会议上首次推出独家联合服务产品——数据科学之旅加速器(DSJA)。
旨在帮助德国、澳大利亚和瑞士的客户加快建立模型驱动的竞争优势,DSJA 将 Domino 的企业 MLOps *台与 Alexander Thamm 的数据科学和人工智能咨询专业知识相结合,提供一套涵盖数据运营和数据科学生命周期的基础元素,企业可以在不牺牲数据科学或 IT 团队需求的情况下扩展数据科学,以满足严格的数据隐私法规的需求。
打造 DACH 梦之队
虽然大多数公司了解数据科学的前景,但知道从哪里开始是一项挑战。根据商业应用研究中心 的 最*的一项研究,数据运营和 MLOps 被广泛认为是解决常见 ML 挑战和问题的相关概念,但只有 50%已经使用 ML 的公司开始实施它们。
Domino Data Lab 允许数据科学和 IT 团队使用其企业 MLOps *台更快地开发和部署更多模型,从而帮助公司成为模型驱动的公司。今天,超过 20%的《财富 100 强》信任 Domino 来帮助他们克服实验数据科学的共同挑战:不灵活的基础设施、浪费的工作和生产陷阱。
[at]已经为 100 多家客户完成了超过 1,500 个项目,涵盖 5,000 多个使用案例,采用了久经考验的咨询方法:对当前数据能力进行基准测试、制定路线图、设计数据运营模型以及执行数据科学项目。Domino 和[at]共同致力于使用 Domino 的企业 MLOps *台,为德语市场和关键垂直市场(汽车和工程、金融服务、保险和制药)的客户快速定制数据科学解决方案。
关于 Alexander Thamm 的数据& AI 夏季大会 2022
数据&人工智能夏季会议 是为期一天的活动,来自人工智能、数据科学、机器学习和数据工程等领域的专家和公司交流有关当前技术和未来趋势的信息。目的是将德国和欧洲的数据社区联网,以便学习经验、传递知识和交流关于未来发展的想法。
有兴趣了解更多信息吗?如果你正在慕尼黑参加 AT 的数据和人工智能夏季会议,Domino 数据实验室是白金赞助商,并将在会议上展示 DSJA。不能按时到达吗?点击此处下载我们的解决方案简介,敬请关注我们的最新消息!
在 DataIQ 100 中命名的 Domino 数据实验室的数据科学布道者
原文:https://www.dominodatalab.com/blog/domino-data-lab-s-data-science-evangelist-named-in-dataiq-100
DataIQ ,英国领先的数据和分析社区会员业务,名为 David Bloch ,多米诺数据实验室数据科学布道者,作为 2021 年版 DataIQ 100 最具影响力的领导者之一。
DataIQ 100 于 2014 年推出,旨在表彰英国最具影响力的数据和分析从业者。DataIQ 100 的目的是跟踪企业组织、软件供应商和服务提供商中首席数据官、首席分析官、数据科学家和其他数据专业人士的崛起。
大卫因与丹·哈里斯共同创立并主持“数据领袖高管休息室”而入选该榜单。该休息室是一个仅限受邀会员参加的系列活动,让数据科学领导者能够查看相关的专题讲座,与同行交流并分享他们的知识。
在评论休息室时,大卫说:
“与丹·哈里斯一起创建数据领导者行政酒廊取得了巨大的成功。由于新冠肺炎,通常的一系列高管简报演变成了一个领导者的在线社区,他们每两个月召开一次电话会议,包括一系列演讲者的演讲和从葡萄酒到巧克力和啤酒的指导品尝体验。”
丹补充道:
“很高兴看到 David 和许多数据休息室成员一起在 DataIQ 100 中获得认可。事实证明,这一系列活动对于以有趣和吸引人的方式与其他数据领导者分享想法非常重要,尤其是在我们无法亲自见面的情况下。”
David Bloch 于 2020 年 2 月加入 Domino 数据实验室,从新西兰搬到了英国。在加入 Domino Data Lab 之前,David 是恒天然高级分析部门的总经理,也是沃达丰新西兰大数据和高级分析部门的负责人。David 拥有 20 年的数据专业经验,曾在多个行业工作,包括卫生、电信、银行、保险和广告。
David 作为数据科学传播者的角色包括充当许多数据科学领导者的同行,使用 Domino Data Lab 作为他们的数据科学*台,创建思想领袖内容,并在欧洲和美国的活动中发表演讲。
完整的 DataIQ 100 可在https://www.dataiq.co.uk/dataiq100-2021买到。
关于 DataIQ
DataIQ 是数据和分析专业的第一家会员企业。DataIQ 是一个*台,为数据领导者及其团队提供急需的情报和帮助,以推动数据和分析行业的发展。它的目标是帮助人们通过保护和利用他们宝贵的数据资产来建立伟大的企业。
不断增长的 DataIQ 成员包括许多全球、富时 100 指数成分股公司、大型和中型市场组织,包括英杰华、巴克莱、BBC、BT、汇丰、Sainsbury's、TUI、大众、Walgreen Boots Alliance、华纳媒体和苏黎世保险。
更多信息请访问www.dataiq.co.uk
2021 年 Domino 数据实验室成熟度指数调查显示,数据科学需要成长
原文:https://www.dominodatalab.com/blog/domino-data-maturity-index-2021
世界上最成熟的公司都极其依赖数据科学作为其长期成功的关键驱动力。但根据一项对年收入超过 10 亿美元的公司的 300 名数据科学高管的新调查,对人员、流程和工具的错误投资正在导致数据科学规模的失败。
这些障碍证明了进行数据科学是困难的,而进步需要对组织的“数据科学成熟度”和相关资源需求进行冷静的评估,以实现大规模生产模型的成功创建、部署和维护。
调查揭示了五个明确的结论:
- 短期投资阻碍增长预期
- 数据科学的角色不明确
- 更多的收入需要更好的模式
- 未经改进的模型会带来更高的风险
- 团队必须清除障碍以实现目标
附带的报告数据科学需要成长:2021 年 Domino 数据实验室成熟度指数揭示了一系列发现,这些发现表明尽管公司尽了最大努力,但它们如何以及为什么难以扩展数据科学。其调查结果包括:
预期超过投资,“引人注目的”短期投资超过持续承诺:
- 虽然 71%的数据高管表示,他们的公司领导层预计他们在数据科学方面的投资将带来收入增长,但令人震惊的是,48%的高管表示,他们公司的投资不足以满足这些预期。
- 相反,他们认为组织似乎只关注短期收益。事实上,超过四分之三(82%)的受访者表示,他们的雇主毫不犹豫地将资金投入到只能产生短期效果的“引人注目”的投资中。
公司很难执行最好的计划来扩展数据科学
- 超过三分之二的数据主管(68%)报告说,将模型投入生产以影响业务决策至少有些困难,37%的人说要做到这一点非常非常困难。
- *五分之二的数据高管(39%)表示,数据科学产生重大影响的最大障碍是整个组织中存在不一致的标准和流程。
公司面临熟练、高效员工和所需工具的短缺
- 48%的数据高管抱怨员工的数据技能不足,或者无法从一开始就雇佣足够的人才来扩展数据科学(44%)。
- 超过五分之二的数据高管表示,他们的数据科学资源过于孤立,无法构建有效的模型(42%),几乎同样多的人(41%)表示,他们没有被赋予明确的角色。
误导模型的风险越来越大
该研究还探索了是什么让数据科学领导者夜不能寐。这些结果向那些在数据科学领域偷工减料的公司发出了严厉的警告:
-
令人震惊的是,82%的受访者表示,他们的公司领导层应该担心坏的或失败的模型可能会给公司带来严重后果,44%的人报告说,四分之一或更多的模型从未更新。受访者列举了模型管理不善的几个令人震惊的后果,包括:
- 损失收入的错误决策(46%)
- 员工或薪酬决策的内部关键绩效指标有问题(45%)
- 安全和赔偿风险(43%)
- 建模中的歧视或偏见(41%)
介绍 Domino 数据实验室成熟度指数
除了调查结果之外,这份报告首次推出了 Domino 数据实验室成熟度指数:对组织数据科学健康状况的独立评估。成熟度指数被管理给每个调查应答者。它衡量组织使用正确的工具、雇用正确数量的生产数据科学家、将模型投入大规模生产以及协调整个企业大型团队的复杂工作的能力。
调查结果与来自 Domino 的成熟度指数评估进行了比较,结果非常惊人,表明收入增加与成熟度指数表现之间有很强的相关性。寻求获取数据科学投资预期回报的领导者可以使用 Domino 数据科学成熟度指数作为实现更好模型和财务结果的工具。
一个真正有趣的发现是,该调查证实了我们长期以来的立场,即数据科学成熟度越高的公司,其投资回报就越高。例如,超过三分之二的数据高管担心将模型投入生产以影响业务决策,而高成熟度公司中 53%的数据高管将模型投入生产几乎没有困难,是低成熟度公司中 25%的两倍多。
想了解更多关于在数据科学方面是什么将高成熟度公司与低成熟度公司区分开来的见解吗?我们的新报告数据科学需要成长:2021 Domino 数据实验室成熟度指数揭示了它们之间的差异。立即下载!
多米诺多元化与包容俱乐部提供牧师旅行资助
原文:https://www.dominodatalab.com/blog/domino-diversity-inclusion-club-providing-rev-travel-grants
By Grace Chuang on March 26, 2018 in
正如我们最*的数据科学管理调查所证明的那样,协作被列为促成数据科学成功的首要能力。从该领域的数百次电话和电子邮件中,我们知道数据科学领导者“获得”了协作,但仍难以将碎片整合在一起。协作包括有效的沟通,从不同的角度、观点和经验中吸取经验来解决问题。我想强调最后一句话中的一个词,因为它对于数据科学行业的成功既被忽视又至关重要:多元化。
“多元化”对我和我的许多同事来说有着丰富的含义和个人重要性。当我去年夏天第一次加入 Domino 时,多元化在我们的招聘政策中得到了最清晰的体现,但在交谈中也最常被提及。随着我们的快速发展,增加了具有独特背景和经验的人,多元化的话题开始越来越频繁、越来越引人注目、越来越多样化:重复出现的女性午餐、多米诺多元化演讲者系列、多元化招募动力时间,以及午餐时间放映鲁保罗的飙车比赛。
多米诺多样性和包容性俱乐部是有机发展的。自一月份以来,该俱乐部已经成为我们在整个达美乐推广多元化和包容性价值观的正式承诺。无论是通过招聘、保留、职业发展还是培训和发展,我们的成员都致力于提供包容性的环境,在这样的环境中,个人的才能受到重视,并被赋予实现其最大潜力的权利。这对 Domino 和数据科学行业来说是一个互利的贡献,因为麦肯锡发现“性别或种族和民族多样性排名前四分之一的公司更有可能获得高于其全国行业中位数的财务回报”,而人才创新中心发现缺乏多样性意味着“更少有前途的想法进入市场”
有问题吗?联系格蕾丝。
本着这种精神,达美乐的多样性和包容性俱乐部很高兴为达美乐即将举行的 Rev 数据科学领袖峰会(5 月 30 日至 31 日在旧金山举行)提供旅行资助。Rev 汇集了各行业和公司的数据科学领导者,他们认为数据科学是一个关键的业务优势和首席管理人员关注的问题。我们认为,在 Rev 上展示、交流和体验多样性至关重要,在 Rev 上,今天和明天的数据科学领导者将分享技能、知识和想法,将数据科学从宣传变为现实。我们的目标是消除多样性进入数据科学专业领域的障碍。我们对 Rev 的持续支持证明了我们的承诺。
申请 2018 年 Rev 多样性旅行资助。请联系 Grace 询问有关项目的问题。
面向 MLOps 的民主化 GPU 访问:Domino 扩展了对 NVIDIA AI Enterprise 的支持
原文:https://www.dominodatalab.com/blog/domino-expands-support-to-nvidia-ai-enterprise
我们客户的趋势很明显:对于构建日益复杂的模型的企业来说,基于 GPU 的培训是一种竞争优势。从预测性供应链的NLP到临床试验中组织病理学的 图像处理 ,以及能源基础设施的 预测性维护 到保险行业的 自动理赔 ,我们在任何事情中都可以看到这一点。
Domino 于 2020 年与英伟达 合作,在英伟达 DGX 系统上认证 Domino Enterprise MLOps *台。这种支持使我们的客户能够将强大的 NVIDIA A100 Tensor Core GPUs 用于人工智能和 ML 工作负载。客户可以使用 Domino 在一个 NVIDIA DGX 系统中的一到八个 A100 GPUs 上训练模型。而今年早些时候,我们 宣布支持 通过 Ray & Dask(除了 Spark)进行多节点训练。该功能允许在大规模 DGX 集群基础设施上进行大规模模型训练。此外,Domino 对 A100 GPU 中的 NVIDIA 多实例 GPU (MIG)特性 的支持有助于客户轻松地在单个 DGX 系统上同时部署多达 56 台笔记本电脑或推理作业。
但是英伟达的人工智能产品不仅仅局限于 DGX 的 英伟达人工智能企业 ,它建立在 英伟达 EGX *台上。这种架构支持在各种部署中快速部署、管理和扩展人工智能工作负载,包括主流加速服务器和现代混合云。
这就是为什么今天,我们很兴奋地 宣布 我们正在与英伟达密切合作,通过支持 Domino Enterprise MLOps *台运行更广泛的英伟达 GPU,并针对英伟达 AI Enterprise 进行验证,以使 Domino 在 英伟达认证系统 上无缝运行,来深化我们的产品集成。
对客户来说,差异是显而易见的
对于 Domino 客户来说,好处是显而易见的。通过支持 NVIDIA AI 企业软件套件,Domino 将扩展我们对更多 NVIDIA 加速计算*台的支持。除了 DGX,Domino 将通过戴尔、HPE、联想或其他硬件提供商的包装,支持主流加速服务器的各种 NVIDIA GPUs,包括 A100、A30、A40、A10 和 T4。这将在更广泛的 NVIDIA 加速系统上为客户提供相同的认证 Domino 功能。
由于 NVIDIA AI Enterprise 使成千上万运行 VMware vSphere 的公司能够在主流 NVIDIA 认证系统上虚拟化 AI 工作负载,这一新的集成使企业更容易采购、运行和扩展 Domino 的 Enterprise MLOps *台。
随着 Domino 支持扩展到更多基于 NVIDIA 的*台,企业可以获得两全其美的优势:领先的 NVIDIA AI 训练和推理性能跨各种系统,以及所有必要的数据隐私性、完整性和可靠性。
Domino 强大、可扩展和协作的企业 MLOps *台帮助数据科学团队在构建人工智能和机器学习解决方案的模型时利用英伟达的高级 GPU。
建立在成功记录的基础上
Domino 强大、可扩展和协作的企业 MLOps *台帮助数据科学团队在构建人工智能和机器学习解决方案的模型时利用英伟达的高级 GPU。
强生公司还利用 Domino 和 NVIDIA 的技术组合,构建企业 MLOps 战略来实现模型速度。在最*的 NVIDIA GTC 上,我们的首席执行官 Nick Elprin 和强生企业首席信息官 Jim Swanson 讨论了该公司在业务中嵌入数据科学的经验,考虑到了人员、流程和技术。
在不到两年的时间里,AES 使用 Domino 的企业 MLOps *台从 0 到 50 个模型投入生产。利用英伟达 GPU,AES 的模型覆盖了各种不同的领域:预测发电设备的维护需求,指导金融科技能源交易,进行水文预测,为公用事业提供天气预报,等等。
我们对与 NVIDIA 不断增长的合作伙伴关系的前景感到兴奋,这将使我们的客户能够利用模型实现其业务核心。
多米诺骨牌为社会利益服务:合作、可复制性和开放性
几个月前,当我加入 Domino 数据实验室领导 Domino for Good 计划时,这感觉像是我已经走了很长时间的道路上的完美的下一步。
在 21 世纪初,柏克莱是 T2 开放存取运动的中心。我是物理化学的研究生,接触办公自动化哲学让我的视角发生了翻天覆地的变化。
我的新观点让我认识到,仅仅做科学研究和写文章是不够的。为了真正扩大对科学知识的总贡献,我们必须朝着促进协作和可复制性的开放系统努力。引用 PLOS 的话:
开放 是代表最佳科学价值观的思维定势。一个专注于将科学家聚集在一起,尽可能迅速和广泛地分享工作,更快地推进科学并造福整个社会的组织。”
*自从九年前离开学术界以来,我一直在倡导开放的力量,围绕数字权利和互联网政策开展教育并建立共识,倡导数据方面的规范变革,并倡导将数据科学用于对社会产生积极影响的工作。带着非常熟悉的使命和愿景——合作、可复制性和开放性,为社会利益服务——开始这一新的旅程,这是一种非常有益的感觉。
利用数据做好事的强大新工具
Domino for Good 是一个任务驱动的计划,反映了 Domino 致力于将资源投入到数据科学服务社会的承诺。我可以从 Domino 内部看到一些信号,这些信号清楚地表明了这个承诺有多严肃。一个是他们给了像我这样的行善者定义、设计和构建多米诺骨牌的自由。另一个原因是,我的其他团队的同事们慷慨地为 Domino 贡献了他们的时间和智力资本,尽管作为一家高速增长的初创公司的一部分,他们还有许多其他要求。我们不仅向学生提供免费帐户,还支付学生产生的计算成本,这是该组织对 Domino 的承诺的一个外部可见的例子。您将看到该组织致力于 Domino for Good 的其他演示,因为我们沿着这条道路进行实验和迭代,以找到 Domino 的人员和*台可以为越来越多的从事数据科学以造福社会的人做出贡献的最佳方式。
从我使用 Domino *台的第一天起,我就知道它对于非营利组织和教育领域的数据工作来说是一个特别好的工具。在以后的文章中,我会更详细地解释为什么我相信这一点,但是现在我只想简单地谈谈对我来说特别重要的三个方面。
Domino 是一个协作*台。给足了眼球,所有的 bug 都是浅薄的。一个集市比一个大教堂更有生产力。这些谚语有直观的意义,并且有无数的例子证明了其中的真理。许多类型的工作都有协作*台,包括软件开发。越来越多的优秀开源软件可以归功于协作软件开发的工具、过程、系统和规范。但是数据科学和软件开发不一样。我们不能简单地将数据科学工作嫁接到软件开发的结构上,并期望它繁荣发展。另一方面,如果我们有一个专门为协作数据科学构建的结构,我们可以从根本上改变人们使用数据科学来应对社会面临的重要挑战的方式。
Domino 使结果具有可重复性。在科学史上,几乎所有的进步都来自于站在前人的肩膀上一步一步地前进,而不是某个人突然灵光一现。对之前已经完成的工作有一个清晰、详细的理解可以加快进度,避免重复劳动。这对任何团队都是有价值的,但当团队的一部分或全部是志愿者时,这一点就变得至关重要了。
Domino 项目可以打开。当 Domino project 被设置为“被任何人发现”时,可复制性和协作的好处可以被极大地放大。当在团队层面上实践时,可复制性和协作是进步和生产力的强大加速器,当在组织层面上实践时,它们是更强大的加速器。当可复制性和协作在全球范围内得以实现时,潜在的进步和生产力是如此巨大,以至于一想到可以实现什么就令人兴奋。
多米诺*台具有如此巨大的社会影响力并不是偶然的。多米诺创始人认为,我们正处于计算领域一场根本性革命的风口浪尖,这场革命的影响将不仅仅是经济影响或社会影响,而是两者兼而有之。联合创始人克里斯·杨最*对我说
“当人们问我们希望什么样的出路时,我总是感到困惑。为什么大多数人认为财务收益是我们唯一的动机,而我们显然建立 Domino 不仅仅是为了做这些?”。
在与联合创始人 Nick Elprin 的交谈中,我被他声音中真诚的激情所打动,当他谈到作为如此巨大的事情的一部分而产生的内在回报感时,这种感觉将改变所有行业的人们处理数据的方式。
我非常感谢 Chris、Nick 和我的其他才华出众的同事热心于贡献 Domino 资源来增强社会影响力。永远的多米诺骨牌才刚刚开始它的旅程。我不确定前方的确切道路。但我确信这将是一次精彩的演出。*
我们的客户说得很好,正如 Gartner 给 Domino 命名的“远见者”
原文:https://www.dominodatalab.com/blog/domino-gartner-magic-quadrant
Domino 的团队很自豪地在 Gartner 的数据科学*台魔力象限中被评为有远见者。得到第三方的认可很好,但听到通过 Gartner 的报告综合和整理的客户反馈更令人欣慰。我们最自豪的反馈来自三个方面:我们的产品、我们的客户服务和我们的销售团队。
我们投入巨资的一个领域是协作,这些功能一直获得好评。我们关注协作,因为我们知道这是伟大的数据科学的核心。当团队能够分享想法、重用过去的工作并积累团队知识时,他们是最有效的。Domino 实现了无缝协作,即使对于大型的分布式团队也是如此。这被认为是该*台的一个关键优势,对此我们并不感到惊讶。
不仅仅是我们的产品得到了积极的评价。我们不断听到关于我们客户支持团队的好评。我们知道我们的客户都是试图解决棘手问题的忙人。我们总是不遗余力地帮助他们实现目标。早在两年前,我们的客户就写了我们的支持作为选择 Domino 的理由。我们很高兴我们在这一领域的投资得到了客户的赞赏,并在继续壮大我们的团队。
最后,事实证明,客户对他们与 Domino 的销售关系也有非常积极的评价。尽管我们确实有非常好的销售人员,但我们认为这种反应实际上反映了 Domino 客户的整体体验。当有人买了一个产品,但它不起作用时,销售关系就是糟糕的。没有销售人员能克服这一点。当销售人员带来解决问题的方案,并让购买者成为英雄时,销售关系就很好。我们认为我们的销售关系得到如此高的评价,是因为我们的销售人员带来了一个伟大的产品和强大的支持。
完整的报告还赞扬了我们的市场意识,这意味着我们在产品、销售、营销和客户成功方面都做得很好。我们很高兴它得到了关注,我们渴望继续与我们的客户建立良好的产品和良好的关系。
Domino 荣幸地被 Gartner 魔力象限命名为“远见者”
原文:https://www.dominodatalab.com/blog/domino-honored-named-visionary-gartner-magic-quadrant
Domino 的团队很自豪地连续第二年在 Gartner 的数据科学和机器学习*台魔力象限中被评为有远见者。令人兴奋的是,公司和行业分析师越来越认识到数据科学*台的价值,我们很荣幸得到认可。听到我们的客户通过 Gartner 的报告综合和传达反馈,这尤其令人欣慰。
一位客户,Topdanmark 项目经理 Stig Geer Pederson 说,
“在一直处于定量研究和数据科学前沿的保险行业,我们必须以模型为导向,这样我们才能提供最佳的客户体验。对于代码优先的数据科学家来说,Domino 是迄今为止最好、最灵活的机器学习*台;他们是一个战略合作伙伴,将帮助我们保持在北欧保险市场的领导地位。”
Gartner 报告强调了对我们来说最重要的两个主题:我们的产品和我们的客户承诺。你必须阅读报告,看看我们的客户告诉 Gartner 什么。特别是产品的三个方面得到了客户的称赞和我们开发团队的大量投资:协作、开放和模型交付。
- 协作 -我们从一开始就投资的一个领域是*台内的协作特性;这些特性获得了“在供应商中这一关键能力的最高分。”我们关注协作,因为我们知道协作是大数据科学的核心。当团队能够分享和发现想法,重用过去的工作,并建立集体知识时,他们是最有效的。Domino 实现了无缝协作,即使对于大型的分布式团队也是如此。
- 开放性——如果每个人都能一起工作,不管他们选择的工具和语言是什么,协作就会更加强大。Gartner 将 Domino 评为“灵活性、可扩展性和开放性的综合得分最高”我们一直致力于构建一个开放*台,以便我们的客户能够从当今市场前所未有的创新中受益,从深度学习到自动化 ML 再到数据可视化。
- 模型交付 -我们的客户不断告诉我们,模型只有在影响业务时才有价值。我们听到了反馈,并投入巨资来扩展模型交付的功能。我们很高兴地得知,我们的客户对我们的功能以及我们对产品请求的整体响应能力给予了很高的评价。
我们知道我们的客户都是试图解决棘手问题的忙人。我们的目标是帮助他们实现他们的目标,并且很高兴地看到客户将支持质量作为选择 Domino 的主要原因。
完整报告还指出,我们已经能够在竞争激烈的市场中获得牵引力,这反映出我们在产品、销售、营销和客户成功方面做得很好。虽然市场继续快速发展,但我们很高兴能够继续专注于打造优秀的产品和与客户建立良好的关系。
Domino 是 Forrester Wave 领域的领导者:基于笔记本的预测分析和机器学习
今天,我们很高兴地宣布,Domino 已被任命为Forrester Wave:基于笔记本的预测分析和机器学习,2020 年第三季度 的领导者。该报告根据 26 项标准评估了 12 家供应商,Forrester 将这些标准分为三个高级类别:当前产品、战略和市场份额。据报道:
“Domino 提供了一个企业数据科学*台,支持用户在当今快速扩张的 PAML 生态系统中所需的多种多样的 ML 选项,并具有可重复性原则和治理。”
由数据科学家为数据科学家打造
面对因 2020 年事件而加剧的激烈竞争和其他威胁,许多组织目前(或计划)在数据科学领域投入巨资。他们正在寻找值得信赖的合作伙伴,这些合作伙伴可以帮助他们解决围绕数据科学的谜团,并产生许多供应商承诺但很少实现的出色投资回报。对于一些人来说,这种紧迫性创造了一个独特的机会,将组织锁定在一个有围墙的花园中,以支持销售计量计算和存储的更高目标。他们以开发人员为中心的工具的封闭生态系统为个人用户提供了解决个人数据科学项目的能力,而数据科学的大部分真正成本隐藏在 IT 账单和开发人员中。
相比之下,Domino 是由数据科学家为数据科学家构建的。我们相信,我们在这一浪潮中的领导者地位反映了植根于协作、可复制性和开放性的独特方法。我们的数据科学*台不仅为数据科学家提供了他们想要使用的所有工具,还提供了作为团队自由协作的能力,以释放更大的利益。在我们看来,在这一波中获得“协作”标准的最高分强调了我们提供的丰富功能,以大规模构建数据科学专业知识并将其应用于整个组织。该报告指出:
Domino 驯服了混乱,将您所有不同的 PAML 工具集合在一起,并将它们绑定在一个公共的、受治理的*台上。它允许您的数据科学家使用他们想要的工具,无论是 Domino 自己的 Jupyter、RStudio 和 Zeppelin 笔记本电脑和集成开发环境(ide),还是 AWS SageMaker、DataRobot、MATLAB 和 SAS 等第三方工具。”
解决数据科学的最后一英里
但是,有一个有效的方法来建立和训练模型只是战斗的一半。对于许多组织来说,将模型投入生产也是最具挑战性的。事实上,Forrester 建议“基于笔记本电脑的 PAML 客户应该寻找能够帮助你……利用 ModelOps 大规模运营人工智能模型的提供商”。
Domino 提供了多种方式将模型部署到生产中——从允许业务用户与底层模型交互以支持关键决策的应用程序,到允许模型嵌入到关键业务系统和流程中的健壮 API。今年早些时候我们推出了多米诺模型监视器——一种新的产品,允许组织跟踪整个组织中所有生产模型的性能,以确保它们在周围世界变化时继续提供准确和可信的信息。我们相信,我们在该领域的创新是我们在该报告的“模型操作/模型运行”标准中获得最高分(并列)的原因。
回顾过去,展望未来
我们在 2014 年发明了数据科学*台,作为支持更大愿景的使能技术-使数据科学成为组织如何运营其业务各个方面的不可或缺的一部分。要完成这一使命,首先要重新思考和优化端到端的工作流程,了解数据科学如何从一个想法发展到实验,并最终发展到生产。对于数据科学家来说,这不仅仅是提高流程的效率。您还必须考虑数据科学过程中所有其他参与者的独特需求。未能考虑所有因素可能意味着数据科学被认为是帮助您解决单一问题的被误解的技能,与在董事会中占据突出位置的一流企业职能之间的差异。
今天,我们很高兴为超过 20%的财富 100 强企业提供大规模数据科学支持。我们对基于笔记本电脑的预测分析和机器学习*台的下一步发展有着独特的愿景,我们期待将这一愿景带给我们的客户。我们相信,Forrester 和我们一样,在“解决方案路线图”、“执行能力”和“实现”标准方面给 Domino 打了最高分。
下载 Forrester Wave
我们很高兴提供这份重要研究的免费副本,这样您就可以更多地了解这个市场正在发生的快速创新,并了解为什么 Domino 被公认为领导者。
多米诺在招人
By Thomas Robinson, VP of Strategic Partnerships & Initiatives, Domino on April 16, 2020 in Company Updates
世界正在经历一个充满挑战的时代。我们都有朋友和家人直接或间接地受到了新冠肺炎病的影响。
幸运的是,尽管经济困难,达美乐仍能继续我们的增长;我们正在招聘所有团队和所有办公室的员工。如果你有兴趣在 Domino 工作,访问我们的职业页面申请职位。
在招聘和入职继续进行的同时,我们已经对我们的流程进行了更改,以反映我们新的工作现实。
远程首次面试流程
甚至在封锁在美国实施之前,我们就主动将我们的采访过程 100%远程化了。多米诺现在通过 Zoom 进行我们所有的采访。鉴于这是人们通常面试方式的一个重大变化,我们推出了面试指南,帮助候选人了解他们在何时会见谁,如何连接到他们的 Zoom 面试,并为他们提供了一个聊天框,让他们可以实时直接与我们的招聘团队联系。
Interview guide for a candidate with all the information they need for their remote interview process
新员工多米诺学院
对于新员工,Domino 在新员工被移交给他们的团队开始他们特定角色的入职培训之前,会提供一周的“Domino 学院”。在这一周里,我们不仅要进行标准的账户设置和福利登记,还要就我们的公司战略和文化、如何使用我们的产品、我们的市场定位以及我们如何优先考虑和执行产品和工程工作进行培训。在我们的人员团队的带领下,在我们的管理人员和经验丰富的员工的教导下,我们花时间与新员工在一起,以确保他们具备进入角色的所有背景。
现在我们是 100%远程的,我们已经将 Domino Academy 移动到 Zoom。我们所有的新员工在开始工作之前都会通过联邦快递收到他们的欢迎包,里面有礼品和笔记本电脑。新员工每隔一周的周一加入他们的新员工团队,开始他们的入职和培训。
Kayla, our recent BDR hire, celebrating her new hire kit
社区走到一起
我们的社区已经在我们新发现的互动方式中团结起来。我们的社区团队一直在努力让我们的员工在这些偏远时间保持联系,反过来,我们的员工也开始了他们自己的远程友好活动和聚会。无论是虚拟锻炼会议、宾果之夜,还是我们的 moms & pops 支持小组,该团队已经找到了保持我们社区繁荣的新方法。
The Domino community getting a virtual workout in together
了解更多信息
查看我们的空缺职位。在 LinkedIn 、 Twitter 或脸书上关注我们。
多米诺是公认的最佳工作场所
原文:https://www.dominodatalab.com/blog/domino-is-recognized-as-a-best-place-to-work
我们谦卑而荣幸地宣布,达美乐被列入build In 的 2021 年旧金山/海湾地区最佳工作场所名单。更令人兴奋的是,我们被列入了三个类别:最佳中型公司、最佳薪酬公司和最佳综合公司!没有我们的 Domino 团队成员,我们不可能做到这一点,我们为他们每一个人的成就和对 Domino 的贡献感到骄傲。
我们认识到我们的团队成员可以在任何公司工作,我们很荣幸他们选择在 Domino 工作。我们为我们雇佣的员工感到非常自豪,并且明白我们有责任创造一个促进个人和团队成长的包容性工作环境。最重要的是,我们将 Built In 的认可视为对我们员工的一种褒奖,他们构建了一种繁荣的文化,每天都践行着我们的核心价值观。
Domino 是一个独特的工作场所,充满了热情的团队成员,他们在每种情况下都寻求真理。员工加入我们是因为他们想和以工作为荣的敬业的团队成员一起工作。我们并不总是第一次就做对,但我们的勇气和对卓越的追求推动我们通过复杂和模糊的挑战。我们在成长的过程中不断学习,无论是在我们的产品中还是在我们的文化中,只要我们能从中吸取教训,我们就不会犯错误。在达美乐,我们认识到我们正处于一个旅程中,并相信我们最大的资产之一是员工的声音。真理生活在第一线,通过员工与客户和彼此之间的日常体验。如果我们继续倾听团队成员的意见,欢迎反馈,并根据他们的创意采取行动,我们就能不断追求卓越。
用我们的联合创始人兼首席执行官 Nick Elprin 的话说:
“作为一家公司,我们成功的一切——我们的产品、思想领导力、销售和支持——最终都源于我们的员工。我非常自豪能与这么多有才华的人一起工作,他们希望发明、合作并努力帮助我们的客户释放数据科学的力量。”
我们今年有雄心勃勃的目标,包括大幅增长。我们去年增长了 40%,2021 年也有类似的计划。为了帮助我们扩大规模,同时确保我们保留我们的文化,我们继续发展我们的人力资源系统和流程,密切关注员工体验。
我们的 2021 项目包括:
- 基于我们最*设计的 Domino 框架改进和形式化经理开发。
- 启动 Domino Academy 来帮助和支持新团队成员在 Domino 的前 30 天。
- 通过职业道路、培训和经理反馈循环来促进员工发展。
如果你有兴趣了解更多关于达美乐职业的信息,并为我们的文化做出贡献,请点击这里查看我们的机会。
内建的最佳工作场所
内置基于薪酬信息、福利和文化项目的算法对公司进行排名。今年,根据显示技术专业人士需求的数据,最佳工作场所算法增加了公司对 DEI 和远程文化的承诺。排名是通过结合公司在这些类别中的得分来确定的。这些类别包括:100 个最佳工作场所、50 个最佳小型工作场所、100 个最佳中型工作场所、50 个最佳福利公司和 50 个最佳薪酬公司。
Domino 模型监视器现已推出
上周, 我们宣布了Domino 数据科学*台的最新发布,这代表着企业数据科学团队向前迈进了一大步。我们还宣布了一款激动人心的新产品—Domino 模型监视器(DMM)—它创建了一个“单一*台”来监视整个组织中所有模型的性能。DMM 让公司安心地知道他们的战略决策所基于的模型是健康的,因此对业务、客户满意度等没有负面影响。
在当今前所未有的时代,模型监控尤其重要;当人类行为“正常”时,公司的重要模型是根据来自完全不同的经济环境的数据训练出来的。借助 DMM,您可以识别与培训数据不同的生产数据(即数据漂移)、缺失信息和其他问题,并在更大的问题出现之前采取纠正措施。
Domino Model Monitor 将端到端的模型管理过程与模型操作和治理统一起来。
数据科学团队的工作价值只有在他们构建的模型投入运营后才能完全实现,这样他们才能真正影响业务。一旦投入生产,监控其性能至关重要,以便在需要时对其进行重新培训或改造。在许多组织中,这项责任要么落在 IT 团队身上,因为他们没有足够的工具来评估模型性能,要么落在数据科学团队身上,因为他们占用了重要的增值项目的时间。Domino 致力于用一个对两个团队都有帮助的解决方案来帮助数据科学生命周期的这一方面。
DMM 提供了对跨多个*台的所有生产模型运行状况的全面洞察和可见性。担心生产模型未被跟踪的日子已经一去不复返了;DMM 防止了当生产模型没有得到适当照顾时可能发生的财务损失和不赞成的客户体验。
DMM 允许公司在单个门户中查看跨其组织的所有部署模型,而不管语言、部署基础设施或它们是如何创建的(例如,使用或不使用 Domino)。它为跨团队和模型的监控建立了一致的方法,因此您可以打破部门孤岛,消除不一致或不频繁的监控实践,为整个组织的模型健康指标建立标准,并方便您的 IT/Ops 团队负责监控生产模型。
它首先监控作为模型输入提供的生产数据,并将单个特征与最初用于训练模型的对应特征进行比较。这种对数据漂移的分析是一种很好的方式,可以确定客户偏好是否发生了变化,经济或竞争因素是否影响了您的业务,或者数据管道是否出现了故障,以及是否有空值正在提供给期望更多有用信息的模型。
您还可以上传实时预测数据,或者任何真实数据,以便分析预测准确性。如果 DMM 使用您控制的阈值检测到数据漂移或模型精度下降,它可以发出警报,以便数据科学家可以评估模型并决定最佳纠正措施。通过让数据科学团队专注于监控潜在的“风险”模型,他们有更多的时间进行实验和解决问题。IT 团队可以高枕无忧,因为他们知道在一个易于理解的仪表板中,他们拥有深入了解模型性能所需的一切。
数字多用表的工作原理
要监控任何进行批量预测或部署为 API 端点的模型,您需要在 DMM 上注册模型,配置检查并设置数据接收系统。您可以计划每天、每周或每月对每个型号进行检查,并配置检查失败时谁将收到电子邮件提醒。DMM 接收生产数据,并将其与原始训练数据进行比较,以查看是否有任何特征发生了显著变化。还可以定期获取和评估基础数据和标签数据的预测质量。
使用 Domino 模型监视器,您可以监视:
- 对输入要素的更改。
- 对输出预测的更改。
- 分类和回归模型的模型质量度量跟踪。
- 生产模式的历史趋势。
防止财务损失和降低客户体验
我们周围的世界在不断变化,用于训练模型的历史数据可能无法反映我们今天生活的世界。在这种时候尤其如此。使用 2018-2019 年的数据建立的模型能够很好地预测 2020 年疫情期间会发生什么吗?现在,公司比以往任何时候都更需要意识到买家偏好的变化、经济变化以及其他超出他们控制的外部因素,这些因素会使他们的模型过时。
内部变化也会导致模型降级,在某些情况下,降级的程度相当严重。例如,在一家全球保险公司,上游数据管道中的意外变化导致欺诈检测模型做出次优预测,并在数周内增加索赔支付。DMM 帮助他们检测数据漂移,以便他们能够根据最新的管道变化更新模型,并防止进一步的超额赔付。
DMM 使公司能够检测变化,而不必投入昂贵而稀缺的数据科学资源来不断检查每个模型。他们可以拥有一个仪表板,显示生产中所有模型的运行状况的详细信息,并深入了解详细信息。即使他们不想监控仪表板,他们也可以设置阈值,以便发出主动通知,通知关键人员(包括最初构建模型的数据科学家)是时候使用当今世界的更新数据重新训练它,或者使用新算法完全重建它。DMM 让公司安心地知道,他们的战略决策所基于的模型反映了当今的世界,而不是模型建立时的世界——最大限度地减少对其业务的经济影响,保持客户的满意度和参与度等。
后续步骤
Domino 的团队在设计和开发 DMM 方面投入了大量精力,我们很高兴将这一新产品带给致力于优化其模型健康和流程的数据科学团队。我们感谢客户和朋友在整个开发过程中不断的反馈,并鼓励我们继续改进 Domino,巩固其作为企业中数据科学最佳记录系统的地位。从 Domino 模型监视器的免费试用开始。
要了解更多关于模型监控和 Domino 模型监控器的最佳实践,请参加我们 7 月 14 日的网络研讨会。
Domino 模型监视器:您的问题,已回答
原文:https://www.dominodatalab.com/blog/domino-model-monitor-your-questions-answered-1
By Samit Thange, Senior Product Manager, Domino on July 31, 2020 in Product Updates
在我们最*的Rev 虚拟网络研讨会Monitor Your All Models中,我们讨论了许多组织在确定何时需要重新培训甚至重建关键业务决策所依赖的模型时所面临的挑战。这是我经常听到的一个问题,毫不奇怪,这个活动吸引了众多行业的数百名与会者。
我还在网上研讨会上展示了我们的最新产品, Domino 模型监视器 (DMM)。与会者的兴趣和提问量如此之大,以至于我们无法在现场活动中回答所有问题。这个博客提供了一些最常见问题的答案。我们鼓励阅读白皮书了解模型监控的最佳实践,或者注册试用 DMM 。
1)可以在 DMM 中注册在 Domino Data Science *台之外创建的模型吗?
是的,您可以注册和监控在 Domino *台之外构建的模型。DMM 的一个关键价值主张是,它使您能够监控业务关键型模型,而不管用于构建它们的技术或*台,也不管它们部署在哪里。例如,您可以让不同部门的数据科学家团队使用 R Studio、SAS Studio、MATLAB、AWS SageMaker 和其他工具构建模型,他们生成的所有模型都可以在 DMM 中的一个仪表板上进行监控。
2)这是一个可以在协调环境中按需扩展的容器化解决方案吗?
是的,DMM 是一个 Kubernetes-native 应用程序。这使得添加更多基础设施变得容易,以便在工作负载需要时运行更多容器。
DMM 可以监控哪些类型的型号?
DMM 可用于监控回归模型,以及二元和多类分类模型。在回归模型的情况下,不是准确度或精确度,而是诸如均方根误差、*均绝对误差等度量。用于跟踪模型的预测质量。DMM 还可以用于监控文本和图像分类模型的输出预测漂移和模型预测质量。
4)可以监控的型号数量有限制吗?
不需要。DMM 可以处理的模型和数据数量取决于部署规模。
5)漂移趋势图衡量的是什么?如何将它与漂移量并列解释?
当您在 DMM 中分析漂移时,漂移趋势图会显示某个特性的漂移在所选时间段的每一天是如何变化的。总漂移数反映了该时间段所有数据的整体漂移。
6)漂移是如何计算的——是累计还是仅比较开始和结束时间?
DMM 计算聚合数据的漂移。例如,如果您正在查看过去七天的数据,它将为所有七天内的所有输入要素和输出预测构建聚合直方图,并将它们与训练数据进行比较以计算漂移。
7)关于预测正确性的用户输入如何与 DMM 挂钩?
在 DMM 中,您可以采用与预测数据相同的方式获取基本事实标签。假设您有一个每周生成一次这些标签的流程(使用人类专家或系统生成)。您可以将它们放在 AWS S3 存储桶中的 CSV 文件中(您需要 2 列–GT 标签和预测 ID ),并使用该文件的路径对 DMM 进行 API 调用。DMM 会完成剩下的工作。
8)对于数据接收,我们能否直接链接到本地数据源,例如任何 SQL Server 环境?
今天不是开箱即用。根据您使用的特定本地 SQL 数据库,Domino 将添加一个数据连接器,允许您直接接收数据。请让您的 Domino 客户成功经理在 DMM 路线图中优先考虑您的特定数据库连接器。
9)我们的数据集大小以 TB 为单位。DMM 能够支持他们吗?
数据大小限制取决于为 DMM 调配的群集的大小。如果您的数据大小超过了集群所能支持的范围,您可以对数据进行降采样,并将其接收到 DMM 中。例如,如果一个原始数据流有超过 1000 万个预测,我们的观察是,每天摄取 100 万个预测就足以为模型提供可靠的漂移信号。作为部署的一部分,Domino 将与您一起评估一个良好的基线集群大小,如果需要,以后可以添加更多的计算资源。
10)数据源如何连接到 DMM?
DMM 中有一个专用的 UI,通过它可以添加新的数据源和管理现有的数据源。在添加新数据源时,DMM 会要求提供必要的元数据和身份验证细节,作为数据源添加的一部分。每当从这个源读取数据时,提供的信息将用于建立连接和读取数据集。
11)对于实时模型,可以从 Apache Kafka 流中读入输入和输出数据吗?
如今,数据只能使用 REST APIs 获取。然而,通过 Kafka 摄取数据是我们正在考虑的事情。如果 Kafka 用例对您很重要,请联系您的 Domino 客户成功经理来登记反馈。
额外资源
要了解更多关于 DMM 或模型监控的信息,我鼓励您阅读我们的新白皮书了解模型监控的最佳实践。如果您错过了网上研讨会,您可以观看点播会议:监控您所有模型的健康状况。如果你喜欢你所看到的,你可以注册试用 DMM 。
多米诺在 Gartner 魔力象限中任命了一位远见者
By Domino Data Lab on February 19, 2020 in Company Updates
今年的 2020 Gartner 数据科学和机器学习*台魔力象限 现已出炉,我们 Domino 非常荣幸第三次被评为有远见者。我们认为,我们在 Gartner 魔力象限中赢得这一荣誉,是因为我们的产品愿景和路线图有意关注拥有大型代码优先数据科学家团队的企业的需求。正如一家大型金融公司的数据科学总监在 Gartner Peer insights 上分享的:
“他们的[Domino's]*台向我们的技术领导者展示了现代分析堆栈需要什么,并在这里引起了真正的变化。”
从我们的客户和分析师那里听到我们走在正确的道路上,并提供有意义的价值来帮助公司加速他们的数据科学工作,这总是令人欣慰的。随着组织认识到数据科学创造业务优势的力量,数据科学团队面临着前所未有的压力。我们倾听客户的心声,加倍努力进行产品开发和客户支持,提供广泛的能力来帮助客户实现数据科学产业化。
从产品的角度来看,我们认为 Domino *台的三个方面是赢得这一美誉的基础:开放性、协作性和可复制性。
-
开放性
从一开始,我们就采取了开放的方法,让团队能够集中管理硬件,并允许数据科学家使用他们喜欢的语言和工具,这样他们就可以走在最前沿。我们真的突破了极限,帮助我们的客户让他们的数据科学基础架构经得起未来考验,并将其无缝集成到他们现有的体系中。Domino 现在可以安装在任何基础设施上——云(当然包括 Amazon Web Services、Microsoft Azure 和 Google Cloud Platform ),本地,甚至在他们自己的 Kubernetes 集群中。我们还重建了整个计算网格,以利用 Kubernetes 来分配数据科学工作负载和部署生产模型,消除了数据科学家面临的开发运维难题,减轻了 IT 负担并降低了基础架构成本。
-
协作
当数据专家可以轻松地分享想法、相互学习,并在以往工作的基础上更上一层楼时,伟大的事情就会发生。当他们可以更轻松地与 IT 和业务利益相关者协作时,他们可以更好地确保他们构建的模型是重要的,并且可以更快地将新模型投入生产。因此,我们更进一步,在数据科学团队内部以及跨 IT 和业务部门实现无缝协作。例如,我们的实验管理器,一个“现代实验室笔记本”,使数据科学团队能够无缝地跟踪、组织和管理实验,而我们的产品组合仪表板项目使管理人员能够轻松地看到项目在项目生命周期中的位置,并确定任何需要立即支持的项目。
诸如此类的协作能力正在帮助我们的客户加强研发工作,加快部署流程,并获得对已部署模型、飞行项目和基础设施成本的重要可见性。正如一家制造公司的首席数据科学家在 Gartner Peer Insights:
“多米诺骨牌数据实验室*台简化了数据科学/机器学习工作流程的每一个组成部分,从版本控制、环境管理到可再现性和最终部署。它使我们能够以比以前快 10 倍的速度向客户部署机器学习解决方案,并为整个公司的合作开辟了全新的可能性. . "
-
再现性
再现模型结果的能力对于快速创新和有效的治理和管理都是至关重要的。有了再现性,数据科学家可以在过去工作的基础上追求更雄心勃勃和复杂的项目。业务涉众可以看到模型是如何构建的,因此他们对模型更有信心,因此更有可能使用它们。法规遵从性人员获得了模型的透明度,包括模型依赖性和开发决策,因此他们可以更好地降低风险。我们的再现性引擎自动跟踪数据科学实验的所有方面(代码、环境、数据等),因此公司永远不会丢失工作,始终可以再现他们的结果,并拥有他们所需的透明度。
总之,这是一个强大的组合,我们的客户反复提到这是他们成功的关键。
我们真的很荣幸在创建企业级*台的工作中获得认可,并正在卷起袖子将更多功能打包到我们的*台中。我们有一个强大的路线图,我们相信它将帮助我们的客户成功地驾驭快速发展的市场。我们将继续确保 Domino 可以在任何*台上使用,并允许使用任何工具或框架。我们将提供更多的功能,以便公司能够更容易地大规模产业化数据科学。一旦模型投入生产,我们将帮助他们更好地管理和监控模型,以便他们能够在当今充满活力的市场中更好地竞争。
Domino 现在支持 JupyterLab——等等
原文:https://www.dominodatalab.com/blog/domino-now-supports-jupyterlab
您现在可以在 Domino 中运行 JupyterLab,使用一个新的 Domino 特性,让数据科学家指定他们想要在 Domino *台上运行的任何基于 web 的工具。
介绍
Domino 是一个数据科学*台,支持整个数据科学生命周期,从探索性分析到实验,一直到部署。在这些工作阶段中,Domino 允许数据科学家在可伸缩的自助式基础设施上工作,同时支持可再现性和协作等最佳实践。
从一开始,我们的理念就是成为一个支持最新开源工具的开放*台。大多数使用 Domino 的数据科学家都使用 Python、R、Jupyter 和 RStudio,尽管我们也支持各种其他语言。今天,我们很高兴地宣布支持 JupyterLab,以及一个灵活的插件框架,允许数据科学家添加他们自己的工具,在 Domino *台上运行。
如何在 Domino 中使用 JupyterLab
1)从“笔记本”下拉菜单中,选择“JupyterLab”
2)当绿色的“打开会话”按钮出现时,点击它
你将置身于一个 JupyterLab 环境中,在那里你可以尽情发挥它的所有功能。请注意,这是通过 Domino 的执行层运行的:我们已经在您可以选择的硬件层上启动了它,并且我们已经设置了所有必要的网络配置,以便将您放入环境中。如果保存您的工作,您的更改将被提交回 Domino 项目,以便您的同事可以使用它们。
JupyterLab 还在阿尔法。你可以在它的 Github 页面上了解更多信息。
我们在 Domino 中设置的 JupyterLab 的配置支持 Python、Julia 和 Scala 内核;目前 R 内核不会正常工作。
Why JupyterLab
Jupyter 笔记本非常适合交互式探索性分析。不过,通常情况下,数据科学家需要在包含许多不能交互使用的文件和脚本的项目中工作。他们想要一个合适的 IDE,而不仅仅是一个笔记本,这样他们就可以编辑源文件、使用多个选项卡、浏览文件等等。对于这样的工作,数据科学家在他们的桌面上使用丰富的编辑器,如 PyCharm、Sublime,甚至 emacs 或 vim。JupyterLab 提供了这些工具的许多功能,同时还提供了笔记本电脑体验的好处。
Github 上的 JupyterLab 项目将自己描述为:
“JupyterLab 是 Jupyter 项目的下一代用户界面。它提供了经典 Jupyter 笔记本的所有熟悉的构建模块(笔记本、终端、文本编辑器、文件浏览器、丰富输出等)。)在一个灵活而强大的用户界面中,可以通过访问我们的公共 API 的第三方扩展进行扩展。最终,JupyterLab 将取代经典的 Jupyter 笔记本。”
你可以观看 2017 年西雅图 PyCon 上关于 JupyterLab 的精彩演讲。在笔记本之外的各种功能中,我们最喜欢的有:
- 灵活的键绑定,因此您可以使用 vim 或 emacs 快捷键
- 可配置的窗口窗格排列,让你可以并排编辑和预览 markdown
- 以表格形式查看 CSV 文件
可插拔的交互式工具
Domino 支持 JupyterLab 的方式有些特别:我们没有对 JupyterLab 进行硬编码支持,而是构建了一个扩展点,允许数据科学家在 Domino *台上运行他们想要的任何工具。
在过去几年与数据科学团队的合作中,我们收到了支持各种交互式工具的请求,例如 Zeppelin、Hue、Beaker 等。所以我们在 Domino 中构建了一个插件点,这样您就可以指定自己要使用的工具。这建立在我们的计算环境功能之上,它允许您通过 Docker 指定包和配置——Domino 保持您的环境的构建、缓存、可复制、可修改和可共享。
现在,Domino 计算环境还允许您指定哪些交互式工具应该可用。这使用了一种 YAML 配置格式。例如,在我们的一个计算环境中,JupyterLab 的定义如下:
jupyterlab:
title: "JupyterLab"
start: [ /usr/local/bin/launch-jupyterlab.sh ]
httpProxy:
internalPath: ////
port: 8888
rewrite: false
这是它在我们为这个演示项目定义的计算环境中的样子。注意,环境的定义包含安装 JupyterLab 和YAML 的指令,以告诉 Domino 如何启动该工具。Domino 中的计算环境是可修订的和可共享的,因此如果这些定义中的一个发生了变化,使用该环境的任何人都可以使用该变化;如果出现问题,您可以恢复旧版本来恢复功能。
当您将这样的工具添加到您的计算环境中时,Domino 让任何人都可以通过我们的 UI 使用它们。我们会将您的定制工具添加到我们的标准工具中,包括 Jupyter 笔记本和 RStudio。当您使用这些工具之一启动一个工作空间时,Domino 将在您选择的任何硬件上运行它,在一个容器中有一组一致的包,并且加载了所有的项目文件。这使您可以轻松地与同事协作,并按需扩展您的基础架构。
有什么有趣的基于 web 的数据科学工具您希望在 Domino 上运行吗?请告诉我们,我们会在博客上展示它是如何工作的。
关于 Domino 的更多信息
这篇文章的重点是如何使用 Domino 运行 JupyterLab。完整*台提供更多功能,包括:
- 在可扩展的基础设施上运行其他交互式工具,包括 Jupyter 笔记本电脑和 RStudio
- 运行批量实验,如跨弹性计算资源的模型训练任务,以更快地开发突破性研究
- 在一个中心位置跟踪工作,以促进协作和可重复性
- 部署或生产数据科学工作的简单方法,无论是作为计划作业、生产级 API,还是面向业务利益相关方的自助服务应用和仪表盘
查看多米诺了解更多信息。
Domino 的最新版本为企业数据科学的未来铺*了道路
今天,我们宣布了Domino 数据科学*台的最新版本,这代表着企业数据科学团队向前迈进了一大步。我们正在推出突破性的新功能,包括按需 Spark 集群、增强的项目管理和导出模型的能力,这些功能为企业提供了前所未有的力量,通过解决常见问题来扩展其数据科学能力。
我也很自豪地宣布一个激动人心的新产品:多米诺模型监视器 (DMM)。DMM 创建了一个“单一控制台”来监控整个组织中所有模型的性能,甚至是在 Domino 之外构建或部署的模型。您可以识别数据漂移、缺失信息和其他问题,并在更大的问题发生之前采取纠正措施。
我们邀请您参加我们即将举办的关于 Domino 4.2 和 DMM 的网络研讨会,亲自了解新功能,并继续阅读以了解更多信息。
对于数据科学家来说,Domino 的同类最佳工作台现在更加强大了
工作台是 Domino *台的核心,支持数据科学团队使用他们已经知道并信任的工具和语言进行协作研发&。数据科学团队喜欢 Workbench 组件,因为它帮助他们创建知识飞轮,通过自动化 DevOps 工作、使工作可重复和可重用以及跟踪和组织 ML 实验来加速研究过程。
Domino 4.2 为数据科学家和数据科学领导者提供了几个改变游戏规则的 Workbench 体验。
- 按需 Spark 集群:数据科学家现在只需点击一下鼠标,就可以构建他们自己的 Spark 集群,用于快速、分布式地处理 Domino 中运行的分析。他们选择所需的集群大小,Domino 负责后端的 DevOps 工作,以确保包和依赖项在集群中正确分布。这提高了数据科学家的工作效率,并减少了 IT 组织的难题。借助 Domino 中的按需 Spark,数据科学团队可以将 Spark 和非 Spark 工作负载整合到一个统一的*台中。
- 工作空间用户体验经过重新设计,使数据科学家在进行交互式探索性分析时更有效率。现在,当您在 Domino 中启动 Jupyter 或 RStudio 之类的工具时,可以更容易地在一个地方看到您的文件更改、资源(CPU、内存)使用情况和日志。因为我们有一个开放的架构,这些 UX 改进适用于您在 Domino 中使用的任何类型的工具,包括像 SAS Studio 或 MATLAB 这样的商业工具。
- Domino 4.2 还包括一个功能预览,用于与外部 git 存储库(例如 Github、Bitbucket、Gitlab)进行更深入的集成。
我们的开放*台现已获得运行微软 AKS 的认证,并且可以将模型导出到亚马逊 SageMaker。
我们致力于提供一个开放的数据科学*台,允许数据科学家将正确的工具应用于手头的任务,无论是专有的还是开源的。Domino 与跨越端到端数据科学管理生命周期的技术相结合,从数据准备和清理到模型可视化和利用,为数据科学提供了一个整体的、同类最佳的解决方案。我们认为 IT 团队应该能够选择最适合其组织的可扩展性、企业标准化和生态系统集成需求的数据科学基础架构。
这就是为什么我们最*将 Domino 重新*台化为Kubernetes-native——为支持当今日益流行的多云策略奠定基础。我们插入到客户现有的单租户或多租户 Kubernetes 集群中,使数据科学工作负载能够更高效地利用底层计算资源。
Domino 4.2 支持额外的 Kubernetes 发行版和多租户。特别是,该*台现已获得运行微软 Azure Kubernetes 服务(AKS)的认证,对 Red Hat OpenShift 的支持即将推出。这建立在*台对开源 Rancher、亚马逊弹性 Kubernetes 服务(EKS)、谷歌云 Kubernetes (GKE)和 VMWare Pivotal 容器服务(PKS)的现有支持之上。
我们还很高兴为数据科学团队添加了导出完整模型的功能,以便在 Amazon SageMaker 中部署。今天,许多财富 100 强公司(我们自豪地称之为客户)使用 Domino 中的模型托管功能来支持他们不同的业务和运营需求。但一些客户更喜欢使用 Amazon SageMaker,因为它拥有高可伸缩性和低延迟的托管功能。Domino 4.2 增加了将 SageMaker 兼容的 Docker 映像与您的模型一起导出的能力,包括所有的包、代码等等,以便直接在 SageMaker 中部署模型。
Domino Model Monitor 将端到端的模型管理过程与模型操作和治理统一起来。
一旦模型投入生产,监控它们的性能是至关重要的,以防现实世界的数据发生变化,需要对模型进行重新训练或调整。在许多组织中,这项责任要么落在 IT 团队身上,因为他们没有足够的工具来评估模型性能,要么落在数据科学团队身上,因为他们占用了重要的新研究的时间。我们相信模型驱动的企业需要更好的方法来管理对核心业务流程越来越重要的模型。
为此,我们激动地宣布多米诺模型监视器(DMM) 。DMM 允许公司监控他们的模型,以检测漂移并预测性能问题,以免造成财务损失或降低客户体验。
DMM 允许公司在单个门户中查看整个组织中所有部署的模型,而不管语言、部署基础设施或它们是如何创建的。它为跨团队和模型的监控建立了一致的方法,因此您可以打破部门孤岛,消除不一致或不频繁的监控实践,并为整个组织的模型健康指标建立标准。
它首先监控作为模型输入提供的生产数据,并将单个特征与最初用于训练模型的对应特征进行比较。这种对数据漂移的分析是一种很好的方式,可以确定客户偏好是否发生了变化,经济或竞争因素是否影响了您的业务,或者数据管道是否出现了故障,以及是否有空值正在提供给期望更多有用信息的模型。
您还可以上传实时预测数据,或者任何真实数据,以便分析预测准确性。如果 DMM 使用您控制的阈值检测到数据漂移或模型准确性下降,它可以提供警报,以便数据科学家可以评估模型并决定最佳纠正措施。通过让数据科学团队专注于监控潜在的“风险”模型,他们有更多的时间进行实验和解决问题。IT 团队可以高枕无忧,因为他们知道在一个易于理解的仪表板中,他们拥有深入了解模型性能所需的一切。
安全和项目管理的改进反映了我们对企业坚定不移的承诺。
我们的使命是将数据科学强化为企业级业务能力,以最大限度地发挥数据科学团队的影响力。除了上面强调的产品改进之外,Domino 4.2 还包括额外的安全更新和强大的新产品管理功能,这些对于赢得信任和提高企业团队的可见性至关重要。
Domino 内部的知识中心是一个组织的数据科学知识集中的地方,以便数据科学家可以找到、重用、复制和协作,从而实现更高效的实验。
在 Domino 4.2 中,我们增加了数据科学领导者更有效地管理他们的数据科学团队和工作的能力。他们可以为项目设定目标,定义自定义阶段以评估他们的研究过程,并深入项目以查看最*的活动、阻碍因素和实现目标的进度。数据科学领导者可以了解团队中的项目和工作负载,提高所有利益相关方的透明度。这也有助于数据科学领导者展现最佳实践,改善沟通和协作,最终为更快的研究铺*道路。
对于许多组织来说,这种项目管理方法足以管理大规模构建和部署数据科学项目的端到端流程。然而,许多组织已经标准化使用吉拉来管理数据科学团队,我们很高兴能够在 Domino 4.2 中实现我们的吉拉集成承诺。项目目标和阶段可以直接链接到吉拉任务,以便与已建立的工具和流程集成。
总结
Domino 的团队在这个最新版本中投入了大量精力,我们很高兴将这些新的创新带给数据科学团队,他们正在推动他们所在的所有行业的创新。我们感谢客户和朋友在整个开发过程中不断的反馈,并鼓励我们继续改进 Domino,使其成为企业中最好的研究记录系统。
下面是一些额外的资源,可以帮助您更多地了解 Domino 以及 Domino 4.2 和 Domino Model Monitor 中提供的最新功能:
- 了解 Domino 数据科学*台。
- 试试多米诺骨牌。
- 参加 6 月 25 日的在线研讨会,了解更多关于 Domino 4.2 的信息。
- 参加 7 月 14 日的在线研讨会,了解更多关于模型监控最佳实践和 Domino 模型监控器的信息。
Domino 筹集了 1050 万美元的资金用于协作、可复制的数据科学
今天我们宣布,我们已经在由红杉资本(Sequoia Capital)牵头的一轮融资中筹集了 1050 万美元。
对我们来说,筹款只是达到目的的一种手段:建立领先的数据科学*台以帮助公司最大限度地发挥定量研究的影响。也就是说,像这样的时刻是反思的好时机,我想与你分享三个想法。
首先,我们现在筹集这笔资金,因为我们看到多米诺骨牌市场正在爆炸,我们想火上浇油。我们的客户是世界上一些最成熟、分析能力最强的组织。它们包括领先的制药和生命科学公司、保险公司、T2 金融服务公司、评级机构、对冲基金。Instacart 和 Mashable 等创新消费技术公司也使用 Domino。
这种客户需求向我们强调了 Domino 通过改进我们的产品和扩大我们的客户群有多少扩展的机会。今天的融资就是要为这两者提供资金。
第二,我们很高兴红杉在这一轮中领先,并加入了之前支持多米诺的一批重要投资者,其中包括 Zetta Venture Partners、彭博测试公司和 In-Q-Tel。吸引我们的是红杉——以及引导我们上一轮融资的投资者——他们对建设一家世界级公司的重视。与红杉的每一次讨论都以这样一个问题开始:“一个世界级的公司会怎么做?”这正是我们的目标,拥有不仅与这一目标保持一致,而且还能扩大这一目标的合作伙伴是件好事。
最后,常言道,在创业中,时机就是一切——我们看到世界正朝着多米诺设想的方向快速发展。越来越多的公司将定量研究和数据科学作为核心组织能力进行投资。随着这项工作越来越接*业务的核心,人们越来越多地通过协作来完成。公司比以往任何时候都更加关注知识的复合,尤其是在受监管的行业,人们越来越意识到数据科学工作需要可审计和可复制。这正是多米诺设想的世界,既令人欣慰又令人激动。
三年前,当克里斯、马修和我创办多米诺骨牌时,我们刚从世界上最大的对冲基金之一 Bridgewater Associates 出来。因为定量研究是业务的核心,Bridgewater 在实现一个成熟的、有纪律的、可扩展的模型和算法开发过程方面,可能比世界上大多数地方领先 10-20 年。
随着我们看到越来越多的组织投资于“数据科学”能力(无论是精算研究、量化研究、生物统计等),我们看到了一系列问题,这些问题凸显了分析堆栈中缺失的部分:数据科学和量化研究团队需要一个“工作场所”这类似于 CRM 对于销售团队的意义,或者版本控制对于软件工程团队的意义。
Domino 通过为数据科学家和定量研究人员团队提供记录系统和协作中心,填补了这一空白。我们的客户认为这很有价值,原因有三:它使研究人员更有效率,它使生产数据科学输出更容易,也许最令我们兴奋的是,它促进了研究的协作、可再现性和可重用性,因此公司通过建立在过去的工作基础上更快地推进研究。
有了这笔投资,我们将加速我们的产品开发,帮助我们当前和未来的客户制造更好的汽车,开发更有效的药物,提高作物产量,为人们提供更好的保险费率,或者在数据科学找到新的沃土的任何地方取得突破。
我们迫不及待地向世界展示我们正在建造的东西。如果我们的使命引起了你的共鸣,来加入我们吧,我们正在招聘!
Domino 获得 SOC 2 Type II 认证
原文:https://www.dominodatalab.com/blog/domino-receives-soc-2-type-ii-certification
By Thomas Robinson, VP of Strategic Partnerships & Initiatives, Domino on May 28, 2020 in Product Updates
对于成熟的企业来说,数据科学是一项至关重要的能力,它可以利用关于运营、客户、服务和产品的最敏感数据。如果不访问和使用这些核心数据来构建模型,数据科学工作的成果就没有多大价值。此外,一旦开发出来,编码在这些模型中的知识产权是一种非常有价值的资产,需要得到保护。
95%的首席信息官预计网络安全威胁会增加并影响他们的组织,因此确保数据和模型的安全是 IT 部门最关心的问题。¹
Domino 非常重视我们的操作和技术安全。因此,我们很高兴地宣布,一家独立的第三方审计机构已经认证我们的*台为 SOC 2 Type II,符合信息安全行业最佳实践。
SOC 2 信任服务标准
系统和组织控制(SOC)框架由美国注册会计师协会(AICPA) 开发。它概述了组织的一系列安全控制措施,不仅涵盖技术,还涵盖组织流程。其标准或“信托服务”包括五个可以评估的关键领域:
- 安全性:公司必须采取适当的措施来防止对其系统、数据等的未授权访问。双因素身份验证、入侵检测和防火墙是常见的做法。
- 可用性:公司必须做出合理的努力来保持其系统的高可用性和容错性。他们必须有记录在案的灾难恢复和事件处理计划。
- 处理完整性:所有交易必须快速、准确地处理,不得进行未经授权的处理。
- 保密性:必须根据服务协议中记录的标准保护机密或专有数据。在许多情况下,这意味着数据必须在传输中加密和/或在不再需要时销毁。
- 隐私:所有个人信息必须按照强制性隐私法规(例如欧洲的 GDPR、巴西的 LGPD)以及服务协议或隐私声明中的规定进行处理。
SOC 报告有两种类型。类型 I 报告描述了供应商的系统在某个时间点如何符合上述相关的信任服务。第二类报告(对潜在客户来说更全面、更有用)详细描述了信托服务在实践中的实际表现。
SOC 2 Type II 认证由注册会计师的独立审计师进行。审核员对供应商实施的控制措施的描述以及这些控制措施在一段时间内(通常是几个月或一年)的操作有效性进行详细审查。这确保了控制措施是全面的,并且在操作上是合理的,而不是简单的“打勾”。
SOC 2 认证为什么重要?
SOC2 Type II 遵从性意味着 Domino 拥有符合行业标准的、定义良好的安全策略、程序和实践。获得认证的过程发生在过去的一年中,这使我们能够断言我们现有的安全实践已经足够强大,同时收到了使我们的过程更加强大的建议。
依靠软件供应商的数据科学*台比自己构建*台有很多好处。Domino 经历了多种用例以及各种业务问题,经过多年的产品开发,我们的产品中已经包含了解决方案。构建您自己的解决方案很可能仅仅触及您的总体需求,并且会花费大量的时间和金钱来开发。
更重要的是,构建自己的软件的安全幻觉很吸引人,但却被误导了。同样,我们开发了一个全面的解决方案,Domino 花了几年时间致力于我们产品和开发组织的安全性。如果不知道您可以依靠解决方案来实施适当的安全措施,您可能会在无意中受到数据泄露、恶意软件和不良行为者的攻击。
通过与通过 SOC 2 Type II 认证的供应商开展业务,IT 团队可以放心地与具备安全控制和实践的供应商合作,以确保其数据、知识产权和品牌的安全性。
对于 Domino 客户,您的客户成功经理可以提供我们的审计员出具的证明我们 SOC 2 Type II 认证的信函。
多米诺被独立研究公司认为是领导者
原文:https://www.dominodatalab.com/blog/domino-recognized-as-a-leader-by-independent-research-firm
By Mac Steele, Director, Product, Domino Data Lab on September 05, 2018 in
Forrester Wave:基于笔记本电脑的预测分析和机器学习解决方案,2018 年第 3 季度即将发布,我们很高兴地宣布 Domino 被评为领导者。在这篇博客中,我想提供更多关于这份报告的背景,它意味着什么,以及为什么我们认为它令人兴奋。
Forrester 报告指出:
“机器学习是每个企业必须具备的基本核心能力。原因很多。机器学习给了企业预测的能力。这是人工智能的基础。它可以从数据中学习,发现隐藏的见解。最重要的是,它可以通过将可扩展的智能注入超个性化的客户体验、业务流程、运营应用和员工决策,让即使是最大的企业也获得颠覆性新贵的敏捷性。然而,如果没有商人、数据科学家、数据工程师、软件开发人员和人工智能工程师的合作,这一切都不会发生。这就是数据科学团队及其朋友需要企业预测分析和机器学习解决方案的地方。”
我们完全同意。他们的观点与我们在多米诺的信念一致,即公司必须以模型为导向,才能在当今的经济中生存;每个机器学习解决方案的核心都是数据科学组织构建和部署的模型。
Forrester 将我们所处的行业称为“预测分析和机器学习”,或 PAML,他们定义为:
为企业数据科学家团队和利益相关者提供 1)工具来分析数据的软件;2)使用统计和机器学习算法构建预测模型的工作台工具;3)训练、部署和管理分析结果和模型的*台;以及 4)扩展企业团队的协作工具,包括业务人员、数据工程师、应用程序开发人员、DevOps(1)和 AI 工程师。
在 PAML 领域,Forrester 确定了三个不同的细分市场,每个市场都有/将有一份独特的 Forrester Wave 报告:
- 基于笔记本电脑的 PAML 解决方案
- 多模式 PAML 解决方案
- 专注自动化的 PAML 解决方案
今天发布的 Forrester Wave 报告承认 Domino 是领导者,该报告关注基于笔记本的 PAML 解决方案。(该报告还提供了上述三种 PAML 解决方案类型的定义。)
九家“基于笔记本电脑的 PAML 解决方案”供应商根据本报告的三个标准进行了评估:当前产品、战略和市场占有率。除了在*台、解决方案路线图、合作伙伴和市场认知度标准方面获得最高分之外,Domino 还在市场存在类别中名列前三。
根据 Forrester 报告:
Domino Data Lab 允许您使用自己选择的工具进行实验。Domino 致力于通过与您的数据科学团队合作来提高他们的工作效率,而不是强迫他们只使用一个笔记本界面。数据科学家喜欢他们不同的工具,所以 Domino 允许用户在 Jupyter、Zeppelin 和 R Studio 中编码,但也可以在 SAS 和 DataRobot 等专有工具中编码。它通过一个统一的*台来实现这一点,该*台支持自助式资源调配,允许团队标准化其环境,并在需要试验时进行修改。”
我们认为 Forrester Wave 报告证实了我们的观点,即需要从模型管理中构建一种新的组织能力,并且我们很欣赏 Domino 在成为模型驱动的过程中为客户提供的价值的认可。
(1) DevOps:开发加运营
数据中心就绪 MLOps: Domino 现已通过 NVIDIA AI Enterprise 验证
原文:https://www.dominodatalab.com/blog/domino-validated-for-nvidia-ai-enterprise
今天,Domino Data Lab 宣布验证整合了NVIDIA AI Enterprise和VMware VSP here with Tanzu的 Domino Enterprise MLOps *台 ,帮助全球企业使用主流服务器管理数据科学和 AI 工作负载。Domino 是 NVIDIA 通过 NVIDIA AI 企业软件套件验证的第一款 MLOps 软件,可在领先服务器提供商 的 NVIDIA 认证系统上提供最高的性能和兼容性 。
GPU 加速带来了希望,但也带来了挑战
从 自然语言处理为模型驱动的政策审批 到 生物技术中的图像分类 到 供应链风险与异常检测 在先进制造业中,来自 GPU 加速的模型训练的竞争优势显而易见。数据科学工作负载的强度,尤其是模型开发和深度学习的强度,导致不同的计算基础架构要求,峰值利用率比*均利用率高几个数量级。
然而,由于将这些人工智能解决方案与现有企业基础设施相集成的复杂性,企业经常难以采用人工智能。数据科学家需要在整个数据科学生命周期中灵活地使用工具,这导致了数据科学家和 IT 之间的 孤立环境。
打破数据科学家和 IT 之间的孤岛
Domino Data Lab 的企业 MLOps *台现已通过验证,并与 NVIDIA AI Enterprise 集成,NVIDIA AI Enterprise 是一种针对 AI 工作负载优化的端到端企业*台软件套件。NVIDIA、VMware 和 Domino Data Lab 之间的这一联合解决方案通过将强大的人工智能解决方案引入主流服务器上的企业数据中心,标志着人工智能的快速创新、规模和扩展进入了一个新阶段。
在 IT 已经熟悉的基础设施上,数据科学团队现在可以轻松完成一些项目,例如使用 TensorFlow 训练图像识别模型,使用 NVIDIA RAPIDS 执行文本分析,或者使用 Triton 推理服务器部署智能聊天机器人。打破数据科学和 IT 领域的孤岛为更多企业打开了大门,让它们通过在整个业务中嵌入模型来建立竞争优势。
数据中心就绪型企业 MLOps
NVIDIA AI Enterprise 针对业界领先的虚拟化*台VMware VSP here with Tanzu进行了优化和认证。这提供了由 NVIDIA 支持的 AI 开发人员框架和工具,以及数据科学和 AI 工作负载所需的 kubernetes 操作员、驱动程序和企业支持的容器。
Domino 的企业 MLOps *台工作在 VMware vSphere 之上,将 NVIDIA AI 企业容器与 VMware Tanzu 提供的 Kubernetes 层集成在一起。这为数据科学和人工智能工作负载的研究、开发和部署提供了端到端的*台。NVIDIA AI Enterprise validation 意味着整个解决方案可以部署在来自 HPE、戴尔、联想、思科和 Hitachi Vantara 等服务器供应商和集成商的 NVIDIA 认证系统上。
用合适的工具和基础架构提升数据科学家的技能
Domino 通过提供端到端的企业 MLOps *台,即数据科学工作的记录系统,独特地增强了 NVIDIA AI 企业软件套件。只需点击一下鼠标,就可以在经 NVIDIA 认证的系统上,利用针对 NVIDIA RAPIDS、TensorFlow 和 PyTorch 框架优化的图像,启动研究环境,同时自动加载数据、代码和先前的工作,并访问 NVIDIA GPUs。这种自动化允许数据科学家 专注于创新研究和模型开发 而不是繁重的 devops 工作。
类似地,Domino 处理所有的模型托管和推理,因此一旦数据科学家创建了一个模型,就可以很容易地在环境中托管和维护它。
简化管理并减轻 IT 支持负担
对于 IT 部门来说,这种集成通过提供虚拟化的云状“数据科学*台”大大简化了数据科学家的支持请求,所有这些都托管在运行非人工智能应用程序的熟悉的弹性 VMware VSP here enterprise infra structure 环境中。它可以使用分配的 GPU 资源按需快速配置预配置的容器,减少数据科学家对基础架构和许可证的服务台请求数量。Domino 为数据科学家提供了一个自助式解决方案——包括 IT 的报告和治理。
日益增长的伙伴关系
随着 NVIDIA AI 企业验证的加入,Domino 拥有了许多不同的 NVIDIA 和 NVIDIA 合作伙伴网络(NPN)的产品和服务。我们继续扩大我们的 NVIDIA DGX 就绪软件合作伙伴 ,最* 宣布了基于 NVIDIA 的托管服务产品和 TCS ,并继续在主要云提供商上支持 NVIDIA 加速计算。我们的使命是为世界上最重要的企业释放数据科学的力量——普及 GPU 访问是这一使命的重要支柱。
额外资源
- 1 月 26 日加入 Domino参加虚拟活动,了解 Domino 5.0,这是我们在帮助企业释放数据科学力量的使命上迈出的重要一步。
- 了解更多关于 Domino 和 NVIDIA 的合作 ,包括客户使用案例和技术资源。
- 下载 Domino & NVIDIA AI 企业部署指南 了解技术细节。
不要被 Hadooped 化
我见过许多公司对提高他们的分析能力感兴趣,我注意到一个令人不安的模式:在许多情况下,公司被 Hadoop(或 Spark,或类似的解决方案)所吸引,不是因为它解决了他们的实际问题,而是因为它是一项闪亮、时尚的技术。
不要误解我的意思:Hadoop(及其同类产品)是一项了不起的技术,有很多问题需要它。但这并不意味着这对每个人都是正确的,甚至是有益的。我想描述当人们非理性地被 Hadoop 吸引时,我看到的三个常见错误。
1:中等数据
有人说“大数据就像高中的性:每个人都在谈论它,每个人都声称他们正在做,但几乎没有人在做。”通常,当有人告诉我他们有大数据时,我问他们实际上有多少数据,他们不好意思地回答大约 10 到 100GB。
如果您的数据可以容纳在标准 EC2 机器的内存中,那么您就没有大数据
对于真正的大型数据集:互联网规模的数据、生物信息数据、一些金融交易数据等,Hadoop 是一个很好的解决方案。但是如果你的内存小于 250GB,那么你的整个数据集可以放在一台机器上。这台机器甚至有 32 个内核,这使它成为运行一些地图缩减工作的一个非常好的工具。
2: Hadoop!=地图-缩小
我还听说有人将 Hadoop 和 map-reduce 混为一谈。Hadoop 是一个强大的 map-reduce 版本,但是使用 R、Python 和其他统计语言的强大库,在单台机器上运行 map-reduce 分析非常容易。所有这些语言都有很好的工具来将你的任务映射到多个内核上。您甚至可以使用 IPython Notebook 中的集群来跨内核映射您的任务。
同样,除非您的数据规模需要超过 100 个内核或几千兆字节的内存,否则您可能不需要 Hadoop 的复杂性和维护成本。在一台机器上使用 Map-reduce 可能对您有好处。
3: Hadoop 是一种技术,而不是解决方案
我看到的公司陷入的最常见、也是最微妙的陷阱可能是,当他们并不真正了解他们的实际问题时,他们期望 Hadoop(或其他一些热门技术)成为解决方案。通常情况下,当一家公司想要提高其分析能力,但不知道如何开始时,就会出现这种情况。他们听说时尚的技术产品,他们相信将这些产品带到船上可以让他们朝着正确的方向开始。
在寻求“大数据解决方案”之前...
当我们深入了解公司时,我们经常会发现一系列需要不同解决方案的问题。没错,它们更复杂,但它们是基础问题,一旦得到解决,将会产生真正的影响。
我接触过的公司最大的问题通常是缺乏一个标准化的工作流程来促进最佳实践。当我就如何支持现代分析能力给出建议时,通常会从良好的卫生习惯开始:
-
保持工作集中化,以实现共享和知识管理。
-
使用版本控制,这样您就可以复制过去的工作。
-
组织您的工作,使其便于携带,也就是说,它不依赖于任何特定人的机器。(这包括移除对绝对文件路径、系统级库等的隐藏依赖。)
-
编写您的代码,使其模块化,以便可以重用正确的部分,并公开正确的参数(而不是硬编码)。
-
在模型的整个生命周期中使用单一语言进行工作(交互式的探索性工作,通过细化,直到部署)。不要创造一个在过程的不同阶段需要在不同语言之间翻译代码的世界。
Hadoop 不是这些问题的解决方案。事实上,在 Hadoop 上构建一个分析工作流,而不考虑你真正的问题是什么,你很容易就会制造一个不可持续的混乱。
诊断你真正的问题
以下是您在寻求“大数据”解决方案之前应该问的一些问题:
-
围绕您当前的分析能力,您最大的问题和痛点是什么?如果你可以“挥动魔杖”改变你的分析过程,那会是什么?
-
大数据解决方案能否真正解决您的痛点?如果是,还需要哪些或才能将一项技术(例如 Hadoop)转化为实际的商业价值?例如,是否有任何工作流或业务流程需要更改?这些改变将花费或需要什么(例如,改变当前代码以在 Hadoop 范例中工作)?
-
根据内核和内存,通过分析计算出您实际需要多少计算资源。你可以通过一些简单的数学计算来做到这一点:
-
你有多少数据?
-
它能被分成多少个独立的“部分”?
-
你计算每一部分要花多长时间?
-
您希望在多少时间内完成整个计算?
-
举个简单的例子:我和一家成熟的分析咨询公司谈过,这家公司坚持认为他们需要在 Apache Spark 之上建立一个内部解决方案。当我询问他们的具体使用情形时,他们表示需要处理包含 10,000 条记录的数据集,其中每条记录需要 10 秒钟的处理时间,并且他们需要一个能够在几个小时内完成计算的解决方案。但是在一台 32 核的机器上,这需要不到一个小时。
替代解决方案
如果我没有简单地提到我们已经建成了一个数据科学*台,在整个分析生命周期中促进最佳实践,那将是我的失职。当然,Domino 可以很好地与 Hadoop 集成——Domino 可以运行和跟踪 Hadoop 作业,就像它可以运行和跟踪 R、Python 和其他语言中的任务一样——但可能实际上并不需要 Hadoop。或者至少,你可能需要和一个精心设计的*台来放置它。
散布消息
如果你或者你认识的其他人曾经是闪亮技术综合症的受害者,并且在你不需要 Hadoop 的时候爱上了它,请把这个分享给他人。
Domino 5.0:提升您的“云中笔记本”体验,实现两全其美
原文:https://www.dominodatalab.com/blog/durable-workspaces-checkpoints
在 Domino 5.0 中引入带检查点的持久工作区
为了加快数据科学的参与和生产力,再现性至关重要。它不仅能促进探索,还能通过构建一个经过验证的模型或提供与其他人共同开发模型的能力来提高模型的速度。
持久工作区是在 Domino 4.4 中引入的 ,是可以启动、停止和重启的持久开发环境。每个工作区都有一个永久卷来保存您的文件,并且您的更改会从一个工作区会话保存到下一个工作区会话,以便您可以决定何时将更改提交到版本控制。
在 Domino 5.0 中,每当用户在工作区内同步时,都会创建一个“检查点”。这让我们的“云上笔记本电脑”体验更上一层楼。现在有了这些检查点,您可以浏览过去的工作、恢复和新方向的分支实验,或者促进组织内的协作。
好处:
- 通过查看会话和提交历史,从所需的点创建工作区会话。
- 轻松查看工作区会话历史以及从特定检查点重新创建工作的提交。
- 从发布的模型中快速重新创建工作区,以便能够调试生产问题并快速重新部署模型。
它是如何工作的
注意:关于带检查点的持久工作区的一些 先决条件 ,请参见 Domino 文档。
重新访问并从工作空间的先前状态开始
除了工作区会话之外,您还可以查看每个会话的检查点。检查点是您可以在任何时候返回的提交,以便查看您的工作历史,和/或在新的方向上分支您的工作。每当您在一个工作区内同步对工件或代码的变更时,就会创建检查点。
您可以预览来自任何提交的工件或代码,以识别您想要从中重新创建工作空间的检查点。
当您从以前的提交中重新创建一个工作区时,Domino 会创建一个新的分支,您可以在其中执行新的模型开发或培训。重新创建的工作区基本上与现有的工作区行为相似。您可以在 处找到关于此工作流程 的详细信息。
修复漂移或衰退的模型
Domino 5.0 中新增的 集成模型监控 功能,可以自动识别 数据漂移和模型质量 的问题。您可以使用 自动化洞察 探究原因,确定是否需要模型修复。在这种情况下,您可以重新创建用于部署模型的工作区,这样您就可以更新模型代码或者用最新的生产数据重新训练它。该工作流程类似于前面所述的 在现有工作空间内创建工作空间 的工作流程。
一旦您完成了修复或补救,您可以轻松地 重新部署 您的模型的改进版本。
结论
开放性和可复制性是 Domino 的核心产品。随着检查点被添加到持久的工作空间中,我们期望组织培养一种协作环境,在这种环境中他们可以重用过去的返工并提高用户的生产率。此外,模型驱动的企业可以利用 Domino 使他们能够根据不断发展的业务的需要主动监控和修复模型。
Domino 是 企业 MLOps *台,它无缝集成了代码驱动的模型开发、部署和监控,以支持快速迭代和最佳模型性能,因此公司可以确保从其数据科学模型中实现最大价值。
为数据科学选择数据存储时的八个考虑因素
原文:https://www.dominodatalab.com/blog/eight-considerations-when-choosing-a-data-store-for-data-science
选择正确的技术,让数据科学家专注于数据科学而不是 IT 基础设施,将有助于企业从数据科学和机器学习投资中获益。
这里有一个悖论,它绊倒了许多扩展数据科学运营的企业:当他们意识到他们需要积极主动地组装合适的基础架构,以将数据科学置于尽可能多的业务运营的核心时,在不招致一点痛苦的情况下进行新的基础架构投资已经太晚了。
但是,无论您的组织刚刚开始扩展其数据科学运营,还是您正在努力将数据科学置于尽可能多的业务流程的核心,您都需要考虑支持强大的数据科学实践的要求。对于所有企业来说,这将是你的组织未来生存的基础。
在本次讨论中,我们将重点关注数据存储和支持整个企业大规模数据科学的功能。如果你想让你的公司走上成功之路,你需要考虑收集和组织数据的最佳方式。此外,您需要利用所有对您的 MLOps 计划有用的数据;您不希望使用因数据存储无法捕获或管理某些数据馈送而受到损害的数据集。
记住,在机器学习和人工智能中,垃圾输入/垃圾输出(GIGO)效应极其强烈。如果缺少存储*台,您就无法获得具有可靠访问和可用性能的高质量数据。
因此,需要考虑八个因素:
可量测性
更多的数据胜过更好的算法,我们已经看到了大量令人信服的证据。在由 Halevy、Norvig 和 Pereira 撰写的《数据的不合理有效性中,作者认为“……简单的模型和大量的数据总是胜过基于更少数据的更复杂的模型。”因此,当您的数据存储无法扩展以容纳更多数据,并且在项目进行过程中,您发现由于这种限制,您需要进行数据*台迁移时,您的项目就注定要失败。
今天的神经网络能够做出惊人的事情!这并不是因为这些架构自 20 世纪 60 年代开发以来已经有所改进。相反,这是因为我们现在有能力存储和处理海量数据。非常聪明的算法无法弥补数据的缺乏。这根本不是一个选项。
每个行业都变得由数据驱动。但是,想想因无法扩展数据存储而失去的机会,就令人难以置信。以医疗保健行业为例:Statista 报告 称,到 2020 年,医疗保健数据生成量超过数据存储能力的比例超过 2 比 1。当超过一半的生成数据因为组织没有存储这些数据的方法而被丢弃时,这意味着大量情报的丢失,而这些情报本来可以很好地用于改善患者的结果。请这样想:这个问题的答案,“我们到底该不该储存它?”应该基于数据是否有用,而不是基于容量限制。
此外,可伸缩性不仅仅意味着容纳大量数据的能力。当您处理数据时,系统还必须能够保持良好的性能和响应能力。大量的机器学习算法被迭代训练,这意味着要对数据进行成百上千次的检查。如果您正在操作一个大型数据集(不能固定到内存中),数据存储的访问时间和速度将成为一个重要的瓶颈。
数据科学家通常喜欢开源工具,喜欢 PostgreSQL、MongoDB 等。例如,它们远没有雪花的大规模并行处理(MPP)能力。当考虑将开源工具用于小规模数据操作时,它们很有吸引力。但是,当您转向企业范围的 MLOps 计划时,您会很快发现依赖这些开源解决方案并在内部维护它们变得完全不可行。
灵活性
关系数据库为王的日子已经一去不复返了。关系数据库非常适合处理结构化数据。然而,在许多机器学习领域,如计算机视觉或自然语言处理(NLP),对半结构化和非结构化数据的支持是必不可少的。
企业数据库对非结构化数据的支持有限。这不是它们的设计初衷,因此它们在 MLOps 中的作用并不明显。在为您的数据操作选择数据存储时,您不仅需要考虑您当前的需求,还需要尽可能考虑您将在两年、三年或五年内运行的模型。支持机器学习工作负载的数据存储系统在格式方面必须灵活。它应该很容易处理表格数据和其他格式,如 JSON、Avro、ORC、Parquet、XML 等等。
混合工作负载
一些数据存储擅长处理事务性工作负载,这些工作负载只需要对一两个数据行执行计算,并且响应时间不到一秒。其他人擅长管理分析工作负载,这些工作负载需要处理数百万行数据,并且响应时间相对宽松。出于数据操作的目的,数据科学家需要在这两方面都出色的数据存储。
雪花的建筑真的很有趣。他们采用压缩的列方法来存储数据,这允许大规模地高性能处理分析和事务性工作负载。雪花的“虚拟仓库”,本质上是 MPP 计算集群,具有内在的灵活性,因为它们可以随着资源需求的变化而动态地创建、调整和删除。这些微分区支持高效扫描各个列,以支持所需的分析和事务查询的执行。
可靠性
当停电使公司的数据不可用时,所有的数据操作都会突然停止;对于您的数据科学家来说,除了等待 it 团队纠正这种情况之外,别无他法。从财务角度来看,让您的数据操作闲置一段时间已经够糟了,但在停机期间无法接收新数据很可能会加剧这一问题。
数据是组织可以拥有的最大资产。不要误解我——人力资本也非常重要。数据科学人才需求量很大。有许多可用的报告谈到在一个 继续快速增长 的领域中数据科学家 的持续短缺。如果你失去了整个数据科学/机器学习团队,你将会经历一段痛苦的旅程。但是可以雇佣新员工,对现有员工进行再培训。是的,这将是昂贵的,对企业来说将是一个挫折,但公司仍然可以恢复。另一方面,如果你丢失了所有的数据,很可能几个月后你的公司将不复存在。
数据存储的可靠性是绝对必要的。在内部运行数据库的单个实例很容易,但是如果您需要在集群中运行多台服务器,并提供负载*衡、灾难恢复和其他服务,那么管理起来就要复杂得多,成本也高得多。在大多数情况下,最好使用云提供商的服务来进行数据存储操作。像雪花,GCP,AWS 和其他供应商有专门的团队来照顾基础设施的可靠性,从可用性和安全性的角度来看。这是他们每周 7 天、每天 24 小时都在做的事情,他们积累的经验让他们比内部团队更有优势。
云原生存储
这在某种程度上是上述可靠性考虑的延伸。利用云原生存储资源可以获得多项重要优势:
- 灵活的容量:利用云资源允许您的数据科学团队根据需求调整分配的资源。如果您的系统完全是内部部署的,您将不得不投资昂贵的硬件来进行扩展。然后,一旦需求下降,缩小规模就更成问题了。
- 维护和安全性:如上所述,将这些服务卸载给供应商几乎总是有利的。他们通常会比内部团队做得更好,因为这是他们的主要关注点;他们以此为生,每天应对威胁会让服务提供商比您的内部团队更有经验。
- 地理恢复能力—这不仅涉及通过冗余实现的群集可靠性,还涉及在特定区域隔离数据以符合区域法规的能力。
处理敏感数据的公司通常会有多个禁止相互连接的网络。他们可能有专门的内部环境来存放敏感数据,以符合当地或区域的数据治理要求。其他不受限制的数据可以存储在任何地方,因此经常被发送到云。数据科学家面临的问题是,当我们处理两个(或更多)截然不同的孤立环境时,我们如何进行协作?
当数据不能跨越国界时,你需要对数据进行计算,而不是反过来。但是,如果您有云数据存储支持的分布式数据操作,您可以在您最好的数据科学家居住的任何地方开发和试验模型(只要您只使用样本/匿名数据)。借助云原生存储,您可以在世界任何地方构建和训练这些模型。一旦远程数据科学家调整了模型,他们可以轻松地将它们导出到敏感数据所在的区域,本地数据科学家可以在那里部署模型并针对实际的敏感数据执行操作。
易用性
这里的关键思想是让数据科学家做数据科学。数据存储必须易于从任何语言和工具(Python、R、MATLAB 等)访问。)你的数据科学家更喜欢。同样重要的是,要有一个开放的数据科学*台,可以轻松地与各种数据存储集成。没有必要经历大量的数据存储选择过程,而只是意识到当前的 DS 堆栈不支持它。
此外,使用数据存储的学习曲线不应该太陡。如果您的数据科学团队有自我改进的时间预算,他们应该花时间学习新的算法和技术,获取更多的领域知识,或者更加精通他们日常使用的语言和框架。他们不应该花费分配的时间学习晦涩的专有 API 或 SQL 语法,仅仅是为了获得他们需要的数据。如果给定的解决方案要求用户开发大量的专有知识,例如,开发人员认证路径包括五门培训课程(每门 3-5 天)和五门认证考试,那么这可能不是您的数据科学团队可以依赖的理想系统。
您所使用的技术工具应该尽可能对您的数据科学家不可见。您的数据科学家已被聘用,并根据他们所带来的深厚专业知识获得报酬。因此,他们的时间是非常宝贵的;他们应该把钱花在开发、培训、部署和监控模型上,而不是浪费在 it 基础设施上。
考虑一个医院环境:我们不希望看到外科医生花费时间来确保初级保健医生或急诊室人员在电子健康记录(EHR)中捕获的笔记是可访问的和完整的。毫无疑问,外科医生获得这些信息对患者的结果至关重要,但是外科医生需要将他们的时间和精力花在他们唯一胜任的活动上。在数据科学运营中,我们不希望数据科学家必须管理他们用于开发、培训和部署模型的基础架构。或者,更糟糕的是,我们不希望看到他们调整他们的流程来适应或解决他们的技术工具带来的限制。
数据版本化
数据科学中的再现性极其重要。如果您不想手动处理数据版本控制,支持这种现成功能的数据库可以让事情变得非常简单。 雪花时间旅行 和 零拷贝克隆 就是这种重要能力的绝佳例子。
假设以下情况:为一家金融机构工作的数据科学家使用机器学习开发和训练一个评分模型,以批准或拒绝贷款申请人。该模型已部署,并在前两年在整个企业中运行良好。但随后,该银行受到了该模型存在偏见的指控。数据科学团队在审核期间必须回答的第一个问题是他们如何训练模型。他们需要访问两年前使用的培训数据。
为了重现性,公司需要他们的原始数据。一些系统很好地自动化了这一点;Oracle 拥有“闪回”技术,可以提供特定时间段的数据。它自动跟踪一段时间内数据的所有更改,并返回查询中请求的日期之后的数据。并非所有数据存储都以这种方式工作,而是需要数据科学家手动跟踪更改或手动在不同的时间点拍摄快照。
未来焦点
这是一个长期的数据操作策略。您的数据存储的潜在供应商是否具有前瞻性?他们的路线图是什么?他们懂机器学习和数据科学吗?他们是否提供(或考虑)对 Python/R 的数据库内执行的支持?他们能利用 GPU 吗?他们可以部署模型进行数据库内评分吗?他们会考虑 Kubernetes 的支持吗?诸如此类的问题将有助于您了解数据存储提供商在未来几年的发展前景。
了解您的数据操作中使用的工具和产品在多大程度上符合供应商的产品战略,以及他们的路线图的哪一部分是以机器学习和数据科学为导向的,这一点非常重要。简而言之,寻找一家了解数据科学和机器学习的数据存储供应商,其对该学科在五年内的发展前景的愿景与您的数据科学团队的愿景相吻合。
结论
几乎在所有情况下,数据存储的购买决策都取决于企业内部的购买委员会。组织数据运营的成熟度将决定委员会的组成人员。那些没有深入到将数据模型置于其业务运营核心的组织可能会将决定权交给 IT 领导层。那些在成为模型驱动型企业的道路上走得更远的公司可能会有一位首席数据分析官(CDAO)或同等职位的人来做出最终决定。但是,最终,IT 人员和数据科学领导者和实践者应该根据上述八个考虑因素,共同决定一个能够提供最佳功能组合的解决方案。
无论您的组织是否比您所希望的晚一点认识到数据存储的功能对数据操作的成功至关重要,或者您是否能够选择理想的数据存储来发展您的数据操作,所有人员都需要了解选择满足您现在和未来需求的最佳解决方案有多重要。
数据科学团队的情商
原文:https://www.dominodatalab.com/blog/emotional-intelligence-data-science-teams
我们调查并采访了一些最成功的客户,以了解他们如何将数据科学团队与其业务相结合。涉及的挑战不是技术性的,这就是为什么解决方案对数据科学从业者和管理者来说可能不容易。
根据我们最成功的客户的说法,这里有三条关于如何让和展示给你的组织带来更大商业影响的经验:
1.数据科学的标题中有科学是有原因的。
数据科学的生命周期是迭代的,这意味着您在不断学习和尝试新事物。但是你尝试的东西通常有一半以上都不起作用。这是因为它实际上是一门科学,就像任何科学研究一样,在你尝试之前,你不知道什么会起作用。因此你不能给它设定一个时间线;你必须继续试验。这可能是为什么大多数科学研究都是在实验室环境中进行的,在那里,研究的生命周期是众所周知和公认的。
当您开始将这种工作方式与快节奏的业务需求相结合时,可能会产生摩擦,从而阻碍数据科学团队的参与。
我们最成功的客户通过他们推动数据科学项目的方式,找到了将科学与商业概念融合的方法。他们的第一个建议是要有一套明确的程序和你要尝试的目标。这消除了对项目成功的期望,并把焦点放在实现商定的里程碑上,不管它是成功还是失败。
第二条建议是避免从左到右工作的常见错误,即“这是我们所有的数据,我们可以用它做什么有趣的事情?”
无论何时你从数据开始,它都会引入范围蔓延,并且没有清晰的方法来衡量成功。这是赢得从事抽象科学项目并让企业不理解你或你的团队在做什么的声誉的一个万无一失的方法。永远从业务问题开始,然后向后推进。问一些问题,比如“我们试图产生什么样的业务影响?”“我们试图改变什么标准?”“我们试图影响什么决策?”这将提供您需要的数据,还将帮助您清楚地定义成功是什么样的,并让利益相关者参与整个过程。
2.情商比技术能力更重要。
数据科学最性感的部分是建模——尝试不同的算法,试验不同的功能,探索大量不同的数据。大多数数据科学家希望将大部分时间花在这一块是有道理的。不幸的是,在将数据科学与业务结合起来时,这并不是最需要关注的领域。我们所有最成功的客户都详细谈论了这一斗争。是时候提升你的情商了。
我们听到的一条建议是努力培养移情技能。你正与高级管理人员一起工作,以获得接受实验文化的认同。这意味着让他们适应快速失败和迭代,并且没有明确的需求,可以“项目管理”到交付。你如何做到这一点?先做业务人员,再做技术人员。业务主管必须交付成果,而过度的技术化会让他们认为你不了解业务。
另一个建议是对组织中的人过去如何做决策和运作保持敏感——他们是各自领域的专家,这是他们谋生的方式。你的工作是帮助企业做出更好的决策,而不是为结果邀功。例如,不要使用“数据科学团队的工作为销售团队节省了 20%的成本”这样的短语,而是使用“数据科学团队的工作为销售团队节省了 20%的成本”或“销售团队和数据科学团队共同节省了 20%的成本”这样的短语
如果您希望企业与您合作,并利用您的模型的输出,重要的是丰富他们的直觉,而不是取代它。以他们仍能做出决策的方式呈现输出和结果。
3.用“政治资本”作为货币来衡量投资回报率。
获得业务部门的认可至关重要,尤其是在组建数据科学团队的早期阶段。有可能一位高层领导已经大胆地投资建设你的团队,并需要很快评估这项投资的投资回报率。您的团队在这些早期阶段选择进行的项目可能比您想象的更能决定您的团队未来的成功。
想想拿小胜在银行积累政治资本。如果你在低风险的小项目上保持稳定的成功流,你将积累足够的政治资本来“资助”更大的风险更高的项目。你想建立梦想,但不要先做最复杂的事情。展示进步会让你在未来接受更高风险的投资。
对于非常早期的团队,我们听到的建议是用来自整个组织中其他高级赞助商的政治资本来衡量 ROI。在早期,即使是小项目也很难衡量投资回报率,但是你可以通过确保利益相关者对你正在做的事情“感觉良好”来创造跑道。
最大的一条建议是,数据科学项目应该总是产生建议做某事或不做某事 的输出。避免“嘿,这很有趣”这样的问题。
如果您将项目与产出挂钩,那么它们是可以衡量的。衡量仍应考虑政治资本,因为你不想因影响而邀功,因为这侵犯了企业利益相关者的专业领域,并损害了这种关系。相反,根据以下五个影响领域之一来衡量项目:
- 推动收入增长
- 降低成本
- 降低风险
- 优化资产负债表
- 更有效地管理人力资本
要了解其他数据科学团队如何根据业务目标调整工作,请阅读我们的案例研究。
在雪花中构建、部署和监控模型
原文:https://www.dominodatalab.com/blog/end-to-end-data-science-workflows-in-snowflake
利用雪花 Snowpark 引入端到端数据科学
达美乐高级产品经理维奈·斯里达尔于 2022 年 6 月 13 日在 发布产品更新
数据科学团队构建模型以改善决策和推动业务成果的压力越来越大,这意味着数据科学家的游戏时间结束了。建立模型驱动的竞争优势始于数据,雪花现在是规范的数据存储。
当数据科学团队专注于构建、部署和监控突破性模型,快速迭代以最大限度地提高预测准确性时,他们的创新最多。数据和基础架构访问令人分心的复杂性造成了孤岛,妨碍了有效的协作。
编排数据的移动需要定制开发工作并引入手动变通方法,增加了数据科学家和 ML 工程师的风险。此外,如果生产数据与模型不在同一位置,性能下降会产生瓶颈。
Domino 和雪花通过将 Domino 中企业 MLOps 的灵活性与雪花的数据库内计算*台的可伸缩性和强大功能结合起来,解决了这些挑战。客户可以在 Domino 中开发模型,使用 Snowpark 在 Snowflake 中训练它们,然后将模型直接从 Domino 部署到 Snowflake 数据云中,进行数据库内评分,从而加快价值实现。
数据库内评分的兴起带来了许多优势,即通过跨 IT 和数据科学团队的通用*台简化了企业基础架构,从而实现了:
- 简单。典型的雪花用例在大规模、高数据量的情况下运行。将数据从雪花移动到部署模型的位置并将预测写回到雪花需要复杂的数据管道,这可能难以构建和管理。
- 更好的性能。将如此大量的数据移入和移出雪花服务器成本高昂,并且会影响整体性能。像雪花这样的复杂数据库引擎针对可在 ML 推断期间使用的专有数据格式进行了优化,从而提供了优于通用计算*台的性能优势。
如何用雪花和多米诺建立模型
Domino 提供了与雪花的本机集成,因此 Domino 用户可以选择雪花作为数据源。这是比直接在 Domino 工作区中使用环境变量或用户凭证更新的功能。
选择雪花作为数据源后,用户可以选择 1)输入他们的雪花凭据,或者 2)选择 OAuth,这是一种开放标准协议,允许受支持的客户端授权访问雪花,而无需存储用户登录凭据。注意:OAuth 必须由 Domino 管理员预先配置,以便用户可以选择它。
一旦 Domino 连接到雪花的数据云,数据科学家就可以利用 Snowpark 库快速构建模型。 Snowpark 让用户构建应用程序(使用 Python、Scala 或 Java 之类的高级语言),优化运行于雪花计算环境——数据驻留的地方。
如何使用 Snowpark UDF 部署 Domino 中构建的模型
Snowpark 中的核心抽象是 DataFrame,所以除了使用 Snowpark 库中的内置功能,Domino 用户还可以使用本机 Domino 接口为 ML 推理创建用户定义函数(UDF)。DataFrame 和 UDF 都被优化为在雪花服务器上异步执行。
通过一个简单的 UI,您可以选择调用 Domino 内置模型的文件和预测函数。这是一个将注册为 Snowpark UDF 的函数,可以在 Snowflake 应用程序内部或 SQL 查询中使用,以运行批量评分。
一旦指定了雪花服务器设置,Domino 就在雪花中持久化模型、包依赖项和必要的文件,并注册 UDF。
您可以在 Domino 的导出目录中查看所有导出的模型。通过单一控制台,除了包括主机设置、元数据和监控信息(如果已配置)在内的大量其他详细信息之外,还会显示所有导出及其模型性能指示器。
您可以从雪花 SQL 查询中调用 Snowpark UDFs。在本例中,该命令通过推理代码调用客户流失预测模型——两者都内置于 Domino 中——作为雪花中的 UDF 导出。
如何配置 Domino 模型监控
回到 Domino,您可以通过几个简单的步骤来配置模型监控。一旦选择了训练数据集,并通知 Domino 包含预测输出的表,Domino 就会在每次进行新的一批预测时自动从该表中获取数据,并计算漂移度量。
您还可以在每个特性的基础上配置漂移测试和阈值,Domino 会定期通知用户任何已经漂移的特性。您还可以设置一个表来包含基本事实数据,并以同样的方式为连续摄取设置它。Domino 然后计算模型质量度量,并在违反阈值时提醒用户。
结论
最新的 Domino 和雪花集成通过跨 IT 和数据科学团队的通用*台简化了企业基础架构。数据科学家现在可以在 Snowflake 中即时、安全地访问他们需要的数据。他们拥有在 Domino 中构建模型的灵活性,以及用于数据库内计算的雪花*台的可伸缩性和强大功能。最后,他们可以为部署到雪花数据云的模型自动设置预测数据捕获管道,确保预测准确性和最大的业务影响。
达美乐是 2022 年雪花峰会的骄傲赞助商。欢迎参观我们的展位#2028,或参加我们 6 月 15 日星期三中午 12:30 的会议:端到端数据科学模型开发、部署、&监控。
错过了雪花峰会?加入我们于 6 月 22 日举办的 突破性创新秘诀 虚拟活动,您将看到这些整合的实际应用。您还将听到来自威瑞森和强生公司的数据科学创新者。
在 dominodatalab.com/snowflake 的 了解更多关于达美乐和雪花的合作。
关于作者
| | 维奈·斯里达尔是达美乐公司的高级产品经理。他专注于模型生产和监控,目的是帮助 Domino 客户从他们的 ML 研究工作中获得商业价值。他拥有多年开发利用 ML 和云技术的产品的经验。 |
宣布增强 Apache Spark 支持
原文:https://www.dominodatalab.com/blog/enhanced-apache-spark-integration
Domino 现在为数据科学家提供了一种使用 Apache Spark 进行定量工作的简单但非常强大的方法。
Apache Spark 已经俘获了数据专业人员的心。Spark 是一项最初由伯克利 AMP 实验室开发的技术,它提供了一系列工具来应对整个数据生态系统的巨大挑战。Spark 支持通过流式传输摄取实时数据,支持大规模分布式 ETL,甚至支持使用 MLLib 和新添加的数据帧 API 进行分析和建模。
在 Domino,我们认为现代数据科学团队基本上是多语言生态系统,其中许多具有不同哲学和架构方法的不同工具发挥着重要作用。虽然 Domino 早就有能力运行触发 Spark 作业并连接到 SparkSQL 数据源的代码,但我们自豪地宣布显著增强了 Spark 支持:
- 广泛的部署和配置支持,目前提供本地模式和独立集群模式,未来几周将提供 YARN 支持。
- 项目级 Spark 配置,允许单个项目访问不同的 Spark 集群,甚至不同的 Spark 版本,所有这些都可以从一个下拉菜单中完成。所有依赖项都会自动安装,无需进一步配置。
- Python 内核的 Jupyter 笔记本是自动预配置的,SparkContext 对象可用于您的代码。
这一技术预览版将在未来几个月内得到进一步增强,SparkR 支持和企业认证很快就会推出。
简单配置
如上所述,单个项目可能会启用自己的 Spark 集成。这使得组织在决定数据科学家应该如何与数据交互时具有相当大的灵活性。我们的许多客户都在评估使用 Spark 的方法,并且经常在试验多种不同的配置。通过将每个项目连接到不同的 Spark 集群,组织可以使用 Domino 快速迭代调查。
简单的环境管理
许多组织使用许多不同的 Spark 版本。Domino 通过我们的 Domino 环境功能帮助管理这种复杂性。Domino 环境允许客户重用提供的或定制的 docker 映像,而无需管理任何基础设施,这可以通过一个简单的下拉菜单实现。用户可以通过选择正确的环境来配置项目的目标 Spark 版本。
在 Spark 已经成为成熟技术的组织中,默认的 Domino 环境可能预装了所有必需的库。
无配置笔记本电脑
数据科学家现在可以启动 Jupyter 笔记本,并通过 PySpark 或 SparkSQL 立即与 Spark 集群进行交互。不需要进一步的配置和身份验证,SparkContext 对象就可以立即使用了。
如上所述,我们将很快发布对 SparkR 的支持,以及对使用企业认证的更复杂的 Spark 配置的支持。
我们希望收到您的来信!
Apache Spark 拥有一个庞大、复杂且快速发展的生态系统。我们很高兴能与我们的客户合作,共同探索如何将 Spark 集成到现代数据科学实践中。我们很想听听您如何认为我们应该改进 Domino 的 Spark 支持来实现这一目标。
采用 spaCy v3 的企业级 NLP
原文:https://www.dominodatalab.com/blog/enterprise-class-nlp-with-spacy-v3
spaCy 是一个 python 库,它提供了进行高级自然语言处理分析和构建模型的能力,这些模型可以支持文档分析、聊天机器人功能和所有其他形式的文本分析。
spaCy 库在麻省理工学院的许可下可用,主要由来自爆炸E爆炸的 Matthew Honnibal、Ines Montani、Sofie Van Landeghem 和 Adriane Boyd 开发。AI 。
最新版本 spaCy 3.0 带来了许多改进,有助于构建、配置和维护您的 NLP 模型,包括
- 新培训和再培训的基于变压器的管道显著提高了精确度。
- 额外的配置功能构建您的训练工作流程并调整您的训练跑步
- 快速启动小工具帮助构建您的配置文件
- 更容易与其他工具集成,如 Streamlit 、 FastAPI、或 Ray ,以构建向最终用户提供结果的工作流。
- 利用 Ray 的并行/分布式功能加快训练周期
- 包装器使你能够带来其他框架,如 PyTorch 和 TensorFlow
这些特性结合在一起,使得 spaCy 在处理大量文本和调整您的配置以匹配您的特定用例方面比以往任何时候都更好,从而提供更好的准确性。
Retrieved from https://spacy.io/
入门指南
之前,我们发表了一篇博客,介绍了安装步骤和 spaCy 的介绍,spaCy 将原始文本处理成 NLP 文档,并以多种不同的方式完成了分析和可视化数据所需的步骤,包括实体检测和情感分析。
附在那个博客上,我们还包括了一个关于https://try.dominodatalab.com的参考项目,可以在这里找到,它为你提供了一个预配置的环境和项目,给你一个尝试 spaCy 的简单方法。
改进的基于变压器的管道
将原始文本处理成 NLP 工作流的第一步是将文本标记成文档对象。这通常被称为处理流水线。spaCy 包括许多不同的预建处理管道,涵盖不同的语言和偏好设置,根据您的使用情况和处理文本的速度,提供更高的准确性或更高的效率。
这些经过训练的管道包括执行不同功能的组件,例如
- 实体识别 -在文档中查找人、地点、项目或时间戳。
- 词性——识别文档中的名词、动词、形容词和副词。
- 依存解析器 -识别单词的关系和本体,以评估它们的上下文。
这些组件是在将原始文本转换为 NLP 文档对象的初始阶段作为参数添加的。
spaCy processing pipeline diagram retrieved from https://spacy.io
这里,我们将三段单独的文本解析成一个文档,然后对文本中所有找到的实体进行汇总。
import spacy
texts = [
"David works as a Data Scientist at Domino Data Lab",
"Domino Data Lab is a company that provides enterprise-class data science capabilities through its platform.",
"David joined Domino Data Lab in February 2020."]
nlp = spacy.load("en_core_web_lg")
for doc in nlp.pipe(texts, disable=["tagger", "parser"]):
# Print all found entities within the document.
print([(ent.text, ent.label_) for ent in doc.ents])
这段代码的输出正确地识别出文档中输入了一个人、一个组织和一个日期。
[('David', 'PERSON')]
[('Domino Data Lab', 'ORG')]
[('David', 'PERSON'), ('Domino Data Lab', 'ORG'), ('February 2020', 'DATE')]
这是可能的,因为我们将预训练的处理管道称为初始加载的一部分——“en _ core _ web _ LG”。这些预先配置的模型是处理文本的良好开端;然而,spaCy 3.0 中包含了一个小部件来帮助您优化配置。
Bench-marking data from https://spacy.io
这些模型经常权衡效率和质量分数。例如,如果我们将预先训练的模型从“en_core_web_lg”更改为“en_core_web_sm ”,我们会看到文档的处理时间要快得多。尽管如此,我们也注意到它没有正确地将 Domino Data Lab 标记为一个组织,而是认为它是一个人。
import spacy
texts = [
"David works as a Data Scientist at Domino Data Lab",
"Domino Data Lab is a company that provides enterprise-class data science capabilities through its platform.",
"David joined Domino Data Lab in February 2020."
]
nlp = spacy.load("en_core_web_sm")
for doc in nlp.pipe(texts, disable=["tagger", "parser"]):
# Print all found entities within the document.
print([(ent.text, ent.label_) for ent in doc.ents])
[('Domino Data', 'PERSON')]
[('David', 'PERSON'), ('Domino Data', 'PERSON'), ('February 2020', 'DATE')]
这些预先配置的模型是处理文本的良好开端;然而,spaCy 3.0 中包含了一个小部件来帮助您优化配置。
配置文件和快速启动小部件
spaCy v3 引入了一个扩展的配置系统,允许您创建一个包含要应用的设置、超参数和 NLP 组件的配置文件。
配置文件可以很容易地调用到您的项目中。
python -m spacy init fill-config base_config.cfg config.cfg
一个配置文件的优点是没有隐藏的元素来处理你的模型。这可以让您在回顾结果时看到模型运行的确切设置,以及将配置保存为文件的常见版本控制方面。
How config files are used within spaCy
配置文件还允许您包含您已经内置在其他框架中的定制模型和函数,提供了灵活性以确保您如何运行您的空间模型是为手边的用例专门构建的。
spaCy v3 还包括一个方便的 Quickstart 小部件,它允许您生成一个起点配置文件,该文件是根据许多推荐的设置构建的,这些设置可以在您调整模型时进行调整。
spaCy Quickstart widget retrieved from https://spacy.io
空间项目
项目是 spaCy v3 中的一个全新特性,它允许您创建和使用参考项目架构,为所有 NLP 工作流设置模式和实践。
项目还包括几个预定义的项目模板,旨在与数据科学工具集成,让您跟踪和管理您的数据,通过可视化共享您的结果,并将您的模型作为 API。
Project templates available within spaCy
这种在数据科学团队内部构建典型 NLP 工作流的能力有助于提高效率,并以系统化的方式处理组织内部的所有 NLP 任务。
结论
spaCy v3 代表了该库整体上的一个重大改进。新训练的处理管道显著提高了 spaCy 生成的所有输出的准确性。包含配置文件、项目模板和集成使您能够更轻松地配置和控制 NLP 项目在您的团队中的运行方式,从而提高您为最终用户提供结果的速度。
现有组件的改进和处理管道中新组件的包含,例如依存关系匹配、句子识别和形态预测,为用户提供了更多分析文本和产生准确和相关结果的能力。添加包装器来允许您从其他模型库中调用函数也扩展了这种灵活性,以定制您如何构建、训练和部署您的模型。
要亲自试用 spaCy,请在https://try.dominodatalab.com注册试用,并从我们的 spaCy 参考项目开始,该项目可在https://try . dominodatalab . com/u/domino-John joo/spaCy-dev/overview找到
评估生成对抗网络
原文:https://www.dominodatalab.com/blog/evaluating-generative-adversarial-networks-gans
本文提供了对 GANs 的简明见解,以帮助数据科学家和研究人员评估是否要进一步调查 GANs。如果你对教程以及 Domino 项目中的实践代码示例感兴趣,那么考虑参加即将到来的网络研讨会,“生成对抗网络:精华教程”。
介绍
随着主流对 deepfakes 越来越多的关注,生成敌对网络(GANs)也进入了主流聚光灯下。毫不奇怪,这种主流关注也可能导致数据科学家和研究人员提出问题,或评估是否在自己的工作流中利用 GANs。虽然 Domino 提供了一个*台,让行业能够利用他们选择的语言、工具和基础设施来支持模型驱动的工作流,但我们也致力于支持数据科学家和研究人员评估像 GANs 这样的框架是否有助于加快他们的工作。这篇博客文章提供了对 GANs 的高级见解。如果你对一个 Domino 项目中的教程和实践代码示例感兴趣,那么考虑参加即将到来的网络研讨会,“生成对抗网络:一个精选教程”,由 EMEA Domino 首席数据科学家尼古拉·曼切夫主持。这两个多米诺项目
Domino Project: https://try.dominodatalab.com/workspaces/nmanchev/GAN
网络研讨会比这篇博文更有深度,因为它们涵盖了一个基本 GAN 模型的实现,并展示了如何使用敌对网络来生成训练样本。
为什么是甘斯?考虑区别性与生成性
关于区分性量词和生成性量词的利弊问题已经争论了很多年。判别模型利用观察到的数据并捕捉给定观察的条件概率。从统计学的角度来看,逻辑回归是区别对待的一个例子。反向传播算法或 backprop,从深度学习的角度来看,是一种成功的判别方法的例子。
生成式不同,因为它利用了联合概率分布。生成模型学习数据的分布,并洞察给定示例的可能性。然而,伊恩·古德菲勒、让·普盖-阿巴迪、迈赫迪·米尔扎、徐炳、戴维·沃德-法利、谢尔吉尔·奥泽尔、亚伦·库维尔和约舒阿·本吉奥在论文《生成对抗网络》中指出
“由于在最大似然估计和相关策略中出现的许多难以处理的概率计算的*似困难,以及由于在生成上下文中利用分段线性单元的优势的困难,深度生成模型的影响[比鉴别性的]要小。我们提出了一种新的生成模型估计过程,避开了这些困难
Goodfellow 等人提出了 GANs 并解释道:
“在提出的对抗性网络框架中,生成模型与对手对抗:一个学习确定样本是来自模型分布还是数据分布的判别模型。生成模型可以被认为类似于一队伪造者,试图生产假币并在不被发现的情况下使用,而辨别模型类似于警察,试图检测假币。这场游戏中的竞争促使两个团队改进他们的方法,直到无法区分假冒品和真品。”
GANs:可能对半监督学习和多模型设置有用
gan 对于半监督学习以及包含未标记数据或部分数据样本被标记的数据的情况是有用的。当寻找对应于单个输入的多个正确答案时(即,多模态设置),生成模型也是有用的。在后续教程中, Goodfellow 引用
“生成模型可以用缺失数据进行训练,并可以对缺失数据的输入进行预测。缺失数据的一个特别有趣的例子是半监督学习,其中许多甚至大多数训练样本的标签都是缺失的。现代深度学习算法通常需要极其多的标记样本才能很好地概括。半监督学习是减少标签数量的一种策略。该学习算法可以通过学习大量通常更容易获得的未标记样本来提高其泛化能力。生成模型,尤其是 GANs,能够相当好地执行半监督学习。”
和
“生成模型,尤其是 GANs,使机器学习能够处理多模态输出。对于许多任务,单个输入可能对应许多不同的正确答案,每个答案都是可接受的。一些训练机器学习模型的传统手段,如最小化期望输出和模型预测输出之间的均方误差,无法训练出可以产生多个不同正确答案的模型。”
结论
这篇博文集中于对 GANs 的简明高层次见解,以帮助研究人员评估是否要进一步调查 GANs。如果对教程感兴趣,那么请查看即将举行的网络研讨会“生成式对抗网络:精选教程”,由 Domino EMEA 首席数据科学家尼古拉·曼切夫主持。网上研讨会和补充 Domino 项目比这篇博文提供了更多的深度,因为它们涵盖了一个基本 GAN 模型的实现,并演示了如何使用敌对网络来生成训练样本。
评估 Ray:分布式 Python 的大规模可伸缩性
原文:https://www.dominodatalab.com/blog/evaluating-ray-distributed-python-for-massive-scalability
迪安 Wampler 提供了 Ray 的概要,这是一个用于将 Python 系统从单机扩展到大型集群的开源系统。如果您对其他见解感兴趣,请注册参加即将举行的射线峰会。
介绍
这篇文章是为做技术决策的人写的,我指的是数据科学团队领导、架构师、开发团队领导,甚至是参与组织中使用的技术的战略决策的经理。如果你的团队已经开始使用 Ray 并且你想知道它是什么,这篇文章就是为你准备的。如果您想知道 Ray 是否应该成为您基于 Python 的应用程序(尤其是 ML 和 AI)的技术策略的一部分,那么这篇文章就是为您准备的。如果你想对 Ray 有更深入的技术介绍,可以在 Ray 项目博客上看到这篇文章。
雷是什么?
Ray 是一个 T2 开源系统,用于将 Python 应用从单机扩展到大型集群。它的设计是由下一代 ML 和 AI 系统的独特挑战驱动的,但它的特性使 Ray 成为所有需要跨集群伸缩的基于 Python 的应用程序的绝佳选择,特别是如果它们具有分布式状态。Ray 还提供了一个侵入性最小且直观的 API,因此您无需在分布式系统编程方面花费太多精力和专业知识就能获得这些好处。
开发人员在他们的代码中指出哪些部分应该分布在集群中并异步运行,然后 Ray 为您处理分布。如果在本地运行,应用程序可以使用机器中的所有内核(您也可以指定一个限制)。当一台机器不够用时,可以直接在一个机器集群上运行 Ray,让应用程序利用这个集群。此时唯一需要更改的代码是在应用程序中初始化 Ray 时传递的选项。
使用 Ray 的 ML 库,如用于强化学习(RL)的 RLlib 、用于超参数调整的 Tune 和用于模型服务(实验性)的 Serve,都是用 Ray 在内部实现的,因为它具有可伸缩、分布式计算和状态管理的优势,同时提供了特定于领域的 API 来实现它们的目的。
Ray 的动机:训练强化学习(RL)模型
为了理解 Ray 的动机,考虑训练强化学习(RL)模型的例子。RL 是一种机器学习类型,最*被用于击败世界上最好的围棋选手,并实现雅达利和类似游戏的专家游戏。
可伸缩 RL 需要许多 Ray 设计提供的功能:
- 高度并行和高效地执行任务 (数百万或更多)——当训练模型时,我们一遍又一遍地重复相同的计算,以找到最佳的模型方法(“超参数”),一旦选择了最佳结构,就找到工作最佳的模型参数。当任务依赖于其他任务的结果时,我们还需要正确的任务排序。
- 自动容错 -对于所有这些任务,它们中的一部分可能会因为各种原因而失败,因此我们需要一个支持任务监控和故障恢复的系统。
- 多样的计算模式——模型训练涉及大量的计算数学。特别是,大多数 RL 模型训练还需要模拟器的高效执行——例如,我们想要击败的游戏引擎或代表真实世界活动的模型,如自动驾驶。使用的计算模式(算法、内存访问模式等。)是更典型的通用计算系统,它与数据系统中常见的计算模式有很大不同,在数据系统中,高吞吐量的转换和记录的聚合是标准。另一个区别是这些计算的动态性质。想想一个游戏玩家(或模拟器)是如何适应游戏的发展状态,改进策略,尝试新战术等。这些不同的需求出现在各种新的基于 ML 的系统中,如机器人、自主车辆、计算机视觉系统、自动对话系统等。
- 分布式状态管理 -使用 RL,需要在训练迭代之间跟踪当前模型参数和模拟器状态。因为任务是分布式的,所以这种状态变成分布式的。正确的状态管理还需要有状态操作的正确排序..
当然,其他 ML/AI 系统需要部分或全部这些能力。大规模运行的一般 Python 应用程序也是如此。
雷的要旨
像 RLlib、Tune 和 Serve 这样的 Ray 库使用 Ray,但大多数情况下对用户隐藏它。然而,使用 Ray API 本身很简单。假设您有一个“昂贵”的函数要对数据记录重复运行。如果它是无状态的,这意味着它在调用之间不维护任何状态,并且您想要并行地调用它,那么您需要做的就是通过添加如下的@ray.remote
注释将该函数转换成一个 Ray 任务:
@ray.remote
def slow(record):
new_record = expensive_process(record)
return new_record
然后初始化 Ray 并在数据集上调用它,如下所示:
ray.init() # Arguments can specify the cluster location, etc.
futures = [slow.remote(r) for r in records]
注意我们是如何使用slow.remote
调用函数slow
的。每一个呼叫都会立即返回,并带来一个未来。我们收集了它们。如果我们在集群中运行,Ray 管理可用的资源,并将这个任务放在一个节点上,该节点具有运行该功能所必需的资源。
我们现在可以要求 Ray 在使用完ray.wait
后返回每个结果。这里有一个惯用的方法:
while len(futures) > 0:
finished, rest = ray.wait(futures)
# Do something with “finished”, which has 1 value:
value = ray.get(finished[0]) # Get the value from the future
print(value)
futures = rest
如前所述,我们将等待一个 slow 调用完成,此时ray.wait
将返回两个列表。第一个只有一个条目,即已完成的慢速调用的未来的 id。我们传入的期货列表的其余部分将在第二个列表中— rest
。我们调用ray.get
来检索已完成的未来的价值。(注意:这是一个阻塞调用,但它会立即返回,因为我们已经知道它已经完成了。)我们通过将我们的列表重置为剩余的列表来结束循环,然后重复直到所有的远程调用都已完成并且结果已被处理。
您还可以向ray.wait
传递参数,一次返回多个参数,并设置超时。如果您没有等待一组并发任务,也可以通过调用ray.get(future_id)
来等待特定的未来。
如果没有参数,ray.init 假定本地执行并使用所有可用的 CPU 核心。您可以提供参数来指定要运行的集群、要使用的 CPU 或 GPU 核心的数量等。
假设一个远程函数通过另一个远程函数调用传递了未来。Ray 将自动对这些依赖关系进行排序,以便按照所需的顺序对它们进行评估。你不必自己做任何事情来处理这种情况。
假设您有一个有状态计算要做。当我们使用上面的ray.get
时,我们实际上是从分布式对象存储中检索值。如果你愿意,你可以自己显式地把对象放在那里,用ray.put
返回一个 id,稍后你可以把它传递给ray.get
再次检索它。
用参与者模型处理有状态计算
Ray 支持一种更直观、更灵活的方式来管理 actor 模型的设置和检索状态。它使用常规的 Python 类,这些类被转换成具有相同@ray.remote
注释的远程参与者。为了简单起见,假设您需要计算 slow 被调用的次数。这里有一个这样的类:
@ray.remote
class CountedSlows:
def __init__(self, initial_count = 0):
self.count = initial_count
def slow(self, record):
self.count += 1
new_record = expensive_process(record)
return new_record
def get_count(self):
return self.count
除了注释之外,这看起来像一个普通的 Python 类声明,尽管通常情况下您不会仅仅为了检索计数而定义get_count
方法。我很快会回到这个话题。
现在以类似的方式使用它。注意类的实例是如何构造的,以及实例上的方法是如何调用的,使用前面的remote
:
cs = CountedSlows.remote() # Note how actor construction works
futures = [cs.slow.remote(r) for r in records]
while len(futures) > 0:
finished, rest = ray.wait(futures)
value = ray.get(finished[0])
print(value)
futures = rest
count_future_id = cs.get_count.remote()
ray.get(count_future_id)
最后一行应该打印与原始集合大小相等的数字。注意,我调用了方法get_count
来检索属性count
的值。目前,Ray 不支持像count
那样直接检索实例属性,所以与常规 Python 类相比,添加方法来检索它是一个必要的区别。
Ray 统一了任务和演员
在上述两种情况下,Ray 跟踪任务和参与者在集群中的位置,消除了在用户代码中明确知道和管理这些位置的需要。actors 内部的状态变化以线程安全的方式处理,不需要显式的并发原语。因此,Ray 为应用程序提供了直观的、分布式的状态管理,这意味着 Ray 通常是实现有状态 无服务器应用程序的优秀*台。此外,当在同一台机器上的任务和参与者之间通信时,通过共享内存透明地管理状态,参与者和任务之间的零拷贝序列化,以获得最佳性能。
注意:让我强调一下 Ray 在这里提供的一个重要好处。如果没有 Ray,当您需要在一个集群上横向扩展应用程序时,您必须决定创建多少个实例,将它们放在集群中的什么位置(或者使用 Kubernetes 之类的系统),如何管理它们的生命周期,它们之间如何交流信息和协调,等等。等。Ray 为您做了这一切,而您只需付出最少的努力。你只需编写普通的 Python 代码。它是简化微服务架构设计和管理的强大工具。
采用射线
如果你已经在使用其他的并发 API,比如多处理、 asyncio 或者 joblib 会怎么样?虽然它们在单台机器上可以很好地进行扩展,但是它们不提供对集群的扩展。Ray 最*介绍了这些 API 的实验性实现,允许您的应用程序扩展到一个集群。代码中唯一需要更改的是 import 语句。例如,如果您正在使用multiprocessing.Pool
,这是通常的导入语句:
from multiprocessing.pool import Pool
要使用射线实现,请使用以下语句:
from ray.experimental.multiprocessing.pool import Pool
这就够了。
Dask 怎么样,它似乎提供了许多与 Ray 相同的功能?如果您想要分布式集合,比如 numpy 数组和 Pandas 数据帧,Dask 是一个不错的选择。(一个使用 Ray 的名为摩丁的研究项目最终将满足这一需求。)Ray 是为更一般的场景设计的,在这些场景中,需要分布式状态管理,异构任务执行必须在大规模上非常有效,就像我们需要强化学习一样。
结论
我们已经看到 Ray 的抽象和特性如何使它成为一个简单易用的工具,同时提供强大的分布式计算和状态管理功能。虽然 Ray 的设计是由高性能、高要求的 ML/AI 应用程序的特定需求推动的,但它具有广泛的适用性,甚至提供了一种新的方法来实现基于微服务的架构。我希望你觉得这个关于 Ray 的简短解释很有趣。请尝试一下,让我知道你的想法!发送至: dean@anyscale.io
了解更多信息
有关 Ray 的更多信息,请查看以下内容:
- 2020 年 5 月 27 日至 28 日在旧金山举行的射线峰会。聆听案例研究、研究项目和对 Ray 的深入探讨,以及数据科学和人工智能社区领导者的早间主题演讲!
- 雷网站是雷所有事情的起点。
- 几个基于笔记本的射线教程让你尝试射线。
- Ray GitHub 页面是你可以找到所有 Ray 源代码的地方。
- Ray 文档说明了一切:登陆页面,安装说明。
- 直接向 Ray Slack workspace 或 ray-dev Google Group 提出关于 Ray 的问题。
- 推特上的雷账号。
- 一些射线项目:
- 有关更多技术细节:
- 一篇详细描述射线系统的研究论文
- 一篇研究论文,描述了用于深度学习的 Ray 内部的灵活原语
- 用雷和快速序列化阿帕奇箭头
用 Domino 4.3 扩展 Kubernetes 支持
原文:https://www.dominodatalab.com/blog/expanding-kubernetes-support-with-domino-4-3
By Bob Laurent, Senior Director, Product Marketing, Domino on September 02, 2020 in Product Updates
Kubernetes (K8s)正迅速成为 IT 的通用计算基础,以及应用程序可移植性和基础设施面向未来的共识 API。Kubernetes 为容器化应用程序带来了一系列全新的好处,包括高效的硬件利用。K8s 能够在容量达到峰值时自动扩大规模,并在峰值后再次缩小规模。这是一笔巨大的资产,尤其是在云环境中,成本是基于消耗的资源的。
向上或向下扩展集群既快速又简单,因为只需在集群中添加或删除虚拟机(VM)即可。这种动态资源分配对于数据科学工作负载尤其有益;在训练模型或工程功能时,对高性能 CPU、GPU 和 RAM 的需求可能会非常强烈,但随后需求会很快再次下降。
就像不同的供应商提供 Linux 内核的发行版一样,今天有超过 90 种不同的 Kubernetes 发行版得到了云本地计算基金会的认证。每个经过认证的发行版都提供了一定程度的互操作性,以及对一致接口的一致性(通过 API),但是不同产品之间的细节可能会有所不同。承诺支持 Kubernetes 的厂商数量凸显了这个开源编排系统的开放性和成熟性,类似于支持 Linux 的厂商数量。
增加对最流行的 Kubernetes 发行版的支持
IT 团队希望基础架构既能支持当今的需求,又能灵活支持未来的扩展,而不会局限于一家供应商。我们致力于将 Domino 数据科学*台的开发与其在下一代基础设施(包括 Kubernetes)上的投资相结合。
Domino 支持所有主要云提供商各自风格的托管 Kubernetes,包括:
Domino 还支持用于内部部署的最流行的 Kubernetes 发行版,包括VMware Tanzu Kubernetes Grid(以前的 Pivotal Container Service,或 PKS)和开源牧场主。
随着 Domino 4.3 的发布,Domino 增加了对 Red Hat OpenShift Kubernetes 引擎的支持,用于 OpenShift 集群上的智能 Kubernetes 编排。Red Hat OpenShift 是 IT 团队进行内部 Kubernetes 部署的热门选择,我们很高兴能为我们的客户带来这一功能。
增加对多租户 Kubernetes 集群的支持
大多数投资于内部 Kubernetes 安装的公司都会购买大型、集中的高性能硬件集群。为了收回投资并最大限度地提高利用率,IT 部门需要能够将多个应用程序分配到一个集群。
为了全面支持这些客户,Domino 宣布支持多租户 Kubernetes 集群。一个本地 Kubernetes 集群现在可以支持多个应用程序(租户),包括 Domino。Domino 4.3 支持多租户集群,遵循一组原则,确保它不会干扰其他应用程序或可能存在的其他集群范围的服务。它还使拥有多余 Kubernetes 容量的公司能够运行 Domino,而无需购买额外的高端硬件。
总结
凭借 Kubernetes 的受欢迎程度、编排能力及其跨云和内部系统的互操作性,它提供了无与伦比的管理能力和可移植性。它确保您的系统可以与任何云供应商或内部基础架构协同工作。它还能有效管理数据科学工作负载的突发性。
Domino 的团队在这个最新版本中投入了大量精力,我们很高兴将这些新的创新带给数据科学和 IT 团队,他们正在以资源高效的方式利用 Kubernetes 扩展企业数据科学。
额外资源
- 阅读数据库趋势和应用中的故事: Domino 4.3 增加了 Red Hat OpenShift Kubernetes
- 阅读应用程序开发趋势中的故事:最新的 Domino 数据实验室版本支持 Red Hat OpenShift
- 查看 Domino 数据科学*台的 IT 评估指南
专家访谈(第一部分):Josh Poduska,Domino 数据实验室的首席数据科学家,关于如何让生产数据科学更容易实现
]最*在纽约举行的 Strata Data 活动上,Syncsort 的 Paige Roberts 有机会坐下来与 Domino Data Lab 的首席数据科学官 Josh Poduska 交谈。在这个由两部分组成的系列的第一部分中,Roberts 和 Poduska 讨论了数据科学的成熟度级别,以及如何使数据科学更加可行和实用。
罗伯茨:让我们从自我介绍开始。你能向我们的读者介绍一下你自己吗?
Poduska :我是 Josh Poduska,Domino 数据实验室的首席数据科学官。我从事数据科学行业大约有 17 年了。在数据科学出现之前,我就一直在做这件事,并且看到了很多变化。我真的对这个学科的未来感到兴奋。
对于那些不熟悉 Domino Data Lab 的人,你能给我们介绍一下你们是做什么的吗?
当然可以。Domino 已经建立了数据科学*台,基本上可以帮助每个人在模型上运行他们的业务。我们最*创建了一个新的类别,我们称之为“模型管理”。它强调模型驱动的原则,以及围绕作为基本资产的模型和数据来编排您的工作负载和业务的原则,以使您能够收获数据科学的承诺。数据科学、机器学习和人工智能有很多宣传,但对于太多的组织来说,背后的真正承诺并没有实现。因此,Domino 正在帮助促进投资回报的实现。
让它变得更加实用,让一般公司更容易实现?
没错。
你是专注于某个特定行业还是所有行业?
全面的。我们早期取得成功的一些垂直市场是那些有法规要求的市场。所以,金融服务,一些生命科学。任何地方都需要复制你的科学成果,跟踪你在做什么,作为一个协作团队工作,这实际上是每个行业。但是,金融服务和生命科学是目前考虑得最多的行业。这些是我们早期的一些胜利。我们也深入于保险行业,我们的一些新客户来自零售业。好事达是顾客,盖普也是顾客。百时美施贵宝,S & P 全球,所以,它真的运行所有领域。
但是那些受到严格监管的公司才是第一批?
第一个排队,对。他们现在被要求证明数据科学投资的合理性。例如,您构建了一个欺诈模型,每年为企业节省 10 亿美元。证明为什么模型没有偏差。证明该模型的血统。它从哪里来,从开始到生产?你将来如何监控这个模型?这些都是 Domino 在*台中构建系统来帮助解决的。因此,受监管的行业被我们吸引了过来。
在我在这里的这段时间里,我对 Domino 有了更多的了解,我也看到了小型组织的许多好处。Domino 帮助你做的是,它帮助你建立做数据科学的最佳实践,而最佳实践肌肉记忆和做事方式对年轻公司非常重要。
如果年轻的公司能够以正确的方式进行数据科学,他们将会打破年轻公司阶段,并真正开始看到他们最初进入该业务的原因。对他们来说,这是生死攸关的事情。对于更成熟的公司来说,这只是增量收益。但是因为我们帮助管理数据科学流程,它更适合拥有 5、10、20 或更多数据科学家的数据科学团队的公司。但就像我说的,我仍然看到年轻公司也有很大的价值节省。和他们一起工作是一种乐趣,因为你会看到如此快速的成长和变化。
你刚刚做了你的报告。进行得很顺利。你能谈谈几个大的概念吗?
我认为大的概念是,数据科学现在作为一门学科已经达到了一个成熟的水*,我们需要停止将其视为一个幕后技术项目,并开始将其纳入组织。我们的教程是关于让模型成为组织能力的核心。这里面有太多的东西。一些亮点是:让您的数据科学团队真正集成和倾听业务,并知道如何与业务合作,以及拥有将项目投入生产的战略。有一份飞行前清单。对如何交付模型有一个计划。甚至在你开始制造模型之前就和模型的消费者交谈。了解它将如何被消费,以确保它将满足需求。
然后在这个过程中,保护模型责任,模型偏见,保护你的模型,使它不会变成无用的东西。这里面有很多东西。因为我们正处于成熟度级别,所以看到组织进入下一步并说,“好吧,这是非常令人兴奋的。我们雇佣了一些数据科学家。我们有数据。现在,我们如何将它与业务相结合?”我们如何将它与 IT、销售、营销和软件工程结合起来?数据科学正在成为公司内部的一流组织。像亚马逊、盖普、好事达这样做的公司,才是真正开始引领行业发展的公司。
我知道在拥有业务用例、训练有素的模型、数据集,然后将所有这些投入生产的步骤之间有很多挑战。我知道很多数据科学项目在那里被停止了。 你会帮助那种飞跃?**
我们有。在教程中,我们指出了使数据科学成为组织能力的最大障碍是过程和文化。但是技术可以帮助实现这一过程和文化的改变。
Domino 数据科学*台所做的是提供协作技术,将您所做的一切作为机构知识进行捕获,并帮助数据科学家在任何工具上以敏捷、迭代的方式工作。我们是一个开放式数据科学*台。然后将其全部投入生产。只需点击一个按钮,你就可以创建一个 API,你可以用 Java,JavaScript,Ruby,任何你想要的语言重新编写这个 API。然后,您可以快速地将它部署在云上,通常是以高度可用的分布式方式,这样用户就可以与该 API 进行交互。我们还在 Domino 内部提供了一个接口,您可以在其中构建一个闪亮的应用程序或 Flask 应用程序,然后托管它,这样业务用户就可以轻松快速地与您的模型结果进行交互。
我们正试图创造一个良性循环,并帮助实现创建模型的科学与将模型投入生产的现实之间的良性循环。然后,创建一个反馈回路,在这个回路中,您可以监控生产中的模型,并将这些点连接起来。完善模型。把它们放回去。就像,“好吧。这真的很好用,但是这个怎么样?”如果我们加入其他东西呢?
没错。
专家访谈(第二部分):Josh Poduska,Domino 数据实验室的首席数据科学家,负责跟踪模型血统
在最*纽约的 Strata Data 活动上,Syncsort 的 Paige Roberts 有机会坐下来与 Domino 数据实验室的首席数据科学官 Josh Poduska 交谈。在第一部分中,Roberts 和 Poduska 讨论了数据科学的成熟度级别,以及如何使数据科学更加可行和实用。
第二部分关注谱系,可审计性的数据和模型谱系,以及如何解决数据和模型偏差。
Roberts :在 Syncsort,我们从另一个角度来看待它,从数据的角度,而不是从模型的角度。您提到了跟踪模型血统。在过去几年中,我们一直非常关注的一件事是试图跟踪数据谱系,这样您就可以知道数据来自哪里,做了哪些更改,谁接触了它,他们做了什么,等等。出于相似的目的。当你追踪模型血统时,你到底在追踪什么?
我认为回答这个问题的方法是思考是什么让一个项目具有可复制性。总的来说,在所有的科学中,都有一个能够重现结果的问题。当我们思考数据科学时,重现数据科学项目需要什么?你必须知道它运行的硬件。您必须了解所使用的软件,包括环境、操作系统的版本以及数据科学软件的软件包和工具,无论是 Python 还是 R 还是其他软件。
Domino 所做的是自动捕获其数据科学*台内部的所有内容,并允许您与其他同事共享代码、结果、实验运行,并允许其他同事与您合作,所有这些都使用相同的确切环境,以便您可以重现结果。
在引擎盖下,我们有 Docker 和 Kubernetes 来帮助我们做到这一点,我们可以利用任何基于 web 的 UI 来进行数据科学。Python scripting,RStudio 中的 R scripting,Jupyter notebooks,Zeppelin notebooks,H2O,DataRobot,SAS 有一个我们合作的 web UI 版本……实际上,我们对任何可以在那个领域发挥作用的人都是开放的。
罗伯茨:好的。因此,如果它跟踪我在训练模型时所做的一切,当我将它投入生产时,我知道我必须做些什么来实现它。是这个意思吗?
波达斯卡:是的。此外,如果你曾经不得不回溯,并折回你的步骤,并解释为什么你的模型会这样做。你考虑了这个数据还是那个数据?你考虑过这种情况吗?您可以回顾一下 Domino 的项目结构,并看到已经进行的讨论,因为它捕获了数据科学家之间的讨论。它捕获已完成的协作工作和中间结果,即使这些中间结果是在不同版本的软件或不同的操作系统上运行的。
Domino 捕获了所有这些,例如,您可以非常快速地旋转 Docker 容器,这将允许您看到在该步骤中做了什么。对于数据科学家来说,这实际上是对正在发生的一切进行跟踪,使他们能够更快、更智能地工作。他们可以基于现有技术,基于其他数据科学家正在做的事情。所有这一切的另一个额外好处是数据科学经理和领导者。他们现在可以看到他们团队 30,000 英尺的整体轨迹。例如,我们有一个大型机构,在他们采用 Domino 之后,他们意识到他们有两个团队在独立地进行完全相同的项目。
哦,不!【笑声】
他们不知道,直到他们把这一切都集中在一个地方。
我明白这是一个巨大的好处。你得到项目加速。冗余消除。你得到了反馈回路。
数据科学中的偏见是人们越来越多地遇到的一个大问题。人们意识到,如果不小心,你的数据集可能会有偏差,你的模型可能会有偏差,或者你的整个问题可能会有偏差。有了这个模型谱系,你能看到你在解决这个问题的过程中做了什么吗?
对于那些思考“模型偏差”的人来说,当他们思考这个问题时,他们会在过程的不同步骤中构建,无论是在数据准备还是模型构建中。Domino 可以帮助您跟踪这一过程,所以毫无疑问。有帮助。不过,这仍然取决于用户。您可以在 Domino 中构建一个偏向的模型,就像使用任何其他工具一样。
我们认为技术可以帮助实现这些最佳实践。这不会是银弹。
是的,人们必须对数据科学负责。因此,我想我们 Syncsort 非常关注的一件事是数据准备方面,尤其是数据工程师让生产数据管道正常运行的工作。Domino *台有任何数据准备方面吗?
数据科学家喜欢使用 Domino 的原因之一是,您可以使用任何您喜欢的工具,并且它就在*台内部工作。无论您是使用 H2O 或 DataRobot 进行某种类型的自动化数据准备,还是有您想要使用的 Python、Spark 或 R 软件包,所有这些都可以在同一个*台中访问。因此,您可以在硬件和软件工具之间来回切换,并且仍然可以在一个地方查看项目视图,在一个地方查看和搜索您已经完成的所有步骤和细节。
那很酷。
耶!我来多米诺的原因是我看到了公司的发展方向。现在绝对是数据科学行业开始成长的时候了,应该这样思考。Domino 为数据科学团队提供了他们想要的东西,敏捷性、并行执行、DevOps 问题解决方案,还使管理层能够跟踪团队正在做什么以及 ROI 是多少。
那么,你有什么想让博客读者知道的事情吗?
确实如此。多米诺有我们所谓的“数据科学”弹出窗口。它们可以被认为是专门为数据科学从业者和数据科学领导者准备的小型会议。半天是为从业者举办的实践研讨会,另一半是为领导者介绍数据科学领导者当前面临的具体挑战。有一个 9 月 19 日在奥斯丁。下一批将落户 T4 芝加哥、纽约和波士顿。明年,我们计划在伦敦开一家。
听起来很酷。也许我能活到一岁。
谢谢你的谈话。
任何时候。我很高兴我们至少吃了午饭。很高兴再次见到你。
使用属性重要性、PDP 和 LIME 解释黑盒模型
在本文中,我们讨论了黑盒模型的可解释性,并展示了如何使用 Skater 框架中的不同方法来深入了解一个简单的信用评分神经网络模型的内部工作原理。
在过去的十年中,对机器学习的解释的兴趣一直在快速增长。这可以归因于机器学习算法,更具体地说,深度学习,在各个领域越来越受欢迎。
完全理解深度神经网络的推理过程并证明它会如预期的那样一般化是不可能的。
根据 Fox 等人的说法,对可解释人工智能的需求主要由以下三个原因驱动:
- 对信任的需求——如果医生根据神经网络的预测推荐治疗方案,这个医生必须对网络的能力有绝对的信任。当人的生命受到威胁时,这种信任是最重要的。
- 对交互的需求——复杂的决策系统通常依赖于人类自主团队(HAT),其结果是由一个或多个人类和一个或多个自主代理共同努力产生的。这种形式的合作要求操作员能够与模型进行交互,以便更好地理解或改进自动推荐。
- 透明的需要——如果一个网络提出了不恰当的建议或者不同意人类专家的意见,它的行为必须是可以解释的。应该有一些机制允许我们检查模型决策过程的内部工作,并了解这个决策是基于什么。
此外,监管机构正在引入有关自动化决策制定的法律要求。例如,《一般数据保护条例》 (GDPR)第 22 条引入了解释权----个人有权要求解释基于模型的决定背后的原因,并在该决定对个人造成负面影响时提出质疑。美国国防高级研究计划局(DARPA)正在支持一项旨在促进人工智能可解释性的重大努力(见图雷克,DARPA XAI)。
上面概述的要求很难满足——人工神经网络(ann)能够产生高度精确的结果,但它们通常具有成千上万的参数,并且极其复杂。它们被简单地视为黑盒,因为尽管它们是通用*似器,但它们不能提供关于如何模拟*似函数或什么决定其行为的见解。这就引出了一个重要的问题——模型性能的提高是否超过了其他重要的标准,而这些标准应该作为决策过程的一部分加以考虑。
解释深度学习的方法
谢等人(2020)提出了以下一套基本方法,对解释深度人工神经网络的各种方法进行分类。
- 可视化方法 -这种方法使用科学的可视化来突出某些输入对模型输出的影响。例如,我们可以根据训练阶段通过网络的梯度大小来判断某些输入特征的相关性(Erhan 等人,2009 年)。
- 模型提炼——这种方法建立了一个独立的可解释模型,模拟深层网络的输入输出行为。因为这个独立的模型本质上是一个白盒,它可以用于提取解释人工神经网络背后的决策的规则。参见 Ribeiro 等人(2016)关于该技术(石灰)的示例。
- 内在方法 -这种技术基于人工神经网络,它被设计成在标准预测的同时输出一个解释。由于其结构,内在可解释人工神经网络不仅可以优化其预测性能,还可以优化其可解释性度量。例如,联合训练为原始问题增加了一个额外的“解释任务”,并训练系统“联合”解决这两个问题(参见 Bahdanau,2014)
在本文中,我们将使用一个免费的模型解释框架 Skater 来说明上面的一些关键概念。Skater 提供了广泛的算法,可用于视觉解释(例如,逐层相关性传播)、模型提取(例如,LIME),并且它还支持本机可解释的模型。
此外,Skater 支持本地和全局模型。它可以解释可直接访问的模型(例如脚本中的 Python 对象),但它也可以通过 API 接入操作化的模型,并为生产中运行的模型提供解释(参见 DeployedModel 类)
用滑冰者解释信用卡违约
对于这个演示,我们将使用免费的 Statlog(德国信用数据)数据集,可以从 Kaggle 下载。该数据集根据一组属性将客户分为两个信用风险组——好的或坏的。这个数据集中的大多数属性都是分类的,并且它们被符号化编码。例如,属性 1 表示现有支票账户的状态,可以取下列值之一:
A11:...< 0 德国马克
A12 : 0 <=...< 200 德国马克
A13:...> = 200 德国马克/至少一年的薪金分配
A14:没有支票账户
原始数据集附带的文档中给出了所有属性和符号代码的综合列表。
我们首先加载数据,为所有属性设置有意义的名称,并显示前 5 个条目。
%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
from imblearn.over_sampling import SMOTE
from sklearn.preprocessing import StandardScaler #OneHotEncoder,
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from collections import defaultdict
from sklearn.metrics import f1_score
from sklearn.metrics import accuracy_score
from sklearn.model_selection import StratifiedKFold
from sklearn.model_selection import cross_val_score
from skater.core.local_interpretation.lime.lime_tabular import LimeTabularExplainer
from skater.model import InMemoryModel
from skater.core.explanations import Interpretation
from keras.models import Sequential
from keras import regularizers
from keras import optimizers
from keras.layers import Dense, Dropout
from keras.wrappers.scikit_learn import KerasClassifier
seed = 1234 # set for reproducibility
col_names = names = ["checking_account", "duration", "credit_history", "purpose", "credit_amount",
"savings", "employment_since", "installment_rate", "status", "debtors_guarantors",
"residence", "property", "age", "other_installments", "housing",
"credits", "job", "dependents", "telephone", "foreign_worker", "credit"]
data_df = pd.read_csv("german.data",names = col_names, delimiter=' ')
data_df.head()
接下来,我们继续进行一些轻量级的特征工程。我们首先将类别标签重新编码为 1(信用良好)和 0(信用不良)。然后,我们提取数字属性并对它们进行规范化。
# Remap the target attribute: - good credit, 0 - bad credit
data_df["credit"].replace([1,2], [1,0], inplace=True)
num_attr_names = ["duration", "credit_amount", "installment_rate", "residence",
"age", "credits", "dependents"]
cat_attr_names = ["checking_account", "credit_history", "purpose", "savings", "employment_since",
"status", "debtors_guarantors", "property", "other_installments", "housing",
"job", "telephone", "foreign_worker"]
num_attr_norm = pd.DataFrame(StandardScaler().fit_transform(data_df[num_attr_names]),
columns=num_attr_names)
num_attr_norm.head()
然后我们使用一个 LabelEncoder 用虚拟变量替换所有分类变量:
dd = defaultdict(LabelEncoder)
cat_attr = data_df[cat_attr_names].apply(lambda col: dd[col.name].fit_transform(col))
cat_attr_dummy = pd.get_dummies(data_df[cat_attr_names])
cat_attr_dummy.head()
最后,我们将标准化的数值变量和虚拟变量合并在一起,得到一个完整的全数值数据集。
clean_df = pd.concat([cat_attr_dummy, num_attr_norm, data_df["credit"]], axis = 1)
然后,我们将训练特征分成矩阵 X,将类别变量分成向量 y。注意,我们的特征工程和建模方法相当幼稚。这是因为在这篇文章中,我们不是在追求一个最先进的分类器,而是想把重点放在对样本数据集拟合的黑盒模型的解释上。
X = clean_df.loc[:, clean_df.columns != "credit"]
y = clean_df["credit"]
在形成 X 和 y 变量之后,我们将数据分成训练集和测试集。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=seed)
y_train.value_counts()
1 570
0 230
Name: credit, dtype: int64
查看训练子集中的目标向量,我们注意到我们的训练数据非常不*衡。这是意料之中的,因为没有理由对好的和坏的信用风险进行完全 50:50 的分离。为了补救这一点,我们可以应用像 SMOTE 这样的过采样技术,产生一个完美*衡的训练集:
oversample = SMOTE(random_state=seed)
X_train, y_train = oversample.fit_resample(X_train, y_train)
y_train.value_counts()
1 570
0 570
Name: credit, dtype: int64
准备好训练数据后,我们现在继续使用 Keras 训练一个简单的 ANN 模型。我们首先定义网络架构,这是一个简单的前馈人工神经网络,具有一个使用双曲正切激活的 50 个神经元的全连接层、一个漏失正则化层和一个由 sigmoid 函数激活的单位输出。使用学习率为 0.01 的简单随机梯度下降来优化网络,训练被限制为 50 个时期,并且使用包含 30 个样本的小批量来应用更新。
def create_model():
sgd = optimizers.SGD(lr=0.01, decay=0, momentum=0.9, nesterov=False)
model = Sequential()
model.add(Dense(units=50, activation="tanh", input_dim=61, kernel_initializer="glorot_normal", bias_initializer="zeros"))
model.add(Dropout(0.1))
model.add(Dense(units=1, activation="sigmoid", kernel_initializer="glorot_normal", bias_initializer="zeros"))
model.compile(loss="binary_crossentropy", optimizer=sgd, metrics=["accuracy"])
return model
nn = KerasClassifier(build_fn=create_model, epochs=10, batch_size=20, verbose=1)
nn.fit(X_train, y_train, validation_data=(X_test, y_test))
y_pred = nn.predict(X_test)
Train on 1140 samples, validate on 200 samples
Epoch 1/10
1140/1140 [==============================] - 0s 274us/step - loss: 0.6147 - acc: 0.6535 - val_loss: 0.5452 - val_acc: 0.7400
Epoch 2/10
1140/1140 [==============================] - 0s 53us/step - loss: 0.5040 - acc: 0.7526 - val_loss: 0.5175 - val_acc: 0.7550
Epoch 3/10
1140/1140 [==============================] - 0s 51us/step - loss: 0.4563 - acc: 0.7904 - val_loss: 0.5124 - val_acc: 0.7500
Epoch 4/10
1140/1140 [==============================] - 0s 51us/step - loss: 0.4303 - acc: 0.8061 - val_loss: 0.5144 - val_acc: 0.7400
Epoch 5/10
1140/1140 [==============================] - 0s 47us/step - loss: 0.4188 - acc: 0.8053 - val_loss: 0.5250 - val_acc: 0.7400
Epoch 6/10
1140/1140 [==============================] - 0s 47us/step - loss: 0.4012 - acc: 0.8219 - val_loss: 0.5222 - val_acc: 0.7450
Epoch 7/10
1140/1140 [==============================] - 0s 46us/step - loss: 0.3858 - acc: 0.8237 - val_loss: 0.5250 - val_acc: 0.7450
Epoch 8/10
1140/1140 [==============================] - 0s 46us/step - loss: 0.3794 - acc: 0.8333 - val_loss: 0.5096 - val_acc: 0.7500
Epoch 9/10
1140/1140 [==============================] - 0s 46us/step - loss: 0.3793 - acc: 0.8193 - val_loss: 0.5477 - val_acc: 0.7150
Epoch 10/10
1140/1140 [==============================] - 0s 46us/step - loss: 0.3726 - acc: 0.8325 - val_loss: 0.5239 - val_acc: 0.7450
200/200 [==============================] - 0s 107us/step
通过特征重要性进行解释
现在我们已经有了黑盒模型,我们可以尝试几种技术来了解模型决策背后的关键驱动因素。因为这个模型是本地可访问的,所以我们只需要创建一个 InMemoryModel 对象。InMemoryModel 的唯一强制参数是预测生成函数。在我们的例子中,这是来自 Keras ANN 的 predict_proba 。
然后,我们创建一个解释对象,将数据传递给预测函数。为了计算重要性,我们将我们的解释限制在 5000 个样本,并且我们还要求按照重要性以升序对特征进行排序。
属性重要性计算的实现基于可变重要性分析(VIA)。Skater 根据模型的类型使用不同的技术(例如回归、多类分类等。),但它通常依赖于在给定特征扰动的情况下测量预测变化的熵。更多详细信息,请参见 Wei 等人(2015 年)。
model_nn = InMemoryModel(nn.predict_proba,
target_names=["bad credit","good credit"],
examples=X_train[:5])
interpreter = Interpretation(X_train, feature_names=list(X.columns), training_labels=y_train)
nn_importances = interpreter.feature_importance.feature_importance(model_nn, n_jobs=1, ascending=True, n_samples=5000)
5/5 [==============================] - 0s 72us/step
5/5 [==============================] - 0s 63us/step
...
1140/1140 [==============================] - 0s 12us/step
[61/61] features ████████████████████ Time elapsed: 11 seconds
完成计算后,我们可以绘制出影响模型决策的前 25 个最重要的特征。请注意,要素重要性计算的结果是一个已排序的熊猫系列,其中包含属性及其重要性分数。
nn_importances.tail(25).plot.barh(figsize=(10,12));
我们看到对预测影响最大的前 5 个特征是:
- 支票账户 A14:没有支票账户
- 状态 _A93:个人状态和性别-单身男性
- property_A123:拥有不同于房地产、储蓄协议或人寿保险的财产(如汽车)
- 就业 _ 自 _A73:连续全职就业 1 至 4 年
- 用途 _A43:贷款用途是购买电视/音响设备
上述特征直观上是有意义的,但它们也凸显了一个问题——该模型可能会歧视单身男性。这些类型的洞察力不容易从黑盒模型中获得,这个例子强调了通过某种解释过程运行训练模型的重要性。
部分相关图
部分依赖图是另一种可视化方法,它是模型不可知的,可以成功地用于深入了解像深度人工神经网络这样的黑盒模型的内部工作原理。PDP 是评估一个或两个特征变化对模型结果影响的有效工具。它们显示了目标和一组输入要素之间的依赖性,同时忽略了所有其他要素的值。下图是一个 PDP 示例,显示了温度、湿度和风速等特性的变化对自行车租赁预测数量的影响。
PDPs for the bicycle count prediction model (Molnar, 2009)
为我们的模型创建 PDP 相当简单。我们只需要从我们的解释器调用plot _ partial _ dependency函数,传递以下参数:
- feature_ids -我们希望了解其对预测的影响的要素
- n_samples -计算重要性时使用的样本数
- n _ jobs——用于计算的当前进程的数量(设置时必须考虑可用 CPU 的数量,设置为 1 将禁用多处理)
我们选择持续时间和年龄作为我们感兴趣的特征,这产生了 3D PDP。
interpreter.partial_dependence.plot_partial_dependence([("duration", "age")],
model_nn,
n_samples=500,
figsize=(14, 12),
n_jobs=1,
grid_resolution=30);
500/500 [==============================] - 0s 16us/step
500/500 [==============================] - 0s 14us/step
500/500 [==============================] - 0s 14us/step
...
500/500 [==============================] - 0s 15us/step
500/500 [==============================] - 0s 14us/step
[609/609] grid cells ████████████████████ Time elapsed: 142 seconds
因为我们正在处理一个分类问题,并且模型输出概率,所以 PDP 显示随着持续时间和年龄值的变化,具有良好信用的概率(Z 轴)的变化。非常清楚的是,随着信贷期限的增加和申请人年龄的降低,这种贷款变成违约的可能性增加(即良好的信用可能减少)。另一方面,年龄较大的申请人的短期贷款有更高的机会成为良好的信贷决策。
请注意,PDP 生成和检查在全局范围内起作用——这种方法考虑了所有数据样本,并在给定整个数据集的情况下,提供了关于所选自变量和目标之间关系的见解。
使用本地代理解释模型(LIME)
局部可解释的模型不可知解释(LIME,Ribeiro,2016)是另一种模型不可知方法,可用于黑盒模型,以解释模型决策背后的基本原理。然而,与 PDP 不同的是,LIME 是在本地范围内运作的,其背后的想法相当简单。我们可能有一个分类器,它在全局上有一个非常复杂的决策边界,但是如果我们聚焦于单个样本,那么这个模型在这个特定位置的行为通常可以用一个简单得多的、可解释的模型来解释。
Toy example to present intuition for LIME from Ribeiro (2016). The black-box model’s complex decision function (unknown to LIME) is represented by the blue/pink background, which cannot be approximated well by a linear model. The bold red cross is the instance being explained.
选择感兴趣的样本后,LIME 使用所选样本属性的扰动来训练代理模型。用一些噪声干扰独立变量并监测对目标变量的影响通常足以提供良好的局部解释。代理模型通常是简单的线性模型或决策树,它们天生是可解释的,因此从扰动和相应的类输出中收集的数据可以很好地表明是什么影响了模型的决策。
Skater 提供了 LIME 的一个实现,可以通过 LimeTabularExplainer 类访问它。我们需要做的就是实例化 LimeTabularExplainer,并让它访问训练数据和独立的特性名称。
explainer = LimeTabularExplainer(X, feature_names=list(X.columns), discretize_continuous=False, mode="classification")
接下来,我们选择一个我们想要得到解释的样本,比如说测试数据集中的第一个样本(样本 id 0)。我们从解释器中调用 explain_instance 函数,查看实际的和预测的类,以及各个属性对预测的相应影响。
id = 0
print("Actual Label: %s" % y_test.iloc[id])
print("Predicted: %s" % y_pred[id])
explainer.explain_instance(X_test.iloc[id].values, nn.predict_proba, labels=(y_pred[id][0], ), num_features=20).show_in_notebook()
我们观察到,对于这个特定的样本,模型非常确信这是一个好的信用。有许多具有相关值的属性将决策“拉”向 1 类(例如贷款目的、信用记录、现有储蓄等。)
对于测试集中的样本 23,模型倾向于不良信用预测。
id = 23
print("Actual Label: %s" % y_test.iloc[id])
print("Predicted: %s" % y_pred[id])
explainer.explain_instance(X_test.iloc[id].values, nn.predict_proba, labels=(y_pred[id][0], ), num_features=20).show_in_notebook()
同样,我们可以看到影响 0/1 预测的所有属性及其相应的值。
注意:我们使用的模型不是很准确,因为这篇文章的目的是展示黑盒人工神经网络的不同解释方法,而不是在这个特定的数据集上获得 SOTA 性能。你不应该过多地解读模型基于什么属性做出决定,因为它有大量的假阴性和假阳性。相反,您应该关注如何使用 PDP 和 LIME 等技术来深入了解模型的内部工作,以及如何将这些技术添加到您的数据科学工具箱中。
参考
玛丽亚福克斯,德里克龙,和丹尼尔马加泽尼。可说明的策划。在 IJCAI 2017 年可解释人工智能研讨会(XAI),第 24-30 页,澳大利亚墨尔本,2017 年。国际人工智能联合会议。
马特·图雷克,可解释的人工智能(XAI),DARPA,2021 年 7 月 6 日检索自https://www . DARPA . mil/program/可解释的人工智能
谢宁、加布里埃尔·拉斯、马塞尔·范格文、德里克·多兰,《可解释的深度学习:外行人的实地指南》,CoRR,2020 年,https://arxiv.org/abs/2004.14545
D.埃尔汉、约舒阿·本吉奥、亚伦·c·库维尔、帕斯卡尔·文森特,《深层网络高层特征可视化》,2009 年
我为什么要相信你?:解释任何分类器的预测,第 22 届 ACM SIGKDD 国际会议录
知识发现和数据挖掘会议,第 1135-1144 页,ACM,2016
Bahdanau,d .,Cho,k .,& Bengio,y .,联合学习对齐和翻译的神经机器翻译,ICLR,2015 年
、陆、、宋,变重要性分析:综合评述,可靠性工程&系统安全,2015 年第 142 卷,第 399-432 页,ISSN 0951-8320
可解释的机器学习,Christoph Molnar,第 5.1 节,2009 年
用 Python 探索美国房地产价值
原文:https://www.dominodatalab.com/blog/exploring-us-real-estate-values-with-python
本帖涵盖了使用机器学习和交互式绘图的数据探索。如果对运行示例感兴趣,有一个补充 Domino 项目可用。
介绍
模型是数据科学的核心。数据探索对模型开发至关重要,在任何数据科学项目的开始阶段尤为重要。可视化工具有助于使数据的形状更加明显,表面模式可以很容易地隐藏在数百行数据中,甚至可以帮助建模过程本身。在 Domino 寻求帮助数据科学家加快他们的工作时,我们联系了 AWP·皮尔森,请求他允许我们从诺亚·吉福特的《实用人工智能:基于云的机器学习简介 一书中摘录“房地产”一章。非常感谢 AWP·皮尔森提供了摘录作品的许可,并使我们能够用 Python 提供一个补充 Domino 项目。
第一章介绍:房地产
你知道有什么好的数据集可以探索吗?这是我作为讲师或教授工作坊时被问得最多的问题之一。我的答案之一是 Zillow 房地产数据集:https://www.zillow.com/research/data/。美国的房地产市场是每个生活在这个国家的人都必须面对的问题,因此,它成为了谈论 ML 的一个很好的话题。
探索美国的房地产价值
住在旧金山湾区会让人经常思考房价问题。这是有充分理由的。海湾地区的房价中值正以惊人的速度上涨。从 2010 年到 2017 年,旧金山单户住宅的中值价格从大约 77.5 万美元上升到 150 万美元。这些数据将用 Jupyter 笔记本[和 Domino 项目]进行探索。整个项目及其数据可以在https://github.com/noahgift/real_estate_ml【和互补多米诺项目中查看。
在笔记本的开始,几个库被导入,Pandas 被设置为显示浮点数和科学记数法。
import pandas as pd
pd.set_option("display.float_format", lambda x: "%.3f" % x)
import numpy as np
import statsmodels.api as sm
import statsmodels.formula.api as smf
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(color_codes=True)
from sklearn.cluster import KMeans
color = sns.color_palette()
from IPython.core.display import display, HTML
display(HTML("{ width:100% !important; }"))
%matplotlib inline
接下来,来自 Zillow 的单户家庭数据被导入并描述。
df.head()
df.describe()
接下来,进行清理以重命名列并格式化列类型。
df.rename(columns={"RegionName":"ZipCode"}, inplace=True)
df["ZipCode"]=df["ZipCode"].map(lambda x: "{:.0f}".format(x))
df["RegionID"=df["RegionID"].map(lambda x: "{:.0f}".format(x))
df.head()
获取整个美国的中值将有助于本笔记本中许多不同类型的分析。在以下示例中,聚合了与地区或城市匹配的多个值,并为它们创建了中位数计算。创建了一个名为df_comparison
的新数据帧,将与 Plotly 库一起使用。
median_prices = df.median()
median_prices.tail()
marin_df = df[df["CountyName"] == "Marin"].median()
sf_df = df[df["City"] == "San Francisco"].median()
palo_alto = df[df["City"] == "Palo Alto"].median()
df_comparison = pd.concat([marin_df, sf_df, palo_alto, median_prices], axis=1)
df_comparison.columns = ["Marin County","San Francisco", "Palo Alto", "Median USA"]
Python 中的交互式数据可视化
Python 中有几个常用的交互式数据可视化库: Plotly 和 Bokeh 。在这一章中,Plotly 将用于数据可视化,但散景也可以做类似的绘图。Plotly 是一家商业公司,既可以在离线模式下使用,也可以通过导出到公司网站来使用。Plotly 还有一个开源的 Python 框架,叫做 Dash ,可以用来构建分析性的 web 应用程序。这一章的很多情节可以在这里找到。
在这个例子中,一个名为 袖扣 的库被用来使直接从熊猫数据帧到 Plotly 的绘图变得简单。袖扣被描述为熊猫的“生产力工具”。该库的一个主要优势是能够像熊猫一样进行绘图。
import cufflinks as cf
cf.go_offline()
df_comparison.iplot(title="Bay Area MedianSingle Family Home Prices 1996-2017",
xTitle="Year", ,yTitle="Sales Price",#bestfit=True, bestfit_colors=["pink"],
#subplots=True,
shape=(4,1),
#subplot_titles=True, fill=True,)
fill=True)
图 10.1 显示了没有打开交互的绘图视图。帕洛阿尔托看起来像一个真正可怕的地方,作为一个买家进入房地产市场。
Figure 10.1 Can Palo Alto Grow Exponentially Forever?
在图 10.2 中,鼠标悬停在 2009 年 12 月,它显示了上一次房地产崩盘底部附*的一个点,帕洛阿尔托的房价中值为 120 万美元,旧金山的中值约为 75 万美元,整个美国的中值为 17 万美元。
Figure 10.2 Housing Market Bottom in December 2009
通过滚动图表,可以看到 2017 年 12 月,帕洛阿尔托的价格约为 270 万美元,8 年内翻了一倍多。另一方面,美国其他地区的房价中值仅上涨了约 5%。这个绝对值得多探讨。
根据大小等级和价格进行聚类
为了进一步探索正在发生的事情,可以使用 sklearn 和 Plotly 创建 k-means 集群 3D 可视化。首先,使用 MinMaxScaler 对数据进行缩放,这样离群值就不会扭曲聚类的结果。
from sklearn.preprocessing import MinMaxScaler
columns_to_drop = ["RegionID", "ZipCode", "City", "State", "Metro", "CountyName"]
df_numerical = df.dropna()
df_numerical = df_numerical.drop(columns_to_drop, axis=1)
接下来,快速描述一下。
df_numerical.describe()
在删除丢失的值后执行聚类时,大约有 10,000 行。
scaler = MinMaxScaler()
scaled_df = scaler.fit_transform(df_numerical)
kmeans = KMeans(n_clusters=3, random_state=0).fit(scaled_df)
print(len(kmeans.labels_))
10015
增加了升值比例栏,可视化前对数据进行了清理。
cluster_df = df.copy(deep=True)
cluster_df.dropna(inplace=True)
cluster_df.describe()
cluster_df['cluster'] = kmeans.labels_
cluster_df['appreciation_ratio'] =round(cluster_df["2017-09"]/cluster_df["1996-04"],2)
cluster_df['CityZipCodeAppRatio']=cluster_df["City"].map(str) + "-" + cluster_df['ZipCode'] + "-" +
cluster_df["appreciation_ratio"].map(str)
cluster_df.head()
接下来,在离线模式下使用 Plotly(即,它不会被发送到 Plotly 服务器),绘制三个轴: x 是升值比率, y 是 1996 年,z 是 2017 年。集群是阴影的。在图 10.3 中,一些模式会立即突出出来。泽西城在过去 30 年中升值幅度最大,从 14.2 万美元的低点涨到了 134.4 万美元的高点,增长了 9 倍。
Figure 10.3 What the Heck Is Going on With Jersey City Appreciation?
一些其他可见的东西是帕洛阿尔托的几个邮政编码。它们的价值也增加了大约 6 倍,考虑到这些房子一开始有多贵,这就更令人吃惊了。在过去的 10 年里,包括脸书在内的帕洛阿尔托初创公司的崛起导致了定价的扭曲,甚至将整个湾区都计算在内。
另一个有趣的可视化是这些相同的列的增值率,看看这种趋势在帕洛阿尔托是否可以进一步观察到。代码看起来类似于图 10.3 中的代码。
from sklearn.neighbors import KNeighborsRegressor
neigh = KNeighborsRegressor(n_neighbors=2)
df_comparison.columns = ["Marin County", "San Francisco", "Palo Alto", "Median USA"]
cleveland = df[df["City"] == "Cleveland"].median()
df_median_compare = pd.DataFrame()
df_median_compare["Cleveland_ratio_median"] = cleveland/df_comparison["Median USA"]
df_median_compare["San_Francisco_ratio_median"] = df_comparison["San Francisco"]/df_comparison["Median USA"]
df_median_compare["Palo_Alto_ratio_median"] = df_comparison["Palo Alto"]/df_comparison["Median USA"]
df_median_compare["Marin_County_ratio_median"] = df_comparison["Marin County"]/df_comparison["Median USA"]
import cufflinks as cf
cf.go_offline()
df_median_compare.iplot(title="Ratio to National Median Region Median Home Price to National Median Home Price Ratio 1996-2017",
xTitle="Year",
yTitle="Ratio to National Median",
#bestfit=True, bestfit_colors=["pink"],
#subplots=True,
shape=(4,1),
#subplot_titles=True,
fill=True)
在图 10.4 中,自 2008 年房地产崩盘以来,帕洛阿尔托的中值升值看起来呈指数增长,然而旧金山湾区的其他地方似乎波动较小。一个合理的假设可能是,在帕洛阿尔托的湾区内存在泡沫,这可能是不可持续的。最终,指数增长会停止。
另一件要看的事情是看租金指数,看看是否有进一步的模式梳理出来。
Figure 10.4 Palo Alto Went From Having Home Prices 5 Times Higher Than National Median to 15 Times Higher in About 10 Years
初始数据导入被清除,Metro 列被重命名为 City 列。
df_rent = pd.read_csv("../data/City_MedianRentalPrice_Sfr.csv")
df_rent.head()
median_prices_rent = df_rent.median()
df_rent[df_rent["CountyName"] == "Marin"].median()
df_rent.columns
df_rent.rename(columns={"Metro":"City"}, inplace=True)
df_rent.head()
接下来,在新的数据帧中创建中间值。
median_prices_rent = df_rent.median()
marin_df = df_rent[df_rent["CountyName"span>] == "Marin"].median()
sf_df = df_rent[df_rent["City"] == "San Francisco].median()
cleveland = df_rent[df_rent["City"] == "Cleveland"].median()
palo_alto = df_rent[df_rent["City"] == "Palo Alto"].median()
df_comparison_rent = pd.concat([marin_df, sf_df, palo_alto, cleveland, median_prices_rent], axis=1)
df_comparison_rent.columns = ["Marin County","San Francisco,"Palo Alto", "Cleveland", "Median USA"]
最后,袖扣再次被用于绘制租金中位数。
import cufflinks as cf
cf.go_offline()
df_comparison_rent.iplot(
title="Median Monthly Rents Single Family Homes",
xTitle="Year",
yTitle="Monthly",
#bestfit=True, bestfit_colors=["pink"],
#subplots=True,
shape=(4,1),
#subplot_titles=True,
fill=True)
在图 10.5 中,趋势看起来不太明显,部分原因是数据分布在较短的时间段内,但这并不是全貌。虽然帕洛阿尔托不在这个数据集中,但旧金山湾区的其他城市看起来更接*租金中位数,而俄亥俄州的克利夫兰似乎只有美国租金中位数的一半左右。
Figure 10.5 Rents in the San Francisco Bay Area since 2011 Have Almost Doubled While the Rest of the US Has Stayed Flat
最后一项分析是,在全美范围内寻找类似的租金比率。在这段代码中,租金比率是用一个新的空数据框架创建的,然后再次插入到 Plotly 中。
df_median_rents_ratio = pd.DataFrame()
df_median_rents_ratio["Cleveland_ratio_median"] = df_comparison_rent["Cleveland"]/df_comparison_rent["Median USA"]
df_median_rents_ratio["San_Francisco_ratio_median"] = df_comparison_rent["San Francisco"]/df_comparison_rent["Median USA"]
df_median_rents_ratio["Palo_Alto_ratio_median"] = df_comparison_rent["Palo Alto"]/df_comparison_rent["Median USA"]
df_median_rents_ratio["Marin_County_ratio_median"] = df_comparison_rent["Marin County"]/df_comparison_rent["Median USA"]
import cufflinks as cf
cf.go_offline()
df_median_rents_ratio.iplot(title="Median Monthly Rents Ratios Single Family Homes vs National Median"
xTitle="Year",
xTitle="Year",
yTitle="Rent vs Median Rent USA",
#bestfit=True, bestfit_colors=["pink"],
#subplots=True,
shape=(4,1),
#subplot_titles=True,
fill=True)
图 10.6 显示了一个不同于升值比率的故事。在旧金山,租金中位数仍然是美国其他地区中位数的两倍,但远不及房价中位数的 8 倍。在查看租赁数据时,在 2018 年买房之前仔细检查一下可能会有好处,特别是在帕洛阿尔托地区。租房,即使价格很高,也可能是一笔好得多的交易。
Figure 10.6 Monthly Rents in the San Francisco Bay Area Versus National Median Have Exploded
摘要
在这一章中,我们对一个公共的 Zillow 数据集进行了数据探索。Plotly 库用于在 Python 中创建交互式数据可视化。k-means 聚类和 3D 可视化被用来从相对简单的数据集中梳理出更多的信息。这些发现包括一个想法,即 2017 年旧金山湾区,特别是帕洛阿尔托,可能存在房地产泡沫。通过为美国的每个地区创建一个何时销售、何时购买的分类模型,对这个数据集做进一步的探索是值得的。
这个示例项目的其他未来方向是查看更高级别的 API,如 House Canary 提供的 API。也许你的组织可以通过使用他们的预测模型作为基础来构建一个人工智能应用程序,然后在其上层叠其他人工智能和 ML 技术。
^(编辑注:已经实现了一些小的更改,以增加在线可读性,并反映补充 Domino 项目中预安装的组件。)
通过 lux 在木星上进行更快的数据探索
原文:https://www.dominodatalab.com/blog/faster-data-exploration-in-jupyter-through-the-lux-widget
笔记本已经成为许多数据科学家的主要工具之一。它们提供了一种清晰的方式,在数据探索、特征工程和模型拟合的整个过程中与其他人进行协作,并且通过利用一些清晰的最佳实践,还可以成为代码如何运行的活文档。
笔记本电脑让用户能够选择他们所选择的语言和库,这提供了很大的灵活性,但另一方面,它们在执行某些任务(如数据分析和分析)时可能会非常耗费代码。这通常会导致数据科学家利用 Tableau 或 PowerBI 等其他工具来减少他们需要编写的总代码量,但这通常意味着他们的探索性分析与寻求解决问题的代码脱节。
莱克丝是什么?
Lux 是一个 Jupyter 库,集成了一个交互式小工具,可以在笔记本中自动生成可视化数据。这使得数据科学家能够快速浏览一系列可视化结果,找出相关性和有趣的趋势。Lux 还支持指定特定的意图,然后进一步切片、切割和过滤图表,以找到最适合您正在处理的问题的图表。
这篇博客给出了一个快速设置指南,以及一个项目和一个在Domino Enterprise MLOps platform中的环境,您可以亲自尝试一下。
安装和配置
Lux 需要 Scipy,Altair,Pandas 和 Scikit-学习安装。一旦这些配置完成,安装 Lux 可以通过控制台中的 pip install 命令来完成。
pip install git+https://github.com/lux-org/lux.git
pip install lux-api
安装完库之后,您需要从您的控制台中安装 Lux 小部件作为 Jupyter 的扩展。
jupyter nbextension install --py luxwidget
jupyter nbextension enable --py luxwidget
为了让 Lux 工作,Jupyter 笔记本需要设置为“可信”,目前只支持基于 Chrome 的浏览器。
验证 Lux 的安装
一旦你设置了 Lux,你可以通过在你的笔记本上运行下面的命令来确保它被正确配置。
!jupyter nbextension enable --py luxwidget
这将返回以下内容
Enabling notebook extension luxwidget/extension...
- Validating: OK
操作勒克斯
为了操作 Lux,我们将 Lux 和熊猫导入到我们的笔记本中。
import lux
import pandas as pd
一旦调用 dataframe 对象,Lux 就会作为切换按钮出现在 Jupyter 笔记本中。在下面的例子中,我们将一些葡萄酒质量数据加载到 dataframe 对象中,然后在 Jupyter 中调用它。
df = pd.read_csv("/mnt/data/wine_red.csv",sep=';')
df
一旦我们调用了数据框,Jupyter 就会显示通常的数据表格格式,但是我们现在可以按下切换按钮来生成我们的自动化可视化。
默认情况下,Lux 会跨数据框对象创建相关性、分布和发生图表。这些可以用来快速识别感兴趣的模式;但是,您可以通过指定意图(即您想要分析的属性)来进一步定制这些图表的显示。
这里,我们将质量分数指定为一个意图,并再次调用 dataframe。
df.intent = ["quality"]
df
Lux 现在根据我们指定的意图显示图表,其中包含一系列图表,旨在显示其他属性与“增强”选项卡中质量分数的相关性。如果我们单击这些图形中的任何一个,并单击放大镜,Lux 会自动将新属性作为一个意图包括进来,并基于这两个意图生成图形。
如果选择了两个以上的属性,Lux 允许您过滤或概化数据集。这允许进一步定制图表。过滤器允许您设置特定属性的范围,而概化允许您从已建立的意图中移除属性,这意味着您可以执行其他切片和切片分析。
以勒克斯为单位保存可视化效果
除了执行切片和切块分析之外,Lux 还允许您使用导出的属性为某些可视化添加书签。要为可视化添加书签,请在 Lux 中选择它们,然后点击导出按钮。这将把对象保存到 dataframe 对象上存储的导出属性中。
我们现在可以通过在 Jupyter 中调用这个属性来回调任何保存的图表。
df.exported
结论
Lux 为数据科学家提供了一种快速的方法,通过 Jupyter 笔记本中的自动化可视化,轻松探索模式并描绘他们的数据。无需大量代码即可快速分割数据集的能力提高了效率,并有助于加快分析新数据集的端到端流程。
该库还包括以多种方式导出图表的能力,包括导出到可以在 Lux 小部件本身外部调用的代码中,从而为数据科学家提供了一种快速而简单的方法来共享他们的分析。
有关 Lux 的更多信息,请查看 Lux 入门指南。
想亲自尝试 Lux,在https://try.dominodatalab.com报名免费试用,复制https://try.dominodatalab.com/workspaces/david/lux_demo项目即可上手。
更快的模型调整和实验
原文:https://www.dominodatalab.com/blog/faster-model-tuning-experimentation
Domino 通过让您在强大的硬件上并行运行许多实验并自动跟踪它们的结果,提供了一种迭代分析模型的好方法。最*,我们增加了两个强大的新功能,使工作流程更加简单:运行比较和诊断统计。
动机
软件工程的许多原则(如版本控制)对于良好的分析工作至关重要,但标准软件工具(如 Github、持续集成系统)并不总是能很好地移植到分析工作流程中。其中一个原因是,虽然源代码是软件系统的关键组成部分,但分析工作涉及代码以及数据、参数、统计和可视化结果。
典型的迭代模型开发工作流程包括测试不同的技术或参数,然后比较视觉结果(例如,图表)或模型统计数据(例如,AUC),并在检查时,确定哪些源代码更改导致了更好的结果。软件工程工具不能促进这一工作流程。
#运行比较
运行比较可以很容易地找出两个实验在输入方面的不同,以及这些变化如何影响生成的结果。
比较两次跑步很简单:只需选择您感兴趣的两次跑步,然后点击“比较”按钮:
这将生成一个报告,总结这两次运行之间的差异:
有三个部分:(1)差异摘要(2)两次运行生成的结果之间的差异,以及(3)输入代码和数据之间的差异。
请记住,Domino 在运行开始之前拍摄项目中所有文件的状态快照(“输入”),并在运行完成之后拍摄项目快照(“输出”)。在输入和输出之间添加或修改的任何文件都被视为“结果”
要在各部分之间快速导航,您可以使用位于顶部运行比较表正下方的这些链接:
Domino 将尽可能明智地向您展示不同之处。对于文本,我们将突出显示文件中不同的行:
对于我们知道如何渲染的文件,我们将并排渲染这些文件,以便您可以轻松直观地进行比较:
对于 Domino 不知道如何呈现的文件,我们会给你一些简单的元数据和链接来下载确切的版本,这样你就可以在自己的计算机上查看它们了:
诊断统计
了解特定模型的性能可能非常复杂,通常在所有运行中快速查看关键指标(如曲线下面积、F1 分数、对数似然)是非常有用的,这样可以让您快速预修剪哪些实验值得进一步研究。
Domino 的诊断统计功能允许您这样做!
为此,在项目目录的根目录下编写一个文件 dominostats.json,其中包含您想显示的诊断统计信息。下面是 R 中的一个例子:
diagnostics = list("R^2" = 0.99, "p-value" = 0.05, "sse" = 10.49)
library(jsonlite)
fileConn<-file("dominostats.json")
writeLines(toJSON(diagnostics), fileConn)
close(fileConn)
在 Python 中:
import json
with open('dominostats.json', 'wb') as f:
f.write(json.dumps({"R^2": 0.99, "p-value": 0.05, "sse": 10.49}))
如果 Domino 检测到这个文件,它将解析出这些值,并将它们显示在 Runs 仪表板上:
此外,运行比较还会在表格中显示这些统计数据,以便更容易地比较它们的性能:
速度提高 40 %,无需任何代码更改
原文:https://www.dominodatalab.com/blog/faster-r-without-any-code-changes
从今天开始,任何在 Domino 上运行 R 代码的人都可以使用 Revolution R Open,在不修改任何代码的情况下显著提高他们的性能。
介绍
上周,我们与 Revolution Analytics 的人进行了一次很好的交谈,以了解更多关于他们新的 Revolution R Open 产品(简称 RRO)的信息。对于那些不知道的人来说,RRO 是 R 的股票发行版的 100%兼容的替代产品,具有几个显著的性能增强。这意味着它可以与您现有的所有 R 包一起工作——它只是运行您的代码要快得多。而且是开源的!
基准
我们在默认的 Domino 环境中安装了 RRO,因此我们可以轻松地将项目切换到使用 RRO 而不是 stock R。然后我们使用 R-Benchmark-25 脚本进行了一些基准测试。结果令人印象深刻:
在单核机器上, RRO 比 stock R 快* 30%。在一台 4 核机器上, RRO 快了将* 40%。同样,这些改进发生在完全相同的 R 代码上,并且不需要更新任何包。
差异与革命的基准
Revolution 在他们的博客和网站上发布了一些他们自己的基准测试。虽然我们上面的结果看起来令人印象深刻,但 Revolution 显示了比我们看到的更显著的加速。我们没有调查过这个。可能是因为他们运行在 Windows 上,英特尔 MKL 支持给了他们很大的推动,而因为我们运行在 Linux 上,我们已经为我们的 stock R 安装有了一个很好的底层数学库(BLAS)。或者有可能我们没有充分利用一些配置选项。老实说,我们不知道。
RRO 安装
在 Ubuntu 上安装很简单,按照 Revolution 自己的指令:
wget http://mran.revolutionanalytics.com/install/RRO-8.0-Beta-Ubuntu-14.04.x86_64.tar.gz
tar -zxf RRO-8.0-Beta-Ubuntu-14.04.x86_64.tar.gz
./install.sh
# RRO will be installed in '/usr/lib64/RRO-8.0' -- update your $PATH accordingly
Domino 上的 RRO
Domino 项目现在可以选择设置使用 RRO 而不是 stock R。如果您想在您的项目中试用它,只需发电子邮件给我们的服务台让我们知道。
特征工程:框架和技术
原文:https://www.dominodatalab.com/blog/feature-engineering-framework-techniques
这份 Domino 现场笔记提供了来自 Amanda Casari 的“机器学习的特征工程”在圣保罗 QCon 上演讲的亮点和节选幻灯片。Casari 是 Concur Labs 的首席产品经理兼数据科学家。卡萨里也是《机器学习的特征工程:数据科学家的原则和技术》一书的合著者。演讲的完整视频可在此处获得,特别感谢 Amanda 允许 Domino 在本 Domino 现场笔记中摘录演讲的幻灯片。
介绍
在演讲《机器学习的特征工程》中,卡萨里给出了特征工程的定义;思考机器学习的框架;以及包括将原始数据转换成矢量、在特征空间中可视化数据、二进制化和宁滨(量化)的技术。这份 Domino 现场笔记提供了关于这些主题的谈话的精华。对于更多深度,包括对特征缩放的覆盖,以及文本数据的技术,包括单词袋、基于频率的过滤和词类分块,甲板和完整会议视频公开提供。
为什么要考虑特征工程
卡萨瑞将“特征”定义为数字表示,“特征工程”定义为“从原始数据中提取这些特征,然后将其转化为我们可以用于机器学习模型的东西的行为”。她指出“正确的特征只能在模型和数据的上下文中定义”。
这一点很重要,因为数据科学家通过特征工程,“可以做出更明智的选择,理解[他们的]过程,然后有望节省[他们的]时间”,并获得“对结果的更大透明度,并能够具有可解释性”。Casari 还指出,特征工程使数据科学家能够“更周到地考虑我们构建的数据和特征……由此,我们如何最大限度地利用这些功能,而不是仅仅试图收集更多的数据…从原始数据到特征,以便思考模型和(我们)试图解决的问题”。
特征工程框架
卡萨瑞在她的演讲中还提供了一个特征工程框架。目的是为数据科学家提供一种思考过程和技术的方法。该框架的四个方面包括:
- 把你的问题框起来。 Casari 建议以机器学习有可能有用的方式来构建这个问题。然后,数据科学家将能够通过机器学习镜头基于框架问题进行数学建模。这可能使人们能够确定问题,以及“我们是否可以使用我们现在拥有的或我们创建的软件来解决这个问题,以便做到这一点”。
- 了解你的数据(或你可能拥有的数据)。这使数据科学家能够评估什么是最有用的,可用的数据是否足以解决他们试图解决的问题,以及未来解决问题需要什么。此外,需要考虑的是系统将如何“随着时间的推移而适应和调整”
- 设定你的特色目标。 Casari 指出“我们需要考虑我们在优化什么……这些年来,特性工程给我的最大礼物是真正降低了迭代速度”。虽然利用处理许多数据类型的库很容易,但 Casari 提倡如何“使用一些更稀疏的数字表示比使用那些更丰富的数据框更有效,这些数据框周围有很多元数据”,“迭代速度至关重要,因为这真的会帮助你前进。另一部分要考虑的是模型性能。你所选择的模型,你所构建的功能,都是为了优化特定类型的模型。”这有助于避免模型上的压力和潜在的无用结果。
- 测试,迭代,再测试。在提议框架的最后一个方面,Casari 指出,数据科学家将测试选择的稳健性,验证选择,并认识到,由于系统或模型周围的现实发生变化,结果也会发生变化。卡萨瑞主张让过程和心态都到位,这样你就可以继续为此进行调整。"
一些技巧的背景
Casari 会议的大部分时间集中在提供数学背景(即原理、它将如何影响工作、用例等。)关于一些不同的技术,在GitHub 报告中可以找到这些技术的应用版本。本笔记涵盖矢量空间到特征空间、二值化和宁滨的高级概述。视频和书中还深入介绍了更多计数、特征缩放、单词袋、基于频率的过滤和分块等技术。
向量和空间
卡萨瑞指出,在计算机科学中,定标器是
”是一个单一的数字特征,当我们有一个有序的标量列表时,这就是所谓的向量。所以现在我们要讨论向量空间,这样我们就可以表示这些向量,就像二维向量 V,可以用我们现在称之为向量空间来表示。”
这很重要,因为
“在大多数机器学习应用中,模型的输入通常表示为数字向量。所以,如果你在努力或者出错,或者试图做一些事情,要真正理解那个模型需要这个表示…如果你没有这份礼物,那么你将从一开始就遇到一些问题。”
Casari 还指出,“当我们从向量空间或数据空间转移到特征空间时,我们谈论的更多的是它应该意味着什么,而不仅仅是一个数字向量。”向量能够承载信息和意义。
这提供了对以下内容的理解
“我们如何获取信息,并将其表示为一个人的偏好和歌曲……我们的想法是,如果这首歌是我们想要得到的特征,那么我们可以将其表示为有人喜欢它的优点,或者表示为有人不喜欢这首歌的缺点……然后我们可以开始从数据和特征空间…然后将特征返回到数据空间。”
她还指出,“这里的区别将是点的表示以及它所代表的轴”。
计数:二值化和宁滨
卡萨瑞表示,要计数的数据比原始计数多。虽然 Casari 涵盖了许多方面,但这篇博文将重点介绍二值化和宁滨是如何处理计数数据的有用技术。二进制化是将原始数据转换成二进制值的过程,以“有效地将原始数据表示为存在”。例如,当推荐歌曲时,这可能是有用的。与其专注于原始计数或某人听一首歌的次数,倒不如考虑一下“尺度的有效性”以及如何“更有效地理解某人喜欢或不喜欢一首歌,然后你可以用 0 或 1 来表示它”。这种技术提供了“更有效的原始计数表示以及更稳健的原始计数测量”。
宁滨(或称量化)是一种将计数分组到多个“箱”中以移除计数值的技术。这种技术有助于控制规模,因为“许多机器学习模型在处理这些长尾分布方面面临着真正的挑战,因此当您试图处理的变量中存在跨越几个数量级的原始计数时,最好开始考虑如何转换这一特征,以及如何通过量化计数来控制规模”。
为了确定每个仓的宽度,有两个类别:固定宽度宁滨和自适应宁滨。固定宽度的宁滨是“每个容器现在将包含特定范围内的数据…所以实际上只需将数据与其他类似的数据放入桶中,并降低空间中存在的复杂性”。卡萨瑞注意到固定宽度的宁滨在
“对健康的评估或试图理解如疾病建模。更有意义的是,我们可以看到生命的不同阶段,在这种情况下,你可能会有几个月、几年或几十年的弯曲。要明白,当你看宁滨时,你真的应该试着更多地看它下面的变量的上下文。
然而,当空箱子里没有数据时会发生什么呢?卡萨瑞指出,“适应性宁滨更关注分位数或十分位数。因此,用 10%、20%、30%实际观察分布情况,并按这种方式分组,“这样可以更容易理解,并从较高的层面捕捉更清晰的不对称情况。
结论
这篇 Domino 数据科学领域笔记提供了 Casari 演讲的精华部分,“机器学习的特征工程”。这篇博文的亮点包括一个特征工程框架,以及二值化和宁滨的概述。有关包括特征缩放、单词袋、基于频率的过滤和词类分块在内的技术的更多报道和深度,请访问资料和视频。
^(Domino 数据科学领域笔记提供数据科学研究、趋势、技术等亮点,支持数据科学家和数据科学领导者加快工作或职业发展。如果您对本博客系列中涉及的数据科学工作感兴趣,请发送电子邮件至 writeforus(at)dominodatalab(dot)com。)
基于深度神经网络和 OpenCV 的特征提取和图像分类
在之前的一篇博文中,我们谈到了计算机视觉的基础、OpenCV 框架的历史和功能,以及如何用 Python 和 OpenCV 迈出访问和可视化图像的第一步。在这里,我们更深入地使用 OpenCV 和 DNNs 进行特征提取和图像分类。
图像分类和目标检测
图像分类是机器学习最有前景的应用之一,旨在提供能够以接*人类的准确度识别和分类图像内容的算法。
图像分类方法通常分为基于图像特征的提取及其在分类中的效用的传统方法,或者利用深度神经网络的优势的更高级的方法。
特征提取的传统方法
使用不同的机器学习算法可以潜在地提取各种特征。Lowe 等人(2004)开发了尺度不变特征变换(SIFT),旨在解决特征匹配中的亮度、视点变化和图像旋转问题[1]。SIFT 允许估计尺度空间极值,随后是关键点定位、定向,并随后计算每个关键点的局部图像描述符。此外,SIFT 提供了给定图像中对象的有效识别,然而,其实现在计算上是昂贵且耗时的。
SIFT 启发了其他变体的开发,特别是为了克服复杂性和相关的计算需求。一个这样的变体是加速稳健特征(SURF),据报道,它优于 SIFT,而对检测点的稳健性和整体模型准确性没有负面影响[2]。SIFT 的另一个替代方案是健壮的独立基本特征(BRIEF ),以显著更低的复杂度提供相似的性能[3]。此外,Rublee 等人(2011)报告称,面向快速和旋转的摘要(ORB)提供了更高效的性能[4]。
此外,梯度方向直方图(HOG) HOG 用于各种任务,包括允许测量边缘方向出现的对象检测。原则上,该描述符代表关键点的图像梯度方向的局部统计。简单地说,每个描述符可以被认为是一个直方图的集合,这些直方图由梯度指定的像素方向组成[5]。
撒
尺度不变特征变换最初由 David Lowe 于 2004 年提出,作为一种从图像中提取区别性不变特征的方法,用于图像间的特征匹配。这是一种特别有用的方法,因为它可以检测图像特征,而与方向和大小无关[1]。下面我们提供从上一步显示的“人脸”图像中提取 SIFT 所需的步骤(参见上一篇博文中的“打开和显示图像文件”一节)。
sift = cv2.xfeatures2d.SIFT_create()
original_keypoints, original_descriptor = sift.detectAndCompute(gray_face, None)
query_keypoints, query_descriptor = sift.detectAndCompute(query_face_gray, None)
keypoints_without_size = np.copy(original_face)
keypoints_with_size = np.copy(original_face)
cv2.drawKeypoints(original_face, original_keypoints, keypoints_without_size, color = (0, 255, 0))
cv2.drawKeypoints(original_face, original_keypoints, keypoints_with_size, flags =
cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
图一。分别在左右图像中检测到有/无尺寸的关键点
快的
加速分割特征测试(FAST)是一种提取特征点的角点检测方法,最初由 Edward Rosten 和 Tom Drummond 于 2006 年提出。这种方法非常高效,因此适用于包括实时视频处理在内的资源密集型应用[6]。下面我们将提供从上一步显示的“人脸”图像中提取 SIFT 所需的步骤。
fast = cv2.FastFeatureDetector_create()
keypoints_with_nonmax = fast.detect(gray_face, None)
fast.setNonmaxSuppression(False)
keypoints_without_nonmax = fast.detect(gray_face, None)
image_with_nonmax = np.copy(original_face)
image_without_nonmax = np.copy(original_face)
cv2.drawKeypoints(original_face, keypoints_with_nonmax, image_with_nonmax, color=(0,255,0),
flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.drawKeypoints(original_face, keypoints_without_nonmax, image_without_nonmax, color=(0,255,0),
flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
图二。使用/不使用非最大抑制检测到关键点。
球
定向快速旋转简报(ORB)最初是由 Ethan Rublee、Vincent Rabaud、Kurt Konolige 和 Gary R. Bradski 在 2011 年提出的(OpenCV 实验室)。该方法具有旋转不变性和抗噪性。主要的基本原理是提供一个比筛选和冲浪更有效的替代品,它可以免费使用,没有任何限制[4]。然而,SIFT 和 SURF 仍然是专利算法。我们将使用相同的图像来提取 ORB 描述符。
orb = cv2.ORB_create()
original_keypoints, original_descriptor = orb.detectAndCompute(gray_face, None)
query_keypoints, query_descriptor = orb.detectAndCompute(query_face_gray, None)
keypoints_without_size = np.copy(original_face)
keypoints_with_size = np.copy(original_face)
cv2.drawKeypoints(original_face, original_keypoints, keypoints_without_size, color = (0, 255, 0))
cv2.drawKeypoints(original_face, original_keypoints, keypoints_with_size, flags =
cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
图 3。分别在左右图像中检测到有/无尺寸的关键点。
brute_force = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck = True)
matches = brute_force.match(original_descriptor, query_descriptor)
matches = sorted(matches, key = lambda x : x.distance)
result = cv2.drawMatches(original_face, original_keypoints, query_face_gray, query_keypoints, matches,
query_face_gray, flags = 2)
print("The number of matching keypoints between the original and the query image is {}\n".format(len(matches)))
图 4。匹配在原始(主)和查询(顶部)图像中检测到的关键点。
使用 OpenCV DNN 和预训练的 DenseNet 进行分类
OpenCV 可以用来解决图像分类问题。OpenCV 库提供了深度神经网络(DNN)模块,这有助于在 OpenCV 中使用深度学习相关的功能。该模块在 OpenCV 版本 3 中引入,本教程使用 OpenCV 版本 4 . 5 . 2。DNN 模块的主要功能是允许迁移学习和使用预训练模型。请注意,DNN 模块不能用于训练模型,但可用于使用其他流行的神经网络框架训练的模型,包括 PyTorch、TensorFlow、Caffe、Darknet 和 ONNX。
仅使用 OpenCV DNN 进行推理有几个优点。将模型训练卸载到其他库并使用预先训练的模型会产生简单明了的代码。这使得不一定对 DNNs 有深刻理解的 CV 概念和机载用户更容易采用。此外,这种方法除了支持基于 CUDA 的 NVIDIA CPUs 之外,还支持基于 OpenCL 的英特尔 GPU,从而实现更高的性能。
在本教程中,我们将使用预训练的 DenseNet121 模型,该模型使用 ImageNet 数据库上的 Caffe 框架进行训练,该数据库包含 1000 个图像类。DenseNet 是一种卷积神经网络(CNN ),它使用层之间的密集连接(通过密集块)。具有匹配的要素地图大小的所有图层直接相互连接。为了使用预训练的 DenseNet 模型,我们将使用 OpenCV 来加载模型架构和预训练的权重。在此过程中,我们将执行以下步骤:
- 图像预处理
- 加载类别标签
- 初始化模型
- 分类和可视化输出
这些图片来自于提供免费图片的 Unsplash。所提供的图像可用于商业和非商业目的,使用不需要许可。在将图像输入模型之前,需要进行一些预处理。这些包括根据模型的要求将图像的大小调整为 224x224,设置比例,并在必要时裁剪图像。预处理由 OpenCV 的 cv2.dnn.blobFromImage()函数处理。
接下来,我们加载 ImageNet 图像类,创建一个标签列表,并初始化 DNN 模块。OpenCV 能够分别使用 cv2.dnn.readNetFromCaffe 初始化 Caffe 模型,使用 cv2.dnn.readNetFromTensorFlow 初始化 TensorFlow 模型,使用 cv2.dnn.readNetFromTorch 初始化 PyTorch 模型。这种选择是由模型接受训练的原始框架决定的。DenseNet121 使用 Caffe 进行训练,因此我们将使用 cv2.dnn.readNetFromCaffe 初始化 DNN 模块。预处理后的图像被输入网络,并在正向传递阶段进行一系列计算。
def image_classification(model_weights, model_architecture, image):
blob = cv2.dnn.blobFromImage(image, 0.017, (224, 224), (103.94,116.78,123.68))
global model, classes
rows = open('Resources/model/denseNet/synset_words.txt').read().strip().split("\n")
image_classes = [r[r.find(" ") + 1:].split(",")[0] for r in rows]
model = cv2.dnn.readNetFromCaffe(model_architecture, model_weights)
model.setInput(blob)
output = model.forward()
new_output = output.reshape(len(output[0][:]))
expanded = np.exp(new_output - np.max(new_output))
prob = expanded / expanded.sum()
conf= np.max(prob)
index = np.argmax(prob)
label = image_classes[index]
text = "Label: {}, {:.2f}%".format(label, conf*100)
cv2.putText(image, "{}: {:.2f}% confidence".format(label, conf *100), (5, 40), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 255, 255), 2)
model_architecture ='Resources/model/denseNet/DenseNet_121.prototxt.txt'
model_weights = 'Resources/model/denseNet/DenseNet_121.caffemodel'
image1 = cv2.imread('Resourcimg/persian_cat.jpg')
classify1 = image_classification(model_weights, model_architecture, image1)
image2 = cv2.imread('Resourcimg/dog.jpg')
classify2 = image_classification(model_weights, model_architecture, image2)
图 5。使用 OpenCV DNN 模块和预训练的 DenseNet 模型进行图像分类。对于该图中使用的图像,波斯猫和哈巴狗分类的正确率分别为 98.7%和 91%。
目标检测
对于目标检测,我们将使用两种方法:哈尔级联和 OpenCV DNN 模块以及 MobileNet SSD 预训练模型。
由 Viola 和 Jones 在 2001 年[7]提出的 Haar cascades 是一种可以检测图像中的对象的方法,而不管这些对象在图像中的比例和位置。作者主要关注人脸检测,尽管他们的方法可以适用于检测其他对象。与更先进的方法相比,这是一种快速的方法,但因此 Haar 级联的精度较低。在许多情况下,它会产生大量的假阳性。
OpenCV DNN 模块,带 MobileNet SSD 预训练模型。该方法接收预处理的图像,并将它们提供给预训练的模型。我们将展示它的作用,然后可视化两个不同图像的输出。我们将使用 MobileNet Single Shot Detector(SSD ),它最初是使用 TensorFlow 深度学习框架在 COCO 数据集上训练的。与其他替代方案相比,SSD 模型通常在计算时间方面提供更高的性能,因此更适合本教程。
使用哈尔级联的目标检测
为了说明哈尔级联的使用,我们将展示如何检测人类的眼睛和面部以及猫的面部。实现如下。
face_cascade = cv2.CascadeClassifier("Resources/model/haarcascades/haarcascade_frontalface_default.xml")
eye_cascade = cv2.CascadeClassifier("Resources/model/haarcascades/haarcascade_eye.xml")
img = cv2.imread("Resourcimg/group.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
img1 = cv2.rectangle(img,(x, y),(x + w, y + h),(255,255,0),2)
roi_gray = gray[y: y + h, x: x + w]
roi_color = img[y: y + h, x: x + w]
eyes = eye_cascade.detectMultiScale(roi_gray)
for (ex, ey, ew, eh) in eyes:
cv2.rectangle(roi_color,(ex, ey), (ex + ew, ey + eh), (0,255,0),2)
cat_face_cascade = cv2.CascadeClassifier("Resources/model/haarcascades/haarcascade_frontalcatface.xml")
img = cv2.imread("Resourcimg/cats.jpg")
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
faces = cat_face_cascade.detectMultiScale(img_rgb, 1.1, 4)
for (x,y,w,h) in faces:
img2 = cv2.rectangle(img_rgb,(x, y),(x + w, y + h),(255,255,0),5)
图 6。基于 Haar 级联分类器的目标检测。左边的图像是人类眼睛和面部检测的结果,右边的图像是猫面部检测的输出。
使用 OpenCV DNN 和预训练的 MobileNet 进行目标检测
我们的目标是使用下面的代码检测图 7 中描绘的两幅图像中的对象。
def detect_objects(model_architecture, config, framework, image):
image_height, image_width, _ = image.shape
blob = cv2.dnn.blobFromImage(image, size=(300, 300), mean=(104, 117, 123), swapRB=True)
global model, classes
with open('Resources/model/mobileNet/object_detection_classes_coco.txt', 'r') as f:
class_names = f.read().split('\n')
model = cv2.dnn.readNet(model_architecture, config, framework)
model.setInput(blob)
output = model.forward()
colours = np.random.uniform(0, 255, size=(len(class_names), 3))
for detection in output[0, 0, :, :]:
confidence = detection[2]
if confidence > .4:
class_id = detection[1]
class_name = class_names[int(class_id)-1]
color = colours[int(class_id)]
box_x = detection[3] * image_width
box_y = detection[4] * image_height
box_width = detection[5] * image_width
box_height = detection[6] * image_height
cv2.rectangle(image, (int(box_x), int(box_y)), (int(box_width), int(box_height)), color, 2)
cv2.putText(image, class_name, (int(box_x), int(box_y - 5)), cv2.FONT_HERSHEY_SIMPLEX, 1, color, 2)
model_architecture = 'Resources/model/mobileNet/frozen_inference_graph.pb'
config = 'Resources/model/mobileNet/ssd_mobilenet_v2_coco_2018_03_29.pbtxt'
framework='TensorFlow'
image1 = cv2.imread('Resourcimg/dogcats.jpg')
detect1 = detect_objects(model_architecture, config, framework, image1)
image2 = cv2.imread('Resourcimg/dogs_humans.jpg')
detect2 = detect_objects(model_architecture, config, framework, image2)
图 7。使用 OpenCV 和预训练的 MobileNet 进行对象检测。在两幅图像中,左边的图像上是动物的混合,右边的图像上是动物和人的混合,这种对象检测方法产生了对象的精确标记,在对象周围有适当的对应边界框。
结论
OpenCV 是计算机视觉中使用的主要库之一。在这里,我们简要介绍了这个强大的库的背景,并描述了特征提取、图像分类和对象检测所需的步骤。
神经网络和深度学习在过去 10 年中的深刻进步导致了计算机视觉的重大进展。OpenCV 是使这一旅程成为可能的库之一,我们希望提供足够的信息来鼓励我们的读者寻求 OpenCV 在解决他们的计算机视觉问题方面提供的许多功能的进一步培训。
额外资源
您可以查看以下附加资源:
- 阅读我们关于OpenCV入门的博客
- OpenCV-【https://opencv.org/opencv-free-course/ 上的免费在线课程
- OpenCV 官方文档-【https://docs.opencv.org/4.x/
- 有一个附带的项目,其中包含本文的所有代码,您可以通过注册免费的 Domino MLOps 试用环境来访问它:
参考
[1] D. G. Lowe,“来自尺度不变关键点的区别性图像特征”,国际计算机视觉杂志,第 60 卷,第 2 期,第 91-110 页,2004 年。
[2] H. Bay,A. Ess,T. Tuytelaars 和 L. Van Gool,“加速的鲁棒特征(SURF)”,计算机视觉和图像理解,第 110 卷,第 3 期,第 346-359 页,2008 年。
[3] M. Calonder、V. Lepetit、C. Strecha 和 P. Fua,“简介:二进制鲁棒独立基本特征”,欧洲计算机视觉会议,2010 年:Springer,第 778-792 页。
[4] E. Rublee,V. Rabaud,K. Konolige 和 G. Bradski,“ORB:SIFT 或 SURF 的有效替代方案”,2011 年计算机视觉国际会议,2011 年:Ieee,第 2564-2571 页。
[5] D. Monzo、A. Albiol、J. Sastre 和 A. Albiol,“使用 HOG 描述符的精确眼睛定位”,机器视觉和应用,第 22 卷,第 3 期,第 471-480 页,2011 年。
[6] E. Rosten 和 T. Drummond,“用于高速角点检测的机器学习”,欧洲计算机视觉会议,2006 年:Springer,第 430-443 页。
[7] P. Viola 和 M. Jones,“使用简单特征的增强级联的快速对象检测”,2001 年 IEEE 计算机学会关于计算机视觉和模式识别的会议记录。CVPR 2001,2001,第 1 卷:Ieee,第 I-I 页
用数据科学对抗儿童剥削
原文:https://www.dominodatalab.com/blog/fighting-child-exploitation-data-science
每天都有 10 万条新的三陪广告发布在网上。这是根据通过技术创新打击儿童性剥削的非营利组织 Thorn T1 的说法。Thorn 对未成年人性交易幸存者的其他研究表明,其中 63%的幸存者曾在网上做过广告。庞大的在线商业色情市场极难对抗,这激发了一年一度的黑客马拉松的开始,将跨行业的专家聚集在一起,致力于儿童安全。
多米诺团队来到了位于门洛帕克的明亮欢快的脸书总部,这是第二届 2017 年儿童安全黑客马拉松的会场,成群的志愿者涌入这里解决一个非常黑暗而真实的话题。工程、数据科学和政策领域最聪明的头脑正在联合力量开发寻找失踪儿童和保护儿童安全的技术解决方案,Domino 是他们的首选工具。
在日常运营中,Thorn 利用科技公司的知识、时间和资源来开发产品,让一线的专业人员能够用来打击儿童性剥削。他们构建的产品的主要组成部分体现了强大的数据科学技术。这就是为什么对于黑客马拉松来说,Thorn 在提供难以获得的儿童剥削数据方面发挥了重要作用。
任何人都可以参加 20 多种不同的挑战,具有工程和数据科学背景的志愿者被 Thorn 的项目所吸引,因为大多数项目需要网络抓取、机器学习、自然语言处理和图像识别专业知识。对于 Thorn 来说,参与这样的挑战并不是黑客马拉松活动独有的。他们依靠志愿者来解决这类问题,每天为执法部门开发真正的工具。
对于许多公司来说,即使拥有一个内部数据科学团队,也很难反复实验,然后为利益相关者和模型获得洞察并投入生产(即,投入下游工具和运营)。
对于 Thorn 来说,这种复杂性被放大了,因为捐款是不稳定的,志愿者来来去去。因此,Thorn 为志愿者提供一个*台,让他们立即开始项目工作,这一点至关重要。志愿者应该很容易从另一个志愿者停止的地方继续现有的工作,并将他们的工作保存在一个中心位置,这样 Thorn 即使在他们离开后也可以将其投入生产。
这也是 Thorn 使用 Domino *台的原因。它作为一个中心枢纽,容纳了来自内部和志愿者数据科学家的所有工作。
对于 Domino 团队来说,儿童安全黑客马拉松是一次鼓舞人心和令人满意的经历。我们有机会看到 Thorn 如何使用多米诺骨牌来利用惊人的才华,以开发创新的方法来拯救儿童免受性剥削。
这对志愿者来说也是一次很棒的经历。当他们自己选择参加 Thorn 的挑战时,他们可以立即访问项目的数据、环境、模板和信息,因为它们存储在 Domino 中。他们能够立即开始与他们的新团队合作。其他团队的志愿者甚至过来问 Thorn 的团队怎么能这么快上手!
随着团队成员开始试验和编写代码,他们能够在*台内轻松分享算法进展,并与他人并排比较结果。使用 Thorn 专门为黑客马拉松提供的 AWS 实例,团队可以即时访问计算资源,进行快速实验和迭代。
最终,Thorn 带走了硅谷一些顶级技术人才制作的可复制的作品和原型,所有这些都是通过 Domino 的力量捕获和记录的。
混合/多云中的金融服务人工智能:利用混合 MLOps 控制数据重力
原文:https://www.dominodatalab.com/blog/financial-services-ai-in-the-hybrid-cloud
您如何*衡 FSI 的创新和效率需求与合规和善治需求?这是金融服务和保险行业需要回答的一个关键问题,因为人工智能、人工智能和混合/云计算是我们这个时代最重要的技术趋势。
他们已经彻底改变了我们的生活和工作方式,他们的潜力在 FSI 才刚刚开始实现。 根据彭博 最*的一项研究,从 2021 年到 2028 年,全球金融服务和保险市场的人工智能(AI)预计将产生 843 亿美元的收入,CAGR 将增长 21.4%。目前,金融服务公司通过增强人类决策,使其更快、更准确、更高效,来利用人工智能获得竞争优势。
然而,希望利用这两种趋势的公司通常会发现,他们需要在创新的竞争动力与治理和合规性需求之间取得*衡。过多的创新会导致混乱,而过多的治理会扼杀创新。关键是找到正确的*衡,有足够的治理来确保稳定性和问责制,但也有足够的创新来推动模型驱动的竞争优势。
最*的一份 Ventana Research 白皮书, 首席数据的 5 大 AI 考虑事项&分析高管、 注意到类似的挑战。虽然人工智能/人工智能的好处得到了广泛认可,97%的金融服务机构报告称人工智能/人工智能对于检测和防止欺诈非常重要,但各行业中十分之八的机构也指出了治理人工智能/人工智能的重要性,这凸显了数据和分析高管面临的创新与治理之间的艰难*衡。
这不一定非黑即白,因为头条新闻经常报道各自领域的市场领导者未能找到这种*衡。 例如,2017 年,Equifax 的一次数据泄露导致了 7 亿美元的结算 ,最*一次“小故障”导致了消费者的信用评分报告不正确——数据科学行业专家推测,这可能是由人工智能模型“数据漂移”引起的 ,如 VentureBeat 所报道。达美乐的托马斯·罗宾逊说,关键领域非常需要良好的监控
“数据科学的游戏时间结束了。更具体地说,对于那些创建产品模型的组织来说,如果这些模型的决策会影响人们的财务生活、健康结果和隐私,那么现在这些模型不与适当的监控和控制相结合就是不负责任的。”
金融服务公司的数据和分析高管面临着通过证明数据科学计划来从数据中提取价值的挑战,同时还要*衡治理,以确保他们的公司不会因为错误的原因而登上头条。
管理数据科学的卓越分析中心的崛起
为了在混合云环境中更好地治理数据科学,许多金融服务和保险公司正在转向“数据科学卓越中心(CoE)”战略,以推动整个企业中数据科学计划的创新最佳实践和治理。
有效的治理需要所有人工智能/人工智能活动的单一窗口显示,而创造模型驱动的竞争优势的金融服务公司正在实施各种形式的“分析/人工智能/人工智能卓越中心(CoE)”来推动人工智能/人工智能的采用。 DBRS 部署 Domino 作为所有数据项目组的中心*台,包括财务、研究和模型治理。同样, S & P Global 使用 Domino 作为“胶水”支撑程序,对 17,000 名分布在各地的员工进行数据科学教育。
CoE 策略在保险业中也很常见。好事达的 卓越分析中心 帮助他们将模型置于其业务的核心,利用数据作为转型企业资产。 纽约人寿的 数据科学和人工学习中心也完全沉浸在公司的核心业务中,能够在整个公司范围内进行实时的、基于模型的决策。 Topdanmark 的 机器学习卓越中心在欺诈检测、政策批准和风险管理的整个运营过程中注入模型,所有这些都是为了改善客户体验。 SCOR 的 数据科学卓越中心极大地促进了数据科学的采用,并帮助业务部门开发模型,以比以前快 75%的速度满足客户需求。
管理分布式敏感数据的激增
数据是有效机器学习计划的驱动力,跨环境(多种云、混合云和内部部署)的敏感分布式数据为金融服务数据和分析高管在 CoE 战略中集中和管理 AI/ML 带来了独特的挑战。
Ventana Research 最*发布的白皮书《首席数据和分析主管的 5 大人工智能考虑事项》指出,73%的组织报告称,不同的数据源和系统是实施数据科学治理政策时面临的最大挑战,数据科学家需要来自公司防火墙之外的大量数据加剧了这一挑战。
金融服务公司需要来自分支机构、在线和移动设备的数据。收购和合并也扩大了数据足迹,数据通常分布在云区域、提供商和内部数据源之间。根据同一份 Ventana Research 白皮书,32%的组织报告使用 20 个以上的数据源,而 58%的组织自我报告使用“大数据”——Pb 大小的数据库变得越来越普遍。
此外,最*的一篇 《华尔街日报》文章指出,医疗保险公司 Anthem 产生 1.5 到 2 Pb 的合成数据,旨在训练模型以检测欺诈并向会员提供个性化服务,凸显了这种分布式数据的“巨大”。Ventana Research 指出,“到 2025 年,超过四分之三的企业将把数据分散到多个云提供商和内部数据中心,这需要对跨多个位置的数据管理产品进行投资。”
这反映了 Domino 在我们自己的客户端中观察到的类似模式,将数据源与高级机器学习技术相结合,以获得模型驱动的竞争优势。在 Coatue ,替代数据源和新计算技术的激增产生了对识别可告知投资决策的信号的需求。 穆迪分析 通过基于独特的金融数据集创建分析并应用它们来解决客户的业务挑战,建立了竞争优势。
通过混合/多云策略利用数据重力
谈到大数据,尤其是“分布式”大数据,数据引力是需要理解的最重要的概念之一。数据引力是指大数据将其他数据、系统和服务/应用拉向它的趋势。因为人工智能和数据科学需要大量数据,所以制定收集、存储、处理和分析这些数据的策略非常重要。
性能只是一个重要的数据重心考虑因素——通过将数据和计算放在一起,可以减少模型延迟。 虽然托管云数据库在管理这种数据激增方面提供了一些希望,但流入和流出成本会极大地阻碍数据科学的努力——根据 Ventana Research 的数据,提取和分析 1pb 的数据可能需要高达 5 万美元。
除了性能考虑之外,数据驻留和数据主权法规进一步使数据收集和处理复杂化,通常将数据集锁定在单个地理位置、云或云区域。欧盟的数字运营弹性法案(DORA)“旨在确保金融系统中的所有参与者都有必要的安全措施来减轻网络攻击和其他风险”,并对供应商集中和供应商锁定提出了具体要求。更具体地说,对于 AI/ML, GDPR 有关于自动化决策和分析的规定 ,强调了混合和多云配置的重要性,以确保适当的数据管理和地理围栏。根据 Ventana 的研究:
“到 2026 年,几乎所有跨国组织都将投资本地数据处理基础设施和服务,以降低与数据传输相关的风险。”
考虑到数据传输成本、安全性、法规和性能,设计具有灵活性的 AI/ML *台通常更有意义,它提供了将数据处理背后的计算与数据本身放在一起的选择,而不是跨云或地理位置传输或复制数据集。在分析卓越中心战略要求对治理的数据科学计划有一个整体的、企业范围的看法的背景下,数据和分析高管在构建其数据和分析基础架构时面临困难的决策。
针对混合/多云 MLOps 的数据科学*台考虑事项
寻求采用人工智能*台的金融服务和保险公司应专注于支持其混合企业 IT 战略的*台。这一战略包括*衡开放性、敏捷性和灵活的计算能力,以使业务面向未来。提供这些功能的*台将能够帮助企业快速决策,快速响应市场变化,并快速适应新技术或立法。
随着我们最*的 Nexus 混合云数据科学*台 的发布,Domino 数据实验室处于人工智能工作负载混合支持的前沿。一个真正的混合数据科学*台使数据科学家能够在公司运营的每个环境中以一种安全且管理良好的方式访问数据、计算资源和代码。我们与 NVIDIA 的深度 合作以及对 更广泛的数据和分析生态系统的支持 为数据和分析高管提供了培养 AI/ML 创新所需的信心,同时还提供了企业范围治理所需的灵活性。
Ventana Research 强调开放、灵活的数据科学*台的重要性;“面对不断发展的混合战略和不断变化的数据科学创新,让您的数据科学实践面向未来;以及从专门构建的人工智能基础设施(内部或云中)中实现价值最大化。”
要了解更多关于在企业中扩展人工智能的首要考虑因素,请查看 Domino 和 NVIDIA 委托的新 Ventana Research 白皮书。
金融服务和保险:推动未来的数据科学趋势
上周,多米诺庆祝数据科学创新者推动健康和生命科学的突破。本周,我们在数据科学创新者手册的金融服务和保险版中宣布了一批新的创新者, 现在可以免费下载 。像以前一样,金融服务和保险行业的每位顶级数据科学创新领导者都分享了他们对工作、职业和数据科学专业的见解。剧本包括七个简介,第一个是蒂芙尼·帕金斯-穆恩博士。
会见摩根大通公司的蒂芙尼·帕金斯-穆恩博士
Tiffany Perkins-Munn 博士是摩根大通公司的董事总经理兼营销数据和分析主管。她还是 ANA 教育基金会的董事会成员,是《CDO》杂志评选的 2021 年和 2022 年全球 100 大数据权力女性之一,也是 Data IQ 100 评选的 2022 年最具影响力的数据人物之一。
Perkins-Munn 博士的主要工作是开发金融模型和应用程序,以改善对金融产品和服务的访问和理解。“成本很少是关键驱动因素,”帕金斯-穆恩说。"情感通常是消费者选择中最重要的因素。"她敦促利益相关者将情感作为正在进行的研究的驱动力。“如果我今天对情绪决策的影响进行纵向研究,我认为它会比以往任何时候都高。”
Perkins-Munn 敦促职业生涯早期或中期的数据科学专业人员享受数据揭示几乎任何行业洞察力的能力。“理解数据和数据科学是少数可推断和可替代的技能之一。在许多领域,很难做出改变,但如果你理解数据,无论你是在医疗保健还是金融服务领域,技能都是一样的,并且可以转移和替代。”
对于珀金斯-穆恩来说,成功的一个关键方面是尽最大努力帮助非数据科学家理解数据对讲故事的意义。“众所周知,数据科学家无法消化他们所学到的东西,并将其融入一些小的金块和故事中,以解释为什么他们的工作对他们的业务和其他股东有如此大的影响。”实质上,“你必须能够讲述你的发现,”她说。
创新数据科学领导者的完整名单
下载我们的免费电子书 阅读 Perkins-Munn 和其他创新者、顾问和行业专家在金融服务和保险行业数据科学领域的所有见解。所有人都描述了他们的数据科学部门在团队规模和回答业务关键问题的中心地位方面的巨大增长。知名领袖的完整名单包括:
- 蒂芙尼帕金斯-穆恩博士——董事总经理,营销数据负责人&分析处 摩根大通&公司
- 莫希特贾恩博士——数据科学/机器学习主管 BNY 梅隆财富管理
- 格伦·霍夫曼博士——首席分析官 纽约人寿
- 【安珠古普塔】——西北互助数据科学与分析副总裁
- Meg Walters,——Allstate旗下卓越分析中心(CoE)
- Vincent Walden,注册会计师,CFE——2022 年度注册舞弊审查员,Kona AICEO
- 杰夫·乔纳斯——首席执行官、 森金 创始人兼首席科学家
电子书 还包含了两位行业合作者对这个项目的见解。首先是 NVIDIA 的 Mark J. Bennett ,计算机科学家、金融工程师、技术经理、教育家。Bennett 为我们提供了他在金融前沿技术(如量子计算)方面的丰富经验。加入他的还有 SCOR 首席数据科学官安托万·利和 凯特尔 首席运营官纳撒尼尔·曼宁,他们都提供了对保险行业创新的见解。
结论
我们希望这篇介绍能鼓励您 下载免费电子书 ,并享受我们的特色行业专家分享的其他见解。这些创新领导者的评论可以激发新的研究或想法,促进你自己的职业生涯。这些想法还可以帮助您组织的团队利用 MLOps *台扩展数据科学,并让您的项目顺利完成。我们邀请您阅读金融服务和保险版的 数据科学创新者行动手册 ,了解如何加速数据科学创新的价值。
炉边谈话:来自托普丹马克的斯蒂格·彼得森
原文:https://www.dominodatalab.com/blog/fireside-chat-stig-pedersen-from-topdanmark
“有了一两个非常成功的算法部署,企业就开始向你寻求帮助。这变成了一种相互交流,每个人都想要价值或储蓄。” —斯蒂格·彼得森
在这个新系列中,我们将与机器学习和数据科学领域的领导者交谈,了解他们是如何开始从事数据科学的,并围绕他们认为领导数据科学团队的关键成功因素提出一系列问题。
我们的第一次炉边谈话是与丹麦领先的保险解决方案提供商 Topdanmark 负责机器学习和数据科学的 Stig pede rsen 进行的。
谈话要点
Stig Pedersen 进入数据科学技术领域,最初是作为其他技术商业化业务部门的一部分工作。在最初致力于在内部部署机器人流程自动化模型之后,Stig 看到了机器学习和数据科学的价值潜力,并着手建立一个数据科学家团队,以构建算法和模型来帮助提高效率,并最终在保险公司内部创造价值。
他是如何在 Topdanmark 内部开始数据科学的。
我来自业务中“我们需要一些东西”的那一方,但我一直以技术为导向。我们从零开始建立这个团队,并与外部咨询公司合作开始
在商业和数据科学家之间培养良好的文化。
如果企业不信任你的数据科学家和他们的算法,你就失去了全部意义。
我们实际做的很简单,但是很管用。我们寻求与业务部门就我们想要做的事情达成一致,然后我们开始开发一种算法,并大致了解我们可以将它推进到什么程度,但我们直到他们接受这一点,并将我们与部门中最重要的主题专家之一联系起来,才开始构建。
创造一个可持续的有趣问题解决渠道。
这是所有先进技术的关键问题。你可以说它以这样或那样的方式取代人类,或者支持他们做决定。
我不认为你能提前三年规划一个管道,但是一旦你证明了你能在特定领域创造价值;例如索赔区,那么经理们会要求你帮助他们解决更多的问题。
你不能总是预测分析需要多长时间,但是展示可以产生的潜在价值是如此巨大,以至于值得投资;每当我们觉得我们的渠道可能开始枯竭,我们就会有新的项目出现,它们的价值与以前的项目相同甚至更高
解决基础设施问题如何让他的团队专注于解决业务问题。
如果没有合适的基础设施,你就会迷失方向。我们真的需要一个机器学习*台。你需要代码运行的版本,谁部署了什么,以及选择他们想要使用什么开源工具的自由
有了多米诺数据实验室 ,他们可以自由地做他们需要做的事情,他们从来不会对技术有任何疑问——因为他们只是继续做下去。比如音乐家弹钢琴,或者拿起小提琴
关于 top land
Topdanmark 是丹麦领先的非寿险和寿险产品提供商之一。
他们在机器人流程自动化和机器学习技术方面进行了大量投资,以提高效率并在组织内部制定更好的决策。
在 Python 中拟合高斯过程模型
原文:https://www.dominodatalab.com/blog/fitting-gaussian-process-models-python
一个常见的应用统计学任务包括建立回归模型来描述变量之间的非线性关系。通过采用特定的非线性函数形式,如正弦函数、指数函数或多项式函数来描述一个变量对另一个变量的变化的响应,来拟合这种模型是可能的。然而,除非这种关系从一开始就很明显,否则它可能涉及大量的模型选择程序,以确保保留最合适的模型。或者,可以通过定义变量空间上的一组结来采用非参数方法,并使用样条或核回归来描述任意非线性关系。然而,结布局程序有些特别,也可能涉及变量选择。第三种选择是采用贝叶斯非参数策略,直接对未知的基础函数建模。为此,我们可以采用高斯过程模型。
将贝叶斯过程描述为“非参数的”有点用词不当。建立贝叶斯模型的第一步是为手头的问题指定一个全概率模型,为每个模型变量分配概率密度。因此,在不使用概率函数的情况下,很难指定一个完整的概率模型,因为概率函数是参数化的!事实上,贝叶斯非参数方法并不意味着没有参数,而是参数的数量随着数据集的大小而增长。相反,贝叶斯非参数模型是无限参数化的。
用高斯模型构建模型
如果我们选择使用高斯分布来模拟我们的数据会怎么样?
p(x,y)= \ mathcal { n } \ left(\ left[{
\ begin { array } { c }
{ \ mu _ x } \
{ \ mu _ y } \
\ end { array }
} \ right],\ left[{
\ begin { array } { cc }
{ \ sigma _ x }&{ \ sigma _ { xy } } \
{\sigma_{xy}^t}&{ \ sigma _ y }
\ end
此外,多元正态分布的元素子集的条件分布(取决于剩余元素)也是正态的:
$ \( p(x | y)= \ mathcal { n }(\ mu _ x+\sigma_{xy}\sigma_y^{-1}(y-\mu_y), \sigma_x-\sigma{xy}\sigma_y^{-1}\sigma{xy}^t) \) $
高斯过程将多元常态推广到无限维度。它被定义为随机变量的无限集合,任何边缘子集都具有高斯分布。因此,边缘化属性在其定义中是明确的。另一种思考无限向量的方式是作为一个 T2 函数 T3。当我们编写一个将连续值作为输入的函数时,我们实际上是在暗示一个无限的向量,它只在函数被调用时返回值(由输入索引)。同样,无限维高斯表示为函数的概念允许我们通过计算来处理它们:我们从来不需要存储高斯过程的所有元素,只需要在需要时计算它们。
因此,我们可以将高斯过程描述为函数上的分布。正如多元正态分布完全由均值向量和协方差矩阵指定一样,GP 完全由均值函数和协方差函数指定:
正是这种边缘化特性使得使用高斯过程变得可行:我们可以边缘化我们不感兴趣或没有观察到的无限多的变量。
例如,GP 的一个规格可能是:
这里,协方差函数是一个的*方指数,对于它,靠*的[latex]x[/latex]和[latex]x^{\prime}[/latex]的值导致[latex]k[/latex]的值更接*于 1,而远离的值返回更接*于 0 的值。简单地采用零函数来表示高斯过程的均值函数似乎有些奇怪——当然我们可以做得更好!事实证明,GP 中的大部分学习涉及协方差函数及其超参数,因此在指定复杂的均值函数时获得的收益很少。
对于有限数量的点,GP 成为多元正态,均值和协方差分别作为在这些点上评估的均值函数和协方差函数。
从高斯过程中取样
为了使“函数分布”的概念更加具体,让我们快速演示如何从高斯过程中获得实现,这导致对一组点上的函数的评估。我们在这里要做的是来自之前高斯过程的样本,所以在引入任何数据之前。我们首先需要的是我们的协方差函数,它将是指数的*方,以及一个在给定点评估协方差的函数(产生一个协方差矩阵)。
import numpy as np
def exponential_cov(x, y, params):
return params[0] * np.exp( -0.5 * params[1] * np.subtract.outer(x, y)**2)
我们将利用多元高斯分布的可爱的条件属性,逐点依次生成实现。这是有条件的:
$ \( p(x | y)= \ mathcal { n }(\ mu _ x+\sigma_{xy}\sigma_y^{-1}(y-\mu_y), \sigma_x-\sigma{xy}\sigma_y^{-1}\sigma{xy}^t) \) $
这是实现它的函数:
def conditional(x_new, x, y, params):
B = exponential_cov(x_new, x, params)
C = exponential_cov(x, x, params)
A = exponential_cov(x_new, x_new, params)
mu = np.linalg.inv(C).dot(B.T).T.dot(y)
sigma = A - B.dot(np.linalg.inv(C).dot(B.T))
return(mu.squeeze(), sigma.squeeze())
我们将从超参数σ_0=1,σ_1=10 的高斯过程开始。我们还将假设一个零函数作为*均值,因此我们可以绘制一个代表*均值的一个标准差的波段。
import matplotlib.pylab as plt
θ = [1, 10]
σ_0 = exponential_cov(0, 0, θ)
xpts = np.arange(-3, 3, step=0.01)
plt.errorbar(xpts, np.zeros(len(xpts)), yerr=σ_0, capsize=0)
让我们选择一个任意的采样起点,比如 x=1。由于没有先前的点,我们可以从一个无条件的高斯样本:
x = [1.]
y = [np.random.normal(scale=σ_0)]
print(y)
[0.4967141530112327]
我们现在可以更新我们的置信带,给定我们刚刚采样的点,使用协方差函数生成新的逐点区间,条件是值[x_0,y_0]。
σ_1 = exponential_cov(x, x, θ)
def predict(x, data, kernel, params, sigma, t):
k = [kernel(x, y, params) for y in data]
Sinv = np.linalg.inv(sigma)
y_pred = np.dot(k, Sinv).dot(t)
sigma_new = kernel(x, x, params) - np.dot(k, Sinv).dot(k)
return y_pred, sigma_new
x_pred = np.linspace(-3, 3, 1000)
predictions = [predict(i, x, exponential_cov, θ, σ_1, y) for i in x_pred]
y_pred, sigmas = np.transpose(predictions)
plt.errorbar(x_pred, y_pred, yerr=sigmas, capsize=0)
plt.plot(x, y, "ro")
因此,根据这一点,以及我们指定的协方差结构,我们基本上限制了附加点的可能位置。现在让我们来看另一个例子:
m, s = conditional([-0.7], x, y, θ)
y2 = np.random.normal(m, s)
print(y2)
-0.1382640378102619
这个点被添加到实现中,并且可以用于进一步更新下一个点的位置。
x.append(-0.7)
y.append(y2)
σ_2 = exponential_cov(x, x, θ)
predictions = [predict(i, x, exponential_cov, θ, σ_2, y) for i in x_pred]
y_pred, sigmas = np.transpose(predictions)
plt.errorbar(x_pred, y_pred, yerr=sigmas, capsize=0)
plt.plot(x, y, "ro")
当然,顺序采样只是演示协方差结构如何工作的一种启发式方法。我们可以很容易地一次采样几个点:
x_more = [-2.1, -1.5, 0.3, 1.8, 2.5]
mu, s = conditional(x_more, x, y, θ)
y_more = np.random.multivariate_normal(mu, s)
print(y_more)
array([-1.5128756 , 0.52371713, -0.13952425, -0.93665367, -1.29343995])
x += x_more
y += y_more.tolist()
σ_new = exponential_cov(x, x, θ)
predictions = [predict(i, x, exponential_cov, θ, σ_new, y) for i in x_pred]
y_pred, sigmas = np.transpose(predictions)
plt.errorbar(x_pred, y_pred, yerr=sigmas, capsize=0)
plt.plot(x, y, "ro")
因此,随着点的密度变高,它导致了来自先前 GP 的实现(样本函数)。
在 Python 中拟合高斯过程
尽管完全有可能扩展上面的代码来引入数据并手动拟合高斯过程,但是有许多库可用于以更自动化的方式指定和拟合 GP 模型。我将演示和比较三个包含专门为 GP 建模定制的类和函数的包:
特别是,这些软件包中的每一个都包括一组协方差函数,可以灵活地组合以充分描述数据中的非线性模式,以及拟合 GP 参数的方法。
我们将使用一些模拟数据作为测试用例来比较每个包的性能。实际上,我不记得我是在哪里找到这些数据的,所以我不知道这些数据是如何产生的。然而,它清楚地显示了某种类型的非线性过程,受到一定量的观察或测量误差的破坏,因此它应该是高斯过程方法的合理任务。
scikit-learn
scikit-learn
是 Python 的绝世机器学习库。它提供了一套全面的监督和非监督学习算法,在一致、简单的 API 下实施,使您的整个建模管道(从数据准备到输出汇总)尽可能无摩擦。它的工具库中包括一个 Gaussian 流程模块,该模块最*经历了一次完整的修订(从版本 0.18 开始)。
与scikit-learn
中其他机器学习方法的实现一致,使用 GPs 的适当接口取决于它所应用的任务类型。对于回归任务,我们预测一个连续的响应变量,通过指定一个适当的协方差函数应用一个GaussianProcessRegressor
,或核。拟合通过最大化边际似然的对数进行,这是一种高斯过程的便利方法,避免了通常用于选择模型最佳超参数的计算密集型交叉验证策略。GaussianProcessRegressor
不考虑均值函数的规格,总是假设它是零函数,强调了均值函数在计算后验概率中的作用减弱。
对于输出变量为二进制或分类的分类任务,使用GaussianProcessClassifier
。使用正态分布来拟合分类数据,这似乎是不协调的,但通过使用潜在的高斯响应变量,然后将其转换为单位区间(或者更一般地,对于两个以上的结果类,一个单纯形),可以适应这种情况。其结果是一种软的概率分类,而不是机器学习算法中常见的硬分类。与回归设置类似,用户选择适当的核来描述数据集中预期的协方差类型。因为这个 GP 的后验概率是非正态的,所以使用拉普拉斯*似来获得解,而不是最大化边际可能性。
from sklearn import gaussian_process
from sklearn.gaussian_process.kernels import Matern, WhiteKernel, ConstantKernel
scikit-learn
提供了一个大约十几个协方差函数的库,他们称之为核,以供选择。一个灵活的选择是从 Matèrn 协方差开始。
$ \(
k _ { m }(x)= \frac{\sigma^2}{\Gamma(\nu)2^{\nu-1}} \左(\ frac { \ sqrt { 2 \ nu } x}{l}\right)^{\nu} k _ { \ nu } \左(\ frac { \ sqrt { 2 \ nu } x } { l } \右)
\)
其中\(\Gamma\)是 gamma 函数,\(K\)是修正的贝塞尔函数。从该函数采样的协方差矩阵的形式由三个参数控制,每个参数控制协方差的一个属性。
- 振幅 (\(\sigma\))控制输出沿 y 轴的缩放。该参数只是一个标量乘数,因此通常不包含在 Matèrn 函数的实现中(即设置为 1)
- lengthscale (\(l\))通过缩放 x 轴上的实现来补充振幅。较大的值会将点沿此轴推得更*。
- 粗糙度 (\(\nu\))控制协方差函数中脊的锐度,最终影响实现的粗糙度(*滑度)。
虽然一般来说,所有参数都是非负实值的,但是当整数值\(p\)的\(\nu = p + 1/2\)时,该函数可以部分地表示为\(p\)阶的多项式函数,并且生成\(p\)次可微的实现,因此{3/2,5/2}\(中的值\) \ nu \是最常见的。
GP 核可以简单地通过使用 sum 运算符指定为scikit-learn
中的加性分量之和,因此我们可以包括 Matèrn 分量(Matern
)、振幅因子(ConstantKernel
)以及观察噪声(WhiteKernel
):
kernel = ConstantKernel() + Matern(length_scale=2, nu=3/2) + WhiteKernel(noise_level=1)
如前所述,scikit-learn
API 在不同的学习方法中非常一致,因此,所有函数都期望一组表格形式的输入变量,要么是二维数字array
要么是熊猫DataFrame
。由于这里只有一个输入变量,我们可以使用reshape
方法添加第二个维度:
X = x.reshape(-1, 1)
print(X.shape)
(101, 1)
最后,我们用自定义内核实例化一个GaussianProcessRegressor
对象,并调用它的fit
方法,传递输入(X
)和输出(y
)数组。
gp = gaussian_process.GaussianProcessRegressor(kernel=kernel)
gp.fit(X, y)
GaussianProcessRegressor(alpha=1e-10, copy_X_train=True,
kernel=1**2 + Matern(length_scale=2, nu=1.5) + WhiteKernel(noise_level=1),
n_restarts_optimizer=0, normalize_y=False,
optimizer='fmin_l_bfgs_b', random_state=None)
为了方便起见,scikit-learn
在每次实例化拟合算法的一个类时,显示用于拟合算法的配置。这很有用,因为它显示了隐藏的设置,如果用户没有指定,这些设置将被赋予默认值;这些设置通常会强烈影响最终的输出,所以我们理解fit
代表我们假设了什么是很重要的。在这里,例如,我们看到 L-BFGS-B 算法已经被用于优化超参数(optimizer='fmin_l_bfgs_b'
),并且输出变量还没有被标准化(normalize_y=False
)。当在边际可能性中存在找到局部最大值而不是全局最大值的危险时,可以为n_restarts_optimizer
指定一个非零值,它将使用随机选择的起始坐标运行优化算法指定的次数,希望可以发现一个具有全局竞争力的值。
fit
方法赋予返回的模型对象与拟合过程相关的属性;这些属性的名称后面都有一个下划线(_
)。例如,kernel_
属性将返回用于参数化 GP 的内核,以及它们相应的最佳超参数值:
gp.kernel_
0.00316**2 + Matern(length_scale=1.11, nu=1.5) + WhiteKernel(noise_level=0.0912)
除了fit
方法,每个监督学习类都保留一个predict
方法,该方法在给定一组新的预测器(\(X^{\ast}\))的情况下生成预测结果(\(y^{\ast}\) ),这些预测器不同于用于拟合模型的预测器。对于高斯过程,这是通过后验预测分布来实现的,后验预测分布是高斯过程,其均值和协方差函数在拟合后更新为后验形式。
其中后验均值和协方差函数计算如下:
$ $
m{\ast}(x)= k(x{\ast},x)t[k(x,x)+\sigma2i]y $ $
$ $ k{\ast}(x)= k(x{\ast},x)+\sigma2-k(x,x)t[k(x,x)+\sigma2i]{-1}k(x,x)
$ $
x_pred = np.linspace(-6, 6).reshape(-1,1)
y_pred, sigma = gp.predict(x_pred, return_std=True)
注意,我们可以计算任意输入\(X^*\).的预测为了在一系列可能的输入上获得后验形式的感觉,我们可以像上面所做的那样传递一个线性空间给它。predict
可选地返回后验标准差和期望值,因此我们可以使用它来绘制期望函数周围的置信区域。
GPflow
谢菲尔德机器学习小组的 GPy 是早期的项目之一,它提供了一个独立的包来拟合 Python 中的高斯过程。与scikit-learn
的gaussian_process
模块非常相似,GPy 提供了一组用于指定和拟合高斯过程的类,拥有一个大型内核库,可以根据需要进行组合。GPflow 是 GPy 库的重新实现,使用谷歌广受欢迎的 TensorFlow 库作为其计算后端。对于大多数用户来说,这种变化的主要优势在于,它允许使用更现代的方法来拟合更大的 GP 模型,即变分推断和马尔可夫链蒙特卡罗。
让我们通过拟合模拟数据集来演示 GPflow 的使用。API 比scikit-learns
更通用,因为它期望预测器(特征)和结果的表格输入。因此,我们必须将y
重塑为表格格式:
Y = y.reshape(-1,1)
为了反映我们的scikit-learn
模型,我们将再次指定 Matèrn 协方差函数。GPflow 有两个面向用户的子类,一个将粗糙度参数固定为 3/2 ( Matern32
),另一个固定为 5/2 ( Matern52
)。振幅是一个包含的参数(variance
,所以我们不需要包含一个单独的常数内核。
import GPflow
k = GPflow.kernels.Matern32(1, variance=1, lengthscales=1.2)
有六种不同的 GP 类,根据协方差结构(完全与稀疏*似)和模型的似然性(高斯与非高斯)进行选择。GPflow 的主要创新在于,非共轭模型(即具有非正态可能性的模型)可以使用马尔可夫链蒙特卡罗或通过变分推理的*似来拟合。
由于我们的模型涉及一个简单的共轭高斯似然,我们可以使用GPR
(高斯过程回归)类。
m = GPflow.gpr.GPR(X, Y, kern=k)
我们可以简单地通过打印回归模型对象来访问参数值。
print(m)
model.likelihood.[1mvariance[0m transform:+ve prior:None
[ 1.]
model.kern.[1mvariance[0m transform:+ve prior:None
[ 1.]
model.kern.[1mlengthscales[0m transform:+ve prior:None
[ 1.2]
请注意,除了 Matèrn 核的超参数之外,还有一个与正态似然相关的方差参数。我们可以通过直接赋值将其设置为非默认值。
m.likelihood.variance = 0.01
该模型使用optimize
方法拟合,该方法对模型似然性运行梯度上升算法(它使用 SciPy 的minimize
函数作为默认优化器)。
m.optimize()
fun: 54.247759719230544
hess_inv:
jac: array([ 3.09872076e-06, -2.77533999e-06, 2.90014453e-06])
message: b'CONVERGENCE: NORM_OF_PROJECTED_GRADIENT_<=_PGTOL'
nfev: 16
nit: 15
status: 0
success: True
x: array([-2.3496958, 0.3208171, 0.6063578])
print(m)
名字 | 价值观念 | 在先的;在前的 | 限制 |
---|---|---|---|
模型.可能性.方差 | [ 0.09111893] | 没有人 | +ve |
模型.内核.方差 | [ 0.86636739] | 没有人 | +ve |
型号.内核.长度刻度 | [ 1.04159852] | 没有人 | +ve |
模型对象包含一个predict_y
属性,我们可以用它来获得任意输入值网格上的期望值和方差。
你可能已经注意到,我们在这里所做的没有什么特别的贝叶斯理论。没有指定先验,我们只是执行了最大似然法来获得解决方案。然而,priors 可以被分配为变量属性,适当地使用 GPflow 的一组分布类中的任何一个。
m.kern.variance.prior = GPflow.priors.Gamma(1,0.1)
m.kern.lengthscales.prior = GPflow.priors.Gamma(1,0.1)
除了指定超参数的先验,如果我们有信息证明这样做是正确的,我们也可以固定值。例如,我们可能知道数据采集仪器的测量误差,因此我们可以将该误差值指定为常数。
m.likelihood.variance = 0.1
m.likelihood.variance.fixed = True
m.optimize()
fun: 63.930638821012721
hess_inv:
jac: array([ -3.35442341e-06, 8.13286081e-07])
message: b'CONVERGENCE: NORM_OF_PROJECTED_GRADIENT_<=_PGTOL'
nfev: 8
nit: 6
status: 0
success: True
x: array([-0.75649791, -0.16326004])
虽然我们可能对自己有一个合适的贝叶斯模型感到满意,但最终结果是一样的。我们所做的只是将先验的对数概率添加到模型中,并再次进行优化。这一次,结果是最大后验 (MAP)估计。
print(m)
model.likelihood.[1mvariance[0m transform:+ve prior:None [FIXED]
[ 0.1]
model.kern.[1mvariance[0m transform:+ve prior:Ga([ 1.],[ 0.1])
[ 0.38479193]
model.kern.[1mlengthscales[0m transform:+ve prior:Ga([ 1.],[ 0.1])
[ 0.6148462]
为了执行“完全贝叶斯”分析,我们可以使用更通用的GPMC
类,它对参数和函数进行联合采样。为此,我们需要指定核参数的似然性和先验性。我们稍微改变一下模型,用一个学生的 T 似然,对极值的影响会更稳健。
l = GPflow.likelihoods.StudentT()
m = GPflow.gpmc.GPMC(X, Y, kern=k, likelihood=l)
m.kern.variance.prior = GPflow.priors.Gamma(1,1)
m.kern.lengthscales.prior = GPflow.priors.Gamma(1,1)
我们使用sample
方法来拟合GPMC
模型,而不是optimize
。这将采用哈密尔顿蒙特卡罗 (HMC),一种有效形式的马尔可夫链蒙特卡罗,利用梯度信息来改善后验采样。TensorFlow 库提供自动微分功能,允许为任意模型计算梯度。HMC 算法需要确定超参数值的规范,这些值决定了采样过程的行为;这些参数是可以调整的。
trace = m.sample(1000, verbose=True, epsilon=0.03, Lmax=15)
Iteration: 100 Acc Rate: 94.0 %
Iteration: 200 Acc Rate: 88.0 %
Iteration: 300 Acc Rate: 96.0 %
Iteration: 400 Acc Rate: 93.0 %
Iteration: 500 Acc Rate: 97.0 %
Iteration: 600 Acc Rate: 94.0 %
Iteration: 700 Acc Rate: 96.0 %
Iteration: 800 Acc Rate: 92.0 %
Iteration: 900 Acc Rate: 96.0 %
Iteration: 1000 Acc Rate: 91.0 %
我们最终得到一个包含来自核参数的采样值的轨迹,在得到数据信息后,可以绘制该轨迹来了解其值的后验不确定性。
parameter_samples = m.get_samples_df(trace)
for col in parameter _ samples . columns . sort _ values()[1:]:
parameter _ samples[col]。hist(label=col.split(' . '))[-1],alpha=0.4,bin = 15)
[/code]
然后,我们可以回过头来从后验 GP 生成预测,并绘制其中的几个来了解预测的基本函数。
realizations = []
for sample in trace[-100:]:
m.set_state(sample)
realizations.append(m.predict_f_samples(xx, 1).squeeze())
realizations = np.vstack(realizations)
因此,使用 GPflow 代替scikit-learn
可能有利于具有异常似然函数的模型或难以使用梯度上升优化方法拟合的模型的用户。此外,如果关于 GP 超参数的推断是令人感兴趣的,或者如果存在将有助于获得更精确估计的先验信息,则诸如由 GPflow 的模型类提供的完全贝叶斯方法是必要的。
PyMC3
PyMC 项目是一个用于概率编程的非常通用的 Python 包,几乎可以用于任何贝叶斯模型(披露:自从 PyMC 创建以来,我一直是它的开发者)。与 GPflow 类似,当前版本(PyMC3)从早期版本重新设计,以依赖现代计算后端。PyMC3 不是 TensorFlow,而是构建在 Theano 之上,Theano 是一个用于计算根据张量运算定义的表达式的引擎。至少从表面上看,它的工作方式与 TensorFlow 非常相似,提供了自动微分、并行计算和高效编译代码的动态生成。
import pymc3 as pm
import theano.tensor as tt
PyMC3 是一个贝叶斯建模工具包,提供均值函数、协方差函数和概率分布,可以根据需要组合起来构建高斯过程模型。通过声明变量和变量的函数来指定模型,以指定完全贝叶斯模型。声明是在一个Model
上下文中进行的,该上下文自动将它们添加到模型中,为拟合做准备。让我们首先实例化一个模型,并添加一个 Matèrn 协方差函数及其超参数:
with pm.Model() as gp_fit:
ρ = pm.Gamma('ρ', 1, 1)
η = pm.Gamma('η', 1, 1)
K = η * pm.gp.cov.Matern32(1, ρ)
我们可以通过指定均值函数(这在这里是多余的,因为在未指定时假设零函数)和观测噪声变量来继续构建我们的模型,我们将给出半柯西先验:
with gp_fit:
M = pm.gp.mean.Zero()
σ = pm.HalfCauchy('σ', 2.5)
高斯过程模型封装在GP
类中,由上面指定的均值函数、协方差函数和观测误差参数化。由于 GP 的结果已经被观察到,我们将该数据作为字典提供给observed
参数中的GP
的实例。这些被提供给潜在的多元正态似然。
with gp_fit:
y_obs = pm.gp.GP('y_obs', mean_func=M, cov_func=K, sigma=σ, observed={'X':X, 'Y':y})
在Model
上下文中调用的sample
函数符合使用 MCMC 采样的模型。默认情况下,PyMC3 使用 HMC 的自动调整版本,称为无掉头采样器 (NUTS),它为路径长度和步长参数选取适当的值,我们在 GPflow 的sample
调用中看到了这些值。此外,为了将采样器初始化为合理的起始参数值,在 NUTS 之前运行变分推理算法,以产生所有参数的*似后验*均值。
with gp_fit:
trace = pm.sample(2000, n_init=20000)
Auto-assigning NUTS sampler...
Initializing NUTS using advi...
Average ELBO = -61.619: 100%|██████████| 20000/20000 [00:53<00:00, 376.01it/s]
Finished [100%]: Average ELBO = -61.55
100%|██████████| 2000/2000 [00:54<00:00, 36.69it/s]
pm.traceplot(trace[-1000:], varnames=['ρ', 'σ', 'η']);
除了拟合模型,我们还希望能够生成预测。这意味着从后验预测分布中取样,如果你还记得的话,这只是一些线性代数:
\ begin { aligned }
m{\ast}(x)&= k(x{\ast},x)t[k(x,x)+\sigma2i]y \
k{\ast}(x)&= k(x{\ast},x)+\sigma2-k(x,x)t[k(x,x)+\sigma2i]{-1}k(x,x)
\ end { aligned }
PyMC3 允许在模型拟合后进行预测采样,使用模型参数的记录值来生成样本。sample_gp
函数实现上面的预测 GP,用样本轨迹、GP 变量和生成实现的网格点调用:
Z = np.linspace(-6, 6, 100).reshape(-1, 1)
with gp_fit:
gp_samples = pm.gp.sample_gp(trace[1000:], y_obs, Z, samples=50)
100%|██████████| 50/50 [00:06<00:00, 7.91it/s]
对于适合非常大的数据集的模型,人们经常发现 MCMC 拟合非常慢,因为需要在采样算法的每次迭代中评估模型的对数概率。在这些情况下,使用变分推断方法可能是值得的,这种方法用更简单的*似值代替真实的后验概率,并使用优化将*似值参数化,使其尽可能接*目标分布。因此,后验概率只是一个*似值,有时是一个不可接受的粗略值,但对于许多问题来说是一个可行的替代方案。更新的变分推理算法正在出现,它们提高了*似的质量,这些算法最终会进入软件。同时,变分高斯*似和自动微分变分推理现在分别在 GPflow 和 PyMC3 中可用。
结论
Python 用户非常幸运,拥有如此多的选项来构建和拟合非参数回归和分类模型。我展示了使用scikit-learn
将 GP 模型拟合到连续值数据的简单性,以及如何使用 GPflow 或 PyMC3 将这种模型扩展到更一般的形式和更复杂的拟合算法。鉴于在如此多的环境中变量之间普遍存在非线性关系,高斯过程应该出现在任何应用统计学家的工具包中。我经常发现自己,而不是建立独立的 GP 模型,将它们作为一个更大的层次模型中的组件,以充分考虑非线性混杂变量,如生物统计学应用中的年龄效应,或强化学习任务中的函数逼*。
这篇文章远不是对 Python 中拟合高斯过程的软件工具的全面调查。我选择这三个库是因为我自己对它们很熟悉,并且因为它们在自动化和灵活性之间的权衡中占据不同的位置。你可以使用 GPy、 Stan 、 Edward 和 George 来轻松实现这样的模型,这里仅举几个比较流行的包。我鼓励您尝试其中的几种,以了解哪一种最适合您的数据科学工作流程。
基于二次规划的支持向量机拟合
原文:https://www.dominodatalab.com/blog/fitting-support-vector-machines-quadratic-programming
在这篇博文中,我们深入探讨了支持向量机的内部原理。我们导出了一个线性 SVM 分类器,解释了它的优点,并展示了通过 cvx opt(Python 的凸优化包)求解时的拟合过程。
支持向量机(SVM)是一种监督学习模型,在文本分类(Joachims,1998)、图像识别(Decoste 和 schlkopf,2002)、图像分割(Barghout,2015)、异常检测(schlkopf 等人,1999)等领域有着广泛的应用。
Figure 1 - There are infinitely many lines separating the two classes, but a good generalisation is achieved by the one that has the largest distance to the nearest data point of any class.
图 1 显示了 Fisher 虹膜数据集的样本(Fisher,1936)。该示例包含两个类的所有数据点,即鸢尾 (-1)和鸢尾 (+1),并且只使用了四个原始特征中的两个,即花瓣长度和花瓣宽度。这种选择产生了一个明显可线性分离的数据集,并且很容易确认存在无限多的超*面来分离这两个类。然而,选择最佳决策边界并不是一个简单的过程。红色和蓝色虚线将两个类别完全分开。然而,红线距离两个集群太*,这样的决策边界不太可能很好地概括。如果我们添加一个新的“看不见的”观察值(红点),该观察值显然在类+1 的邻域内,则使用红色虚线的分类器会将其错误分类,因为该观察值位于决策边界的负侧。然而,使用蓝色虚线的分类器将没有问题地将新的观察值分配给正确的类。这里的直觉是,在类别之间留有更大间隔的决策边界更具普遍性,这将我们引向支持向量机的关键属性——它们以这样的方式构建超*面,使得两个类别之间的分离间隔最大化(Haykin,2009)。这与感知器形成鲜明对比,在感知器中,我们无法保证感知器将找到哪个分离超*面。
线性 SVM 的推导
我们来看一个二元分类数据集(\ mathcal { d } = \ { \ bold symbol { x } _ I,y_i}_{i=1}^N),其中(\ bold symbol { x _ I } \在\mathbb{R}^2)和(y \in {-1,+1})。注意,我们发展了在二维欧几里得空间中拟合线性 SVM 的过程。这样做是为了简洁,因为推广到更高的维度是微不足道的。
现在,我们可以从分离超*面的一个方程开始,把这个问题正式化:
$ $ \ begin { eq:SVM-hyperplane }
\ mathcal { h } _ { \ bold symbol { w },b } = {\boldsymbol{x}:\boldsymbol{w}^t \ bold symbol { x }+b = 0 } \;;;\text{(1)}
\end{equation}$$
其中(\boldsymbol{x})是输入向量,(\boldsymbol{w})是可调权重向量,(b)是偏差项。我们可以进一步定义以下可用于分配类别标签的决策规则:
$ $ \ begin { equation }
\ begin { aligned }
\boldsymbol{w}^t \ bold symbol { x }&+b \ geq 0 \ text {,for } y _ I =+1 \;;;\ text {(2)} \
\boldsymbol{w}^t \ bold symbol { x }&+b<0 \ text {,for } y _ I =-1
\ end { aligned }
\ end { equation } $ $
我们现在引入边缘的概念——从分离超*面观察的距离。在我们的情况下,从任意数据点到最佳超*面的距离由下式给出
$ $ \ begin { equation }
\ bold symbol { x } _ { I _ p } = \ bold symbol { x } _ I-\ gamma _ I(\ bold symbol { w }/\ | \ bold symbol { w } \ |)
\ end { equation } $ $
其中(\boldsymbol{x}{i_p})是(\boldsymbol{x}_i)到(\mathcal{H})的法线投影,而(\gamma_i)是边缘的代数度量(参见杜达和哈特,1973)。这里的关键思想是连接(\boldsymbol{x}_i)和(\boldsymbol{x}{i_p})的线段*行于(\boldsymbol{w}),并且可以表示为标量(\gamma_i)乘以单位长度矢量(\ bold symbol { w }/\ | \ bold symbol { w } \ | ),指向与(\boldsymbol{w})相同的方向。
因为(\boldsymbol{x}_{i_p})位于(\mathcal{H})上,所以它满足(1)
$ $ \ begin { align } \boldsymbol{w}^t \ bold symbol { x } _ { I _ p }+b = 0 \
\boldsymbol{w}^t(\ bold symbol { x } _ I-\ gamma _ I(\ bold symbol { w }/\ | \ bold symbol { w } \ |)+b = 0 \ end { align } $ $
求解(\γ_ I )得到
$ $ \ begin { align }
\ gamma _ I =(\boldsymbol{w}^t \ bold symbol { x } _ I+b)/\ | \ bold symbol { w } \ | \;;;\text{(3)}
\end{align}$$
我们对(3)应用进一步的修正,以使该度量也能够处理超*面负侧上的数据点:
$ $ \ begin { align } \ label { eq:SVM-margin-final }
\ gamma _ I = y _ I[(\boldsymbol{w}^t \ bold symbol { x } _ I+b)/\ | \ bold symbol { w } \ |]\;;;\text{(4)}
\end{align}$$
这个新的定义对正例和负例都有效,产生的(\gamma)值总是非负的。这很容易看出,因为忽略了(\boldsymbol{w})的范数并参考了我们得到的判定规则(2)
$ $ \ begin { equation }
\ begin { aligned }
y _ I =+1 \;;;&\ gamma _ I =(+1)(\boldsymbol{w}^t \ bold symbol { x } _ I+b \ geq 0)\ \
y _ I =-1 \;;;&\ gamma _ I =(-1)(\boldsymbol{w}^t \ bold symbol { x } _ I+b<0)\ end { aligned }
\ end { equation } $ $
这使得在两种情况下(\gamma_i > 0)。最后,我们将整个数据集的裕度定义为
$ $ \ begin { equation }
\ gamma = \ min _ { I = 1,\dots,N} \gamma_i
\end{equation}$$
我们现在把注意力转向寻找最佳超*面的问题。直观上,我们希望为(\boldsymbol{w})和(b)找到这样的值,使得生成的超*面最大化正样本和负样本之间的分离裕度。如果我们试图直接最大化(\gamma),我们可能会得到一个远离阴性和阳性样本的超*面,但不会将两者分开。因此,我们引入以下约束:
$ $ \ begin { eq:SVM-constraints } \ begin { aligned } \boldsymbol{w}^t \ bold symbol { x }+b \ geq 1 \ text {,for } y _ I =+1 \ \ \boldsymbol{w}^t \ bold symbol { x }+b \ leq-1 \ text {,for } y _ I =-1 \ end { aligned } \ end { equation } $ $
满足上述带有等号的约束条件的特定数据点称为支持向量 -这些数据点位于红色虚线上(图 2),并且最接*最佳超*面。请注意,如果(2)成立,我们总是可以以约束也成立的方式重新调整(\boldsymbol{w})和(b)。换句话说,重新缩放(\boldsymbol{w})和(b)不会影响(\mathcal{H})。
Figure 2 - Two linearly separable classes and an optimal separating hyperplane. The distance between an arbitrary point and the hyperplane is obtained using the normal projection of the point onto the hyperplane. There are also two support vectors present --- one on the positive and one on the negative side of the hyperplane.
如果我们现在关注一个支持向量({\boldsymbol{x}_s,y_s}),那么将约束的结果代入等式(4)会发现支持向量和(\mathcal{H})之间的最佳距离为
$ $ \ begin { equation }
\ gamma _ s = y _ s[(\boldsymbol{w}^t \ bold symbol { x } _ s+b)/\ | \ bold symbol { w } \ |]=(\ pm 1)[\ pm 1/\ | \ bold symbol { w } \ |]= 1/\ | \ bold symbol { w } \ |
\ end { equation } $ $
因此,这两个类之间的最佳间隔是
$ $ \ begin { equation }
2 \ gamma _ s = 2/\ | \ bold symbol { w } \ |
\ end { equation } $ $
然而,最大化(1 / |\boldsymbol{w}|)相当于最小化(|\boldsymbol{w}|)。因此,在约束条件下最大化利润相当于
$ $ \ begin { equation }
\ begin { aligned }
\ min _ { \ bold symbol { w },b } \ quad&\ | \ bold symbol { w } \ | \;;;\ text {(5)} \
\ textrm {这样} \ quad&y _ I(\boldsymbol{w}^t \ bold symbol { x } _ I+b)\ geq 1 \ text {,for } \forall {\boldsymbol{x}_i,y _ I \ } \ in \ mathcal { d }
\ end { aligned }
\ end { equation } $
现在的问题是:我们如何解决这个优化问题?
用二次规划学习线性 SVM
二次规划(QP)是一种优化受某些线性约束的二次目标函数的技术。有大量的 QP 求解器可用,例如 GNU Octave 的 qp,MATLAB 的优化工具箱,Python 的 CVXOPT 框架等等。,它们都可以在 Domino 数据科学*台中获得。对于本教程,我们将使用 CVXOPT。为了使用凸优化,我们首先需要构造约束优化问题的拉格朗日函数(5)我们将拉格朗日乘数(\boldsymbol{\alpha})分配给约束,并构造以下函数
$ \ begin { equation } \ begin { aligned } \ t1]j(\ \ boldssymbol { w }、b,\ boldssymbol { alpha })&=-\ alpha _ I[y _ I](符号{ x } _ I+b)-1]
&=(1/2)--\;\;(6)
\ end { align }
\ end { equation } $。
我们现在寻找(J(\boldsymbol{w},b,\boldsymbol{\alpha}))的最小最大点,其中拉格朗日函数相对于(\boldsymbol{w})和(b)最小化,并且相对于(\boldsymbol{\alpha})最大化。这是一个拉格朗日对偶问题的例子,标准方法是从求解最小化目标((\boldsymbol{w})和(b))的原始变量开始。该解决方案提供(\boldsymbol{w})和(b)作为拉格朗日乘数(对偶变量)的函数。下一步是在对偶变量的约束下最大化目标。
假定(J(\boldsymbol{w},b,\boldsymbol{\alpha}))是凸的,最小化问题可以通过对(\boldsymbol{w},b,\boldsymbol{\alpha}))相对于(\boldsymbol{w})和(b)求微分,然后将结果设置为零来解决。
$ $ \ begin { align } \ partial j(\ bold symbol { w },b,\ bold symbol { \ alpha })/\ partial \ bold symbol { w } = 0 \ text {,得出} \ bold symbol { w } = \sum_{i=1}^n \ alpha _ I y _ I \ bold symbol { x } _ I \ label { eq:SVM-dual-const 1 } \ \ \ partial j(\ bold symbol { w },b,\ bold symbol { \ alpha })/\ partial b = 0 \ text {,得出} \sum_{i=1}^N \alpha_i y_i;;\text{(7)}\end{align}$$
扩展(6)和堵塞 w 和 b 产量的解决方案
$ \ begin { align } t0]j(\ \ boldssymbol { w }、b,\ boldssymbol { \ alpha })【T4 =(1/2)\ alpha _ I \ alpha _ j y _ I y _ j } \ boldssymbol { x } _ j-\ alpha _ I \ alpha _ j y _ I y _ j } \ boldssymbol { x } _ j+b \ alpha _ I y _ I+)\;\;\ text {(8)}
\ end { align }
$。
(8)中的第二项因为(7)而为零,这给了我们问题的最终提法。
$ $ \ begin { eq:SVM-qp-min-final }
\ begin { aligned }
\ max _ { \ bold symbol { \ alpha } } \ quad&\sum_{i=1}^n \ alpha _ I-(1/2)\sum_{i=1}^n \sum_{j=1}^n \ alpha _ I \ alpha _ j y _ I y _ j \boldsymbol{x}i^t \ bold symbol { x } _ j \;;;\ text {(9)} \
\ textrm {这样} \ quad&(1)\;\sum^n \ alpha _ I y _ I = 0 \
&(2)\;\ alpha _ i \ geq 0 \ for all I
\ end { aligned }
\ end { equation } $ $
现在,让我们看看如何在实践中应用这一点,使用修改后的虹膜数据集。让我们从加载所需的 Python 库开始,加载和采样数据,并对其进行绘图以便进行可视化检查。
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from cvxopt import matrix, solvers
from sklearn.datasets import load_iris
iris = load_iris()
iris_df = pd.DataFrame(data= np.c_[iris["data"], iris["target"]], columns= iris["feature_names"] + ["target"])
# Retain only 2 linearly separable classes
iris_df = iris_df[iris_df["target"].isin([0,1])]
iris_df["target"] = iris_df[["target"]].replace(0,-1)
# Select only 2 attributes
iris_df = iris_df[["petal length (cm)", "petal width (cm)", "target"]]
iris_df.head()
让我们将数据转换成 NumPy 数组,并绘制两个类。
X = iris_df[["petal length (cm)", "petal width (cm)"]].to_numpy()
y = iris_df[["target"]].to_numpy()
plt.figure(figsize=(8, 8))
colors = ["steelblue", "orange"]
plt.scatter(X[:, 0], X[:, 1], c=y.ravel(), alpha=0.5, cmap=matplotlib.colors.ListedColormap(colors), edgecolors="black")
plt.xlim(x_min, x_max)
plt.ylim(y_min, y_max)
plt.show()
回想一下,为了找到最佳超*面,我们使用(9)中给出的对偶拉格朗日公式。然而,CVXOPT 期望问题以下面的形式表达
$ \( \ begin { equation } \ begin { aligned } \ min \ quad&(1/2)\boldsymbol{x}^t p \ bold symbol { x }+\boldsymbol{q}^t\boldsymbol{x}\\ \ textrm { subject to } \ quad&a \ bold symbol { x } = b \ \ \ quad&g \ bold symbol { x } \ precurlyeq \ bold symbol { h } \ end { aligned } \ end { equation } \) $
我们需要重写(9)来匹配上面的格式。让我们定义一个矩阵(\mathcal{H})使得(H_{ij} = y_i y_j x_i \cdot xj)。然后我们可以用向量的形式重写原来的问题。我们还将目标和约束都乘以-1,这就变成了最小化任务。
$ \( \ begin { aligned } \ min _ { \ alpha } \ quad&(1/2)\boldsymbol{\alpha}^t h \ bold symbol { \ alpha } -1^t \ bold symbol { \ alpha } \ \ \ textrm {这样} \ quad&\ bold symbol { \ alpha } = 0 \ \ \ quad&-\ alpha _ I \ leq 0 \;\ for all I \ end { aligned } \) $
从那里,我们获取训练样本的数量(n)并构造矩阵(H)。
n = X.shape[0]
H = np.dot(y*X, (y*X).T)
这是目标的第一项。对于第二项,我们只需要一个-1 的列向量。
q = np.repeat([-1.0], n)[..., None]
对于第一个约束,我们将(A)定义为包含标签(\boldsymbol{y})的(1 \乘以 n)矩阵,并将(b)设置为 0。
A = y.reshape(1, -1)
b = 0.0
对于第二个约束,我们构造了一个矩阵(n \u 乘 n \u\u\u\u\u\u\u\u\u\u\u\u\u\u\u\u\u\u\( G \\\\\\)在对角线上为负 1,其他地方为 0,以及一个零向量\\\\\\\\
G = np.negative(np.eye(n))
h = np.zeros(n)
最后,我们将所有东西转换成 CVXOPT 对象
P = matrix(H)
q = matrix(q)
G = matrix(G)
h = matrix(h)
A = matrix(A)
b = matrix(b)
打电话给 QP 求解器。
sol = solvers.qp(P, q, G, h, A, b)
alphas = np.array(sol["x"])
pcost dcost gap pres dres
0: -5.8693e+00 -1.1241e+01 3e+02 1e+01 2e+00
1: -5.9277e+00 -3.6988e+00 4e+01 2e+00 3e-01
2: -1.0647e+00 -1.9434e+00 5e+00 2e-01 2e-02
3: -6.5979e-01 -1.1956e+00 6e-01 6e-03 8e-04
4: -8.3813e-01 -1.2988e+00 5e-01 3e-03 4e-04
5: -1.1588e+00 -1.1784e+00 2e-02 8e-05 1e-05
6: -1.1763e+00 -1.1765e+00 2e-04 8e-07 1e-07
7: -1.1765e+00 -1.1765e+00 2e-06 8e-09 1e-09
8: -1.1765e+00 -1.1765e+00 2e-08 8e-11 1e-11
Optimal solution found.
我们现在可以使用(\boldsymbol{w})
$ $ \ begin { equation }
\ bold symbol { w } = \ sum \ alpha _ I y _ I \ bold symbol { x } _ I
\ end { equation }
$ $
w = np.dot((y * alphas).T, X)[0]
接下来,我们确定支持向量,并使用以下公式计算偏差
$ \( \ begin { equation } b =(1/| s |)\ sum _ { s \ in s }(y _ s-\ sum _ { I \ in s } \ alpha _ I y _ I \boldsymbol{x}_i^t \ bold symbol { x } _ s) \ end { equation } \) $
S = (alphas > 1e-5).flatten()
b = np.mean(y[S] - np.dot(X[S], w.reshape(-1,1)))
让我们看看最佳的(\boldsymbol{w})和(b)值。
print("W:", w)
print("b:", b)
W: [1.29411744 0.82352928]
b: [-3.78823471]
接下来,我们绘制分离超*面和支持向量。
该代码基于 scikit-learn 文档中的 SVM 利润示例。
x_min = 0
x_max = 5.5
y_min = 0
y_max = 2
xx = np.linspace(x_min, x_max)
a = -w[0]/w[1]
yy = a*xx - (b)/w[1]
margin = 1 / np.sqrt(np.sum(w**2))
yy_neg = yy - np.sqrt(1 + a**2) * margin
yy_pos = yy + np.sqrt(1 + a**2) * margin
plt.figure(figsize=(8, 8))
plt.plot(xx, yy, "b-")
plt.plot(xx, yy_neg, "m--")
plt.plot(xx, yy_pos, "m--")
colors = ["steelblue", "orange"]
plt.scatter(X[:, 0], X[:, 1], c=y.ravel(), alpha=0.5, cmap=matplotlib.colors.ListedColormap(colors), edgecolors="black")
plt.xlim(x_min, x_max)
plt.ylim(y_min, y_max)
plt.show()
该图非常令人满意,因为解决方案完美地识别了使分离裕度最大化的支持向量,并且分离超*面正确地位于两者之间。最后,我们还可以通过使用 scikit-learn SVM 实现拟合 SVM 来验证我们解决方案的正确性。
from sklearn import svm
使用线性内核并将 C 设置为较大的值,以确保硬边界拟合
clf = svm.SVC(kernel="linear", C=10.0)
clf.fit(X, y.ravel())
w = clf.coef_[0]
b = clf.intercept_
print("W:", w)
print("b:", b)
W: [1.29411744 0.82352928]
b: [-3.78823471]
我们得到了相同的(\boldsymbol{w})和(b)(由于具体的实现,在预期的误差范围内),这证实了我们的解决方案是正确的。
摘要
在本文中,我们回顾了支持向量机的数学知识及其相关的学习算法。我们使用 CVXOPT 在 Python 中做了一个“从头开始”的实现,并且我们展示了它产生了与 sklearn.svm.SVC 实现相同的解决方案。
理解支持向量机的内部结构使我们对算法对于各种任务的适用性有了额外的了解,并使我们能够为更复杂的用例编写定制的实现。
参考
- 巴尔古特大学(2015 年)。用于图像分割的迭代模糊决策的空间分类信息颗粒。在 W. Pedrycz 和 s-m . Chen(编辑。)、粒度计算和决策制定:交互式和迭代方法(第 285-318 页)。斯普林格国际出版公司。https://doi.org/10.1007/978-3-319-16829-6_12
- 德科斯特博士和舍尔科夫学士(2002 年)。训练不变支持向量机。机器学习,46(1-3),161–190。
- 杜达,R. O .,,哈特,P. E. (1973)。模式分类和场景分析。约翰·威利父子公司。
- 费希尔(1936 年)。分类问题中多重测量的使用。优生学年鉴,
7(2),179–188。https://doi . org/https://doi . org/10.1111/j . 1469-1809.1936 . TB 02137 . x - Haykin,S. S. (2009 年)。神经网络和学习机(第三)。皮尔森教育。
- t .约阿希姆(1998 年)。用支持向量机进行文本分类:用许多相关特征进行学习。在 C. Nédellec & C. Rouveirol(编辑。),机器学习:Ecml-98(第 137–142 页)。施普林格柏林海德堡。
- 库恩,H. W .,&塔克,A. W. (1951)。非线性规划。第二届伯克利数理统计和概率研讨会会议录,1950 年,481-492。
- schlkopf,b .,Williamson,r .,Smola,a .,Shawe-Taylor,j .,和 Platt,J. (1999 年)。新颖度检测的支持向量方法。第 12 届国际神经信息处理系统会议录,582-588。