为什么我一直说你需要练习?
或者为什么练习会让你变得更好
照片由 ThisisEngineering RAEng 在 Unsplash 上拍摄——不过你的工作空间不必看起来像她的一样酷。我的肯定没有。
有大量的课程可以学习数据科学。不幸的是,他们中的大多数只在理论上教你数据科学技能。要成为一名完全成熟的数据科学家,你需要比理论在线课程更进一步,你需要实践知识。
如果你上过我的数据科学入门课程,这听起来可能很熟悉,我在课程中提到了数据科学知识的三个关键层面;理论知识、技术知识和实践知识。
理论和技术知识是你可以从在线视频、课程和指导中简单学到的东西。除此之外,你还需要练习来获得实用的知识。我将实用知识定义为知道如何将你所学的一切整合在一起,并了解数据科学的做事方式。
在大多数资料中,实践知识被描绘成有一个投资组合。当然,如果你练习,你会有一个你做过的事情的集合,这将帮助你在找工作时以作品集的形式展示你的技能。但是实践远不止于此。这是成为更好的数据科学家的一种方式。毕竟数据科学是一个动手的工作。
我来分解一下为什么我总是建议有抱负的数据科学家专注于动手工作。
获得经验
当然啦!你通过实践获得经验。听起来很明显,对吗?但是什么样的体验呢?经验到底是什么?我所说的经验,尤其是在数据科学的背景下,是指:你知道可能会发生什么问题。
预测问题在数据科学中非常重要,因为你犯的错误可能很微妙。很可能你的屏幕上不会弹出错误屏幕。直到有人指出来,你才意识到自己做错了什么。
当你在个人项目中实践时,你会经历这些错误。你制造它们,找到它们,并理解它们为什么以及如何发生。所以下一次,你会对犯同样错误的可能性更加敏感,你会采取必要的预防措施。即使这只是看待数据的一种不同方式。
这是数据科学中你无法通过被动学习(阅读或观看视频)来学习的事情之一。你只要把手弄脏就行了。
学习如何学习事物
我一直在说:开始做项目时,你不需要知道或者甚至觉得你知道关于数据科学的一切。你只需要基本的知识和一个能做的态度。当你第一次出发时,会有很多你不知道的事情。这很好。这将是对你学习如何获得新知识的训练。
在我完成计算机科学学位后,我和我的朋友们经常开玩笑说,我们在整个学位期间学到的是如何用谷歌搜索东西。这是因为这是一个非常注重实践的学位,我们的教授不断督促我们学习有时甚至在课堂上没有涉及到的东西。
学数据科学的时候,你得自己当教授,自己推自己。如果你遇到你不知道的事情,谷歌一下,看看答案,直到你得到你的解释。这在开始时可能需要一些时间,但随着时间的推移,你会更有效地找到答案。当你成为一名专业的数据科学家时,这将是一个很好的练习。
校准
我之前讲过数据科学无止境学习的问题。这是一个庞大的课题,有许多分支,可以深入到你所能理解的程度。这是练习的另一个好处。当你心中有一个项目时,它就会有一个目标。当你心中有一个目标时,它会让你专注于现实…作为一名数据科学家,你需要知道的现实。
是的,你总是可以学到更多,但我在职业生涯中看到的是,高效和有效是 90%的工作。
实践会帮助你了解你需要多少知识,需要多深的知识。专注于完成项目将会阻止你不必要的深入挖掘和迷惑自己,这通常会导致你不知所措并放弃。
内化数据科学的思维方式
数据科学的思维方式是知道什么时候做什么。帮助你选择下一步的是本能。它是关于有多少可能性的知识,途中可能发生的潜在问题,需要做什么来快速证明概念。简单地说,它让你成为这方面的专家。
实践将帮助你暴露自己的决策点,通过试错,你将学会做出正确的决定,你的直觉将及时形成。一种有效的方法是与更有经验的数据科学家合作,观察他们的工作。当我刚刚起步时,这就是我如何获得大部分数据科学家的感觉(有点像蜘蛛侠的感觉)。这就是为什么我以项目的形式设计了我的课程“掌握数据科学方法”,在这个项目中,我指导你的实际工作,你可以跟着我一起完成数据科学的整个过程。
找出最佳实践
尽管您可以在理论培训中了解最佳实践,但您不可能通过被动学习来理解和内化所有实践。当 A 发生时,很容易想到我需要做 x。但是当你在做一个项目时,发现 A 发生了会很容易吗?您是否需要做额外的检查来查看是否发生了 A?如果你这样做,那么你应该什么时候做这些检查呢?
单独写下这些问题的答案并不容易。但是当你实践时,理解最佳实践背后的原因和方法会容易得多。
你会搞砸的。然后你会谷歌一下,看一些网上的帖子。然后你会看到有人提到你以前听过最佳实践或经验法则。你会有一个灵光乍现的时刻。“这就是为什么它是最佳实践!”你会想。而且,很可能,你不会再忘记这件事了。
长话短说,练习你的技能只会对你有好处。一旦你开始做自己的项目,你会惊讶地发现你在这个过程中学到了很多。在你做之前,这是一种“你不知道你不知道什么”的情况。抓住机会,开始一个副业,相信这个过程!
看看我的网站你想成为一名数据科学家?获取文章和免费资源,面向希望将其职业生涯转向数据科学的忙碌专业人士。
为什么人们离开旧金山和纽约?离职技术人员博客帖子分析
在旧金山或纽约,一个技术兄弟能做的最老套的事情就是离开……并写下自己的经历。
在这两个地方生活过之后,我知道每个地方都有许多人相信他们注定要去这个城市,我想知道“我要离开旧金山”这种陈词滥调的博客帖子实际上有多流行,以及为什么他们会说他们要离开。我对从这两个地方搬走的目的的印象非常简单——人们离开旧金山/纽约是因为那里太贵了,或者他们厌倦了旧金山的单一文化,或者城市基础设施的广泛问题。或者,他们可能更愿意用纽约的金融兄弟来交易旧金山的金融科技加密兄弟。但是这有什么根据吗?如果是这样,我们如何才能发现?
我能想到的回答这些问题的最佳数据集是每个人在离开旧金山或纽约后写的媒体/博客文章。我读过一些,它们听起来很相似,而且很容易刮。
谢天谢地,有两个人已经为旧金山和纽约写了自定义查询(比如“离开旧金山”和“再见旧金山”)的 scrapers(感谢瑞安·库尔普和尼克·维图奇!!).他们的数据相当不错,但它只是所有故事中所有单词的聚合。那真的不行,但这是一个很好的开始。在重新搜集和抽查了他们所有的帖子后,我们有所进展。我们现在有 220 个独特的博客帖子,都(至少大致上)与离开旧金山和/或纽约市有关。每个城市大约有 120,000 个单词,大部分是英文的,而且大部分是在过去 5 年里发布的。
现在,我到底想分析什么?我有三个最重要的问题:
1。人们要搬到哪里去?
2。他们为什么要离开旧金山/纽约?
3。他们对旧金山/纽约有什么看法?
人们要去哪里?
从大量文本中判断人们去向的最简单方法是统计不同城市的提及次数。这涉及到一些相当基本的正则表达式(当然,我是通过谷歌搜索的,谁真的从头开始做正则表达式呢?),从各自的博客数据集中删除提及旧金山/纽约的内容,以及一些值得信赖的 tidyverse 工具。由此,我们得到下图。阅读此图的方法是查看标题以确定博主从哪个城市出发,并查看条形图以确定他们要去哪里。所以对于 SF 的博文(左边),最常提到的就是 LA。
这看起来不对劲。无意冒犯克利夫兰,但无论租金有多便宜,人们都不可能从纽约涌向克利夫兰。这似乎偏向于一两篇反复提到克利夫兰的博文。
下一个最好的努力是只隔离每篇博文中提到的独特城市;由此,我们得到了一个更清晰的故事。
由此看来,似乎旧金山人正在前往其他大中城市,其中 4 个在西海岸(洛杉矶、西雅图、奥克兰、波特兰),2 个在东海岸(波士顿、纽约),3 个在国际(伦敦、巴黎、多伦多)。只有 1 个位置在美国中部(奥斯汀)。
纽约看起来相当相似,提到加利福尼亚的次数比旧金山提到纽约的次数多。纽约市还包括了我认为会出现在科幻小说列表中的城市(亚特兰大+芝加哥),奥斯汀在提及频率列表中也表现强劲。克利夫兰榜上有名,但正如预测的那样,使用这种方法排名大幅下降。
这对我来说有足够的意义来证明停在这里是正确的。美国最昂贵的两个城市的人们大多搬到其他稍微便宜的地方,并经常在这两个城市之间调换。“在科技行业工作只是每隔几年就在旧金山和纽约之间搬来搬去,直到你想买房时搬到奥斯汀”这句格言似乎是有道理的。
人为什么会离开?
每个在这两个城市生活过的人(或者,老实说,任何了解这两个城市的人)可能都对人们离开这两个城市的原因有一些很好的猜测。他们非常昂贵,肮脏,并且有严重的居住问题(主要是旧金山)。对于年轻的专业人士来说,忽略这些缺点可能很容易,但对于想安定下来的专业人士来说,每年 3 万英镑的学前学费可能会赶走许多人。
确定目的的一种方法是从每个文档中搜索重要的单词或短语,并试图用它来代表人们离开的原因。确定一个单词或短语在一段文本中有多重要的最直接的方法被称为 tf-idf,它代表词频-逆文档频率。基本上,您获取文档中每个术语的频率,并将其与总的术语频率进行比较。我们可以将它视为一种方法,在控制整个博客集的内容的同时,确定单个博客帖子中最重要的词是什么。使用 tf-idf 返回一个代表重要性的数字,它是为下面的每组博客绘制的(横条越大,这个词在博客中的重要性越大)。
我们看到很多地点出现在这些结果中。对于纽约市,我们看到了纽约市周围的一些地方,人们可能会从曼哈顿(昆斯区威廉斯堡)搬到那里,同时验证了早期提到旧金山和加利福尼亚州的独特城市图。我们还看到了著名的 YouTuber Casey Neistat(他最近离开了纽约前往加利福尼亚,关于他离开的博客在数据集中),俄亥俄州(来自克利夫兰痴迷的随机博客),以及几个我不完全理解的随机单词(尤利西斯和 35mm,希望是相机而不是手枪)。
旧金山的 tf-idf 结果更令人惊讶。有几个地方提到人们已经离开或正在讨论(纽约,奥克兰),但关于技术场景的谈话都在这些结果上。创始人,工程师,boom,薪资,支付都打了前几名的成绩。我猜想旧金山关于离开的博客会关注这个城市的负面,但是我们没有看到。
感知
在看到 tf-idf 的结果后,我想知道人们对这个国家最大和最昂贵的城市最常见的负面评价是什么,以及每个正面和负面词汇在每个城市的分布情况。
查看给定文本的情感有几种方法,最常见的一种是将每篇文章中的单词与情感词典进行匹配,情感词典要么有该单词是积极的、消极的还是中性的,要么有一个描述该单词积极或消极程度的数字(5 表示最积极,-5 表示最消极,等等)。在尝试了每种方法后,我发现了每个出发点的积极和消极词汇的分布。
同样,这些结果相当令人惊讶。旧金山图表中有一些非常积极的帖子,但即使除去这些,大多数“我要离开旧金山”的博客都是积极的多于消极的,而纽约的分布更加均匀。这也证实了之前 tf-idf 分析的结果,旧金山的问题可能会让人们离开这个城市,但他们似乎不会在博客上谈论这个问题。
出于我希望显而易见的原因,我不想浏览和阅读数百篇听起来极其相似的博客文章。但相反,我通过计算正面/负面占总博客帖子的百分比,阅读了一些最正面/负面的故事。看看这个比例,我们发现一个相当令人愉快的正面帖子是关于一个软件工程师离开旧金山去多伦多,一个的帖子是一个作家从纽约搬到洛杉矶,还有可能是我读过的最负面的“离开纽约”博客。
我没有对这一点下结论,而是用 OpenAI 的 GPT-2 文本生成算法从我们提取的一组帖子中写了一篇“我要离开纽约”的博文。它是这样写的:
“我的行李已经收拾好了,我正准备把它们拖到外面,拦下一辆出租车,带我去 JFK,这是我最后一次以纽约居民的身份去纽约。我将去洛杉矶,尽管我想多看看我的国家,并和他们保持联系。所以,你们知道,当我回国的时候,我想追随梦想家、倒班工人、艺术家和成就者的脚步,是他们让我们走到了今天。我想和家乡爱我的人保持联系。我想从他们的失败中吸取教训。我要向那些激励过我,激励我达到自己的人致敬。”
更多类似的内容,请在 Twitter 上关注我或查看我的网站!
为什么有人爱访问栈溢出?
分析堆栈溢出调查的结果,找出人们为什么喜欢访问堆栈溢出
在 Unsplash 上由 Sharon McCutcheon 拍摄
Stack Overflow 每年都会举行一次年度开发者调查。这项调查是对全世界编码人员进行的最大、最全面的调查之一。
2019 年是 Stack Overflow 发布年度开发者调查结果的第九年,近 90,000 名开发者参加了这项 20 分钟的调查。这项调查结果涵盖了开发人员的个人资料、工作、技术,以及他们如何与堆栈溢出进行交互和互动。
在这里,我想强调调查中与人们如何处理堆栈溢出相关的部分。尤其是找到人们爱栈溢出的原因。我从调查结果中提取了一个数据集,并使用该数据来回答以下问题:
- 人们多久访问一次 Stack Overflow?
- 开发者为什么要访问堆栈溢出?
- 人们是如何将 Stack Overflow 与其他平台进行比较的?
所以还是用数据看看答案吧!
人们多久访问一次 Stack Overflow?
这里我想了解堆栈溢出社区有多活跃。受访者被问及他们访问堆栈溢出的频率。
这个问题的结果是我们可以看到堆栈溢出社区非常活跃。被调查者每天至少访问该网站一次,甚至多次。这是人们爱情堆栈溢出的标志。
开发者为什么要访问堆栈溢出?
从上一个问题,我们知道人们喜欢堆栈溢出。所以,我们需要找出人们喜欢它的原因。
看看结果,我们现在知道 Stack Overflow 已经成为一个可以找到特定问题答案的网站。其次是学习如何做他们还不一定需要的事情,成为开发人员社区的一部分,放松,甚至只是为了结识具有类似技能的其他人。
人们是如何将 Stack Overflow 与其他平台进行比较的?
谈到寻找特定问题答案的主要原因,在 Stack Overflow 之外还有许多其他网站。但是人们仍然爱栈溢出。所以,下一个问题的目的是要看看人们如何选择堆栈溢出相比,其他网站。
根据调查,超过一半的受访者表示,堆栈溢出比其他人快得多。这成为人们爱栈溢出的主要原因。
结论
Stack Overflow 年度开发者调查结果是理解人们为什么喜欢访问 Stack Overflow 的好方法。Stack Overflow 有一个活跃的社区,超过 95%的回答者访问该网站来寻找他们问题的具体问题。与其他资源相比,他们认为堆栈溢出要快得多。这是人们喜欢使用堆栈溢出的主要原因。
对于想要更多了解数据以及如何进行这种分析的你,可以查看 my GitHub 中的代码。
为什么随机森林和梯度提升决策树的最优 max_depth 差别很大?
尽管它们都是由决策树组成的
在 Unsplash 上由 Kishore Ragav Ganesh Kumar 拍摄
自 2014 年引入 XGBoost 以来,梯度增强决策树(GBDT)因其预测能力和易用性而广受欢迎。特别是,它已经取代了随机森林,成为异构表格数据的最佳算法。如今,许多数据科学家至少熟悉 GBDT 的一种实现,比如 XGBoost、LightGBM、CatBoost,甚至是 scikit-learn 。
然而,我们这些有随机森林经验的人可能会惊讶地发现,随机森林和 GBDT 具有非常不同的最优超参数,尽管它们都是决策树的集合。特别是,它们在最重要的超参数之一 max_depth 上有很大的不同。随机森林通常 max_depth ≥ 15,而 GBDT 通常为 4 ≤ max_depth ≤ 8。在本文中,我们将探究这种差异的原因。
偏差-方差权衡
我们简单回忆一下偏差-方差权衡的性质。模型的预期损失可以分解为三个部分:偏差、方差和噪声。
- 偏差衡量模型的系统损失。具有高偏差的模型表达能力不足以很好地拟合数据(拟合不足)。
- 方差衡量由于模型对数据集波动的敏感性而造成的损失。具有高方差的模型对数据中的虚假模式过于敏感(过度拟合)。
- 噪声是损耗中不可避免的部分,与我们的模型无关。这也被称为贝叶斯误差。
理想情况下,我们希望最小化偏差和方差,但通常这不能同时实现。因此,在偏差和方差之间有一个权衡。例如,使我们的模型更有表现力会减少偏差,但会增加方差。
决策图表
决策树是集成方法的优秀基础学习器,因为它可以通过简单地调整 max_depth 来轻松执行偏差-方差权衡。原因是决策树非常擅长捕捉不同特征之间的交互,一棵树捕捉到的交互顺序是由其 max_depth 控制的。例如, max_depth = 2 表示捕获了 2 个特征之间的交互,但没有捕获 3 个特征之间的交互。
- 浅树只能捕获低阶相互作用,因此它们具有高偏差和低方差。
- 深树可以模拟复杂的交互,并且容易过度拟合。它们具有低偏差和高方差。
通过调整 max_depth 来查看偏差-方差权衡的另一种方法是估计叶节点的数量。决策树最多可以有个 2^max_depth 个叶节点。叶节点越多,树划分不同数据点的容量就越大。
随机森林
随机森林使用 bagging 的修改来构建去相关的树,然后对输出进行平均。由于这些树是同分布的,随机森林的偏差与任何单个树的偏差相同。因此,我们希望随机森林中的树具有低偏差。
另一方面,这些树单独具有高方差是好的。这是因为平均树减少了方差。结合这两个结果,我们最终得到具有低偏差和高方差的深度树。
梯度推进决策树
梯度增强以连续的方式构建树。粗略地说,它试图通过将新的树拟合到损失函数的负梯度来减少集合的损失,从而有效地执行梯度下降。每当集合增加一个新的树,它的模型复杂度增加,它的整体偏差减少,即使新的树相当简单。
另一方面,虽然没有太多关于梯度增强的方差的理论研究,但是经验结果表明,集成的方差在增强过程中没有被有效地减小。因此,对于 GBDT,我们使用具有高偏差和低方差的浅树。
进一步阅读
- 这是一篇关于 XGBoost 和随机森林关于各种超参数的偏差-方差分解的博文。
- 偏差-方差分解的一个很好的参考文献是[1]。
- [2]的第 10、15 章非常详细地讨论了随机森林和 GBDT 的理论背景。
参考
- 页(page 的缩写)多明戈斯,一个统一的偏差-方差分解及其应用 (2000),ICML 2000。
- J.H. Friedman,R. Tibshirani 和 T. Hastie,统计学习的要素,第二版,2009 年,施普林格。
我们为什么需要 LSTM
https://images.unsplash.com/photo-1504639725590-
深入分析消失梯度问题以及 LSTM 是如何解决的。
在本帖中,我们将讨论渐变消失的问题,以及 LSTM 是如何解决的。
在深度学习中,会出现这样的情况,我们需要了解以前的数据,以便预测下一次的输出。例如,为了预测一个句子的下一个单词,我们应该知道它以前的单词,在这种情况下,我们通常的神经元不会有所帮助,因为它不知道以前的单词。RNN 在这种情况下发挥作用。RNN 是一种神经元细胞,具有保留序列信息的能力。RNN 的隐藏状态将信息从一个时间步骤传递到另一个时间步骤,因此记住了序列。
RNN 的结构(作者图)
RNN 的主要优势在于它可以保留过去处理过的数据的信息。但是过去意味着多少时间步骤?为了回答这个问题,我们必须深入了解 RNN 细胞的功能。当一个输入 x 被传入 RNN 单元时,它将被乘以一个权重 W,并加上一个偏差 b。然后,计算值将被激活函数如 sigmoid、ReLu 等非线性化。
如果我们考虑 sigmoid 函数,对于一系列输入值,它将返回(0,1)范围内的输出。如果我们考虑时间步长为 4,sigmoid 的输出为 0.3。在第 4 个时间步长结束时,RNN 的输出 Y 将为 Y=0.30.30.30.3x + b。
x 与一个非常小的数相乘,该数可以近似为零,这将导致反向传播过程中的梯度为零,因此权重不会得到优化。这个问题被称为消失梯度问题。
这将导致初始层没有被优化/训练。因为后面的层依赖于由初始层捕获的低级特征,所以模型的整体性能将会降低。如果激活函数是 ReLu,则在负输入的情况下,它将输出零,这将导致相同的问题,即使我们使用 Leaky-ReLu,负值的输出也太小,无法克服消失梯度问题。因此,改变激活函数不足以解决消失梯度问题。
使用 RNN 的主要原因是保留从以前的数据中获得的信息,但是如果我们面临梯度消失的问题,可以存储在内存中的数据量是非常有限的。
引入 LSTM 作为这个问题的解决方案。长短期记忆能够存储关于较长数据序列的处理过的信息。LSTM 如何解决渐变消失的问题?
LSTM 的结构(作者图)
在上图中,Ct 标注的水平线被称为细胞状态,LSTM 的记忆。它沿着所有的细胞携带信息,每个细胞根据它得到的输入,修改细胞状态中的信息。门用于修改单元状态。门是决定单元状态是否被修改的结构。例如,如果门产生 0,则没有新数据将被添加到单元状态,如果门产生 1,则全部数据将被添加到单元状态。改变单元状态中的数据只是将输入数据乘以门的输出,并将其添加到单元状态。
在 LSTM 单元中有三种类型的门,遗忘门、输入门和输出门。它们中的每一个将决定旧数据的哪一部分必须被忘记,新数据的哪一部分必须被记住,以及相应地存储器的哪一部分必须被给出。
现在我们将走过 LSTM。来自先前时间步长 Ct-1 的单元状态、来自先前时间步长 ht-1 的隐藏状态和输入特征被提供给 LSTM 单元。遗忘门将根据输入特征和隐藏状态给出一个输出。因为 sigmoid 将被用作激活函数,所以输出范围将从 0 到 1。遗忘门的输出将与单元状态相乘。如果输出为 0,乘以单元状态后,单元状态将为空。也就是说,该单元将会忘记到目前为止它已经学习的所有内容,并且如果输出为 1,那么该单元状态将保持不变。即该细胞将记住它所学习的一切。基于遗忘门的输出值,单元状态将改变。即被单元遗忘的信息量由遗忘门的输出决定,因此得名。这也解释了为什么我们使用 sigmoid 作为门的激活函数。由于它的输出在 0 和 1 之间变化,我们可以添加新的数据或一部分数据或不添加,这同样适用于遗忘。
忘记门决定什么数据被忘记
现在,我们已经决定了需要对现有内存做什么,接下来我们必须决定新数据的哪一部分要存储在内存中。输入门在这里发挥作用,类似于遗忘门,输入门将被给予先前时间步长的隐藏状态和输入特征,基于这些,输入门将确定存储较新数据的哪一部分。然后,双曲正切函数创建一组新值,并存储到存储器中。新创建的值将与来自输入门的输出相乘,然后将被添加到单元状态。
输入门和 tanh 决定哪些数据将被添加到单元状态(作者的图表)
(作者图)
现在,来自输入特征的新的重要信息已经被存储到存储器中,接下来,我们必须决定来自存储器的数据的哪一部分应该作为输出给出。输出门和一个双曲正切函数扮演了这个角色。输出门将决定给出单元状态数据的哪一部分,tanh 函数在-1 到 1 的范围内转换数据。那么它将作为输出与单元状态一起提供给下一个单元。
决定输出数据的输出门(作者的图表)
这些是发生在 LSTM 细胞内的过程或步骤。单元状态或存储器像传送带一样传送重要信息,而门像网关一样允许新数据进入传送带或允许不必要的数据离开传送带。
那么,这个设置如何解决渐变消失的问题呢?这里,这些门控制着进入下一个时间步的数据量,同样,这些门也控制着权重的优化方式。如果梯度在反向传播期间消失,同样的事情也会发生在正向传播中。因此,该权重不会对预测产生影响,因此在反向传播期间不会对其进行优化。
虽然 LSTM 解决了消失梯度问题,但这让我们觉得 LSTM 很复杂。但就像深度学习中发生的所有其他奇迹一样,当足够靠近时,LSTM 也是在数学的帮助下玩的一个简单的把戏。
为什么我们需要保护隐私的机器学习?
为什么保护隐私的机器学习越来越受欢迎?组织如何利用这样的系统来改进人工智能模型?
过去十年,机器学习和人工智能应用领域发展迅速。正如吴恩达正确指出的那样,人工智能确实是改变几乎所有行业的新动力。推动这种增长水平的力量是数据和计算能力。在可预见的未来,生成的数据量和计算能力都将呈指数级增长。由于人工智能模型的结果只与数据一样好,因此获得更多数据将意味着我们可以建立更好的人工智能模型。显然,我们需要更多的数据,但我们也需要足够多样并定期更新的数据。
来源:Dart 咨询公司[1]
但是,有什么问题呢?
每当你在网上搜索一些东西,或者向 Alexa 提问,或者使用你从互联网上下载的任何应用程序——甚至进行一些金融交易——你都在向这些公司提供数据。数据,可能是私人的。
人们告诉谷歌的事情,他们可能不会告诉任何人。
—塞思·斯蒂芬斯-达维多维茨(《人人都在说谎》的作者)
来自不同来源的数据被集中在一个中心位置,这导致了主要的隐私问题。
我们的个人数据存储在由组织持有的大型数据库中。这些数据然后被他们用来为我们做个性化的预测。例如,网飞的个性化电影推荐、亚马逊的产品推荐或脸书的广告推荐都使用我们的个人信息。老实说:我们都沉迷于这些个性化的体验。所以,让我们来问一个问题:我们应该用我们的隐私来换取个性化吗?
直到我们读到这样的新闻标题,我们才真正意识到将我们的个人数据提供给公司的坏处:
《纽约时报》文章(2018)
虽然一些应用程序使用数据为我们提供个性化的建议,但也有其他应用程序使用数据来拯救生命,尤其是在医疗领域。医疗保健组织已经转向数字记录保存,并构建了自己的数据基础架构来满足他们的需求。然而,这些组织积累的数据分散在不同的组织中[2],这就产生了数据岛。
尽管弥合这些数据孤岛将极大地改善患者的护理隐私问题和所有权问题,但这是实现这一目标的障碍。由于 GDPR [3]和 CCPA[4]的限制和隐私法,跨越这样的数据孤岛变得不可能。仅仅在这样碎片化的系统中加入 AI 是不够的。
图片来源:https://unsplash.com/photos/dJ65_bvipik
上面讨论了两种不同的情况。第一种被称为 B2C 或企业对消费者环境:每个人都拥有自己的个人数据,并希望这些数据被用来获得个性化体验——但不以侵犯隐私为代价。第二种是 B2B 或企业对企业的设置:大型组织拥有并存储由于隐私问题而孤立的数据,但希望这些数据用于建立更好的模型。在一个完美的世界中,我们可以将所有数据集中到一个中心位置,并用它来构建更好的人工智能系统,并希望这些数据得到负责任的使用。
隐私保护方式
然而,还有另一种方式来看待这个问题。我们可以让机器学习模型在不同地点之间传播,而不是让数据从不同来源传播到一个中心位置。
我们可以让机器学习模型在不同地点之间传播,而不是让数据从不同来源传播到一个中心位置。
通常,数据科学家在一个中心位置收集和聚合数据,并使用它来训练 ML 模型。但是,由于世界上如此多的数据被锁在这些数据孤岛中,科学家和工程师们一直试图开发不依赖于中央数据源的解决方案。这种思想形成了隐私保护机器学习系统的基础,该系统通常被称为联邦学习(FL)或联邦机器学习(FML)。
在联合设置中,机器学习模型在源处被本地训练,该源可以是数据源或包含私人用户数据的边缘设备。然后,本地训练的模型被发送到中心位置,在那里中心模型被更新。
在联合学习设置中,数据在其原始位置是安全的。只有模型参数会跨位置传输。
这种类型的 ML 训练是由 McMahan 等人[5]为更新谷歌手机中的语言模型而进行的。因此,联合学习可以用于构建 ML 模型,当一些 ML 模型信息在位置之间交换时,让数据留在它的原始位置。交换的信息不会主动泄露个人或敏感信息。
使用联合学习的优势
与传统方法相比,使用这种类型的培训有几个优点。首先,也可能是最重要的原因是,数据永远不会离开其原始位置。数据源传递的唯一信息是模型参数。因此,没有人必须说服不同的组织共享他们的数据。第二,通过不移动数据,我们能够减少通信负担。移动模型的成本比移动数据本身要低几个数量级。第三,通过在单个数据位置执行训练,我们能够克服与跨数据源的数据标准化和预处理相关的挑战。数据科学家将不必担心将来自不同来源的数据映射到一种通用格式。
结束语
因此,使用联合学习,我们能够获得在不同数据集上训练的健壮模型,同时保持隐私。它在各种类型的行业中越来越受欢迎。然而,联合学习带来了它自己的一系列挑战,如敌对攻击、数据泄漏和模型篡改,这些都是数据科学家需要小心的。
感谢 Skylar Alexander 和 Kartik Chopra 的编辑和评论。
[1]http://www . dart consulting . co . in/market-news/artificial-intelligence-market-landscape-key-players-use-cases-ai-growth/
【2】Panch,t .,Mattie,H. &切利,L.A .关于医疗保健中 AI 的“难以忽视的真相”。 npj 数字。医学。 **2、**77(2019)
【3】GDPR:https://en . Wikipedia . org/wiki/General _ Data _ Protection _ Regulation
【4】CCPA:https://en . Wikipedia . org/wiki/California _ Consumer _ Privacy _ Act
【3】h . Brendan McMahan、Eider Moore、Daniel Ramage、Seth Hampson、Blaise Agü era y Arcas、Communication
我们为什么用 0.05?
还是不是?
前几天我在读这本书,结果读到一小段试图解释“为什么我们使用. 05?”。突然我想,“哈!”没有多少人确切知道这一点(包括我在阅读之前),因为这个故事既模棱两可又非常有趣。[]这篇文章在很大程度上依赖于上述书中的解释。]
不管你做了多少统计,这个问题都没有得到很好的解释。
“你会在书的末尾找到一些表格,这些表格列出了课程中用于比较的关键值。”—每个统计学教授
好吧,但是为什么?
让我们一起来了解一下。
**简短的回答是:**因为费希尔先生在他的书中没有太多的篇幅。
但是……我们可以做出一些非常强有力的假设。
我们今天使用的是 Fisher 的使用 p 值来测试证据反对零假设的想法和 Neyman + Person 的关于测试零假设反对替代假设的想法的混合。作为一个小事实,尼曼和费舍尔是公认的不太合得来的人(更多关于理论部分的信息在这里)。
尽管试图回答这个问题,但最可能的原因是,在过去,科学家必须将他们的测试统计数据与公布的临界值表进行比较,而这些临界值表必须手工计算……在他的书中,研究人员的统计方法(Fisher,1925) 包括了临界值表,但为了节省时间和空间,作者在本书中包括了. 05、. 02、. 01 的概率值。现在,因为这些值的临界值很容易获得,而且因为当时的研究人员对 Fisher vs. Neyman-Pearson 方法感到困惑,这导致了一种趋势,即只在 p < 0.05 和 p < 0.01 时报告统计数据是显著的。
然而,大师自己提到“没有一个科学工作者有一个年复一年的固定的重要性水平,在任何情况下,他都拒绝假设;他更愿意根据他的证据和想法来考虑每一个特定的案例”(费希尔,1956)。
在过去的几年里,p 值阈值的误用在所有领域的统计学家和研究人员中掀起了波澜。
见此处、此处、此处或者寻找这篇文章作为美国统计协会此处的回应。如果你有兴趣阅读更多谷歌“NHST”(零假设显著性检验),这个主题在许多网站上都有很好的讨论。
主要问题是,0.05 被错误地大量采用,但现在当有大量信息可用时,问题在于“[……]大多数进行统计和数据分析的人只上过一两门统计课,很少接受过正式的数据分析培训。”(simplystatitics.com)
结论
我们现在经常使用 0.05 是因为:
- 发现时的可用性;
- 许多媒体,如学术界或万维网,以这种方式高度传播信息。正如乔治·科布(Mount Holyoke College 数学和统计学荣誉退休教授)所说:
“我们教授它,因为这是我们的工作;我们这么做是因为这是我们教的东西。”;
附:如果你在做高端研究,你可能想再看看 p 值对你来说到底意味着什么。
资料来源:Gigacalculator.com
如果你有兴趣学习更多关于统计学和 R 的知识,我强烈推荐这本书这里【附属链接】。如果你对 Python 感兴趣,这里有一个很棒的。
直到下次,继续学习!
为什么需要机器学习?
机器学习的优点在哪里?
Python 计算器?
当他知道我对数学之类的东西感兴趣时,他推荐我学习 Python。当时,我不知道他为什么会这么说;我热爱我自己的 PHP 和 HTML/CSS/JavaScript 世界,所以甚至懒得去检查 Python 做了什么。有一次,我见过一个朋友玩 Python shell,做数学运算,就是这样。我可以在我的计算器上做,为什么需要 Python,我很好奇。
阿莫尔·泰亚吉在 Unsplash 上拍摄的照片
你好 Python
下一次我去找他寻求专业建议的时候——他已经是软件工程专业的了——他又推荐我学 Python,。现在,我已经毕业了,失业了,我没有太多的空间四处游荡,所以我认真地接受了他的建议,正如他所说的那样。多亏了他这些年来的指点和指导,我才能够在 Django 完全转到 Python 做 web 开发,在 Sklearn 做机器学习,在 Pandas 做数据预处理,在 TensorFlow 做深度学习,在 tkinter 做 GUI 编程。他对我来说是一个无价的导师,他改变了我的生活。
我在做他分配给我的任务——比如使用 PIL 调整图像大小,使用文件操作,理解 Django 的 MVT 概念,用 Scrapy 抓取网站,等等。这对我来说并不容易,一切都是新的,我花了几个月的时间来理解什么是 Python,库是怎么回事,以及其他一些基本知识。
尤里卡时刻
一天,他和我分享他正在做的工作。他告诉我他是如何使用朴素贝叶斯分类器将名字分类成性别的。我发现这很有趣,并就此进行了更多的询问。那是我接触机器学习,意识到自己的兴趣所在的时候。我有一个问题,为什么机器学习对于性别分类是绝对必要的,他回答说,在寻找模式方面,计算机比人类好得多。那对我来说是一个灵光乍现的时刻。
为什么是机器学习?
机器学习不是万能的。它不能解决所有的问题。如果训练数据分布不同于测试数据分布,一个机器学习模型可能不能很好地概括。让我们看看机器学习的优点在哪里。
- 我发现尼泊尔人的名字很容易区分是男是女。我发现大多数以“我”或“a”结尾的名字都是女性。同样,男性的名字似乎以一个辅音字母结尾。这是我根据尼泊尔人名数据的经验发现的模式。一开始,自己去找所有的模式是一件痛苦的事。其次,数据可能比我有更丰富的经验。因此,与其试图调查所有的模式并花费太多的时间来编码这些模式,不如让机器来学习这些模式。它节省时间,代码更好维护,并且很有可能找到比人类更多的模式。
- 适应新模式
数据的分布会发生变化。我的父母和祖父母给他们的孩子起的名字可能与我或我同时代的人给他们起的名字不同。对我来说,连续检查新的模式是不可能的,所以,我在这个场景中使用了机器学习。训练是在一段时间间隔内完成的,这段时间间隔照顾到新的模式。 - 解决问题的新范式 我是尼泊尔人,熟悉尼泊尔名字,所以我知道去哪里找模式。对我来说,尼泊尔名字的领域知识使寻找模式变得更容易。但是,其他语言/文化中的名字可能不同,我可能没有一点线索去哪里寻找这些模式。在这些名字中寻找模式对我来说似乎是不可能的,但可以通过机器学习来完成。当数据是复杂的,例如图像数据时,情况更是如此。如果不使用机器学习技术,图像分类的任务是不可能完成的,因为图像可能变化很大。
- 发现隐藏的、新的模式
我们人类可以从机器学习模型学到的东西中学习。通过这种方式,我们发现了未知的新模式。例如,在垃圾邮件过滤中,机器学习模型可以帮助我们知道哪些单词/短语使电子邮件成为垃圾邮件/非垃圾邮件。类似地,聚类算法帮助我们知道哪些特征使得数据/聚类完全不同。计算机视觉中的另一个例子是类激活图。类别激活图可以帮助我们知道机器学习模型认为哪个区域对分类很重要。这样的洞见有助于人类学习任何新的隐藏模式。
如果提供足够多的高质量数据,这些就是机器学习的能力。机器学习是利用模式发现的最强大的技术。机器学习的每个优点都非常重要。由于机器学习,许多被认为无法解决的问题开始找到解决方案。传统技术在每一项指标上都被超越,这都归功于机器学习。我的导师解释了为什么机器学习是根据名字进行性别分类的正确技术。希望这篇文章能给你一些关于机器学习能力的想法。
为什么深度学习效果这么好?
意见
机器学习研究缺乏理论支柱
深度卷积神经网络的损失情况(来源:Javier Ideami,losslandscape.com)
现代机器学习研究已经显示出显著的成就。今天,我们可以训练机器检测图像中的物体,从文本中提取意义,阻止垃圾邮件,驾驶汽车,发现新的候选药物,并在国际象棋,围棋和无数其他游戏中击败顶级选手。
很多这些进步都是由深度学习推动的,特别是深度神经网络。然而,深层神经网络背后的理论仍然知之甚少。当然,我们理解单个神经元在做什么的数学,但是我们缺乏整个网络的涌现行为的数学理论。是什么让深度神经网络如此强大?
深度学习背后的直觉
我们从数学中得到一些指导。在 1989 年的一篇论文中,时任伊利诺伊大学厄巴纳分校研究员的数学家乔治·西本科(George Cybenko)证明了普适逼近定理:对于任何连续函数 f ,都存在一个单层神经网络可以任意好地逼近 f ,只要该网络的激活函数是类 sigmoid 的。
通用逼近定理(来源: Cybenko 1989
这是一个相当了不起的结果,但有一个问题:在实践中,我们不仅想要一个能很好地逼近我们所看到的数据的神经网络。我们还希望它能很好地处理看不见的数据。换句话说,这个定理没有提到过拟合的问题。
由于缺乏完整的理论,我们只能依靠直觉。更深层次的神经网络架构,也就是通常的直觉,概括得更好,过度拟合得更少。他们通过学习表示的层次来实现这一点:例如,在人脸检测中,这些可以是底部的边缘和线条,顶部附近的眼睛,以及层次顶部的完整人脸。即使脸部的一部分被隐藏,网络仍然会从剩余的输入中提取信号,从而更好地进行归纳。
这是一种很好的直觉,它看起来就是实际发生的事情。实验证实,在普通图像和文本任务上,深度神经网络优于浅层神经网络。但这只是一种直觉。我们没有一个完整的数学理论来解释为什么这种直觉应该是正确的。
当理论指导直觉时
把这种情况比作物理学。物理学比其他任何学科都更信奉实验和理论的共生。例如,粒子物理学的“标准模型”描述了构成我们宇宙的基本粒子的属性,以及这些粒子是如何相互作用的。该理论然后指导新实验的设计。例如,2012 年在欧洲粒子物理研究所发现希格斯粒子是可能的,因为理论告诉我们去哪里寻找。换句话说,理论指导我们的直觉。
理论也为意外发现提供了保障。当 OPERA 实验的研究人员在 2011 年宣布他们测量到了运动速度超过光速的中微子时,我们从理论上知道这是一个非同寻常的说法,需要仔细审查。事实上,正如后来发现的那样,光纤电缆连接不当,导致了错误的读数。
也许物理学中最重要的概念是涌现的概念:用数学方法描述宏观现象的高级理论从描述微观现象的低级理论中涌现出来。例如,当谈论一种气体时,谈论组成这种气体的单个粒子的特性很快就变得不可行了。相反,将宏观量如压力、温度和熵视为基本属性更有意义和有用。统计力学的方程式描述了这些宏观量是如何与基本粒子的状态相关联的。
简而言之,这就是物理学。理论指导直觉。实验证实了理论。较高层次的理论从较低层次的理论中涌现出来,游戏继续进行。
建造更好的桥梁:一个类比
塔科马海峡大桥的故事生动地说明了为什么有一个好的理论是如此重要。1940 年 7 月通车后,这座桥开始在风中剧烈摇晃,直到仅仅 4 个月后就轰然倒塌。一只狗死了。
当桥梁建成时,我们根本没有一个足够好的理论来解释桥梁在生产过程中所受到的空气动力。如今,通过 CFD 模拟,我们可以在建造桥梁之前对其进行压力测试,并防止类似塔科马海峡大桥的事故再次发生。理论使我们能够建造更好的桥梁。
这又把我们带回了正题。今天的机器学习实践很像 1940 年的造桥。深度神经网络似乎工作得惊人地好,但我们缺乏对它们为什么这样做的彻底的数学理解。更糟糕的是,深度学习系统有时会惊人地失败,我们也不知道为什么。
那么,我们需要的是深度学习的涌现理论:一个超越描述单个神经元做什么的理论,并解释整个网络的涌现行为。
这种涌现理论的一个候选是基于能量的学习,这是 Yann LeCun 和其他人提出的理论框架。该框架引入了描述组合系统能量的标量场。例如,对于由特征和标签组成的数据点,如果标签是正确的,这个标量能量被最小化。LeCun 表明,任何机器学习问题都可以用这种方式重新表述为能量最小化问题。在物理学术语中,这个框架将能量视为机器学习系统的涌现属性。
今天的机器学习研究几乎完全是经验性的。我们需要一个更好的理论来增强我们的直觉,让我们知道下一步该往哪里看,并区分真实信号和偶然发现。也许物理学的成功可以成为一个指南。
人工智能的下一个突破需要重新思考我们的硬件
towardsdatascience.com](/algorithms-are-not-enough-fdee1d65e536) [## 知识的极限
哥德尔、图灵和关于我们能知道什么和不能知道什么的科学
towardsdatascience.com](/the-limits-of-knowledge-b59be67fd50a)
为什么大家都用 Kaggle?
…以下是数据科学家应该这样做的原因。
在Unsplash【1】上由 Thibault Penin 拍摄的照片。
目录
- 介绍
- 卡格尔
- 利益
- 摘要
- 参考
介绍
学习数据科学可能会让人不知所措。寻找一个共享代码、数据和想法的社区似乎也是一个势不可挡且牵强附会的任务。但是,有一个地方,所有这些特征都聚集在一起。那个地方叫卡格尔。我第一次被介绍到这个平台是在学校,在我程序的第一堂课开始时,看看我会在机器学习模型竞赛的准确性挑战中处于什么位置,然后在我的最后一堂课中再次出现。我正在攻读数据科学的硕士学位,重点是机器学习。我很快意识到,有成百上千的数据科学家试图改进并向各种挑战提交他们的分数。起初看到这么多聪明上进的人都在竞争,令人望而生畏。这是看待它的一种方式,但我改变了我的想法,这个地方不仅仅是为了排列你的技能,而是一个你可以比较代码并从那些聪明的头脑中学习新想法的地方。我很感激在我作为一名数据科学家的旅程的第一周就接触到了这个信息——因为我很快就知道我会经常回到这个网站。
下面,我会列举 Kaggle 的好处,以及为什么每个数据科学家都应该使用它。
卡格尔
比赛成绩。Kaggle【2】作者截图。
什么是 Kaggle?ka ggle[3]是一个分享想法、获得灵感、与其他数据科学家竞争、学习新信息和编码技巧以及查看现实世界数据科学应用的各种示例的网站。有大量的数据集可以用于任何简单的事情,如视频游戏销售,更复杂和更重要的事情,如空气污染数据。这些数据是真实的和有参考价值的,所以你可以在项目中训练和测试你的模型,最终帮助真实的人。
Kaggle 还有很多其他有用的功能,比如数据、代码、社区、灵感、竞赛和课程。我将在下面详细介绍这些好处,这样你会发现 Kaggle 的一些有用之处。
利益
Kaggle 包括几个好处,我将在下面列出。这些是每个人使用这个网站的原因,也是你应该使用的原因。
- 数据
有几个数据集可以在 Kaggle 上使用。在这里【4】,您可以看到一个数据集列表,以及按名称搜索可以在您未来的数据科学模型中摄取的特定数据集。大多数数据集都是 CSV 文件格式。不太流行但仍然有用的是 JSON 格式的数据集、SQLite、archives 和 BigQuery。练习使用各种文件格式是有益的,正如你在数据科学工作中所期望的那样。以下是目前“最热门”数据集的三个例子。
—新冠肺炎公开研究数据集挑战赛
—揭开新冠肺炎挑战赛
—普罗佐罗。乌克兰公共采购数据集
- 代码
Kaggle 上有大量的代码。如果你想看到无数来自其他 Kaggle 用户的代码示例,你可以很容易地搜索包含代码的笔记本,以及大多数用户很好地注释他们代码的文本。这是学习、练习和观察其他人如何处理类似问题的好方法。我会说大多数人用 Python 编码,但也有其他编程语言,如 R、SQLite 和 Julia。
代码通常以笔记本的形式存在,也称为 Jupyter 笔记本,位于. ipynb 文件中。你可以看到几个展示端到端机器学习模型的例子。一些包括数据摄取和清理、探索性数据分析、特征工程、基础模型创建、最终机器学习模型实现以及结果的输出和解释。大多数数据科学家在其职业生涯中都经常使用这一流程,因为对于其他数据科学家以及您最终将与之合作的利益相关方来说,这是一种简单且易于遵循的格式。
code languages supported on Kaggle: Python, R, SQLite, and Julia
- 社区
像 Medium、GitHub、Stack Overflow 和 LinkedIn 一样,Kaggle 是一个社区,数据分析师、数据科学家和机器学习工程师可以在这里学习、成长和建立联系。您可以发布您的作品(数据、代码和笔记本),这些作品最终会被分享,从而发展您自己的社区。成为一个社区的一部分也有它自己的好处,所以我强烈建议从 Kaggle 开始,发展你自己的社区,并接触其他社区。
- 灵感
因为有数据,有代码,有社区,有课程,有比赛,你可能会受到牛逼的启发。看到其他人在帮助个人或公司的比赛中表现出色是非常鼓舞人心的。如果你被困在下一步该学什么,或者如何执行某个特定的功能,也许看到有人如何以特定的方式实现某个特定的模型,比如 random forest,你可以在一个地方看到所有这些,最终激发你创造更好的作品。
- 比赛
赢得比赛的收入。作者在 Kaggle [5]上的截图。
如果你想测试自己,看看你在同龄人中的排名,在你的简历上看起来不错,赚点外快,或者最重要的是,帮助别人,比赛是正确的选择。Kaggle 提供了无数的比赛服务所有上述的好处。上面的截图显示了前三名的比赛和他们各自的奖金。如你所见,这些不仅仅是有趣的比赛,它们也是为了更大的利益(例如健康)。
我用 Kaggle 竞赛来看我在几乎没有数据科学知识的情况下如何表现,以及在将近两年的数据科学经验的情况下如何表现。你可以想象,我进步很大。在我的文章的 Kaggle 部分的 Kaggle 截图中,我显示我在近 8000 人中处于大约前 50%——对于几天的工作来说还不错。现在你可以看到,当成千上万甚至成千上万的数据科学家为实现同一目标而竞争时,这将如何有利于一项可以识别某些健康异常的事业。
- 课程
对我来说有些新鲜的是发现 Kaggle 有数据科学课程。大约有 14 门课程可供你选择,它们列在下面。我个人很喜欢一些 SQL 课程,因为作为数据科学家,你很可能需要 SQL,而不仅仅是 Python。与其他课程网站不同的还有机器学习讲解和游戏人工智能和强化学习介绍。这里是 [6]他们网站上的所有课程:
PythonIntro to Machine LearningIntermediate Machine LearningData VisualizationPandasFeature EngineeringDeep LearningIntro to SQLAdvanced SQLGeospatial AnalysisMicrochallengesMachine Learning ExplainabilityNatural Language ProcessingIntro to Game AI and Reinforcement Learning
摘要
Kaggle 为有志成为高级数据科学家的人提供了大量资源。该网站的好处包括但不限于:数据、代码、社区、灵感、竞赛和课程。
我希望这篇文章对你有帮助!欢迎关注更多关于数据科学的文章。谢谢大家!
参考
[1]照片由 Thibault Penin 在 Unsplash 上拍摄,(2019)
[2] M.Przybyla,卡格尔评分截图,(2020)
[3] Kaggle Inc ., Kaggle 主页,(2019)
[4] Kaggle Inc ., Kaggle 数据集,(2019)
[5] M.Przybyla,Kaggle 比赛截图,(2020)
[6]Kaggle Inc .Kaggle 课程,(2019)
为什么没人用高级超参数调优?
从我们在 Determined AI 的集成深度学习训练平台中构建最先进的超参数调整的经验中获得的收获。
超参数调整 (HP 调整)是机器学习开发过程中不可或缺的一部分,可以在最大化模型预测性能方面发挥关键作用。因此,超参数调整算法在学术界得到了广泛的研究,这些算法的许多软件实现可以在网上找到。
图 1:一个超参数调整问题的例子,我们考虑深度神经网络的左侧搜索空间。右侧评估了多种配置,以找到最佳设置。(图片由作者提供。)
然而,在实现学术研究论文中提出的伪代码和作为端到端机器学习工作流的一部分执行大规模惠普调优之间存在很大差距。即使在众所周知现代惠普调优方法远远优于随机搜索和网格搜索的 ML 研究社区中,研究人员仍然主要使用这些简单的方法,因为更高级的方法太难使用。当我从研究生阶段开发 Hyperband 惠普调优算法,到在谷歌运行大规模问题的惠普调优算法,再到最近将最先进的(SOTA)惠普调优功能集成到 Determined 的培训平台时,我自己就经历过这种情况。在这篇博文中,我将分享我在整个旅程中获得的见解,以便您可以开始将 SOTA 惠普调优应用于您最紧迫的 ML 问题。
*那么,为什么在实践中使用高级惠普调优技术如此困难呢?*根据我的经验,在端到端 ML 工作流程中应用 SOTA 惠普调优方法的三个主要挑战是:
- 解决大问题:惠普大规模调优与在 scikit-learn 中将惠普调优应用于小数据集截然不同。单个模型可能需要几天或几周的时间来训练,这意味着我们必须利用并行计算,同时最大限度地提高资源效率,以使问题易于处理,包括以分布式方式高效地执行惠普搜索和训练所考虑的模型。
- 与后端系统集成:可扩展的调优算法和训练方法需要在分布式计算实例上执行,这些实例通过网络连接在一起,以交流中间结果。此外,这些实例需要连接到数据存储,以便可以保存和跟踪实验工件的再现性。
- 提供明智的用户界面:实现一个适用于大规模问题的高效惠普调优算法只有在用户能够实际使用的情况下才有用!实际上,SOTA 调优方法比传统的随机或网格搜索要复杂得多,因此,除了最高级的用户之外,对所有人来说,抽象掉这种额外的复杂性是非常重要的。
根据上面的讨论,很明显,HP 调优算法本身只是在实践中应用 HP 调优的一部分;这些挑战需要通过其他同等重要的功能来解决,如分布式培训、集群管理和可用性。这些功能已经在 Determined 的深度学习集成平台中得到支持,因此用户可以专注于模型开发,而不会陷入与深度学习相关的操作复杂性中。
在接下来的章节中,我将分享我们如何通过利用我们的专业知识和在我们的集成系统中构建现有功能,来应对应用 SOTA 惠普调谐的这些关键挑战。特别是,我将高度概括以下我们认为在实践中对高级惠普调优必不可少的功能:
扩展到大型问题
利用大规模并行性的高效调优算法
随着模型越来越大,训练时间越来越长,有效利用大规模并行性的超参数调整算法对于大规模应用至关重要。我们选择惠普调优算法的两个标准是:
- 效率:找到一个高质量的惠普配置需要多少计算量?
- 并行:分布式计算的算法有多合适?例如,有多少计算可以并行完成,以及在出现掉队者和任务失败的情况下,算法的表现如何?
就效率而言,领先的惠普调优算法利用提前停止来降低计算成本;主要思想是分配较少的资源给较差的 HP 设置,以便可以更快地找到高质量的配置。在我研究生学习的过程中,我和我的合作者通过提前停止引入了 Hyperband 进行高效的 HP 调优。我们的结果显示,Hyperband 比简单的随机搜索快 20 倍以上,并通过击败以前的 SOTA 贝叶斯优化方法展示了 SOTA 性能。从那以后,由于其简单性和理论上的合理性,Hyperband 成为 HP 调优最流行的方法之一。
对于第二个标准,大规模惠普调优算法需要对现实世界计算集群中常见的干扰(如掉队者和任务失败)具有鲁棒性。在这方面,虽然 Hyperband 算法易于并行化,但随着故障率的增加,该算法中的同步步骤引入了严重的瓶颈。为了解决这个问题,我们最近推出了一种用于大规模并行惠普调优的改进算法,称为异步连续减半(ASHA),在 MLSys 发表的论文中实现了 SOTA 性能。
Determined 通过我们的自适应惠普调优算法提供 SOTA 惠普调优功能,该算法构建于 ASHA 之上,以提高易用性。我们的自适应算法利用早期停止来评估比随机和网格搜索等强力方法多 100 倍的超参数设置(参见这篇在 ASHA 的博客文章了解更多细节)。作为 ML 实践者,我们很清楚宣称 SOTA 性能是一回事,用真实世界的实验证明它是另一回事。出于好奇,请随意跳到我们的基准测试结果来看看 Determined 的自适应惠普调优算法。
自动检查点,高效提前停止
暂停和恢复训练而不浪费太多计算的能力对于最大化基于早期停止的 HP 调优方法的效率是至关重要的;Determined 的自适应 HP 调优算法也不例外。在这一过程中,随着算法自适应地将训练资源分配给更高性能的 HP 设置,数千次试验被暂停和恢复。如果不支持有状态对象的有效保存和恢复,当自适应调整算法决定恢复进一步训练的尝试时,计算的有意义部分将被重复。
为了通过 Determined 的自适应惠普调整算法达到 SOTA 性能,我们支持高效的早期停止,就像我们支持一般容错机器学习一样:通过自动保存模型和其他有状态对象,以便我们可以在失败后恢复训练而不会丢失太多计算。代替确定,用户必须根据存储位置(例如,AWS S3、Google 云存储或分布式文件系统)编写样板代码来正确地保存和恢复模型。要正确做到这一点非常重要,而且分布式培训和再现性的相关要求会使这一点变得更加复杂。Determined 为您处理这些更复杂的用例,并允许您指定一个检查点策略来控制您的实验的存储足迹(参见检查点 gc 和检查点策略)。
大规模模型的分布式训练
光靠 SOTA 惠普调优不足以进行大规模深度学习,尤其是在模型需要数千小时训练的情况下;对于用户来说,等待几周或几个月来完成一个实验是很难的。幸运的是,分布式培训可以显著减少培训时间(例如,在药物研发应用中确定的24 倍加速)。
在 Determined 中,自适应惠普调优和分布式培训的结合实现了真正的大规模模型开发,以接近零的样板代码开发前沿人工智能。在 Determined 中启用分布式培训就像切换单个实验配置字段一样简单:
resources:
slots_per_trial: 64
在这种配置下,HP 调优实验中的每次尝试将使用 64 个 GPU 来训练单个 HP 设置。在幕后,Determined 为您处理与数据分片和模型参数通信相关的复杂性。Determined 还支持更高级的分布式训练优化选项,可以进一步加速你的实验。
鉴于 Determined 的自适应 HP 调整算法通常可以在训练单个模型收敛所需的时间内找到高质量的 HP 配置,分布式训练使得 HP 调整即使对于最大的模型也是易处理的。
与后端系统集成
自动化集群管理
以分布式方式运行大规模 HP 调优实验需要跨多个实例进行协调,以执行 HP 调优算法指示的工作负载。与随机搜索和网格搜索相比,需要将中间结果传递给算法,以便可以更新算法状态来生成未来的工作负载。建立这样一个集群既耗时又繁琐,而且通常需要为每个计算平台提供单独的解决方案。Determined 通过自动在 AWS/GCP 上提供资源来建立一个集群,然后在集群启动后安排实验,从而处理深度学习的许多操作方面。
资源供应
在 Determined 中,用户可以用一条命令启动 AWS 或 GCP 集群:
det-deploy aws/gcp up --cluster-id <> --project-id <>
使用该命令,Determined 将创建一个集群,在实例之间建立必要的网络,以便进行 HP 调优和分布式培训。然后,Determined 会根据需要自动放大和缩小实例,以训练活动实验。
用户还可以利用通常便宜 3 倍的现场/可抢占实例,让他们的计算预算更上一层楼。使用现场/可抢占的实例当然有浪费计算的风险,因为当需求增加时它们可以被关闭。有了 Determined,这些风险在很大程度上被我们在上一节中讨论的对保存和恢复实验的内置支持所减轻。
实验日程
先进先出(FIFO)调度对于计算集群来说仍然是相当普遍的,这是由于它的简单性和作为工作负载管理器的默认状态,如 SLURM 和 Sun Grid Engine 。然而,由于两个主要原因,这种调度机制不太适合机器学习集群。首先,从资源利用的角度来看,要求用户为每个实验指定静态资源需求可能是次优的。举例来说,考虑一个具有 10 个插槽的集群和一个 HP 调优实验,该实验在探索阶段可以受益于 10 个插槽,但在整个实验过程中平均只需要 4 个插槽。其次,FIFO 调度可能会导致用户之间的群集资源共享不佳,因为单个大型作业可能会使群集饱和并阻塞所有其他用户作业,例如,请参见下图。
图 2:普通 FIFO 调度器与 Determined 使用的公平共享调度器的比较。使用 Determined,大型作业不会阻止其他用户提交的作业的进度。此外,Determined 自适应地将资源分配给作业,以最大化可用利用率,而不是将固定资源分配给每个作业。(图片作者。)
通过使用集中的公平共享调度程序,使每个人都能高效工作,同时最大限度地提高集群利用率。调度器自适应地在实验被提交和处理时给它们分配资源。这允许实验在计算资源可用时利用最大程度的并行性。然而,在存在资源争用的情况下,我们的调度程序跨实验共享资源,以允许所有用户取得进展。这种行为对于团队来说尤其可取,因为在任何给定时间,集群都必须处理不同规模的实验,从需要单个 GPU 的笔记本电脑到具有数千次不同试验的惠普调优实验。
再现性的伪影跟踪
再现性对于减少错误和建立在他人工作的基础上是很重要的。尽管我们已经看到对机器学习(例如 1 、 2 )中关于再现性的挑战的认识不断提高,但是由于在整个模型开发过程中存在大量移动部件,再现性仍然难以实现。此外,由于算法的异步性质,SOTA 并行 HP 调优方法为再现性增加了另一层复杂性。
图 3: Determined 自动跟踪训练中使用的许多工件,只需点击一个按钮即可实现再现性。(图片作者。)
Determined 将上面提到的所有实验工件存储在一个托管数据库中,以便于将来访问。这使用户能够执行以下操作:(1)恢复惠普调优实验,并从停止的地方继续;(2)派生一个实验,并使用不同的配置运行;(3)通过指定检查点 ID,从检查点进行热启动培训。
提供合理的用户界面
友好的界面易于使用
我们之前观察到,大多数 ML 研究人员仍然使用简单的 HP 调优方法,如手动、网格或随机搜索,这也许并不令人惊讶,因为使用高级 HP 调优方法会引入显著的复杂性。特别是,在实践中很难应用这些方法,因为
- 它们具有内部超参数,需要进行配置以获得合适的性能,并且
- 它们需要修改模型代码来处理外部库中的实现。
在 Determined 的自适应 HP 调整算法中,对于(1),我们已经通过使用健壮的默认值配置搜索算法来简化用户界面,这些默认值在大范围的 HP 调整实验中运行良好。要在 Determined 中为您的实验使用自适应 HP tuning,只需如下指定实验配置的搜索器部分。
searcher:
name: adaptive_asha
metric: top1_accuracy
smaller_is_better: false
max_trials: 1000
max_length:
epochs: 300
已确定通过跟踪所有试验的中间性能以便后续重放,实现可重复的 HP 调整。在试验级别,Determined 通过跟踪和保存所有有状态对象(包括随机生成器)来提供容错再现性。这些功能伴随着通过设计使测定可再现的其他组件(见下图)。通过自动跟踪环境、代码和实验工件,Determined 允许用户只需点击一个按钮即可重现惠普调优实验。
通过设计,用于自适应镜像随机搜索和网格搜索的搜索器配置方案,其中主要输入对应于要评估的 HP 设置(即,试验)的数量,以及每次试验训练多长时间。高级用户可以选择指定提前停止模式,更积极的提前停止可能会使用更嘈杂的信号来分配训练资源,从而提供更高的加速。随着其他惠普调整算法的出现,对自适应行为的更细粒度控制也得到支持。
对于(2),我们的惠普调优功能与我们的集成系统无缝协作,因此您可以轻松地从训练单个模型转移到跨多台机器调优您的模型的超参数。这仅仅需要用您想要在实验配置中搜索的超参数和相关范围指定搜索空间。无需处理跨多台机器的调度,也无需修改您的代码来使用不同的惠普调优库。
用于实验管理的图形化 web 用户界面
启动惠普调优实验后,监控进度并根据需要进行调整非常重要。作为一名研究人员,我借助于监控日志来检查我的结果,并且通常等到整个 HP 调优实验完成之后才分析结果。有了 Determined,用户可以通过我们的 web UI 监控和管理实验(见下图)。对于给定的实验,该界面显示了迄今为止任何试验所达到的最佳验证性能,并总结了所有评估的超参数设置。用户还可以容易地管理他们的实验,例如,如果已经识别出合适的 HP 设置,则暂停实验,如果需要进一步调整,则恢复实验,并且分叉实验以用修改的搜索空间运行。
图 Determined 用户友好的 web UI 中的实验总结页面。(图片作者。)
决心付诸行动
让我们将这一切与 Determined 的自适应搜索器的基准测试结合起来,与 ASHA 论文和 BOHB 中使用的参考实现进行比较,后者是另一种流行的惠普调优方法。特别是,我们将使用 ASHA 论文中研究的两个基准,在经过充分研究的搜索空间上进行神经架构搜索 (NAS)。为 Determined 的自适应搜索器复制结果的代码可在这里获得供您跟随。
根据搜索速度和搜索质量来评估 HP 调优方法;即,算法能多快找到高质量的 HP 设置?为了评估这一点,我们跟踪通过搜索方法找到的最佳性能 HP 设置的验证指标,并比较所得的学习曲线。对于下面的两个基准测试,我们对 5 次 HP 调优实验的结果进行了平均,以便进行更可靠的比较。
寻找 RNN 建筑
这个搜索空间包括超过 150 亿个可能的架构,对应于语言建模的不同循环单元。我们在 Penn Treebank 数据集上训练和评估了不同的架构,并随着自适应搜索器的进展记录了最佳验证困惑(越低越好)。下图显示,Determined 的自适应搜索器略优于 ASHA 的参考实现,并在 BOHB 占据主导地位。事实上,在短短两个小时内,Determined 能够通过考虑 300 多种配置,自动找到一个困惑度低于 76 的模型;六个小时后,Determined 研究了大约 1k 种不同的配置,而随机搜索只评估了大约 20 种配置。从这个角度来看,使用可抢占实例评估 1k 配置的成本为 50 美元,而使用按需实例评估 1k 配置的随机搜索成本为 7k 美元。
图 5:在一个用于设计 RNNs 的神经架构搜索任务中,Determined 的自适应 HP 调整算法与 ASHA 的最新研究结果相匹配。该实验使用 16 个 GPU 运行,结果是 5 个 HP 调优实验的平均值。(图片作者。)
搜索 CNN 架构
该搜索空间包括对应于用于计算机视觉的不同卷积神经网络的超过五万亿(或 10 ⁸)个可能的架构。我们在 CIFAR-10 上训练和评估了不同的架构,并随着自适应搜索器的进展记录了最佳验证精度。下图显示,Determined 的自适应搜索器与 ASHA 的参考实现相匹配,并且在找到一个好的 CNN 架构方面比 BOHB 更快。这里的情况类似于 RNN 搜索领域的情况:20 小时后,Determined 在可抢占的实例上仅用 150 美元就探索了约 1k 种不同的配置,相比之下,随机搜索使用按需实例评估 1k 种配置需要 23k 美元。
图 6:在一个用于设计 CNN 的神经架构搜索任务中,Determined 的自适应 HP 调整算法与 ASHA 的最新研究结果相匹配。该实验使用 16 个 GPU 运行,结果是在 5 HP 调优实验中得到的平均值。(图片由作者提供。)
坚定地走得更远
让我们继续使用 NAS CNN 基准来演示使用 Determined 的端到端模型开发是什么样子。
在执行惠普调整以确定一个好的 CNN 架构之后,我们需要通过使用多个随机初始化来训练该架构,并在测试集上对其进行评估,从而进一步验证该架构。在一个批处理大小为 96 的 GPU 上,这个步骤通常需要将近 40 个小时。使用 Determined,我们通过将批处理大小增加到 256 并在 2 个 GPU 上并行化,轻松地将时间减少了两倍。请注意,您可以进一步提高并行度,并以更高的加速为目标(例如,在这个 NLP 示例中,我们使用 Determined 将训练速度提高了 44 倍)。
自适应搜索找到的最佳架构在 CIFAR-10 上的测试精度为 97.21,优于本文(参见表 5)中的 ASHA 基准,并达到或超过许多复杂 NAS 方法的性能(例如【ENAS】、飞镖、 GHN 、 SNAS )。
当您找到您满意的模型时,您可以将它保存到模型注册表中,用于模型版本控制/跟踪和在下游应用程序中的方便访问:
**from** **determined.experimental** **import** Determined
det = Determined() *# Connect to the master* model = det.create_model(
"nas_cnn",
description="cnn architectures from the DARTS NAS",
)
checkpoint = det.get_experiment(exp_id).top_checkpoint()
model_version = model.register_version(checkpoint.uuid)
我如何开始?
在本帖中,我们分享了 Determined 如何解决在端到端 ML 工作流中应用 SOTA 惠普调谐的关键挑战。我们的基准测试结果显示,使用我们的集成系统进行的惠普调整与 SOTA 研究得出的惠普调整结果相匹配。要尝试我们的 SOTA 惠普调优解决您的问题,请看一下本教程开始吧!
上述基准测试还展示了如何将 Determined 应用于 NAS 问题。我们的结果证实了我们之前的工作,表明 ASHA 是 NAS 的一个强基线。您可以安装一个确定的集群并在提供的代码中修改数据加载器,以尝试 NAS 来完成您今天的 ML 任务!
原载于 2020 年 10 月 8 日https://determined . ai。
为什么平稳性在时间序列分析中很重要?
照片由 Unsplash 上的 Niklas Kickl 拍摄
学习时间序列分析的基本规则
平稳性是时间序列分析领域中的一个重要概念,对如何感知和预测数据有着巨大的影响。在预测未来时,大多数时间序列模型都假设每个点相互独立。最好的说明是过去实例的数据集是静态的。对于静止的数据,系统的统计特性不会随时间而改变。这并不意味着每个数据点的值必须相同,但是数据的整体行为应该保持不变。从纯粹的视觉评估来看,没有显示趋势或季节性的时间图可以被认为是稳定的。支持平稳性的更多数值因素包括常数均值和常数方差。
趋势 =当数据长期增加或减少时
季节性 =根据一年、一周或一天中的某个时间,以固定和已知的频率重新出现的模式
静态数据的例子
如果数据不是静态的呢?
下图清楚地展示了非平稳数据的样子。左边的图有很强的正趋势,季节性很强。尽管这告诉了我们许多关于数据特征的信息,但它不是静态的,因此不能使用传统的时间序列模型进行预测。我们需要对数据进行转换,以消除不断增加的差异。
一段时间内的乘客数量&一段时间内的平均值和方差
由于数据是不稳定的,您可以执行转换来转换成稳定的数据集。最常见的变换是差分和对数变换。
差分变换
差异是一种变换,通过消除时间序列级别的变化来帮助稳定时间序列的平均值,从而消除趋势和季节性。一阶差分变换包括获取当前时间的数据点,并将其与之前的点相减。结果是时间 t 的点之间的差异的数据集。如果一阶差异是平稳的和随机的,那么它被称为“随机行走”模型。
一阶差分变换
一阶差分数据
在这种情况下,差异不会产生预期的结果。即使平均值是稳定的,方差也只是不断增加。在某些情况下,使用二阶差分变换会有效,但我决定尝试对数变换。
对数变换
有时,差异不足以消除所有非平稳数据中的趋势。对数变换取每个点的对数,并将数据转换成对数标度。重要的是要记住,对数变换之后必须始终跟随差分变换。
正如你在上面看到的,平均值和方差变得稳定,成为常数。没有趋势或强烈季节性的迹象。
扩充迪基-富勒试验
虽然视觉测试是一种快速检测静止物体的方法,但大多数情况下不会像上面那样简单。统计检验允许我们通过检验平稳性来证明我们的假设。ADF 检验,也称为“单位根检验”,是一种统计检验,用于告知零假设可以被拒绝或不能被拒绝的程度。低于阈值(1%或 5%)的 p 值表明我们拒绝零假设。
零假设 H0 =如果未能被拒绝,则表明时间序列有单位根,意味着它是非平稳的
替代假设 H1 =零假设被拒绝,表明时间序列没有单位根,意味着它是平稳的
在代码中实现这个测试最简单的方法是使用 statsmodels 库中的adfuller()函数。
from statsmodels.tsa.stattools import adfullerdef ADF_Cal(x):
result = adfuller(x)
ADF_stat = result[0]
p = result[1]
print("ADF Statistic: %f" % ADF_stat)
print("p-value: %f" % p)
print("Critical Values")
levels = [.01, .05, .1]
i = 0
for key,value in result[4].items():
print('\t%s: %.3f' % (key,value))
hyp = p < levels[i]
if ADF_stat < value:
cert = (1-levels[i])*100
print("{}% certain this is staionary".format(cert))
print('Reject H0: {}'.format(hyp))
break
i = i+1
if i >= 3:
print("Less than 90% certain that data is stationary")
print('Reject H0: {}'.format(hyp))print("Calculating ADF test for X...")
ADF_Cal(X)
结论
总的来说,理解平稳性对于了解如何处理数据至关重要。如果数据是不稳定的,那么某些转换可能有助于将其转换为稳定的数据。差分或对数变换是使数据稳定的常用技术。一种方法并不比另一种好。在做出合理的判断之前,用户需要查看所有的方法和每个结果。使用 ADF 测试等定量工具可以让我们正确理解数据的属性。
为什么存在最优策略?
有限 MDP 最优策略存在性的证明
在有限马尔可夫决策过程 (MDP)中,最优策略被定义为同时使所有状态的价值最大化的策略。换句话说,如果存在最优策略,那么使状态 s 的价值最大化的策略与使状态s’的价值最大化的策略是相同的。 但是为什么要有这样的政策存在呢?
萨顿和巴尔托关于强化学习的著名入门书认为最优策略的存在是理所当然的,并没有回答这个问题。我很难相信他们,也很难继续阅读!
在这篇文章中,我将证明有限 MDP 中最优策略的存在性。
符号和定义
马尔可夫决策过程和策略
有限 MDP 的特征在于状态的有限集合(通常由曲线 S 示出)、每个状态的动作的有限集合(通常由曲线 A 示出)、以及在即时奖励值 r 和下一状态*S’,*给定当前状态 s 和当前选择的动作 a 的概率分布,表示为 p
给定当前状态 s ,策略π是在状态 s 的可能动作上的概率分布,表示为π (a|s)。然后,给定一个策略,代理可以在环境中导航(即从一个状态到另一个状态)并通过每次转换获得奖励。
我们用大写字母表示随机变量,用小写字母表示它们的值。时间加在每个变量上,并带有一个下标。然后,给定一个策略和一个 MDP,并给定初始状态(在时间 t=1 ) s ,对于任何 T > 1 ,状态、动作和奖励值的联合分布为
价值观和贝尔曼方程
给定保单π和贴现因子 0 ≤ γ < 1, the value of each state is defined as
and the value of each pair of state and action as
It is easy to show that the values of states and action-state pairs can be written in a recursive way
These sets of equations are known as the 贝尔曼方程。
我们以后会用到这个事实
方程式 1。作为函数状态-动作值的状态值。
最优策略
策略π*是最优策略,当且仅当我们
对于任何状态 s 和任何其他策略π。
贝尔曼最优方程
我们用曲线 S 表示所有可能状态的集合,用曲线 *A(s)表示在状态 s 的所有可能动作的集合。*我们用δ表示克罗内克δ,并以下面的定理开始这一部分。
证明注释: 我们用的是 Eq。1 在证明的第 1 行,然后反复使用了这样的事实,即一对状态和动作的值 (s,a*)* 大于或等于状态的值 s。*
定理 1 说明,每当有一对状态和动作 (s,a*)* 的值大于关于策略π的状态*【s 】,的值时,则在所有状态中都有另一个策略π’优于或等于(根据状态值)π。因此,如果最优策略π*存在,其值应该满足,对于任何状态 s,
等式 2。贝尔曼最优方程的紧凑形式。
其中 curvy A(s) 代表状态 s — 下所有可能动作的集合,人们可以很容易地通过矛盾*来证明这个陈述。*使用贝尔曼方程,我们可以将方程 2 展开为
等式 3。贝尔曼最优方程的扩展形式。
这组非线性方程(与状态数一样多)被称为“贝尔曼最优方程”。所以,如果一个最优策略存在,它的值应该满足这组 equations⁴.
因此,要证明存在最优策略,必须证明以下两个陈述:
- 贝尔曼最优方程组有解,并且
- 在所有状态中,它的一个解的值大于或等于其他解的值。
解的存在唯一性
在本节中,我们证明贝尔曼最优方程组有一个唯一的解。通过这样做,我们同时证明了上述两个陈述。
贝尔曼最优算子
给定状态上的一组值,我们将值的向量定义为
它只是一个实值向量,其元素等于不同状态的值。然后,我们将“贝尔曼最优算子” T 定义为映射
运算符 T 获取一个向量值,并将其映射到另一个向量值。使用这种新的符号,很容易看出等式 2 和 3 等价于
等式 4。贝尔曼最优性方程作为贝尔曼最优性算子的不动点。
这个观察意味着贝尔曼最优方程的解与贝尔曼最优算子的不动点 s 相同。因此,为了证明 Bellman 最优性方程解的存在唯一性,可以证明 Bellman 最优性算子有唯一的不动点。
为此,我们需要引入另一个概念和另一个定理。
压缩映射和 Banach 不动点定理
考虑一个度量空间 (M,d) ,即 M 是一个集合, d 是定义在这个集合上的一个度量,用于计算 M ⁵.的每两个元素之间的距离映射 T: M → M 是收缩映射,如果存在 0 ≤ k < 1 使得对于 M 中的任意 x 和 y ,我们有
直观上,收缩映射使点之间的距离更近。图 1 展示了在两点上重复应用收缩映射的示例。
图一。压缩映射的一个例子和 Banach 不动点定理的陈述
我们对压缩映射感兴趣的原因是下面这个著名的定理,称为 Banach 不动点定理。
该定理背后的整个思想如图 1 所示:映射后所有点彼此越来越近,因此,通过重复映射,所有点收敛到一点,该点是 T 的唯一不动点。
因此,要证明 Bellman 最优性方程解的存在唯一性,只需证明存在一个度量,其中 Bellman 最优性算子是一个压缩映射。
Bellman 最优性算子是无穷范数下的压缩映射
对于任意一对值向量 V 和V’,它们的无穷范数定义为
在这一节中,我们要证明 Bellman 最优性算子是这种范数下的压缩映射。为此,我们首先需要以下引理。
证明注释: 虽然该引理相当不平凡,但其证明并不困难,只需要初等技巧。我在证明它的过程中得到了一些乐趣,并认为把它的证明留给感兴趣的 readers⁶.作为练习可能是件好事
现在,有了引理,我们终于可以进入我们的主要定理。
证明注释: 从证明的第 2 行到第 3 行,我们用了引理,从第 4 行到第 5 行我们用了绝对值函数的凸性。剩下的就简单了。
因此,贝尔曼最优性算子具有唯一的固定 point⁷,并且贝尔曼最优性方程具有唯一的解。很容易证明,在贝尔曼最优性方程的一个解上,任何贪婪策略都有与那个解相等的值。 因此,最优政策是存在的!
结论
**我们证明了( 1) 最优策略的值应该满足贝尔曼最优性方程。然后我们证明了(**2)**Bellman 最优性方程的解是 Bellman 最优性算子的不动点。通过证明(**3)Bellman 最优性算子是无穷范数下的压缩映射,并利用( 4) Banach 不动点定理,我们证明了(5)【T21)Bellman 最优性算子存在唯一的不动点。因此,存在同时最大化所有状态值的策略。
承认
感谢 Johanni Brea 和我的博士顾问 Wulfram Gerstner 向我介绍了这个主题,感谢 Mohammad Tinati 和 Kian Kalhor 对这篇文章进行了有益的讨论和校对,感谢 Berfin 辛塞克向我介绍了 Csaba Szepesvári 关于“强化学习算法”的巨著。
脚注:
萨顿和巴尔托的《强化学习:导论》。
作为一个现实生活中有点奇怪的例子,如果我们的世界是一个有限的 MDP,如果存在一个最优策略,那么,同样的烹饪方式会让我们(粗略地说)在吃晚餐和第二天在办公室工作时都最快乐。
我第一次阅读这篇文章的大部分材料是在 Csaba Szepesvári 的《强化学习的算法》和 Johanni Brea 的博士论文中。
⁴很容易证明,在贝尔曼最优方程的一个解上,任何贪婪策略都有与那个解相等的值。
⁵:关于度量的定义,你可以看我在上的文章“相关距离是度量吗?”。
**⁶ *提示:*不失一般性,假设 f₁ 的最大值大于 f₂ 的最大值。然后,将 f₁ 的最大化器命名为 a₁、和…
⁷注意到,对于任何有限的 n ,范数为无穷大的 ℝⁿ 是紧的——参见这里的关于“完备性和紧性在 R^N 中的一个证明”。
为什么道德推理应该是数据科学团队的基本能力
和两个具体行动来启动你的团队的道德知识
无论新技术被引入何处,伦理和立法都会落后于应用。从技术角度来看,数据科学领域已经不能称之为新领域,但在道德和立法方面,它还没有达到成熟。因此,这个领域特别容易出现有害的道德失误。
当我们等待——或者更好地说:继续努力——道德和立法的成熟时,我们现在如何防止这些失误?
我认为解决方案在于你自己作为一名数据科学家承担起责任。在我得出这个结论之前,我先给你简单介绍一下数据伦理和立法。此外,我将分享我自己团队的最佳实践,它给出了具体的行动,让您的团队做好道德准备。
“但是数据和模型本身就是中性的,何必担心好坏呢?”
图片来源:kiri ll _ save nkoviaiStock
如果 2012 年标志着数据科学应用黄金时代的开始,标志着数据科学被冠以 21 世纪最性感的工作,那么 2018 年可能是数据伦理的时代。在这一年,全世界开始形成一种关于数据如何被使用和不被使用的观点。
剑桥分析公司影响政治的目标显然属于“可能不”的阵营。
这一丑闻引发了关于数据使用道德的大讨论。此后,有多篇文章讨论了算法的坏处超过好处的情况。许多例子包括图像识别人工智能错误地将人类表示为大猩猩,聊天机器人 Tay 在 24 小时内变得对 Twitter 太过无礼,成为 T2,以及重男轻女的人力资源算法,这提出了一个问题:数据科学是 21 世纪最性感的工作,还是最性别歧视的工作?).
显然,数据应用已经离开了中立地带。
除了公众的关注,或者可能是由公众的关注引起的,大型(政府)组织,如谷歌、欧盟和联合国现在也看到了数据伦理的重要性。许多“数据/人工智能/人工智能指南”已经发布,这些指南可以在处理数据和分析时提供道德指导。
没有必要费时费力地阅读每一篇文章。一项针对 39 位不同指南作者的荟萃研究显示,在以下主题上有很大的重叠:
- 隐私
- 有责任
- 安全和保障
- 透明度和可解释性
- 公平和不歧视
这是一个很好的开始思考和阅读的主题列表。我强烈建议您自己更深入地研究这些问题,因为本文不会像它们的重要性所应得的那样深入地解释这些主题。
法律治理,我们到了吗?
关于数据伦理的讨论是走向适当数据监管的重要一步。理想情况下,法律基于共享的价值观,这可以通过思考和谈论数据伦理来找到。在没有事先哲学思考的情况下起草立法就像在自动售货机上盲目地按一些数字,然后希望你最喜欢的零食出来。
一些针对数据伦理的初步立法已经出台。想想的 GDPR ,它在欧盟监管数据隐私。尽管这一法规(还)不完全能够严格管理隐私,但它确实将隐私——以及数据伦理作为一个整体——推到了辩论的中心。这不是终点,而是朝着正确方向迈出的重要一步。
此时此刻,我们发现自己处于现代数据技术嵌入社会的中间状态:
- *从技术上来说,*我们有能力开发许多潜在的有价值的应用。
- 从伦理上来说,我们已经到了可以就什么是可接受的,什么是不可接受的达成一致的地步。
- 然而,从法律上来说,我们还不能适当地确保防止数据的有害应用:大多数数据伦理丑闻都是在公共领域解决的,而不是在法律领域。
目前(大部分)责任落在了数据科学家的肩上
因此,数据领域还不能通过立法进行道德管理。我认为最有希望的替代方案是由该领域最具专业知识的人进行自我监管:数据科学团队本身。
你可能会说,自我监管带来了不公平的问题,但我确实建议把它作为一种中间解决方案,用于我们发现自己处于的中间情况。一旦关于数据使用的立法更加成熟,更少——但绝不是零——的自我监管是必要的。
另一个难题是,许多数据科学家发现自己在道德行为和创建最准确的模型之间处于分裂状态。通过承担道德责任,数据科学家也有责任解决这种紧张关系。
从金钱(如 GDPR 的罚款)或对公司形象的损害来看,不道德的替代方案可能代价更高,这一观点可以说服我。你的雇主或客户可能更难被说服。“如何说服你的利益相关者合乎道德地使用数据”听起来是未来文章的好主题。
我的提议对数据科学团队有着重要的影响:除了技术技能,他们还需要数据伦理方面的知识。这种知识不能被认为是自动存在的,因为软件公司 Anaconda 发现只有 18%的数据科学学生说他们在学习中接受了数据伦理教育。
此外,仅仅一个具有伦理知识的人是不够的,每个数据科学从业者都必须具备识别其工作中潜在伦理威胁的基本技能。否则,道德事故的风险仍然很大。但是如何在你的团队中获得整体的道德知识呢?
走向伦理知识的两个具体行动
在我自己的团队中,我们采取两步走的方法:
- 在小组范围内讨论每个人在处理数据和算法时发现的道德重要性
- 在此讨论的基础上,构建一个全集团公认的道德准则
第一步,我们就学术界和商业领域的数据伦理现状对小组进行教育。这包括讨论新闻中的数据伦理问题,解释最流行的伦理框架,以及关于日常工作中如何出现伦理问题的对话。这应该使每个成员都能形成对数据伦理的看法。
在第二步中构建的团队范围的道德数据指南应该给我们的数据科学家在识别潜在威胁方面打下坚实的基础。指导方针不应该自上而下地构建;从小组讨论中得出的个人意见形成了一个更好的基础。通过这种方式,可以构建代表每个数据科学家的通用指南。
如果构建成一个详细的逐步清单,该理论将不会成功。相反,它应该作为一个总的指导方针,帮助确定哪些个案应该进一步讨论。
准确地说,这应该是数据科学家的任务:确保潜在的不道德数据使用不会被忽视。不道德的使用不仅发生在数据科学家身上,也发生在所有可能在工作中使用数据的同事身上。通过这种方式,提高了对数据伦理的认识,使公司能够负责任地利用数据的力量。
简而言之:开始谈论数据伦理
我们在技术上有能力改变生活的数据应用,但是以立法形式存在的安全网还没有到位。数据科学家在有害应用的深谷中走钢丝,伦理的总体知识是帮助他们保持平衡的支柱。通过发起适当的讨论,您的数据科学团队拥有了防止代价高昂的道德失误的工具。
正如我在文章中所主张的,关于数据伦理的讨论推动了该领域走向成熟,这样我们就可以对数据科学进行一次“”的严格而复杂的伦理审查。所以,参与讨论:对这些内容持批评态度,形成一个观点,谈论它,当你遇到新奇的信息时,经常改变你的观点。这不仅让你成为更好的数据科学家;它使整个领域变得更好。
为什么欧拉质数公式会扰乱世界
素数的这个鲜为人知但令人敬畏的特性可能会改变你对加密的看法
图片由 F. Zielen 提供(Euler 的原始图片由 J. E. Handmann 提供)
质数是现代加密的基础。原因很简单:直到现在我们还没有理解它们的数学本质。然而,通过揭开素数的神秘面纱,世界将会发生巨大的变化。在这篇文章中,我展示了素数的一个鲜为人知但令人敬畏的性质,它可能会改变你对密码学的看法。不要担心,这将是一个简单易懂的执行层面的阅读。
刷新和激励
让我们回顾一下:质数是只能被 1 或数字本身整除的整数,没有余数。例如,5 是质数(约数 1 和 5),但 6 不是质数(约数 1、2、3 和 6)。
有无穷多个素数,但是到目前为止还没有有效的算法来确定它们。特别地,没有计算第 n 个素数的公式,既不是递归的,即如果我们知道前面的(较小的)素数,我们可以计算一个素数,也不是显式的,即我们可以在不知道前面的素数的情况下直接计算一个素数。
例如,这使得著名的 RSA 密码系统如此安全。加密所需的公钥是基于两个(非常大的)素数的乘积。如果你想得到解密所需的私钥,你“只”需要确定这个乘积的质因数。然而,这目前花费如此多的计算时间,以至于 RSA 实际上是不可解锁的。
但是,如果我们发现一个可以立即计算素数的公式,会发生什么呢?这也能产生非常快速的质因数分解方法,这将意味着今天大多数密码系统的死刑判决。但是有可能找到素数的公式吗?
惊人的欧拉乘积
莱昂哈德·欧拉是世界上有史以来最杰出的数学家之一。18 世纪,他推导出一个公式,今天被称为欧拉乘积。在这里,我们关注他开创性发现的一个特例。请不要停止阅读,即使下一行第一眼看起来像象形文字。
欧拉乘积
我们翻译:等式左边的符号代表一种产品。此外,它是所有素数上的无限乘积,即我们需要用所有素数替换变量 p,并将各项相乘。我们写下来说清楚吧。
欧拉乘积的第一因子
这意味着:如果我们计算上面的乘积,插入所有的质数,我们得到定义明确的结果 pi /6。太棒了,感觉像个谜。请让我告诉你为什么。
破坏性后果
我们知道有无穷多个素数,但是我们还没有任何关于素数的封闭而有效的表示(“公式”)。有了计算能力,我们只需确定已知的最大素数。尽管如此,欧拉已经证明,如果我们根据欧拉乘积将所有的素数相乘,我们可以获得π/6 的值——尽管我们不知道所有的素数!
依我看,这表明有大量关于质数的知识我们至今还没有发现。如果我们能计算无穷多素数上的欧拉乘积,我们也应该能推导出素数的公式。例如,对于特殊的素数,闭表示是已知的。
这表明我们必须加大数论研究的力度,以揭示素数的真正本质。而可能解开这一探索的人要么被颂扬,要么被迫害。
结尾部分
我问自己这样书呆子气的话题会吸引读者吗?我是一个数论迷,然而,这不是我的日常业务,所以我很感谢你的评论。请让我知道,如果你想了解更多关于这个东西或数学以外的东西,也许我会写一个后续。
为什么每个数据团队都需要一棵“摇钱树”
这个框架如何团结我的利益相关者支持我的工作
当我加入 Square 时,我的产品团队正在跟踪大量指标。人们对它们之间的关系理解不一,对我们应该把精力集中在哪里也没有达成一致。
我的团队需要帮助。
我知道他们需要摇钱树。🤑 🌳
什么是摇钱树?
金钱树是一个简单的图表,显示了你的指标如何从你的“漏斗顶端”一路上升到你的最终目标(通常是美元和用户)。
这是一棵摇钱树的样本。
**摇钱树样本。**图片作者。
在现实中,大多数业务比这复杂得多:例如,我的团队的摇钱树的形状如下。
我团队的[修订]金钱树。图片作者。
摇钱树是怎么用的?
摇钱树确保共同理解是什么推动了你的底线,并在你最大的机会领域创造一致性。
确保达成共识
大多数“数据人”都很清楚你的许多指标是如何逐步达到你的最终目标的。但是我们的数据不太密集的利益相关者通常不同意我们的理解;他们不住在这里的荒草里。
我知道,当我抛出类似于*“处理流失率下降了”和“平均交易利润率上升了”这样的说法时,我的大多数队友都会睁一只眼闭一只眼——没有我们的帮助,他们通常不知道为什么这些事情对他们和我们的底线如此重要。老实说,这些指标在孤立的情况下并不令人兴奋。*
**摇钱树如何确保相互理解。**图片作者。
创建对齐
大多数“数据人”可能会想到几个可以改进几个指标的项目。但是在哪个最重要的问题上,你和你的团队一致吗?你将如何团结你的团队支持以增长为中心的努力,而不是产品特性?
换句话说:为什么你的产品经理会选择 A/B 测试你的入职流程,而客户要求的功能有一长串呢?
与你的摇钱树保持一致。分离出基本的行为指标:通常是获取、转化、使用、保留。这些与内部基准、外部基准和您的直觉相比如何?
**通过基准行为指标获得一致性。**图片作者。
一旦你在最大的机会领域上达成一致,你的利益相关者将真正关心你的分析结果和建议付诸行动。
概括起来
如果你的保留率是同类中最好的,没有人会关心你的流失分析。
用一棵摇钱树绘制出你的度量标准,对行为度量标准进行基准测试,并为你与利益相关者的共同理解和一致而高兴。😌
为什么 Excel 是学习数据分析的最佳方式
它是可视化的,透明的,并且让事情变得简单。
我越深入分析领域,就越觉得 Excel 是一种教学和原型制作工具。是的,当然,Excel 有它的弱点——但是作为学习的媒介,它是无与伦比的。
原因如下:
它减少了认知开销
认知开销被描述为“为了理解或联系你正在看的东西,你的大脑必须进行多少逻辑连接或跳跃。”
分析学习之旅通常是这样的:
- 学习一种全新的统计技术。
- 学习如何使用全新的编码技术实现全新的技术
- 进步到更高级的统计和编码技术,却从未对基础知识感到真正的舒适。
学习分析的统计基础已经够难的了。学习这个同时也学习如何编码会招致极高的认知开销。
现在,我确实相信通过编码实践分析有很大的好处。但是最好在掌握这些技能的同时,隔离这些技能集。
Excel 提供了学习统计技术的机会,同时不需要学习新的编程语言。这大大降低了认知开销。
这是一个可视化计算器
第一个面向大众市场的电子表格叫做visi calc——字面意思是可视化计算器。我经常认为这是电子表格最大的卖点之一。
特别是对初学者来说,编程语言就像一个“黑匣子”——输入神奇的单词,点击“play”,然后很快就有结果了。很有可能程序做对了,但是对于一个新手来说,打开引擎盖看看为什么会很难。
相比之下,Excel 可以让您观察分析过程中的每一步。它可以让你直观地计算和重新计算。
眼见为实,对吗?
你不能走捷径
像 R 和 Python 这样的开源工具让您可以访问各种各样的包,这通常意味着您不必“从零开始”使用基本功能。
虽然有用于分析的 Excel 加载项,但其中许多都很昂贵。不过没关系!事实上,离开了 Excel 的基本构件,就有更多的机会面对面地了解正在构建的东西。
在 Excel 中,我们不能总是依赖外部包来为我们进行分析。我们必须靠自己的力量到达那里。
它迫使你变得敏捷
数据分析中的一个诱惑是首先建立最复杂的可能模型,然后反向工作找到有用的东西。最好反过来:从最小可行产品开始,从那里迭代。
在 Excel 中构建一个复杂的模型比在 Python 中要困难得多——当我们需要复杂的模型时,这是一个限制——但是作为一个原型开发工具,这很好,因为它迫使我们从小处着手。
我们不是在这里生产模型
我只是强调了在 Excel 中学习分析的一些好处。你能想到其他人吗?或者你不相信?
在 Excel 中进行分析的最大反对意见之一是它可能容易出错并且难以重现。
这是绝对正确的, 但我们只是在这里学习。我们不是在生产模型。
不要因为 Excel 作为快速、可重复的分析工作流的缺点而放弃它作为教学工具的能力。
在 Excel 中学习分析:下一步是什么?
通过在 Excel 中进行实验,我学到了比其他工具更多的关于统计和分析的知识,我希望这种方法也能为你所用。
如果您想了解 Excel 对您的学习有什么帮助,请查看我在 MS Excel 多伦多免费在线会议上的演示,我将在那里演示 Excel 中的重要统计概念。 在此了解更多 。
对于演示 Excel 分析的大师班,请查看 John Foreman 的书 Data Smart:使用数据科学将信息转化为洞察力。这本书使用简单的电子表格来介绍许多人只能通过编码来实现的算法。
你更喜欢如何学习统计和分析?你看到使用 Excel 的其他优点或缺点了吗?在评论里说吧。
原载于 2020 年 8 月 2 日https://georgejmount.com。
Excel 用户为什么需要学习 Python
面向 Excel 用户的 Python
如果你已经到了 Excel 无法再处理你扔给它的东西的地步,那么你可能需要开始考虑 Python 了
我喜欢微软的 Excel。它(几乎)是我的数据分析工具库中最有价值的工具。嗯,差不多了。但是,尽管 Excel 功能强大,但很多时候我希望自己能做得更多,尤其是当我达到 Excel 的“极限”时——如果您每天都使用 Excel,您会注意到 Excel 的许多局限性很容易成为您的眼中钉。
我在这里不是要让 Excel 看起来很糟糕,不,Excel 仍然是最流行的数据操作工具——尽管规模有限。如果您使用 Excel 进行简单的数据分析和简单的仪表板报告,您可以轻松应对,没有任何顾虑。但是,如果你已经到了这样一个地步,你希望你可以自动化你的报告,以更好的速度和更少的阻力操纵大得多的数据集,或者执行更强大的计算,那么你很可能应该继续读下去。
Python 不受大小限制
Excel 可以处理超过 100 万行(具体是 1,048,576 行)。但是,当超过 10,000 行时,您会注意到工作簿开始明显变慢。用更多的工作表尝试这种方法,你肯定会遇到令人讨厌的不稳定的工作簿崩溃。
然而,Python 可以毫不费力地处理数百万行,你只受到你的 PC 计算能力的限制。
Python 不受内存的限制
遗憾的是,像 Excel 中的数组公式(CSE)这样的内存密集型计算很容易导致工作簿崩溃。微软通过 power tools (PowerQuery、PowerPivot、PowerBI 等)进行了许多改进,但内存限制并没有消失。另一方面,使用 numpy 和 pandas 等库的 Python 可以毫不费力地处理非常复杂的计算。
Python 没有集成限制
没有任何数据分析工具比 Python 具有更强的集成能力。你可以连接到 CSV 文件,HTML 网页,SQL 数据库,甚至 NoSQL 数据库。开发人员不断编写更高效的工具和库,将他们的应用程序与 Python 集成在一起
遗憾的是,Excel 无法实现自动化
Excel 不是为自动化任务而设计的,所以要求 Excel 自动化是不公平的。使用任务调度工具,Excel 用户已经能够执行入门级的自动化,但这在很大程度上取决于用户 PC 中 Excel 的可用性。然而,Python 自动化任务的能力是无限的。您不必每周打开一个文件来运行您的分析,然后将结果附加到要发送的电子邮件中,您只需使用 Python 来自动化此工作流,并完全消除流程中的人工交互需求,剩下唯一需要的操作就是提供用于分析的源文档。
跨平台能力
您是否遇到过因为在 Windows 机器上进行分析而导致工作表中的一些公式无法在 Mac 上运行的问题?这在 Microsoft Excel 中很常见,但在 Python 中很少见。从一个版本到下一个版本,库可能有不推荐使用的函数(显然,所有软件升级都是如此),但是跨平台兼容性不会影响 Python 中的数据分析
开源社区和支持
Python 是完全免费和开源的。无需许可费用、无需续订、无需财务承诺即可保持您的数据分析项目正常运行。有了大规模的社区支持,如果你遇到任何麻烦,你几乎不会被卡住。有很多资源可以让你轻松获得挑战的解决方案(Python 文档、堆栈溢出、Medium 等)
那么我应该抛弃 Excel 吗?
不,你不需要!像 pandas 这样的 Python 库被设计成可以轻松地将数据从 Excel 导入 Python,然后再导入 Excel。因此,您可以使用 Python 连接所有这些源工作簿进行分析,然后将您的分析结果导出回 Excel 以呈现给管理层,而不是尝试在 Excel 中创建“主表”来保存数百个源工作簿。有了 Python 的知识,您可以增强您的 Excel 分析和报告
照片致谢—作者
怎样才能开始学习 Python?
学习 python 就像安装 Python 和阅读文档一样简单。我承认这可能需要一些时间来适应,所以你可以在 Twitter (@kcemenike)、Github(https://github.com/kcemenike)上联系,或者你可以在 Telegram(https://t.me/PyDataCo)上参加#CodeAlong 初学者会议
Kelechi EMENIKE 是 Python 的传播者和数据战略家。您可以在 Telegram(https://t.me/pydataco)上参加他的现场初学者#CodeAlong 课程
为什么专注对您的数据科学之旅至关重要
以及它如何节省您进入该领域的时间
数据科学家大卫·罗宾逊曾说过如下名言:
“当你已经写了相同的代码 3 次,写一个函数.”
“当你亲自给了同样的建议三次后,写一篇博文。”
第一个引语是你应该很快采用的,但是这篇文章的重点(字面上)是第二个引语。我最近写了一篇文章分享我在数据科学旅程中的一些技巧。在这篇文章中,我想与你分享我自那篇文章以来一直建议的主题,聚焦。
为什么专注很重要?
尼古拉斯·皮卡德在 Unsplash 上拍摄的照片
如果你沿着这张蜘蛛网上的线走,你可能会在许多不同的交叉点上结束。
您也可以选择多条路径到达同一个交叉点。但是有一条最优路径。一条更短的路。数据科学领域也是如此。仅仅是子字段的数量就非常庞大。如果你包含了项目所需要的主题知识,如果它们不在同一个领域,那就更是如此了。如果能很快感到势不可挡…
照片由克里斯蒂安·埃尔富特在 Unsplash 上拍摄
我花了 2.5 年时间才得到数据科学的职位。如果你没有读过之前的文章,这里有一些关于我的情况的背景:
- 我是一个蹒跚学步的孩子的丈夫和父亲。
- 我是一名高中老师,每天开车上下班要花一个小时。
- 我每天只有一个小时左右的时间致力于数据科学,因为我的妻子支持我的职业转变。
刚开始没重点。由于我没有太多的编程背景,所以我从概述基础开始。如果你没有数学和/或编码方面的背景,我还是会推荐你这么做。后来,当这个领域的一切都如此迷人,我欣然接受了我能与之互动的一切时,问题就来了。但它阻止我掌握任何东西,引导我进入那句经典的话…
“万事通,无所不能。”
最终,我感到难以置信的不知所措。从那以后,有一段时间我关机,几个星期什么都不练。
那你怎么能避免我的错误呢?
有几个方法你可以采用,我应该早点考虑:
- 专注于数据科学的特定分支,如自然语言处理或数据可视化。
- 专注于一个领域,围绕该领域的项目塑造您的数据科学技能。
在我得到一些帮助来摆脱我的窠臼后,我采取了第二种方法。利用我的教育背景,我专注于从教师的角度解决与教育领域相关的问题。这让我想到:
- 根据学生的学术需求影响雇佣决定。
- 在一份简明的报告中概述了我们学校的表现。
- 使用 T4 贝叶斯版本的 T 检验来确定我的复习课是否提高了学生的理解能力,以及提高了多少。
- 分析州考试问题以指导课程决策。
我把这些项目放在我的 LinkedIn 个人资料上。他们引起了我意想不到的人的注意。这引起了校外顾问的注意,他最终提供了很多未来的帮助。它引起了脸书一名相关数据科学/教育职位招聘人员的注意,该职位起薪超过 13 万美元。讨论我在这些项目上的经历让我轻松通过了第一轮面试。
自从我变得更加专注后,我的面试率和出镜率很快就提高了。再一次,考虑到我的情况,这不是最快的,但与我之前的速度相比,这是一个巨大的进步。每次面试都改善了我展示自己的方式。直到最后…
布鲁斯·马斯在 Unsplash 上的照片
我成功了!我得到了我梦寐以求的角色,并进入了数据科学领域!
在我写这篇文章的时候,距离这个新的职业生涯开始还不到三个月,这太不可思议了!与我一起工作的人都很棒,我不断得到反馈,我的工作产生了直接和/或未来的影响,我因此得到了表扬(作为一名教师,你不会经常得到这样的表扬,所以这对我来说很重要……而且我的内心还是一个孩子)。
如果你还在寻找你的职业,要知道这不是不可能的。你能做到的!尽快专注于自己想在这个领域做的事情就好了。如果你还在尝试一点,那也没关系。但是如果可能的话,我建议尽快完成。如果你是一个家长或有类似的情况,我知道这将需要更长的时间,但你会到达那里。
当你真的到达那里,你会反思你的旅程。你会回顾这一切的好与坏。最后,你将转向你新事业的未来,并准备好开始!
感谢阅读!如果你觉得这篇文章很有帮助,并且你还没有从我的旅程中找到一些建议,你可以在下面阅读它们:
帮助您更成功地进入数据科学的提示。
towardsdatascience.com](/11-tips-for-you-from-my-data-science-journey-df884faa9f3)
此外,如果你是带着数学背景进入这个领域的,并且觉得你需要帮助组织一个学习计划,看看我在下面这篇文章中的建议:
帮助您开始学习数据科学的课程指南
towardsdatascience.com](/a-potential-data-science-foundation-for-math-backgrounds-188b03b9f1ff)
你可以在这里关注我,或者在 Linkedin 和 Twitter 上与我联系。对 Twitter 上的 DM 开放。
直到下一次,
约翰·德杰苏斯
为什么获得数据科学硕士学位是有史以来最好的决定!
在 Unsplash 上由 Austin Distel 拍摄的照片
MSDS 如何帮助我获得数据科学工作
2018 年 5 月,我本科毕业,电气工程专业。尽管这个项目很严谨,概念也很丰富,但我并不认为这是我的正确道路。当我回顾大学的四年时光时,我回忆起我参与的所有研究实验室和我参与的各种项目。我意识到我最喜欢的时刻是在电脑前,用 Python、C++或 MATLAB 编程,筛选收集到的所有数据。当时机器学习和人工智能风靡一时。当我在研究人工智能、人工智能和数据科学的主题时,我可以看到自己在这个领域工作。
作为一名工程师,我需要知道系统中的每个组件是如何工作的。我需要知道优势、风险和各种用例。当我在网上寻找学习数据科学和机器学习的资源时,他们提供的只是一个为期 3 周到 3 个月的快速课程,只是介绍用 Python 或 r 实现 ML 算法的方法。很少强调这些系统背后的实际数学和设计。正是在这一点上,我决定回到学术机构,以正确的方式学习数据科学。我报名参加了华盛顿特区乔治华盛顿大学的两年制数据科学硕士项目,因为它有机会获得联邦数据科学的机会,而且它重视神经网络工程和设计。
我的两年课程
我的数据科学课程
正如你在上面看到的,每个学期都建立在前一个学期的基础上。前两个学期花了大部分时间教学生如何争论数据、操纵数据和建模。数据挖掘、数据仓库和数据可视化等课程都非常关注这一点。其他课程,如应用统计学、模式识别、高级时间序列和机器学习,都非常数学化,并确保每个学生在进入编程讲座之前能够设计和描述一个没有代码的模型。
在我看来,第二年的重点是“有趣的东西”。此时,学生接触到了 TensorFlow、PyTorch、Keras、Caffe、OpenCV 和 NLTK 等框架。使用来自 AWS、GCP 或 Azure 的云实例,学生们学习了如何构建、改进和部署复杂的神经网络、CNN、rnn、LSTMs 和自动编码器。
赢得我的 MSDS 的关键收获:
- 公司想要拥有研究生学位的数据科学家 我们都遇到过终极的第 22 条军规:当大多数入门级的工作要求之前有长达 3 年的工作经验时,你就有了入门的机会。根据 Glassdoor 的说法,大多数公司都在“寻找拥有 5-7 年行业经验和/或硕士或博士学位的候选人”。如今,公司愿意用项目来代替行业经验。获得数据科学硕士学位的好处在于能够一举两得。经过 2-3 年的 MSDS 项目,你将获得一个硕士学位和大约 4-5 个原创的、经过深思熟虑的项目,突出了你在数据科学方面的进步。
- 投资你的未来你不需要告诉我读研不便宜。相信我,我知道。然而,我知道如果我想在数据科学领域有足够的竞争力,我需要回到学校。这是一个艰难的决定,当时我没有工作。我在一家咖啡店工作,是一名带薪的研究生研究助理。其他的空闲时间都用来上课了。最终,我在一家顶级咨询公司找到了一份梦寐以求的数据科学工作,这一切都得到了回报。每个人都想在几乎没有风险的情况下获得高回报,但随着竞争逐年加剧,人们需要愿意花费时间和金钱来获得竞争优势。
- 将科学放回数据科学 根据我测试各种数据科学证书和在线课程的经验,许多讲师专注于教授学生“简单的方法”。通常不考虑看科学期刊、先进的数学概念或研究技术。当我在 MSDS 项目的时候,我有一个非常好的机会和我的教授一起做一个研究项目,并在一份科学杂志上发表论文。直到我开始工作,我才注意到一个 ML 项目是多么基于科学方法。这一切都是关于提出一个假设,测试它,并调整优化。
值得吗?
总之,绝对!现在需要数据科学家,但公司希望有高水平的编程、商业和领导技能。我参加了一个为期 2 年的项目,在那里我只专注于数据分析、机器学习和深度学习,这将我塑造成了今天的数据科学家。我不知道未来会发生什么,但我确信我有强大的基础来应对数据世界的任何挑战。
为什么好的代码不需要注释
糟糕的代码到处都是
我强烈建议您仔细看看下面两段代码
你喜欢哪一个?乍看之下,前者似乎做了很好的工作,清楚地描述了它的每一个操作。然而,这些指令是完全多余和过时的。它们只会给读者增加另一层困惑。糟糕的评论是命名不当的变量和编程技巧不足的借口。
如果是你写的,下面是你的同事在评估上面的代码时会想到的
- 他为什么要大声说出来?他认为他的代码阅读器是弱智吗?
- 这行评论有什么意义?有什么隐藏的意思吗?
- 为什么他仍然用单个字符作为变量的名字?人们在哪一年练习这个?
你不希望你的同事不知所措,试图通过你的评论来解释你的意图。通过解释程序中的所有小细节,你认为你是在帮他们的忙,但他们所理解的恰恰相反。
布鲁斯·马尔斯在 Unsplash 上拍摄的照片
现在,再仔细看看第二段代码。你觉得代码本身就能说明问题吗?不需要解释。
每个程序员都能写出机器能理解的代码,一个好的程序员写出人类能理解的代码。好的代码不需要注释,这里有五个原因。
不必要的评论会让人分心
写程序的时候,你应该专注于算法、数据结构、性能,不要写那些没有必要的完美注释。
您的代码片段是一个流程。它从变量声明到函数定义,最后是核心执行。不要用除了代码本身没有任何其他解释的注释来打断这个流程。
好的代码有节奏,而平庸的代码有很多停顿
当其他程序员阅读你的作品时,他们倾向于将他们的思想插入到你的流程中。持续被多余的评论打断会让人分心。
注释应该在两个代码流之间建立联系,而不是将单个代码流分割成碎片。好的评论称赞你的代码,而不好的评论会让读者偏离主题。
在发表任何评论之前,问问你自己它是否有任何作用,而不是分散人们对你的程序的理解。好的代码有节奏,而平庸的代码有很多停顿。
冲动的评论根源于源代码
代码库是人们合作的地方。它有许多版本,每个程序员都有平等的机会贡献他们的工作。你不想在公开的源代码中留下一个冲动的评论。它可能会被遗忘,被深埋在主要组件中。
一条不好的评论会让你的同事甚至未来的你变得难以理解和困惑。
想象一下三年前有人留下了这样的评论
你有足够的信心删除那个评论吗?已经生产三年了。你的作品已经一团糟了,这个评论会一直在那里。它是永久的,永恒的,永恒的。
注释将植根于您的源代码。把它放在那里的程序员可能没有恶意,他只是忘记了以后需要做什么。三年后,由于他已经离开了公司,没有人会知道最初的动机是什么。
帮自己和他人一个忙,不要在代码中留下那样的注释。它笨拙、草率,而且不切实际。万一你还不确定该怎么做,不要着急。
从短期来看,补丁可以及时投入生产,但从长远来看,它把代码库变成了私人笔记。
通过你的代码交流,而不是你的评论
听起来很令人惊讶,你的程序有两个不同的通信目的:一个是与机器通信,另一个是与人类通信。机器完全理解你的指令,但对人类来说并非如此。没有面对面或直接的交谈,误解随时都可能发生。
你必须了解你的代码的受众。他们不是五年级学生。他们是你的同龄人,你的同事,或者是工作时坐在你旁边的人。他们不需要知道你为什么选择这样命名你的变量的每一个微小的原因,或者你如何创建这个程序的两页的故事。
你应该开门见山。他们只想知道你的程序是如何工作的,如何使用它。直接、清晰、简洁。良好的沟通是不需要沟通的。
写评论是拖延的一种形式
这就是我,经过一个小时的编码
这是我,在摆脱写不好的评论之后
人类的大脑天生懒惰。它倾向于用最不吓人的方式来完成任务。
开始编写程序最令人畏惧的事情是设置最初的几行。写一个长而详细的注释来解释算法是如何工作的,可能会给你的大脑一个信号,表明你正在实现某个目标。在你的评论中形成和选择正确的词语是浪费时间。
完美主义扼杀生产力。你的第一个程序可能会出现混乱,但这完全没关系。没有人会阅读你的代码初稿。
您可能想要多次迭代以产生最终版本。你花时间写世界上最好的评论是在欺骗自己。你以为你在工作,但事实上,你在拖延。
注释是开始编程的一种反生产力的方式。
先打草稿,后编辑。
差评误导读者
我们谈到了分心,有时甚至更糟。有些评论比其他评论更有害。
你的代码审查员不知道如何读心。他们可以自由理解代码,这可能与你的不同。
当你和你的合作者不在同一个页面上时,程序会有一个大的转折。它可能被用来做一些最初没有被设计的事情。
当交流有问题时,一个不好的评论就会导致误解。结果可能会破坏当前版本,要求临时修复,或者重写整个逻辑。
*没有人理解没有人有不好的评论。*只有代码才会发光,这才是你应该专注的事情。
额外收获:真实存在的有趣评论
我个人认为源代码中最有趣的注释
/*
* Dear Maintainer
*
* Once you are done trying to ‘optimize’ this routine,
* and you have realized what a terrible mistake that was,
* please increment the following counter as a warning
* to the next guy.
*
* total_hours_wasted_here = 73
*
* undeclared variable, error on line 0
*
*/
Exception up = new Exception("Something is really wrong.");
throw up; //ha ha
// I dedicate all this code, all my work, to my wife, Darlene, who will
// have to support me and our three children and the dog once it gets
// released into the public.
// drunk, fix later
// Magic. Do not touch.
// They made me write it, against my will.
public boolean isDirty() {
//Why do you always go out and
return dirty;
}
你可以点击查看完整列表
结论
不用说,我已经表明了避免多余评论的观点。争取简洁、紧凑和直截了当的编程。编码快乐!
为什么梯度下降和正规方程不利于线性回归
了解这个流行算法的实际应用
在实践中,线性回归不是用典型的教程方法完成的!(来源)
简介
大多数 ML 课程从线性回归和梯度下降和/或这个问题的正规方程开始。可能最知名的吴恩达的课程也介绍了线性回归作为一种非常基础的机器学习算法,以及如何使用梯度下降和正规方程方法求解。不幸的是,通常情况下,这些都是非常糟糕的方法。事实上,如果你曾经使用过 Scikit-learn 的LinearRegression
,你就使用过替代方法!
问题提纲
在线性回归中,我们必须估计参数θ——回归项线性组合的系数(其中x_0 = 1
和theta_0
是自由项/偏差):
我们通过最小化残差平方和(RSS)来做到这一点,即模型输出和真实值之间的平均平方差:
梯度下降法
梯度下降是一种非常通用的函数优化方法,它迭代地逼近函数的局部最小值。由于线性回归的损失函数是二次的,它也是凸的,即存在唯一的局部和全局最小值。我们通过采取基于负梯度和选择的学习速率α的步骤来接近它。
为什么这种方法在大多数情况下是不好的?主要原因是:
- 很慢 —迭代逼近最小值需要相当多的时间,尤其是计算梯度。虽然有加速这一过程的方法(随机梯度下降、并行计算、使用其他梯度方法),但对于一般的凸优化来说,这是一种固有的缓慢算法。
- 它不会精确地到达最小值 —使用梯度下降,您肯定不会到达精确的最小值,无论是局部最小值还是全局最小值。那是因为你只和梯度和学习率α一样精确。如果你想要一个真正精确的解决方案,这可能是一个相当大的问题。
- 它引入了新的超参数 alpha —你必须优化学习率 alpha,这是速度(更快地接近最小值)和准确性(更接近最小值)之间的权衡。虽然您可以使用自适应学习率,但它更复杂,并且仍然会引入新的超参数。
那么为什么我们还要为线性回归的梯度下降而烦恼呢?有两个主要原因:
- 教育目的 —由于线性回归如此简单,因此很容易用这种算法引入梯度下降的概念。虽然它在实践中不适合这个特定的目的,但它对神经网络非常重要。这很可能是为什么吴恩达在他的课程中选择了这种方式,而其他人都盲目跟随,没有明确指出你在实践中不应该这样做。
- 超大数据 —如果您有大量数据,并且必须使用并行和/或分布式计算,梯度方法非常容易使用。您只需将数据分成块,发送到不同的机器,并在许多核心/机器上计算梯度元素。大多数情况下,虽然你没有这样的需求或计算能力。
正规方程法
二次成本函数最初被选择用于线性回归,因为它具有良好的数学性质。它很容易使用,我们能够得到一个封闭形式的解决方案,即θ参数的数学公式——一个正规方程。在下面的推导中,我们去掉了1/2n
,因为在推导中它无论如何都会消失。
我们得到一个线性方程组,最后得到正规方程:
为什么这种方法也不好呢?主要原因是:
- 它很慢——有一个简短、好的等式并不意味着计算它很快。矩阵乘法是 O(n),求逆也是 O(n)。对于中等规模的数据集,这实际上比梯度下降要慢。
- 数值不稳定 —矩阵乘法
X^T * X
求矩阵的条件数的平方,后面我们还要把结果再乘以X^T
。这可能会使结果极不稳定,这也是为什么这种方法几乎从不在笔和纸线性代数或统计课程之外使用的主要原因。即使与乔莱斯基分解和解也无法挽救这一局面。
这种方法绝不应该在机器学习的实践中使用。这对于数学分析来说很好,但仅此而已。然而,它已经成为 Scikit-learn 和其他库实际使用的方法的基础。
那么大家都用什么呢?
正如我们在 ML 课程中看到的方法的缺点一样,让我们看看在实践中使用了什么。在 Scikit-learn LinearRegression
中我们可以看到:
所以 Scikit-learn 并不关心它自己的实现,相反,它只是使用 Scipy。在scipy.linalg.lstsq
中,我们可以看到这个库甚至没有使用自己的实现,而是使用 LAPACK:
最后,我们得出英特尔 LAPACK 文档中的gelsd
、gelsy
和gelss
条目:
这 3 种方法中的 2 种使用奇异值分解(SVD ),这是数值方法和机器学习中非常重要的算法。你可能在 NLP 或推荐系统中听说过它,它被用于降维。事实证明,它也用于实际的线性回归,为计算线性回归核心的最小二乘问题提供了一种相当快速且非常精确的方法。
奇异值分解和摩尔-彭罗斯伪逆
如果我们在正常方程之前停止一步,我们得到一个常规的最小二乘问题:
由于X
几乎从来不是正方形(通常我们的样本比特征多,即“高瘦”矩阵X
,这个方程没有精确解。相反,我们使用最小平方近似,即θ向量尽可能接近欧几里得距离(L2 范数)的解:
这个问题(OLS,普通最小二乘法)可以用很多方法解决,但事实证明,我们有一个非常有用的定理来帮助我们:
Moore-Penrose 伪逆是对任意矩阵的矩阵逆近似,甚至不是正方形矩阵!实际上,它是通过奇异值分解来计算的。我们将矩阵X
分解成 3 个矩阵的乘积:
摩尔-彭罗斯伪逆则定义为:
如您所见,如果我们有 SVD,计算伪逆是一个非常简单的操作,因为 sigma 矩阵是对角的。
最后,我们得出一个非常实用的线性回归系数向量公式:
这是 Scikit-learn、Scipy、Numpy 和许多其他软件包在实践中使用的。当然,有一些优化可以提高性能,如分而治之的方法来加快 SVD 计算(默认情况下由 Scikit-learn 和 Scipy 使用),但这些更多的是实现细节。主要思想仍然是——使用 SVD 和 Moore-Penrose 伪逆。
这种方法的优点是:
- 相当快 —虽然 SVD 的计算成本很高,但它还是相当快。多年的研究也促进了现代实现的速度,允许分解的并行化和分布式计算。
- 非常稳定的数值 —使用奇异值分解时,计算的数值稳定性不是问题。更重要的是,它允许我们对结果非常精确。
- 精确地到达全局最小值 —这种方法几乎和机器 epsilon 一样精确,所以我们真的有可能得到最好的解决方案。
但是要小心——这篇文章是关于线性回归的,不是关于像 LASSO 或 ElasticNet 这样的正则化版本!虽然这种方法对于线性回归很有效,但是对于正则化,我们没有好的最小二乘最小化,必须使用例如坐标下降。
总结
在这篇文章中,你已经了解了在 Scikit-learn LinearRegression
的面具下到底发生了什么。虽然梯度下降和正规方程有其应用(教育和数学性质),但在实践中,我们使用具有 SVD 的 Moore-Penrose 伪逆来获得线性回归模型的准确预测。
来源:
- https://www.deeplearningbook.org/
- https://sci kit-learn . org/stable/modules/generated/sk learn . linear _ model。LinearRegression.html
- https://math . stack exchange . com/questions/1816364/the-SVD-solution-to-linear-least-squares-linear-system-of-equations
- https://math . stack exchange . com/questions/974193/why-SVD-provide-the-least-squares-and-least-norm-solution-to-a-x-b
- https://math . stack exchange . com/questions/218333/SVD-and-linear-least-squares-problem
- https://docs.google.com/viewer?URL = https://github . com/royi avital/Projects/raw/master/SingularValueDecomposition/SVD . pdf
- https://stats . stack exchange . com/questions/278755/why-use-gradient-descent-for-linear-regression-when-a-closed-form-math-solution
- https://stats . stack exchange . com/questions/278755/why-use-gradient-descent-for-linear-regression-when-a-closed-form-math-solution
- https://stats . stack exchange . com/questions/1829/what-algorithm-is-used-in-linear-regression
- https://stats . stack exchange . com/questions/160179/do-we-need-gradient-descent-to-find-the-coefficients-of-a-linear-regression-mode
告别地理空间分析热图
我们能从基于网络的实验中学到什么?
来源:Kepler.gl
“我们在亚马逊的成功取决于我们每年、每月、每周、每天进行多少次实验。”——杰夫·贝索斯
网络实验
退一步说,网络分析在过去十年中的发展方式令人着迷!
网络分析工具已经使用户和产品分析大众化,因此使营销人员能够跟踪他们的网络应用程序的执行情况——比如用户在哪里搅动,漏斗看起来像什么,如何优化定价页面等等。
然后,就到了 A/B 测试工具时代。一旦你知道某些东西没有被优化,这些实验工具可以非常容易和快速地形成假设,做出改变,对一组用户进行测试,跟踪他们的行为,并随着时间的推移自动执行一些策略。
这使得营销人员和设计师可以测试每一个变化,从按钮的大小和颜色到促销语言!
这与创业公司在开发产品时宣扬的理念完全相同:形成一个假设,建立一个 MVP,然后看看用户如何使用它来迭代和发展!
A/B 测试。来源:尼尔·帕特尔
地面实验
如果说地面世界的实验和快速迭代,我们甚至还没有开始这样思考!我们对现实世界和地面运动知之甚少。
鉴于我们的“线下”世界如此混乱和多变(抗议、下雨、当地事件、事故、交通),这给了我们更多的理由去了解哪些策略在什么时间、什么地点有效!
网络分析帮助我们了解每个用户的行为以及他们的品味和偏好!
但是,了解我们的地面现实要求我们了解我们的用户(需求)、我们的地面合作伙伴(供应),以及位置的特征(富裕程度、价格弹性类型)。
例如,假设在任何时间点,需求和供给都不匹配。深入了解幕后发生的事情是有意义的:
- 低价值客户和供应之间是否存在不匹配?
- 是因为合作伙伴被激励去的区域是高流量区域吗?
- 是因为合作伙伴很闲但还是不接单吗?
- 是因为店铺此刻负荷过重,无法迎合更多需求吗?
资料来源:优步
基础现实是指您业务的所有不同方面(包括位置和时间)如何相互作用,在某些情况下还与外部事件(天气、当地事件、交通)相互作用。
是时候开始对我们的实验进行“空间”思考了
假设我们需要在地面部署一个激增定价模块。这种激增不仅在时间和位置上是动态的,而且在该位置的用户上也是动态的!
如果你想了解更多关于 surge 如何使用供需分析的信息,请查看以下内容:
分析这些差距是弥补差距和优化机组经济性的第一步
towardsdatascience.com](/supply-demand-gaps-in-real-time-using-geospatial-data-b125a87119c1)
举个例子,在一个价格敏感的地区,一波 3 倍的上涨表现将与在一个更富裕的地区完全不同。
在此之前,即使是考虑试验、自动化或预测,我们也需要首先分析正在发生的事情,并检测瓶颈。
来源:Kepler.gl
㈠监测
监控意味着实时跟踪和了解现场发生的情况,以便做出更具战术性的决策。
对于任何一种公司来说,监控都非常重要,因为这个世界本身就是一个不断变化的世界,需求和供给都是动态的。
它使我们能够获得正在发生的事情的实时反馈,检测异常情况并采取行动!
例如,假设某天晚上 x 区的需求下降到 50%以下,或者 y 区 60%的骑手比平均水平更空闲。正是在这些时刻,你需要不断获得信息,以便你可以采取措施。
㈡检测
通过要求司机移动和/或发送营销促销信息,立即解决你的供需缺口,在短期内是有效的。
但是,如果我们知道每周四下午 4 点在 x 区,我们的用户会因为乘车不可用而下车。你必须调整你的策略,使之适合每个周四晚上。
同样,在周末晚上,哪些领域的订单交付时间更长?我的合作伙伴在哪些领域堵车时间最长?它在时间、合作伙伴类型或地点方面有什么模式吗?
虽然监控在战术决策上很有效,但一次又一次地检测或发现问题的模式,有利于做出战略决策。
来源:Kepler.gl
㈢特征分析
今天,我们的想象力仅限于根据用户执行的操作创建不同种类的用户简档。例如,“将商品放入购物车但没有预订的用户”或“伦敦用户”或“音乐爱好者”。
但是,如何根据需求和供应在该位置的表现来创建位置配置文件呢?
例如,假设我们创建了一个名为“高价值早餐订单区域”的配置文件。在这些档案的基础上,我们可以采取行动,进行实验并跟踪发生了什么!
富裕地区、办公区、住宅区、周末聚会场所是您可以创建的配置文件的一些示例。如果你知道人们每天在工作日的早上和晚上预定什么样的车,那么它可能是一个办公区。
(四)跑步动作
这个想法是,当你已经创建了一套配置文件,你怎么能为他们运行非常语境化的策略?在网络世界中,你向一个非常活跃的用户发送的推广和向一个休眠用户发送的推广是不同的。
同样,在办公区,晚上 8 点后给乘客高额奖励也是没有意义的。
什么样的促销、SLA、激增、激励、折扣、送货费在不同的地区和不同的地方对你的企业起作用可能完全不同。
㈤测试和迭代
学习的唯一方法是形成明智的假设,测试并看看什么是可行的。
我们也相信给予运营和供应团队调整和迭代的能力,因为他们对“他们的”领域的行为有最大限度的了解。他们应该能够将头脑中的知识(通常称为“抑制”数据)添加到所有的实验和策略中。
一旦他们确定了什么是有效的,就将它自动化,并让组织中的每个人都可以利用这些知识!
向优秀的旧热图说再见
来源:微软
为什么我们不喜欢热图?
因为热图只是视觉表现,并没有量化区域。此外,它们违背了这些反馈回路的目的。
因为你不知道“什么”是表现不好的领域,所以很难做出决定。在现场,我们通过使用六边形网格系统来解决这个问题。
为什么我们在现场喜欢六边形网格!
towardsdatascience.com](/spatial-modelling-tidbits-honeycomb-or-fishnets-7f0b19273aab)
许多公司通过成功进行网络分析,增加了用户的获取、激活、转化和保留。在现场,我们正在创建通过地理空间分析和快速实验来提高单位经济性、每次交付成本和利用率的公司范例。
点击此处了解更多关于我们的信息:
是什么让实时位置数据的分析与众不同?
towardsdatascience.com](/a-product-for-movement-analytics-using-geospatial-data-2aa95b18d693)
原贴 此处 。如果你想深入研究,请查看我们的 网站 或联系我在LinkedIn或Twitter上进行演示。
为什么&如何从机器学习预测中创建分位数| Python +代码
将机器学习预测的输出除以分位数是应用商业策略的一种好方法——对熊猫函数 qcut,cut & IntervalIndex 的研究。|熊猫版:熊猫==1.1.0
目录
- 为什么要创建分位数
- 使用的数据
- 在列车上创建分位数
- 对新数据应用分位数
- 结论
为什么要创建分位数
当我们建立一个涉及机器学习组件的项目时,我们使用指标(如 AUC、RMSE 等)来选择哪个模型最适合我们的数据。然后,我们使用 sklearn *predict()*
函数来获取回归的值,或者使用 sklearn *predict_proba()*
函数来获取观察值等于类的概率(1 表示二元分类)。共同点是,它返回一个必须用于业务策略的连续输出。
建立一个商业战略通常比“如果概率≥ x 就采取行动,否则什么都不做”更复杂,比“对于连续产出的每个可能值,采取不同的行动”更简单。这就是为什么创建分位数是有意义的。更具体地说,这里有两个与回归任务和二元分类任务相关的例子。
示例 1:假设我们在一家零售服装公司的市场部工作,目标是预测数据库中每个客户一年的消费金额。基于这一点,商业策略将是为 15%消费最多的客户提供私人销售渠道,为 15%至 40%的客户提供折扣,为 40%至 60%的客户提供免费运输,并为其余客户提供简讯。
例 2:假设我们在一家房屋租赁公司的收款部门工作,我们有客户延迟付款的数据库,目标是预测哪个客户在月底仍会延迟付款。此外,我们知道,如果我们什么都不做,这些客户中的 50%仍然会延迟。考虑到容量和成本,代理可以给 10%的人打电话,给 30%的人发电子邮件,给 20%的人发短信,剩下的 40%什么也不做。
因此,创建分位数可以将这些策略应用于分布的每个部分,并利用机器学习模型的附加值。
使用的数据
在这篇文章中,我将使用一个与体育赌博相关的数据集,目标是给定 45 个特征,对“赢与没赢”进行分类。我将数据集分为训练、验证和超时测试,其中超时测试是 2019/2020 赛季,有 732 个观察值。训练分布为 70%,验证为 30%,长度分别为 3262 和 1398。target = 1(赢)是 44.3%、44.28%和 43.44%,因此在不同的集合中很平衡。我使用 Catboost 库训练了一个梯度提升算法,每个数据集的 predict_proba 具有这样的分布:
从视觉上我们可以看到,概率的分布似乎是相同的,Kolmogorov-Smirnov 双样本检验证实了这一点。因此,我们可以创造我们的分位数。
**小心!**具有相同分布的假设是强制性的,如果不是这样,分位数就不会被一般化,商业策略就会失败。
在火车上创建分位数
在这个用例中,我选择将我的分布分成 7 个分位数(100/7 = 14.23%)。一种可能的直觉是在每个 14.23%处创建一个箱,但是在不均匀分布的情况下,我们将在末端有很少的观察值,并且几乎所有的观察值都在中间。
所以这个想法是,给定一个分布,我们希望在每个分位数上有相同数量的观察值。pandas 对于该任务的作用是*pandas.qcut(x, q, labels=None, retbins=False, precision=3, duplicated='raise’)*
,其中 x 是一维数组或序列; q 是分位数的个数; labels 允许为每个分位数设置一个名称{例如:如果 q=3,则低—中—高},如果 labels=False 则返回分位数的整数; retbins=True 返回每个分位数的边界数组。
在下面的代码中,我们创建了特性“分位数”,而“边缘”是通过参数 retbins=True 获得的数组。“边缘”的值在区间[0.13653858;0.88398169]这是一个巨大的限制。的确,一个概率在[0;1]因此,在验证和测试数据集中完全有可能出现 y_proba = 0.094 或 y_proba = 0.925 的观察值。这就是为什么我修改了数组,将 0.13653858 的边界替换为-0.001(以便包含 0),将 0.88398169 的边界替换为 1,同时保留数组中其他分位数的边界。如果没有这种变化,y_proba = 0.094 或 0.925 的分位数的值将为 NaN。
此外,qcut 按升序将 0 值与 x 的最低分位数相关联,但在一些行业(如信用评分)中,它是按降序排列的,所以这就是为什么我对它进行了重新排序,以使 0 分位数代表最高概率分位数。
现在我们有了一个边界数组,让我们把它转换成 IntervalIndex。
IntervalIndex
的关键特性是查找索引器应该返回索引器值所在的所有区间。FloatIndex
是一个糟糕的替代品,因为浮点精度问题,还因为我不想用一个点来标记值。斯蒂芬·肖耶
我使用了熊猫*pandas.IntervalIndex.from_breaks(breaks, closed='right', name=None, copy=False, dtype=None)*
的函数,其中 breaks 是之前定义的一维数组“ed”,*closed =‘right’*旨在表示区间的哪一部分是闭合的(right 意味着右边的值包含在区间中),而 dtype 是推断的格式(在我们的例子中我让 None,推断的格式是 float64)。
现在,可以在 pandas 函数*pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise', ordered=True)*
中使用区间索引对象。这里, x 是要 bin 的 1d 数组或序列, bins 是宁滨的标准,可以取整数、标量序列或 IntervalIndex右、标签、包含 _ 最低、精度和排序如果 bin 为 IntervalIndex 则忽略。在下面的例子中,我创建了一个新的特征“分位数间隔”,它基于 IntervalIndex 应用 y_proba 的切割。训练数据集如下图 1 所示。
为了完成分位数的创建,我将分位数值存储在一个名为 dict_inter_quantile 的数据帧中(见图 2)及其相关的 IntervalIndex。
图 1。训练数据集使用条柱切割=Interval_Index
图 2。分位数数据帧
现在已经解释了在训练集上创建分位数的方法,让我们看看如何将它们应用于新数据,比如验证、测试和任何新数据。
对新数据应用分位数
这一部分非常简单,因为所有的工作都已经完成了。因此,我们只需使用 cut 函数,以获得概率的 IntervalIndex,并将数据集连接到 dict_inter_quantile,以获得分位数的值。
提供图 3 输出的测试集(验证或任何新数据的相同过程)的例子。
图 3。基于训练集的 IntervalIndex 的具有关联分位数& quantile_interval 的测试数据集。
现在我们已经有了每个新观察值的预测概率的相关分位数,我们可以验证分位数的分布是否在验证和测试中与训练一样均匀分布。
图 4。训练值计数-验证-测试数据集
那又怎样? 上面的图 4 显示了训练-验证-测试之间的分位数的观察百分比非常相似,这意味着数据没有移动,因此我们可以将训练数据集中的边界应用于测试数据集。此外,我们可以应用一种操作策略,如开始时的示例,我们可以检查 y = 1 在每个分位数中的百分比,以查看它是否按相同的顺序排列,和/或如果百分比在数据集之间相似,我们可以尝试改进分布的某些部分,…
结论
我们看到了为什么从预测中创建分位数与应用商业策略相关,如何从分布中创建分位数,以及如何在新的分布中使用分位数。只有当您的发行版相同时,这才有意义。你可以用 Kolmogorov-Smirnov 测试或更奇特的方法来检查它。
为什么以及如何使用 Bland-Altman 图进行 A/B 测试| Python +代码
最初在医学领域用于比较两种不同仪器提供的两种测量值,本文展示了为什么以及如何将其应用于 A/B 测试——关于 pyCompare 函数 blandAltman | pyCompare 的版本:pyCompare==1.5.1 的研究
目录
- 为什么用布兰德-奥特曼的剧情
- 使用的数据
- 布兰德-奥特曼剧情如何构建
- 如何解读 A/B 测试的 Bland-Altman 图
- 结论
- 参考文献
为什么要用布兰德-奥特曼的情节
Bland-Altman 图来自医疗行业,用于比较两种仪器的测量值。约翰·马丁·布兰德和道格拉斯·奥特曼的第一个目标是回答这个问题:
这两种测量方法足够接近吗?—奥特曼和布兰德[1]
如果是这样的话,这意味着如果你有两台仪器,其中一台是最先进的,成本很高,另一台便宜 10 倍,那么用最便宜的方法得到的结果是否可以与参考值相比,是否可以以足够的精度进行替换?例如,作为心电图的结果,20 美元的联网手表提供的心率足够准确吗?第二个目标是产生一种方法,使非统计人员能够容易地理解结果。
在分析中,A/B 测试(众所周知的冠军挑战者)是一种常用的测试方法,用于比较人口 A 和人口 B 的新行动/新治疗/新设计的结果。一旦我们有了测试结果,就必须对它们进行分析,并提交给一个主要由非统计人员组成的决策团队。这就是为什么 Bland-Altman 图是相关的,因为它将在一个图上比较 A/B 测试的结果与以可理解的方式显示的所有统计测量。
在他们的论文中,他们还说明了为什么相关系数、均值比较的统计检验和回归不适合决定两个测量值的一致性,这在我们的 A/B 测试案例中是决定挑战者与冠军相比的实力。
使用的数据
在本文中,我将使用 Kaggle 上的一个数据集(来自 DataCamp 项目),名为“用 Cookie 猫进行移动游戏 A/B 测试”。链接在参考文献部分[2]。
曲奇猫是一款流行的手机益智游戏,当玩家在关卡中前进时,他会遇到“关卡”,迫使他等待一段时间才能继续游戏或进行购买。在这样的行业中,保留是关键指标之一,如果第一个关卡从 30 级移动到 40 级,负责游戏的团队将会看到 7 天保留的影响。为了了解这种移动的行为,他们进行了 A/B 测试,并向我们提供了这些结果的数据集。我们将看到 Bland-Altman 图将如何回答以下问题:“当等待时间从 30 级到 40 级时,如何分析 7 天留存水平上的 A/B 结果?”
数据集由 90.189 行组成,其中有玩家的唯一 id、A/B 测试的版本(在 gate_30 / gate_40 的等待时间)、游戏回合的总和,如果玩家第二天回来,retention_1 是布尔值,如果玩家 7 天后回来,retention_7 是布尔值。为了有相关的数据来回答我们的问题,有必要做一些清理。我将只保留 retention_1 = True(因为如果 retention_1=False,retention_7 也为 False)的客户端,游戏回合数≥ 30(因为如果他们不到 30,他们将不会受到 gate 的影响)和游戏回合数< 170 (because if we consider the duration of a game = 5 minutes, if a player plays 2 hours per day during 7 day he will play 120*7/5 = 168 games. A higher number would be considered as an anormal usage). After this filter, the dataset is composed of 20.471 rows as Figure1 below. Moreover, the dataset is equally balanced between gate_30 & gate_40.
Figure1. CookieCats dataset
How is built the Bland-Altman plot
We will see on this section how to adapt the original Bland-Altman plot in order to apply it to an A/B test. First of all I am going to explain how is the plot built in its original version [1], [2] and then, I will explain how to build it with our A/B tests’ data.
Due that the original Bland-Altman plot compare the measurement of 2 instruments, they have the same length by design. For example, with the heart rate measurement between the $20 connect watch and the electrocardiogram, the measure are taken on the same time with the same conditions which lead to have the same number of measurement for the 2 methods. So we can represent each dataset’s row as an experience like on the example in the Figure2 below.
Figure2. Instrument measure per experience
This is where we encounter the first “pain point”. A/B 测试被视为独特的体验,而正如我们在上面看到的,我们需要多次体验才能构建情节。为了绕过这个限制,我们将从 A/B 测试中创建几个自举样本,它们具有相同的&不同的长度。
我们生成 300 个 200 到 1000 之间的非唯一随机整数。这些整数将表示每个自举样本的长度,并且为了有利于自举的统计属性,每个非唯一随机整数被复制 50 次。使用这些数字是为了具有样本多样性,但它是任意的,并且长度取决于原始数据集的大小。这些长度在 200 和 2.000 之间的 15.000 (300*50)个自举样本是从原始数据集中用替换通过随机采样获得的**,并且它们被连接在一起。它可以表示为图 3。**
图 3。引导数据集构建
以下代码从原始数据创建引导数据集(请注意,这可能需要一些时间,因为引导数据集的长度为 9.184.350 行*{通过更改 random_state,我们将平均得到(((200+1.000)/2)30050 = 9.000.000 行}* )。
然后,我们按 n_sample(每个 15.000 自举样本的 id)、n_sample_2(每个自举样本的长度)和版本进行分组,以便得到每个入口 7 天的玩家保留总数,如图 4 所示。
图 4。groupby 后的引导数据集
我们可以将该输出读作:自举样本 n 0/14.999 由 564 行组成,其中 98 个玩家仍在玩 7 天,等待时间在 gate_30,而 105 个玩家仍在玩 7 天,等待时间在 gate_40。
然后,我们使用 bootstrap 的一个统计特性,即bootstrap 样本的均值是分布真实均值的良好估计值。我们按照 n_sample_2 和版本进行分组,以便对于每个独特的样本长度,玩家的平均保留数为每个门 7 天,如图 5 所示。
图 5。对于每个独特的样本长度和每个门,在 7 天内仍在玩的玩家平均人数
我们可以将此输出读作:当样本有 200 行时,平均有 34.60 个玩家仍在玩 7 天,等待时间在 gate_30,而有 34.38 个玩家仍在玩 7 天,等待时间在 gate_40。
然后我们拆分数据库,使数据集的格式更加清晰,如图 6 所示。
图 6。数据集的未堆叠版本
在这一阶段,我们有了构建布兰德-奥特曼图所需的所有信息,数据集的表示与上图 2 相同。
布兰德-奥特曼图由两个轴组成。x 轴是比较的两种方法的平均值。所以对每一行都是:(gate _ 30i+gate _ 40i)/2 | | |y 轴是方法 A 和方法 B 的区别。每行都是如此:(gate_30i - gate_40i) |||这是我们的第二个“痛点”。通过保持 y 轴不变,样本大小的增加将增加差异的可变性。因此,我们稍后将获得的统计度量将被最大的样本过度加权。为了绕过这个限制,我们将用百分比【3】来表示 y 轴。为此,y 的计算是针对每一行的:((gate _ 30i-gate _ 40i) 100/((gate _ 30i+gate _ 40i)/2)| | |数据集如图 7 所示。*
图 7。x 和 y 轴
我们必须检查 y 轴是否为正态分布,以便信任将要显示的置信区间。你可以用夏皮罗-威尔克测试或者至少用直方图来评估它。如果分布不正常,那么你可以做一个转换,如对数转换。在我们的例子中,我认为分布是正态的。
图 8。y 轴的直方图
Bland-Altman 由 3 条线组成(见图 9):
- y 的平均值
- y 的置信区间的上界(这里给定 1.96 为 95%)
- 置信区间的 y 的下限(95%)
图 9。布兰德-奥特曼图的价值
我们将所有这些放在一起,pyCompare 软件包允许以非常简单的方式绘制布兰德-奥特曼图,而不必构建 db[‘y’] :
它首先采用方法 A(冠军),然后采用方法 B(挑战者)。然后,如果 percentage = True ,它会自动做我们上面做的演算。我们稍后将讨论一些其他参数。
如何解读 A/B 测试的 Bland-Altman 图
我们到了!下面是由上面的代码生成的 A/B 测试的 Bland-Altman 图:
图 10。Bland-Altman 图应用于 A/B 测试
首先,平均值和平均值的置信区间(浅蓝色条纹)不同于 0(在我们的例子中更高)。这意味着gate _ 30 和 gate_40 的保持水平(原文中称为偏差)明显不同。由于 2.93 > 0,这意味着 A > B < — >冠军挑战者,因此 gate_30 上的等待期比 gate_40 上的等待期提供了更大的保留。
两个鲑鱼棒代表 95%的置信区间(原始论文中命名的协议限制),表示我们确信 95%的值将在[-0.78%之间;6.63%】。在我们的例子中,这是非常强大的,因为我们可以说 gate_30 的保持力几乎总是大于 gate_40 的保持力。
正如你所看到的,上面的鲑鱼条纹上面有 2 个值,下面的有 4 个值,这是 6/300 = 0.02< 0.05 so due that we are certain that 95% of the values are within the 2 boundaries, 5% can be above or below and in our case it represents 2% then it is perfectly normal 😉
In the pyCompare package there is the parameter limit of agreement旨在改变信心的界限。这里,一个相关的问题是:“我能确定 30 号门的保持力将总是大于 40 号门的保持力的百分比是多少?”要回答这个问题,最低边界必须等于 0 ,因此我们必须找到正确的值,以便得到 0,正如我们在下面提供图 11 的代码中看到的:
图 11。更改 limitOfAgreement 参数时的输出
我们看到当 limitOfAgreement = 1.55 时,边界几乎等于 0。然后,我们必须在正态分布表中检查 1.55 处的值,即 0.9394,因此我们可以确定在((1–0.9394)* 2)* 100 = 87.88%处,gate_30 的保留值将始终大于 gate_40 的保留值
最后要补充的一点是,无论样本的平均值是多少,它们在图上都是统一表示的**,这意味着无论样本的大小是多少,我们所做的解释都是通用的**。事实上,如果我们看到一种数值的二次曲线表示,我们可以得出结论,样本的大小对结果有影响,所以我们不能有一个有效的解释。
结论
我们看到了为什么使用 Bland-Altman 图是相关的,以便对简单图的 A/B 测试结果有一个看法,如何从 A/B 测试创建图,以及如何解释它。这仅在差异正常的情况下有效,但是有必要转换数据。
此外,我检查了应用程序,gates 似乎在 gate_40 上,而我们证明了 7 天的保留时间比 30 天更好。在这种情况下,它表明,与盈利能力相比,留存率可能不是最好的衡量指标!
参考
[1] D. G. Altman 和 J. M. Bland,《医学测量:方法比较研究的分析》,《统计学家》32(1983)307-317
【2】https://projects.datacamp.com/projects/184或者 https://www.kaggle.com/yufengsui/mobile-games-ab-testing或者
[3] D. G. Altman 和 J. M. Bland,《评估两种临床测量方法一致性的统计方法》,《柳叶刀》327(1986)307-310
[4] D. Giavarina,理解平淡无奇的 Altman 分析,生物化学医学 25(2015)141–151
为什么我喜欢成为一名数据科学家
以及为什么你可能不喜欢它
马库斯·奥勒留在的照片
几年前,我读了著名博客作者马克·曼森的一篇文章。从那以后,他出版了几本书,现在相当有名。他在那篇文章中说的是,你可能认为你想要一些东西,但你必须确保你正在考虑随之而来的麻烦和挑战,而不仅仅是已经实现的状态。他的观点是“你需要热爱过程,而不仅仅是结果”。否则,你会很痛苦。
我在我的播客上采访了来自不同公司、不同背景和不同资历的数据专家。在这些聊天中,我问他们为什么选择数据科学,他们喜欢它的什么。我经常得到的一个答案是:“我喜欢能够根据数据告诉人们该做什么”。我相信每个人都能体会到那是一种美好的感觉。想象一下,你去对你的老板说,“好吧,你上个月做的那个活动是个错误,这是原因,这是你应该做的”。当然,并不是每个数据科学家都这样做。我还没机会这么做。如果这也是你的愿望,我们可能有一个问题。
我对数据科学的看法略有不同。我喜欢数据科学的过程,而不是它的结果。从看似虚无的东西中创造出某种东西的过程,每次都让我感到愉悦。在这篇文章中,我想分享一些我在工作中观察到的让我每天都更喜欢它的具体事情,以及可能对你没有吸引力的事情。
了解新行业
不接触任何领域知识,就不可能成为一名数据科学家。我为每个新项目与不同的公司合作,这是一次有趣的经历。当我完成一个项目时,我通常会比以前更了解这个行业。部分原因是我需要了解更多才能胜任我的工作,但也是因为和在这个行业工作的人在一起,你会对他们的工作和工作的复杂性有新的认识。在某种程度上,我理解了每个项目如何让世界更好地运转。
作为一名调查员
作为我工作的一部分,我必须表现得像个调查员。可能没有人知道我可以从哪里获得这些数据,但我需要弄清楚,与人们交谈,并找到一个可以给我访问权限的人。利益相关者可能不知道他们到底需要或想要什么,这取决于我来研究他们的领域,并了解到底哪里出了问题以及他们需要什么类型的数据科学解决方案。在训练过程中,我也要留意数据中任何可能的陷阱。我需要确保一切都检查过了,没有冲突,没有明显的错误。这需要非常注意细节,而且非常有成就感。
成为更大讨论的一部分
这项工作不是“我们需要这个,所以请完成它”的工作。作为一名数据科学家,我高度参与了决策过程。这是因为数据科学家是一个拥有专业知识的人,也因为我所做的事情必须完全符合现实。如果我的模型与现实不完全一致,那么在现实生活中就很难使用它。因此,确保你与项目中的几乎所有人交谈,并确保你对手头的问题有一个很好的整体理解,这很重要,也很有趣。
清理数据
我知道这不是数据科学家的共同爱好。许多人非常不喜欢数据清理过程。但不知何故我从中获得了一种奇怪的满足感。有点像用吸尘器清理一个非常脏的表面。这不是很难,但非常值得,因为你可以立即看到结果。它也不是平凡的,因为你需要想出聪明的解决方案来解决像丢失数据点或不平衡数据集这样的问题。
商业利益相关者脸上的微笑
作为一名数据科学家,你可能会引发什么样的突破,这真令人着迷。你甚至不用为它准备一个高级模型。仅仅是数据驱动的视角往往会产生很大的不同。很多时候,组织高层的业务涉众忽略了数据方面的思考。这就是为什么一旦向他们展示他们的数据的简单可视化或他们从未听说过的一些见解,你会在他们的眼中看到火花。这意味着,是的,我的朋友,你设法改变或增加了他们对某件事的看法。
创造力
有时候,听起来好像数据科学家是机器人,一遍又一遍地执行同样的任务。干净的数据,训练模式,测试模型,接下来…这就是为什么许多人相信(相当不正确地)数据科学家的工作可以很容易地自动化。我是说,我肯定它可以自动化,只是没那么容易。我相信数据科学家的工作有时是创造性的。在处理数据中的问题时,有一些经验法则和最佳实践,但很多时候你不得不放开手脚,尝试一些你从未听说过的东西。那些是我的工作变得非常有趣的时刻。
敢做的态度
我不得不说,我讨厌“能做的态度”这个词,但它很好地定义了数据科学家的态度。大多数时候,你需要的信息不会被包括在内,你必须根据自己的条件找到解决方案。你需要足智多谋,富有创造力。
数据集上没有日期信息?看看那段时间卖得最多的东西。发现万圣节主题糖果销量最多?现在你可以估计日期了。
没有星期几信息?看看日期,当它们进入新的一周时。第一天必须是星期一。但是数据来自美国,所以第一天很可能是星期天。
我喜欢的一个例子是来自 Twitter 的,他们使用湿薯条的提法来建议油炸机器公司为餐馆提供支持。
奖金
我在这里没有提到的一件事当然是 AI 中推动这个职业极限的人的社区。绝对让人骄傲。更不用说当有关于人工智能某项进步的新闻时,理解实际发生了什么的额外好处,而不是害怕“机器人接管世界”。
所有这些以及更多的事情让我兴奋地来到我的电脑前,开始为我工作。我相信对于一个热爱学习新事物、热爱解决问题的人来说,做一名数据科学家是特别有成就感的。这可能不是你,没关系。在投身数据科学之前,请确保您了解迷人的“我告诉我的老板该做什么,公司的每个人都在等待我的见解”阶段之前的旅程。它可能会节省你在办公室不愉快度过的宝贵时间。
您是否打算转行从事数据科学职业,但不确定从哪里开始? 通过我的网站免费参加我的数据科学入门课程。
本课程旨在帮助您:
- 阐明您的数据职业目标,
- 理解人工智能的学科,
- 了解绝对需要的技能,
- 在您的学习旅程中做出明智的决定
此外,我每周发表文章、采访数据专业人员和免费资源,以帮助专业人员有效地将他们的职业生涯转向数据科学。如果你对你需要学习的东西感到迷茫,对所有声称自己是最好的课程感到困惑,觉得没有一门课程对你的目的来说足够完整,我的网站就是为你准备的。
为什么我辞去了数据分析师的工作
意见
…并成为了一名数据科学家。
JESHOOTS.COM在Unsplash【1】上的照片。
目录
- 介绍
- 数据分析
- 数据科学
- 摘要
- 参考
介绍
我想先提一下,这是我的个人经历,所以对我的观点和建议要有所保留。我的目标是激励你审视自己目前的工作,问问自己换一份更适合自己的工作应该做些什么(或同样的工作,以及各自可能的改进)。在我的情况下,我是一名不到一年的数据分析师,因此必须指出,总有不同的公司可能有不同的要求和与我不同的日常经验。然而,在内心深处,我知道我想要别的东西,更多的东西给自己。
从一名数据分析师开始,我真的很喜欢技术和业务的独特融合,以及我的角色所需的软技能。我有机会对业务的一些主要部分产生影响。但是,我没有机会去做的一件事是批准我的发现或将我的发现上报给上级管理人员或领导。您可能会花费几天或几个月的时间来分析数据,结果却发现产品经理只用了几分钟就使用了您的一些仪表盘,尽管您确保每天都用有价值的指标更新和刷新这些仪表盘。那么我不喜欢什么呢?我真的想对我为公司做的项目产生更大的影响。我不仅希望能够呈现调查结果,还希望针对这些调查结果实现相应的更改。我想实现自动化的过程来解决那些从提取的指标和发现的结果中发现的问题。然后我注意到我主要是在执行临时任务,或者事后 T21,除此之外没有别的。我总是着眼于过去,而不是未来。
下面,我将阐述导致我改变职业生涯的具体经历,以及我热爱的下一个、目前的职业生涯。
数据分析
照片由un splash【3】上的段 Phadnis 拍摄。
缺乏成长的经历:
如前所述,你可能会发现我正在努力成长。尽管 T4 有些短命,但我可以预见在未来的几年里,我将如何被安排在同样的日复一日的过程中。我所经历的是我的角色缺乏成长。重申一下,是的,这种体验对你来说可能大不相同,但也可能正是你的感受,也是。
在我的角色之初,我喜欢创建 Tableau 仪表板,开发有趣的见解,并将它们可视化。一些利益相关者会要求一些关键的度量或者关键的性能指标,这些也需要可视化。我通常使用 Tableau 或 Google Data Studio——有时也使用自制的 Python 代码来开发图表和绘图。这个过程从我创建的请求和结果仪表板开始。然后利益相关者称赞它看起来很漂亮,并感谢我描述了我的度量标准。我注意到几天后一周就要结束了,我看了几次我的仪表盘,有时甚至是几百次。但是接下来的一周,我得到了,比如说,第一周收视率的 20%。当考虑我自己的度量标准时,我可能会表现得很自私,但是当我花了半辈子的时间去工作时,我希望看到所述工作的巨大影响和验证。
一个月过去了,我又收到了四个仪表板请求,我制作的第一个仪表板在公司使用的仪表板列表中排在第 50 位,是最少使用的仪表板之一。
我对自己说,我一遍又一遍地做着同样的事情。由于我从 SQL 查询中收集到的可视化指标,我不确定谁受到了影响,或者什么流程发生了变化。我所看到的是强大的利益相关者和领导层不时在会议上合作,有时会指出我在不同会议上制作的一个漂亮的图表。*现在我知道了,*也许这意味着我只是做了糟糕的仪表板,但关键是我做了要求我做的东西,而且我没有能力提出新的想法、新的结果和新的流程。这就是我感觉到的成长的缺乏。
我还想强调的是,不仅要关注专业环境,还要关注学术环境。当执行数据分析时,我开始寻找一个不同的领域来实践,并最终上学。我建议在转行时考虑其他途径,无论是以下哪种途径:
undergraduate degreemaster’s degreeonline learningbootcampsbooksfree tutorialsarticle tutorialsvideo tutorials
数据科学
我最终将职业生涯转向了数据科学。是的,那个性感,也许是过去几年老生常谈的职业。但是,它如此诱人是有原因的。还是,几个原因。我想让你知道,你不需要成为一名数据科学家来寻找幸福,而是要真正评估你目前的职业,以及你的日常经历,也许要问一问对你来说未来什么是更好的选择。此外,你也可以继续担任同样的角色,但与你的经理讨论一些可能的变化,这些变化将真正激发你的激情和动力。
我在数据分析中缺少的东西,在数据科学中找到了。这并不是说我目前在工作中不做任何数据分析,因为这通常是大多数项目的先决条件——在创建和产生数据科学模型之前,你首先开始做的事情。但是,我发现我可以查看这些见解,并建议一个更好的流程,然后制定该流程,并将其集成到当前系统中。重要的是要注意,有时候你会接到一些令人畏惧的工作,而这些工作推动了大部分业务,这些工作可能都在你的肩上。然而,这是一个成长和挑战自我的好方法,如果你需要,总有人会帮助你——这是意料之中的。为了更容易阅读,在总结时,我将强调一些关键点,说明是什么让我放弃了数据分析,是什么吸引了我对数据科学的兴趣。
数据分析—缺乏增长
- 重复性任务
- 对 SQL 查询的小改动
- 普通仪表板创建
- 看不到我的影响
- 感觉我在做更小的任务
数据科学—不断发展
- 更多地实现 Python 代码
- 成为*“自动化者”*
- 预测未来的建议,而不是分析过去的指标
- 用复杂的机器学习算法挑战自己
- 创建见解,然后创建模型来帮助改进这些指标
- 跨职能开展更多工作
- 总的来说,走出我的舒适区
- 介绍更多的软件工程技术(OOP——面向对象编程)
- 很简单——只是对机器学习及其如何改善全球商业更感兴趣
- 机器学习算法如何改善我个人工作以外的更大问题——环境、欺诈、自动化、医疗保健和安全
回到我之前在数据分析部分所说的,在攻读硕士学位时,我最终改变了我的领域,专门研究数据科学。虽然在转行时当然没有必要执行这一步,但在研究了与我目前的数据分析师工作完全不同的领域后,我发现这一步特别有用。我本科学习生物和化学。因此,我真的觉得我需要一个更传统的途径来学习数据科学。
我推荐阅读关于学习和实践不同职业的各种选择,无论是学校还是更便宜的,甚至是免费的在线教程。我能够在工作后学习数据科学和机器学习,这也推动了我对数据科学的热情,同时也导致我辞去了当时作为数据分析师的工作。
摘要
我的个人经历是为了启发你,反思你的现状。我希望你学到了一些对你有益的新信息,并找到了你的激情,无论是数据科学还是其他完全不同的东西。这些让我选择不同职业的关键点也可以用在其他职业变化上。
值得注意的是,数据分析非常广泛,因此,根据你的职位,你可能会执行不同的任务,这些任务可能更令人兴奋,更具挑战性。我被数据科学的热潮冲昏了头脑,我很高兴我是这样,因为它真的让我对我的工作更有激情。占据我一天大部分时间的工作。
虽然我在过去几个月里一直在执行类似的数据分析任务,但我开始学习、实践和实施新的知识,这些知识甚至是我在业余时间为我当前的数据科学职业生涯所做的。
总而言之,我离开数据分析专门从事数据科学有几个原因。最能概括我的经历的一些关键原因是:
** repetitive tasks and lack of growth for Data Analytics* the challenge, impact, and growth of Data Science*
感谢您的阅读!欢迎在下面评论和讨论。也许你有过不同的经历,也许你正处于一个完全不同的职业领域,想要换工作。
参考
[1]照片由JESHOOTS.COM在Unsplash(2018)上拍摄
[2]由万花筒在 Unsplash 上拍摄的照片,(2018)
[3]照片由段 Phadnis 在Unsplash(2017)上拍摄
[4]照片由照片爱好在 Unsplash 上拍摄,(2018)
[5]照片由安德鲁·尼尔在Unsplash(2018)上拍摄
为什么我认为写作比编码更难
避免因为负面报道而失去客户。
当我第一次学习如何编码时,我被引入了计算机语言结构完整性的概念,以及为什么让计算机做我们想要的事情是至关重要的。就像人类语言一样,编程语言只有在使用正确的语法和语义编写时才被认为是正确构造的。
写的时间可能比编码的时间长
编程语言的句法可以解释为一种与句子结构和词序有关的语法形式。
例如,“我喜欢写作”在语法上是不正确的。
这是因为句子的形式或语言的“语法”是错误的。句法规则同样适用于计算机编程语言。当我们通过编程语言与计算机交互时,我们只需要精确地掌握命令的语法,我们唯一会遇到的错误是,如果我们输错了命令,程序就会停止运行。
这时我意识到规则很简单。
不像人类语言的语法,有更多的方面不能被一个“命令”分开来实现它的目的。语调、凝视、面部表情、语用学、音韵学、手势和许多其他现象都会影响它。
尽管编程和人类语言都描述了某种意义规则(语义),但人类语言的语义解释和构建要复杂得多。
如果你遇到关于语法和任何东西之间的接口的讨论,请把你的手放在钱包上。语言是生物性的,生物现象在各个层面上都是相互依存的;只有计算机和理论模型有清晰定义的界面。
语法只是告诉我们在一句代码中什么在哪里,而语法做的不止这些。语法提出了一套规则,规定了一种语言的正确使用标准。这些规则规定了我们应该如何正确地说话。
这基本上可以概括为,假设人类语言和编程语言一样流利,人类语言有歧义和多层含义。同时,计算机是哑的,只会照字面理解。
学习写作比学习编码要长得多
在 Unsplash 上由Duan Smetana拍摄的照片
一个好的学期的编码课程足以让你开始熟悉不同类型的数据结构和算法。在我投入到项目的实际工作中之前,我个人刚刚花了 10 周的时间正式学习了如何编码。教授这门课的是一位教授,他也是在攻读博士学位时开始学习编程的,并不是因为他想成为一名程序员。
写作任务需要大量的准备工作。
你需要很好地组织你的想法,然后决定你想要强调的重点和顺序。最主要的是,我们在对每一点做解释的时候,也需要把自己放到读者的头脑中去。当编码时,你并不真的这样做,因为你的目标主要是确保机器给你你想要的输出。
代码比句子更容易理解
如果你知道如何编码,很有可能你可以解释任何不同的代码行。但是,如果你知道如何阅读,并不意味着你可以解释背后的意思写的东西。想想吧。
“一个代码能有双重含义吗?像一句话。如“真好笑”。这可能意味着“这很奇怪”或字面意思,“有趣”。"
在大多数编程语言中,如果不是全部的话,不允许歧义是一个显式的特性,没有技术上的理由为什么一种语言可以被设计成具有歧义的表达式,当编译器或解释器看到歧义时,它会做类似于随机解析 n 种可能含义之一的事情。
但是这种语言对于解决我们今天用编程来解决的问题并不方便。
不像写作,歧义时有发生。人类语言有如此多的词有多重含义。这就是为什么你经常听到人们说:
“什么意思?”
出于同样的原因,人类语言(自然语言)的模糊性给自然语言处理(NLP)开发人员、科学家和研究人员带来了巨大的挑战。
客户阅读报告,而不是代码
通常,你的客户首先阅读的是你的报告,而不是你的代码。您的报告成为您的第一印象,因为报告包含了您的客户所需的所有信息。
有效沟通的关键是沟通清楚。在你写报告的时候,你必须考虑客户的观点。另一方面,更好的代码不需要任何人的观点,足够简单和快速。(大 O 时间!)
把这个包起来
正如这篇文章的标题所暗示的,写作更费力,因此比编码花费更多的精力。不注意写作的影响会让公司损失一大笔钱。在商业中,最终真正重要的是我们获得了多少利润以及我们正在实现的增长。
缺乏对写作的重视会在很多方面损害商业,不管我们是否意识到这一点,这很容易是因为写作技能很差。
感谢您的阅读。对于任何想法或反馈,请随时通过给我的 Linkedin 发送消息来与我分享!
https://www.linkedin.com/in/faizfablillah/➡️