伟大的数据科学家与众不同的技能
当最重要的事情是问自己一些棘手的问题时,我们倾向于关注硬技能。
Patrick Amoy 在 Unsplash 上拍摄的照片
在新的和有抱负的数据科学家中,有一种可以理解的趋势,即专注于获得硬量化和编程技能。他们急于学习最新流行的语言和技术,希望这能让他们在就业市场上更具竞争力,或者给老板留下深刻印象。
多才多艺很棒。它可以节省时间,并且可以帮助您找到更好的建模方式。这也让你的思维更加敏捷,更有创造力。都是非常好的东西。
但最终,多功能性并不是数据科学家能够拥有的最重要的技能。这是因为,几乎根据定义,数据科学家一开始就非常全能。一旦你学会并使用了几种语言或建模技术,学习另一种通常是相当容易的。
换句话说,多功能性和硬数据科学技能是商品,在数据科学市场上只能给你有限和暂时的竞争优势。
相反,在数据科学家中有一种更罕见的品质,一种远没有那么耀眼或被谈论的品质,但它可以成就或摧毁你作为一名数据科学家。它比新的语言和技能更难获得,因为它违背了大多数数据科学家的优化思维。这是伟大的数据科学家真正与众不同的地方。
伟大的数据科学家总是诚实地问自己一个问题:
这个数据集/算法中有什么看起来不对劲?
听起来很简单,对吧?只是基本常识。毕竟,当你问自己这个问题时,你就更有可能发现问题并提高工作质量。它还可以帮助您找到数据中隐藏的故事,然后您可以将这些故事集成到工作产品中。
最重要的是,虽然使用次优的统计技术可能会让你失去一点预测的准确性,但包含错误的变量或无意中利用大量有偏差的数据集的影响可能会大得多。它会完全破坏你的工作成果和你作为数据科学家的可信度。
因此,很自然地,你会认为大多数数据科学家在发布数据和工作产品之前会问自己可能出了什么问题。有什么比批判性地思考数据、你使用的变量和你的发现更容易的呢?
事实证明,很多。我在数据科学领域工作了 10 年,最初是一名数据科学家,后来成为了一名数据策略师和讲师,我发现在职业生涯的早期问自己这个问题,或者在以后教其他人坚持这样做,非常困难。
虽然每个数据科学环境都不尽相同,但有几个共同的原因使得数据科学家更具自我批判性具有挑战性:
- 你有很多事情要做。当您从一个项目跳到另一个项目时,一旦您的工作产品通过了最低质量控制阈值,就很容易“勾选这个框”,这是可以理解的。你希望有更多的时间钻研数据,但是你的老板或客户已经给了你很大的压力。
- 你相信你的数据所讲述的故事。确认偏差是数据科学中的一个主要问题。如果你觉得它是对的,那么你就没有动机去质疑它。但是,即使事情看起来有点不对劲,也很容易解释清楚,更不用说更方便了。数据科学家是事后合理化的专家。
- 你不想承认你不知道怎么回事。有时,当事情看起来不对劲时,你会深入调查,但却无法找出问题所在。它可能是随机的噪音或者更有意义的东西——你不知道,而且数据没有变化。但现在你已经发现了问题,你可能会觉得向你的主管或客户提及这个问题有点尴尬。这可能会影响你的工作。为什么挖得太深会招来问题?接受事物的本来面目要容易得多。
所有这些都是为什么很少有数据科学家能够始终如一、诚实地问自己什么看起来不对劲。
有很多方法可以解决上述每一个障碍。例如,我发现,承认数据中一些无法解释的混乱非但不会伤害你,反而会建立与主管和客户的信任。一旦有人发现问题并要求你解释,那么“打勾”的感觉就不那么好了。我的一些最好和最有影响力的工作开始于注意到数据中的一些东西看起来不对劲。
所以如果你刚刚开始,我给你的建议是学会质疑自己和你的数据。硬技能不错。但是当你发现一个数据科学家问自己一些棘手的问题时,你知道你可以绝对信任他们。那就更有价值了。
懒鬼将自己重塑为数据科学家指南
数据科学/职业
给我们其他人的固执己见的建议。热爱数学,选修。
Andrew Itaga 在 Unsplash 上拍摄的照片
自从我写了一篇关于 我的数据科学之旅 的文章后,很多人向我咨询关于他们成为数据科学家之旅的建议。一个共同的主题开始出现:有抱负的数据科学家对如何开始感到困惑,一些人因为大量的信息而溺水。那么,另一个是什么,对吗?
嗯,让我们看看。
我敦促有抱负的数据科学家放慢脚步,后退一步。在我们开始学习之前,让我们先处理一些事情:重塑自我的艺术。重塑自我需要时间,所以我们最好在游戏中尽早开始。
在本帖中,我将分享一种非常固执己见的方法,让自己重塑数据科学家的形象。我会假设关于你的三件事:
- 你破产了,但你有勇气。
- 你愿意牺牲和学习。
- 你已经做出了 有意识的决定 成为一名数据科学家。
让我们开始吧!
重要的事情先来
我非常相信尤达的智慧:“做或不做,没有尝试。”对我来说,要么你做点什么,要么你不做。对我来说,失败不是一个选项,我知道除非我完全放弃,否则我不会真正失败,这让我感到安慰。所以第一点建议:不要放弃。永远不会。
做或不做,没有尝试。—尤达
从心中的目标开始
让我们把网上的事情安排好,开始考虑 SEO。SEO 代表搜索引擎优化。最简单的思考方式是一种非常好的艺术,尽可能多地在互联网上放上你的真实职业名称,这样当有人搜索你时,他们只会找到你希望他们找到的东西。
在我们的例子中,只要您的名字出现在搜索结果中,我们就希望出现“数据科学”或“数据科学家”这两个词。
所以让我们开始在网络上乱扔垃圾吧!
- 如果你还没有一个专业的 Gmail 帐户,就创建一个。不要让你的用户名成为 sexxydatascientist007@gmail.com。谨慎行事,越无聊越好。以first.last@gmail.com、开头,或者如果你的名字很普通,就加上“数据”,比如first.name.data@gmail.com。不惜一切代价避免数字。如果你已经有了一个,但是它没有遵循前面提到的指导方针,那就再创建一个!
- 创建一个 LinkedIn 账户并使用你的职业邮箱地址。将“培训中的数据科学家”放在标题中。“数据科学爱好者”太弱了。我们已经做了一个有意识的决定,并致力于这项任务,记得吗?当我们在做的时候,让我们把应用程序也放在我们的手机上。
- 如果你还没有一个脸书账户,那就创建一个,这样你就可以宣称你的名字了。如果你已经有了一个,把它放到 private pronto 上!多做一点,删除手机上的应用程序,这样你就不会分心。对 Twitter、Instagram 和 Pinterest 等其他社交网络也是如此。暂时将它们设置为私有,稍后我们会考虑清理它们。
- 如果你还没有推特账户,创建一个账户。我们可以在用户名上留一点余地。让它简短、令人难忘,但又不失专业,这样你就不会伤害任何人的感情。如果你已经有了一个,决定是要保留它还是重新开始。你要问自己的主要问题是:你的历史中有没有什么内容可以被解释为不专业或有轻微争议的?谨慎为上。
- 开始在 LinkedIn 和 Twitter 上关注数据科学领域的顶级声音。这里有几个建议:凯西·科济尔科夫,安吉拉·巴尔蒂斯,莎拉·n .,凯特·斯特拉赫尼,克里斯汀·凯莱,法维奥·瓦兹奎,当然,还有我一直以来最喜欢的:埃里克·韦伯。
- 创建一个 Hootsuite 账户并连接你的 LinkedIn 和 Twitter 账户。开始安排数据科学相关的岗位。您可以分享其他人关于数据科学的有趣文章,或者发布您自己的数据科学冒险经历!如果你确实分享了其他人的帖子,请确保你给出了适当的署名。简单地添加一个网址是懒惰和没有好处的。感谢 埃里克·韦伯 为此亲提示!
- 拍摄一张专业照片,并将其作为你所有社交媒体账户的个人资料照片。如果可能的话,以中性背景为目标。确保照片中只有你,除非你是埃里克(他已经赢得了他的印章,所以不要质疑他!LOL。)
- 创建一个 Github 账户,如果你还没有的话。当你开始做数据科学项目时,你会需要这个。
- 奖励:如果你能抽出几美元,去wordpress.org给自己弄一个有你职业名称的域名。我很幸运有一个不常见的名字,所以我有ednalyn.com,但是如果你的名字很常见,发挥创意,编造一个你能识别的名字。也许类似于 janesmithdoesdatascience.com 的作品。然后你可以开始计划在网上发布你的简历,或者甚至写一两篇关于数据科学的博文。我呢,刚开始学数据科学的时候是从写经验开始的。
- 清理:如果时间允许,开始审核你在社交媒体上发布的攻击性、诽谤性或不讨好的内容。如果你想节省时间,试试像 brandyourself.com 这样的服务。警告!它会变得很贵,所以注意你点击的地方。
做你的家务
不开玩笑!当你做家务、散步或者甚至开车时,听播客谈论数据科学话题,如线性离题和 TwiML 。不要太执着于记住他们所说的话。顺其自然,迟早他们讨论的术语和概念会听起来很熟悉。请记住,不要太沉迷于你开始燃烧你正在做的任何东西的讨论,或者像我过去多次发生的那样错过退场。
最基本的部分
既然我们已经处理了生活和呼吸数据科学的预备知识,现在是时候处理实质性问题了:实际上是学习数据科学。
作者截图
关于如何学习数据科学,从来不缺少观点。他们太多了,让你不知所措,尤其是当他们开始谈论先学习基础数学和统计学的时候。
废话!
告诉我我忘记,
教我我记住,
让我参与我学习。—中国古训
虽然重要,但我不认为首先学习理论有什么意义,因为我可能很快就会睡着,或者更糟的是,被数学公式的冲击吓倒,以至于我非常恼火,最终放弃了!
相反,我谦卑地提议,采用 Ken Jee 在他的文章 中描述的“最小可行知识”或 MVK 的概念:我将如何学习数据科学(如果我不得不重新开始) 。
在他的文章中, Ken Jee 将最低限度的可行知识描述为学习“刚刚能够通过实践学习”我建议检查一下:
从我的数据科学之旅中学到的经验
towardsdatascience.com](/how-i-would-learn-data-science-if-i-had-to-start-over-f3bf0d27ca87)
我对 MVK 的方法非常直接:学习足够的 SQL 以便能够从数据库中获得数据,学习足够的 Python 以便能够控制程序并能够使用 pandas 库,然后做端到端的项目,从简单的到越来越有挑战性的项目。在这个过程中,您将学习数据争论、探索性数据分析和建模。交叉验证和网格搜索等其他技术肯定也是您旅程的一部分。诀窍是永远不要太舒服,总是慢慢地逼自己。
以列表为导向,下面是我的流程:
- 学习足够的 SQL 和 Python,以便能够完成越来越复杂的端到端项目。
- 对于每个项目,经历数据科学管道的步骤:规划、获取、准备、探索、建模、交付(讲故事/演示)。一定要在你的 Github 账户上记录你的努力。
- 冲洗并重复(迭代)。
要更深入地讨论数据科学管道,我推荐以下文章:
数据科学项目生命周期
towardsdatascience.com](/papem-dm-7-steps-towards-a-data-science-win-f8cac4f8e02f)
对于每个迭代,我建议做一个端到端的项目,实践以下每一种数据科学方法:
- 回归
- 分类
- 使聚集
- 时间序列分析
- 异常检测
- 自然语言处理
- 分布式 ML
- 深度学习
对于每种方法,实践它不同的算法、模型或技术。例如,对于自然语言处理,您可能希望练习以下技术:
- n 元语法排序
- 命名实体识别
- 情感分析
- 主题建模
- 文本分类
按一下就行了
当你做端到端项目时,在 Github 上公开你的工作是一个很好的实践。它不仅会跟踪你的进度,还会备份你的工作以防你的本地机器坏了。更不用说,这是一个展示你进步的好方法。注意,我说的是进步,不是完美。一般来说,如果我们的 Github 库有点乱,人们会理解的。事实上,大多数人都希望如此。至少,只要确保每个回购都有一个很好的 README.md 文件。
Github Repo README.md 上的内容:
- 项目名
- 项目的目标或目的是什么
- 项目背景
- 如何使用项目(如果有人想自己尝试)
- 提及你的关键词:“数据科学”、“数据科学家”、“机器学习”等等。
不要忽视这一点:不要犯大错,不要在公共代码中硬编码您的凭证或任何密码。把它们放在一个。env 文件和。别理他们。作为参考,请查看 Github 的文档。
关于如何使用 Git 和 Github 的深入教程,请查看安妮·邦纳的指南:
Git 和 GitHub 基础知识,供好奇和完全困惑的人使用(加上最简单的方法来为您的第一次公开…
towardsdatascience.com](/getting-started-with-git-and-github-6fcd0f2d4ac6)
出于对数学的热爱
最后,随着你越来越好地运用不同的技术,你开始做超参数调整,我相信在这一点上,你已经准备好面对必要的邪恶,那就是数学。很有可能,你越理解和发展直觉,你就越不会讨厌它。也许,只是也许,你甚至会爱上它。
当谈到学习数据科学背后的数学时,我有一个一般性的建议:慢慢来。对自己温柔一点,不要设期限。再说一次,如果最终会让你发疯,那么雄心勃勃和解决一些重大问题是没有意义的。这一点都不好玩。
学习数学通常有两种方法。
一种是采用结构化的方法,首先从学习基础开始,然后逐步学习更具挑战性的部分。为此我推荐 KhanAcademy 。个性化你对微积分、线性代数和统计学的学习。迈出小步伐,庆祝小胜利。
如果您看到此消息,这意味着我们在网站上加载外部资源时遇到了问题。如果你是…
www.khanacademy.org](https://www.khanacademy.org/math/ap-statistics)
另一种方法稍微适合更多的实际操作,需要一点逆向工程。我称之为逆向学习。你首先要找出一个项目中涉及到的数学概念,然后把这个概念分解成更多的基本概念,并以此为起点。这种方法更适合那些喜欢边做边学的人。
在 Analytics Vidhya 上的一篇帖子展示了一个边做边学的好例子:
[## 用 Python 和 R 语言学习朴素贝叶斯算法的 6 个简单步骤
注意:本文最初发布于 2015 年 9 月 13 日,更新于 2017 年 9 月 11 日概述了解其中一个…
www.analyticsvidhya.com](https://www.analyticsvidhya.com/blog/2017/09/naive-bayes-explained/)
由本文补充:
概述贝叶斯定理是统计学中最强大的概念之一,是数据科学专业人员的必备知识…
www.analyticsvidhya.com](https://www.analyticsvidhya.com/blog/2019/06/introduction-powerful-bayes-theorem-data-science/)
休息一会儿
嗯,学数学真的很难!它如此强大和强烈,你最好经常休息一下,否则会有大脑过热的风险。另一方面,休息并不一定意味着休息一天。毕竟,疲倦的人是没有休息的!
每隔一段时间,我强烈建议你在学习技术的同时,了解一些商业方面的知识。对于这一点,我推荐马克斯·史隆的经典著作:《T2:用数据思考》。你也可以在 Medium 上找到很多文章。
例如,看看的 Eric Kleppen 的文章:
数据科学不仅仅是算法和建模
towardsdatascience.com](/the-business-side-of-data-science-5-tips-for-presenting-to-stakeholders-fb624a9a6e54)
与人交谈
休息一下有时会很孤独,独自一人思考会让人筋疲力尽。所以你可能最终决定与你的家人交谈,问题是,你对数据科学如此积极和狂热,以至于你只能谈论它。迟早,你会惹恼你爱的人。
它发生在我身上。
这就是为什么我决定和其他有相似兴趣的人交流。我参加聚会,并开始与已经在从事数据科学的人或像你一样渴望成为数据科学家的人建立联系。在我们所处的后 COVID(希望如此)时代,群组视频通话更加普遍。这实际上更有利,因为现在,地理不再是一个问题。
LinkedIn 是一个很好的资源。你可以使用社交网络找到其他有相似兴趣的人,甚至找到当地的数据科学家,他们每个月还能抽出一两个小时来指导有积极性的学习者。从你当地的公司开始。找出他们是否有在那里工作的数据科学家,如果你找到了,请给他们发一条个性化消息,请求联系。给他们选择优雅地拒绝的机会,让他们把你推荐给另一个有时间指导你的人。
最坏的情况是他们拒绝了。别难过,好吗?
结论
感谢阅读!这就是我关于将自己重塑为数据科学家的非常固执己见的建议。我希望你从中有所收获。我欢迎任何反馈。如果你有什么想补充的,请在评论或回复中发表。
我们继续这个讨论吧!
如果你想和我联系,你可以通过 Twitter 或LinkedIn联系我。我喜欢与人交流,我会尽最大努力回复他们的询问。
敬请期待,下期帖子再见!
如果你想了解更多关于我从懒鬼到数据科学家的旅程,请查看下面的文章:
我的无学位数据科学之旅。
towardsdatascience.com](/from-slacker-to-data-scientist-b4f34aa10ea1)
[1]引用调查者。(2020 年 6 月 10 日)。告诉我,我忘了;教我,我可能会记得;牵扯到我和我学。https://quoteinvestigator.com/2019/02/27/tell/
[2]走向数据科学。(2020 年 6 月 11 日)。我将如何学习数据科学(如果我必须重新开始)。https://towards data science . com/how-I-would-learn-data-science-if-I-had-to-start-over-F3 BF 0d 27 ca 87
大数字的小问题
人类的大脑特别不擅长解释大量的数字。
不要误解我的意思,任何受过基础教育的人都可以按照自己内心的渴望来计算——或者直到他们意识到这项任务或生活总体上是徒劳的。真正的挑战是理解这些大数字意味着什么。
例如,我们知道一百万、十亿和一万亿是巨大的数字——但大多数人很难理解它们之间的差异有多大。
从时间上来理解这个稍微容易一点。
一百万秒是十一又二分之一天
10 亿秒相当于 31 又 3/4 年
1 万亿秒是 31710 年
除非你是数学课本上谈论的那种人——那种购买数百个西瓜让孩子们练习代数的人——否则你每天都不会和大数字打交道。
即使从进化的角度来看,我们旧石器时代的祖先也不需要担心大量的数字。早期人类只需要对小批量的数量有一个基本的概念,比如部落中的人数,或者有多少动物可能占据某个区域,或者其他穴居人关心的事情。
我们设法更好地数数(再次对买西瓜的人大声喊出来,没有你不可能做到),但大数字仍然让我们困惑。
尽管有这种认知障碍,我们每天都被庞大的数字包围着,并被期望去理解它。无论是最新的疫情数据、政府的预算提案、最新的新闻、科学研究,还是其他我们假装看懂了听起来很聪明的东西。
现在,如果是关于如何真正理解大数字的话,这将是一个伟大而有用的帖子。
但事实并非如此。
这是为了帮助你认识到你在理解大数字方面有多糟糕。
一副牌可以有多少种排列方式?
每当你洗一副牌的时候,很有可能你已经把它们按照宇宙历史上从未有过的顺序排列了。但是有多少种方法可以做到呢?
任何上过概率初学者课程的人都会告诉你这很简单——答案是 52!
对于门外汉来说,一副标准的纸牌有 52 张独特的牌,还有“!”最后并不是因为数字特别激动人心,而是读作“52 阶乘”。这就是数学上的乘以小于它的数。
52! = 52 * 51 * 50 … 3 * 2 * 1
=80658175170943878571660636856403766975289505440883277824000000000000
以你敏锐的观察力,我相信你一定已经发现这是一个巨大的数字。但是这个数字到底有多大?
这里有一个创造性的方式来看待它。
设置一个计时器,这样就需要 52 分钟!几秒钟后到达 0。
现在,选择赤道上的任何一点。你得沿着赤道绕地球走一圈。但是有一个问题——每十亿年你只能走一步。
当你完成一次绕赤道的旅行并到达出发点后,从太平洋中取出一滴水。
现在重复整个过程——以每一步 10 亿年的速度绕地球走一圈,每绕地球一周,从太平洋中移除一滴水。继续下去,直到海洋变空。
清空太平洋后,拿一张纸,平放在地上。
重新填满海洋,重新开始整个过程,每次清空海洋时都要在堆栈中添加一张纸。
这样做,直到纸堆到达太阳。
一旦栈到达太阳,把它拿下来,然后 … 你猜对了,再做一遍。
更有一千倍的*。*
现在计时器肯定已经到 0 点了吧?
没有。
你只完成了三分之一的时间!
那是多大的 52!真的是。
延伸阅读
这是个脑筋急转弯。拿一张纸,用端点 0 和 10 亿画一条线。然后打一个勾号…
www.wsj.com](https://www.wsj.com/articles/grasping-giant-numbers-is-far-from-second-nature-1490952621) [## 如何理解难以理解的大数
我们人类是聪明的一群,但是当涉及到理解和处理过多的数字时,我们真的很糟糕…
io9.gizmodo.com](https://io9.gizmodo.com/how-to-comprehend-incomprehensibly-large-numbers-1531604757) [## 52 阶乘
它们看起来足够无害,52 片层压纸板薄片,侧面印有彩色设计。然而,作为…
czep.net](https://czep.net/weblog/52cards.html)
Snapchat 数据科学家访谈
Snapchat 数据科学面试问题
图片来自 Unsplash
目录
介绍
Snap Inc .,俗称“相机公司”,是一家社交媒体公司,成立于 2011 年,总部位于美国加州圣莫尼卡。Snapchat 用户发送和接收视频、图片、文本和图画。该公司还开发了 Spectacles,这是一种可佩戴的太阳镜,能够以普通视频格式拍照和录制视频。Spectacles 还可以连接到用户的 Snapchat 档案。
2019 年第一季度,Snapchat 的日均用户数超过 2.03 亿,而每天发送的快照达到 35 亿条。2019 年,Snapchat 互动镜头的播放量也超过了 150 亿次。
Snapchat 有一个数据宝库,数据科学家和分析师可以在此基础上分析数据,以更好地了解用户行为,改善他们的体验,并推动广告目标。简单地说,Snapchat 生成的数据量使其成为数据科学家茁壮成长和发展职业生涯的完美环境。
阅读更多关于 Snapchat 的 数据科学面试题 。
Snapchat 的数据科学角色
在 Snapchat,每个数据科学家都被安插在不同的团队中,如工程、营销、产品管理等。,解决基于业务和产品的问题。Snapchat 的数据科学家的角色各不相同,从专注于产品的分析到更具技术性的计算机视觉研究,每个角色都有。
所需技能
Snapchat 聘用在数据科学或其他相关定量领域拥有 3 年以上行业经验(高级职位 5 年以上)的合格申请人。招聘要求对团队中的工作角色来说非常具体。在申请时,强调符合这些职能角色的行业经验至关重要。
其他相关资格包括:
- 丰富的因果推理技术、实验设计和/或 A/B 测试经验
- 扎实的 SQL 或其他大数据查询语言背景(3 年以上)
- 使用 Python 或 R 等编程语言的经验
- 有使用 SciPy 或 Panda 等分析软件包的经验
- 具有在商业智能(BI)工具(例如 Looker、Tableau、Power BI、Google Data Studio)中创建视觉效果和仪表盘的经验
- 能够清晰有效地向高管传达分析结果
Snapchat 有哪些数据科学团队?
根据分配的团队,Snapchat 数据科学家的职能包括:
- 广告运营:创建和测试假设,建立模型和机器学习管道,以了解 Snapchat 用户如何与 Snapchat 上的广告互动,并与产品和工程团队合作,以创建和扩展见解。
- Snap Games: 利用数据分析和模型提供对玩家、游戏和产品性能的洞察。
- **产品设计:**创建和测试假设、实验设计和 A/B 测试。创建视觉效果和仪表盘来推动和影响公司数据文化。
- **感知:**利用先进的数据分析工具,包括针对不同用户创建和测试假设。
- **增长:**设计和构建数据管道和关键数据集,以支持仪表盘和探索性分析。跨团队协作,应用定量分析、数据挖掘和统计建模。这些信息用于推动业务决策,并了解用户如何与产品和功能交互。
面试过程
图片来自 Unsplash
Snapchat 数据科学家面试流程从与招聘人员或招聘经理的初次面试开始,随后是与数据科学家的技术筛选。通过技术筛选后,将进行现场面试,包括与团队经理、数据科学家和产品经理的五次一对一面试。
初始屏幕
这是一个试探性的电话和与招聘经理或招聘人员的聊天。在这次面试中,他们试图了解你的技术背景和过去的相关项目和经验。还讨论了 Snapchat 的团队、适用的工作角色和工作文化。
技术屏幕
技术筛选(45 至 60 分钟)由数据科学家通过 Skype 完成,主要侧重于分析和统计。问题(通常是开放式的)是标准化的,围绕 SQL、A/B 测试、实验设计和一些 Python 脚本。一般来说,标准并不是很高,他们希望你理解基本原理。
对于在技术屏幕期间会遇到什么样的面试问题,请查看一份清单 Snapchat 的技术数据科学面试问题 。
现场面试
现场面试是流程的最后一个阶段。它包括五次一对一的会议,每次大约 45 分钟,由团队经理、数据科学家和产品经理参加。除非是视频聊天,否则还会提供午休时间来讨论文化。
请记住,面试的目的是评估候选人如何利用数据科学概念、算法和模型来提供业务影响洞察。Snapchat 数据科学家访谈结合了大多数数据科学概念,如产品分析、统计和概率、A/B 测试和实验设计、SQL 和数据操作以及预测建模。
温习这些概念以及回归和分类建模和其他相关领域的知识。在白板上练习编码也很有帮助。
在我们的 SQL 编辑器中,在面试查询上尝试下面的 SQL 问题:
编写一个 SQL 查询来创建 2020 年 1 月每个用户评论数量的直方图。假设容器桶分类间隔为 1。
感谢阅读!
如果你喜欢这篇文章,并想了解更多关于 Snapchat 的数据科学采访…
- 查看 Snapchat 的数据科学面试问题 。
- 对更多数据科学指南感兴趣?查看 谷歌 和脸书 数据科学面试题。
- 报名 面试查询 每天在你的收件箱里获取几个数据科学面试问题。
- 订阅我的 Youtube 频道 了解更多数据科学访谈。
病毒式增长中的社会图表
从人际互动中推理集体结果的方法:数学模型的计算机模拟
在撰写本文时,由病毒新型冠状病毒引起的冠状病毒疾病新冠肺炎正在全球蔓延。病毒从一个有传染性的人传播给另一个人,经过一段时间的潜伏期后,病毒可能会继续传播给另一个人。
一种观点认为,病毒在世界的社交图谱中传播。社交图是社区中人们的相关社交互动的数学表示,在这种情况下,真实世界的互动具有非零的传播病毒的概率。
在接下来的内容中,我阐述了传播如何依赖于社交图的特征。
我使用建立在抽象基础上的数学模型的计算机模拟。因此,模拟处理事物或信仰如何在网络中复制的一般现象,以及所述网络的性质如何反过来影响传播的性质。经济学家、营销人员、反恐怖分子和流行病学家等在他们的实践中应用网络和图表理论。
我进行的模拟将病毒在社区中传播的宏观陈述与相互作用和复制机制的细节联系起来。换句话说,关于人际互动的直觉可以与病毒传播的宏观或集体属性联系起来。自下而上的计算机模拟是根据对基本属性的信念来设计解释的。这是这种方法的优点之一。
然而,我并不要求对特定的新冠肺炎病给出定量的预测或个人或集体行动的建议。地方卫生当局是寻找这些信息的更好的地方。更确切地说,我相信,如果世界的模型及其逻辑是明确的,那么作为一个群体,可以获得一种对复杂事件进行推理的更明确的方式。我们对一种行为的偏好,或者对过去的判断,都建立在对世界如何运转的信念之上。我们的选择只是,我们是否以及如何让这些信念——这就是模型——变得明显。
为了超越我阐述的定性陈述,需要针对具体数据和验证进行更大的努力。但是病毒传播现在比以往任何时候都更加合理。这就是我展示这些工具的原因。
在接下来的部分中,我将展示并讨论计算机模拟的结果。最后,我提供了一些技术方法细节以及我创建和使用的 Python 代码的链接。
建立的关键数量:完全混合社会图中的病毒传播
想象一个社区,其中每个人都与每个人互动,对彼此没有偏好。像这样一个理想化的社区是一个合适的基线,用来比较随后的模拟和添加到社交图上的额外异质性。
一个混合良好的社区映射到一个完整图上。节点代表社区中的个体。这些边连接成对的个体,这些个体可以相遇,此时病毒传播发生的概率通常很低,但不是零。
完整社交图中四个节点(个人)的小插图
在接下来的内容中,我使用了一个通用的时间单位(TU) ,而不是小时、天或周,以避免产生一种错误的特定感。如果需要,读者可以替换术语。
对于基线场景,进一步描绘如下:除了一个人,所有人都健康地开始。当一个传染性个体在社会图中遇到一个未受感染和未免疫的个体时,病毒在一个 TU 中的传播以概率 P 发生。一旦被感染,基线情景中的个体进展如下:
- 在感染事件的大约 1-3 个月之后,个体变得具有传染性,并且可以开始感染他们遇到的其他个体。
- 在大约 6-10 TUs 后,疾病被发现,此时个体自我隔离,并停止与社会图中的其他个体接触(并因此感染)。
- 大约 10-15 TUs 后,个体恢复,此后对进一步感染免疫,并返回到它们在社会图中的先前位置。
我省略了死亡事件的建模。在现实世界中,它们当然是最重要的。我目前的重点是短期的病毒传播,所以这个省略是有道理的。
进一步设想基线场景的两个小变化:
- 更有可能的传输者:作为基线情景,除了会议发生时的传输概率是基线的两倍。
- 延迟恢复:作为基线情景,除了恢复发生在感染事件后约 13-18 tu。
这三个场景是用完整社交图中的一千个人模拟的。
这三种情况的共同点是,在疾病发展的早期,受感染的人数呈指数增长。那是因为受感染的个体在当时是相对罕见的,所以绝大多数受感染的个体是有可能将病毒传染给健康个体的会议的一部分。
一段时间后,增长趋于平稳,并达到峰值。当许多会议涉及成对的已经感染的个体或免疫个体时,社交图中较少的会议可以有助于病毒在社区中的传播,并且恢复率很快超过感染率。
这些情景之间的集体结果的差异源于以下关系:
- 如果病毒更容易在个体之间传播,受感染个体的数量在开始时增长更快,下降也更快。
- 如果一种疾病需要更多的时间来恢复,那么在任何一个时间点上被感染的个体数量都会更大,因为恢复的个体流回到社会图需要更多的时间来开始。
这些是相当直观的关系,是进一步分析的良好基础。
表征集体结果的另一种方式是确定在健康个体自我隔离并随后康复之前,传染性个体将病毒颗粒传播给健康个体的数量。
从最初 100 名受感染个体的疾病进展中,获得了以下直方图。
在更有可能的传播情况下,受感染的个体更有可能在自我隔离之前感染更多的个体。这是量化这种情况下感染增长更大的一种不同方式。在这个量上,延迟恢复与基线没有什么不同,这是因为它们的不同之处不在于传播的性质,而在于恢复。
在流行病学文献中,每个受感染个体的传播平均值有时被称为 R0 。在一些病毒传播模型中,这些直方图是模型的输入,而不是结果,在合理的理论假设下,它们可以被建模为负二项分布。
到目前为止所描述的结果和关系可以从使用常微分方程或简单类型的随机抽样的标准增长模型中获得。因此,它们在数学上非常高效。这种模型做出各种同质性假设,包括关于社交图的假设。
由于我明确地模拟了个体对个体的动态,我可以引入异质性,并看看它如何在集体结果中表现出来。这就是我想要探索的直觉和宏观观察之间的联系。
社交距离对所有人都有利,即使不是所有人都参与其中——这可能是一个正在形成的协调困境
我从两个维度对社交距离建模:一个给定的个体进行了多少社交距离,以及有多少个体参与了这种社交距离。因此,对社区中个人之间的非统一程度的社会距离进行了建模。
我继续使用完整的社交图,并使用如上所述的相同基线场景。此外,还模拟了以下种类的变化: X%比 Y%更谨慎。这意味着模拟社区中的 X%的人在与社交图中的另一个人互动时,传播或接收病毒的可能性降低了 Y%。其余百分比的个人,100-X%,与基线场景中的个人没有什么不同。
同样,一千个人被模拟。
图中的曲线展示了被称为平坦曲线的特性。社区中在社会交往中持谨慎态度的个人比例越大,增长就越慢,因此感染高峰就越低。
下图显示了前 100 名感染者依次将病毒传播给了多少其他人。不出所料,相互作用越谨慎,每个感染者的传播就越少。
在这些模拟中,社区的人口由两种类型的个体组成:实行社会距离的个体和不实行社会距离的个体。换句话说,后一部分与构成基线情景人口的个人类型相同。
单独分析模拟群体的那一部分,即非距离个体。
该图显示了在不同模拟社区中被感染的非远距离个体的相对数量。请注意,这些曲线已经过缩放,因此可以进行比较,而不仅仅是反映社区中非距离个体的不同数量。
关键的结论是,随着社区中实行社会距离的其他个体数量的增加,那些没有改变他们个人行为的个体仍然会以较低的比率被感染。
实践社交距离的人也从他们的实践中受益,尽管如果更少的其他人参与同样的实践,受益会更少。换句话说,集体成果是合作的,而不仅仅是各部分的总和。
因此,在某些条件下,这可以起到类似于经典协调困境的作用,类似于著名的囚徒困境。举例来说,如果实行社交距离是有成本的,那么个人的最佳选择就是成为唯一一个不实行社交距离的人,而其他人都这样做。一旦一些人“背叛”了保持距离的做法,个人保持社会距离的好处就会减少,背叛的动机就会增加。因此,集体最优是不稳定的。
然而,必须指出的是,仅仅因为一个困境可能存在,它可能不会在现实世界中被激活。正如奥斯特罗姆和西格蒙德等人所指出的,对现实世界中的人类、制度和文化的研究表明,额外的规范和禁忌往往演变成间接短路协调困境。一旦我们可以回顾新冠肺炎疫情,这将是有益的经验调查世界各地的不同社区如何度过这些潜在的协调困境。
下图对比了社交距离对更可能的发送者情景(见上一节)的影响和基线。
在更有可能的传播情景中,相当大的社会距离仍然会导致比基线情景更快的感染增长。
这表明,尽管社会距离在质量上总是使曲线变平,但病毒传播的其他特性对通过这种缓解努力可以实现的精确的 T2 数量减少非常重要。如果需要将峰值拉平到给定阈值以下,则必须从病毒传播相关特性的定量考虑中推断出需要多少社交距离。
我只是在模拟社区的个体中模拟了适度的异质性。社会距离的程度和范围可能会随着社区对疾病严重性的认识而变化,这种认识会随着病毒传播的过程而变化。为了解释这一点,需要更复杂的个人意图和行为模型。所谓的基于主体的模型提供了在某些利己假设下根据信念和意图对行为进行建模的手段。当面对极端事件时,根据定义,几乎没有可用于模型训练的追溯数据,因此需要人类和社会力学的基本原理模型。
穴居人图和小世界中的病毒随机游走:社会图拓扑可能是人际动力学中不确定性的放大器
在图论中,大量的原型图被定义和研究。上一节中使用的完整图形是一个。这是连通性的一个极端例子:每个节点离所有其他节点只有一步之遥。
一个更少连通的图是所谓的穴居人图。我将使用相关的放松穴居人图作为社交图,并探索它如何改变传播的本质。
图像中的蓝点代表图中对应于健康个体的节点;四个红点是被感染的个体;白色的重叠和交叉线是连接节点对的边。节点被放置成使得彼此之间具有许多连接的节点是靠近的。十个白色束中的每个包含 100 个节点,每个节点形成几乎完全连接的组或集团。图中只有 1%的边在组之间。
一束几乎完全连接的节点的特写。
放松的穴居人图形代表了一个原型社区,其中每个人都与一个小的子社区紧密相连。一些个体直接连接到两个或更多的子社区,尽管对于任何个体来说,大量的社会联系都在群体内部。然而,在社区中的所有个体之间总是存在一条通过中介的路径。每个人至少都是其他人的朋友的朋友的朋友。
下面的动画图像显示了一个模拟的疾病轨迹,以五个 tu 为一步。除了蓝色和红色的节点,紫色的代表反应性自我隔离的个体,绿色的代表康复和免疫的个体。
这种蔓延似乎是以两次爆发的形式进行的。首先,五组开始从蓝色过渡到红色,紫色,然后绿色。第二,当第一组大部分是绿色时,其余五组开始从蓝色明显转移。
这种传播突然增加的现象是群体间病毒传播很少的结果。实际上,有一个看不见的过渡障碍。
然而,在病毒传播或社交图中,没有任何东西要求传播像上述那样以两次爆发的方式进行。特定的结果取决于一些关键的低概率事件的结果。下图显示了在放松的穴居人社会图(社会和传播事件的不同随机化)的九个独立模拟中,随着时间推移的感染人数,以及其他基线病毒特性。
在放松的穴居人社会图中,围绕感染的平均(或预期)进展,病毒传播有很大的差异。重复数 2,清晰的双峰曲线,是动画图像中显示的曲线。
关键是输入信息的不确定性转化为结果的大量不确定性。模型中的随机变量量化了我们对过程中各个组成部分的知识的不确定性。例如,在某一天,A 个体可能与 B 个体相遇,如果发生,可能导致病毒传播。如果个人 A 和 B 属于不同的节点群,这种相遇和转变可能会被证明——事后证明——是使病毒传播到大多数健康个体群的关键事件。
对于完整的社交图,同样存在输入知识的不确定性。然而,在这种类型的社交图中,病毒传播在集体输出中的可能结果的范围要窄得多。因此,随着社交网络拓扑结构的改变,相同的人际传播特性会转化为不同的集体结果。
另一个结果是,在放松的穴居人社会图中,两个相同的群体可以在某个时间点经历完全不同的结果,原因仅仅是一个罕见的事件发生了不同的转变。回顾性观察到的一些差异没有需要解释并转化为前瞻性陈述的重大结构性原因。
另一类图是小世界图。许多现实世界的网络是高度聚集的(一个人的朋友也可能是彼此的朋友),并且具有适度的最短路径长度(如果可以找到的话,网络中几乎任何两个个体之间都有相对较短的路径)。用 Strogatz-Newman 图算法构造了一个原型小世界社会图,再次模拟了基线情景病毒的传播。
结果的可变性没有放松的穴居人大,尽管比完整的社交图大。
另一个原型图形是环格。个体以与小世界图中相同的方式聚集。不过,任何两个节点之间的最短路径长度都可能很长。然而,没有像放松的穴居人图中那样明显的节点组。
作为参考,设置不同社交图的模拟,使得 TU 中的会议总数无论如何都是相同的。因此,图表类型之间的差异不也不反映每个 TU 的会议总数的任何变化。
为了便于比较,将增长的平均值放在一起。小世界(10%)图类似于上面的小世界社交图,但是在非聚集节点之间有额外的路径。
对于更聚类的社交图,病毒传播更持久,受感染个体的峰值因此降低,尽管这些社交图的任何单个特定结果都可能偏离平均值更多。
如果我们把病毒想象成一个在社会图中随机移动的物体,那么它发现通向某个人的路径的能力将取决于图的拓扑结构。瓶颈、群集之间的捷径数量等是社交图的特征,除了病毒在人与人之间传播的容易程度之外,这些特征还决定了集体结果,包括可能结果的范围。毕竟,我们只观察一个现实,所以距离关系到对未来可能发生的事情的陈述(这个话题我已经在详细讨论过了,关于多伦多的城市火灾)。
上面的社交图是说明性的原型。它们只是为了说明在其他条件相同的情况下,社会特征的差异如何影响集体的结果。与任何特定案例相关的实际社交图是什么,比如新型冠状病毒在一个城市的传播,社交媒体上的猫迷因,或者文艺复兴时期佛罗伦萨的政治影响,是一个不明显的实证问题。
如果恢复没有带来免疫力和其他试探性问题呢?
到目前为止,所有的模拟都假设对进一步感染的免疫力来自于康复。对于病毒感染来说,情况往往如此,因为免疫系统可以适应特定的病原体。然而,这并不能保证,因为人可以通过药物治疗(不是疫苗)通过免疫系统的非适应性部分康复,或者也可能发生在流行期间,病毒发生变异,使得以前感染的免疫记忆占据应用。
这种动态可能很复杂,取决于第一轮感染中死亡的人群以及特定病毒的适应能力。我目前对可能性的范围了解得太少了。因此,我不会进一步探讨这个问题,只需注意这对于病毒传播的长期发展非常重要。
另一个与社交图谱中的传播有关的特征是主动隔离,即人们被隔离,而不管他们已知的感染状态。在其最简单的形式中,它可以被建模为穴居人图中的一组节点,与其他组完全隔离。然而,大规模的隔离通常会引起摩擦,比如个人的反抗,或者是持续时间,而不是疫情状况,决定了隔离是否适用。这些动力学需要更多的思考来包含,我把它推迟到另一个时间。
模型细节
接下来,我将简要介绍这个模型。底部的代码链接。
一个人被建模为具有疾病状态。该状态可以经历一个状态转换。下图中的绿框代表数学模型中的疾病状态,箭头上方的黑色文本代表状态转换。
箭头代表条件关系(不是流程图)。激活和下游状态转换被建模为随机事件。动力学知识中的不确定性通过累积概率密度分布来量化。例如,激活转换需要感染存在。在给定的条件下,伯努利试验的结果决定了某一天是否发生了状态转换。伯努利试验的概率参数取决于从感染转变以来已经过去了多少天,使得状态转变变得更有可能是久而久之。
infect 状态转换依赖于社交图中个体和邻居之间的交互。可能导致感染的步骤有:
- 在社交图的所有边上循环。
- 对于一条边,让伯努利试验的结果决定该边所代表的会议是否发生。概率参数是与边相关联的权重。
- 如果会面发生,那么只有当一个人具有传染性,而另一个人既没有被隔离也没有免疫也没有被感染时,尝试以某种概率进行病毒传播。如果成功,则执行感染 状态转换。
在上述模拟中,边上的权重被设置为使得一个 TU 内会议的总预期数量与节点数量成比例。不管社交图拓扑如何,这都是真的,这意味着图拓扑之间的差异而不是来自尝试的病毒传播数量的任何差异。
Python 代码可以在这个 Github 库中免费获得,没有任何质量保证或支持。代码特别建立在 Pandas 和 networkx 库的基础上,图形是用 Bokeh 库创建的,除了网络图像是用 Cytoscape 创建的。
Scrum 大师的孤独
财务与技术
敏捷框架应该如何适应变化
托尼克在 Unsplash 上拍摄的照片
“软件开发是一场洞察力的游戏,洞察力来自有准备的、休息放松的头脑.”
肯特·贝克
我完全同意肯特·贝克的观点。当然准备好了…休息好了!轻松!不是在第一波,第二波,或任何一波期间,而是在疫情的整个过程中。让我们明确一点,尤其是如果你是一个女人。
前提
我不想在这里谈论 SARS-COV2。这是新的常态。下一个正常。无论你想要什么。反正是事实问题。因此,在这个(更加)复杂和有趣的时代,我们中的许多人将要领导一个软件项目。
有人认为*“重要的不是物理距离,而是缺少* Einheit *”*你们中的一些人可能已经有过在全球分布的团队中工作的经历。但是我们在封锁期间经历的,并且仍然在经历的,是一个分布式团队(可能在同一个时区)的极端和矛盾的版本,即“在家工作”。
我也理所当然地认为你在使用精益和敏捷的方法开发软件产品。在这里,我讨论了 Scrum,并对 Scrum 作为一种敏捷方法应该或者能够如何适应这个时代做了一些思考。
我认为不管你是不是 Scrum 的粉丝,我的考虑都是有益的。我一直认为,要实现一个软件项目,你需要很大的自由。自由意味着在所有的可能性中辨别、辨别和决定什么对你是好的。总而言之,自由就是选择一套适合你的规则。所以,本质上,要自由,你需要规则。真是自相矛盾!我认为这适用于我们生活的任何方面,适用于我们做出的每一个简单的选择,而不需要看复杂的东西,如软件项目!
总的来说
我可以目睹更大的疲劳与冲突的感觉和动力。
一方面,更多的物理隔离(和集中),另一方面,更多的物理隔离(和痛苦)。
在这里,我将向您介绍四个基本点以及一个指南针,让您一起驾驭这些变化:
- 建筑
- (超)专业化
- 每日混战
- 控制狂
我们的指南针:人类动力学。
建筑
法尔汗汗在 Unsplash 上的照片
也许我们需要框架中的另一个角色,或者一个更不平衡的团队。
架构是一个软件项目中所有东西的整体构架。它不仅仅是开发粘合剂:它定义了大粒度的交互;它让我们明白如何维持非功能性特征;它确保我们开发的不是所有东西的大杂烩,而是复杂系统中相互作用的部分。
XP、Scrum 以及其他敏捷方法似乎支持新兴架构的概念,没有大的早期结构化,而是微观选择的结果。以这种方式工作是非常非常困难的,也是非常有益的,有时这是唯一可能的方式。然而,奇怪的是,它需要大量的能力和沟通,更重要的是,大量的纪律!从这三种资产,加上敏捷性和最佳实践,一个伟大的软件架构可能真的会出现。
无论如何,这实际上是一个开放的问题,在敏捷方法和强大的、内聚的、一致的软件架构的开发之间。这甚至更难远程实现,因为涉及到许多远程互动,远程互动更难、更不轻松、更令人疲惫。好吧,那怎么做?根据我的经验,有两种可能的方法:
- 更多地关注架构的显式设计,当然是迭代地和增量地,而不是试图以软件和系统动力学原理等复杂系统的行为为代价,让它浮现出来(假设你已经意识到使用 Scrum 来处理它们)。这种动态是可行的,即使可能会让这个过程变得不那么有趣。
- 团队中的一个人可能比团队中的其他人更快、更有领导能力、更有经验,以至于她不知不觉地、致命地塑造了架构,这要归功于她在编写代码方面的生产力和经验水平。某种类型的团队领导(显然不是另一个 Scrum 大师,只是一个不愿意并且因为她的能力,自然倾向于带领其他人走向精确方向的人)。我们知道不支持集体代码所有权的动态风险,并且基本选择可能不会被所有人完全共享或认可。敏捷实践的对立面。但也许当距离更远,更两极分化的团队可以工作得更好。
无论哪种情况,你都在改变 Scrum 中的力量平衡,中期内会改变到什么程度还不清楚。
(超)专业化
给他们需要的环境和支持(!)并相信他们能完成工作。
敏捷还意味着团队中的所有开发人员都承诺在中期能够轮流做所有的事情。而这也是靠伟大的沟通来维系的。
专门化在这里指的是系统地避免组成软件系统的某个部分、某种算法、组件或其他东西的开发人员,相反,每次都更喜欢其他东西,并将她的活动集中在这些组件上,对它们越来越熟练,对其他组件越来越不熟练或几乎不熟练。这种动态可以在短期内产生积极的影响,但当然,这与敏捷相反,在中长期内只会产生负面影响。
在很长一段时间里,我们可以很少或很少质量地交流,我们都是孤立的,这种动态可能导致项目的漂移。那又怎样?
对此的唯一答案是,当你远离与任何你想要的人分享键盘的机会时,你必须更勇敢,更愿意,克服懒惰和恐惧,像在同一房间一样与他人分享那些该死的信息。如果你想以同样的方式保持敏捷,就要做额外的工作!
我要补充的是,通过有一个更清晰和定义明确的架构,你将通过设计避免(过度)专业化。
每日混战
特别是当你设法做非正式的日常 scrum,当你必须在线安排它们时,它结束了一件更加僵硬和复杂的事情。
在某些情况下,你可以组织日常的 scrum,而不会看起来像“日常 scrum”。这不是欺骗自己或别人,而是简单地说,即使看起来不是那样,你也这样做。而且是加分!因为每天的检查不应该是一种责任,而是一种分享和“同步”我们工作日的快速交谈,一种具有最大透明度的快速非正式交谈。最初很难达到,但是几次之后,达到了一些凝聚力,就变得容易和有益了。相反,当你每天在网上进行 scrums 时,一切看起来都很奇怪和笨拙。
当你和 5-6 个人在 Skype 上进行日常聊天时,即使你和这些人很熟,也不可能是无缝的聊天。最重要的是,不是快速的。即使你能做到透明和清晰(这对你、你的团队、你的人际关系、你的家庭背景、你作为一个团队的凝聚力以及许多其他东西都有好处),你在保持非正式性和更重要的简洁方面也会有更多的困难!一个电话变成了一个约会,变成了一次会议,变成了“让我们一起开一个半天的开发会议”,而不是每天的混战。
生产力可能会受到影响。然而,它也可以成为一件好事。安排一次所有团队都参与的会议,而不仅仅是一个小组或两个人参与,这并不常见。康迪视有光明的一面。然而,每天的 scrums 已经变成了别的东西。在对框架进行全面评估时,必须考虑到这一动态。
控制狂
照片由pix poeties在 Unsplash 上拍摄
Scrum 里没有老板。
Scrum Master 在某种意义上是一个领导者,但不是团队的首领或老板。相反,她是一个促进者,一个可以保护团队免受外部干扰的人,这样团队可以更容易、更自由、更有成效地工作。我想起这个概念是因为,在一些糟糕的 Scrum 应用中,经常会有这样的误解,认为 Scrum 大师就是老板。没有什么比这个框架的真实性更远的了。
除此之外,无论你是否使用 Scrum,你都可以很容易地找到这样一个人,他告诉你:如果你不想陷入混乱,你就必须更努力!当然,这也是对做好软件的一个很大的误解(不仅是在 Scrum 上)。然而,情况变了,人也变了。当然,我们都是专业人士……当然……尽管在其他情况下,人们很容易撒谎,随波逐流,变得悲伤,变得疯狂,因为没有看到你的 Scrum Master 而变得更开心,迷失在交流中,等等……
“那我做了什么?”
Scrum 大师
问题是不要咄咄逼人或专横跋扈,要远程实现正常甚至更好的表现。当然,这不可能是解决办法。然而,有些人认为。
其实我觉得,从远程来说,比平时更多地策划工件,比平时更多地关心任务的明确命名,照看冲刺规划,温柔地梳理任务状态的完成情况,用爱珍惜来自龙岗的感悟等等,才是根本。通过这种方式,您可以保持透明和沟通,这是敏捷的两大支柱,从远处塌陷。
但是这种对工件和沟通的更多关注并不能成为你脱离团队的借口!如果你是真诚的。你不能只关注 git 问题、Trello 卡或 asana 计划,因为这样你就没有时间和精力编码了!
总的来说,如果你认为交流少是问题所在,你需要解决真正的问题:撒谎!与你所想的相反。为了让其他人放心,为了支持团队中的良好情绪,善意的人可能会隐藏问题。这是一个问题!
这就把我们带到了…人类动力学。在这风雨飘摇的时刻,我们唯一真正的指南针。
指南针:人类动力学
Alex Alvarez 在 Unsplash 上的照片
围绕有积极性的个人建立项目。
- 首先,人们还会以这种方式“快乐”地工作吗?但是没有唯一的答案。有些人更快乐,有些人更悲伤,有些人更糟糕,有些人完全不开心…向上。有些人最终会更专注、更有效率,而有些人会感到无聊,因为有效率需要别人。退一步说:所有习惯敏捷的人必须熟悉一种不同的敏捷方式。
- 我们来谈谈谎言吧!不想让别人失望的愿望导致只交流积极的事情,也是因为你不想让团队除了你自己以外的人难过。因为我知道,人与人之间是不同的:你可以在一秒钟内从不同的情绪中转换。但是,请忍住!以回避问题的方式谈论问题会让问题变得更大。即使推迟问题讨论也会让他们成长。我敢打赌,在我们陷入这种恶性循环的所有时间里,我们更有可能出现重大错误。
- 这需要的不仅仅是增加交流。因为让我们明确一点:在复杂的技术方面,几乎不可能远程地相互理解。正如开发人员所知,最好的方法是亲自带着两个记号笔和一块板。相反,即使有最好的连接,最好的屏幕共享,最好的东西,也很难甚至不可能理解复杂的编码问题。你没有看到所有的事情。所以,结果就是你讲简单的事情就这样了。复杂的东西是单独面对的,而不是和其他人一起攻击,这导致在编码的复杂方面的共享权更少,从而导致更低的质量。因为和别人一起做某事和在你做了之后解释同样的事情是不同的。不会吧,不一样。
- 我知道你通常不想和客户交谈,但是远程…你会有两个敌对部落的感觉!请不要这样做…它甚至可以更好地从远程与商业人士交谈,这是他们的栖息地。请考虑这样做,即使你最终可以回到你非常开放的交流空间。
结论
我们需要适应当前的变化。没有什么比 Scrum 更能拥抱这种变化了。因此,Scrum(以及其他方法)也应该适应这个奇怪的时代。对于 Scrum 来说,这可能包括更多不平衡的团队或者改变日常 Scrum 的概念。可以肯定的是,能活下来的,只是那些能更好地适应环境有奋斗或乐趣的人。
关注我的 Medium 了解更多信息。
让我们也在 Linkedin 上保持联系吧!
我们不缺乏沟通。相反,我们拥有太多了。我们缺乏创造力。我们对现在缺乏抵抗力。
德勒兹和瓜塔利
参考
[1] G .赫姆克斯和 l .金泰拉;《正确扩展:如何通过 Scrum@Scale 实现业务敏捷性并使竞争变得无关紧要》(2020);Scrum@Scale。
[2] K .贝克和 c .安德烈斯;《极限编程解释:拥抱变化》(1999);艾迪森-韦斯利。
[3] K .施瓦布;“使用 Scrum 的敏捷项目管理”(2004);微软。
[4]《历史是武器——暴动宣言》(1991);比基尼杀手杂志 2
从长远来看,专业化的“数据科学家”将会胜出
意见
成为专家会比成为多面手让你走得更远
Bermix 工作室在 Unsplash 拍摄的照片
在我的上一篇文章“ 品牌在数据科学中的重要性 ”中,我提到数据科学已经变得过于宽泛,因此品牌是一个很好的策略,可以用来克服成为“数据科学家”的噪音,这反过来在审查过程中对我们有利。
最近,一个特别的话题在我和朋友的讨论中反复出现。品牌的重要性!我…
towardsdatascience.com](/the-importance-of-branding-in-data-science-467b2d2b1e7f)
在思考了一段时间我自己的写作后,它让我想知道…
如果我告诉人们要专门化,会不会更容易些?
尽管作为一个社区,我们正面临着身份危机,但我通常并不关心头衔。然而,我理解区分角色的重要性,在此基础上,如果我们开始看到像“统计建模师”、“自然语言处理工程师”或“计算机视觉工程师”这样的角色(可能不是这些确切的名称,但你会明白我的意思),而像数据分析师这样的角色开始恢复他们的身份,我不会感到惊讶。
换句话说,数据科学的热潮已经结束,是时候专门化了。原因如下:
这样更容易
成为一名不可或缺的“数据科学家”需要做很多事情,包括紧跟最新趋势、最佳实践和发展。鉴于数据科学的广泛性,必须全面记住所有这些东西就像打一场败仗。为了保存赢得战争的资源,你最好输掉这场战斗。
全面掌握最新的数据科学就像打一场败仗。你最好输掉那场战斗,这样你就可以把注意力集中在赢得战争上!
这引发了一个问题……**战争是什么?**好问题。在你的职业生涯中长寿,不可或缺,是未来的证明。
我们都知道技术变化有多快,因此通过专业化我们可以减轻负担,因为我们减少了学习曲线。一般化的技能需要做更多的工作,而且会耗费更多的精力,因为我们没有经过精细磨练的技能。或者,通过专注于一个(或两个)领域,你更容易集中你的时间和注意力,从而获得更好的理解和专业知识。
创建一个学习计划来成为一个强大的 NLP 实践者比创建一个数据科学领域的学习计划要容易得多,所以为什么不这样做呢?成为一个专家通才需要太多的时间,而与此同时,一个人可以发展专业技能并拓展业务。
败家子
我已经提到了我的上一篇文章“ 品牌在数据科学中的重要性 ”以及它是如何促使我写这篇文章的,但让我们更强调一下如果你今天进行转变,它将如何有所帮助…
“当竞争激烈时,脱颖而出是值得的”
哈佛称数据科学将是 21 世纪最性感的工作,现在每个人都想要最性感的工作。在我看来,这绝不是一件坏事。我希望尽可能多的来自不同背景的人参与数据科学,然而,在人们聚集的地方,脱颖而出是值得的。
还记得那个经典问题吗:“如果你有心脏问题,你会更喜欢一个能处理各种问题的医生给你做手术,而不是一个专业的心脏外科医生吗?”。大概不会!
我们可能会不惜一切代价让专家胜过多面手,即使这意味着要付出难以想象的一大笔钱。这并不是说你应该纯粹为了经济利益而成为专家。尽管如此,您的深度和知识将成为您的客户的信任和可信度,我们知道这些客户更喜欢专家—财务收益纯粹是副产品。
“你的优势是你在某个领域的深度和知识.”
让我们换一个问题:“你愿意让一个专门研究计算机视觉的人来处理你的图像分类问题,而不是让一个拥有一般知识的人来处理吗?”
享受
好吧,你决定专攻某样东西。说,计算机视觉!你已经制定了你的学习计划,并决定了一个很酷的项目,你想用你正在学习的技能来完成它。
你会变得更好更快,因为你可以把所有的精力放在开发你的计算机视觉技能上,当你擅长某件事时,你会更喜欢它,因此你会想做得更多…
资料来源: Giphy
徘徊在“这不是我的工作,这是我喜欢做的事情”的境界是我们都想去的地方。当你擅长你所做的事情时,你会获得更大的个人和职业满足感,这让你更想做这件事——“当你玩得开心时,时间过得很快”。
因此,专业化将把你培养成一个更有效率和更有成效的从业者。如果你花更少的时间做你正在做的事情,你就有更多的时间做你想做的事情!
最后的想法
与我的想法相反,也有一些很好的理由来解释为什么有人会决定忽略我的意见,例如:
- 拥有一套通用的技能可以增加你独立完成任务的可能性,而不必依赖他人的帮助
- 你不太可能感到无聊,因为你广泛的技能允许你处理不同的问题
- 你是更多公司买得起的。
你站在哪里?—留下回应,或者让我们在 LinkedIn 上继续对话。
[## Kurtis Pykes -人工智能作家-走向数据科学| LinkedIn
在世界上最大的职业社区 LinkedIn 上查看 Kurtis Pykes 的个人资料。Kurtis 有一个工作列在他们的…
www.linkedin.com](https://www.linkedin.com/in/kurtispykes/)
学习数据科学的阶段
如何在关键学习点“摆脱困境”
许多人认为学习数据科学是一个线性过程。事实上,这是一个混乱的进程,更接近于一系列的平稳期。
感知与现实的数据科学学习曲线
幸运的是,已经有一个很好的通用学习模型来解释这些平台是如何工作的。这种模式是诺埃尔·伯奇在 20 世纪 70 年代创造的,罗伯特·格林在他的书《掌握》中对其进行了扩展。根据这个框架,我们经历了 5 个学习阶段:无意识无能、有意识无能、有意识胜任、无意识胜任和精通。学习数据科学也遵循这个过程。
诺埃尔·伯奇和罗伯特·格林的学习阶段
在本文中,我将解释在数据科学的框架中,每个阶段是什么样子的。我谈论我在每个阶段的经历,也包括一些我发现的从一个阶段到下一个阶段的最快方法。
阶段 1:无意识的无能(完全新手)
在这个水平上,你才刚刚开始进入数据科学领域。你几乎没有编码或统计经验。阶段 1 一般以过度自信为特征。很多人认为学一两门课就能学会该领域。
这是我大学毕业时的普遍感受。有了几门经济学课程,我觉得我已经准备好进入体育分析的世界了。学习数据科学似乎是下一个实际步骤。从高层次来看,这个领域似乎很简单,你只需要在数据中找到趋势,并提出见解。简单吧?
不用说,我完全错了。开始学编程后,我已经无可救药的迷茫了。我开始把我需要学习的所有不同的概念放在一起,这个任务从简单变得极其艰巨。
为了从阶段 1 进入阶段 2,您需要了解什么是数据科学,以及它需要哪些编程和数学概念。我建议观看 YouTube 视频,并涉猎一些 python 编程来达到这种理解。
阶段 2:有意识的无能(恐惧)
一旦你开始对编程和数学的世界之大感到不知所措,你就进入了第二阶段。这是一个很多人卡住甚至退出的阶段。在这里,您将了解数据科学有多深入。要学的东西太多了,不清楚从哪里开始。
度过这一阶段的关键是将数据科学分成小步骤。你也只需要从某个地方开始。最基础的,对于数据科学来说,你需要了解一些编程(Python 或者 R)和简单的统计学。在网上找一些地方来了解这些领域。我推荐参加免费的编程或数据科学课程(【kaggle.com】微课程是我的最爱)。
在这个阶段减少我不知所措的感觉的是思考我为什么要学习这个领域。我心中有一个具体的项目。我想建立一个模型,改善我每天玩的幻想运动的结果。如果我只专注于必要的技能来构建它,我可以让数据科学看起来小得多,也更容易管理。
为了进入下一阶段,我建议专注于一个特定的问题,使你的学习标准更小。与学习整个数据科学领域相比,更容易理解完成单个项目需要什么。做一个小项目也没有“学习 python”或“学习统计学”那么令人生畏,因为这些概念是如此宽泛和模糊。在早期阶段,你真的只需要知道这两个领域的基础知识,就能够实践数据科学。如果你完成了这些小项目中的几个,你就会进展顺利。
我也建议在 kaggle 上复习一下别人的代码。你可能根本不会理解,所以不要惊慌。随着时间的推移,它将开始变得有意义,而只是大量地看代码是这个过程的一个好的开始。列出你看到但不理解的术语、包和算法。每天,研究一些这些概念,并试着理解它们。你会对自己在几周内取得的进步感到震惊。
第三阶段:意识能力(轻微危险)
至此,您已经完成了几个不同的项目,学习了如何实现特定的算法。您现在有一些代码可以参考了!
当我处于这个阶段时,我收集了所有我经常使用的代码片段,并把它们放入一个主文档中。我可以只参考这个科学怪人的文档,而不是试图记住如何做每件事。这使得以更快的速度完成更多的项目成为可能。这可能感觉像是欺骗,但我认为在这一点上,关注实现比关注语法更有意义。你应该做尽可能多的项目,应用你在研究中发现的所有不同的算法。
在应用这些概念之后,你应该开始理解它们是如何工作的。在这个阶段,我开始读研。在我的课程中,我们被要求从头开始编写这些算法。我认为这对所有数据科学家来说都是一个很好的实践。虽然我有一些在 matlab 中编写神经网络的 PTSD,但这绝对是值得的。从编写算法开始,您开始理解各种技术的输入、约束和限制。
从阶段 3 到阶段 4 没有秘密可言。让你跨过门槛的是重复,不断的练习。
阶段 4:无意识能力(艺术和科学)
当你到达第四阶段时,你知道面对问题时该做什么。您不必再参考庞大的代码片段库,您可以开始专注于优化您的问题解决方法。在这里,您将专业领域的专业知识和商业直觉与您的工作相结合,为您的挑战创造最佳的解决方案。
我相信这是真正的数据科学艺术开始发生的地方。你不再关注如何解决问题,而是寻找一个优雅且可持续的解决方案。您将更多的时间花在特性工程、模型调整和将项目投入生产上。你还与商业利益相关者更紧密地合作,以确保你提供的服务产生最大的影响。
我相信我仍然经常在阶段 3 和阶段 4 之间波动。希望今后我能在我的角色中更多地感受到这种“流动”状态。
阶段 5:掌握(贡献)
在这个水平上,你已经接近在这个领域的某个领域达到精通。在数据科学中,我真的不认为有人能掌握整个学科。你能够通过发现新的算法或解决问题的新方法来突破界限。
这个阶段是虚幻的,我认为很少有人达到这个顶峰。我认为,属于这一类别的大多数人都倾向于学术界,并且更专注于研究而不是业务实施。
最后的想法
我希望这个框架能够帮助您以新的视角评估自己的数据科学学习之旅。我还希望它能给你一个坚实的路线图来提升你的数据科学知识。从我的经验来看,学习数据科学是一个漫长但愉快的过程。
https://www.youtube.com/watch?v=hpMc6TgT34I
斯坦福情感树库(SST):使用 NLP 研究情感分析
斯坦福情感树库(SST)快速指南,它是最著名的情感分析数据集之一。
发表于 2013 年的“情感树库语义组成的递归深度模型”介绍了斯坦福情感树库(SST)。SST 被认为是一个重要的数据集,因为它能够测试 NLP 模型的情感分析能力。让我们来看看这个有趣的数据集。
在斯坦福情感树库上预测从非常消极到非常积极的情感水平(-,0,+,++)。图片来源于论文的原作者 Socher 等人。
任务。 SST 处理情感分析的关键任务,其中模型必须分析文本的情感。例如,这可以以确定餐馆评论是正面还是负面的形式出现。以下是一些虚构的例子,展示了他们情绪中的一系列积极和消极方面:
这是我不幸吃过的最差的餐馆。
这家餐厅送食物有点慢,而且他们似乎没有使用最好的食材。
这家餐馆相当不错——考虑到价格低廉,它的食物还可以接受。
这是西半球最好的餐厅,我一定会回来再吃一顿!
基于这些例子,情感分析似乎是一项简单的任务。然而,有许多具有挑战性的细微差别使得准确分析一个短语的情感变得困难。对于 NLP 模型来说,诸如否定、讽刺和以肯定的方式使用否定术语等语言异常尤其难以处理。举以下例子:
我不讨厌这家餐馆。(否定)
我就是喜欢吃冷食!(讽刺)
这种食物独特得令人不安。(否定词表示肯定)
从这些例子中可以看出,这并不像仅仅寻找“恨”和“爱”这样的词那么容易。相反,模型必须考虑上下文,以便识别这些具有细微差别的语言使用的边缘情况。由于模型良好运行所需的所有复杂性,情感分析在 NLP 中是一项困难的(因此也是适当的)任务。
**编译数据集。**对于 SST,作者决定关注烂番茄的电影评论。通过搜集电影评论,他们最终得到了总共 10662 句话,其中一半是负面的,另一半是正面的。在将所有文本转换成小写并删除非英语句子后,他们使用斯坦福解析器将句子拆分成短语,最终得到总共 215,154 个短语。
用于标注 SST 的标注界面—标注者使用滑块来选择短语的肯定或否定程度。图片来源于论文的原作者 Socher 等人。
SST 是如何被注释的?作者拿出经典的亚马逊机械土耳其工人,以随机顺序呈现这些短语,并要求注释者使用滑块指出每个短语的情绪和情绪程度。滑块允许多达 25 种不同的情绪水平(有关这方面的详细信息,请参见下图),作者使用注释来定义任务的细粒度和二进制版本。在 SST 的细粒度版本中,有 5 个不同的类别(非常负面、负面、中性、正面、非常正面),并且所呈现的基线模型达到 45.7%的准确度。在 SST 的二进制版本中,只有 2 个类别(正对负),并且所呈现的基线模型达到 85.4%的准确度。
特定长度(n-gram 长度)的短语的情感注释直方图。较短的短语更可能是中性的,而较长的短语分布更均匀。图片来源于论文的原作者 Socher 等人。
**海温的影响。**作为情感分析的领先数据集,SST 经常被用作测试 BERT 和 ELMo 等新语言模型的许多主要基准数据集之一,主要用于展示各种语言任务的高性能。
SST 将继续成为未来许多年情感分析的首选数据集,并且它肯定是即将发布的最有影响力的 NLP 数据集之一。
延伸阅读:
- Socher 等人的原始论文
- 斯坦福情感树库的主页——包括数据集的下载链接。
2020 年人工智能的状态
通过了解人工智能的过去来了解我们的未来走向。这篇文章对人工智能的过去、现在和未来进行了深入的概述。
毫无疑问,在过去十年中,人工智能、机器学习和数据科学已经成为技术领域最强大和最具前瞻性的力量。这些技术带来了突破性的见解和应用,可能会真正让世界变得更好。当然,这要归功于数据收集、硬件创新和被驱动的研究人员在 2010 年代的共生现象。这导致我们在从视觉到自然语言处理到音频理解到复杂信号处理的所有方面赋予计算机令人难以置信的能力。要了解我们的发展方向,重要的是要了解这些突破是如何形成的,以及我们目前所处的位置。这篇文章旨在做到这一点,并帮助揭示人工智能在当前状态下的局限性,以形成对未来的愿景。
本文中的
- 我们从哪里来
- 我们现在在哪里
- 我们要去哪里
我们从哪里来
自 20 世纪中期以来,人工智能已经采取了许多不同的形式。这包括从自动机到线性回归和感知器到决策树以及最终神经网络和深度学习的一切。随着进步和公众开始意识到这个“人工智能”到底是什么,这些方法通常会不可避免地从智能转向统计技术。2010 年代已经将大多数这些形式抛在身后,并允许从简单的神经网络转向深度学习的突破性方法。
神经网络到深度学习
虽然神经网络自 20 世纪中期以来就已经形成了理论,但计算和数据限制使得它们直到 21 世纪初才得以成功实施。这导致了这种数学方法的研究和能力的指数扩展,允许机器学习线性和非线性数据形式的模式。神经网络背后的概念或多或少是一组具有激活函数的堆叠和连接的线性回归。随着这些“神经元”的增加,网络有更多的变量需要训练,因此可以模拟更复杂的模式。数学和结构已在此进一步详细说明。
前馈神经网络(来源【9】)
大约在 2010 年及以后,计算和数据能力真正开始赶上这些理论。出于这个原因,研究人员和工程师意识到,随着他们增加更多的层和每层的神经元,这种统计技术可以以接近人类的方式为回归或分类模式建模。这些系统很快就获得了在更简单的数据集上产生与基于规则的系统相同或更好的结果的能力。随着 GPU 技术允许更深的网络,深度学习接管了机器学习空间,实际上开始了一场比以往任何时候都更广泛的机器学习革命。
卷积和递归神经网络
随着深度学习的形成,人们很快意识到,语言和图像领域的计算机科学问题可以通过这种新形式的人工智能更有效地解决。因为研究变得如此广泛,而不仅仅是建立越来越深的网络,现有框架内的新老方法都得到了开发和利用。语言模型开始利用和适应递归神经网络的概念,计算机视觉实现了卷积神经网络。到 20 世纪 90 年代末,这两种形式不可避免地在许多方面混合在一起,但它们的独立道路对它们的突出至关重要。
递归神经网络基于当前输出依赖于先前时间步长的先前输出的思想。这当然是语言和大多数其他基于时间序列的数据类型的本质。当人类说话时,下一个单词不是从基本上下文中随机决定的,而是依赖于前一个单词和上下文。RNNs,更具体地说是 LSTM(长短期记忆)正是为此而实现的。这种网络结构循环反馈过去的输出作为输入,以产生下一个输出。这些输入既可以馈入典型神经网络的前端,也可以处理更复杂的内部矩阵运算,如 LSTMs 所示。这种方法允许在 NLP 和许多其他时间序列数据集中实现最强大的飞跃。语言生成和预测第一次变得更加可行。要更详细地了解 LSTMs,请点击这里。
通用卷积神经网络(来源 [10])
卷积神经网络现在已经接管了大部分人工智能空间,它们的创造者 Yann LeCun 预测,它们可以处理几乎任何我们可能想到的人工智能任务。不管这是真是假,CNN 已经在复杂的计算机视觉任务中实现了近乎完美的准确性。这个概念源于图像的三维特性。经典的深度学习网络通常使用一维输入,因此图像像素值将被展平为单个向量。这种活动导致每个像素的大部分空间关系的信息丢失。卷积的概念允许 3D 输入(即 RGB 图像),并使用一组过滤器值对输入执行滑动点积运算。这允许学习多个特征图,在训练期间,这些特征图通常剖析图像的不同特征。总的来说,这允许较低数量的权重,因为滤波器覆盖了所有 3 个维度和网络,以提取图像的更深层次的特征。在过去的 10 年里,操纵 CNN 的许多努力已经导致了计算机视觉的巨大突破。这些成就中的许多都详细记录在胜利中,如 ImageNet 结果。
培训和图书馆
当然,如果没有训练这些数学模型的能力并通过可访问的代码来这样做,这些进步都是不可能的。反向传播是用于训练任何神经网络的典型方法。这个概念利用基于输出权重的每一层的导数梯度来调整网络内部的每个权重。这需要复杂的编程和硬件来实现,尤其是对于更复杂形式的架构。
幸运的是 GPU 技术得到了发展,以及更多的数学方法使这种训练方法变得高效。NVIDIA CUDA 等技术允许在大规模并行 GPU 上执行数学运算,将训练时间从几天缩短到几分钟。这允许更快的迭代,从而更快地得到结果。与此同时,诸如批量标准化、丢弃和 ADAM 等强大的优化器等方法更进一步,允许可预测和有效的训练会话。
(来源 [12])
最后,如果没有随着 Python 和诸如 Tensorflow、Keras 或 PyTorch 等库的兴起而出现的语言和库支持爆炸,这些进步都是不可能的。由于其易用性和库支持,Python 已经成为最突出的编程语言。同样,它也是数学编程最理想的语言之一。这使得更多的人能够试验和构建新概念,同时消除了更复杂语言的麻烦。最重要的是,像上面列出的那些库的创建,允许更广泛的人接触这项技术。这反过来又创造了一个更加民主化的技术生态系统。总的来说,过去的十年让更多的人拥有了更多的能力,这才是技术发生真正指数级转变的原因。
我们今天在哪里
自然语言处理
语言处理的当前技术水平已经有效地融合了递归和卷积神经网络,同时在内部创建了新的方法。所有这些都围绕着变形金刚、自我关注和单词嵌入。这些概念都有助于对大规模并行 CNN 或 fcn 中的单词关系进行建模,从而有效地理解完整的语料库。
转换器完全按照它的名字来做——将一组单词嵌入转换成另一组单词嵌入或类似的结构。这对于机器翻译、单词生成或用于分类的向量创建特别有效。这是对变形金刚的深入研究,但简而言之,它们基本上是一对编码器和解码器网络,经过训练可以完成上述任务。一个强有力的概念是自我关注,它是变形金刚的核心。自我关注是谷歌最近开发的一种方法,用于在单次网络传递中模拟语言的重现性和空间性。为此,使用查询、键和值矩阵对每个输入序列执行复杂的数学方法。这些值被调整以模拟序列中所有单词的空间关系。
变压器编码器(源 [2])
这些概念已经通过伯特和 GPT-2 架构成功实现。虽然每个网络都有自己不同的方式,但它们都实施了超深度变压器模型,以成功完成序列到序列和多任务目标。GPT-2 的创造者 OpenAI 目前有可供下载的模型(经过一些争议),允许研究人员提示网络并接收创造性的“AI”书面文本。在内容创建、聊天机器人和文本生成中有许多这样的用例。这种强大网络的可用性应该允许技术继续其指数增长。
引用我创造的受过哲学训练的 GPT-2:
“生活的意义在于为那些缺乏这种能力的人创造可能性的幻觉……”
计算机视觉
随着卷积对于图像处理任务和其他任务变得更加有效,社区已经决定在他们的网络架构中进行更深入和更广泛的研究。这带来了残余网络的强大趋势。残余神经网络,例如在最先进的 Google Inception 网络的情况下,拼凑残余块来构建最强大的 CNN。残差块通常是两个或更多并行的 CNN,它们被连接或添加在末尾。这反过来利用强大的并行计算架构来实现比以往更好的结果。
谷歌盗梦空间(来源 [10])
与此同时,新的卷积方法被开发出来,使事情更进一步。比 Google Inception 网络高一级的是 Xception 网络。这个网络与其前身几乎相同,但使用了一种新型卷积,称为深度方向可分离卷积。该概念允许更少的参数计数和更高的精度。这在上面的论文中有更好的描述,但简而言之,它将卷积运算分成两部分。分别滑过每个通道的深度方向卷积,以及逐个像素地滑过所有通道的点方向卷积。这是我们熟知的方法中创新力量的又一个例子。
最后一个趋势是迁移学习,不仅在计算机视觉中,在所有用例中都是如此。迁移学习的概念是突出的,因为训练有素的网络不需要为每个用例重复。迁移学习通常采用预训练的特征提取网络减去其分类层,并冻结权重。然后将它们作为输入附加到用户自己的分类器上。训练过程现在只是训练新的分类器来利用来自大量训练的网络的输出。这使得计算机视觉网络,如 Xception,经过几个月的训练,可以适应任何领域的用例。
生成性对抗网络
由我的 GAN 实现生成的艺术
尽管它们还没有在商业用例中得到广泛应用,但生成对抗网络是当今人工智能最有趣的形式之一。其概念是建立一个生成器网络,将向量映射到图像矩阵或类似的矩阵。该输出被馈送到鉴别器网络,该网络学习解密生成内容和真实内容之间的差异。由于两个网络是串联训练的,生成器在欺骗鉴别器方面变得更好,因为它也变得更好。这个博弈均衡的最终结果是一个能够创造接近真实内容的生成器。这导致了一些相当惊人的艺术,写作,当然还有深刻的赝品。
训练和部署
人工智能已经达到了对一些生产软件系统有用和几乎至关重要的程度。详细描述的方法允许可接受的精确度水平,以允许这项技术进入野外。这在很大程度上要归功于强大的云技术,它允许可扩展的部署和理想的培训场景。
为了向公众部署强大的模型,需要理想的培训和架构。这正是神经结构搜索和超参数调整发挥作用的地方。使用巨大级别的计算资源,神经架构搜索在潜在架构(层、神经元、方法等)的组合级别集上运行训练。).然后可以使用结果来部署理想的模型进行训练和部署。在这个过程中,进一步调整超参数,以获得更理想的模型。
2020 年,库和云功能使部署人工智能驱动的应用变得简单。云可以容纳常见形式的人工智能,并提供 it 资源来扩展和管理应用程序的生命周期。同时,库允许数据科学和软件开发角色分离。这是因为通用模型文件类型只需要开发人员理解几乎任何编程语言中的给定库就可以部署数据科学家的模型。
我们要去哪里
在不久的将来,更复杂的架构和搜索算法的趋势将会继续增长。但是很快,人们就会质疑这些暴力手段的效率和聪明程度。已经证明了这些方法是如何产生碳足迹的。随着越来越多的社会开始看到人工智能的真实面目,并考虑这些分支,社区将需要新的方法。最近出现的一种方法是修改训练方法,开始从资源密集型反向传播方法转移。这方面的一个例子是贪婪 InfoMax 优化(GIM) 。这种方法允许分层训练,特别是在迁移学习的情况下,可以大大减少以较小梯度的形式训练所需的变量数量。
炒作周期(来源 [11])
技术进步是一个发现导致研究和发明方法并最终导致实施的过程。当我们通过这个周期时,它比任何东西都更强调当前的阶段。目前,我们正处于我们所知的人工智能的实施阶段,深度学习的发现和创新正在迅速应用于几乎每个商业问题。当然,这扼杀了对全新机器学习方法的整体发现努力。随着我们在未来几年在这个狭窄的空间中循环创新,随着深度学习被视为真实情况,可能会出现广泛的幻灭。随着世界认识到“人工智能”不是魔法,并开始看到实际上只是大量数学的局限性,他们可能会要求研究更加努力地接近真正的人工通用智能(AGI)。这是人工智能炒作周期将摆脱幻灭阶段,让位于稳定的新创新的时候。
这将意味着深度学习之外的全新方法将开始形成。强化学习将继续创新,但要真正达到人类或更高水平的智能,可能需要发生不可预测的范式转变。这些方法可能会开始以量子力学和计算系统为中心,因为量子计算的概念允许人工智能和决策的概率性质以前所未有的方式建模。量子也允许极高维度的系统,一次可以考虑比单一输入多得多的因素。作为人类,我们做决定并与周围的物理世界互动。我们每个行为的总体决定因素或智力是宇宙的总体物理系统。利用量子力学的概念而不是大脑作为人工智能系统的最终决定因素可能更有意义。总而言之,如果我们打算在人工智能上投入这么多时间,我们的目标不应该是比我们自己的大脑更好的东西吗?它是一种完全由我们控制的工具。这可能是定义我们大部分人生的不可预测的技术未来的走向。
机会是无穷的,因为任何独特的想法都可以带来方法的巨大变化,关于人工智能和数据伦理的辩论将继续,企业将越来越依赖这些方法作为他们最有价值的资源。花时间了解我们从哪里来,我们将去哪里,可以让每个人发展自己对未来的愿景。这些独特的人类愿景的全球矩阵将引领我们进入一个有人工智能在我们身边的光明未来。
“衡量智力的标准是改变的能力。”——阿尔伯特·爱因斯坦
在 LinkedIn 或Twitter上与我联系,继续对话。
在https://www.mindbuilderai.com看看我目前在做什么
参考文献
[1] Krizhevsky,a .,Sutskever,I .和 Hinton,G. (2017)。基于深度卷积神经网络的图像网分类。美国计算机学会的通讯,60(6),第 84-90 页。
[2]插图中的变压器,http://jalammar.github.io/illustrated-transformer/
[3]瓦斯瓦尼,a .,沙泽尔,n .,帕尔马,n .,乌兹科雷特,j .,琼斯,l .,戈麦斯,A. N .,凯泽,,还有 Polosukhin,I .你需要的只是关注。在神经信息处理系统进展中,第 5998–6008 页,2017。
[4]Devlin,j .,Chang,m-w .,Lee,k .和 Toutanova,K. Bert:语言理解的深度双向转换器的预训练。 arXiv 预印本 arXiv:1810.04805 ,2018
[5]亚历克·拉德福德、杰弗里·吴、雷文·蔡尔德、戴维·栾、达里奥·阿莫代伊和伊利亚·苏茨基弗。2019.语言模型是无人监督的多任务学习者。 OpenAI 博客,1(8)。
[6]弗朗索瓦·乔莱。"例外:具有深度可分卷积的深度学习."2017 年 IEEE 计算机视觉与模式识别大会(CVPR) (2017): n. pag。交叉引用。网络。
[8]S·洛伊,P·奥康纳,B·韦林。2019.结束端到端:表征的梯度隔离学习。一份 rXiv 预印本
[9]https://brilliant.org/wiki/feedforward-neural-networks/
[10]https://missing link . ai/guides/卷积神经网络/卷积神经网络架构锻造路径未来/
[11]https://en.wikipedia.org/wiki/Hype_cycle
[12] [前 5 名:最流行的机器学习库Python …
人工智能伦理的现状
一些清晰的信号来自刺耳的噪音
面部识别等使用人工智能/人工智能的工具可能会变成控制和压迫的机制。[图片来自 Pexels 的陈堃]
在他的博客文章“人脸识别和人工智能的伦理”中,Benedict Evans 谈到了在 20 世纪 70 年代和 80 年代初,人们对关系数据库有两种类似的担忧,就像我们今天对人工智能系统的担忧一样——首先,这些数据库将包含坏数据或坏假设(因为我们担心我们的偏见被融入人工智能系统),其次,这些数据库将被故意用来制造坏事来伤害人们(因为我们担心人工智能系统的邪恶应用)。担心是否有效,担心是否无效。
我们对人工智能系统的担忧在两个重要方面与我们对数据库的担忧略有不同——首先,人工智能系统正在拾取人类不知道存在的信号(棘手的复杂性),其次,先进的人工智能系统可以提供正确的声音答案,这些答案在非显而易见的方面是错误的(无意的欺骗)。该领域的人们越来越清楚,我们需要解决这两种行为。
谨慎乐观是好事。一些组织和政府为理解和解决这些担忧做出了合理的努力。在过去的几年里,关于人工智能伦理的文章激增,似乎来自所有与技术有关的组织,无论是国家政府还是大型科技公司。它们以指导方针、政策文件、原则或战略的形式出现,并伴随着一些委员会或董事会来监督其实施。哈佛大学伯克曼·克莱恩中心的研究人员撰写了一篇像样的论文,总结了对 36 份此类文件的分析,可以在这里找到。出现了八个关键主题——隐私、问责制、安全和安保、透明度和可解释性、公平和不歧视、人类对技术的控制、职业责任、促进人类价值观。值得注意的是,人类控制技术和促进人类价值是这 36 份文件中最少提及的原则。作者以一句警告的话结束了“在这些高层次概念的表达和它们在现实世界中的实际成就之间存在着广泛而棘手的差距”,即写关于伦理的政策文件固然很好,但如何将其转化为行动呢?
嗯,这很难。伦理是本土化的。试图将自己的本土伦理观点强加于一个全球性现象会带来挑战。有一些善意的努力将人工智能伦理原则转化为行动。我将它们大致分为技术、政策、人员和监管类别,尽管所有类别都错综复杂地联系在一起。
技术
技术工作包括实现允许更好的机器学习可解释性的技术工具(例如,使用本地可解释的模型不可知解释,或 LIME,一种模型不可知工具,用于提供对分类器为什么预测某些事物的解释;或使用深度学习重要特征,或 DeepLIFT,一种用于识别神经网络中的哪些输入在使用反向传播预测某个输出时最重要的方法);算法可解释性(使用逐层相关性传播,LRP 或类似);以及算法去偏置(例如,通过使用模型对抗去偏置、变分自动编码器,或者通过训练数据的动态上采样,或者分布鲁棒优化)。单独实施技术措施来建立道德人工智能是有限的,因为社会偏见更加深刻和系统化——因此需要与政策、人员和法规紧密结合。
政策
拥有通过设计倡导算法公平的政策(拥有问责制、透明度和责任)是实现人工智能伦理原则的一个重要里程碑。问责制意味着证明一个人的设计决策的能力——这将需要在人工智能系统的操作背景下更深入地钻研道德价值观和社会规范——并需要涵盖指导功能(我们选择这样做,而不是那样)和解释功能(这是我们为什么这样设计系统)。问责制是对组织内的其他人、外部机构(监管机构)或受人工智能系统影响的个人(或团体)负责。创建一个透明的人工智能系统意味着能够描述这些系统做什么,复制它,并解释它们如何做出决策和适应它们的环境,并展示它们使用或创建的数据治理机制。责任意味着能够为组成人工智能系统的设计决策指定一个人类所有者(或一组人类所有者)。
人
了解设计决策的制定者和受这些决策影响的人非常重要,了解他们的能力和局限性也很重要。构建人工智能系统的团队需要仔细挑选——确保这些团队是多样化的,并且对人工智能解决方案所针对的问题有良好的接触,这一点很重要。当构建一个人工智能系统时,人们的偏好、偏见和历史偏见应该被讨论并至少被仔细承认,如果不能避免的话(因为有时避免这些既不可行也不合适)。在发展的同时,应该进行公平透明的协商,征求所有利益攸关方的意见。需要授权参与端到端流程的人员提供充分的监督,并且应该仔细研究对所有相关利益方的影响和益处。
监管
法规无法阻止人工智能实施中的错误——这些错误将不可避免地发生。然而,他们可以要求一个审计过程来发现这些错误,并通过处罚或禁止来帮助纠正这些错误。监管必须在适当的焦点水平上执行——太宽泛的话,你就有成为极权主义者的风险。强制开发人员遵循软件工程中的最佳实践——记录责任意味着我们将需要在检查这些最佳实践方面具有专业知识的监管机构。人权应该被视为道德人工智能系统的核心——这些机构应该能够提供保护,防止非法歧视、不公平做法、失去自由、增加监控、刻板印象强化、要人伤害和社会污名化等。如果治理是由再分配定义的,我们需要治理人类对技术的应用。
人工智能伦理警告需要转化为一个强大的监管框架[图片来自 Pexels 的 Fernando Arcos
在过去的几十年里,许多工作场所已经意识到他们招聘系统中的偏见。他们已经采取了系统的措施来最大限度地减少这些偏见——在内部建立员工的招聘意识,使用经过验证的评估,标准化面试流程,优先考虑多样性和包容性,改变广告渠道和外联。除了同质的工作场所比多样化的工作场所效率低这一事实之外,雇佣歧视还有严重的法律后果。在美国,1964 年民权法案第七章和相关法律保护免受年龄、性/性别、性取向、种族、宗教、残疾、怀孕(或其他病史)和基因歧视。同样,在欧盟,《就业平等框架指令》和《种族平等指令》为维持公平公正的招聘程序提供了法律支持。结构是存在的,我们不需要从头开始。
问题是——如果招聘是使用人工智能系统自动化的,偏见(以及歧视行为)会变得更难检测吗?招聘算法是由人类设计、开发、训练、测试和部署的——如果歧视被确定,我们需要追究建立、拥有和操作这个系统的人的责任,而不是把我们的手扔到空中,声称“是人工智能干的”。还有一个相反的论点——机器学习算法将会进化——现在适用于一套人工智能系统的一套去偏置工具将会随着新的算法集的进化而迅速过时。今天的算法还处于起步阶段。随着算法越来越多地模仿人类水平的思维,我们转移到这些算法上的固有偏见也将变得更加复杂,反映出当前现有的社会偏见。
通过我们的监管流程,我们可以强制要求审计流程承认并避免这些偏见。然而,我认为我们必须超越偏见。算法是有偏差的,因为人是有偏差的——偏差不是 AI 的特殊特征,而是人性固有的一部分。当我们将我们的知识转移到人工智能系统上时,我们也将我们的偏好和刻板印象转移到它身上。这些偏好和刻板印象反映在我们的社会结构中,其中一些我们认识到需要改变,因此集体同意改变它们。规范、政策和法律是谈判的产物,是这种变化的工具——它们清楚地表明什么行为被认为是不好的,以及实施这些行为的后果。这些规范、政策和法律需要适用于设计人工智能系统的人类,就像它们适用于设计药物的人类一样。即使是作为法律实体的公司也是人类意图的延伸,它们的行为可以(也确实)与其人类代表联系在一起。创建一个人工智能系统需要人类来设计这些系统。这些设计决策可以被文档化,进而可以被审计。这种设计和意图的标准是可以设定和执行的。所有人类活动都发生在某种监管框架的背景下;因此,大多数人工智能系统已经受到监管,因为绝大多数人工智能已经并将可能继续由商业驱动。
在我开始提到的八个主题中,人类价值的提升对人工智能伦理的影响最小。将这一点带入中心舞台可以打破平衡,有利于一个伦理驱动的人工智能采用时代。
2020 年数据网站和投资组合的状态(以及如何制作)
卢克·皮特斯拍摄于 Unsplash
拥有一个可视化产品、网站或仪表板来展示你在编码/机器学习项目上的艰苦努力是一件真正壮观的事情!然而,这通常非常困难,因为通常需要大量的工具和技术。不过不要紧张,我们将讨论和比较两个框架 (Dash 和 Streamlit),这使得创建令人印象深刻的投资组合(没有陡峭的学习曲线)!
你刚刚创建了一个机器学习模型。花了很长时间,但终于完成了,你想享受一下你的胜利。你应该休息一下…但是聪明的老尤知道建立一个纪念碑来展示你的工作的重要性。
你采取自然下一步,查找如何建立一个网站。他们从像 Flask 和 Django 这样的 Python 框架开始,然后继续到 JavaScript,不久你就会陷入考虑使用哪个前端框架,以及如何解析 Python 后端(模型)和 JavaScript 前端(实际网站)之间的数据。哦,天啊…这是一个又长又黑的兔子洞,很难穿过。但是突然,你听说有一个简单网站的简单解决方案。你查找这个新的 shinny 框架(Streamlit),它确实很容易😊并且使用快捷。不久你就会忘记所有的烦恼和不安全感!但是你突然意识到 Streamlit 的问题…它只适用于简单的 Jupyter 笔记本-esk 网站。对你来说,一切都在网络开发列车上。请求和 JavaScript,你来了😰。
虽然不一定非得这样,但你可以找到中间立场。一些简单到可以在几天内理解的东西,但也足够复杂…嗯,几乎任何东西都可以🤓!欢迎来到 Dash。您仍然需要了解一些 web 基础知识(HTML 和 CSS),但至少您的开发之旅有一条清晰的前进道路。即使感觉有点笨拙,它也能很好地完成工作!
整个过程可以归结为三个决定:
- 你想在页面上看到什么(文本、图表、表格、图像等)
- 如何排列和样式化页面(使用 CSS)
- 您希望用户如何与页面交互
不再有 JavaScript、HTTP 请求,甚至不再有多个独立的前端和后端框架!
开始使用 Dash
要开始,请确保您安装了 Dash。对于普通 Python 使用pip install dash
,对于 Anaconda 使用conda install -c conda-forge dash
。接下来,创建一个新的 Python 文件并导入相关的库:
import dash
import dash_core_components as dcc
import dash_html_components as html
如果你试着运行这个应用程序,你会注意到一件事——没有任何反应。这是因为我们实际上必须创建一个 Dash 应用程序对象,并告诉它启动。
app = dash.Dash(__name__, external_stylesheets=["https://codepen.io/chriddyp/pen/bWLwgP.css"])
app.title = "Allocate++"
if __name__ == "__main__":
app.run_server(debug=True)
我们可以包含一个样式表(使用external_stylesheets
的 CSS)并设置我们网站的标题(app.title
),让事情看起来更好。检查__name__ == "__main__"
只是确保网站只在直接启动时启动(而不是在另一个文件中导入)。
如果我们尝试运行这段代码,在终端中我们会得到如下消息:
Running on http://127.0.0.1:8050/
Debugger PIN: 409-929-250
* Serving Flask app "Main" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
Running on http://127.0.0.1:8050/
Debugger PIN: 791-028-264
它表示您的应用程序已经启动,可以使用 URL http://127.0.0.1:8050/
找到。虽然它目前只是一个空白页(真实的花哨的),但它确实表明一切都运行良好。
一旦你准备好继续,试着添加一个标题:
app.layout = html.H1(children="Fancy-Schmancy Website")
保存文件后,该网站应该会自动重新加载。如果它没有重新加载,或者屏幕上有弹出窗口,你可能在源代码中有一个错误。更多信息请查看实际的终端/调试器。
现在你已经熟悉了如何获得一个基本的网站,让我们继续把你的概念转换成代码。它从所谓的布局开始,布局由组件组成。Dash 提供核心(dash_core_components
)和 HTML ( dash_html_components
)组件。您总是从使用 HTML 元素开始,因为它们为文本和组合组件提供了基本的构建块,然后才是核心组件。核心组件提供更多的交互性(图形、表格、复选框…).现在很自然地会问,如何设计网页的样式。简而言之,您可以使用 CSS(层叠样式表)来实现这一点。Dash 本身提供了对核心组件的具体概述,可信的 Mozilla 有令人惊叹的 HTML 和 CSS 介绍。如何使用这些元素的几个例子是这里的。
任何 Dash 应用程序的最后一部分都是使其具有响应性。获取你点击的按钮、你输入的文本和你上传的图片…做点什么吧!这是事情通常会变得困难的地方,但这里真的还不算太糟糕。使用 Dash,您需要定义的只是一个接收和控制特定元素属性的函数。属性以“@”符号开始。
@app.callback(
[dash.dependencies.Output("output element id", "property to set value of")],
[dash.dependencies.Input("input element id", "input property")]
)
def update_output(value):
return value
我们可以通过向这些列表中添加更多的Input
和Output
对象来为多个元素做这件事!不过这里要注意一件事——更多的Input
对象意味着函数需要更多的输入,更多的Output
对象意味着要返回更多的值(听起来很明显,但是很容易忘记)。另外,请注意,您不应该在这些函数中修改全局变量(出于技术原因,这是一种反模式)。关于这些回调提供了进一步的文档。
前进和 JavaScript
这就是你开始创建一个交互式的令人印象深刻的 web 应用程序所需要知道的一切!创建一个可能仍然很困难,但是关于 Steamlit 和 Dash 的官方文档和教程是惊人的。也有使用 Dash 和 Streamlit 的示例应用程序的酷图库(这样你就可以学习其他人的例子)。
当然,JavaScript 也有用例。其实你可以用 JavaScript/React 和 D3.js 为 Dash 搭建插件。见鬼,如果你已经熟悉了网络技术,那么使用它们可能会更容易。然而,使用 JavaScript 不再是建立网站的 100%必要了(它更像是可选的)。了解 web 技术可能是有用的,但是如果你的目标不是成为一个全栈 web 开发人员,你不需要成为一个专家来制作一个华而不实的作品集🥳!
希望这对你有所帮助!Dash 帮我在一天内组装了我的第一个仪表盘。如果你做了一个很酷的网站、应用程序或作品集,一定要发表评论并告诉我。可以随意查看我的其他帖子——一些亮点是实用编码工具、 web 报废和机器学习(与实用项目)。你可以关注我的时事通讯和推特获取更新😉。
开源数据集成和 ETL 的现状
开源数据集成并不新鲜。它始于 16 年前的塔伦德。但从那以后,整个行业都变了。Snowflake、Bigquery、Redshift 等已经改变了数据的托管、管理和访问方式,同时使之变得更容易、更便宜。但是数据集成行业也在发展。
一方面,新的开源项目出现,如 2017 年的 Singer.io 。这使得更多的团队可以访问更多的数据集成连接器,尽管这仍然需要大量的手工工作。
另一方面,更多的团队(分析师、科学家、商业智能团队)可以访问数据集成。事实上,像 Fivetran 这样的公司受益于雪花的崛起,让非工程团队能够自己建立和管理他们的数据集成连接器,因此他们可以以自主的方式使用和处理数据。
但是即使有了这样的进步,大多数团队仍然在内部构建他们自己的连接器。构建与购买强烈依赖于构建。这就是为什么我们认为是时候重新审视围绕数据集成的开源技术了。
然而,这篇文章的想法来自上周关于 DBT 懈怠的一场精彩辩论。讨论围绕着两件事:
- Fivetran 的开源替代方案的状态,以及
- 在解决数据集成问题时,开放源码(OSS)方法是否比商业软件方法更为相关。
甚至 Fivetran 的首席执行官也参与了这场辩论。
作者捕获的图像
我们已经在之前的文章中综合了第二点。在本文中,我们想分析第一点:开源数据集成技术的前景。
TL;速度三角形定位法(dead reckoning)
这里有一个总结我们分析的表格。
橙色的是未来几周我们正在 Airbyte 建造的东西。
为了更好地理解这个表格,我们邀请您阅读下面我们对景观分析的细节。
数据集成开源项目
歌手
来自 Singer.io 的标志,可在 Apache License 2.0 中获得
歌手于 2017 年推出,是迄今为止最受欢迎的开源项目。它是由 StitchData 发起的,成立于 2016 年。多年来,Singer 支持 96 个点击和目标。
- **越来越过时的连接器:**Talend(stitch data 的收购方)似乎已经停止了对维护 Singer 的社区和连接器的投资。由于大多数连接器每年都会发生几次模式变化,越来越多的歌手点击和目标没有得到积极维护,正在变得过时。
- 缺乏标准化:每个连接器都是自己的开源项目。所以你永远不知道一个水龙头或目标的质量,直到你实际使用它。没有任何保证你会得到什么。
- Singer 的连接器是独立的二进制文件:你仍然需要构建一切来使它们工作。
- 没有完全承诺开源所有连接器,因为一些连接器仅由 StitchData 根据付费计划提供。
最后,很多团队会将 StitchData 用于工作良好的连接器,如果不能开箱即用,他们会构建自己的集成连接器。编辑 Singer 连接器并不比自己构建和维护连接器容易。这违背了开源的目的。
空气字节
来自 Airbyte.io 的徽标,在 MIT 中提供
Airbyte 出生于 2020 年 7 月,所以还是新的。它诞生于对 Singer 和其他开源项目的失望。它是由来自 Liveramp 的数据集成经验丰富的团队构建的,他们单独构建和维护了 1000 多个集成,是 Singer 的 8 倍。到 2020 年底,他们将支持 50 多个连接器,所以仅仅 5 个月的时间。他们的目标是到 2021 年底支持 200 多个连接器。
Airbyte 的使命是将数据集成商品化,为此我们已经做出了几项重大选择:
- Airbyte 的连接器可以通过 UI、API 和 CLI 开箱即用,具有监控、调度和编排。Airbyte 建立的前提是,无论用户的背景如何,都应该能够在 2 分钟内移动数据。数据工程师可能想要使用原始数据和他们自己的转换过程,或者使用 Airbyte 的 API 在他们的工作流程中包含数据集成。另一方面,分析师和数据科学家可能希望在他们的数据库或数据仓库中使用规范化的统一数据。 Airbyte 支持所有这些用例。
- 一个平台,一个标准项目:这将有助于巩固一个单一项目背后的开发,一些标准化和特定的数据协议,可以使所有团队和特定案例受益。
- 连接器可以用您选择的语言构建,因为 Airbyte 将它们作为 Docker 容器运行。
- 将整个平台解耦,让团队根据他们的需求和他们现有的堆栈(orchestration with Airflow、Kubernetes 或 Airbyte 、transformation with DBT 或再次 Airbyte 等)使用 Airbyte 的任何部分。).团队可以使用 Airbyte 的 orchestrator,也可以不使用,他们的规范与否;一切都变得可能。
- 对麻省理工学院开源项目的全面承诺,承诺不把一些连接器藏在付费墙后面。
由 Airbyte 及其社区支持的连接器数量正在快速增长。他们的团队预计,到 2021 年初,它将超过辛格。注意 Airbyte 的数据协议与 Singer 的兼容。因此,将 Singer tap 迁移到 Airbyte 上也很容易。
Airbyte 最近还与 Accel 进行了一轮种子融资。
管道式
来自 PipelineWise 的标志, Apache License 2.0 中的
PipelineWise 是 Transferwise 的一个开源项目,主要目标是满足他们自己的需求。他们支持 21 个连接器,并根据母公司的需求添加新的连接器。这个项目没有商业模式,公司对发展社区也没有明显的兴趣。
- 尽可能接近原始格式: PipelineWise 旨在以尽可能接近原始格式的方式将数据从源数据复制到分析数据存储中。支持一些小的加载时间转换,但是必须在分析数据存储中进行复杂的映射和连接来提取含义。
- **托管模式更改:**当源数据更改时,PipelineWise 会检测到该更改,并自动更改您的分析数据存储中的模式。
- **基于 YAML 的配置:**数据管道被定义为 YAML 文件,确保整个配置处于版本控制之下。
- **轻量级:**不需要守护进程或数据库设置。
- 与 Singer 的数据协议兼容: PipelineWise 使用 Singer.io 兼容接头和目标连接器。新的连接器可以相对容易地添加到管线中。
梅尔塔诺
Meltano 是一个致力于数据集成的管弦乐器,由 Gitlab 在 Singer 的 taps 和 targets 之上构建。自 2019 年以来,他们一直在迭代几种方法。他们现在有一个 CLI 优先的项目维护者。两年后,他们现在支持 28 个连接器。
- 建立在 Singer 的 taps 和 targets 之上: Meltano 在数据协议方面与 Singer 有相同的限制。
- CLI 优先方法: Meltano 最初是考虑到命令行界面而构建的。从这个意义上来说,他们的目标似乎是偏爱这种界面的工程师。
- 新的用户界面: Meltano 最近建立了一个新的用户界面,试图吸引更多的观众。
- 与 DBT 的转换集成: Meltano 提供了与 DBT 的一些深度集成,因此让数据工程团队以他们想要的任何方式处理转换。
- 与气流 集成进行编排:既可以单独使用 Meltano 进行编排,也可以与气流集成;梅尔塔诺双向工作。
值得注意的相关开源项目
这里有一些你可能听说过的其他开源项目,因为它们经常被数据工程团队使用。我们认为他们值得一提。
阿帕奇气流
我们看到许多团队使用气流构建他们自己的数据集成连接器,用于编排和调度。Airflow 并没有考虑到数据集成。但是很多团队用它来构建工作流。Airbyte 是唯一一个提供 API 的开源项目,因此团队可以在他们的工作流中包含数据集成工作。
DBT
DBT 是应用最广泛的数据转换开源项目。您需要精通 SQL 才能正确使用它,但是许多数据工程/集成团队使用它来规范化进入仓库或数据库的原始数据。
Airbyte 和 Meltano 都与 DBT 兼容。Airbyte 将为团队提供在原始数据或标准化数据之间进行选择的能力,以满足数据工程和数据分析师团队的需求。Meltano 不提供规范化模式,完全依赖于 DBT。
阿帕奇骆驼
Apache Camel 是一个开源的基于规则的路由和中介引擎。这意味着您可以在 IDE 中智能地完成路由规则,无论是在 Java、Scala 还是 XML 编辑器中。它使用 URIs 来实现与所有类型的传输和消息模型的集成,包括 HTTP、ActiveMQ、JMS、JBI、SCA、MINA 和 CXF,并使用可插入的数据格式选项。
流集
Streamsets 是一个数据操作平台,包括一个名为 DataCollector 的低级开源数据收集引擎。这个开源项目没有得到任何社区的支持,主要是由公司用来向他们的企业客户保证,无论发生什么情况,他们仍然可以访问代码。
如果我们错过了任何开源项目或列出的任何有价值的信息,请告诉我们。我们将努力保持这个列表的更新和精确。
原载于 2020 年 10 月 18 日https://airbyte . io。
2020 年时尚推荐系统的现状
与第 14 届 ACM 推荐系统会议同期举办的第二届时尚推荐系统研讨会摘要。
2020 年的时尚推荐系统值得期待。(图片由我提供)
了解服装可以为推荐服装打下坚实的基础。
颜色是时尚服装最可识别的特征之一,用户经常用它来寻找他们想要穿的衣服——例如,小黑裙。在“服装项目的概率颜色建模”( 论文 )中,作者提出了一种给定一个人的图像来分割和提取颜色的方法。这种方法有可能增加或替代将时尚产品上传到电子商务目录所需的数据输入过程。
Mohammed Al-Rawi 和 Joeran Beel 从服装项目的概率颜色建模中提取颜色的示例
品牌是另一个在购买时尚时引导用户决策的关键因素;由于品牌的亲和力或熟悉度,所有品牌都旨在向消费者展示某种东西。在*“奢侈时尚推荐中品牌亲和力的重要性”* ( 论文)中,全球在线时尚零售平台 Fartech 探索了使用最先进的 NLP 算法(Word2Vec、GloVe 和 FastText)从文本和目录中提取数据以产生嵌入。这些被用作推荐系统的提升方法,在在线测试中显示高达 10%的提升。
FarFetch 展示的另一篇有趣的论文是*“用于时尚推荐的用户审美识别”* ( 论文)。在这里,作者建议将用户聚类到预先定义的美学组中,这是特别有趣的,因为它通过使用用户-产品交互数据成功地将 FarFetch 编辑行与几个客户组联系起来。这项工作有可能实现更有针对性的广告,在算法的帮助下细化审美群体,甚至为平台上销售哪些服装的策略提供信息。
该图展示了属于街头和女性审美的外观——摘自刘力伟、伊沃·席尔瓦、佩德罗·诺盖拉、安娜·马加良斯和埃德尔·马丁斯的《时尚推荐的用户审美识别》。
看到 NLP 领域的进展如何被成功地用于解决尺寸建议的问题是令人耳目一新的。
在“注意力让你获得正确的尺寸和合身的时装” ( 论文)中,作者解释了如何使用基于注意力的深度学习模型预测尺寸和合身性,将尺寸推荐问题表示为语言翻译问题(在这种情况下,从文章到尺寸)。结果表明,该方法适用于多账户买家的尺码推荐,这是所有时尚电子商务零售平台的一个巨大问题。此外,该方法还能够生成对尺寸预测的解释,这在用户的决策过程中具有说服效果,并且当推荐了错误的尺寸时,可以防止负面的体验或感觉。
在*“服装生成和推荐——一项实验研究”* ( 论文,演示)中,Zalando 提供了几种个性化和非个性化算法的广泛评估,包括最近非常流行的 NLP 架构 Transformer、GPT、伯特、LSTM 的改编。对这些算法进行了离线装备推荐的几个子任务的评估,表明 GPT 模型在装备生成方面优于 BERT,个性化方法优于非个性化方法,以及变压器模型优于被认为是最先进的暹罗网络方法。
由 GPT 模特制作的两套个性化服装,出自 Marjan Celikik、Matthias Kirmse、Timo Denk、Pierre Gagliardi、Duy Pham、萨哈尔·姆巴雷克和 Ana Peleteiro Ramallo 的《服装制作和推荐——实验研究》。
在这个复杂的领域,隐含的信号不足以满足顾客的期望
今年在 RecSys,我们看到了一些非常有趣的用户研究,我很高兴看到用户的声音在研讨会上被仔细研究和放大。在*“服装推荐的套装构建挑战:家庭实践调查和服装组合评估”* ( 论文,演示)中,来自明尼苏达大学可穿戴技术实验室 (WTL)的作者研究了哪些因素会影响每天穿衣的决策(即用户如何构建套装),强调了几个特性——这项工作强调了一个非常有趣的问题。 也就是说,用户似乎永远没有足够的衣服穿,不是因为他们没有足够的衣服穿,而是因为他们不知道如何穿。
“了解专业时装设计师的服装推荐流程”(论文、演示)研究了专业人士(造型师、品牌顾问等)的观点,重点是利用不足的服装对环境造成的影响。作者解释了一个推荐系统,它可以使用服装和用户特征,模仿造型师为客户做出的服装和服装决策,从而增加客户对衣柜的使用。
冷启动问题是推荐系统领域中众所周知的问题。对于时尚界来说尤其有趣,因为每天都有新产品和用户加入。在*“面向认知负荷低的用户在线时尚尺码推荐”*中,作者探索了使用不同类型的明确顾客数据(体重、身高、最大尺寸、肚子形状等)来解决这个问题。作者不仅评估准确性,还评估用户的认知负荷以及对生产环境的适用性。
在关于时尚推荐系统的研讨会上发表的论文回答了该领域中非常重要的问题,如如何利用对时尚的理解(品牌亲和力、颜色或美学)来改善推荐?我们还展示了有趣的工作,展示了推荐系统的最新趋势,如基于注意力的模型,或 NLP 模型可以成功地应用于解决尺寸问题&适合推荐或服装,以及如何从零售商的角度利用或区别专家和用户的经验。毫无疑问,这个领域的规模和成熟度都在增长,我对即将到来的一切感到非常兴奋!
为初学者和专家讲解的统计分析 t 检验
在过去的几个月里,我可能已经运行了几十次 t 检验,但最近我意识到我没有完全理解一些概念,例如为什么不可能接受零假设,或者 t 表中的数字来自哪里。在做了一些研究后,我发现一些文章提供了这些答案,但没有多少文章将所有的信息收集在一起。
因此,我决定写这篇文章来一步一步地解释 t-test,这样任何人在运行测试或回顾概念时都可以使用它作为参考。
根据您的水平,我建议:
对于初学者:
仔细阅读整篇文章。
对于专家:
阅读第三部分(T 型测验的类型),第四部分(什么是 T 型分数?)和第 6 节(多重比较问题)。
1。什么是 t 检验?
假设你正在进行一项实验,你想比较两组人,并量化他们之间的差异。例如:
- 比较一个国家的人是否比另一个国家的人高。
- 比较一个人的大脑在看快乐电影时是否比看悲伤电影时更活跃。
这种比较可以通过进行不同的统计分析来进行分析,比如本文中描述的 t 检验。
那么,什么是 t 检验呢?这是一种推断统计类型,用于研究两组之间是否存在统计差异。在数学上,它通过假设两个分布的平均值相等来建立问题(H₀: ₁= ₂).)如果 t 检验拒绝了零假设(H₀: ₁= ₂),则表明这些组很可能是不同的。
当小组有 20-30 个样本时,应实施该测试。如果我们想要检查更多的组或更大的样本量,还有其他比 t 检验更准确的检验,如 z 检验、卡方检验或 f 检验。
重要:t 检验拒绝或未能拒绝零假设,从不接受。
2.什么是 p 值和临界值?
【p】-值或概率值是在假设零假设为真的情况下,获得至少与测试期间实际观察到的结果一样极端的测试结果的概率。此外,还有测试的力量,定义为当 nll 假设为假时拒绝该假设的概率。
统计测试的临界值是测试接受区域的边界。
p 值是允许我们拒绝零假设(H₀: ₁= ₂)的变量,或者换句话说,允许我们确定两组是不同的[ 1 ]。然而,由于 p 值只是一个值,我们需要将它与临界值进行比较(⍺):
- p_value > ⍺ (临界值):未能拒绝统计检验的零假设。
- p_value ≤ ⍺ (临界值):拒绝统计检验的零假设。
大多数统计学家选择的临界值是⍺ = 0.05。这个 0.05 意味着,如果我们运行这个实验 100 次,5%的时候我们能够拒绝零假设,95%的时候我们不能。
此外,在某些情况下,统计学家选择⍺ = 0.01。将临界值从 0.05 降低到 0.01 会降低假阳性(称为 I 型错误)的几率,但也会使拒绝零假设变得更加困难。因此,临界值为 0.01 时,结果更可信,但也更难获得。
- p_value > 0.1:无证据
- p_value 在 0.05 和 0.1 之间:弱证据
- 0.01 和 0.05 之间的 p _ 值:证据
- p_value 在 0.001 和 0.01 之间:强证据
- p_value < 0.001: Very strong evidence
重要:始终需要上报 p 值和临界值。
统计检验可以是单尾或者双尾。不同的是另一个假设,如下所示。
双尾和单尾检验
一个 - 尾检验适用于特定方向上的组间差异 2 。它比双尾检验更不常见,所以本文的其余部分集中在这一个上。
3.t 检验的类型
根据对分布的假设,有不同类型的统计检验。
在决定您必须实现的测试类型时,您必须分析的假设是:
- 配对或非配对:两组数据是否来自同一参与者。
- 参数或非参数:数据是否按某种分布分布。
统计检验类型流程图
有三种类型的 t 检验:
- 一个样本 t 检验(图中未显示)
- 不成对双样本 t 检验(如图所示)
- 配对样本 t 检验(如图所示)
如上所述,使这些 t 检验不同于其他检验的差异是我们实验的假设:
- 数据必须遵循连续或有序的尺度。
- 数据必须随机选择。
- 数据应该是正态分布。
如果您不确定要实施哪种测试,我建议您查看网页 Laerd Statistics 。然后,如果您感兴趣,Ref [ 3 ]包含要比较的组的数量高于三个时的流程图。最后,ref [ 4 ]是一个很好的导师指南,可以帮助你了解更多常用的统计测试。
4.t 分是什么?
t 分数是标准化测试统计数据的一种形式。t-score 公式使我们能够将分布转换成标准化形式,我们用它来比较分数。
韦尔奇 t 检验的 t 分数公式为:
在这个公式中,t 是 t 值,x₁和 x₂是被比较的两组的平均值,s₁和 s₂是两组的标准误差,n₁和 n₂是每组的观察次数。
一旦我们有了 t 值,我们必须查看 t 表。如果我们的 t 值的绝对值高于表中的值,我们可以拒绝零假设。
在表中查看的参数有:
- 累积概率或随机变量的值落在指定范围内的概率。
- 单尾或双尾,取决于您正在运行的统计分析。
- 自由度数量指的是T5 数据样本中逻辑独立值的最大数量。用于查找 t‐ 值的自由度参数是n₁–1 和n₂–1中的较小者。
但是,这些数字意味着什么呢?数字表示当零假设为真时观察到的 t 值的分布。
为了更详细地解释这一点,我找到了一个有趣的博客,我试图用 Python 代码复制它的解释。这是通过运行 100000 次迭代计算的 t 值直方图,两个随机正态分布各有 30 个样本,具有相同的平均值和相同的标准差。
有 30 个数据的两个正态分布的 t 检验分布
对于 30 个样本、双尾和⍺为 0.05 的两个分布, t 表中的 t 值是 2.043。上下的数据数,既然我们做的是双尾,就是≅5%.该数字与选定的临界值相匹配。
5.实验
最后,所有解释的理论都可以用 Python 中的几行代码运行。以下是三种正态分布的统计分析结果。
正态分布 X1 ( =10,σ=2)、X2 ( =10,σ=2)和 X3 ( =14,σ=2)的声明
- X1 和 X2 : p_value = 0.15
- X1 和 X3 : p_value < 1.00e-04
三个正态分布 X1、X2 和 X3 的统计结果图
6.多重比较问题
读完这篇文章后,你可能想知道当我们在同一个实验中运行几个测试时会发生什么,因为最终,我们将能够拒绝零假设,即使两组是相似的。这就是众所周知的多重比较问题,它也被很好地研究过。如果你感兴趣,我在另一篇文章中写了这个问题。
本文提出了多重比较问题,介绍了问题,描述了可能的更正和…
towardsdatascience.com](/an-overview-of-the-multiple-comparison-problem-166aa5fcaac5)
如果你喜欢这个帖子,请考虑 订阅 。你将获得我所有的内容+所有其他来自牛逼创作者的文章!
7.参考
[1]直接统计, p_value 。
【2】数字研究与教育研究所,单尾和双尾测试有什么区别?。
[3] Liz Thiele,双样本 t 检验为手段。
[4] Statstutor,统计导师常用统计测试快速指南。
【5】栈交换,为什么归一化的 z 值要引入平方根?
[6]波兹曼科学,学生的 t 检验,Youtube。
[7]威尔·科尔森,统计显著性解释,中等
改变世界的统计发现
以中心极限定理为特征
照片由帕万普里特拍摄
随着人类步入先进超智能科技时代,几个领域正以前所未有的速度蓬勃发展。一个这样的领域是数据科学,它经常使用非常基本和深刻的概念中心极限定理 (CLT)。
当我开始探索数据科学时,我想知道对 CLT 的大肆宣传是不是真的?这真的是一个令人难以置信的发现吗?随着我越来越深入这个领域,我找到了这个问题的答案,你们中的许多人肯定也遇到过这个问题。但是,要找到答案,重要的是要理解什么是 CLT 以及它传达了什么。你不需要任何深入的统计学知识来理解这篇文章。如果你知道什么是均值、方差和标准差,你就可以开始了。如果没有,我会说只要谷歌一下这些术语,你就会理解这篇文章的主旨。
在我们理解 CLT 之前,熟悉一些构成其基础的基本概念是很重要的。那么让我们从总体和样本开始。
什么是人口?
这些术语没有什么奇特之处。假设我们想知道一个成年印度人的平均工资是多少。你去询问每个印度成年人,即大约 7.7 亿人,并计算他们的平均工资。在这种情况下,我们观察了整个“群体”,没有一个人被遗漏。因此,我们可以说总体包括了构成一组数据的所有可能元素。
群体的可测量特征,如平均值或标准差,被称为参数。
我们用𝝁表示总体均值,用𝞼表示总体标准差
作者图片
样品呢?
好了,既然我们已经定义了什么是群体,我想我就不必解释为什么在实际情况下不可能观察整个群体。因此,我们了解人口的最好方法是从人口中随机抽取一群人。这个随机组被称为样本。我把注意力集中在单词**【随机】**上,因为这是至关重要的,样本中的所有 n 对象都有同等的可能性被选中。想象一下,如果我的样本由一群在谷歌、微软、脸书等公司工作的软件工程师组成。这不会是全部人口的精确代表。在这种情况下,我们将得到一个有偏差的样本。这种情况是不可取的。
样本的可测量特征,如平均值或标准偏差,称为统计量。
我们用 X̄ 表示样本均值,用 S 表示样本标准差。
太好了!
现在到了形成 CLT 基础的最重要概念的时候了:
正态分布:
在现实生活中,数据科学家正在处理海量数据。在图表上绘制数据使理解和定义测量其属性(如平均值、方差等)的技术变得容易。
要理解正态分布,重要的是我们要理解图形是如何绘制出它们的相对频率的。下面的直方图是针对美国 200 名软件工程师的随机样本绘制的。x 轴显示以千美元为单位的工资区间,y 轴显示每个区间的相对频率(或概率)。
作者照片
0 这里需要注意的是,这只适用于小数据集。当我们处理具有数百万条目的较大数据时,间隔变得越来越小。有一段时间,间隔变得相对很小,以至于可以看作是一条曲线。看看下面的动画:
作者制作的动画
您在动画结尾看到的曲线是分布的可视化,其中数据点可以采用任何连续值。这条曲线称为密度曲线,分布称为正态分布(或高斯分布或钟形曲线)。它有许多独特而有用的特性。宇宙中很多现象都遵循这个分布。要凭直觉理解为什么分布形状是这样的,可以这样看:一个班里很少有学生得分很低,很少有人得分很高。学生成绩呈正态分布。类似地,在许多其他情况下,异常高或异常低的值(称为异常值)是罕见的,而大多数数据是对称分布的钟形。
让我们来看看正态分布的一些重要性质:
- 正态分布关于其平均值()是对称的,表明靠近平均值的数据比远离平均值的数据出现得更频繁。这就是为什么在图表形式中,正态分布会呈现为钟形曲线的原因。
=均值和 𝞼 **=标准差(**照片由 Pawanpreet )
- 对于正态分布的数据集,均值、中位数模式是相等的(与位于相同的值上)
- 大约 68%的数据位于平均值的 1 个标准偏差内
- 大约 95%的数据位于平均值的 2 个标准偏差内
照片由帕万普里特拍摄
这些性质使得正态分布非常有用。在我看来,正态分布是一个神奇的工具。这种魔力主要是因为魔术师:
中心极限定理:
正如我们到目前为止所做的那样,我们应该用一个例子来理解这个主题。考虑一个大型数据集:印度人口。假设我们想计算印度人的平均身高。嗯,正如我们已经讨论了总体的概念,我们不能观察每个数据点并计算其平均值。但是,我能问你的是从人群中收集样本大小= 5 的随机样本(即,从人群中随机选择 5 个人并测量他们的身高)。那很容易,不是吗?假设现在有 250 人正在阅读这篇文章,所有的读者收集了一个样本大小= 5 的随机样本。所以,现在我们有 250 个样本,样本量= 5。
作者图片
太好了!现在,计算每个样本的平均值将得到 250 个样本平均值。现在,如果我们在频率分布上绘制这 250 个平均值,这就是我们得到的结果:
通过在线状态手册进行模拟
希望你能看到逼近的正态分布。
另一个有趣的结果是,上述样本均值分布的均值( X̄ )接近总体 mean(𝝁).这意味着不需要分析整个人口,我们就可以估计人口的平均值。
如果我们将每个随机样本的大小从 5 个增加到 25 个,看看模拟结果是什么样的:
通过在线状态手册进行模拟
是的,更正态的分布(即数据点与平均值的偏差更小)!!!随着个体样本量的增加,这种分布变得越来越正常。(注意,我们没有增加随机样本的数量,即文章的读者数量是相同的,但现在每个读者收集的是大小为 25 的样本,而不是 5 个)。每次我们对任何数据集按照上述步骤,样本均值的分布总是正态分布!
多么美妙的结果!
上图所示样本的均值分布称为样本均值的抽样分布( X̄ )。
在结束之前,我应该向您展示当图接近完美的正态分布时的最终模拟:
当样本数量增加到 10248 时,观察左侧的“Reps”
从上述结果可以清楚地看出,当样本量= 25 时,样本均值的抽样分布比= 5 时更正态。
CLT 的美妙之处在于,它甚至适用于非正态分布的人口。人口可能看起来像这样:
作者图片
或者实际上,任何你能想象的东西。关键是,我们不需要知道人口发生了什么,但我们仍然有能力研究它。
最后,是时候用正式语言来精心制作中心极限定理了。
根据 Investopedia 的说法,中心极限定理(CLT)指出,随着样本大小变大,样本均值的分布接近正态分布(也称为“钟形曲线”),假设所有样本的大小都相同,无论人口分布的形状如何。
当我第一次看到这个结果时,我有一些复杂的感觉,因为这是一个美丽的结果,但是,这是否每次都有效呢?所以我在下面给了一个我用过的模拟的链接。你应该去模拟不同的人口分布,不同的样本大小,我相信你会喜欢它!
前进到采样分布的属性:
- 分布的总体形状是对称的,近似正态分布。
- 总体模式中没有异常值或其他重要偏差。
- 分布的中心非常接近真实的人口平均数:
人口平均数𝝁 =样本平均数( X̄ )
- 统计数据的抽样分布的标准偏差被称为该数量的标准误差。对于样本随机的情况,标准误差为:
SE = S/ √n
中心极限定理的应用;
最后,是时候看看这个发现是如何以及为什么让我们的生活变得如此轻松了:
- 如果总体分布未知或不正态(这在大多数情况下是真实的),根据 CLT,我们认为样本分布是正态的。这种方法假设抽样分布是正态分布的,这有助于通过构建置信区间(我们可以有多确信地假设某个结果是真实的)等方法来分析数据。
- CLT 最常见的应用之一是在选举后民意调查中。计算在新闻中被视为置信区间的支持候选人的人的百分比。
- 为了更准确地估计总体均值,我们可以增加从总体中抽取的样本,这将最终降低样本均值偏差。
列出每一个用例就像数天上的星星一样。所以我会停止我的案子!
恭喜你坚持到最后!你做得很好。不断学习,为媒体社区和数据科学领域做出贡献。干杯!!!
机器学习的统计基础
超越函数拟合的视角
开发机器学习算法比以往任何时候都容易。有几个高级库,如 TensorFlow、PyTorch 或 scikit——学习构建,由于许多有才华的开发人员的惊人努力,这些真的很容易使用,只需要对底层算法略知一二。然而,这是以深刻理解为代价的。没有适当的理论基础,人们很快就会被复杂的技术细节弄得不知所措。
我的目的是展示当我们有适当的视角时,机器学习中看似晦涩和特别的方法如何能够用真正简单和自然的想法来解释。我们的数学工具是概率论和统计学,它们是预测模型的基础。使用概率理论不仅仅是一个学术练习,它实际上可以提供对机器学习如何工作的非常深刻的见解,给你提供改善艺术状态的工具。
在我们开始机器学习的理论基础之旅之前,让我们看一个玩具问题!
拟合模型
假设我们有两个数值,比如说 x 和 y ,它们是相互关联的。例如, x 是一处房产的面积, y 是该房产在特定城市的市场价格。我们的目标是从 x 预测 y 。在数学术语中,我们可以说我们正在寻找一个函数 f(x) 使得
尽可能地接近事实。最简单的假设是函数是线性的,即对于某些 a 和 b 常数, f(x) = ax + b 。令人惊讶的是,这个模型非常适合许多现实生活中的问题,此外,它还是更复杂的模型(如神经网络)的基本构件。
我们的示例数据集如下所示。
假设我们的数据集由数据点和观察值组成
因为数据是有噪声的,所以不可能用线性模型来拟合我们的数据
保持。相反,我们测量特定模型与数据的拟合程度,并根据测量结果尝试找到最佳拟合。
通常,这是通过计算每个点的预测误差,然后平均逐点误差来实现的。误差越低,我们的模型越好。衡量这一点的最简单的方法是取预测和现实之间的差值的平方。这称为均方误差,定义如下
最佳拟合是均方误差最小的拟合,或者用数学术语来说,
对于我们的具体数据集,如下所示。
拟合回归模型
对于我们的目的来说,如何最小化这一点并不特别重要。对我们来说,重要的是如何解释这个模型,以及它传达了什么样的信息。光看一眼,就能看出少了很多东西。当然,数据明显遵循线性趋势,但这能用我们的模型描述吗?一个函数是确定性的:你代入 x ,你得到预测 f(x) 。然而,数据似乎显示了一些噪声,这些噪声显然没有被我们的线性模型恰当地捕捉到。
我们还可以去哪里看看?一个显而易见的答案是寻找一个更复杂的函数,比如一个更高次的多项式。用数学术语来说,我们在寻找一个由下式定义的函数
这有望更精确地描述数据。不幸的是,事实并非如此。
用 30 次多项式拟合我们的训练数据
当我们试图强行使用它并过度增加我们模型的表达能力时,我们会看到在某种意义上,事情变得更糟:我们所关心的问题没有得到解决,并且引入了其他问题,比如模型在我们领域之外的疯狂行为。我们必须从其他方面寻找解决办法。我们不应该寻找一个单一的值作为预测,我们应该致力于一个模型来解释某些结果的概率!这样,我们可以做出更明智的决策,例如计算风险。
概率论的语言
假设我有一枚硬币,在抛硬币时,有 1/2 的概率正面朝上,有 1/2 的概率反面朝上。如果我掷硬币 100 次,我会得到多少个头?快速回答 50 可能很有诱惑力,但现实并非如此简单。看,你可以得到从 0 到 100 的任何数量的头像,但是这些头像的概率并不相等。在一个实验中,你可能得到 34,在下一个实验中,52,等等。正面为 1/2 的概率意味着,如果你继续无限地投掷硬币,正面与所有投掷的比例将越来越接近 1/2。
让我们坚持抛硬币的例子 n 次!假设 X 表示人头数。X 是一个随机变量,我们不知道它的确切值,只知道它取给定值的概率。 X 为 k 的概率用 P(X = k) 表示,它总是一个介于 0 和 1 之间的数。此外,因为我们知道我们可以得到 0、1、2 等等,直到第 n 个头,这些概率总和为 1,也就是说,
每个实验都可以用一个n-长序列的 H -s 和 T -s 来描述。为了计算给定的 k 的确切概率,我们需要计算在 n 次投掷中有多少种方法可以让 k 正面朝上。这在数学上等同于从一组 n 元素中选择一个 k 元素的子集,这可以在
方法。而且,每个配置都有 (1/2)^n 的概率。(比如考虑 n = 3。配置 HTH 具有 1/8 的概率,因为每个特定的投掷本身具有 1/2 的概率,并且投掷是独立的。)所以把这些放在一起,我们有
这些数字统称为实验的概率分布。(这是投掷 n 枚硬币并观察其中人头的数量。)
总而言之,概率分布包含了实验结果的所有信息。我们在上一节中的模型只给出了一个数字,但是,我们应该寻找一个概率分布,而不是做出一个完全知情的决定。
一般伯努利分布和二项式分布
我们上面两个例子可以推广。首先,假设我们抛一个不公平的硬币,即正面和反面概率不相等的硬币。比如说,人头的概率是 p ,和以前一样用 X 表示人头的数量。(可以是零也可以是一。)
称为带参数 p 的伯努利分布,简称伯努利§ 。按照这种思路,如果我们把这个不公平的硬币抛了 n 次,我们就有了
这就是所谓的参数为 n 和 p 的二项分布,简称为 b(n,p) 。注意,伯努利分布就是 n = 1 的二项式分布。
连续概率分布
在前面掷硬币的例子中,对于所有可行的 k ,概率分布完全由数字 P(X = k) 来描述。这个特殊的随机变量只能取整数作为它的值,它的值有无数个。这样的随机变量叫做离散的。但是前一个例子呢,我们估计了房地产价格?一般来说,随机变量也可以假设所有的实数作为它的值。在这种情况下,它们被称为连续。比如说 X 可以是 0 到 1 之间任意一个概率相等的随机数。它的概率分布是怎样的?直觉上,我们可以看到
对于*【0,1】*中任意固定的 x 。那么,我们该如何描述这种分布呢?我们用所谓的概率密度函数(简称 PDF),描述的是 X 落入某个区间的概率,比如说 a ≤ x ≤ b 。概率本身可以通过测量 a 和 b 之间的 PDF 曲线下的面积来计算。在从 0 到 1 之间选择一个随机数的情况下,我们有
对于密度函数。注意,密度函数图下的总面积始终是 1 ,因为它表达了所有结果的概率。
正态分布
一个非常重要的连续分布就是所谓的正态分布。(或者另一个名字叫高斯。)你肯定在某个时候遇到过这种情况,即使你可能不知道这是一个正态分布。我们说 X 正态分布,均值μ,方差σ方差,或者说 N(μ,σ ) 简而言之,如果它的密度函数为
这在现实生活中经常出现,比如人的身高往往呈现这种分布。我们将在以后的旅程中多次遇到这种情况。平均值描述了钟形曲线的中心。
在符号方面, N(μ,σ ) 的概率密度函数通常表示为 N(x | μ,σ ) 。我们稍后会用到它。
条件概率
现在让我们考虑一个不同的例子。我们不再扔硬币,而是用一个六面骰子来扔。如果我们用 X 表示投掷的结果,有理由假设
假设你想打个赌。你的朋友掷骰子,如果结果小于或等于 3,你就赢了。否则,你会损失相同的金额。很容易看出,默认情况下,你的中奖概率是 1/2。然而,你的朋友在掷骰子后告诉你结果是偶数。你现在赢的机会有多大?直觉上感觉你现在胜算更低了,因为只有 2 才能赢,4 或者 6 就输了。因此,实验的附加信息改变了潜在的概率分布。
这个概念在数学上可以形式化为条件概率。假设你有两个事件, A 和 B 。在我们的具体例子中, A 是投掷的结果小于或等于 3,而 B 是投掷的结果是偶数。已知 B 已经发生的 A 的概率称为已知 B 的 A 的条件概率。用 P(A | B) 表示,可计算如下
在我们这里, P(A 和 B) = 1/6 ,而 P(B) = 1/2 ,所以我们的胜算是 P(A | B) = 1/3 。
机器学习的统计基础
为了了解条件概率如何符合我们的机器学习观点,我们需要进行另一次概念上的跳跃。让我们再来看一遍掷硬币的例子!然而这一次,硬币是不公平的,所以正面的概率不是 1/2。让我们假设
对于*【0,1】*中的某些 p 。问题是,我们不知道它的确切值,我们只能从数据中猜测。换句话说,我们要估计它的概率分布。 p 是我们抛硬币实验中的一个参数。(为了清楚起见,我们这里有两个分布:一个描述了掷硬币的结果,而第二个描述了我们对给定硬币正面概率的信念。)
假设我们手中有一枚特定的硬币,我们把它抛向空中十次,得到结果
也就是三尾七头。用概率的语言,让 E 来描述“十个中有七个人头”的事件。所以,我们真正想要的是
这被称为后验,因为它描述了我们在观察一些数据后对硬币的看法。注意,这是一个连续的概率分布,因为 p 可以取 0 到 1 之间的任何值。我们该如何计算呢?条件概率的一个基本性质在这里派上了用场。如果 A 和 B 是一般事件,那么
换句话说,以 B 为条件的 A 的概率,可以用以 A 为条件的 B 的概率来表示。这被称为贝叶斯定理,它同样适用于概率密度函数。这对我们有什么帮助?现在我们有了
这对我们来说太好了!这里有三个组成部分。
i) P(E | p) ,称为可能性。这很容易计算,我们在上一节中已经计算过了。在我们当前有七个头的例子中,我们有
这意味着它们彼此成比例,也就是说,在乘法常数之前相等。这个常数对我们来说并不重要,原因将在后面解释。
ii) P§ ,称之为先于,是因为表达了我们在观测到任何数据之前对硬币的认识。合理的假设是每个参数都是同等可能的,所以
我们已经很熟悉了。
iii) P(E) ,不需要计算,因为函数 P(p | E) 下的面积始终为 1。(在大多数情况下计算 P(E) ,这甚至是计算上难以处理的。)因为这个确切的原因,我们并不真正关心似然函数中的乘法常数。
从这些,我们可以很容易地对 p 的概率分布给出一个很好的估计,它描述了一次抛硬币导致正面的概率。
抛硬币十次后,p 的后验分布,得到七个正面和三个反面。
最大似然估计
即使我们有一个概率分布,提供一个具体的数字作为我们的估计通常是有用的。在这种情况下,我们希望对硬币正面朝上的概率进行参数估计。虽然贝叶斯路线很容易抛硬币,但它不可能进行分析计算。有人可能会问:根据我们观察到的结果,哪个参数最有可能?如果你仔细想想,这是由似然函数描述的
其中 E 描述了事件hhthththht。我们通过将我们一起观察到的事件的概率相乘来计算。
总的来说,如果我们有观察
有结果
为便于记记,似然函数以向量形式书写,定义如下
它是变量θ的函数。θ表示概率分布的所有参数,因此它甚至可以是标量或向量变量。在我们重复掷硬币的例子中, Y -s 表示第 i 次掷硬币实验,而 y 表示结果。这里, y 是 1 代表正面,0 代表反面。还要记住,一般来说, Y 可以是离散的,但也可以是连续的。
直觉上(这是我们经常使用的一个短语:),似然函数假设其最大值的特定θ值将是我们参数估计的合理选择。这种方法被称为最大似然估计或简称 MLE。用数学术语来说,
在上面七头三尾的具体例子中,这是 0.7。虽然最大似然法不如完全贝叶斯法可取,但它通常是合理的。注意,当先验分布均匀时,MLE 等价于通过最大化后验分布来估计参数
后者被称为最大后验估计或简称 MAP。
有了所有这些数学工具,我们就可以重温最初的回归例子了!
回归再探
概括地说,我们有观察
我们想从 x -es 预测 y -s。之前,我们在寻找一个函数 f(x) = ax + b 这样
相当接近真实情况。
这一次,我们从概率的角度来看!现在我们有了数据点
来自发行版
对于每个数据点,我们都有基本事实观察
来自发行版
假设所有的 Y -s 都可以建模为正态分布 N(μ(x),σ(x) ) 是合理的。为了简单起见,我们可以假设方差是常数,并且 μ(x) = ax + b 是线性函数。也就是说,我们正在寻找一个合适的模型
给定我们所有的观察值,似然函数可以写成
我们想最大化这个功能。这似乎很难,但有一个标准的数学技巧:最大化一个函数等于最大化它的对数。(只要对数定义得当,比如这里。)所以,我们有
我们看到了隧道尽头的光明。第一项可以省略(因为它是常数),而最小化一个函数等于最大化它的负值。因此,
这不是偶然的,如果它看起来很熟悉:右手边是均方差!这表示拟合模型的最大似然估计
是我们之前做的线性回归的一般情况。然而,有一个主要的区别:概率模型解释的不仅仅是一个简单的线性函数。这只是冰山一角,有许多方法可以推广这个简单的概率模型,以获得更普遍的适合我们的数据。一个显而易见的方法是将σ作为一个参数,放弃常数假设。
分类
在我们结束之前,我们将详细了解分类,机器学习中的另一个主要问题类别。这里,我们有一个稍微不同的问题。我们的训练数据再次
这一次, y -s 是标签而不是实数。因此, Y 是一个离散的概率分布。我们以前的线性回归模型无法恰当地捕捉这个问题。此外,虽然当标签用整数编码时可以使用均方误差,但它实际上没有意义。
为了便于说明,让我们考虑一个简单的一维二进制分类问题,它有两个类,用 0 和 1 编码。
如果你熟悉这类问题,你可能知道通常的解决方法是拟合一个函数的形式
在哪里
就是众所周知的 sigmoid 函数。这个模型叫做逻辑回归。试探性地,线性函数被拟合为假设属于第一类的 x -es 为正值,相反类为负值。然后,sigmoid 将这些实数转换成概率。 ax + b 越高,其 sigmoid 值越接近 1,同样, ax + b 越低,其 sigmoid 值越接近 0。因此, f(x) 有效地模拟了 x 属于类别 1 的概率。
为了适合该模型,所谓的交叉熵损失被最小化,其定义为
这个损失函数是什么意思?在最开始的回归示例中,均方差直观地很清楚。交叉熵就不是这样了。你有没有想过为什么交叉熵损失是这样定义的?只看这个公式,几乎不可能算出来。
如果我们从前面几节中获得的角度来看分类问题,这个二元分类问题可以通过对每个 x 拟合一个伯努利分布来解决,也就是说,我们用
对于似然函数,我们有
像前面一样取对数后,我们得到
也就是交叉熵损失的负值!突然间,这个充满对数的神秘公式有了清晰的解释。最小化交叉熵损失就是用伯努利分布对我们的数据建模,并进行最大似然估计。
摘要
当使用机器学习算法来解决分类和回归等问题时,我们通常会用口语来表达问题,如“这只股票明天的价格是多少?”、“这是负面还是正面的评论?”诸如此类。在这里,我的目的是展示这些算法实际上做得更多:它们提供了对潜在问题的深入统计理解。他们能够提供比简单预测更多的信息,而不是简单地估计明天的股票价格。我们已经看到,机器学习的基本对象,如线性回归、使用逻辑回归的二元分类、均方误差和交叉熵损失,都是从统计设置中非常自然的想法中产生的。
这只是冰山一角。虽然我们只看到了最基本的模型,但即使是最先进的深度神经网络也是建立在这些基础上的。如果你已经理解了这些基本原理,你现在离掌握机器学习又近了一大步。
如果你喜欢把机器学习概念拆开,理解是什么让它们运转,我们有很多共同点。看看我的博客,我经常在那里发表这样的技术文章!
Python 中的统计希腊字母
熟悉统计学中每个希腊字母代表什么。
希腊字母是现代数学中极其重要的一部分,统计学当然也不例外。作为一个统计人员,破译统计公式的能力是相当重要的,不能做到这一点是相当的阻碍。问题是,刚开始接触统计学的学生可能会看到这些符号并认为
“在我看来像是希腊语!”
虽然它们在技术上是正确的,因为这些公式通常包含非常字面意义上的希腊语,但对于初学者来说,学会这些符号并熟悉它们的含义仍然很重要。即使是那些在不涉及统计分析的类似定量领域有经验的人也可能会遇到麻烦,因为字母可能意味着贸易与贸易之间完全不同的东西。此外,将这些符号放入 Python 可能很难推断。所以没有任何进一步的拖延,这里是统计希腊字母!
总体与样本
为了理解称为“总体参数”的一系列希腊符号,我们需要熟悉总体和样本之间的区别。顾名思义,总体是一组完整的观察值,而样本是这些观察值的一小部分。在 Python 中,我们可以使用 random.sample()获得一个样本。
import random as rand
our_data = [5, 10, 15, 20]length_of_sample = 2 # <- Also known as n
samp = random.sample(our_data, length_of_sample)
尽管我们可以使用 random.sample()从我们的总体中获得一个随机样本,但样本并不一定是随机的。这很重要,因为它是如何进行 T 检验的基础。
既然我们知道了总体和样本之间的区别,我们就可以讨论总体参数了。总体参数是总体或样本的简单特征,能洞察数据。
观察次数
正如我在上面的示例中所评论的,样本的长度可以用字母 n 来表示。另一方面,总体的长度将是大写的 n。在 Python 中,我们可以使用 len()方法来计算列表的长度。
import random as rand
our_data = [5, 10, 15, 20]n = 2 # <- Also known as n
samp = random.sample(our_data, length_of_sample)
n = len(samp)
N = len(our_data)
平均
至于平均值,人口的平均值用希腊字母μ或“mu”表示。样本的平均值用 x̅或“x-bar”表示我们可以在 Python 中使用 NumPy 来计算这些值,或者用列表的总和除以列表中的观察值。
import numpy as np
x̅ = np.mean(samp)
∑B = sum(our_data)
μ = ∑B / N
中位数
数据的中位数是一个大杂烩。它可以用 x̃或“x 代字号”来表示也可以用大写的 M 或 Med 来表示。中位数的符号通常不是特定于人口或样本的。在 Python 中,我们将再次使用 Numpy 来计算中位数:
x̃ = np.median(sample)
标准偏差
总体的标准差可以用σ或“sigma”来表示请注意,这是小写的 sigma,而不是大写的 sigma——这很重要,因为它们表示不同的意思。
相关系数
样本的相关系数用小写的 r 表示。另一方面,总体的相关系数用ρ或“rho”表示。有许多不同的方法来计算相关系数,但其中最流行的是皮尔逊相关。这次我们将使用 Scipy.stats 来查找皮尔逊相关系数:
import scipy.stats as scs
r = scs.pearsonr(our_data)
ρ = scs.pearsonr(sample)
如果您想了解如何使用皮尔逊相关从头开始计算相关系数,我写了一篇文章,在这篇文章中,我用 r 精确地计算了相关系数。除此之外,我还计算了 r,并用它来计算线性回归模型。同样幸运的是,R 和 R 的组合产生了一个非常有趣的名字:
相关系数®、回归的相关系数®和编程语言 R 都是…
towardsdatascience.com](/finding-r-in-r-455fb7de5d80)
比例
样本的比例由 p̂或“P-Hat”表示人口用一个简单的 p 表示。确保不要像在 rho 中那样把 p 和ρ混淆!要在 Python 中计算这一点,实际上不需要导入任何东西,因为它是通过简单地将总体长度除以样本长度来计算的,反之亦然:
p̂ *= N / n
p = n / N*
通常,每当提到比例时,我们都在谈论样本比例。
信件陈述
α(阿尔法)
α用于表示假设检验的显著性。换句话说,它代表第一类错误的可能性。因此,你可以通过做以下事情来计算置信度
1 - α = confidence
Alpha 是一个数字,它可以根据您想要获得的置信度而变化。α值通常可以假定为 0.05。这是为什么呢?因为通常在统计学中,我们追求 0.95 的置信度,或者 95%的置信度。1 减 0.05 等于 0.95。这个数字通常不计算,而是作为一个参数给出。
β(β)
β用于表示假设检验中第二类错误的显著性。像 alpha 一样,beta 通常作为一个参数提供,并且是一个可以用来优化他们的统计推断的基础值。一减β就是我们所说的测试的功效。如果你想了解更多关于功率的知识,我写了一篇文章,从头开始创建了一个功率日志算法:
将权力投入到您的物流决策中。
towardsdatascience.com](/power-analysis-the-coolest-thing-that-youve-never-heard-of-476d35c18161)
ν (nu)
Nu 在统计学中用来表示自由度。我们可以通过首先获得 X 和 Y 的标准偏差,然后将它们代入以下公式来计算 Python 中的自由度:
def degreesOfFreedom(X, Y):
s1 = (stdev(X)**2)
s2 = (stdev(Y)**2)
df = (s1 / len(X) + s2 / len(Y))**2 / ((s1 / len(X))**2 / (len(X) - 1) + (s2 / len(Y))**2 / len(Y) - 1)
return(df)
σx̅(西格玛-x-棒)
适马 X-棒线用于表示平均值的标准误差。我们可以在 Python 中通过再次使用 Scipy.stats 来计算:
scs.sem(samp)
σp̂
既然适马-X-Bar 是均值的标准误差,那么适马-P-Hat 就是比例的标准误差。我们可以在 Python 中通过简单地对标准误差公式进行一处修改来计算:
# Sigma X Bar
SEx = s / sqrt(n)SEp = sqrt(p(1 - p) / n)
在上面的例子中,s 当然代表样本标准差的估计值,类似于 sigma。
∑(适马(大写))
大写∑用于界定给定组的总和。这是用 Python 的标准 sum()函数简单计算出来的。
∑x = sum(x)
是的,真的就这么简单。
χ(卡方检验)
给定数组 x 的卡方分布。卡方分布是多项式实验和列联表的分布。我们可以再次使用来自 Scipy.stats 的统计数据:
χ² = scs.chi2(our_data)
结论
这些都是统计学中常用的希腊字母。尽管有一些明显的例外,比如频率(fi)和更重要的θ。我把它们排除在外是因为虽然它们很重要,但它们也很少被使用,而且相对先进,显然这篇文章是针对相对较新的统计学家的。
您还应该注意的是,本文中稍微混合了一些罗马符号。我认为没有一个很好的理由把他们排除在外,以防你在某个地方碰到他们。特别是因为其中一些符号与希腊符号形成了直接的对比,我觉得把它们留在里面很重要。总的来说,我记得有一天这是令人望而生畏的。事实是,这些公式比它们看起来要简单得多,很多只是理解每个变量代表什么。感谢你的阅读,希望你学到了有价值的东西!
二十一点的统计
通过 R 数据分析揭示 21 点赔率和最佳策略
雅罗斯瓦夫·库奥查拉在 Unsplash 拍摄的照片
21 点被认为是赌场中筹码最少的游戏,赌徒们在 21 点中获胜的机会比在任何其他游戏中都要多。但是几率有多大呢?我们如何找到适用的最佳策略?
让我们通过简单的统计分析来了解一下吧!
设置场景
本文开发了一个用 R 构建的 21 点模拟工具,用于推导最优策略和相关概率。
所有代码都可以在 Github 上获得。
21 点游戏的模拟。通过在…上创建帐户,为 ArnaudBu/blackjack_simulation 开发做出贡献
github.com](https://github.com/arnaudbu/blackjack_simulation)
用于模拟的规则是:
- 每个玩家,包括庄家,从两张牌开始。庄家的一张牌是隐藏的,将在这一轮结束,轮到庄家出牌时显示出来。
- 目标是要求牌手打出不超过 21 张的牌,每张牌占其名义价值(国王、王后和杰克值 10)。ace 值为 1 或 11,无论哪个值都能在不破坏的情况下得到最高分。如果一手牌有一张值为 11 的 a,称为软,相反的称为硬手。
- 如果玩家超过 21 ( 半身像),无论庄家的分数如何,庄家都赢。如果庄家破产而玩家没有破产,玩家获胜。如果得分低于 21,该轮比赛将产生一个平局。在所有其他情况下,得分高者获胜。
- 庄家以 1 比 1 支付赌注,除了自然 21 点(a+牌值为 10)以 3 比 2 支付。
- 在每一步棋中,玩家可以击(要牌)、站(保持在当前位置),或加倍(赌注加倍,但只会多抽一张牌)。
- 当玩家有两张相同的牌时,他可以拆分,这意味着他可以将他的一对牌转换成两个独立的手牌,独立出牌。
脚本[run.R](https://github.com/ArnaudBu/blackjack_simulation/blob/master/run.R)
模拟 21 点游戏(基于 10,000,000 步,8 副牌,3 个人玩)以生成一个数据库,该数据库将用数据表包进行分析。
生成的数据集遵循以下格式,每条线代表一轮( game_id) 中的一步棋,如果玩家击中、站立或双打,则有预期的收入。 hard_if_hit 值表示移动后手牌是否硬,并且是最佳策略定义所必需的。
表 1—21 点分析数据集
执行的所有分析均可在[analysis.R](https://github.com/ArnaudBu/blackjack_simulation/blob/master/analysis.R)
脚本中获得。
基本策略
人们可以想到的最基本的策略是,一旦分数达到某个阈值,就站起来。
就代码而言,我们只需要过滤数据集,以通过与超过阈值的第一个分数相对应的 game_id 检索一行,或者如果第一个条件不满足,则通过第一个分数 _if_hit 检索一行。
将该策略应用于从 2 到 21 的每个阈值的数据集,我们在聚合后得到以下结果。
图 1 —命中阈值策略回报
上图显示了每一轮的预期收益(占赌博金额的百分比)和结果分布。
最佳策略使用的阈值为 15 ,每轮的预期损失为赌博金额的 8.57 % 。对于大多数玩家来说,这些赔率显然会导致游戏提前结束。
幸运的是,通过在决策过程中考虑庄家的分数和玩家手中的软 a,可以设计出能够提高这些赔率的策略。
最优策略
为了找到最佳策略,我们首先需要一个优化指标。我们将使用移动后的预期收益。
计算给定手牌的这一指标(得分&如果手牌较软),需要知道:
- 击球时的下一手牌,以及转移到每一手牌的概率;
- 根据我们旨在定义的策略给出的移动,这些手牌的相关预期收益。
因此,我们有一个递归问题要处理,因为我们首先需要估计这一轮可能的后续移动,庄家的分数是常数。这需要在分数上实现一个向后**的循环。**尽管如此,手或硬或软的可能性意味着在安排步骤时也要考虑这一点。
下图描述了手与手之间的过渡。
图 2 —撞击时的可能性
如果玩家有一手高于 10 分的硬手,那么在击球时只能得到一手得分更高的硬手。软手可以转变成得分更高的软手或者得分高于 10 的硬手。最后,低于 9 分的硬手可以给软手,也可以给更高分的硬手。这意味着我们需要用三个关键步骤来排序我们的反向循环。
- 首先是得分高于 10 的硬牌。
- 然后是柔软的手。
- 最后是得分低于 9 的硬手。
这将确保在每一步中,所有未来的可能性都得到考虑。
对于每一个类别,我们对可能的玩家分数进行反向循环,并根据所有未来可能性的加权收入计算预期收入(这是在前面的步骤中估计的)。
代码可在[analysis.R](https://github.com/ArnaudBu/blackjack_simulation/blob/master/analysis.R)
中找到。
现在让我们看看硬手和软手的计算策略。
图 3 —硬牌的决策图
正如所料,在 9、10 或 11 的分数上加倍是很有趣的,因为抽到值为 10 的牌的概率很高(13 次中有 4 次)。对于 7 分以上的庄家来说,击中的阈值似乎增加了,因为庄家获得 17 分和站立的概率更高,这使得必须击中才能击败他。
图 4——软手决策图
软 11 只有在分割后才是可能的,并且对应于单个 ace。由于有可能在被击中后不崩溃,我们可以看到,软手的策略比硬手的策略更具侵略性。
然后,在所有其他条件相同的情况下,我们可以通过比较两张相同卡片的预期收益和一半的预期收益来估计拆分是最优的情况。如果第一个值不如第二个值的两倍(我们在拆分后下注两只手),那么拆分就是预期收益较高的棋步,否则可以参考前面的图表。
因此,最佳拆分情况是:
图 5 —分裂决策
分割 a 总是很有趣,因为拿到 10 的概率更高。相反,分裂 5s 从来不被推荐,也是因为得到 10 或者 a 的概率。
一手牌是两个 9,而庄家的分数是 7,这种情况很有趣,因为站着的决定似乎是孤立的。这也是因为庄家下一步不可能超过 18,这使他要么处于他必须站着的位置(最好的情况下也要听牌),要么处于他需要以高风险出击的情况。
该策略及相关收益可在以下 gist 处获得:https://gist . github . com/ArnaudBu/797094581 de 3 f 6703 a6 c 12 b 994 da 18c 6。
注意:在网上找到的战略图表在一些决策上可能是不同的。查看上面策略文件中的预期收益,我们可以看到,在这些情况下,两个不同决策的计算收益非常接近,这表明可以通过更多模拟来解决收敛问题。
在破产之前,我可以享受多长时间的 21 点游戏?
根据模拟(使用[test_strategy.R](https://github.com/ArnaudBu/blackjack_simulation/blob/master/test_strategy.R)
脚本)测试这个策略,我们可以估计一定轮次后的平均累积收益,以及一些分位数区间。
图 6 —稳定下注 1,000 回合的盈利方案
因此,我们可以估计,在 1000 轮后,考虑到 1 美元的赌注,平均损失为 8.34 美元。这意味着针对这种策略的估计赌场优势为 0.834% ,与轮盘赌的 2.7%相比相对较低。
考虑到一轮 21 点平均持续 1 分钟,玩家将在 3 小时后平均输掉 1.15 美元,每次下注 1 美元。损失的累计 5%分位数是 26.5 美元。因此,如果你带着 26 倍于你下注金额的钱来到赌场,在三个小时的游戏结束时,你破产的可能性不到 5%。
但是算牌的可能性呢?由于赌场优势如此之小,而且 10 在这场游戏中非常重要,因此有可能用这种技巧将赌场的优势转移到玩家身上。电影说是的,但现实是否取决于小说?这肯定会是未来帖子的一个有趣话题。
(地理)数据科学竞赛的现状
意见
数据科学和机器学习竞赛在许多方面都很棒,但有时感觉它们可以瞄准更广泛的问题
Kaggle 已经成为机器学习和数据科学竞赛的主要中心,并扩展到托管数据集、GPU 支持的笔记本电脑和大量像论坛一样的讨论。顺便说一下,这不仅仅是几个人的事,几个月前该网站超过了500 万注册用户(实际上只有一小部分人每天或每周上线,但像任何这样的网站一样)。在地理数据科学领域工作,有些比赛的范围有时会感觉有点太窄。SpaceNet 等倡议为围绕地理数据开展竞争创造了独特的机会;这篇文章将更多的是关于我如何希望这些倡议继续前进。这些领域的比赛仍然很新,而且(大部分是在花了很多时间之后)我真的希望它们变得更好。
有很多关于“卡格尔并不代表现实生活中的问题”的讨论;我同意其中的许多观点:数据集都为你整理好了,准备好了,对生产的关注很少,一些比赛变成了对 10^-4%准确性改进的追逐(我已经花了周末的时间为我在 F1 的分数提高了 0.0003 而高兴)。然而,也有一些很好的反驳,为什么它对现实生活中的问题有很大帮助。我最喜欢的一个观点是 CPMP 最近在 Twitter 上的帖子(他也是 Kaggle 内置排名系统中排名最高的人之一,之前在 IBM 工作,现在在 Nvidia 工作)。但是我的(小)挫折甚至不是关于所有这些是否有用。我这个书呆子希望竞赛能提供一些更有趣、更广泛的开放性问题(有时)。
不要误解我,如果没有 Kaggle,围绕它的社区,以及更广泛的所有平台、讨论、博客等等,我就不会有今天。(我真的很欣赏“社区教学”这个术语,这是我第一次在 Sanyam Bhutani 的博客上看到的)这篇文章更多的是关于让数据科学竞赛变得更加有趣的愿望,而不是咆哮我可能对它们的厌恶。还有,我真的没那么擅长。我在 SpaceNet 7 上尝试了我的第一次 SpaceNet 比赛,甚至无法匹配基线解决方案,主要是因为时间不够,但仍然如此。
地理数据因其复杂性而令人感兴趣
我目前在地理数据这个非常有趣的领域工作(完全是偏见)。我开始处理从距离地面 400 公里处以大约 7.8 公里/秒的速度燃烧的物体上拍摄的图像,我们通常称之为卫星。这带来了很多真正有趣的挑战,最大的挑战是每张照片都有特定的时间和地点。时间序列在地球观测中很常见,将不同类型的数据混合在一起也很常见。像图像和立面图这样的光栅数据通过矢量(场地的多边形轮廓、纬度/经度点云、建筑物的位置和覆盖区等)进行处理。)变成更复杂的问题。
这就是我的一些挫折感发挥作用的地方:那里的许多工作都应用了许多卓越的最先进的计算机视觉技术,所以地球观测数据的一个有限的子集。我们采用复杂的卫星数据,并将其缩减为 8 位 RGB 图像,使其适合 ImageNet 预训练的 ResNet50。这实际上对许多应用程序来说是非常好的,可以产生大量非常好的结果!它也相对容易创建,因为有许多库、预先训练的模型和更一般的工具来处理“标准”图像。
太空网 7 标记的行星图像。比赛使用的度量标准侧重于识别和区分每座建筑,每座建筑只有几个像素,并且彼此靠近。
我希望看到的是一场有一些标记数据的比赛,同样用于物体检测,有一个明确的指标,但鼓励使用外部数据源,总体上更加开放。虽然我是一个机器学习和深度学习的书呆子,但我很想看到有人通过使用土地覆盖图和高程模型击败所有模型来获得对某些区域的一些见解,这比通过最新的难以发音的预训练模型进行“常规”RGB 图像处理更有帮助。
当然应该有限制,因为对数据的访问是不平等的,但我仍然认为至少可以探索一些有趣的选择:
- 促进所有和任何免费公开可用数据集的使用:有大量公开的地理数据集:像陆地卫星、哨兵 1 号 2 号(甚至其他)等图像。还包括高程模型,如 SRTM、国家地理机构制作的土地覆盖图,以及矢量数据,如开放街道地图、可公开访问的建筑足迹数据集等。外面有很多已经策划好的名单。我很乐意看到这些东西以如此巧妙的方式结合在一起使用。
- **提供比简单的 8 位 RGB 图像更多的图像(如果可能的话)。**许多以卫星图像为特色的比赛将图像缩小到仅 RGB 波段,并且仅提供 8 位图像。如果有人能和 NDVI 一起工作,作为场地/建筑分割的指导,或者为像哨兵 2 这样数量惊人的乐队进行更复杂的降维,那将会很棒。
- (图像提供商甚至可以为一些比赛开放他们的档案(他们在周末开放了他们的档案,以便为多个黑客马拉松免费下载一些图片)。我甚至没有谈论给这些贴标签,只是给更多的数据选项,如果任何参赛者有任何有趣的想法。像伪标签和半监督卫星图像这样的事情可能会导致一些意想不到的结果。)
一个可能产生的批评是,知道如何使用这些数据源的人和不知道如何使用这些数据源的人之间缺乏不同参与者的技能水平。在 Kaggle 上看到一些非常具体的数据类型(医学图像、3D 对象检测等)的竞赛后。)我相信这会有助于提高总体技能水平。在竞赛、数据科学中看到的一个常见模式似乎也经常出现在其他领域:有人通过巧妙使用工具获得优势,赢得了竞赛。在你意识到之前,下一次周围的每个人都开始认真地调查它。这已经在多次获胜时获得流行的算法中看到。为什么不是为了数据?
在内心深处,出于自私的原因,我只是希望这些令人敬畏的数据集处于聚光灯下,因为我只是希望它们被使用,(希望)导致更多的数据集被创建出来;作为一名从业者,我希望看到更多的开箱即用的想法得到实施和实战检验。我认为竞赛是对研究和行业的赞美,尤其是对地理数据而言:机器学习竞赛是目前最酷的事情,我认为地球观测领域可以从中受益。提供新的、具有挑战性的和广泛开放的复杂问题,同时从可能不熟悉地理数据特性的人那里获得一些新的想法。
这也是业内产品被创造出来的方式。将多种传感器和图像来源结合在一起的数据融合在地球观测中变得非常流行。许多产品是通过将高分辨率影像与建筑物覆盖区或高程模型相结合来构建的,以便更好地了解特定位置。不同的分辨率、采集时间、数据类型被融合在一起,以产生更有意义的东西。当一位同事向我指出,可以通过合并两个波段来创建简单的植被指数,从而以更简单的方式解决问题时,我通过尝试应用一些花哨的神经网络来寻找树木,学到了很多东西。这实现起来更快,解释起来更容易,处理起来也更快。由于地球观测的特殊性和数据类型的丰富性,我认为尝试创建捕捉这一想法的竞赛是有意义的。
社区和团体学习吸引人们去竞争
在与许多人交谈以及思考我自己在 Kaggle 上花费的时间后,我开始找到一些共同的主题,即为什么这个平台比其他平台更成功。一些答案可能是,被谷歌收购确实有助于开发一个有吸引力的工具,并让用户获得免费的 GPU 时间。但我认为不止如此,平台上许多直言不讳的人指向围绕比赛创建的社区。就我个人而言,花时间阅读代码&和其他更有技能的人一起工作,思考和我一样的主题,已经被证明是非常有益的。我学到了很多东西,因为我能够就某个特定的主题提出问题,而对于不参与这个项目的人来说,这可能需要半个小时才能提供背景信息。让成百上千的人在同一个数据集上交流几个月是一个很好的学习机会。
近 900 支队伍参加了上一届围绕卫星图像的 Kaggle 竞赛,内容是昴宿星图像中的船只探测。似乎最高等级的解决方案在空客投入生产。
这是我希望更多地出现在地理数据平台上的东西,就像 SpaceNet 正在努力成为的那样。再说一次,我是 SpaceNet 的超级粉丝,SpaceNet 6 是关于 SAR 的,我认为这是迄今为止最好的竞赛数据集之一!我只是希望这个平台能够推动更多的技能水平间的分享,能够就所有奇怪的,也许有缺陷的,但有时很棒的想法进行对话。
我最欣赏 Kaggle 的一点是,对于大多数人来说,竞争几乎与竞争无关。不要误解我的意思,攀登排行榜的兴奋感是真实的,并且每次都会驱使自己多努力一点。但这对于大多数人来说是次要的,至少很少有人能成功,但仍有成千上万的人在尝试。尽管有时奖金会很高,但我希望很多人在空闲时间花几个月的时间来尝试学习一些东西。
我还想简单谈谈参与所需的技术水平。Kaggle 似乎在推动越来越简单的提交格式,由于他们的自托管 notbeooks,基本上不需要设置。另一方面,SpaceNet 仅通过 AWS 下载提供数据,并且需要将您的解决方案打包在 Docker 容器中才能提交。技能水平显然不一样,SpaceNet 更类似于一些入门级的软件开发部署。这是两种不同的方法,通过向 SpaceNet 提交,我学到了一些东西,但它显然提高了竞争人数的标准。我不认为有什么最好的方法,我把它留给那些读者。我只是想指出,有多种格式。
我想写下来,主要是为我自己,在完全无法提供令人满意的 SpaceNet 7 解决方案后收集我的想法,尽管我的模型仍然有(对我来说)令人满意的结果,我觉得我应该想想我从中获得了什么。事后看来,我应该花更多的时间开发工具来轻松地调查我的模型错误,并浪费大量时间正确理解竞争对手使用的投影系统。我真的很期待下一个,但仍然渴望阅读更多关于其他人可能提出的对我来说有点太限制性的任务的内容。我没有太多地谈到 SpaceNet 如何在提出有趣的指标方面做得很好,我希望随着我们的发展,这些指标会被采纳并变得更加标准,或者他们如何提供免费提供的来自以前比赛的令人敬畏的数据集,所以我将在这里补充它:我真的很感激这些都存在。我只想让它们变得更好!
数据科学资历的步骤:沟通
所有老年人之间的共同点
在之前的一个故事中,我根据网络上相关文章的一个小样本,写了一个高级数据科学家应该具备的素质。总而言之,我提出了一名数据科学家为了晋升应该提高的三大支柱:
- 你对自己了解多少 : 经验、工具箱、部署、好奇心。
你独立完成工作的能力,以及为成功实现目标而积极主动的能力。 - 你对你的公司了解多少 : 产品发现、初始、管理、测量。
您看到全局、最大化您的影响、最小化复杂性、提出新想法并衡量其价值的能力。 - 你对你的同事了解多少 : 沟通、领导、教学、微观管理。向你的队友和经理推销你的想法、了解每个团队成员的优势和劣势、向他们传播你的个人知识以及有效领导他们的能力。
在这个故事中,我们将谈论第三个支柱:人际软技能。
卡桑德拉和教学
来源:卡桑德拉作者伊芙琳·德·摩根 (1898 年,伦敦)
在希腊神话中,卡珊德拉是一个被预言诅咒的女祭司,这些预言总是成为现实,但从来没有人相信。你有过项目提案被否决的经历吗?你有过宠物项目变成心碎的经历吗?最终会发生的。也许不是这个项目有缺陷…也许是你的推销有缺陷。
对一个数据科学家来说,推销 你的观点的能力是必不可少的。这对每个结构开发人员来说都是正确的,但由于统计分析固有的复杂性,这尤其与数据相关的工作相关。与营销、管理或其他开发人员中的外行打交道需要说教式的沟通。一个高级数据科学家首先是一个伟大的老师。
这些技能在专业人员和经理之间的职业 T 形分裂的双方都有用:作为一名专业人员,你要处理不断增加的复杂性,必须能够将你的知识传达给你的发展团队和上级;作为一名经理,你必须能够与产品所有者分享你关于数据内部运作的知识,并教育利益相关者你工作的可能性和局限性。
展示您的数据项目通常被称为数据故事,Medium 中有许多故事详细解释了这一概念。以下是我个人的一些选择:
在数据科学的世界里,一个人必须擅长数据创造、怀疑和交流。有趣的见解…
towardsdatascience.com](/tell-stories-with-data-communication-in-data-science-5266f7671d7) [## 在数据科学写作方面做得更好,机会就会增加
作为一名数据科学家,一项至关重要的技能是能够将发现传达给具有不同技术…
towardsdatascience.com](/get-better-in-data-science-writing-and-the-opportunities-will-grow-9d37fdada262) [## 数据叙事复兴的教训
1854 年,伦敦爆发了致命的霍乱。普遍的看法是……
mediadecoded.com](https://mediadecoded.com/lessons-from-the-renaissance-of-data-storytelling-3cec8bf9bd7e) [## 30 种最新最棒的数据叙事工具
NICAR 2017“60 分钟 30 种工具”研讨会上展示的新技术综合报道。
medium.com](https://medium.com/@ToTheVictor/nicar30tools-da83db0f3dc6)
增强这项技能首先需要经验。对着镜子练习解释你的项目,向你周围不熟悉你正在阐述的概念的人解释,在你的周围寻找聚会,安排谈话来训练你的公众声音。
你也可以锻炼你的学术肌肉,练习写论文。用适当的结构和同行评论将想法合成文字可以提高你的教学能力。写中型文章是展示你的想法和收集志同道合者反馈的好方法。
不要让你的项目成为卡珊德拉的预言:被遗忘在书架上的有用信息对你或你的公司没有任何好处。
进入数据管理
首先,请继续阅读这个故事。这是对数据科学经理角色的很好介绍。
随着数据科学的兴起,也出现了数据科学经理。所以,如果…你需要记住什么
towardsdatascience.com](/so-you-are-now-a-data-science-manager-now-what-6efe42f2093)
项目经理参与项目的启动和监督,监控日常进展,以及涉众的期望管理。他们努力将质量最大化,将花费在开发上的成本和时间最小化。
为了正确评估数据项目,您至少需要一些该领域的知识。你不能为一个模型设定 7 天的最后期限,而这个模型至少需要花这么多时间进行训练,你不能将标记工作交给一个科学家,并期望它很容易,也不能承诺在未经探索的数据集上训练的模型的准确性。
作为高级数据人员,你的首要工作是补充 你的项目经理,如果他需要的话。做蟋蟀吉米尼,军师,墨菲斯。和他一起工作,保护你的团队不被误导。有了他对公司的系统观点和你的技术建议,这个过渡期对双方来说都是一次学习的经历。
在这样做的同时,继续训练你的个人项目组织技能**。随着资历的增长,责任和更大的个人项目也随之而来。开始划分以衡量努力和时间消耗。记下完成困难任务所需的时间、简单的速赢、常见的障碍及其解决方案。**
在你涉足管理领域之后,开始思考你在专家/经理职业道路上的下一步。不要因为外力而被迫做出选择:这实际上是一次职业转变。
以下是关于数据科学经理角色的其他资源:
大思路:与数据和分析竞争成功管理数据科学团队需要技能和理念…
sloanreview.mit.edu](https://sloanreview.mit.edu/article/why-managing-data-scientists-is-different/) [## 管理数据科学团队
伟大的数据科学家有职业选择,不会长期忍受糟糕的经理。如果你想…
hbr.org](https://hbr.org/2018/10/managing-a-data-science-team) [## 数据科学经理:资格和技能-建立数据科学团队| Coursera
约翰·霍普金斯大学为课程“建立数据科学团队”制作的视频。欢迎建立一个数据…
www.coursera.org](https://www.coursera.org/lecture/build-data-science-team/data-science-manager-qualifications-skills-tw4DY) [## 数据科学经理的角色
数据团队经理需要在一个新生和快速发展的领域建立强大、稳定的团队,实现高质量…
medium.com](https://medium.com/sequoia-capital/role-of-a-data-science-manager-2c69264511d3)
了解你的团队
高级开发人员通常通过指导和监督其他开发人员来负责项目开发。为了充分认识到他在团队中的实力,他需要了解每个队友的技能,以便正确分配任务,并使每个人都保持最大的生产力。
这在数据科学领域没有什么不同。除了前端/后端工程师,你还需要跟踪特定的数据技能:每个团队成员知道什么样的模态(多媒体、文本数据、数字数据),他们是否更好地开发概念证明、做管道工程、仪表板……就像在一部抢劫电影中一样,一个项目的成功完全取决于团队的组成。
**你还不是独角兽。**你可能对所有开发步骤都有广泛的了解,但你并不是每一个步骤的专家。这是学习过程的一部分,来区分你能做什么和不能做什么,以及谁能补充你的技能。
要提高这项技能,你需要倾听。听听你同事的反馈。每天倾听抱怨。一般听听关于职场的赞美。关注队友的宠物项目:这些是他们平时工作之外积极追求的领域。
有两本书会改善你对职场关系和一般沟通技巧的看法:丹尼尔·戈尔曼的《T4》、《情商》和《社交智商》。如果你渴望一杯知识,而不是一整条河,我可以推荐这些关于它们的深思熟虑的文章:
如何提高你在人际关系中最重要的品质
medium.com](https://medium.com/better-marketing/the-complete-guide-to-emotional-intelligence-d3b2333b8615) [## 社会智力和领导生物学
1998 年,我们中的一位,丹尼尔·戈尔曼,在这几页发表了他的第一篇关于情商和…
hbr.org](https://hbr.org/2008/09/social-intelligence-and-the-biology-of-leadership)
我倾向于认为数据科学家是好的学习者,而不一定是知识者。不要不顾一切地钻研每一个领域,成为其中的大师。慢慢地,但肯定地,我们会积累日常处理数据的知识和经验。我们都在数据的台阶上一起向上走!
感谢您的阅读,并在这个充满数据的宇宙中享受乐趣!