从因果推理商业项目中期待什么:管理人员指南 I
偶然的因果推断
第一部分:什么时候需要随意推断?
这是因果推理和数据科学系列文章的第五篇。前一个是《解决辛普森悖论》。你会在这里找到这篇文章的第二部分。
因果推理是一种新的语言,用于模拟因果关系,以帮助理解更好的原因和影响,以便我们可以做出更好的决定。在这里,我们将解释它如何帮助一个公司或组织从他们的数据中获得洞察力。这篇文章是为那些在数据驱动的公司工作的人写的,不一定是技术人员,他们想了解因果推理项目中哪些是关键点。
注意:有两个因果推理的框架,潜在的结果和 DAG(有向无环图)方法。虽然两者在数学上是等价的,但我们将把重点放在基于图(Dag)的方法上。
我什么时候需要因果推理?
假设你的公司开发了一个新网站。它已经部署,你想知道它是否有积极的影响。为此,您需要测量用户数量,并比较新旧网页,得到以下图表:
Number of web users
现在你问,新网页成功吗?显然,你有很好的结果,但如果你仔细想想,你会发现它不是那么清楚。有一些可能的解释:这个月传统上有更多的活动,你的竞争对手做了一些错误的事情,你周围的一些条件发生了变化,…事实上,有无数种可能的原因。
我们如何解决这个问题?运行 A/B 测试。在部署你的网站之前,你将你的用户随机分成两组,并分配给他们两个版本中的一个。有些人会进入新的,有些人会进入旧的。这里的要点是它们都受相同的上下文影响,确保它们之间的比较是可比较的。
然而,A/B 测试并不总是可行的。有些情况下,它太贵了,不道德(想象一下你想看看吸烟是否会导致儿童患癌症)或者不可行(你的竞争对手推出了一种新产品——你不能要求他们为你进行 A/B 测试来衡量它对你的产品的影响!).尽管如此,你可能有一些你认为可能在某些方面对你有帮助的历史数据。嗯… 那么你需要的是因果推断! 你可能会认为这是大多数情况?!答案是肯定的,是大多数情况。
我有数据,解释起来很简单,我看不出有什么问题!
通过实验(有 A/B 测试)获得的数据和观察数据(没有 A/B 测试)之间存在巨大差异。看看下面这个来自的例子,每个群体都会比平均水平差吗?是的,在分析 2000 年至 2013 年的工资变化时,你会得到这个结果
2000-2013 年实际周工资的中位数变化
合计:+0.9%
高中辍学:-7.9%
高中毕业生,无大专:-4.7%
部分大专:-7.6%
本科以上:-1.2%
全球工资增长 (+0.9%) ,而每个分组的工资都在下降。什么?!想象一下,你必须在这种情况下做出决定:事情是变好了还是变坏了?这不是一个微不足道的答案。看似计算错误,其实不然。当总和及其子群方向相反时,我们称之为辛普森悖论。如果你想要一个更详细的例子,看看“解决辛普森悖论”中的肾结石案例。同样的原始数据同时支持两个完全相反的结论!
辛普森悖论只发生在观测数据中,这只是你在分析观测数据时可能会发现的一个特殊问题。虽然这看起来很罕见,但发生的频率比你想象的要高。总的来说,你必须意识到你可能在分析中引入的许多不同的偏见:它们种类繁多!
结论是,处理观察数据可能非常棘手,很容易导致错误的结论。
让我们看一个例子
想象一下你在一家名为 CausalNews 的报社工作。为了获得更广泛的受众,您使用两个不同的社交媒体平台来发布新闻,Media4You 和 MediaForU。既然你在他们身上花了很多钱,你想知道哪一个对你的公司更有效率。
您的数据可能如下所示
Example data set
现在 MediaForU 给你的是每条新闻(10+5+1)/3 = 5.3k 的访客,而 Media4You 给你的只是 3k。原来如此,MediaForU 更好!
嗯……正如你可能想象的那样,事情没那么简单。你有两种不同类型的新闻:文化和体育。
Introducing news topics
通常体育比文化拥有更多的读者。Media4You 只获得了文化新闻,这是一个不太受欢迎的话题,所以没有在相同的情况下进行比较。事实上,Media4You 在文化板块工作得更好。我们可以用下图来描述这种情况。
Advertising example
出于许多不同的原因,你以不均衡的方式尝试了两个平台(发行策略)。于是,新闻属于哪个话题,就影响了使用哪个平台。同时,主题本身有不同类型的读者,两个平台可能有不同的表现水平。
在我们的直接计算中(5.3k 对 3k),我们混合了两种效果:主题的效果和平台的效果。如果我们想衡量平台的有效性,这个话题就像一个混杂因素,因为这个话题同时影响着两者。我们不确定看到的是平台的有效性还是话题的有效性。
这时,我们自然会想估计:
- 平台有效性:如果两个平台获得相同的话题分布,哪一个会创造更多的访问量?
- 主题效果:不管我们的营销政策如何,读者对每个主题的内在兴趣是什么?
这加起来估计了图中用相对箭头表示的因果关系。在接下来的文章中,我们将更详细地描述因果推理如何成为一种逐步估计这些影响的方法,明确我们在分析中采取的假设和风险。
这里可以继续看。
致谢:
我要感谢 Nicole Thompson 在一起工作时给我的所有建议,告诉我如何更容易地交流困难的想法。谢谢妮可。
参考资料:
- 朱迪亚·珀尔和达纳·麦肯齐的《为什么之书》
- Miguel Hernán 课程"因果图:在得出结论之前先得出假设
- Michael D. Ryall,Aaron L. Bramson " 推理和干预:商业分析的因果模型
从因果推理商业项目中期待什么:管理人员指南 2
偶然的因果推断
第二部分:你需要知道哪些项目要点
这是文章的第二部分“从一个因果推理商业项目中期待什么:一个管理者的指南”。你会在这里找到第三部。
因果建模
偶然推理模型变量如何相互影响。基于这些信息,我使用一些计算工具来回答这样的问题:如果我没有做这件事,而是做了那件事,会发生什么?我能估计一个变量对另一个变量的影响吗?
因果推断提供了一种粗略的方法来获得因果效应的初步估计。如果你想得到更明确的结论,你应该尽可能用 A/B 测试进行更精确和清晰的测量。这些不会受到混淆的影响,除了统计计算之外,你不需要任何建模。
对于与变量的建模关系,你使用一个图(参见"使用因果图!》。这将是你分析的基础。这样的图表将基于你的人类领域知识。您正在对创建数据的过程以及变量之间的相互影响进行建模。在《推理和干预:业务分析的因果模型》一书中,你可以找到如何用许多业务示例来详细构建这个图。
添加更多变量
上一篇文章中的广告例子是一个非常简单的例子。我们应该期待有更多的相关变量。例如,在大多数情况下,我们将包括季节性。文化和体育新闻通常有不同的活动月份。很有可能你在不同的时间使用了不同的平台。
重要的是,你要把你认为可能与你的分析相关的所有 变量都包括进去,并论证为什么会这样*。这是一个需要一些时间的练习。以下是您可能需要考虑的变量类型列表:*
- 影响你的因果变量
- 影响你的效应变量
- 上下文的
- 那些你可以干预或影响的
- 那些你没有数据但很重要、未被观察到、缺失或类似的。
主要险别
如果我们知道这个主题是相关的,但出于某种原因,我们没有这些信息,会发生什么?在这种情况下,主题是一个未观察到的变量,如下图所示。
Unobserved topic
因果推断告诉我们,在这种情况下,不可能给出媒体平台有效性的精确估计。事实上,混杂因素的影响越小,我们的估计就越准确。所以我们不应该就此止步。我们应该寻找与主题密切相关的、足以进行分析的其他变量。事实上,我们正在接近现实,就像物理学家会做的那样。建模过程越好,我们得到的结果就越真实。
因果推断的主要风险是在我们的分析中遗漏了相关的混杂因素。
因果估计
最后一部分是考虑图中表示的所有信息,以计算我们感兴趣的每个箭头的因果估计。我们不打算解释这一部分,因为我们需要进入技术考虑。如果你有兴趣了解更多,你可以从“为什么我们需要数据科学中的因果关系”开始阅读这个博客以前的帖子。
你能从因果推理分析中得到什么?
从这个例子中,我们可以知道因果推理的重点是什么。
- 评估混淆。
- 分离和估计因果关系,将因果关系归因于每个原因。
- 决定我们是否能用我们的数据给出一个答案,我们需要在我们的分析中包括更多的变量,或者说我们不能给出一个合适的估计。
- 使用图表作为沟通工具来明确你的目标、风险和假设。
- 因果效应的定量估计。
还有一个附带的好处。创建描述您的业务流程的图表的练习使您提出了许多关于您的业务的有趣问题,并澄清了一些您以前不知道的概念。
不使用因果推断有什么风险?因果推理降低了你的分析完全错误的可能性。错了多少?正如我们在辛普森悖论中看到的,你可以很容易地从现实中得出完全相反的结论。
因果推断能保证我的分析是对的吗?不,正如我们所看到的,你仍然可能遗漏混杂因素,或者错误地建立因果关系模型,从而得出错误的结论!如果你能进行 A/B 测试,你应该从中得出明确的结论。如果您想要执行许多测试,您仍然可以使用因果推断来对您的测试进行优先级排序!然而,如果你不能进行这样的测试,因果推断是目前估计因果影响的最佳工具。
你可以继续第三部这里。
从因果推理商业项目中期待什么:管理人员指南 III
偶然的因果推断
第三部分:因果推理在当前的人工智能、大数据、数据科学、统计学和机器学习场景中处于什么位置?
这是这篇文章的第三部分“从一个因果推理商业项目中期待什么:一个执行者的指南”。你会在这里找到第二个。
这些词大多含义模糊,至少在通俗层面是这样。让我先定义一下他们在这篇文章中的意思。
大数据:所有致力于为查询、预处理数据或用大型数据集训练模型提供访问和计算的计算基础设施(它们不适合你的笔记本电脑)。
大数据技术的一个主要观点是,数据越多越好。先验地,那是一个公平的假设。然而,在某些情况下,它会错误地导致这样的想法
- 如果你有一个非常大的数据集,数据自己说话,你甚至不需要建模。
- 细节或粒度越多越好。例如,如果您想知道人们去过哪里,并且您每秒或毫秒跟踪他们的位置,而实际上只有每小时的数据是相关的(当然取决于应用程序)
机器学习:这是致力于预测系统的专业技术领域。它是统计、计算和优化的结合。你在媒体上看到的大多数应用都是在监督学习领域。在监督学习中,您有一个包含许多观察值的历史数据库,其中每个观察值都有一个上下文描述和一个您想要预测的响应变量。例如,如果您想要自动读取汽车牌照的号码,您将拥有一个包含汽车牌照图像(上下文描述)和每个汽车牌照的实际号码(响应变量)的数据库。这个数据集通常是由人来标记的(你需要一个人来阅读每幅图像并标注它的编号)。目标是建立一个算法或系统,对于每一个新的汽车牌照图像(不在您的历史数据库中),它能够自动告诉您哪个是其中的号码。监督学习的本质是通过尝试复制过去来学习。
source: smbc-comics
目前,人们对强化学习越来越感兴趣。强化学习关注的不是重现过去,而是学习如何最佳地采取行动。广泛应用于训练机器打游戏。一个非常流行的案例是 DeepMind 用强化学习训练一台机器,以便在围棋比赛中获胜。甚至还有一部关于此事的纪录片!
当前的强化学习依赖于机器学习技术。此外,它主要用于你有一个你想学做的任务的模拟器的任务中。比如在学习玩游戏中,你有一台可以模拟游戏的电脑。
AI: 这可能是其中最模糊的一个词了。我们将把人工智能视为机器学习、机器人技术和试图复制人类行为的类似技术的结合。你可以看到很多公司都在谈论 AI。事实上,他们正在将机器学习应用于与图像、声音或文本相关的任务。
**数据科学:**这是一项专注于应用的活动,主要是在商业领域,与预测分析和从数据中获取洞察力相关。核心知识是统计学和机器学习的结合,有大量的编程(和大数据的密切关系)。
机器学习和传统统计学有什么区别?
机器学习和统计学在目的和用途上是不同的。让我通过一个例子来说明。再次想象你在《因果新闻》报社工作。您拥有按月付费的用户,并希望提高您的保留率。每个客户选择一个内容类型(主题)和一个价格。你也从她那里知道,她的年龄和最近的活动(多久在她手机上看一次你的新闻,她是否联系你抱怨访问你的网站的问题,…)。您有兴趣了解每个客户在下一阶段停留的概率。
机器学习从业者和统计学家都将建立一个模型(公式、算法等),将客户信息和停留概率联系起来
停留概率= f (年龄、活动、内容类型、价格)
虽然机器学习和统计有不同类型的验证他们的模型,甚至有可能两者都建立了相同的模型!机器学习从业者和统计学家打算如何使用模型?
机器学习从业者:把你所有的客户都给我。我会评估下一期入住的概率。你可以开始联系那些更有可能停止订阅的人。
统计学家:年轻人有更多的活动,但愿意付更少的钱。也许你想改变一下你的内容来迎合老年人。更重要的是,价格对你的保留率没有太大影响,所以看起来你可以稍微提高它。
从这个例子中你可以看到机器学习通常更具操作性,而统计更具战略性。机器学习的重点是致力于下一个时期(短期)。统计致力于了解影响客户保留率的主要因素,以便您可以制定中长期政策来改善这些因素。
机器学习更具操作性,而因果推理更具战略性
因果关系在这个游戏中有什么作用?
在这个例子中,因果关系和统计学有着同样的意义。帮助你了解影响你业务的关键因素是什么。这就是我们所说的从数据中获得洞察力。
几十年来,统计一直在成功地做这项工作。但是,它也有一些局限性。因果关系没有明确的形式:因果关系具有内在的方向性,这在相关性中没有反映出来,没有干预的定义,……统计学的主要关注之一是解决不确定性(一个非常困难的问题)。因果关系使用来自统计学的知识,并更进一步完全专注于因果关系。
机器学习与因果文化
这两个学科都有一些不同的关键点。而在机器学习中,就像在大数据中一样,数据越多越好。在因果关系上,这远远不够。有更多的数据只是有助于得到更精确的估计,对有正确的(无偏的)估计没有帮助!你可以有无限的数据,但却遗漏了产生完全错误结果的主要混杂因素。
要么是因果推理,要么是机器学习依赖于模型,所以都认为数据很难自己说话。然而,在机器学习中通常你不需要任何领域知识,而在因果推理中领域知识是*必不可少的。*人际交往是必须的。这可能会使自动化机器学习任务比因果推理任务快得多。
每个模型的模型验证本质上是不同的。大多数机器学习应用程序的 oracle 是交叉验证(在一个看不见的数据子集中评估你的模型,以估计模型的预测准确性)。在因果关系中,交叉验证是不够的。你需要用 A/B 测试来检验你的假设。
除此之外,因果关系开始有助于改善机器学习。例如在推荐系统或强化学习领域。然而,这是一个更加技术性的和完全不同的故事,所以我们不会在这里谈论它。
为什么是现在?
这个问题很难回答。朱迪亚·珀尔和他的同事们已经做了很多努力,通过写书让更多的读者更容易理解因果推理。与此同时,使用潜在结果框架(以及处理因果推断的替代但等效的方法)的流行病学研究也取得了许多进展。
另一方面,除了深度学习(目前最流行的机器学习技术)令人印象深刻的结果之外,我们还发现了典型的监督学习方法的一些局限性。深度学习的先驱之一 Yoshua Bengio 因其在该领域的工作获得了图灵奖,他在的这次采访中警告说,有必要将因果关系纳入当前的机器学习观点中:“我并不是说我想忘记深度学习……但我们需要能够扩展它来做推理、学习因果关系和探索世界等事情,以便学习和获取信息。”
加里·马库斯最近在《T4 时报》上写了一篇文章,也谈到了类似的必需品。
诚然,从研究到应用的过程需要一些时间。现在机器学习中最流行的技术开始于 80 年代和 90 年代。所有的研究加上计算机的巨大进步使它们今天很受欢迎。从这个意义上说,对因果推理的研究已经进行了几十年,现在看来它正在蓬勃发展。
我们已经根据观察数据做出了大部分决定。让我们用更强的基础来做吧!
继续阅读因果推理
如果你想了解更多,你可以阅读这篇博客的其他帖子和其中的参考资料(https://towards data science . com/why-do-we-need-causality-in-data-science-AEC 710 da 021 e)。优步还有一个非常好的博客,我推荐“使用因果推理改善优步用户体验”以及相关书籍和课程:
- 朱迪亚·珀尔和达纳·麦肯齐的《为什么之书》
- Miguel Hernán 课程"因果图:在得出结论之前先得出假设
- 推理和干预:商业分析的因果模型
强化学习能带来什么?
内部 AI
还有什么是超越模仿学习的?
The Lunar Lander
Geoffrey Hinton 曾经举了一个例子“奖杯放不进行李箱,因为它太大/太小了”,这显然取决于我们对“它”指的是什么的先验知识。我们相当确信一个手提箱通常比一个奖杯大,所以要么是“太大的奖杯”,要么是“太小的手提箱”。
也就是说,通过自然地优化每一个句子甚至每一个文档,使其分别达到预期的翻译,不仅会受到缺乏真实世界语境的影响,而且由于语言是一个模糊系统,这种优化还具有相当的随机性。在这种情况下,虽然不可能确定完美的翻译,但是有多个有效的翻译。
尽管如此,对于给定的情况,应该有最佳的翻译,如目标群体的可读性、说服力或信息密度等指标。通过优化这些指标,例如强化学习,而不是简单地模仿监督学习中的人类行为,我们正在遵循一种更端到端的方法,从而大大提高我们系统的能力。
在这个故事中,我们将首先介绍一点背景,并首次尝试利用人工智能来自动化复杂的任务,如自动驾驶汽车、智能分拣机器人等。通过模仿学习。然后,我们将更深入地探讨为什么强化学习可能是一个更有能力的选择,何时值得考虑,以及它在原则上是如何工作的,但也会抽象地勾勒出两个流行的算法。代表我对寻找这种强大技术的实际用例进行总结,确实有助于将 RL 更多地传播到那些算法支持寻找更有益的解决方案的行业中。或者书呆子更喜欢说:
从 _ 未来 _ 导入终极解决方案
模仿学习
DAVE-2 by NVIDIA on End to End Learning for Self-Driving Cars
早在 2016 年,英伟达就实现了地面真相创新:而不是对自动驾驶汽车目标的显式分解(例如,车道标志检测、路径规划等。)在手工制作的内部表示中,他们的系统自动抽象和优化所有必要的处理步骤,包括内部表示。在 NVIDIA 的方法中,汽车的反应给出了其传感器的某些反馈(例如,转向角度、速度、前方图像等。),当然可以通过先进的深度学习技术进行预处理,但不是显式编程,或者他们遵循模仿学习的概念。
想象一下,你现在正在驾驶一辆汽车,你会把你的驾驶决策过程分解成小的标准,每个小的标准自己组合起来,最后在一个大宣言的帮助下进行评估吗?
NVIDIA’s imitation learning pipeline at DAVE-2
永远不要。我们作为人类曾经通过一个未知的学习函数学会了如何驾驶,这个函数是无法提取的。然而,可以记录学习驾驶功能的结果(即转向角、速度等。),以便神经网络可以学习如何从正面图像序列映射到那些期望的动作。这种行为克隆是由 NVIDIA 的 DAVE-2 系统完成的,被称为模仿学习,根据定义,它通过对最终动作本身的端到端训练,而不是最终动作的一小部分,来模仿已经功能化的系统的行为。
尽管如此,模仿学习遭受各种问题,这些问题实际上可以通过变通办法来减轻,以便变得有效,然而,它仍然保持在其可能的能力之下:
- 分布不匹配:模仿学习的初步尝试可能是收集大量人类司机的游戏时间,然后训练系统,并抱最大希望。在神经网络不犯任何错误的约束下,这可以很好地工作。
让我们想象一下,在这种情况下会发生什么,比如汽车偏离了轨道?它会随机运行,因为我们既没有编程任何纠正措施,甚至也没有收集数据。我们自己的先验不仅知道如何处理这些罕见的情况,而且还知道有更糟糕的事故存在,这显然应该避免!所以我们从来没有试图开车撞树,也从来没有能够收集这些数据。
简而言之:收集到的数据分布不仅是所有可能情况的极小子集,而且在我们能够从整个分布中收集的情况下,它将遭受太多的数据!
更一致的方法是收集网络实际需要的数据,以便进行最佳探索(例如,通过关注新状态或通过那些能够最大化所获得信息的状态)。
实际上,一个可以想象的解决方案是在车前放置三个大约 30°旋转的摄像头,就像 NVIDIA 练习的那样,而左边的一个一直向右转向,右边的一个坚持向左转向。有了这个技巧,那些纠正措施就能真正实施,然而,这只是沧海一粟。 - 容易出错的人类行为:直觉上,我们的系统应该比我们自己的驾驶行为更好,例如更节省燃料、时间和损耗。特别是针对某些人类偏好的优化也可能是可取的,比如驾驶舒适性与省时性。总而言之,这并不意味着我们不能彻底驾驶,这更多的是关于相关的微优化。正如李&所概述的那样,即使是像移动手臂这样的自然任务也可能导致每个轨迹上的巨大运动变化。
如果我们能够建立一个系统,不仅能够复制人类的力量,而且能够建立新的力量,特别是在那些计算能力更强的领域,那将会更有希望。 - 没有似曾相识的抗拒:观察同一个事物两次并不意味着也处于同样的情境。
模仿学习只是在没有先前数据的情况下对当前进行优化,即满足马尔可夫性质并且没有任何远见:它生活和行动于当前。前者实际上可以通过使用 LSTM 中的序列数据来缓解,例如,相反,后者无法实现,尽管这可能是合理的:对可想象的未来结果的预计算不仅可以通过记住各种解决方案而不是最受欢迎的解决方案来加强某种创造性,而且还可以缓解存在两个有效解决方案轨迹(例如,向左或向右驾驶一棵树)的问题,但它们的平均值将导致悲剧。
强化学习能够缓解这三个问题吗?
是的,除了在实践中不可能真正实现的马尔可夫性质。
强化学习的理念本质上是直接优化人类也会使用的更高目标,而不仅仅是模仿其成果。使用这种方法,我们不会指定系统我们认为什么是相关的,相反,它会自己找出答案。
强化学习目标
Reinforcement Learning is end-to-end
你还记得模仿学习的三个主要问题吗?
第一个问题实际上可以通过让您的系统有机会自己决定需要采取什么行动来取得进展来解决。与此同时,第二个问题也消失了,因为它不再模仿,而是根据更高的奖励目标进行自我学习(第三个预见问题)。
强调一下:它学习起来就像人类最初学习任务一样,但是是从最开始开始。最初几个小时的训练实际上意味着通过采取随机行动来收集数据,希望我们能做一些伟大的事情(由奖励函数决定),这样我们就能学会加强这种行为,这在未来的迭代中更有可能。
这可以与新生婴儿的试错学习行为相比,他们并不真正了解自己的能力。他处理那种情况的方法是通过爬行和哭泣来探索它的环境,这对他来说是目前最好的选择。
请注意,随着我们变得更好,我们不仅要继续采取那些在过去的迭代中有希望的行动,还要考虑新的不寻常的行动。这被称为开发-探索权衡,在像ε-greedy 这样的算法中,一小部分被分配给随机动作。在这一点上,大多数人会停下来,声称“这样做很好,为什么要改变呢?”。总有更好的解决方案,只是需要时间、成本和努力去探索它…
定义
Reinforcement Learning loop, slightly enhanced from DeepRL Course by Sergey Levine
我不想让你感到困惑,所以我将在这里快速浏览一下最基本的技术术语,并简要阐明强化学习的整个循环过程。
基本上只有两方参与其中:环境(T0)和代理(T2)。环境为代理提供当前状态的适当观察(例如,图像、视频、感觉数据等。)由代理通过策略(例如卷积神经网络)进行处理,输出当前状态下最可能的动作,然后由代理在其环境中执行。环境现在用一个奖励信号来评估该步骤的质量。这可能是一个积极的奖励信号,以加强某些行为,也可能是一个消极的信号,以惩罚错误的决定。当然,整个过程是重复的,直到或者集因达到目标而终止,或者我们达到一个上限。有些算法像政策梯度依赖于这一整集收集的数据,有些算法只需要一批{ 状态、动作、奖励、下一状态 }就能学会。
优化标准是什么?
简单来说就是在给定的一集里最大化所有预期未来回报的总和。
One data batch {s, a, r, s’}. Scenery images from NVIDIA
在这里,这个数据批次是图形可视化。值得注意的是,我们现在需要持续的数据流。因此,像在 Imagenet 中进行的一次性标记数据过程不再有价值。这是因为我们甚至需要在这些区域收集数据,算法甚至不知道在开始时,这样一个区域可能存在。就像一个婴儿,他不知道玩玩具有多有趣,直到他最终找到一个。或者一辆汽车在下雪时不知道它应该意识到打滑的危险,直到它进入这种情况。
这就是为什么环境是算法设计的重要部分,不能像监督学习那样预先计算。
q 学习
q 学习是强化学习中最著名的具体算法之一。它是以 Q 函数命名的,该函数通过在给定状态下采取某种行动来估计所有未来奖励的总和。注意,它不仅仅使得有机会学习任何{ 状态,动作,奖励,下一个 状态}-批次是足够的,而不是包含多个这些批次的整个情节,此外,它还减少了方差:通过 Q 函数计算,算法不仅仅依赖于一个情节的信息。相反,它更喜欢那些在多次类似情况下证明是好的步骤。一集本身总是以某种方式不寻常和有缺陷,但总结起来,他们的基本共同模式是强调。
你如何训练这个 Q 函数呢?
The Bellman equation: Q(s,a) = r + γ*max Q(s’, a’)
输出所有未来奖励的 Q 函数可以用一个巨大的表格来表示,其中状态为行,行为为列,或者用一个神经网络来表示。
抽象地说,训练可以像上面的图片中表达的那样简单:将下一个状态的 Q 值添加到你的数据批次的当前奖励中(假设你总是根据 Q 值采取最佳行动),这是根据定义的当前 Q 值。现在试着最大化这个奖励。
代表他的折扣因子 γ 确保算法更喜欢在两个或更多时间步中实现某个奖励而不是相同的奖励,因此它不会在无限地平线的某个点确定地达到目标,而是尽可能快地达到目标。将贴现因子乘以每一个计算出的 Q 值往往会让未来的回报更少。
一个列表式 Q-Learning 的例子:FrozenLake
FrozenLake: Example code
FrozenLake: Starting at plate 1, an agent has to find its path to plate 16 which is rewarded by one while avoiding the deadly holes.
在 FrozenLake 的例子中,一个代理通过接收一个状态(1 到 16:当前盘子)和发送期望的动作(用 Q 函数计算)与他的环境进行交互,产生一定的奖励。
在这种情况下,删除折扣因子将导致一个表格,其中包含洞的 0.00 或剩余湖的 1.00 :它确实知道如何在不出错的情况下解决任务,但不会尽快解决,因为这对我们人类来说是合乎逻辑的。
此外,在更现实的场景中,即使将图像视为输入状态甚至连续状态,也不能只使用表格。这就是神经网络发挥作用的地方。遗憾的是,在这种情况下,并不能保证它会收敛。然而,在实践中,情况往往如此。
比我们的玩具例子更有用的是名为 Breakout 的游戏:
Q-learning on Breakout: 1st vs. 7000th[~4h] vs. 9000th[~10h] episode
四十年前,史蒂夫·乔布斯和沃兹只用了 42 个 TTL 芯片就在 Atari 设计了 4 个晚上的越狱。他们当时有没有想过,现在可以通过强化学习来学习一种先进的策略,能够自己观察如何玩得最好?一个没有被特别编程到一个游戏中的人工智能,并且显然没有访问内部状态表示的权限?这不仅仅是熟悉可用的动作和保持球的活力,而是关于比赛的策略:避免击中橙色方块(增加速度)和比赛顶部(缩短桨)的处罚似乎效果很好。至少在以后的迭代中…
基于模型的 RL
最后但并非最不重要的一门最高学科——精英中的精英仍然缺失:元学习。卓越的学习算法!哦不,不是那个奶油。目前,我们将坚持基于模型的强化学习与元学习一样有远见,但使用起来更简单。
与其像基于模型的 RL 中的 Q-learning 那样学习奖励函数,不如考虑一种更为端到端的方法:梦想环境可能是什么样的,然后尽可能按照你的梦想行动。
The model-based RL cycle
本质上,你从相同类型的数据开始,但继续学习一个叫做动力学模型的神经网络,想象下一个状态可能是如何给出当前状态以及在该状态下将要执行的动作。有了它,实际上就有可能在算法的头脑中预测未来的多个步骤,而不需要在更深思熟虑的行为之后执行那个动作。
在下一步中,通过使用蒙特卡罗树搜索考虑预定义范围(例如,15 个时间步长)内的每个可达状态及其相应的回报来规划整个生成树被证明是合适的。
我们执行了多少动作?
就第一个!为什么?这是因为在高回报轨迹的路径上执行生成树的第一个动作与现实相比非常准确,而整个路径特别容易出错,因为学习的动态模型不是 100%准确。在这种情况下,误差会在每个时间步中累积,我们的模型也无法预测无法预料的环境变化。
例如,考虑自动驾驶汽车中的导航系统的情况:当然,它可以预测采取什么特定的行动序列来到达驾驶员的目的地,但是,整个驾驶过程还取决于其他汽车和行人、交通灯电路,甚至风等。一旦遇到这种意想不到的行为,它应该能够采取正确的行动,以其最佳的导航。因此,在用从环境接收的真实新状态重新计划之前,只执行一个动作。
当然可以。大概就是基于模型的 RL 的直觉吧。但是为什么它在某种意义上是有远见的呢?
因为它有做梦的能力。例如,假设下图中的视觉预见技术。正如人们可能认为的那样,那些图像是真实的图像,但矛盾的是真实的!它们是从动力学模型预测出来的。
Visual Planning by Ebert et al.
这个系统自己计算出,在玩具旁边移动机器人手臂很可能也会导致玩具的移动行为。并且如预期的那样,随着机器人臂的正在进行的运动,玩具从其原始位置消失,如在下面一行中另外可视化的,具有关于绿色玩具的外观的可能性图。
很公平。但是与 Q-Learning 相比,它有什么实际的用途吗?
当然啦!事实上,通过如下所示的计划过程,它在样本效率(即所需剧集)方面具有巨大优势。
Model-based RL vs. model-free (e.g. Q-learning) performance. More details here.
然而,正是这种规划强度也是它的主要缺点:它非常容易受到动力学模型的过拟合,这通常在实践中通过较浅的神经网络来减轻,其本质上不能像在 Q 学习情况下那样有效地对目标建模。
到目前为止我们讲了些什么?
- 模仿学习是迈向全自动和自学习算法的第一步,因为它模仿人的行为。
- 在强化学习中,一个代理能够通过在它的环境中执行需要的动作,观察输出的状态,并最大化返回的回报,通过试错找到它自己的安全最优解。
- 与手工制作标签和一次性数据集的监督学习相比,在处理 RL 时需要连续的数据流。
- RL 主要有三种算法:策略梯度、 Q-Learning 和基于模型的 RL 。这些算法的不同之处在于它们的计算性能、在给定任务中可实现的性能和样本效率:它们的样本效率和并行化能力以升序提高,而可实现的性能降低。
我很高兴你能坚持到现在,并鼓励你永远不要说
自学算法是未来的事情
因为现在,尤其是在完成了加州大学伯克利分校的 DeepRL 课程后,你可以让它成为今天的话题!这也是为什么我上个月在 meetup.ai Hamburg 做了一个关于完全相同内容的演讲。
走出去,找到不仅仅是明确的回报函数(利润、CTR、每英里事故数、叠罗汉塔稳定性等)的用例。)是可用的,但是也可以提供安全的环境,使得错误不会造成伤害。
自我学习并不意味着它会像 2016 年微软在 Twitter 上的 Tay 机器人那样继续在野外学习。你不仅会遇到巨大的麻烦,你也无法证明你的软件已经可以生产了,因为最终的软件还没有出来。
作为起点,RL 也可以在较小的意义上操作:
在安全的环境中自学,例如,可以获得观察到的和希望看不到的结果(在线商店中的项目订单、通过网站的用户体验、GO中的新策略),然后在真实环境中静态地实现这些结果,导致系统能力的显著增加。
还有其他想法吗?请随意留言。😉
优化什么?损失函数备忘单
寻找合适的优化目标的一些技巧,以及如何为您的用例找到合适的目标
在他的一本书里,艾萨克·阿西莫夫设想了一个未来,计算机变得如此智能和强大,以至于它们能够回答任何问题。阿西莫夫认为,在未来,科学家不会变得多余。相反,留给他们的是一项艰巨的任务:弄清楚如何向计算机提出正确的问题:那些能产生深刻、有用答案的问题。
我们还没有到那一步,但从某种意义上说,我们已经到了。
在过去,机器学习的很多努力都花在了其机制的实现上。随着 Tensorflow、Pytorch 等流行的机器学习框架的出现,我们可以愉快地摆脱这一负担。通过调整模型的权重来实现某个目标的机制被抽象掉了。定义一个定制的优化目标就像写下来一样简单,你最喜欢的深度学习框架会相应地减少错误(或损失)。但是这种自由带来了一个非常重要的问题:
你应该为什么目标进行优化?
两种类型的损失(哪个更重要)
我们经常发现自己在衡量两种类型的损失:
- 培训损失,对此我们积极优化模型。在每次迭代中,我们的模型对所有自由度的训练损失进行求导,并试图直接降低训练损失。
- 验证损失,我们通过它来衡量模型的性能。在这里,我们对模型没有训练的一些维持集进行了一系列预测,并对我们对结果的满意程度进行评分——不涉及导数或优化。
当我们尝试不同的模型架构、数据扩充或对我们的模型进行任何其他更改时— 验证损失最终决定我们是否对更改感到满意或重新开始。
Most of us have been subject to “validation loss” for a good chunk of our life. But I would argue the education system is very susceptible to reward hacking
如果幸运的话,1 和 2 可能是一样的。很多时候,他们不是。以二进制分类为例:测量验证集的准确性非常容易:您预测所有项目的概率,设定所有通过 50%概率(例如)的预测的阈值,并测量您正确的频率。这是一个很大的、定义明确的验证损失,但它不满足我们在培训中的要求,即损失应该是可导的。换句话说,如果你稍微改变模型的权重,精确度将保持不变,这意味着你不能直接优化精确度,即使这可能是你真正关心的。
那么,在这两个损失中,哪个更重要呢?我认为验证损失是最重要的。验证损失是我们如何决定“模型 A 优于模型 B”的。这是我们的指导方针,它将指导我们做出的每一个建模决策。培训损失是一种工具,是降低验证损失的战术需要。
所以我们最好选择正确的目标,对吗?
分类损失— 3 个常见问题
现在让我们坚持二进制分类,只是为了有一个积极的讨论。你决定尝试向人们推荐中型职位。你只需要向用户展示一个推荐,他们要么接受,要么忽略你,转到下一个网站。
为此,您正在构建一个分类器:
Classifier(person, article)-> click probability
你应该优化什么?
原木损失
分类之王。这是我们通常在分类模型训练中优化的损失。作为一种性能指标,对数损失是对你在预测一个类别的概率时的校准程度的一种度量。在我们的示例中,该指标衡量我们在预测点击可能性方面做得有多好。如果你说某件事发生的几率是 0%,而它确实发生了,那么你在估计概率方面做得很糟糕——对数损失将是无穷大。
**直觉:**衡量您预测概率的能力
**边缘情况:**如果模型预测概率为 0.0,标签为 1,则损失趋于无穷大(反之亦然)
**理解数字的意义:**在具有 50–50 先验和一个无线索分类器的二元预测中,您应该看到loss = ln(0.5) = 0.693
。有了 N 个类和平坦的先验,你应该看到loss=ln(1/N)=-ln(N).
对数损失并不难得到一个直觉。二元分类的一个有用技巧是取e^(loss)
。你得到的数字大约是你预测正确类别的概率。
定义: **loss=-sum(log(p_i) * y_i)**
其中p_i
是你对某类i
的预测概率,y_i
是该类的标签。
对于一个推荐引擎来说,这是一个好的衡量标准吗?
不完全是。我们并不关心用户点击我们返回结果的可能性有多大。我们想把最有可能的文章放在顶部。预测点击概率是一个相关的问题,但不是同一个问题*。*举个例子,也许我们有信号表明某个用户是个点击狂,与其他用户相比,她点击任何东西的可能性要高 10 倍。这些信息对于为该用户返回最佳结果是无用的——将我们对所有推荐项目的预测提高 10 倍不会改变它们的顺序,但会降低我们的日志损失,因为它会大大影响我们的点击概率。
什么时候这是一个有用的指标?
当你关心一个事件发生的概率时,而不是当你订购推荐时。举个例子,假设我试图预测 下雨 的可能性,对数损失将是一个非常有用的度量,因为它量化了我们在预测下雨概率方面做得有多好。
准确(性)
这个挺直观的。我们以我们打算使用模型的方式设定结果的阈值(例如,在我们的例子中,我们将在所有候选人中选择得分最高的中等文章,而不是阈值),并询问最高结果是否被点击。对于我们在这种情况下所做的事情,更准确的名称应该是将这个指标称为 top1 点击率,因为这为重新访问我们的产品和推荐前 K 名结果(而不仅仅是 1)奠定了基础。
直觉:这是对“你做出正确猜测的频率”的直接测量。
理解数字的含义:99%的准确率听起来可能是惊人的表现,除非你考虑到“用户不会点击这篇文章”的平面预测已经在 99.9%的时间里是正确的。准确性的基线模型是最常见类的出现频率。在 50-50 的二进制问题中,这个数字是 50%。但是在猜测今天是否会有飓风时,99.99%绝对是你能做的最坏的情况,所以这个数字必须总是与基线相比较。
对于一个推荐引擎来说,这是一个好的衡量标准吗?
是的,这种损失衡量的是确切的用例——顶部的推荐是否被选中。
但是请注意这个指标的弱点。这个度量标准是量化的,这意味着即使模型在工作中变得更好,准确性也可能根本不会改变。假设我们的模型提高了对文章推荐的排名,但是完全正确的几率和从数百万候选文章中猜出用户最终点击的文章的几率非常接近于 0。在这种情况下,即使我们改进了我们的模型并提出了更好的建议,准确性作为一个度量标准也不会发生任何变化。这就引出了下一个损失定义。
罗马纪元
我不明白为什么人们用一种对任何人来说都难以理解的方式来定义 AUC。但是为了完整起见,我们将从干定义开始。AUC 被定义为曲线下面积,它是您在真阳性率对假阳性率曲线上绘制的曲线的积分。这是一个典型的可视化
If you ever want a confuse someone, go for the classic AUC definition.
我相信上面的定义是没用的,因为它没有让你明白 0.9 的 AUC 是什么意思。所以让我们试试另一个定义,它在数学上是等价的,但我觉得更贴切:
在二元分类中,AUC 为 0.9 意味着给定一个阴性样本和一个阳性样本,您的分类器在 90%的情况下会预测阳性样本的得分高于阴性样本的得分。
直觉:衡量你有多优秀排序正类高于负类
理解数字: AUC 是你的分类器对随机正样本高于随机负样本给出更高预测的可能性。0.5 已经够糟了!
定义:此处为
对于一个推荐引擎来说,这是一个好的衡量标准吗?
是啊,但让我们想想这少了什么。我们在一开始就说过,我们只向用户展示最上面的文章。所以真的,这并没有抓住我们的模型在这种情况下被使用的方式。另一方面,与顶级准确性不同,这个度量标准对模型中的微小改进很敏感,并且不会受到与准确性度量标准相同的病理的困扰。
还有更多
对于推荐问题的具体情况,有一个专门为这种情况设计的大量指标列表: NDCG 、 GMAP 、 MRR 等等。但是本文的目的不是深入研究推荐引擎指标的细节,而是讨论最常用的全面有用的指标——并希望在如何解决我们测量的问题上给出一点直觉。
最后,关于衡量进展和结果的个人观察。
作为科学家,我们讨厌改变目标。有一个单一的测试集,有一个单一的度量标准,并且逐渐变得更好,这要干净得多。那很少发生。
现实比这更有趣。期望改变你的测试集,重新定义你的验证标准,排除异常值,并给你的测试集增加新的观察值。期望改变你的目标,直到它们真正反映出你想要完成的目标。
原贴霍斯科技的机器学习博客(那是我的机器学习咨询公司)。
是什么引发了纽约公园的犯罪?
Photo Credit: Pixabay, licensed by Creative Commons Images
在城市的某个公园遛狗可能是你每天的例行公事,或者你偶尔会去公园呼吸一下新鲜空气。不管你来的目的是什么,安全是最重要的。谈到安全,我想起罗马律师和哲学家马库斯·图留斯·西塞罗的一句名言,内容如下:
“人民的安全应是最高法律.”
在这个故事中,以下关于纽约公园犯罪的问题将基于数据分析得到解答。此分析是使用来自两个不同来源的数据集完成的:
报告从 2014 年第三季度到 2019 年第二季度,共从 NYCPCS 网站下载了 20 个数据集。NYCPCS 网站上的所有数据集都可以在。xlsx 和 pdf 格式。删除不必要的标题和文件转换。xsl 到。csv 发生在上传到 Jupyter 笔记本之前。
另一方面,一个包含公园地理信息(即邮政编码、坐标)的数据集是从。csv 格式。最后,所有数据集合并成一个最终数据集,这增加了分析所需的数据。以下库用于完成该分析:
Numpy,Pandas,Matplotlib,Seaborn,Plotly 和 leav
这个分析是为了让我接触 Python。本分析的目的是回答以下关于纽约公园犯罪的问题。
- 过去几年纽约公园的犯罪率是多少?
- 一年中的季度和总犯罪率有什么关系?
- 哪个区的公园犯罪风险更高?
- 哪些公园不太安全?
- 公园的大小和犯罪率有关系吗?
- 公园的风险是如何在纽约扩散的?
导入库
下面的代码片段显示了各种库的导入。 Pandas 和 numpy 分别是数据分析和数值库。这两个库对于现代数据分析至关重要。此外,本次分析还使用了 matplotlib 、 seaborn、和大部分 plotly 来创建交互式图表,并使用leaf进行地图可视化。
#numpy provides math functions
import numpy as np#pandas provides data manipulation and analysis
import pandas as pd#following libraries for data visualization
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.plotly as py#folium provides map visualization
import folium%matplotlib inline
init_notebook_mode(connected=True)
读取和清除数据
由于不同的表结构(例如,各种标题、不同长度的列名),阅读所有内容是一项挑战。csv 文件转换成熊猫数据帧。在连接成数据帧之前,表被读取并转换成标准格式。
#Read all datasets containing data of different years and quarter
df1 = pd.read_csv('2019Q2.csv')
df2 = pd.read_csv('2019Q1.csv')
df3 = pd.read_csv('2018Q1.csv')
df4 = pd.read_csv('2018Q2.csv')
df5= pd.read_csv('2018Q3.csv')
df6= pd.read_csv('2018Q4.csv')
df7= pd.read_csv('2017Q1.csv')
df8= pd.read_csv('2017Q2.csv')
df9= pd.read_csv('2017Q3.csv')
df10 = pd.read_csv('2017Q4.csv')
df11= pd.read_csv('2016Q1.csv')
df12= pd.read_csv('2016Q2.csv')
df13= pd.read_csv('2016Q3.csv')
df14 = pd.read_csv('2016Q4.csv')
df15 = pd.read_csv('2015Q1.csv')
df16 = pd.read_csv('2015Q2.csv')
df17 = pd.read_csv('2015Q3.csv')
df18 = pd.read_csv('2015Q4.csv')
df19 = pd.read_csv('2014Q3.csv')
df20 = pd.read_csv('2014Q4.csv')#Read dataset containing geographical information of parks
df21 = pd.read_csv('OpenData_ParksProperties.csv')
下面的代码片段用于清理所有数据集并使其成为标准格式。
#Cleansing of messy column headers and bring headers of all tables into standard format
df1.columns = df1.columns.str.strip().str.upper().str.replace(' ', '_').str.replace('(', '').str.replace(')', '')
df2.columns = df2.columns.str.strip().str.upper().str.replace(' ', '_').str.replace('(', '').str.replace(')', '')
df3.columns = df3.columns.str.strip().str.upper().str.replace(' ', '_').str.replace('(', '').str.replace(')', '')
df4.columns = df4.columns.str.strip().str.upper().str.replace(' ', '_').str.replace('(', '').str.replace(')', '')
df5.columns = df5.columns.str.strip().str.upper().str.replace(' ', '_').str.replace('(', '').str.replace(')', '')
df6.columns = df6.columns.str.strip().str.upper().str.replace(' ', '_').str.replace('(', '').str.replace(')', '')
df7.columns = df7.columns.str.strip().str.upper().str.replace(' ', '_').str.replace('(', '').str.replace(')', '')
df8.columns = df8.columns.str.strip().str.upper().str.replace(' ', '_').str.replace('(', '').str.replace(')', '')
df9.columns = df9.columns.str.strip().str.upper().str.replace(' ', '_').str.replace('(', '').str.replace(')', '')
df10.columns = df10.columns.str.strip().str.upper().str.replace(' ', '_').str.replace('(', '').str.replace(')', '')
df11.columns = df11.columns.str.strip().str.upper().str.replace(' ', '_').str.replace('(', '').str.replace(')', '')
df12.columns = df12.columns.str.strip().str.upper().str.replace(' ', '_').str.replace('(', '').str.replace(')', '')
df13.columns = df13.columns.str.strip().str.upper().str.replace(' ', '_').str.replace('(', '').str.replace(')', '')
df14.columns = df14.columns.str.strip().str.upper().str.replace(' ', '_').str.replace('(', '').str.replace(')', '')
df15.columns = df15.columns.str.strip().str.upper().str.replace(' ', '_').str.replace('(', '').str.replace(')', '')
df16.columns = df16.columns.str.strip().str.upper().str.replace(' ', '_').str.replace('(', '').str.replace(')', '')
df17.columns = df17.columns.str.strip().str.upper().str.replace(' ', '_').str.replace('(', '').str.replace(')', '')
df18.columns = df18.columns.str.strip().str.upper().str.replace(' ', '_').str.replace('(', '').str.replace(')', '')
df19.columns = df19.columns.str.strip().str.upper().str.replace(' ', '_').str.replace('(', '').str.replace(')', '')
df20.columns = df20.columns.str.strip().str.upper().str.replace(' ', '_').str.replace('(', '').str.replace(')', '')
df21.columns = df21.columns.str.strip().str.upper().str.replace(' ', '_').str.replace('(', '').str.replace(')', '')
以下代码片段用于将所有数据集追加到一个数据集中。
#Append all dataframes into one dataframe
df = df1.append([df2, df3, df4, df5, df6, df7, df8, df9, df10, df11, df12, df13, df14, df15, df16, df17, df18, df19,df20], sort = False)#Display df dataframe
df.head()
最后,我处理了下面的数据集。这个数据集还有一个名为 *TOTAL、*的列,记录了每个公园每年每季度的犯罪总数。
另一个包含纽约公园地理信息的数据集如下。在这个分析中,_ GEOM(公园的几何图形)和 SIGNNAME (公园的名称)列被用来绘制公园的地图。
分析
过去几年纽约公园的犯罪率是多少?
分析从寻找问题的答案开始,“过去几年纽约公园的犯罪率是多少?”。2015 年至 2018 年的完整数据可用。2014 年和 2019 年的数据从数据集中删除,以消除代码修改后的结果偏差,并创建到新的数据框架中,以便按年份进行分析。
为了更好地了解和可视化上面的数据集,生成了以下图表。以下图表的代码如下。
#For Scatter Chart
by_year.iplot(kind='scatter',xTitle='Year',yTitle='No of Crimes',title='Crimes in NYC Parks by Year')#For Bar Chart
by_year.iplot(kind='bar', xTitle='Year',yTitle='No of Crimes',title='Crimes in NYC Parks by Year')#For Stacked Bar Chart
by_year.iplot(kind='bar', barmode = 'stack', bargap = .40, xanchor = 'center', nticks = 8, xTitle='Year',yTitle='No of Crimes',title='Crimes in NYC Parks by Year')
Scatter Chart
Bar Chart
Stacked Bar Chart
从上面的三张图表中,我们可以观察到重大盗窃、抢劫和重罪袭击是纽约公园里最常发生的犯罪。犯罪率从 2015 年到 2017 年有所上升,但在 2018 年略有下降,但这是基于仅四年的数据;很难预测趋势。有趣的是,在这四年中,重大盗窃罪和抢劫罪遵循着类似的起伏模式。
一年中的季度和总犯罪率有什么关系?
这一分析有助于找到前面提到的其他问题的答案。下面的代码片段计算出了该季度的犯罪率之间的关系。
上面的数据集可以更好地理解数据。之前运行的类似代码生成了下图。
Scatter Chart
Bar Chart
Stacked Bar Chart
从图表中可以明显看出,纽约市的公园犯罪率在今年第一季度最低,但在今年第三季度最高。好像很有意思。绘制回归图以查看一年中该季度与总犯罪率之间的统计关系。
回归图描绘了两个变量之间的正关系。然而,皮尔逊相关(0.41)的结果证明这是一种适度的正相关。无论如何,它猜测公园犯罪的选择可能是天气的因变量,因为一年的第三季度是从 7 月到 9 月的几个月,这是纽约的夏天。
哪个区的公园犯罪风险更高?
分析进一步发现了纽约市各区和公园犯罪率之间的关系。顺便说一句,谁不知道,纽约有五个区:曼哈顿、皇后区、布鲁克林、布朗克斯和斯塔滕岛。执行下面的代码片段来查找犯罪率和行政区之间的关系。
之前运行的类似代码从上面的数据集生成图形,以便从数据中获得更好的直觉。
一张图胜过千言万语,上面的图说明了一切。曼哈顿是最危险的区,而斯塔滕岛在公园犯罪方面是最安全的。布鲁克林是曼哈顿最近的邻居。另一方面,皇后区和布朗克斯区正在相互竞争。
哪些公园不太安全?
我们说的是公园,到目前为止,其他一些与公园犯罪相关的变量已经讨论过了。我们现在来列举几个公园,在公园犯罪方面是排在前列的。为了找到这些公园,执行了下面的代码片段。犯罪率最高的十大公园如下所示:
在这里我们可以看到,法拉盛梅多斯科罗纳公园在列表的顶部,其次是兰德尔岛公园,科尼岛海滩和木板路,等等。布鲁克林大桥公园排在第十位。好了,我们视觉上来看看这张公园多的表。
Stacked Bar Chart
上图显示了犯罪率最高的 50 个公园。图表不能很好地容纳所有 50 个名字。如果你有兴趣去看那些公园,请随意访问下面提供的 GitHub 链接。
公园的大小和犯罪率有关系吗?
好奇的头脑想知道公园的大小和与之相关的犯罪率之间的关系?在分析完成之前是未知的,并且结果是不可见的—通过运行以下代码来回答第五个问题而得到的修改后的数据帧。
如果没有统计测试,回答这个问题会很有挑战性。因此,这种关系通过 Pearson 相关性进行了测试,并显示在如下回归图中。
从回归图来看,公园规模与犯罪率之间存在微弱或中度的正相关关系。然而,皮尔逊相关系数(0.34)证实了这是一种中度的正相关。让我们也来看看这种关系。
Scatter Plot
正如皮尔森相关所表明的,从上面的散点图来看,公园的大小和犯罪率之间存在适度的正相关关系。
公园的风险如何在纽约扩散?
绘制了一张热图来回答最后一个问题。热点图显示了纽约市公园犯罪的风险区和安全区(用不同的颜色表示)。创建了一个修改的数据框架,将包含犯罪数据和公园地理数据的两个表结合起来绘制热图。为开发新的 dataframe 而执行的以下代码片段。
执行以下代码片段,使用上述数据框架绘制热图。
上面两张热图分别用红色和绿色显示了从高风险到安全的区域。不难发现纽约最危险公园的位置。读者可以知道他们的生活区有多不安全。请采取必要的措施,在纽约保持安全。
让我们来欣赏
感谢您花时间和耐心阅读本文。随时问我任何问题。如有错别字或错误,请评论。如果你能帮我学习更好的分析方法,我将不胜感激。你可以联系我:
Email: kunduishere@gmail.com
LinkedIn: [https://www.linkedin.com/in/shuvokundu/](https://www.linkedin.com/in/shuvokundu/)
Github: [https://github.com/ShuvoKKundu](https://github.com/ShuvoKKundu)
Medium: [https://medium.com/@kunduishere](https://medium.com/@kunduishere)
完整的代码可以在 https://github.com/ShuvoKKundu/NYC-Park-Crime-Data-Analysis 找到
哪个电视节目有关于 IMDb 的最佳剧集?
《绝命毒师》还是《权力的游戏》
“下一集开始于…”
你的大脑还没有处理所有疯狂的情节转折、新披露的信息和人物提升的意义。你刚刚在网飞看了一集令人瞠目结舌的你最喜欢的节目,你被告知下一集几秒钟后开始。
在你知道之前,你已经在推特上说为什么这个节目是世界上最好的东西了。接下来,你在谷歌上搜索那一集来阅读关于它的文章。最后,你去 IMDb,给它打 10 分。
《IMDb 日报》对剧集进行了评级,一些剧集的评级非常突出,因为这些剧集让观众不知所措。对 IMDb 收视率最高的 200 集电视剧进行了分析,以找出在这些令人难以置信的剧集中哪个电视剧制作的剧集最好。
IMDb 收视率最高的 200 集
信息是从 IMDb 手动收集的,并填入谷歌表格的六个栏目下:电视节目、剧集、流派、评分、年份和投票。这个数据集后来被转换成 csv 文件,用于数据分析。
A snapshot of the google sheet file containing the top 200 rated episodes on IMDb
数据可视化用于基于 csv 文件创建多个图形,以显示各列之间的关系。
哪一年人们投票最多?
我们制作了一个线形图来显示 IMDb 每年优秀剧集的投票总数。
Total Number of Votes vs Year
原来是 2015 年到 2020 年这个时间段得票数最多。该图还推断了人们开始大量使用 IMDb 评分功能的时间段,即 2013 年。下面是对图表的深入分析,它向我们展示了哪一年的投票数最多。
Total Number of Votes vs Year from 2015 to 2020
A tabular dataset of the top five years with the most votes.
发现 2016 年录得优秀剧集约 456505 票。据透露,《权力的游戏》制作了两集,促成了这个巨大的数字。《混蛋之战》获得了 181164 张选票,《冬天的风》获得了 125599 张选票。《权力的游戏》第六季一定制作了令人生畏的剧集。
Top five episodes with the most votes.
戏剧是评分最高的类型
数据集中有很多类型,比如冒险、动作、犯罪等。大多数电视节目最多有三种类型。
A horizontal bar chart showing the frequencies of each genre
戏剧是出现频率最高的类型。它在数据集中出现了 143 次。与戏剧相关的电视节目的评级概率为 0.283,高于任何其他类型的概率。
收视率最高的一集
进行的另一项分析是为了找出哪一集在《IMDb》中收视率最高。
Top five episodes based on rating
事实证明,《袭神记》第三季第 17 集 Hero 以 10/10 的评分成为无可争议的冠军。作为一个攻击泰坦的粉丝,我是高度知足的。
最常见的电视节目
一些电视节目在榜单上出现了多次,而另一些则出现了一两次。电视节目被认为是产生最佳剧集中的最佳剧集的标准之一是在数据集中有多个剧集。因此,数据集被缩短为主要包括出现次数超过三次的电视节目。
A horizontal bar chart showing the most frequent TV shows
《对泰坦的攻击》以 16 次出现在数据集上的次数再次获得冠军。《权力的游戏》以 14 次出场位居第二。第三个是黑色代码,出现了 9 次。《疑犯追踪》和《绝命毒师》分别排在第四和第五位。
新形成的数据集被进一步分析,以找出电视节目每集的平均投票数和电视节目每集的平均收视率。
A horizontal bar chart showing the most frequent TV shows’ average votes per episode
A horizontal bar chart showing the most frequent TV shows’ average rating per episode
在优秀剧集中,《权力的游戏》以每集 65673 票的成绩获得了每集最多的投票。《绝命毒师》平均收视率最高,每集 9.7800。
《权力的游戏》vs《绝命毒师》
根据上一节图形可视化中的数字和排名,可以说赢家将在《权力的游戏》和《绝命毒师》之间。
Top five episodes based on frequency
根据截断的表格,《对泰坦的攻击》在五大剧集中出现频率最高,但平均有 5154 票。这个数字远远落后于《权力的游戏》和《绝命毒师》,这两部电影的平均票数分别为 65673 票和 53357 票。
此外,在平均评分方面,它也落后于《权力的游戏》和《绝命毒师》,得分约为 9.73。《绝命毒师》和《权力的游戏》分别有 9.78 和 9.74。
《对泰坦的攻击》排在第三是准确的,因为它在数据集中有最多的剧集。这使得《权力的游戏》和《绝命毒师》成为 IMDb 最佳剧集中的两部。
当谈到《权力的游戏》和《绝命毒师》时,《权力的游戏》每集的平均票数比《绝命毒师》多,但《绝命毒师》的平均收视率比《权力的游戏》高。
决定性的因素是他们看到《权力的游戏》以压倒性优势获胜的频率。《权力的游戏》在 IMDb 收视率最高的 200 集中有 14 集,《绝命毒师》有 5 集。
总之,《权力的游戏》拥有 IMDb 最好的剧集。
用于进行这项研究的完整版本代码可以在这里 看到。
你是哪种类型的数据科学家?
当我第一次进入数据科学领域时,我在保险行业工作,那里大多数从事分析工作的人都有统计学或精算背景。
我所做的数据科学工作集中在使用统计和机器学习技术从数据中获得洞察力,例如,这些数据可以用于降低索赔成本或改善保费定价,这是我认识的其他数据科学家所做的典型工作,他们也在该行业工作。
由于这些经历,我开始将数据科学视为统计学的一种高级形式,带有编程成分。
从那以后,我换了工作,现在在一个团队中工作,其他分析角色由计算机科学或编程背景的人担任。我现在所做的工作专注于建立机器学习模型,这些模型可以部署到生产系统中,以自动化和增强手动流程。
如果我只知道第二份工作,那么我会把数据科学视为一门类似于计算机科学和软件开发的学科,以统计学为基础。
尽管数据科学的这两种定义截然不同,但它们都同样有效。
数据科学连续体
数据科学是一个新兴领域,数据科学家的角色尚未完全定义。但是,即使数据科学已经存在了几个世纪,事实仍然是,很少有职业的定义如此狭窄,以至于从事该职业的每个人都执行完全相同的任务。
数据科学可以被视为统计学和计算机科学的结合,因此,可以预期,数据科学的角色将根据这些学科对特定职位的相对重要性而有所不同。我将“数据科学家”头衔下的各种不同工作称为数据科学连续体。
在我上面描述的两个数据科学工作中,两个都是数据科学家工作的有效例子,但是第一个工作更接近数据科学连续体的统计端,而第二个工作更接近计算机科学端。
更复杂的是,不同的数据科学角色也需要不同水平的技术技能。例如,专注于特定领域的高级数据科学角色可能比入门级通才角色需要更高的技能和资格。
此外,自从数据科学家被命名为“21 世纪最性感的工作”以来,已经有很多人将自己的角色重新命名为数据科学家(例如,在 LinkedIn 上),即使他们不是;还有一些组织对他们广告的职位也是如此,要么是出于无知,要么是为了吸引更多的求职者。
例如,在我上一次找工作时,我遇到了几个我会归类为高级数据分析师的职位,它们的广告标题是“数据科学家”。我还遇到了几个明显是数据科学家角色的职位,它们以“数据分析师”的头衔出现
结果是,如果你正在寻找一个数据科学的职位,那么你需要超越职称,看看这个职位实际上涉及到什么,以及你在这个职位上需要达到的水平。
也就是说,如果你看到足够多的数据相关职位的招聘广告,某些模式就会开始出现,这使得识别各种类型的数据职位成为可能,而与职位无关。
七种类型的数据角色
在 2019 年 4 月 22 日至 2019 年 5 月 5 日期间,我从 LinkedIn 收集了 200 个数据相关角色的招聘广告(即,标题为数据科学家(100 个广告)、数据分析师(40 个广告)、商业智能分析师(20 个广告)、机器学习工程师(20 个广告)和数据工程师(20 个广告)的角色),横跨四个英语国家(澳大利亚、加拿大、英国和美国)。
我超越了“数据科学家”这个头衔的工作,考虑到了潜在的命名错误,以及不同雇主对一份工作具体要求的差异。
通过将 k-means 聚类应用于这些广告,使用选择标准作为特征,我能够将招聘广告分组为七个聚类或角色类型。
这些角色的特征如下所述,从最常见到最不常见排列如下:
角色类型#1:报告和 ETL 分析师
(24%的招聘广告被考虑,包括 10%的“数据科学家”职位)
报告和 ETL 分析师专注于提取数据,并从中生成报告和/或仪表板,但通常也负责数据库/数据仓库管理任务,如开发和维护 ETL(提取、转换、加载)管道。
**典型职位:**数据分析师或商业智能(BI)分析师。
使用的关键技术: SQL 和 Excel。
典型的学位要求:最好是计算机科学学士学位。
角色类型 2:数据科学通才
(23%的招聘广告被考虑,包括 39%的“数据科学家”职位)
数据科学通才专注于应用机器学习和统计技术来开发模型,解决业务问题并提供见解。这些角色通常在中级职位上招聘,对专业技能没有明确要求,如深度学习或自然语言处理。
**典型职位名称:**数据科学家。
使用的关键技术: Python,R 和 SQL。
典型的学位要求:统计学、数学或计算机科学学位,最好是研究生水平。
角色类型 3:洞察分析师
(15.5%的招聘广告被考虑,包括所有“数据科学家”角色的 10%)
与报告和 ETL 分析师类似,Insights 分析师专注于提取、争论和分析数据,以便提供见解并生成报告和/或仪表板。但是,他们通常不负责数据仓库或数据库的管理。
**典型职位:**数据分析师或数据科学家。
使用的关键技术: SQL,Python,Tableau,R 和 Excel。
典型的学位要求:数学或统计学学士学位是理想的。
角色类型# 4:ML 研究数据科学家
(13%的招聘广告被考虑,包括 25%的“数据科学家”职位)
ML 研究数据科学家专注于使用机器学习技术来开发和部署模型,重点是研究和开发,而不是软件工程。
**典型职位名称:**数据科学家。
使用的关键技术: Python,R,Spark。
**典型学位要求:**统计学、数学或计算机科学学位,最好是研究生水平。
角色类型# 5:ML 软件工程师
(11%的招聘广告被考虑,包括 6%的“数据科学家”职位)
像 ML 研究数据科学家一样,ML 软件工程师使用机器学习技术来开发和部署模型,但在 ML 软件工程师的情况下,重点是工作的软件工程方面。例如,一个 ML 软件工程师可能部署一个由 ML 研究数据科学家开发的模型。
**典型职位名称:**机器学习工程师。
使用的关键技术: Python 和 Tensorflow。
**典型学位要求:**计算机科学学位,最好是研究生水平。
角色类型#6:平台和仓库工程师
(9%的招聘广告被考虑,包括 1%的“数据科学家”职位)
平台和仓库工程师专注于构建数据管道,并与数据库、数据仓库和数据平台合作。他们很少参与模型开发或数据洞察的生成。
**典型职位名称:**数据工程师。
使用的关键技术: Python,云计算,SQL,Spark。
典型的学位要求:最好是计算机科学或工程学士学位。
角色类型#7:数据科学专家
(4.5%的招聘广告被考虑,包括 9%的“数据科学家”职位)
数据科学专家与数据科学通才非常相似,只是数据科学专家的重点是将机器学习和统计技术应用于人工智能/数据科学的专业领域,以开发模型等。这些角色需要自然语言处理、大数据、深度学习或计算机视觉等领域的高级技能。
**典型职位名称:**数据科学家。
使用的关键技术: Python,SQL,R,Spark,云计算。
**典型学位要求:**统计学、数学或计算机科学学位,最好是研究生水平。
这七种角色类型为第一次尝试进入数据科学或从当前数据角色中找出下一步该做什么的人提供了很好的指导。
通过将你的资质、技术技能和兴趣与每种角色类型所列的进行比较,你可以很容易地确定你目前的技能和经验最适合哪种角色类型,以及为了转换到不同的角色类型,你需要获得什么技能和资质。
针对特定类型的角色为求职提供了一个更有效的框架。这增加了你成功申请的可能性,也意味着你更有可能得到一份符合你期望的工作。
你想成为哪种类型的数据科学家?
Genevieve Hayes 博士是数据科学家、教育家、人工智能和分析专家,供职于Genevieve Hayes Consulting。你可以在LinkedIn或者Twitter上关注她。她还是 价值驱动数据科学 的主持人,这是一个每月两次的播客,面向寻求最大化其数据和数据团队价值的企业。
想要发掘企业数据的价值,但不知道从哪里开始?**下载免费的数据科学项目发现指南。
贝叶斯神经网络告诉你什么不确定性
这一次,我们将检验同方差、异方差、认知和随机不确定性实际上告诉了你什么。在我看来,这是贝叶斯深度学习中一个即将到来的研究领域,并且已经受到了亚林·戈尔贡献的极大影响。这里的大多数插图取自他的出版物。但也可以看到该领域的最新贡献之一,我们提出了一种新的、可靠的和简单的方法来计算不确定性。
作为背景,在贝叶斯深度学习中,我们有权重的概率分布。因为大多数时候我们假设这些概率分布是高斯分布,所以我们有一个均值 μ 和一个方差 σ 。平均值 μ 是我们对重量进行采样的最有可能的值。
方差可以被看作是不确定性的一种度量——但是什么样的不确定性呢?我的神经网络不确定在哪里或者我的神经网络不确定什么?
基本上,有两组不确定性,方差 σ 是两者之和。我们称它们为任意和认知不确定性。正如我们在以前的帖子中提到的,我们对预测后验概率分布 p(y|x*)* 感兴趣。但是,不幸的是,这种预测分布是难以处理的。我们需要做的是用拉普拉斯近似法对其进行近似(具体做法见本帖)并计算出期望值,即均值 μ ,及其方差 σ 。
Mean of predictive posterior probability distribution
Variance of predictive posterior probability distribution is the sum of aleatoric and epistemic uncertainty
现在让我们详细看看这两种不确定性估计。
任意不确定性
你可能已经看到了很多类似下图的图表。我们有一个观察样本,在随后的图中的黑点,我们假设有一些噪声。如果你在高中化学、生物或物理课上做过实验,你就会知道没有一系列测量是完美的。尤其是你在同一点 x 多次测量一个 y 值的时候,很少会得到完全相同的 y 不是吗?这就是我们所说的随机不确定性。噪声数据集 {x,y} 引起的观测值 y 的不确定性。
异方差随机不确定性
举例来说,将x-轴视为从早上 8 点到晚上 10 点的时间刻度,我们测量一周内的心率。我们首先在早上 8 点起床后进行测量,在你骑车 20 分钟到达办公室后的 10 点进行测量,在晚上 6 点离开办公室前进行测量。你早上 8 点的心率在一周内可能相当稳定,约为每分钟 80 次,可能在每分钟 75 到 85 次之间。但是,上午 10 点的测量值可能从 120 到 160 次/分不等,这取决于你骑自行车的速度,你每天早上的体型等等。然后,在你坐了一整天的晚上,你的心率将再次稳定在每分钟 90 次左右,也许在每分钟 85 到 95 次之间。
我刚才描述的是**异方差随机不确定性的真实例子。**对于每个观察值(x,y),我们都有不同程度的噪声。
让我们更进一步,用数学术语来定义它。我们可以说,我们的深度学习模型的输出 y 是从具有均值 μ、和方差 σ 的高斯分布采样的,其中均值μ、是依赖于权重 w 的神经网络的确定性输出 f(x) ,方差σ也依赖于权重 w 和输入 x 。提醒自己, x 不是整个数据集的输入向量, x 只是一个数据点。我们通常将整个数据集称为 X 。因此,对于每个数据点 *x,*我们可能会有不同的方差,当我们对 y 进行多次采样时,我们会识别出这些方差,范围很广。
同方差随机不确定性
另一方面,同方差回归假设每个输入点 x 的观测噪声相同。我们必须确定一个所谓的模型精度 τ 并将其乘以单位矩阵 I ,而不是使方差依赖于输入 x ,以使所有输出 y 具有相同的方差,并且它们之间不存在共方差。这个模型精度 τ 就是逆观测标准差。
认知不确定性
除了由我们有些嘈杂的数据引起的不确定性之外,我们还可能有其他不确定性,当我们建立模型时,我们实际上能够最小化这些不确定性。认知的不确定性抓住了我们对最适合解释我们数据的模型的无知。换句话说,如果我们预测分布的方差有很高的认知不确定性,作为建模者,你知道你可以做得更好。
现在让我们在这个层次上理解,并探索如何计算这些估计值。
计算任意和认知不确定性的方法
在我看来,如何计算这两种类型的不确定性是一个即将到来的研究领域。在这里,我想讨论一个由 Kwon 等人(2018) 提出的特别有前途的方法。虽然它使这两个不确定性的估计变得容易得多,但在我看来,它仍有其不足之处。
让我们回顾一下方差的基本代数公式:
方差是任何给定输出 y 和任何给定输入 y 的期望值之间的期望平方差。
这个量可以分解为任意的和认知的不确定性:
这个方程是由总方差定律的一个变种得到的。这是一个很大的进步,这里需要进行大量的数学重构。知道富比尼定理已经很有帮助了,但是完整的证明可以在 Kwon 论文的附录 A 中看到。我建议你浏览一遍,但是如果你不能遵循所有的步骤,不要太麻烦。
让我们慢慢地通过这个等式来理解它实际上代表什么。首先,让我们检查一下包含的所有参数和术语:
- ω是我们的权重 w 的所有可能值的空间,表示为w∈ω。
- diag 是对角矩阵。对角矩阵的对角线上有元素,其他地方都是零。如果这个对角矩阵是权重的方差-协方差矩阵,我们将没有协方差,只有方差。
- E[ y* ]是输入 x的期望输出。仔细考虑其不同的指标:我们可以基于难以处理的预测后验分布 p(y|x,w),或基于之前已经针对参数 θ 优化的变分预测后验分布 q(y|x,w)* 得到 y* 。
- q(w) 是逼近难处理后验分布 p(w|D)的变分后验分布。
任意不确定性
变分后验分布预测方差的第一项
是任意的不确定性。我们首先有期望输出的对角矩阵 y* ,基于棘手的预测后验分布 p(y|x*,w)。我们从中减去一个矩阵,该矩阵是基于棘手的预测后验分布 p(y|x,w)* 及其转置的期望输出 y* 的乘积。然后,将该整个构造乘以变分后验分布,并在权重空间ω中对权重 w 进行积分。
之前,我们区分了异方差(每个输入不同)和同方差(每个输入相同)随机不确定性。我们在这里使用的术语可以针对每个输入进行计算(以获得异方差不确定性)或作为所有输入的平均值(以获得同方差不确定性)。
正如你可能已经猜到的,由于积分的原因,这一项很难精确估计。现在最有趣的部分来了:我们如何估计它? Kendall & Gal (2017) 提出了一种简化方法,但是 Kwon 等人(2018)讨论了这种方法用于分类的缺陷,并提出了另一种方法:
让我们跟随他们的思维过程来理解他们是如何想出这样一个估计量的。
核心变化是取代
随着
我们可以这样做,因为 Softmax 生成的向量将概率作为元素,因此通过重复此计算 T 次来计算预测分布的可变性。对角矩阵减去另一个矩阵,该矩阵是 Softmax 生成的向量乘以其转置。
此外,我们用一个和而不是一个积分来使它易于处理,并且不用和乘以变分后验分布,我们通过将它除以 T. 来计算平均值
这为我们提供了来自数据集的输出可变性的平均值。因此,它可以被视为从数据集的可变性演变而来的不确定性。
认知不确定性
变分后验分布预测方差的第二项
是认知的不确定性。我们有和任意不确定项完全相同的替换,但是增加了一个。
这里,我们基于具有参数 θ 的变分分布 q(y|x*)* ,用 T 个样本的 Softmax 生成向量的平均值来替换预期结果 y* 。然后,我们用这个平均值减去 Softmax 生成的向量,并通过用这个减法乘以它的转置来构造一个矩阵。
当然,为了便于处理,我们还是用和来代替积分。
这给了我们来自模型的输出的可变性的平均值,并且与验证准确性成反比。
可视化结果
这些技术实现起来相当简单,特别是对于计算机视觉设置中的二进制分类任务。让我们来看一个生物医学图像的例子,准确地说是人脑的核磁共振成像记录。
我们在这里计算了异方差的任意性和认知不确定性。回想一下,异方差意味着每个输入都有不同的不确定性。在图像分析中,输入是像素。下图对 Kwon 等人(2018 年)的方法和 Kendall & Gal (2017 年)的方法进行了对比。
P is the method by Kwon et al (2018), K is the method by Kendall & Gal (2017)
我们还可以比较一些数据点的同方差随机不确定性和认知不确定性:
The brighter the area, the more data points are accumulated in this area.
我们还可以计算平均同方差随机不确定性和认知不确定性,但这些数字并没有给我们太多的洞察力:
For the data sets SISS and SPES
Softplus 标准化
我和几个同事对这些不确定性的估计也有了新的进展:https://arxiv.org/abs/1806.05978
这里,我们通过用 Softplus 函数替换 Softmax 函数并使其输出正常化,绕过了在输出层实现附加 soft max 函数的瓶颈。我们可以将这种不确定性估计写成:
这样做的可怕后果是,不管模型如何,我们每个数据集都有恒定的随机不确定性,因为随机不确定性完全取决于数据集。尽管如此,这是以前发表的方法无法实现的。
另一个有趣的结果是验证准确性和认知不确定性之间的相关性:
随着验证准确性的提高,认知不确定性降低。这是合乎逻辑的:我们的模型预测的标签越正确,它就越确定。
要了解我们是如何实现的,请查看我们的 GitHub repo 。
结束语
如前所述,对预测方差实际上告诉我们什么的整个探索是一个非常先进的研究领域,并将给我们很多关于我们的深度学习模型如何变得越来越好的见解。让自己了解该领域的最新研究,这些方法可能对你的应用非常有帮助,因为不确定性的测量和不确定性来源的测量在任何方面都与决策有关。
这些不确定性有助于神经空间做出决定。看看它们是如何在其演示中实现的,并看看 NeuralSpace 还在做些什么。
我们能从美国 400 年的处决中学到什么
重磅内容警告:我讲的几乎都是令人不安的。
—
乔治·肯德尔站在一群男人面前,他们拿着长长的德国式手枪指着他的胸口。他可能穿着一件白色亚麻长衬衫,塞在他的马裤里,用一条精致的蕾丝领带装饰他的脖子。一听到信号,他的刽子手们就会将灼热的金属丝塞入他们 16 英寸的铁桶,从而释放出他们重型武器内部的火药。肯德尔,一个在新殖民地弗吉尼亚富有且有影响力的人,犯了叛变罪和为西班牙皇室做间谍。他将是第一个在现在的美国使用西方处决方式被处决的人。
尽管各州的大量研究表明执行死刑比“终身不得假释”更昂贵,汉谟拉比式的复仇仍然在这个北美超级大国盛行。我想知道我们是如何走到今天这一步的,我们从哪里开始的,以及今天的死刑是什么样子的。
请注意我的局限性和盲点:我不是死刑专家,也根本没有资格在我出生的国家写这个主题的种族色彩。作为一名数据科学家和训练有素的硕士级经济学家,我有研究经验。我有资格查看数据并得出见解。我使用公开的数据集开始了我的研究(见参考文献)。从这些资料中挖掘见解后,我寻找其他历史和新闻来源来理解我所看到的模式。我学到了一些东西。
处决时尚,死刑时尚
自 1608 年新生的英国殖民政府弗吉尼亚用行刑队枪决乔治·肯德尔以来,该州“执行”死刑的方法并没有太多变化,而是受制于每次持续几十年或几个世纪的时尚潮流。
Data sources: [1] and [2]
伴随着英国的惩罚而来的是方法。其中一些方法实际上是中世纪的。从英国传入的最早的殖民处决方法之一是“绞刑”,或“用锁链绞死”,一个人被穿上某种定制的金属衣服,有时还活着,然后展示给每个人看和闻。英国人认为这太可怕了,所以必须阻止犯罪(没有!).
The Gibbet. You get the idea.
最严重的判决没有得到公平的处理。即使是乔治·肯德尔,第一个被处决的弗吉尼亚州人,也因为他的社会地位(绞刑是为更“卑微”的人准备的)而免于被套索套在他的领带上。众所周知,绞刑令人毛骨悚然——如果处理不当(这种情况经常发生),一个人可能会被吊死几十分钟。那么,在这片他们被视为不如人的土地上,来自非洲的侨民能期望得到什么样的待遇呢?
现在美国所在的地区是除英国以外的欧洲国家的殖民地。法国在今天的路易斯安那州的密西西比河上有一个殖民地。法国人带来了一种叫做“车轮上的断裂”的处决方法,这是一种绝对可怕的死法,我甚至不会描述它。法国路易斯安那州政府这样做了 11 次,相当于当今美国车轮断裂死刑的 92%(纽约在 1712 年处决了一名开车的白人)。
Source [5]
更糟糕的是,从 1730 年到 1748 年,路易斯安那州 100%的可怕的车轮断裂处决都是在被奴役的非洲移民身上进行的,尽管被奴役的人可能只占当时人口的 65%,而且在同一时期同一地区完全没有白人被处决。很明显,处决,更确切地说,打破车轮的方法,是一个残酷的社会“威慑”有关其“财产”的犯罪的特殊方式。
1754 年,在法国和印第安人战争开始时,打破轮子的方法有了短暂而最终的复兴,当时三个不知名的白人被判死刑。他们一定是做了什么坏事才在路易斯安那州使用那种方法。
Data source [2]
不幸的是,这并不是唯一对非裔美国人特别的方法。29 个人,有些在记录中没有名字,有些只有一个名字(比如杰克,1825 年,在 1825 年一个炎热的八月的一天被处决,或者蒙克,他在 1791 年 2 月 9 日被政府处死),被“烧死”,这不需要更多的细节,因为这个词本身就说明了一切。这似乎为现在美国的死刑定下了基调。
这些方法即使以现代的标准来看似乎也有点可怕,而且随着新美国的建立,它们基本上已经过时了。今天我们更熟悉的其他方法有更强的持久力。数百年来,绞刑一直是最受欢迎的方法,直到另一种看起来更“无痛”的方法出现。
据说,索思威克博士在看到一个无家可归的人触摸发电机时,萌生了用电刑执行死刑的想法。索思威克看着那个人倒在地上。这位医生凭借其对第三方疼痛观察的高超能力,认为这是一次“无痛”死亡,因此,美国最新形式的死刑诞生于纽约布法罗的一名闲逛的牙医(是的,索思威克医生是一种牙科医生)。
电椅并不是托马斯·爱迪生吹捧的人道处决奇迹。他在美国巡回演出时,在来看他的人群面前电击流浪动物致死,以此来推广这一理念(是的,他做了这个)。这种惩罚听起来像是来自 1975 年的一部糟糕的恐怖电影——众所周知,不幸被判死刑的罪犯会着火,死时会散发出烧焦的肉味,而且通常比本应迅速杀死他们的“简单的两次摇晃”要多。
The electric chair that Ted Bundy was executed in in the state of Florida.
最后一种也是最常见的死刑方式是注射死刑,1977 年在俄克拉荷马州首次使用。一系列的化学物质被注射到死刑犯体内,直到他们死去,理论上,这应该在五分钟内无痛杀死他们。不幸的是,一些拙劣的处决 花费了长达两个小时,混淆药物顺序导致一些死刑犯感到极度痛苦,但却瘫痪了,因此他们无法表达出哪里出错了(这听起来像是 2018 年的恐怖电影)。更糟糕的是,进行这些注射的人没有经过医学训练,因此更容易犯这样的错误。医生不能执行死刑——以这种方式伤害一个人将违背医生的希波克拉底誓言。
从《美国旁观者》的镜头来看,致命注射看似愚蠢的本质,与它的痛苦和残酷的可怕现实相提并论,可能给了索尼娅·索托马约尔存在主义的停顿。正如她在《T4》阿瑟·v·邓恩的《致命注射》中所写的:
“各州已经设计了注射死刑的方案,目的是保护他们自己的尊严,但是他们不应该被允许在官方和公众面前掩盖死刑的真正恐怖。”
尽管注射死刑似乎是唯一一种死刑,只要死刑还在继续,这种死刑就会持续下去,但是执行死刑所必需的药物却很难得到。这导致弗吉尼亚、阿拉巴马和田纳西等州通过法律,允许因注射致命药物的问题而执行电椅死刑。
然后是屡试不爽的行刑队,这是美国殖民地第一次执行死刑的方法,也是今天仍在使用的唯一方法(罗尼·李·加德纳是最近的一个,2010 年)。行刑队的方法与第一次弗吉尼亚处决相同,可能有一种古老的感觉。但是正如我们从拙劣的恐怖和致命注射的一般管理中了解到的那样,我们必须问自己:在第 14 修正案中,我们关心的是对死刑犯的残酷惩罚还是对旁观者的残酷惩罚?正如大法官索尼娅·索托马约尔在亚瑟诉邓恩一案中所说,
“除了几乎瞬间死亡之外,开枪致死也可能相对没有痛苦。……从历史上看,行刑队执行拙劣的死刑要少得多。”
死亡的高峰和低谷
美国死刑的故事是一个衰落、流动、解散和重新建立的故事。尽管死刑是从英国引进的,但它的应用和终结并没有随之而来。在 20 世纪上半叶(1900 年至 1949 年),英国执行死刑的人数比美国少 89%,当时两国都有死刑。更重要的是,英国在 20 世纪 60 年代废除了死刑并且一直有效。现代美国废除死刑只持续了十年。
在美国,死刑执行在 1935 年达到顶峰,有 197 起州政府批准的死刑。如果没有第二次世界大战和可怕的大屠杀的发现,1935 年可能只是另一个较小的高峰,在不断增长的人口中,国家批准的死亡越来越多。1948 年,联合国走到一起,打造了一种新的道德——一种“生命权”虽然世界上大多数国家并没有实现这项法令(在世界范围内废除死刑)的厚望,但它确实成为了美国的一个转折点。第二次世界大战后,死刑数量急剧下降,标志着人们对杀人作为一种可接受的惩罚形式的看法发生了道德转变。
Data: [1] and [2]
这种关于死刑的观点的下降与 1967 年最高法院对弗曼诉佐治亚州案的判决5-4 的意识形态转变相一致。这一裁决后,美国不再通过死刑判决。
在弗曼中,威廉·亨利·弗曼,一个的黑人在试图破门进入一户人家时开枪打死了他的受害者。大法官在该案中的意见强调了处决种族和经济上受压迫的个人是如何违反宪法的——第 14 修正案保护公民免受“残酷和不寻常的惩罚”道格拉斯法官解释道:
“……我们知道,法官和陪审团在判处死刑时的酌处权使得死刑能够有选择地适用,如果被告贫穷、被人鄙视、缺乏政治影响力,或者如果他是嫌疑人或不受欢迎的少数群体的成员,就会助长对被告的偏见,而那些由于社会地位而可能处于更受保护地位的人除外。”
弗曼和他衣服上所有不太出名的人都是黑人,这是很恰当的;正是由于意识到死刑在种族上的不平等,死刑的执行受到了公平的审视。从广义上讲,现代的死刑问题是一个种族问题。1986 年,一位名叫麦克莱斯基的起诉人向最高法院展示了在一项名为巴尔杜斯研究的实证研究中,佐治亚州的非裔美国人是如何被不成比例地判处死刑的。在对佐治亚州的 2000 多起凶杀案进行分析后控制了 200 多个变量,该研究报告称,杀害白人的黑人中有 11%被判死刑,而杀害黑人的白人中只有 1%被判死刑。最高法院的大多数意见并不完全反对这项研究,他们只是发现
“……巴尔杜斯的研究“未能对麦克莱斯基的主张做出任何有价值的贡献。”
5 比 4 的决定不是在指定的政党路线中做出的。三名民主任命的法官中有两名(白人)同意多数人的意见。四个反对意见中的三个是由共和党总统任命的。
Sources for data: [1] (top) and [4] (bottom)
在 1977 年死刑再次活跃起来后,它的攀升又开始了,死刑的支持率也是如此,在 1994 年达到了 80%的历史最高水平。但是在世纪之交,发生了一些事情,使它再次下降。在 20 世纪 80 年代末和 90 年代初,DNA 证据成为了全国法庭上客观性的革命性工具。随着 CODIS(联合 DNA 索引系统)的出现,该国第一个拥有 DNA 信息的国家数据库,被错误定罪的重罪犯第一次有了真正的机会获释并被免除罪行。这再加上不断变化的舆论潮流和不断变化的法律,使得无辜的人从死囚区被释放出来。从 1973 年开始,一系列的免罪证明开始了,到今天将会增长到 166 个,许多都是在 DNA 技术的帮助下。
1998 年,在越来越多的对处决无辜者的关注中,第一次在芝加哥附近举行了全国错判会议。一年后,处决人数达到了现代史上的最后一次高峰。
南方是执行死刑的地方,德克萨斯州走在了前面
自 1608 年以来,南方一直是死刑的发源地。当英国殖民者开始占领并扩张到我们现在称之为北美的土地上时,他们首先在我们称之为弗吉尼亚(以英格兰的“处女女王”伊丽莎白一世的名字恰当地命名)的地区取代土著人。弗吉尼亚是一个南方的州,因此可以推断,殖民时代的死刑主要发生在南方,直到 18 世纪。同样,南方将领导我们现在称之为“西部”和“中西部”的地区,这些地区直到 19 世纪还没有被占领、被窃取、被殖民、被购买、或所有这些的混合。
Data: [2]
然而,这种模式一直延续到现代。在过去 20 年里,处决人数最多的 10 个州中有 7 个位于南方。这可能有很多原因。从严格的统计角度来看,南部仍然是最常见的执行死刑的地方,因为截至 2019 年,南部每个州仍在执行死刑,而许多北部和西部的州要么宣布死刑违宪,要么州长下令暂停执行死刑。至于为什么韩国没有宣布死刑为非法,我的猜测是围绕死刑的价值观和信仰是基于地区的。
Data: [1]
如果我们必须孤立一个州,那么自 1977 年恢复死刑直到 2004 年左右,德克萨斯州显然是整个国家死刑执行率的驱动力。他们不仅处决的人比其他任何州都多,而且处决罪犯的速度也很快。
得克萨斯州在死刑方面领先有几个原因。首先,他们没有公设辩护人制度。这意味着请不起律师的人可以得到法院指定的律师,而这些律师可能对这类案件没有经验。其次,德克萨斯州在 1995 年通过了一项法律,加速了定罪和执行之间的过程。第三,德克萨斯州的上诉法官是选举产生的官员,他们更密切地关注该地区的政治,这意味着他们可能会更经常地开展“严厉打击犯罪”的运动,并且必须以一种被任命的法官所不具备的方式来兑现这些承诺。
Data: [1] and [2]
也有人猜测,德州的死刑制度在某种程度上是高效的,其他州将来也可以实现。这种观点认为,这并不是因为德州做出了更多的死刑判决,而是因为他们更擅长执行死刑。
总而言之
理论上,我们在改变以人道方式处决人的方式方面已经取得了很大进展,但是普通的方法并不是最人道的。目前实际上最“人道”的方法(如果可能的话)可能是第一种:行刑队。我绝不是第一个这么说的人,最高法院已经公开讨论过这个问题。
在过去的一个世纪里,美国被执行死刑的人数大大减少了,但是我们仍然生活在一个自殖民时代以来就不公平对待死刑的体系中。尽管各州花费更多的钱来杀死罪犯而不是让他们活着,死刑仍然存在,而且在一个特定的地方(主要是南方,甚至更多的是德克萨斯州)被处决的人数似乎是由文化驱动的。死刑问题在很大程度上似乎是一个种族问题。
鉴于我们对即使是现代的死刑执行方法会有多么痛苦有着丰富的知识,执行死刑要花费大量纳税人的钱,而且进步国家没有死刑,我觉得美国处决罪犯是令人惊讶的。
参考资料:
- 【1】死刑信息中心(通过 Kaggle
- [2]来自 ICPSR 的 Espy 文件:
Espy,M. Watt,和约翰·奥提兹·斯迈克拉。美国的死刑执行,1608-2002:ESPY 文件。ICPSR08451-v5。密歇根州安阿伯市(Ann Arbor):大学间政治和社会研究联合会(Inter-university Consortium for Political and Social Research)[分销商],2016–07–20。http://doi.org/10.3886/ICPSR08451.v5 - [3]来自时间分析的 Dict 助手和 Git 上的源代码
- [4]盖洛普死刑支持率
- [5] 美国的地平线:全球背景下的美国历史
ROS 的内容、原因和方式
人类一直对机器人着迷,无论是雷奥纳多的机械狮子 还是 特克 。我们总是试图建造与我们或我们周围的自然生物相似的东西。
The Turk
机器人是能够感知环境(即其周围环境)(使用传感器)、基于环境状态做出决策(使用计算和算法)并能够执行生成的指令(使用致动器)的任何系统。
这些传感器和执行器并不理想,因此会给系统带来很大的不确定性。因此,我们永远无法知道系统的实际状态是什么,因此我们永远无法知道机器人的确切位置,或者使用致动器施加相同的力是否会导致相同的运动。这将随机性引入到系统中,使得与现实生活中的机器人一起工作变得极其困难。再加上环境中其他因素(如人类和动物)看似不可预测的运动,你就有了一个非常棘手的问题。
Robotic System
我们如何解决这些问题,更不用说开始解决它们了?我们需要一些系统作为传感器和执行器之间的桥梁。这是一个决策过程或一系列步骤,系统必须遵循这些步骤来实现预期的结果。这些步骤被称为算法,可以被认为是机器人的大脑。
为了建造一个复杂的机器人,我们需要各种各样的传感器,例如,为了建造一辆自动驾驶汽车,我们需要激光雷达、相机、惯性测量单元、全球定位系统等。这些系统可以由不同的公司制造,并且可能遵循非常不同的方法。因此,缺乏统一性。此外,一些算法在机器人系统中非常常用,如卡尔曼滤波器、PID 控制等。如果每个人都重写相同的算法,可能会导致不必要的时间和精力浪费。更别说这些程序的质量(就软件工程实践和计算效率而言)不会很好。
来自描述 ROS 的论文的作者[2]:
为了应对这些挑战,包括我们在内的许多机器人研究人员之前已经创建了各种各样的框架来管理复杂性并促进实验软件的快速原型制作,从而产生了目前在学术界和工业界使用的许多机器人软件系统
。这些框架中的每一个都是为特定的目的而设计的,可能是为了应对其他可用框架的弱点,或者是为了强调设计过程中最重要的方面。[2]
因此,需要一种系统来消除这些不必要的开销,以便世界各地的研究人员能够更好地做出贡献,解决机器人系统带来的难题。我们需要协议将数据从系统的一部分传输到另一部分,我们需要统一的实践和工具来构建我们的软件,我们需要预先编写的库来避免兼容性问题。ROS 就是这样一个系统,它为我们提供了规则和标准的方式来组织我们的东西,这样我们就可以大规模地合作,并在事物之间保持某种一致性。
ROS 是什么?
ROS 不是一个操作系统,而是一个元操作系统,这意味着它假设有一个底层操作系统来帮助它执行任务。但是什么是操作系统呢?操作系统没有明确的定义。通常,操作系统由操作系统提供商提供的所有东西组成。
Working of ROS
原论文中 ROS 的定义[2]:
开源机器人操作系统 ROS。ROS 不是传统意义上的进程管理和调度的操作系统
;相反,它在异构计算集群的主机操作系统之上提供了一个结构化的通信层。[2]
操作系统是在应用程序和硬件之间提供接口的软件。它处理诸如内存、处理器时间等资源的分配。通过使用调度算法并记录不同用户的权限,从而提供一个安全层。操作系统可以包括基本应用程序,例如网络浏览器、编辑器、系统监控应用程序等。它几乎总是有一个称为内核的低级程序,帮助与硬件接口,本质上是任何操作系统最重要的部分。操作系统可能提供也可能不提供图形用户界面。
在理解元操作系统之前,我们需要理解什么是库和框架。库本质上是在软件/程序中广泛使用的函数组,其流行程度足以证明将它们打包到单独的文件中是合理的。库也被用来使软件看起来更整洁,并建立在经过测试的软件之上,从而减少出错的机会。这并不意味着你不能建立自己的库,但这里我们指的是常用的库。框架本质上是可用于特定应用的库的集合。
API 是一个应用程序编程接口。如果你有一些代码,并且你想在不知道所有代码的情况下使用它,你可以使用 API。API 提供了一个抽象层,并提供了对底层代码的访问。这在处理项目时非常有用,因为我们可以很容易地使用同行评审过的、彻底测试过的代码(库、框架等)。)而不必担心它可能如何工作。
元操作系统具有大量的功能,以至于它不能被归类为一个框架或一组库,但也不能被归类为操作系统。它既提供操作系统的功能,也提供框架的功能,但并不全面。因此,它不能被归为任何一类。例如,它不提供操作系统应该提供的核心功能,但提供 API。
Linux 操作系统
ROS 依赖于底层操作系统。ROS 要求操作系统具备很多功能。此外,ROS 必须对大量用户免费开放,否则大量用户可能无法访问它。ROS 的流行很大程度上是由于它的开放性和对大众的易获得性。它还需要一个开放源代码的操作系统,这样操作系统和操作系统就可以根据应用程序的要求进行修改。
Windows 10 和 Mac OS X 等专有操作系统可能会限制我们使用它们的方式。这可能会导致开发过程中的僵化,这对于 ROS 这样的行业标准来说并不理想。因此,大多数人更喜欢在 Linux 上运行 ROS,特别是 Debian 和 Ubuntu,因为 ROS 对基于 Debian 的操作系统,特别是 Ubuntu 有很好的支持。这并不意味着 ROS 不能在 Mac OS X 或 Windows 10 上运行。但是支持是有限的,人们可能会发现自己处境艰难,几乎得不到社区的帮助。
操作系统和操作系统之间有着紧密的联系,以至于为了使用操作系统,有必要了解更多的操作系统知识。作为一个新手使用 Linux 可能是一个挑战,一个人肯定会遇到 Linux 的问题,尤其是在使用 ROS 时,对 Linux 的良好了解将有助于避免/修复这些问题。
由于某些驱动程序不匹配(看着你 NVIDIA ),我个人不得不多次重新安装我的操作系统,依赖性破坏的问题已经导致我陷入严重的生存危机。为了避免这种情况,我整理了一个在关键时刻拯救生命的链接列表。
如上所述, NVIDIA 驱动程序与 Linux 不太匹配。英伟达没有为 Linux 提供官方驱动程序,所以人们黑掉了英伟达的卡,对驱动程序进行了逆向工程,建立了一个叫做的东西。但是 NVIDIA 知道这些,长话短说,这些和 NVIDIA 显卡不太搭。但是 NVIDIA 确实提供了一些你可以使用的驱动,它们很可能会工作(一切顺利!).
使用 ROS 还有许多其他常见错误。但是要理解这些,我们必须理解软件包在 Linux 中是如何安装的。这是一个有趣的话题,值得多篇博客来讨论,但是我们在这篇博客中只是简单地介绍一下。
要在 Linux 中安装任何软件或库,我们需要一种叫做 repos(仓库的缩写)的东西。这些是由组织提供的官方服务器,用于促进软件的分发。这些包存储在它们的服务器上,您可以通过使用包管理器或手动过程来获得它们。默认情况下,只有一定数量的回购,由包管理器为所请求的包进行搜索。但是当然,我们不能在一次回购中拥有所有的产品包。因此,我们需要多个回购,因为每个人都不需要每个回购,所以只包括有限数量的回购是有意义的。
How package manager works
但是如果我们想从不同的仓库下载软件包呢?我们必须将它们添加到要搜索的回购列表中。这个系统保护 Linux 免受病毒的侵害,因为所有的软件都来自可靠的来源,其中一个是病毒的可能性很小。但是,如果你添加了自己的回购,那么你将对后果负责。因此,当你从 ROS 下载软件包时,你需要提供 GPG 密钥,以确认这个回购确实是安全的。下面是我们的第一个错误“ gpg 键错误”,这个博客可以帮助你更好的理解 gpg 键并解决这个错误。
一些软件包可能不适用于当前版本的操作系统,比如说 Ubuntu 16.04 可能有一些过时的软件包,或者你可能需要一些只在某些网站上可用的软件包。这可以通过 PPAs 或个人包存档来完成。这可能会导致很多错误,因此我们需要一个 ppa 管理器来帮助我们导入密钥,如果需要的话,这就是 Y-PPA 管理器的用武之地。
最常见的错误之一是 dpkg 错误。dpkg 或 debian package 是一个软件包管理器,位于 ubuntu 软件包管理器(如 apt)的后端。问题是,它一次只能安装一个包,因此锁定了它的使用。因此,如果你试图安装多个包,它可能会抛出 dpkg 错误。
尽管 Ubuntu 附带了许多预装软件,其中一些非常有用,但有时可能需要安装提供更好替代方案的软件。以下是我使用的一些软件。这是一个非常好看的包装器,让 bash 看起来更好,并提供了一些额外的功能。 Sublime 是我最喜欢的文本编辑器之一,它的界面和提供的快捷方式极其方便。你可能还想安装 chrome 。
积木
在 ROS 中,一切都以包的形式存在。这有助于以更易于维护的方式打包代码。ROS 提供了很多现成的包。ROS 包可以通过以下方式安装
**sudo apt install ros-<distro>-<package-name>**
例如,在 ROS kinetic 上,robot_localization 包将安装为:
**sudo apt install ros-kinetic-robot-localization**
关于包装的更多信息,请参见本页:
ROS 中的软件被组织在包中。一个包可能包含 ROS 节点,一个独立于 ROS 的库,一个数据集,配置文件,一个第三方软件,或者任何其他逻辑上构成一个有用模块的东西。这些包的目标是以一种易于使用的方式提供这种有用的功能,以便软件可以很容易地被重用。一般来说,ROS 包遵循一个“金发女孩”原则:足够的功能是有用的,但不要太多,以至于包太重,难以从其他软件中使用。
包中的一些重要文件/目录是:
1.节点:节点节点是执行计算的进程。
2。CMakeLists.txt :它是 CMake 构建系统的输入,用于构建软件包。
3。 Package.xml :它定义了关于包的属性,比如包名、版本号、作者、维护者以及对其他柳絮包的依赖。
4。。yaml 文件:运行 rosnode 可能需要很多参数,例如 PID 控制中的 Kp、Ki、Kd 参数。我们可以使用 YAML 文件来配置这些。
5。启动文件:为了在 ROS 中同时运行多个节点,我们使用启动文件。
任何将要编写的代码都应该是包的形式。并且包应该在工作空间内。更多信息请参见这一页。
**一个柳絮工作空间是一个文件夹,您可以在其中修改、构建和安装柳絮包。它可以包含多达四个不同的空间,每个空间在软件开发过程中扮演不同的角色。
1。源空间包含了柳絮包的源代码。在这里,您可以提取/检出/克隆您想要构建的包的源代码。源空间中的每个文件夹包含一个或多个柳絮包。**
2.构建空间是调用 CMake 来构建源空间中的柳絮包的地方。CMake 和柳絮在这里保存它们的缓存信息和其他中间文件。
3.开发空间(或开发空间)是在安装之前放置构建目标的地方。目标在开发空间中的组织方式与其安装时的布局相同。这提供了一个有用的测试和开发环境,不需要调用安装步骤。
4.一旦构建了目标,就可以通过调用安装目标(通常使用 make install)将它们安装到安装空间中。
当我们运行我们的 rosnodes 时,它们执行计算并获得结果。但是它们可能需要来自其他节点的结果,以便执行一些其他功能。因此,我们需要一种机制来帮助我们将数据从一个节点传输到另一个节点。我们需要做的第一件事就是设置一个 ROS 主机。
The ROS Master
ROS 主机为 ROS 系统中的其余节点提供命名和注册服务。它跟踪主题以及服务的出版商和订户。主节点的作用是使各个 ROS 节点能够相互定位。一旦这些节点相互定位,它们就相互进行对等通信。
数据的传输是通过主题进行的。如果你想发送你的数据,你可以将它发布到主题,任何需要的人都可以通过发布者订阅它。这有助于编写代码,甚至在我们使用 ROS 包时更有帮助。当我们想记录一些数据时,ROS 包很有帮助,所以我们可以稍后播放它,如果我们想复制一个行为。
Topics and services
主题是命名的总线,通过这些总线节点交换消息。主题具有匿名的发布/订阅语义,这将信息的产生和消费分离开来。一般来说,节点不知道它们在与谁通信。相反,对数据感兴趣的节点订阅相关主题;生成数据的节点发布到相关主题。一个主题可以有多个发布者和订阅者。
服务是另一种形式的交流。它们用于远程程序调用。即,一个程序可以从位于另一台计算机中的程序请求服务。传输的数据是以消息的形式,这是在 ROS 中使用的特别定义的数据类型。我们要看的最后一种沟通类型是行动,它们类似于服务,但长期目标可以被抢占,即可以被要求改变。
actionlib 包提供了创建服务器的工具,这些服务器执行可以被抢占的长期运行的目标。它还提供了一个客户端接口,以便向服务器发送请求。
工具
一旦我们准备好所有的代码并运行,我们需要测试我们的代码,这样我们就可以在必要的时候进行修改。在真实的机器人上这样做将会很昂贵,并且可能导致每次设置机器人时浪费时间。因此我们使用机器人模拟。与 ROS 一起工作的最流行的模拟器是 Gazebo 。它有很好的社区支持,它是开源的,在它上面部署机器人更容易。
NASA’s robot in gazebo
机器人将安装不同的传感器和致动器,幸运的是我们可以在凉亭找到许多这样的传感器和致动器,或者我们自己建造它们,这可能需要很长时间,但仍然不是很困难。在运行这些传感器时,我们可能需要可视化它们的数据。为此,我们使用了 RViz 。
moveit in rviz
RViz 是 ROS 的 3D 可视化工具。它是最流行的可视化工具之一。它接受一个主题作为输入,并基于要发布的消息类型将其可视化。它让我们从机器人的角度看环境。
其他资源和结论
ROS 极其复杂,因此对新手来说有些难以理解。让 ROS 对人们来说很难的是这个人需要具备的大量先决知识。由于大多数初学者没有这方面的知识,他们发现很难掌握 ROS。
这包括对 Linux 的良好了解和对计算机工程原理的良好理解,包括网络概念和软件工程哲学。ROS 主要基于广泛流行的、经过测试的工具和技术,例如 rqt 就是从 qt 派生出来的。Gazebo 和 stage 在与 ROS 和柳絮集成之前就已经很流行了,是基于 CMake 的。
让事情变得更复杂的是,只有几个好的在线资源。写了很多书,但对新来者几乎没有帮助。我发现《ROS 简介》这本书非常有用,因为它简明扼要,可以帮助我入门。《用 ROS 编程机器人:机器人操作系统实用介绍》这本书很好地概述了不同的东西在 Ros 中是如何工作的。人们还推荐“ ROS Robotics By Example ”。不同工具的很多用法可以在 wiki 上找到,如果你有困难,可以去论坛看看。
我希望这篇博客能帮助你更多地了解 ROS,现在你明白它的用处了。但是 ROS 是在 2007 年推出的,它是为特定的用例设计的。从那以后,发生了很多变化,我们看到了人工智能研究的复兴和用例数量的增加。机器人技术在大众中变得越来越受欢迎,尽管 ROS 很好地应对了这些挑战(尽管它不是特意设计的),但它需要大量的黑客。
因此,我们要求对 ROS 进行改革,使其能够应对这些新的挑战。ROS2 就是这样一个项目,它的开发是为了让 ROS 可以在其他操作系统上使用,比如 Windows,并且可以支持更多种类的硬件(比如嵌入式系统)。它还应该对强化学习和多机器人系统有更好的支持。
还提供了附带的演示文稿和 Youtube 视频:
[1] 克莱默、詹姆斯和马蒂亚斯·舍茨。"自主移动机器人的开发环境:综述."自主机器人 22.2(2007):101–132。 【2】奎格利、摩根等人《ROS:一个开源的机器人操作系统》。开放源码软件 ICRA 研讨会。第三卷。№3.2.2009.
什么,为什么,以及如何阅读经验 CDF
鼓励探索性数据分析(EDA)来获得数据的可消化的一瞥。这包括汇总统计的直方图:
和散点图来确定数据中特征的相关性。
Scatter plot comparing the Economic Summary Index of Countries with their Size of Government.
但是有一个汇总统计可视化,我是在探索了 Datacamp 的统计思维课程之后才知道的。它被称为经验累积分布函数(试着说快 10 倍…我们简称它为 ECDF)。
在本帖中,我们将探索什么是 ECDF,为什么要使用它,以及我们可以通过使用由#改头换面星期一的人们提供的世界经济自由数据集从中获得的见解。这些数据也被用来制作上面的图。用于这些图表的代码和 excel 文件的副本在这个 Github Repo 中。代码没有包含在这篇文章中,所以你可以把注意力放在视觉效果上并解释它们。
那么什么是经验积云呢?什么是 ECDF?
ECDF 是累积分布函数的估计量。实际上,ECDF 允许您按照从少到多的顺序绘制数据的要素,并查看整个要素,就像分布在整个数据集中一样。让我们看看帖子中上面的 ECDF 图表。
这里我们可以看到各国经济自由度综合指数的差异(2015 年)。这张图表可以为我们提供一些关于这些国家经济表现的统计摘要。一个快速的洞察是指数的范围从略低于 3 到 9(范围大约为 6)。所以没有一个国家有完全的经济自由。
听起来很棒!但是我如何阅读 ECDF 来获得这些汇总统计数据呢?
一开始我读起来也有困难,但它比你想象的要简单。我得到的解释对我来说还不够。然后我想一定有类似的东西我可以使用,类似于 ECDF,可以提高我的理解。让我通过高斯(正态)分布为你们提供这个支架,你们可能更熟悉。
Gaussian Distribution. Image from etfhq.com
如果你熟悉高斯分布,我来问你这个问题。数据点小于平均值的百分比是多少?如果你回答了 50%,那么你就对了!
ECDF 可以用类似的方式来阅读!例如,汇总指数低于 6 的国家比例是多少?在 x 轴上看向 6,然后垂直移动,直到碰到曲线。你得到了大约 20%。因此,大约 20%的国家的综合指数低于 6。所以他们有一些经济自由。
这是 2014 年的另一张 ECDF 图,数据相同。
ECDF of the Countries’ Economic Summary Index in 2014.
试着用上面的图表回答下列问题。我会把答案写在问题下面。
1.汇总指数低于 6 的国家百分比是多少?
2.综合指数低于 8 的国家的大约百分比是多少?
答案:
1.20%左右。
2.大约 97–98%。
厉害!同时绘制多个 ECDFs 怎么样?
我们可以绘制多个 ECDF 图!例如,让我们将 2014 年和 2015 年的两个 ECDFs 绘制到一个图表上。
现在,您可以确定两年的汇总统计数据并进行比较。您可以看到,在某些汇总指数范围内,例如从 7 到 8,这两年的汇总指数几乎相同。但在 6 到 7 的范围内,2015 年综合指数低于 7 的国家比例略高。
现在你可能想知道,你能在一张图上画出多少个 ECDFs?我看到最多的大概是 3 个。这个数据有 22 年的汇总指数价值。让我们看看 22 ECDFs 有多好(剧透:不会太好…)
ECDF plot with all 22 years worth of Country Summary Indexes. Nulls were dropped.
正如您可能很难看到的,由于同时绘制的 ECDFs 的数量,这不容易解释。即使有这个传说,也很难区分哪一年和其他年份。在这种情况下,展示得越少,揭示得越多。让我们画出 4 年的价值。具体来说,我们将从 1970 年到 2015 年绘制图表,在此期间每隔 15 年绘制一次。
ECDF plot of summary indexes for 1970, 1985, 2000, and 2015
清楚多了不是吗?此外,这让你可以看到在 15 年的跳跃中总结指数变化的区别。从这幅图中你能观察到什么?在下一段阅读它们之前,试着思考一下这个问题。
你可以直接观察到的是,1970 年和 1985 年的综合指数比后来的年份要低。因此,从 2000 年开始,经济自由度总体上有所提高,至少在 2015 年也是如此。1970 年和 1985 年还有一些有趣的观察结果。一是 1970 年的数据点似乎最少,这可能表明很少有国家拥有经济自由,或者有些数量没有记录。
第二个观察结果是,在 1985 年,尽管拥有一定经济自由度的国家数量有所增加(更多数据点),但由于 ECDF 曲线的变化,综合指数值的可变性较小。也就是说,1985 年综合指数低于 6 的国家的百分比高于 1970 年的百分比。
ECDF 的额外资源
感谢阅读这篇文章!如果你想了解更多关于 ECDF 的信息,请查看以下内容:
1.ECDF 的概念基础-展示 ECDF 背后的数学原理的伟大博客文章。
3.数据营统计思维 ECDF 视频——Justin Bois 的介绍视频,在那里我了解到 ecdf 的存在。对视觉学习者有好处,并能听到它相对于蜂群图的优势。他还展示了如何使用 Python 创建 ECDF 图。
4.下面是这篇文章的视频版本,带有鳄梨销售的数据集。我经历了与上面相同的解释。因此,如果你是一个视觉学习者,这将对你有所帮助。
希望你和我一样对 ECDF 感兴趣(上次我输入 ECDF 时,我保证…包括这个…)。我计划将它添加到我的 EDA 工具箱中,并尽可能地使用它。你也会这样做吗?你在数据中做了哪些我遗漏的观察?请在下面的评论中告诉我。
如果你喜欢阅读 Medium,并愿意进一步支持我,你可以使用我的推荐链接注册 Medium 会员。这样做可以用你的会费的一部分在经济上支持我,我将不胜感激。
如果你喜欢这篇文章,也可以看看我下面的其他一些数学相关的文章:
线性回归是确定数据的两个或多个连续特征之间相关性的经典技术…
towardsdatascience.com](/point-biserial-correlation-with-python-f7cd591bd3b1) [## 用 Python 解释超几何分布
数学课上的概率问题,你需要的概率要么给你,要么相对容易…
towardsdatascience.com](/hypergeometric-distribution-explained-with-python-2c80bc613bf4) [## 使用混淆矩阵度量避免混淆
从混淆矩阵中理解 17 个指标
towardsdatascience.com](/avoiding-confusion-with-confusion-matrix-metrics-a8a3d0ead144)
直到下一次,
约翰·德杰苏斯
NHL 曲棍球 2 点线看起来像什么?
Photo by Braden Barwich on Unsplash
感谢 NHL stats API,我们可以找到答案!
这个想法
曲棍球中两点线的想法并不算是新的。曲棍球也没有什么独特的地方比足球更需要 2 分线。我选择研究曲棍球,因为 NHL 有最容易获得的数据。事实上,只需要几行代码和 30 分钟的下载时间,就可以下载过去 5 年的所有 685,000 个镜头和拍摄地点。按照惯例,我已经把我使用的 python 代码发布在了 Github 上。此外,提到最初激发这篇文章的第 538 篇 NBA 文章似乎很重要。正如 NBA 球迷所知,这项运动在过去几年里发生了巨大的变化,很大程度上是由于地图拍摄。每个 NBA 球队(希望如此)现在都非常清楚,三分球或多或少是比赛中仅次于上篮或扣篮的第二有价值的投篮。虽然这似乎是一个基本的概念,但直到统计学家开始绘制镜头,它才变得显而易见。让我们为曲棍球做同样的事情!
第一步:下载超过 685,000 张照片
我喜欢 API。我没有太多和他们一起工作的经验,但是我有过几次这样的经历,感觉很棒。据我所知,大多数体育数据都是从像 sports-reference.com 这样的网站上搜集来的。很多先进的运动数据你必须建立更先进的爬虫。如果你运气不好,高级统计数据会在付费墙后面(比如 PGA 巡回赛历史击球数)或者更糟…它实际上都在付费墙后面(赛马😡).这就是为什么它是如此令人耳目一新,找到非霍奇金淋巴瘤统计 API。我首先生成了所有的常规赛 API 游戏 URL。下面是这段代码的主要片段:
for gm in range(gms):
game_num = "0000" + str((gm+1))
game_num = game_num[-4:]
game_id = str(year)+"02"+game_num
url= "[https://statsapi.web.nhl.com/api/v1/game/](https://statsapi.web.nhl.com/api/v1/game/)"
+game_id+"/feed/live"
urls.append(url)
简单的东西!然后,API 端点提供了一个数据宝库。数据几乎太多了。在 python3 请求和 json 库的帮助下,我只需选择播放数据:
# Note: tqdm is a progress bar library.for ep in tqdm(urls):
response = requests.get(ep)
game_json = json.loads(response.text)
all_plays = game_json['liveData']['plays']['allPlays']
最后,我将比赛数据过滤为非空净的常规时间目标。我因为 3v3 的怪异排除了加班。在 json 数据内,有坐标!我的最终输出只是一个 3 列的表格:镜头类型、X 坐标和 Y 坐标。
第二步:绘制它们!
这是我们可以发挥创造力的地方。Matplotlib 和 Numpy 提供了许多表示数据的方法。下面,在左边,我有一个所有镜头的散点图。它们按照距离目标的远近来着色。在右边,我标出了所有的目标位置。根据频率不同,它们的颜色也不同。我们只是触及表面!
I’m aware that a handful of shots come from outside the rink. Rink dimensions I plotted are from Wikipedia so they have to be 100% accurate. Another possibility is that rinks are not uniform in size or that there is systematic error in plotting shot locations.
此外,我发现六角垃圾桶工作良好,视觉上很有吸引力:
It’s almost as if being close to the net helps. 🤔
我们在 2 点线上想要什么?
回到手头的问题。我们得到了拍摄数据。我们已经得到了目标数据。现在我们需要确定冰上不同点的投篮命中率。以篮球为例,很明显,在两分线后的理想投篮不会比高危险的一分机会得到更多的回报。这给了我们一个界限,界限可以有多近。如果最高危险的一分投篮在 25%的时间里进,那么你不希望两分投篮在高于 12.5%的时间里进。如果是的话,那就没有动力去投一分球了。
关于两点线应该有多远的另一个界限是完全可以讨论的。它应该如此遥远,以至于只能作为克服后期赤字的最后努力吗?还是应该这么高效,一个线上的投篮优先于很多一分投篮位置(类似篮球)?我可能会努力在一个快乐的中间状态下做出我最好的猜测。
映射效率
所有这些猜测都无关紧要,直到我们实际绘制出冰上的投篮命中率。我是怎么做到的?我用了一个数字面具🦸🏻♂️将从冰上的一个点设置一个最小的 8 杆阈值,以防止样本量过小。仍然有一两个高异常值。我通过反复试验将最大效率设定为 24%,尽管网前的一些点接近 30%。然后,我使用高斯滤波器平滑数据,并通过 Matplotlib 应用轮廓。我也通过 Matplotlib 画线。最后,我用了一个数字面具🦸🏻♂️将把两分线外的任何进球的价值加倍。
NHL shooting percentages are on the left. The result of doubling the value of points outside the two-point line is show on the right.
正如预期的那样,效率在接近目标时显著提高。我很震惊它是如何急剧增加的。事实上,在球门前有一个很小的区域有 30%的效率。我认为这种近网效率部分来自于幸运的篮板,这些篮板基本上是射进了一个空网。
另一个有趣的特征是,有一些线从效率提高的目标向外延伸大约 30 度。我认为这是一个甜蜜的地带,跨冰传球允许一次性击败守门员,但他们不是在一个如此尖锐的角度,这是一个艰难的射门。再说一次,我从来没有打过曲棍球,所以有很多人可以比我更好地诠释它。迎面是另一个有效的射击点,这很直观。
我的 2 点线
起初,我试图拥有和篮球完全一样的效率比,这条线似乎太接近了。我喜欢我画它的地方有几个原因。一,毫无疑问,在靠近球网的高危险区投篮还是比较有优势的。二,散开了!而之前在现行规则下,进攻区域可能只有 25%(我粗略的猜测)是有威胁的,这个数字接近两线制的两倍。看看冰球的移动和策略会如何变化会很有趣。第三,我喜欢红色的圆点就在它的外面。教练可以很容易地告诉球员最有效的射门地点在哪里。篮球也有类似的甜蜜点(角落三分和迎面投篮)。
当然,这只是一种看法。尝试不同的选择很有趣。我鼓励你玩代码。如果有什么不同的话,这是 Matplotlib 中很棒的一课。这里有一些其他的例子…是的,我已经有太多的乐趣了…
这是个好主意吗?
曲棍球中的 2 分线是个好主意吗?那是一个我没有资格回答的问题,也不是这篇帖子的目的。我从未打过曲棍球。我的大部分曲棍球知识来自于观看赛季后期的纳什维尔掠夺者队,以及播放被称为 NHL 伊茨 2002 的杰作。我不能排除这是个愚蠢的想法有明显的原因。我不认为 2 点线是荒谬的。篮球三分线好像成功了。这将使冰上出现不同的比赛风格和不同的冰球运动。这也将创造高度的游戏后期的戏剧性。然而,也有很多缺点。一条 2 点的线会打乱基本上所有的统计数据。格雷茨基记录将更难解读。你会把守门员的扑救和两分球的射门算作一分球吗?守门员救球百分比不会因为更多的低概率射门而上升吗?它会如何影响尝试给目标小费的常见策略?很容易被投机冲昏头脑。
盖帽
这个分析中的一个潜在问题是盖帽。盖帽占记录镜头的 25%。我的理解是,NHL API 给出的是盖帽的位置,而不是进攻球员投篮的位置。我映射了没有块的数据,变化不大:
移除遮挡镜头后,镜头热图没有太大差异。我最大的猜测是,大部分盖帽来自于远距,给出的坐标是中距离。我不认为这消极地影响了我的分析,本质上把被阻挡的投篮视为比实际稍微近一点的投篮。这就产生了一个小偏差,看起来中距离射击不如实际有效,而长距离射击比实际有效。更彻底的分析可以解释这一点。
你在数据科学训练营中学不到的东西
之后要学习的五件事
作为大会数据科学沉浸式的前讲师,我教了一千多名学生如何用数据解决问题,并有幸从一开始就创作和策划了相当大一部分学校的课程。声明一下,目前我不支持任何可用的数据科学训练营或教育项目。然而,我对那些参加过数据科学训练营、不知道下一步该学什么的人(或者有抱负的数据科学家)有一些建议。
为什么是训练营?
让我们以一个受欢迎的大学项目为例,比如加州大学伯克利分校的信息和数据科学硕士。要获得 UCB 大学的数据科学硕士学位,需要超过 6 万美元,微积分、线性代数的先决条件,一张相关定量领域的学士学位证书,以及大学水平的基础工程课程的良好成绩。这是当今大多数大学课程的反映。如果你是自学的,或者没有更正规的数学、统计学和工程学背景,上大学就不那么容易了。
事实上,如果你想走大学路线(例如佐治亚理工学院的在线分析科学硕士),有更好的选择。
数据科学训练营通常分为两种类型:
- 兼职:10-12 周,每周晚上约 6 小时
- 全职:10–12 周,每周 40 小时,上午 9 点至下午 5 点
向潜在学生推销(有时是强烈暗示)的想法是,一个人可以在短期的专门学习中成为数据科学专家。你花 2-6 万美元参加一个业余班,或者花 16 万美元以上参加全日制班,但仍然要投入相当多的时间和资源,无论哪种情况,都比你花在全日制硕士项目上的钱要少。此外,许多数据科学训练营提供融资,因此参加训练营的先决条件较少;当你权衡这样一个机会的成本效益时,这些都是令人信服的理由。
数据科学训练营的软先决条件也是这条路线提供的一个方面,它既有优势,又保证了你潜在同学的知识和能力的差异。主要是,根据学校的不同,提供的是某种形式的评估,衡量先决知识和你的数学、统计和基本 Python 或 R 基础知识的能力。评估的结果对你需要学习的特定科目的材料清单和简短形式的课程是权威的。这种招生过程将学生引导到特定的学习领域,与传统的大学课程形成对比,训练营招生过程允许你根据自己的评估学习一组非常简明的主题,为第一天的课程做准备。归根结底,训练营是一所私立的营利性学校,对你的入学感兴趣。
通常,没有完成前提工作的学生,一旦他们意识到课程的节奏和广度比他们预期的更激烈,他们就会在两周后为了退款而退出训练营。在我看来,上课的节奏就像用消防水管喝水一样。然而,课程很简洁,重点是实践应用。概念非常快地建立在彼此之上;然而,它留下了很小的空间来放慢速度或错过任何课程。
未来的学生会问我的最普遍的问题是,在为期 12 周的紧张课程后,他们是否真的可以“受雇”成为分析师或数据科学家。我会说是的,但这取决于你以前的背景。没有任何编程、统计、数学或机器学习经验的人毕业后,如果简历上只有一个数据科学项目,而没有任何其他与数据科学相关的内容,将会很艰难。
完成毕业设计后找工作并不是一件不可能的事情,我见过很多学生在充满挑战的就业市场中找到工作的方法,但大多数都有成功的结果。学生接受像数据科学家、数据工程师、分析师和其他数据科学角色这样的工作。
你班上有谁?
你的同学是定量金融分析师、生物学家、精算师、以前的高中数学老师、风险投资家、会计师、工程师或任何与工程或数据无关的人。这些学生中的大多数要么有质量学位,要么有应用工程背景,与那些两者都没有的学生混在一起。
作为一名教师,最难解决的一个问题是给一个班的学生上课,他们在统计学、数学和工程学方面的能力各不相同。尽管我确实认为学生知识和编程能力的总体平均水平在一定程度上影响了教学质量,但如果你有成长意识,这也是向更博学的同学学习的绝佳机会。
由于每个群组都包含了各种各样的人,他们有着不同的背景、信仰和能力,每个人都面临着各种各样的挑战。一般来说,学生们要么更容易理解所介绍的理论概念,要么更容易理解编程方面。一些学生在两者都没有背景的情况下挣扎,但我倾向于相信这些学生接受了一种向未知学习的纪律,因此生存得很好。
一般来说,有定量背景的学生帮助更多有工程头脑的学生,反之亦然。在训练营式的项目中,每个人都有一个共同的经历,那就是在这一点或那一点上与一两个概念进行实质性的斗争。学生们苦苦挣扎的想法对每个人来说都是独特和不同的。
You will learn these concepts within the first few weeks in a data science bootcamp class.
刚学会线性回归?很好,现在让我们学习线性回归许多正则化形式,共线性如何影响模型的质量,以及您刚刚学习的建模领域中隐含的偏差-方差权衡的影响。我刚才提到的这些概念是在传统环境下几个月或几年的学习,但如果学生在训练营式的课堂上集中注意力,他们可以在大约一周内获得所有内容的“要点”。
你学到了什么?
您将获得经典机器学习算法的精彩概述,以及如何实现这些算法的基本理解。如果您参加兼职课程,您将学习如何:
- 导入库
- 用某种形式的数据框清理和转换数据
- 训练和评估模型
- 使用数据库(最低限度)
您还将学习如何应用最基本的 ML 领域,包括:
- 监督和非监督学习
- 回归
- 分类
- NLP 贝叶斯
- 时间序列
- 神经网络
- “注意”一些大数据工具集
全职“沉浸式”与兼职课程的最大区别是更多的从头开始编写 ML 模型,更多的动手项目,更多的讲座,以及更多的整体实践。如果你看一下每小时的成本,全日制课程会更有价值,但特别是因为你可以向导师要求一对一的时间和可能的工作安排(成果)支持,这取决于学校。
你会学习如何做机器学习吗?是的。你会学习如何更好地编码吗?是的。你对统计学的理解是否足够有用?很有可能。你能学到足够的知识来继续自学并跟上时代吗?绝对的。这也将是你一生中最艰难但最值得的教育经历之一。这只是众多途径中的一种,取决于你对压力和成长的承受能力,以及上大学的成本节约选择。
Salary.com report on data scientist salaries in the San Francisco Bay Area, Sept. 2019.
你会知道如何有效地面试吗?不太可能,因为大多数项目的这一领域不够严格。在 12 周结束时,现实生活中的数据科学工资和训练营后的候选人之间的差距将会小得多,但门控因素可能不仅仅是了解足够的统计学、数学或机器学习。你还必须能够编写一个中级工程师水平的代码(我的观点),但这在正确的专注和准备水平下是可以实现的。我相信大多数学生在参加了数据科学训练营后都在数据科学领域找到了工作。尽管如此,在你第一天上课之前,你还是要付出更多的努力,而这些努力通常是不会被宣传的。
我对这类项目最重要的评估是,教授的内容与你需要做的事情之间的差距。训练营试图教你如何使用数据科学过程,但更侧重于指导你如何进行适当的 ML 实验。数据科学不仅仅是了解机器学习。数据科学就业市场仍在定义自己,但现在已经越来越清楚存在什么样的角色以及市场在这一点上的期望。企业正在招聘的候选人不仅擅长工程、统计和 ML,而且能够在与业务需求相关的同时与非技术经理沟通。
你学不到的
我有太多东西想写,真实世界中的数据科学是多么有趣和令人兴奋。有很多很酷的工具可以用来做有价值的模型评估,比如 scikit-learn 或 R Studio 中没有提到的。你可能会认为,经过 12 周左右的数据科学就是关于建模的,但老实说,数据科学家不会整天训练模型,除非你在做研究。建模包括大多数项目范围的 10-20 %,其余的将是查看数据,清理数据,并无情地问问题以从一组难以置信的模糊假设中定义地狱。
机器学习只会变得越来越有趣,但这不是最初在数据科学领域获得大多数工作的原因,除非职位完全是研究。几乎所有的数据科学训练营项目都有明显的盲点,因为数据科学不仅仅是建模。
1.如何确定展示业务影响的项目范围
让面试数据科学家职位的候选人与众不同的最大技能是,能够清楚地定义一个存在许多模糊之处的问题,同时以联系实际商业价值的方式解释最终结果。数据科学是一个过程。它必须在每一步证明其方法的合理性,并倡导其在现实世界中的存在,这包括训练模型和优化超参数,以及如何检查数据并从中提出正确的问题。
在参加了为期 12 周的数据科学课程后,大多数学生认为建模是项目中最关键的一步。在现实世界中,我们必须证明数据和模型如何协同工作来可测量地解决问题。你的大部分时间应该花在查看数据、清理数据和衡量项目影响的确定性上,而不仅仅是修补机器学习模型。
当然,并不是每个人都可以将最新的集成方法或神经网络用于分类问题,并在验证时测量 80%的准确性,同时附带解释模型性能权衡的图。企业应该如何处理这些信息?假阳性在风险分类方面意味着什么?诚然,从以业务价值为中心的角度来定义数据科学问题并不容易,但考虑到潜在的错误和偏见,您必须证明您的工作是正确的,并准确报告存在的风险。
从技术上确定问题的范围,同时联系潜在的业务影响,这不是你在 12 周内就能学会的。有可能 12 个星期都没有提到通过沟通来定义非技术价值。
到目前为止,从零开始确定问题的范围是新数据科学家最难学习的技能。训练营在这方面做得不好。尽管如此,你还是可以帮自己一个忙,选择那些关注于清晰定义项目范围的最终项目,这些项目带有伴随的成功指标,同时也考虑到了业务成果。用数据讲故事,为什么重要。
企业渴望能够深入透彻地思考问题的数据科学家。企业希望有人能够解释什么是成功,证明模型选择的合理性,并向非技术观众断言确凿的事实,同时为他们的工作辩护,因为好的和坏的数据会影响它。做好这一点的唯一方法是问正确的问题,倾听关键利益相关者的意见,并向导师和更有经验的团队成员寻求帮助。
获得经验可能听起来像一个第 22 条军规,例如“我如何获得确定问题范围的经验?”。我的建议是做更多的项目,清楚地定义一个问题,设置关键指标,衡量影响,总结什么是可能的和建议的下一步行动。求助。寻求更有经验的人的智慧。
推荐阅读
- 数据科学生命周期 101,像我这样的傻瓜,作者 Sangeet Moy Das 。【Sangeet 提出的第一点是理解如何开始界定问题的良好开端。他的建议为" 1。业务理解有一些很好的出发点。也是同名的章节,“ 8。业务理解“以及在此之前发生的一切都是对数据科学团队成员整体重要性的极好介绍。
- 数据科学流程:数据科学家的日常工作,作者 Raj Bandyopadhyay 。
这个,1000%。这是一篇关于如何以一种非常相关的方式应用数据科学过程的非常棒的文章。我最喜欢的一段:
销售副总裁路过,注意到你的兴奋,问道:“那么,你有东西给我吗?”你突然说,“是的,我用逻辑回归创建的预测模型的 TPR 为 95%,FPR 为 0.5%!”
她看着你,好像你长了几个额外的脑袋,在用火星语和她说话。
- Matt Warcholinkski关于如何处理新数据科学问题
的 5 个步骤。马特说,“问题应该清晰、简洁、可衡量。很多公司在定义数据问题的时候太模糊了…”。我非常喜欢读这篇文章,非常同意 Matt 在这个话题上的观点。
2.了解足够的 SQL 以通过工作面试
SQL 是现代商业的标准交换。为了能够与在任何级别上与数据进行交互的团队一起工作,您迟早会将数据放入数据库或从中取出。虽然不是每个人都在其应用程序或业务的每个方面采用关系数据库,但您很可能会在编辑器中编写超过 2-3 个完整页面的 SQL 查询。当涉及到足够的 SQL 来自信地通过第一次面试时,大多数训练营的广度都很小。
就 SQL 技能而言,您需要熟悉以下主题:
- 聚合和分组
- “有”限定词
- 基本日期时间函数
- 分割
- 窗口功能
- 子查询
- 给定一个 ERD,甚至一个简单的基于文本的模式定义,派生 SQL 连接
一些值得自学的 SQL 资源:
- SQL 课程 2 —很好的资源,但更高级——初级或中级。
- Dataflair SQL 教程——这是一个很棒的资源,有很简单的例子。除了我上面提到的其他主题之外,请逐个查看存储过程、索引、规范化和范式、约束。当您处理现实世界中的问题时,理解关系数据库系统的这些概念是很重要的。
- 克里斯·文泽尔收集了大量的视频和 SQL 资源。
3.使用“大数据”
在现实世界中,数据是肮脏的,它的格式不符合你的需要,而且数据很多。我是说很多!你的笔记本电脑装不下这么多数据。大数据不仅与工具有关,还与支持它的基础设施和服务运营有关。对于大多数科技公司来说,至少知道如何在谷歌云或 AWS 生态系统中工作是最起码的期望,但对于任何拥有依赖于现代基础设施支持的数据的真实世界应用程序的公司来说也是如此。
期望新员工至少能够使用某种形式的大数据系统来采样自己的数据进行实验是足够普遍的。如今典型的是现代数据仓库系统,如 AWS 上的 Redshift 和 Google 上的 Bigquery ,或者 Apache 的众多可用工具之一,如 Hadoop 、 Spark 或 Hive 。许多大数据系统在其数据管理生命周期中都有一个仓库组件,了解它们之间的关系非常重要。
仅在过去的两年里,世界上 90%的数据都是由计算机生成的。— 伯纳德·马尔,2018 年福布斯
如今,大数据生态系统中存在许多可变性。尽管如此,几乎所有的训练营都很少触及这个话题,以至于让人有足够的信心独立地端到端解决大数据问题。好的数据科学想法通常以可扩展的解决方案告终,而这通常需要大量的 ETL 和预先清理数据。
公平地说,设置大数据课程有很多障碍,但有大数据工作背景的教师就更少了。也许并非所有训练营的讲师或课程开发人员都是如此,但根据我对前 3-4 名数据科学训练营的评估,大数据内容缺乏深度,教授大数据的人才也缺乏。
从事教育工作,报酬比从事工业工作少得多。专注于大数据的数据科学领域高薪专业人士非常稀缺。这个原因可以解释为什么这个专业在教育界很难招到人。
关于大数据,您可以在线了解到什么
至少对于主要概念来说,这个领域并不难学,但是,学习较低层次的细节需要时间。您需要学习的大部分内容应该强化这样一个事实,即大规模基础设施和编程框架是行业实现可伸缩数据应用的方式。
下面的第一个链接是全面了解大数据世界的绝佳资源。如果你懂 Python 或者 Scala,Spark 是一个值得学习的行业标准框架。Dask 是一种新兴技术,它提供分布式数据帧,如果你熟悉 Python 的话,这对 Pandas 来说是一个很好的补充(《Pandas》的作者是 Dask 的顾问)。
- Coursera 的大数据简介提供了一套不错的产品,可以在更深层次上对最基本的概念和工具有一个很好的概述。
- 牛逼 Spark ,“牛逼 Apache Spark 包和资源的精选列表。”
- Dask 文档,一个不错的 Dask 教程集合。
大数据超出了我能够充分传达的学习方式,但我觉得这些是很好的起点。关于如何开始使用大数据,我可能会写一篇更详细的后续文章。
4.通用工程和软件开发生命周期管理
冒着听起来像一个古怪的老人的风险,我发现在一些学术界对数据科学作为工程的一个功能或者至少是它的一个分支的实践有一种真正的厌恶。一些最好的工程师是最好的数据科学家。我们在 R 和 Python 中使用的模型和绘图框架是软件。将模型部署到生产系统中,使可消费应用程序中的数据预测成为可能,这就是软件。
软件开发的实践包括协作变更控制、设计模式、渐近分析、单元测试、部署、工作流、设计。能够配置和管理您的开发环境,然后在团队中有效地使用版本控制来发布代码应该是第二天性。了解大多数公司采用的版本控制的常见分支策略是什么,以及至少它们是如何和为什么被使用的,在大多数程序中甚至都没有涉及到。
- 4 git 的分支工作流程作者 Patrick Porto
这篇文章很好地解释了所有类型的开发团队都采用的分支策略。
就模型选择和任何数据管理管道而言,应该考虑的另一个重要方面是数据和处理数据所隐含的时间和空间效率。导入 sklearn 库太容易了,而忘记了模型在效率方面的权衡,这可能会在比笔记本电脑更大的范围内区分什么是可能的,什么是不可行的。例如,理论上看起来足够简单的 K-最近邻分类器,实际上在搜索测量距离的点时有很多复杂的优化。在课堂上,您学习了邻居搜索的强力方法,即 O[DN ] (D = dimension),但不理解为什么可以设置超参数来允许更像**o[dnlog(n)】的替代搜索方法,但也知道为什么随着维度和数据的增加它们会更好。你不会知道为什么O(N)<O(log(N)】<O(N)**是的,如果你想评估你的模型和管道的权衡和能力,这很重要。
上面提到的 O 指的是大 O 记数法。Youtube 上关于这个话题的一个很棒的简短介绍,来自 William Fiset :
虽然在实践中精通编程效率需要几个月的时间,但是如果你足够自律,你仍然可以参加一些关于这个主题的课程或者自学。我最喜欢的关于编程效率的系列之一来自麻省理工学院的埃里克·格里姆森教授。Eric 关于这个主题的讲座很吸引人,也很容易观看。
我特别推荐这些讲座:
5.ETL 和工作流自动化工具集
The data warehouse is the workhorse of most analytics and analysis projects. Knowing how to get your data, how to communicate within the construct of the data warehouse is an important skill to have.
在现实世界中,建模通常是拼图中简单但重要的一块。令人惊讶的是,花在项目上的大部分时间都不是用于训练模型。如前所述,数据是脏的,但它也不是您期望的形式,也不是您项目所需的新鲜程度。有点类似于一般工程,但是提取、转换和加载数据的过程是您在一定规模上花费大量时间的地方。
设计将数据格式化到一个一致性水平的过程,进而可以被建模,需要时间和思考。ETL 可能需要(但不限于)连接数据库表、合并不同格式的数据、聚合、特性工程,或者简单地为实验抽取适量的数据。当然,您可以用自己选择的语言(Python)来完成其中的大部分工作,但是考虑到 ETL 框架和工作流管理工具方面现成的选项太多,设计数据集成管道最好用专门构建的库和服务来完成。
您可能会熟悉一些在行业中使用的流行工具集,包括:
为了更好地了解现有的 ETL 工具,请查看 Github 上的这个方便的 repo:超棒的 ETL 。
你能做些什么来弥补知识差距
幸运的是,我们生活在一个有很多学习资源的时代。许多学校也意识到自己的不足,并提供额外的课程,如高级 SQL,甚至数据工程研讨会,所以如果你发现自己在众多数据科学训练营中的一个,请在之前和之后利用这些课程。Youtube 也非常适合学习如何建立任何大数据。如果你住在世界上的任何一个大都市,聚会提供了直接向业内名人学习的机会。通过帮助文档,主动提出参与一个开源项目,并利用这个机会向更有经验的贡献者寻求帮助。学习的方式比过去任何时候都多。别等了。
直到今天,我发现我对数据工作了解得越多,我就越觉得追求这一职业道路是正确的决定,因为这涉及到跨领域的不断学习。任何拥有正确心态的人都可以在数据科学领域就业。如果你的目标是成为一名数据科学家或相关角色,不要等待机会来找你。积极主动。不要害怕失败或展示你的局限性。当你从新的机会接触新的知识时,学习是“几乎”和“不完全”的结果。要谦虚。求助。帮助他人。别等了。
关于自然语言处理(NLP)的数据预处理和语言注释,您需要了解什么
快速浏览自然语言处理数据预处理
读者注意:Python 代码在 GitHub 中共享
PC: Brett Jordan from Upsplash
机器学习的进步导致了自然语言处理(NLP) 的显著进步,这是一个赋予计算机理解人类语言能力的人工智能领域。自然语言是指人们说的和写的语言,NLP 使用算法从单词和句子中提取信息。NLP 扩展到自然语言生成(NLG),像人类一样表达短语的能力,以及自然语言理解(NLU),建立对短语理解的能力。通过使用机器学习算法来训练数千年的现有文献,我们能够比手动编程更有效地开发模式和规则。此外,机器学习对于人类语言应用特别有用,因为表达(书面或口头)并不总是遵循逻辑和一致的规则。
Machine Learning is used through out the different stages of the NLP pipeline
在本文中,我们将回顾 NLP 项目中数据争论过程中经常发生的一些步骤。目标是阐明文本数据是如何被计算机处理的,这样你就知道它们如何能够并将继续在数字世界中被使用。有许多开源库使得 NLP 非常容易实现,比如 NLTK、Genism、spaCy 等。我们将举例说明空间的使用,并提供一些熟悉。
让我们来看看这篇关于海洋清洁的文章的样本:
sample_text='A huge trash-collecting system designed to clean up plastic floating in the Pacific Ocean is finally picking up plastic, its inventor announced Wednesday.\'
1.将文本转换成小写的有助于减少文本数据的词汇大小。类似地,将重音符号如 café转换为 café,扩展收缩如 won’t to will not,以及拼写检查也可以根据您的项目进行考虑
import unidecode
sample_text=sample_text.lower()
sample_text=unidecode.unidecode(sample_text)
2.如果数字和标点符号与分析无关,则将其删除
import re, string
sample_text=re.sub(r'\d+', '', sample_text)
sample_text=sample_text.translate(str.maketrans('', '', string.punctuation))
3.移除空格
sample_text=sample_text.strip()
4.分词是将连续文本分割成句子和单词的过程。虽然在像英语这样的语言中用空格分隔单词看起来很简单,但有时空格上的拆分可能会破坏应该被视为一个标记的内容,例如某些名称和带连字符的单词。还有一个选项是将标点符号视为单独的标记,因为标点符号也可以有意义,例如问号(?)和感叹号(!)
import spacy
nlp=spacy.load('en_core_web_sm')
doc=nlp(sample_text)
[token for token in doc]
- 注意了。load()函数用于加载用于预测语言特征的模型
5.去除停用词是去除诸如代词和介词之类的常用词的过程,因为它们广泛而频繁,因此不提供关于相应文本的太多信息。这通常通过在预定义的关键字列表中执行查找来完成,从而释放数据库空间并改善处理时间。在某些情况下,停用词列表可以定制为添加(对于“稀疏”术语)或删除
[token for token in tokens if not token.is_stop]
6.词干和词汇化是两种不同的方法,用于规范化文本数据并使单词相互匹配,即使它们不在相同的时态或形式下。一方面,词干化通过字符串操作去除单词开头(前缀)和结尾(后缀)的词缀。另一方面,词汇化通常通过查找单词的字典形式(称为词汇)来完成,并且可以进一步考虑词类以及单词的上下文。选择使用哪种方法将取决于速度和意图。词汇化需要更多的资源,可能不适合所有的 NLP 任务
[token.lemma_ for token in filtered_tokens]
7.词性( POS )标注是确定每个单词在句子中的作用的过程,这有助于我们理解文章在谈论什么。获取词性是通过一个预测模型来实现的,该模型已经通过足够数量的句子进行了训练,这些句子已经标记了每个单词的词性。我们通过将单词(作为输入)及其周围的单词传递给预测模型来获得单词的词性
[token.pos_ for token in filtered_tokens]
8.命名实体识别(NER) 指将文本中发现的命名实体分类到预定义的类别中,例如,人、日期、事件、地点、组织等。名词组块对于确定文本中的主语和宾语也很重要。使用统计模型比明确定义它们更有效
[(entity, entity.label_) for entity in doc.ents]
[noun.text for noun in doc.noun_chunks]
9.依存解析是给每个单词分配句法依存标签的过程。目标是为句子中的每个单词确定一个父单词,并预测父单词和单词之间的关系类型,如主语、定语、修饰语等。
[(token, token.dep_) for token in filtered_tokens]
spacy.displacy.render(list(doc.sents)[0], style**=**'dep')
Visualizing dependencies
Table of the preprocessed data
您还可以从文本中提取其他属性,比如共指消解和搭配提取。当构建特定应用程序的领域词汇表时,这些变得非常重要,因为上下文关系重大,例如医疗记录、系统日志、财务计划书等。这里有一个表格,包含了我们目前为止为第一句话中的每个单词定义的所有属性。
我们已经介绍了 NLP 项目的数据预处理步骤,下一步可能是对数据进行矢量化,以获得数字表示,然后是模型消费的特征提取。直到下一次…
Typical pipeline for an NLP project
你需要了解网飞的“朱庇特黑仔”:冰穴📖
是时候让 Jupyter 笔记本有个有价值的竞争对手了
T 今天,网飞向公众开源了他们开发的内部笔记本 Polynote 。如今,大型科技公司开源他们的内部工具或服务,然后流行起来并被业界采用的情况并不少见。亚马逊 AWS,脸书的 React.js 等是其中的两个。有道理。这些大型科技公司拥有业内最优秀的工程师,他们通常面临着推动伟大工具开发的最大挑战。网飞的 Polynote 可能是这些伟大工具中的另一个,数据科学/机器学习行业在如何编写代码、实验算法和可视化数据方面确实需要更好的工具。关于这个新工具,您需要了解以下几点。我会尽量简明扼要,以便您可以快速通读,并了解我们开发/研究环境这一新选择的利弊。
Polynote 更像是 IDE 的简单版本,而不是 REPL 的更好版本
auto-completion, error indication, better text editor, LaTex support
Polynote 强调让笔记本工作起来更像 IDE 或者代码编辑器,比如 VS Code。它支持更好的自动完成、林挺、富文本编辑器和 LaTex。这可能有点言过其实,但这就是它的发展方向。你可以说更好的语法高亮和更好的自动完成是微不足道的,但是这些生活质量的小改进可以走很长的路,让你更专注于真正的任务。顺便说一句,大多数编辑功能由 Monaco 编辑器提供,该编辑器增强了 Visual Studio 代码的体验,显示出甚至更好的潜力。
多语言支持
目前,它只支持 Python、Scala 和 SQL。你可能会说 Jupyter Notebook 也支持 Python、R 和 Julia。但是他们如何支持多语言是不同的。对于 Jupyter 笔记本,您只能为一个笔记本选择一种语言。而 Polynote 可以在一个笔记本中无缝地支持所有这些语言。它通过在细胞间共享变量来实现这一点,因此不同的语言细胞可以在相同的环境下工作。不用说,这有可能非常强大。随着它支持更多的语言,一个熟练的数据科学家可以使用最好的语言来完成正确的任务。它增加了技能上限,同时也提高了性能标准。
数据可视化和数据感知
在 Polynote 中,数据可视化是内置的。这意味着开发人员不需要编写任何代码来可视化他们的数据,他们只需使用 GUI 界面,并以他们想要的方式查看数据。此外,开发人员不需要输入任何代码来查看变量的值,您可以只使用 GUI。当代码运行时,在屏幕的右侧还有一个进度窗口,所以你总是知道代码的哪一部分正在运行。
这些都将增加更好的数据直觉。
内置配置和依赖关系管理
又一次生活质量的提高。一去不复返的日子,你必须运行的事情,如:
! pip install packages
您可以简单地指定您的代码需要哪些依赖项才能顺利运行,Polynote 会为您设置好。这将减少代码中的混乱。那有多好!
可复制代码
简单地说,Polynote 没有使用传统的 REPL 模型来执行代码。它使用自己的代码解释器。最大的区别是:对于使用 REPL 的 Jupyter 笔记本,你可以安全地执行不按顺序书写的单元格。您可以执行单元格 3,然后单元格 2,然后单元格 1。一切都取决于你。这带来了灵活性,但降低了笔记本的可共享性。Polynote 以不同的方式处理单元执行:
通过跟踪每个单元格中定义的变量,Polynote 根据在它上面运行的单元格来构造给定单元格的输入状态。使单元格的位置在其执行语义中变得重要,这加强了最小惊奇原则,允许用户从上到下阅读笔记本。
看起来更像是你在写剧本而不是笔记本。当你写的时候,你会更加注意确保事情井然有序。但是您可以获得一致的代码结果和更好的共享性。请参见下面的动画:
结论
我们将会看到行业将会如何采用 Polynote,但毫无疑问,它显示出了潜力,并做出了一些合理的决定。一个问题是,像 GCP、AWS 或 Azure 这样的大型云平台是否会采用它。这一点非常重要,因为如果没有这些云平台的支持,依靠它们进行研究/实验的人们将无法访问 Polynote,因此也不会使用它。
觉得这篇文章有用?在 Medium 上关注我(李立伟)或者你可以在 Twitter @lymenlee 或者我的博客网站wayofnumbers.com上找到我。你也可以看看我下面最受欢迎的文章!
为什么 CS50 特别适合巩固你的软件工程基础
towardsdatascience.com](/this-is-cs50-a-pleasant-way-to-kick-off-your-data-science-education-d6075a6e761a) [## 一枚硬币的两面:杰瑞米·霍华德的 fast.ai vs 吴恩达的 deeplearning.ai
如何不通过同时参加 fast.ai 和 deeplearning.ai 课程来“过度适应”你的人工智能学习
towardsdatascience.com](/two-sides-of-the-same-coin-fast-ai-vs-deeplearning-ai-b67e9ec32133) [## 我完成了吴恩达的机器学习课程,感觉棒极了!
好的,坏的,美丽的
medium.com](https://medium.com/datadriveninvestor/thoughts-on-andrew-ngs-machine-learning-course-7724df76320f)
在雇用数据科学家之前,您应该知道什么
Photo by Markus Spiske temporausch.com from Pexels
你的 CEO 给你转发了一封来自流行的管理时事通讯的邮件。主题包含两个字母 A.I .你马上坐在座位上。
每个人都称赞人工智能和数据科学家是你们公司的救星。在你出去雇佣你的第一个数据科学家来运行你的人工智能项目之前,有一些事情你应该知道。
让我们后退一步。AI 到底是什么?人工智能是机器或计算机对人类智能的模拟。它是机器学习和数据科学的同义词,然而人工智能是当前的热门词汇。这些文章描述了机器人做人工任务,而实际上,它们是处理大量数据以做出自动决策的算法。
Google Search Trend: Artificial Intelligence News Articles
每个人都在谈论人工智能如何彻底改变你的公司,并声称人工智能是银弹。首席执行官们要求技术团队部署人工智能以增加销售额。首席财务官希望他们能够自动化手动任务。首席技术官希望使用最新的神经网络或深度学习。所以我们不能继续雇佣一个数据科学家吗?
缺失的基础
Photo by Francesco Ungaro from Pexels
大多数公司可能认为他们已经为人工智能做好了准备,但他们的数据将讲述一个不同的故事。机器学习需要大量干净的历史数据。在你雇佣数据科学家之前,建立一个数据仓库或者数据湖是有意义的。这意味着他们没有四处搜寻数据。拥有一套 KPI 也是有意义的——否则,将很难衡量你的 AI 项目的影响。
数据科学家是缺失的一环
如果你的数据放在一个好的地方,你认为数据科学家是你的拼图中缺少的一块也是情有可原的。虽然科学家是人工智能旅程中的关键角色,但如果没有利益相关者的支持,他或她的才能将被浪费。
最成功的人工智能项目都是从一个业务或客户问题中诞生的。数据科学家的角色是用数据科学和机器学习来缓解和解决这些问题。
然而,通常情况下,数据科学家可以做的不仅仅是解决你知道的问题——他们可以找到你甚至没有意识到的问题的解决方案。
创建积压
Photo by Startup Stock Photos from Pexels
撇开工作角色不谈,对于数据科学家来说,没有什么比工作无聊更令人沮丧的了。数据科学积压对于确保您的科学家有足够的工作要做非常重要。它允许你回顾和优先考虑什么是重要的。这将确定什么将推动最大的投资回报。
特征工程
Photo by rawpixel.com from Pexels
特征工程可能是数据科学中比较耗时的部分之一。不要陷入一个思维陷阱,认为一个数据科学家会立即开始构建算法。他们需要花时间询问和探索数据,以了解如何将数据输入正确的算法。这将帮助他们找到合适的要素来训练模型,他们甚至可以在数据集中构建新的要素。
再训练
一旦模型构建、测试并发布到生产环境,项目就不会结束。这种模型需要持续的护理和关注。随着更多数据的产生和流程的改变,它将需要重新培训、调整,有时甚至需要重建。数据科学家正在进行一场长期的游戏。
各种规模的公司都开始雇佣数据科学家或与代理机构合作来构建他们的第一个模型。在冲进去之前,
- 看看你的数据
- 让你的公司参与进来
- 创建积压
- 不要忘记考虑工程时间
- 最后——一旦你雇佣了一个——他们就永远在那里。
什么是 NLP & NLP 科学家做什么?
我最近开始在一家公司做 NLP 开发人员。很明显,我很高兴又能找到有收入的工作了。
但是自从我开始工作以来,我注意到的一件事是,包括我父亲在内的很多人都问过我,“什么是 NLP,你具体是做什么的?”
通常,我会让他们看看我的博客,但是我意识到我以前从来没有写过这个。我写过一些关于特定数据科学和机器学习概念的文章,但我从未亲自定义这个职业和行业对我意味着什么。所以让我们现在就纠正这一点。
自然语言处理(NLP)是人工智能的一个领域,它赋予机器阅读、理解和从人类语言中获取意义的能力。
什么是 NLP?
首先声明——我绝不是 NLP 专家。虽然我有相当多的统计和定量研究经验,但我认为自己在这个领域还是个新手。
让我们从全世界认为 NLP 是什么开始:
自然语言处理是用来帮助计算机理解人类自然语言的技术。教机器理解人类如何交流不是一件容易的事。
近年来,在让计算机像我们一样理解语言方面已经取得了重大突破。
事实上,使用自然语言处理的典型人机交互可以如下进行:
1.一个人对机器说话
2.机器捕捉音频
3.发生音频到文本的转换
4.文本数据的处理
5.发生数据到音频的转换
6.机器通过播放音频文件来回应人类
NLP 是用来做什么的?
自然语言处理是以下常见应用背后的驱动力:
- 语言翻译应用程序,如谷歌翻译。
- 诸如 Microsoft word Grammarly 之类的字处理器使用 NLP 来检查文本的语法准确性。
- 在呼叫中心使用的交互式语音应答(IVR)应用程序,用于响应某些用户的请求。
- 个人助理应用程序,如 OK Google。Hay siri、Cortana `和 Alexa。
帮助这个人赚更多的本杰明
因此,取决于你对资本主义社会的看法,你可能会也可能不会乐于听到 NLP 科学家都在推动增长或优化底线(利润)。
我的意思是,除非你是一名教师或消防员或社会工作者,那么你的角色很可能就是帮助你的老板赚更多的本杰明。不过我要说的是,在我看来,优秀的 NLP 科学家平均来说比其他许多工作职能更能影响他们工作的公司。让我解释一下为什么(也解释一下 NLP 科学家是做什么的)。
一个 NLP 科学家到底在做什么?
句法分析和语义分析是用来完成自然语言处理任务的主要技术。
以下是对它们使用方法的描述。
1.句法
句法是指句子中单词的排列,使它们符合语法意义。
在 NLP 中,句法分析用于评估自然语言如何与语法规则一致。
计算机算法被用来将语法规则应用于一组单词,并从中推导出含义。
以下是一些可以使用的语法技巧:
- **单词包:**是一个常用的模型,可以让你统计一段文字中的所有单词。
文字像无尽的雨水一样流淌到纸杯里,
它们滑过,滑过宇宙
现在让我们数数单词:
这种方法可能反映了几个缺点,如缺乏语义和上下文,以及阻止单词(如“the”或“a”)的事实给分析增加了噪声,并且一些单词没有相应地加权(“universe”的权重小于单词“them”)。
词汇化将单词解析为它们的字典形式(称为词汇),为此它需要详细的字典,在这些字典中,算法可以查看单词并将单词链接到它们相应的词汇。
**比如“跑”、“跑”、*“跑”*这些词都是“*跑”*这些词的形式,所以“跑”是前面所有词的引理。
- 形态学 切分:它涉及到把词分成叫做语素的个体单位。
- 分词:把一大段连续的文本分成不同的单元。
- 词性标注:它包括识别每个单词的词性。
- 解析:它包括对提供的句子进行语法分析。
- 断句:它涉及到在一大段文本上放置句子边界。
- 词干化:它包括将词形变化的单词切割成它们的词根形式。
附在单词开头的词缀称为前缀(如单词“astrobiology”中的“astro”),附在单词末尾的词缀称为后缀(如单词“helpful”中的“ful”)。
问题是词缀可以创造或扩展同一个词的新形式(称为屈折词缀),甚至可以自己创造新词(称为派生词缀)。在英语中,前缀总是派生的(词缀创造了一个新词,如单词“生态系统”中的前缀“生态”),但后缀可以是派生的(词缀创造了一个新词,如单词“吉他手”中的后缀“ist”)或屈折的(词缀创造了一个新的单词形式,如单词“faster”中的后缀“er”)。
好的,那么我们如何区分这两者的不同并切掉正确的部分呢?
- 求解复杂方程:数学是 NLP 任务的支柱。在完成所有的数据处理任务后,科学家坐在一起,解决复杂的方程,并调整特定任务的参数。
你能想象 NLP 科学家设计一个语言模型要确定多少参数吗?
2.语义学
语义是指文本所传达的意义。语义分析是自然语言处理中尚未完全解决的难点之一。
它包括应用计算机算法来理解单词的含义和解释以及句子的结构。
以下是语义分析的一些技巧:
- 命名实体识别(NER): 它涉及确定文本中可以被识别和归类到预设组中的部分。这种组的例子包括人名和地名。
- 词义消歧:它涉及到根据上下文给单词赋予意义。
- 自然语言生成:它涉及使用数据库来推导语义意图,并将其转换为人类语言。
为什么 NLP 很难?
自然语言处理被认为是计算机科学中的一个难题。正是人类语言的本性使得自然语言处理变得困难。
使用自然语言规定信息传递的规则对计算机来说不容易理解。
这些规则中的一些可以是高级的和抽象的;例如,当有人用讽刺的话来传递信息时。
另一方面,这些规则中的一些可以是低级的;例如,使用字符“s”来表示多个项目。
全面理解人类语言需要理解单词和概念如何连接来传递预期的信息。
虽然人类可以很容易地掌握一门语言,但自然语言的模糊性和不精确性使得机器很难实现 NLP。
使用自然语言处理需要大量的处理能力来解决大量复杂的方程。GPT-2 8B 是有史以来最大的基于变压器的语言模型,是 BERT 的 24 倍,是 GPT-2 的 5.6 倍。
Guss 在你的 940mx GPU 上完成火车需要多少天?大约 5 年,在 MacBook 中训练一个像这样的大模型怎么样?但愿超过 100 年。
自然语言处理是如何工作的?
NLP 需要应用算法来识别和提取自然语言规则,以便将非结构化语言数据转换成计算机可以理解的形式。
当提供文本后,计算机将利用算法提取与每个句子相关的含义,并从中收集必要的数据。
有时,计算机可能不能很好地理解句子的意思,导致模糊的结果。
例如,在 20 世纪 50 年代,在英语和俄语之间翻译一些单词时发生了一个幽默事件。
以下是需要翻译的圣经句子:
心有余而力不足。
下面是这个句子被翻译成俄语,又被翻译回英语的结果:
“这roo-Afza不错,但是肉已经烂了。”**
未来是什么样子的?
目前,NLP 正在努力检测语言意义的细微差别,无论是由于缺乏上下文,拼写错误还是方言差异。
2016 年 3 月,微软推出了人工智能聊天机器人 Tay ,作为 NLP 实验在 Twitter 上发布。这个想法是,随着越来越多的用户与 Tay 对话,它会变得越来越聪明。结果是,16 个小时后,Tay 因其种族主义和辱骂性的评论而被删除:
****
微软从自己的经验中吸取了教训,几个月后发布了第二代英语聊天机器人 Zo ,它不会犯与上一代相同的错误。Zo 使用一系列创新方法来识别和产生对话,其他公司正在探索能够记住特定个人对话细节的机器人。
尽管 NLP 的未来看起来极具挑战性并且充满威胁,但该学科正在以非常快的速度发展(可能是前所未有的),并且我们很可能在未来几年内达到一定的发展水平,这将使复杂的应用成为可能。
这个帖子的灵感来自一些很棒的帖子,比如:
机器如何处理和理解人类语言
towardsdatascience.com](/your-guide-to-natural-language-processing-nlp-48ea2511f6e1) [## 数据科学家是做什么的?
试图阐明一个模糊的领域和职业
towardsdatascience.com](/what-do-data-scientists-do-13526f678129) [## 自然语言处理的简单介绍
自然语言处理是用来帮助计算机理解人类自然语言的技术。
becominghuman.ai](https://becominghuman.ai/a-simple-introduction-to-natural-language-processing-ea66a1747b32)**
名人堂四分卫值多少钱?
使用带或不带分析的来量化名人堂口径 QB 的真实场上价值
几乎由所有 账目来看,匹兹堡钢人队度过了一个可怕的、不好的、非常糟糕的休赛期。他们被迫交易安东尼奥·布朗——有史以来最伟大的外接球员之一——并且不得不袖手旁观,看着 Le ’ veon Bell——一代天才——在一年的合同纠纷中成为局外人后成为自由球员。在球的进攻端损失了大量的产量。或者,换句话说,匹兹堡钢人队有麻烦了。
但是事情没有这么简单。让事情变得复杂的是,布朗和贝尔都有幸与名人堂四分卫 Ben Roethlisberger 一起打球,正如对足球的分析所显示的那样,QB 比任何其他位置都更有价值。那么,谁对所有这些华而不实的统计数据负责呢?更重要的是,这对布朗和贝尔来说意味着什么,他们明年都将和更糟糕的四分卫一起打球。
似乎相当违反直觉的是,我们不能通过检查特定的传球手来回答这些问题——相反,我们必须检查四分卫,特别是类似于 Roethlisberger 和的四分卫,那些更类似于 Brown 和 Bell 的新 QBs 的四分卫。最终,如果我们想将我们得出的任何结论推广到不仅仅是上述三个参与者,我们将最初的问题转换成这个推广的分析问题:**用 HOF QB 替换非 HOF QB 的孤立影响是什么?**通过正确提问这个问题,我们可以
- 确定进攻生产的更重要的驱动因素(四分卫与传球接球手)
- 量化名人堂 QB 的价值
- 为加入或离开名人堂四分卫球队的传球手创造一个期望
为了回答上面的问题,我再次求助于NFL scraper包来收集 2009 年至 2018 年的逐场比赛数据(你可以在这里找到这一分析的所有代码)。
一旦我清理并准备好数据,我就开始分析。虽然我们最初的问题似乎很容易回答——选择我感兴趣的 KPI,并检查这些 HOF QB 与那些非 HOF QB 的水平——但这将是错误的方法。通过这种方式来衡量产量,我们实际上不是在衡量 QB,而是 QB 的团队。这是所有体育分析的基本问题之一,可以说在足球中也是如此:体育是动态系统,因此会受到 纠缠 **。**换句话说,衡量四分卫的表现只是衡量外接球手表现和进攻线表现和对方防守表现的另一种方式,反之亦然。
这在量化事物的时候显然是个问题。对于爱国者的粉丝来说,是爱国者让汤姆·布拉迪变得优秀,还是汤姆·布拉迪让爱国者变得优秀(无论哪种方式,爱国者都是优秀的!)但当我们试图确定每一块馅饼的价值时,这很重要,这样我们就可以更好地决定如何支付球员,是否交易球员,以及我们应该如何谈论游戏本身。那么,我们如何才能解开这些纠结呢?我们怎么知道是安东尼奥·布朗还是本·罗特利斯伯格推动了钢人队的进攻?当我们把一个名人堂的 QB 换成一个…正常人的时候,我们怎么知道会发生什么?
有无分析
嗯,简单的回答是我们不能,至少不是真的不能。这个游戏太复杂了,有太多移动的部分,我们不能在联盟的范围内自由地运行一个实际的实验。但是我们可以用一个相对简单的分析方法来近似地分解传递者和接受者:有无(沃沃)分析。
那么什么是沃沃呢?这个名字相当具有描述性——在最基本的层面上,我们将检查本·罗斯利伯格(和我们其他霍夫 QB)扔给安东尼奥·布朗(或勒维恩·贝尔,或任何其他 WR / RB)的每一场比赛,以及每次别人扔给 AB 或贝尔或罗斯利伯格也扔给的任何其他 WR(即带罗斯利伯格对不带罗斯利伯格)。我们将对每个 WR-QB 组合重复这一过程,特别注意我们的 HOF QBs,从那里,我们可以开始概括名人堂对接收机性能的影响,因为我们在理论上控制了所有其他变量(最后这一部分不是很准确,事实上,我们做了很多假设,其中一些可能有缺陷,我会在我们进行的过程中指出)。
我的第一步是找到一组我认为合理地反映了“名人堂”级别的球员。考虑到这一点,我将 2009 年至 2018 年的所有过往剧目分离出来,用于以下 QB(尽管对我的选择吹毛求疵,但这是我们要做的):
- 本·罗特利斯伯格
- 汤姆·布拉迪
- 佩顿·曼宁
- 埃利·曼宁
- 亚伦·罗杰斯
- 菲利普·里弗斯
- 马特·莱恩
- 德鲁·布里斯
- 托尼·罗莫
- 拉塞尔·威尔逊
至少有七名入选名人堂,而罗莫、瑞安和威尔森要么有不错的投篮,要么在某种程度上被认为是精英。
当我们检查我们选择的 KPI 时,这些选择被证明是正确的:期望点增加,或者 EPA(参见链接以获得详细的解释——在这个分析中我使用了 Ron Yurko 的 EPA 模型版本)。在同一时间段内,我选择的名人堂成员平均每次尝试的 EPA 比非 HOF QBs 多 188%(就上下文而言,总体平均值为 0.14 EPA)。
所以我们已经确定名人堂成员比非 HOF 成员产生更多的 EPA,但是这并没有真正告诉我们 QB 的质量与团队的质量。例如,环境保护局名人堂 QBs 的水平甚至可以用总体环境保护局的更大趋势来解释。让我们检查一下。
好吧,所以随着时间的推移,这种趋势实际上有利于非 HOF,但直觉上这是有道理的——我们只能根据他们过去的表现来确定名人堂成员,这固有地意味着我们的样本有点年龄偏见。事实上,在我们的研究中,有两个被选中的 QB 在经历了至少一年的受伤后退休了。因此,HOF 性能的轻微下降并不令人惊讶,而非 HOF 性能的增长虽然很大,但相比之下仍然相形见绌。
也许我们的名人堂成员更高的 EPA 可以更多地通过他们如何玩游戏来解释——这可能是 HOF 或非 HOF 团体更繁荣或萧条,这可能人为地帮助或伤害 EPA(取决于你对该策略的看法)而不是更一致的方法。通过检查两组的密度图,我们可以很快看出这是否属实。
左边的图显示分布在形状上相当相似,这告诉我们总体风格不太可能有那么大的不同,但您会注意到黑线左边的峰值(零 EPA)对于红色组来说更高,而零右边的 EPA“架子”对于蓝色组来说稍高一些——我们的名人堂成员只是一直比他们的同行产生更高的 EPA。
最后,在我们开始全面分析之前,我想仔细检查一下我的选择——虽然总体上很强——在个人层面上也有意义(不要表现得好像你不好奇根据我们选择的 KPI,谁是我最好的 QB)。
所以这些人都很可靠。嘿,即使是伊莱,他的身价也是普通非霍弗人的近两倍(加上两次超级碗 MVP 几乎保证了名人堂的破灭)。
既然我们已经确定了我们的样本组是相当合理的,那么是时候开始我们的沃沃分析了,以分离出 HOF QB 在传球比赛中的预期影响。
第一步是分离出与我选择的名人堂成员之一和至少一个其他 QB 一起打球的合理 WRs。我做了一个任意的决定,将样本限制在被两个 QB 投掷了至少 20 次的接收器上,其中一个是在我们的 HOF 班。这使得我们每一次传球都要投给这个数量的接球手。
这里需要注意的一点是 QBs 和接收器之间有重叠。例如,布兰登·库克与布雷迪和布雷斯一起打球,伊曼纽尔·桑德斯与罗特利斯伯格和培顿·曼宁一起打球,以及数据集中的其他人。并且许多接收机使用多个非 HOF QBs。当我们将数据集扩展到这些接收器中的每一个时,我们剩下 44,013 次尝试,以及一些复制。例如,我们必须分析库克的接待*四次:*一次是“没有布雷迪”,一次是“没有布雷迪”,另外两次是“有”。
在我们开始对 HOF QBs 的影响建模之前,让我们先检查一下当我们的样本中的某个人和其他人接到传球时,接收者的平均 EPA。这些简单的结果非常有趣。
伊莱…汪汪。也许这家伙根本就不该出现在名人堂里!当接受者被伊莱瞄准时,他们的平均效率降低了 17%,与他们一起玩的其他 QB 相比。但是在曼宁之外,当与 HOF QB 一起玩时,接收者平均每个目标多 18%到 213%的 EPA,而不是与其他人一起玩——不算太差。
我在这些结果中注意到的一件事是,带有的和不带的都倾向于偏高——除了马特·莱恩和伊莱的带有接收器的都高于整个研究范围的平均 EPA。
这可能意味着一些不同的事情——最明显的是,玩 HOF 的接收者往往是伟大的,因此 HOF QB 的因果关系是接收者,而不是 QB。无 EPA 的均值高于总体 EPA 均值,表明这种解释并非没有价值。这可能是真的!但最终,我发现有足够的证据表明,在没有名人堂成员的情况下打球,总的来说,四分卫的得分会比接球手多。如果我们真的想弄清“信用”问题的真相,我们可以尝试通过运行——你猜对了——另一个方向的沃沃分析来回答前一个问题,并检查有和没有特定接收者的 QB。但那是为了另一个分析…
在这两种情况下,重要的不是观察的生产水平,而是观察生产的相对差异,不管接收器的质量如何,毫无疑问,当使用 HOF 口径 QB 时,他们的生产效率更高。这让我们进入了沃沃分析的最后一步——创建一个统计模型来量化和概括用名人堂成员取代普通 QB 的相对影响。
为了做到这一点,让我们使用一个简单的线性回归和一个独立变量:一个指示传球是否是由一个 HOF QB 抛出的指标。现在,请注意,这是一个非常简单的模型,它忽略了大量的潜在变量:接收者的年龄,QB 的年龄,防守,赛季,周,天气…我可以继续下去,但这不是重点。一些更聪明的读者(和统计学家)可能已经根据早期的图表得出了这个模型的结果,但对于其他人来说,这就是你要做的。
注意到点估计的位置了吗(线中间的点)?它们是之前柱形图中显示的精确平均值!因为线性回归是对我们的指标变量的均值效应进行建模,这与仅仅取简单平均值没有什么不同。但它确实给了我们两个重要的证据:(1)效应的显著性(p ~0)和(2)我们均值估计的置信区间(圆点周围的垂直线代表我们真实均值效应所在的 95%置信区间)。然后,我们可以将点估计值转换为相对比例,从而得出我们的沃沃结论:数据表明,在其他条件相同的情况下,HOF QBs 每次尝试产生的 EPA 比非 HOF QBs 高 92%。
这是一个相当明显的结论,也是一个看起来相当重要的结论……但是如果 HOF QBs 的价值几乎是非 HOF QBs 的两倍,为什么那么多明确的非 HOF QBs 像我们的样本组一样被支付?有一大堆原因可以解释为什么这个可能是的情况,我就不多说了,但是也许我们的相对估计在实际领域并没有那么有影响力**。**毕竟,在相对较低的 EPA 上提高 92%的效率看起来似乎很多,但我们仍然在谈论相当小的数字,至少是每次尝试。记住这一点,让我们将沃沃的结果转化为一个真正重要的 KPI:胜利。
通过 EPA 和获胜概率
将我们的相对数字转换成成功是相当简单的——我们只需要找出通过 EPA 是如何预测成功的。首先,我收集了 2009 年至 2018 年的所有游戏结果。然后,我必须决定用什么变量来构建我的获胜概率模型。由于我们一直专注于通过 EPA,从逻辑上讲,我们将此作为我们感兴趣的主要变量是有意义的——但我们一直从 EPA per attempt 开始工作,这是一个比率统计。虽然速率统计对于比较效率很有用;数量或计数统计对于预测一个队获胜的可能性也是极其重要的。
举个例子,假设我们有两个队在比赛:A 队和B 队。A 队每 5 分钟控球时间得一分,而B 队平均每 15 分钟控球时间得一分。如果我们假设两个团队都模仿他们的平均水平,你会正确地得出结论:团队 A 是一个更有效的得分团队。但是如果 A 队只控球 10 分钟,而 B 队控球 50 分钟,那么 B 队有望以 23 比 14 获胜。当游戏由统计数据(在这种情况下是点数)决定时,数量和效率都很重要。
因此,考虑到这一点,我决定计算每场比赛中每支球队的总及格分数,并以此作为我们获胜概率模型的基础。
一旦我计算了每个团队的总通过 EPA,并考虑了他们是否赢得了比赛,我就拟合了一个简单的 logit 模型,仅使用这两个变量来了解通过生产对胜利可能性的影响。随着模型的拟合,我可以应用 92%的总通过 EPA 的增加来模拟用 HOF QB 替换非 HOF QB 在获胜概率方面应该做的事情。
结果是惊人的。
所以平均来说,QBs 从传球游戏中产生了大约 4.8 个总期望分,这应该大致能赢 50%的时间。这是有意义的,因为根据定义,平均 QB 应该正好在中间。如果我们将 92%的提升应用于 QB 表现相同的所有其他情况,我们应该期望从过去的比赛中获得大约 9.3 分,这应该使团队在大约 62%的时间里获胜——高出 12%,或者相对增加 24%的获胜概率。这表明,用名人堂 QB 取代一个普通球队的平均 QB,在一个 16 场比赛的赛季中应该值大约 1.92 场胜利(. 62 * 16 - .5 * 16)。由于平均每支球队有望赢得 8 场比赛,这使得预期的记录达到 10-6 场。
SOURCE: FiveThirtyEight
这是不容忽视的——根据 FiveThirtyEight 的数据,8-8 支球队只有大约 10%的机会进入季后赛,而 10-6 支球队有 88%的机会进入季后赛**。这是一个巨大的增长!所以名人堂 QBs,当他们理论上取代非 HOF QBs,其他一切都保持平等(不可能,但还是!)是否应该以惊人的 780% 增加一支球队进入季后赛的几率**。当然,我们忽略了大量的其他变量,但这仍然是一个说明性的练习,至少对我来说,这是一个非常有说服力的论点,可以找到 HOF 人才,永远不要让他离开。****
最后,我想指出的是,所有的非 HOF 换 HOF QB 互换并不是生来平等的。如果一个糟糕的球队(比如比尔队)把他们的 QB(乔希·艾伦)换成一个像汤姆·布拉迪这样的空前伟大的球员,他们将会在传球制作方面得到一个巨大的相对提升。但是他们仍然是一支糟糕的球队,汤姆 T20 能做的也就这么多了。所以即使阿伦和布雷迪互换,我们也不应该期望比尔队能赢得更多的比赛。如果你把贾里德·戈夫换成德鲁·布里斯,情况也是如此——公羊队已经很棒了,所以尽管布里斯可以说是有史以来最伟大的传球手,但他能给一支 13 胜球队带来的胜利是有限的。获得名人堂 QB 的最佳时机是当你已经在中间的某个地方…
****
结论、警告以及 2019 年对 AB 和 Bell 的期待
有或没有分析的肯定是一种过于简单的技术,但这并不意味着它不是分析武库中的一个强大工具,特别是当我们处理纠缠问题时,比如我们在 NFL 逐场比赛数据中看到的。当然,我可以考虑很多变量——特别是使用其他指标控制 QBs 周围团队的人才,或者纳入关于接收者年龄的信息(也许没有的*统计数据是由已经离开的老接收者驱动的,而不是糟糕的 QB 比赛)。但最终,我对自己的假设没有任何强烈的异议,因为我的后验信念与我的前验信念并没有太大的不同。我相信拥有一个优秀的 QB 是获胜的秘诀,而不是相反。至少有一些合理的证据证明这是真的。*****
未来我可能会更新这一分析的一种方法是将它视为一项纵向或小组研究,并拟合一个混合效应模型,以更好地控制年龄、使用和赛季中期交易或受伤。但那是另一个时间,另一篇文章。
最后,利用我们从这一分析中得出的见解(并做出不太疯狂的预测德里克·卡尔和萨姆·达诺德不值得拥有),我们明年可以从布朗和贝尔那里期待什么?
从 2009 年到 2018 年,布朗在每个目标的 EPA 中排名第 39 位(同时积累了高达 1234 个目标,是迄今为止最总的 EPA),而贝尔的排名更低,为 166 位(在纯粹的及格 EPA 中,忽略拉什)。如果我们将离开 HOF caliber QB 的预期相对变化应用于每个球员的职业 EPA 平均值,“新”EPA 在同一时期只会在 NFL 中分别排名 143 和 227 。
这是一个令人震惊的结果,也是一个可能让变得不可预测的结果。准备好你的爆米花——这将是一个疯狂的季节。我等不及了。
喜欢你读的书吗?请评论考虑 在推特上关注我