TowardsDataScience 博客中文翻译 2020(八百六十七)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

数据科学有志者最重要的思维方式

原文:https://towardsdatascience.com/the-most-important-mindhack-for-the-data-science-aspirant-6ab25d9010b1?source=collection_archive---------72-----------------------

作为数据世界的学生,为了提高自己,要认识到你周围的每个人都是有能力的导师

您已经完成了第一个数据科学项目。这很简单,但很有效。你会惊讶于自己在工作中所学到的东西。现在,你希望将你的作品分享给世界上的其他人。所以,你开始写博客。很快,你会意识到你的项目还没有装饰到“值得写博客”的程度。

你可以写一篇“如何做 X”或者“用 Y 构建 X”的文章。但是,你不喜欢增加互联网上某些内容的冗余。你考虑在 LinkedIn 上发布你的项目。毕竟,这是一个可以帮助你增加职业联系的网络。

然后你想起过去几天你在 LinkedIn feed 上看到的项目。每一次都比前一次更可怕。你再次意识到,你的项目还没有准备好进入一个平台,尤其是一个有这么多复杂项目控制着喜欢和分享的平台。

此时,你们中的一些人可能会将代码文件保存到 Github 中,不管有没有文档。如果您喜欢将代码文件保存在本地系统中,我希望您不要在例行的桌面清理过程中误删了它们。我蠢到做了这件事。

几个星期后,你会忘记这个项目。生活在继续。你开始学习新的东西。你建立了更多的项目,但不与任何人讨论你的工作。你简直就是初级数据科学项目的布鲁斯·韦恩。这无疑是一条充满便利的道路。但是便利对于改善来说是一个很差的催化剂。

不太方便的途径是与他人讨论你的工作,与他们交流你的努力,帮助他们理解你的工作,理解他们的反馈,并在你已经知道的基础上进行改进。

如果你只从这篇文章中拿走一句话,我希望是这句话——“作为一名数据世界的学生,为了提高自己,要意识到你周围的每个人都是一位能干的导师”

从关心你的项目开始

当你是初学者时,每个项目都让你有能力学习新的东西。因此,这些项目值得你的关心和全力以赴。你越了解自己做了什么,为什么这么做,就越容易向别人解释。

数据科学主要是为利益相关者创造价值。它不是你制造的。它是你提供给人们的价值。

如果你已经花了至少几个小时在你的项目上,不言而喻,你将需要花更多的时间来完善它。如果这是你为大学作业所做的事情,它不应该仅仅是为了评估。如果你不喜欢从中学习,你可以。

有几种方法可以让你的工作物有所值

在一个仅靠在线课程无法提供帮助的世界里,项目是初学者工具包中最重要的组成部分。然而,如果没有很好地利用,即使最好的工具也可能失败。

数据科学主要是为利益相关者创造价值。它不是你制造的。它是你提供给人们的价值。

共享您的项目

我们大多数人都是伴随着这句格言“分享就是关爱”长大的。我仍然记得我是如何用这句话来吃我同学的午餐盒的!然而,作为一名数据科学初学者,分享您的工作很重要,因为它提供了一个讨论的机会。讨论可以让你从以前从未有过的角度来看待这个项目。

然而,分享的想法躲避初学者。作为初学者,我们都觉得我们太新了,无法分享我们的项目。我们脑海中出现的一些非常常见的问题是

  • 我的项目“好”吗?
  • 不好的话人们会“把我撕成碎片”吗?
  • 有人会“窃取”我的想法吗?

首先,在有人给你反馈之前,你怎么知道你的项目是否好?自力更生,自我评价肯定是很重要的。但是,在数据世界里,你创造东西来帮助人们。所以,为了了解你是否击中了要害,你需要与人交谈。

为什么人们会“把你撕成碎片”?即使他们这样做了,为什么要打扰一个没有什么可失去的初学者呢?我们走的每一步都是一次新的学习机会。如果恐惧开始控制我们进步的速度,那么掌握就很遥远了。

最后,如果你喜欢的项目很敏感,你还不想公开,那也没关系。但是,如果有一点点可能与你信任的人讨论这件事,你必须去做。全新的视角总是有帮助的。

好吧,那我们怎么分享?我们是否把我们的工作和文件夹联系起来?或者发关于项目的推特?还是把链接发给朋友,要求评论?在我看来,没有放之四海而皆准的答案。不过,我可以给你提供一个框架,我发现这个框架在让你的宠物项目“公开”时极其有用。我称之为“拥抱风暴”金字塔。

这个术语源于这样一种理解,即要求对某件事的反馈总是会在我们的头脑中产生恐惧、怀疑和希望的风暴。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

演员表:作者

对于你喜欢的项目,基本上有三个要求反馈的层次。随着你越往上爬,你受到的批评越多。往下走,诚实的正面评价会增加。所有级别都同等重要。至于有价值的反馈需要达到什么水平,这完全取决于你的项目。

第一级——你最近的圈子

三者中最小的一组。这包括你的朋友或教授,他们每天都和你交谈,或者一周至少交谈几次。这些人了解你,知道你在项目中所做的工作。

优势:他们给你最诚实的正面评价。例如,如果他们喜欢他们所看到的,他们会全心全意地欣赏它。他们为你的工作感到骄傲,并且不会隐瞒该表扬的地方。

**劣势:**他们最少批评。他们中的大多数人不会指出消极的一面,因为他们认为这不适合你。然而,如果你告诉他们批评对你有多重要,他们中的一些人可能会帮助你。

第二级——你刚刚认识的人

这包括你在大学或工作场所会遇到几次的人。你和他们并不亲近,但是你们都意识到了你们对工作的重视。这可以包括你不太了解的共同朋友,也可以包括系里没教过你但认识你的教授。

**优势:**他们位于金字塔的中间,因此对你的努力给予相当多的批评性反馈和赞扬。

劣势:你不太了解这些人。所以,相信他们的意见确实变得有点困难。曾经有人告诉我他们“喜欢”我的项目。然而,他甚至还没有运行我的代码。哎呀。

第三级——你不认识的人

这些人可能甚至不知道你的存在。它包括世界上所有你不认识的人。如果你对我的要求是具体,我会说你从未见过但在你的领域工作的教授。世界各地的数据科学家。社交媒体上的数据科学社区。这样的例子不胜枚举。

**优势:**他们给你最关键的反馈。其中许多都是高质量的,可以帮助你显著地改进你的工作。他们会毫不犹豫地向你展示需要改进的地方。

缺点:他们真的没有时间来称赞你的努力,因为时间就是金钱。如果他们有时间回应,他们会确保这是值得的。话虽如此,他们中的许多人可能不会回应,因为他们通常都很忙,没有义务回应你。

现在,如果你住在第一层,你就不需要在 LinkedIn 上写博客或帖子了。这可能发生在午餐时间。你的同事不需要理解数据,他们需要理解的只是你的想法及其重要性。他们甚至不需要成为编码员。你得到的讨论和想法会让你大吃一惊。不要相信我的话。尝试一下,自己感受一下。

一封电子邮件或一次例行的聊天/边喝咖啡边见面会对二级反馈有所帮助。如果对你来说太正式,10-15 分钟的谈话也可以提供一些非常重要的反馈。

电子邮件仍然适用于第三级。如果你足够幸运能见到你的偶像,那听起来很棒!然而,第三层的大部分互动将通过社交媒体进行。所以,这就是你可能需要一篇博文或一篇文章的地方。明智而谨慎地使用它。你一定会被你的内容所评判。

这里的底线是*“你不需要认为一篇博文或一篇文章是让你的项目为人所知并获得反馈的唯一途径”*。如果你想提高,即使你日常见到的人也可以成为重要的老师,即使他们对数据知之甚少。毕竟,数据科学的一个关键部分是沟通。

作为一名数据世界的学生,要意识到你周围的每个人都是有能力的导师。

人工智能系统开发最重要的部分

原文:https://towardsdatascience.com/the-most-important-part-in-artifical-intesystems-development-243f04f73fcd?source=collection_archive---------59-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如今,像数据科学和机器学习这样的人工智能相关领域已经成为主流。几乎每个人现在都可以成为数据科学家。这当然是一件好事,但不幸的是,人们忘记了什么是人工智能系统。我更喜欢麻省理工学院的帕特里克·温斯顿的观点:

人工智能(或智能代理)是一个基于数学模型的系统,它在具有某些约束的环境中以最佳方式运行。

在这篇文章中,我想多谈谈模型。

那么是什么让一个模特成为好模特呢?

简而言之,一个好的模型(在我看来是每一个好的模型)应该是问题的一个好的代表。换句话说,它必须:

  • 使显著的特征清晰。
  • 暴露约束。

不幸的是,由于像 Kaggle 这样的平台以漂亮的封面和简单的表格提供数据,大多数人认为人工智能是一项找到一些特征来预测一个类别或连续值的任务,有时是在图像中找到一个对象。但现在我想展示一个人工智能领域的另一个问题的例子,不幸的是它没有被当作人工智能的例子。

八皇后问题

8 皇后问题被公式化为:一个代理人应该把 8 个皇后放在一个国际象棋桌上,以这样的方式没有皇后攻击其他皇后。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个理想和目标状态,没有一个女王攻击另一个女王。

为了解决这个问题,我们首先需要对这个问题进行数学描述。所以让我们把它公式化为一个优化问题:

  • 性能函数——相互攻击的女王对的数量。
  • 问题的状态——棋盘上皇后的排列——我们将使用它们来找到它的成本值。
  • 求解的方法——我选择了遗传算法。

《人工智能——现代方法》一书的插图显示了交叉过程中桌子本身的分裂。但不幸的是,有时它会违反问题的主要规则——女王的数字必须是 8。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

书中所示的拆分方法。由此产生的国际象棋桌上有 7 和 9 皇后——违反了主要规则。

那么,在交换过程中,在不改变皇后数量的情况下,有什么更好的模型来描述棋盘的排列呢?什么描述了皇后在餐桌上的位置?
当然坐标!所以,通过把染色体描述成一列皇后坐标。但是变异就像随机改变女王的坐标一样。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

结论

所以作为我的结束语,我想给你一个建议。如果你想成为一名人工智能研究员或人工智能工程师,我真的建议你不要坚持机器学习和神经网络等技术,尤其是 sklearn 或 Keras 这样的框架。更好地学习建立你自己的,就像我们在 Sigmoid 做的那样。最重要的是学会用公式表达问题和解决问题的模型。

额外收获:python 实现。

更多资源:

麻省理工学院人工智能课程:第 14 讲

数据科学家应该具备的最重要的技能

原文:https://towardsdatascience.com/the-most-important-skill-a-data-scientist-should-possess-d0700de3e5fa?source=collection_archive---------37-----------------------

不要从数据开始,从人开始

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

乔希·卡拉布雷斯在 Unsplash 上的照片

我们数据科学家需要有很多准备。提取、争论、清理、转换、查询、分析、建模、可视化、部署——所有这些都在一天之内完成。一个“全栈”数据科学家需要能够胜任无数的包、框架和技术,或者至少有能力在必要时快速提升技能。多样化的技术挑战是我们如此热爱这一领域的部分原因。

但是,尽管我们有先天缺陷,有一项技能我们都应该努力完善。

神入

《T4 牛津英语词典》将移情描述为…

将一个人的个性投射到(并完全理解)沉思对象中的力量。

作为一名数据科学家,你的思考对象可以指你的利益相关者、受众、最终用户,或者你正在使用数据了解或影响其行为的人。

数据科学是一种翻译练习。随之而来的是一个混乱的、定义不清的现实世界中的人类问题。这个问题的一个清晰明确的数字近似解决方案出来了。你的工作是确保这种近似很好地映射到人类问题,捕捉它的细微差别,满足涉众和用户的需求。为此,你需要设身处地为许多人着想,提出许多问题,并真诚地寻求理解是什么让人们产生活力。

同理心让你的工作保持相关性。

在零售分析行业工作,我最不喜欢的问题是“你能给我一些见解吗?”。完全开放和模糊,它邀请你跳下一个又一个兔子洞,寻找一些“有趣”的东西。随着截止日期的临近,你匆忙地将几个松散连接的图表和“知识”拼凑成一个 Powerpoint,然后向一屋子呆滞的目光和没有被仔细检查过的手机展示。致命一击是一个可怕的问题,“这很好,但那又怎样?”。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由埃德温·安德拉德Unsplash 上拍摄

为了让你的作品受到重视并引起观众的共鸣,你必须了解他们的动机和议程。这意味着要问很多愚蠢的问题,以建立对他们关心什么以及什么能给他们带来最大价值的真正理解。

经过多次的学习,我现在意识到数据科学项目最重要的部分远在你开始敲键盘之前。不要从数据开始,从人开始。如果你从关注数据开始,你可能只会考虑你能利用它做什么,而不会考虑什么能提供最大的价值。如果您首先关注向您寻求帮助的人,您可以更容易地确定最有益的问题和功能,并可以担心以后如何找到您需要的数据。

有时这迫使你出卖一点灵魂。在公司的黑暗政治中,偶尔你会不得不与那些不一定致力于追求知识的人一起工作。与其说是寻找的真理,不如说是寻找的真理,我们可以一起工作。在这种情况下,您的客户有一个特定的议程,需要数据来帮助证明这一点。你的工作是理解客户和他们的观众的动机,并找到一个角度,在不损害你的诚信的情况下,对数据进行积极的解释。**

同理心给你“为什么”

分析有关人们行为的数据也需要同理心。原始数据可以告诉你一个人是谁,什么,何时,何地,怎么样,但不能告诉你“为什么”。为了弄清楚他们为什么这样做,你需要运用你的想象力把桌子上的一排变成一个活生生的人。

在你的数据集中挑选一个人,然后问“这个人是谁,为什么他们会有这样的行为?”。仔细想想他们的生活方式可能是什么,他们在想什么,以及他们正在做出什么决定来在数据中留下他们的“足迹”。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由大卫·维克斯列尔Unsplash 上拍摄

以超市为例,您可能会问:

  • 他们喜欢从头开始烹饪吗?
  • 他们花钱谨慎吗?
  • 他们进店时是习惯性的,还是冲动性的?
  • 他们是计划开一家大商店,还是需要什么就来?
  • 他们有孩子或者和伴侣住在一起吗?
  • 他们是为了普通的工作日夜晚,还是为了款待或娱乐而购买?

将此与定性研究(调查、焦点小组、使用和态度研究)相结合,有助于充实您的数据所代表的真实人群。

在较浅的层面上,这种思维给你的集群起了名字,并提供了一些轶事来帮助活跃演示。在更深的层次上,这些问题导致更深思熟虑的分析、更准确的模型以及对数据如何反映现实的更直观的看法。

移情是永恒的

在您作为数据科学家的职业生涯中,您将投入大量的时间和精力来学习技术,而这些技术几年后就会过时。但是在 PyTorch 灭绝和熊猫灭绝很久以后,理解其他人的需求和需要的需要将会继续。当然,直到机器人启示录。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

匡威“查克·泰勒”全明星赛,今天和 1917 年一样受欢迎。照片由卡蜜拉·达马西奥Unsplash 上拍摄

我们使用的技术只是工具,真正的挑战是如何应用这些工具去实现其他人关心的事情。那些今天开始在工作场所工作的人可能会一直工作到半个世纪以后。他们将不得不应对我们工作方式的无数变化,这些变化在今天是不可思议的。想想自 1970 年以来的 50 年间发生了多大的变化。但是同情你的人类同胞的需要一如既往地强烈,并将继续下去。

当然,同理心也可以高度转移到其他职业和你的个人生活中。如果你努力解读新同事/未来同事的内心想法,换工作会更顺利,成功的几率也会更高。花时间考虑他人的感受会让你成为更好的伴侣、朋友、父母或同事。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由凡妮莎·布姆比尔斯Unsplash 上拍摄

一项我们都可以努力的技能

我们的行业是建立在硅片、数学和计算机代码之上的。我们陶醉于进步的步伐以及数据科学带来的考验和机遇。但是我们工作的真正价值是其他人从中发现的价值。我们克服的技术挑战毫无价值,除非我们帮助别人解决问题,让他们的日子更轻松。通过花时间去了解其他人,无论他们是利益相关者、观众还是数据库中的名字,你的工作将会有你努力应得的质量和影响。

数据科学家最重要的技能

原文:https://towardsdatascience.com/the-most-important-skill-of-a-data-scientist-2b7f7f03635a?source=collection_archive---------39-----------------------

意见

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unsplash 上的克里斯托佛罗拉拍摄的照片

近年来,数据科学获得了极大的普及。对数据科学领域技术人员的需求很高,而且还在不断增加。因此,越来越多的人试图进入这个领域。

但是,这绝对不容易。

你需要有一定的技能才能在这个领域找到工作。虽然要求可能会根据职位的不同而变化,但基线是围绕线性代数、统计学、软件技能和领域知识建立的。

抛开这些不谈,我认为数据科学家应该具备的最重要的技能是其他东西。在我解释那个技巧之前,我最好提一下我认为数据科学是什么。

数据科学正在从数据中创造价值。

数据是以任何格式收集的任何信息。人们花在社交媒体上的时间,雨天的数量,媒体上的博客帖子,手机上的视频,等等。

数据科学领域使用了许多工具。在收集、存储、检索、处理和建模方面,你几乎可以对数据做任何事情。而且,由于计算机技术的进步,你可以以惊人的速度做到这一点。

一天下来,归结起来就是回答“你创造了什么价值吗?”。该值可以有多种形式。例如:

  • 改进流程
  • 预测更好的东西(例如对商品的需求)
  • 帮助人们更有效地完成工作(例如检测 x 射线图像中的特定情况)

我可以成为数据清理和处理的专家。我可以创造最先进的模型。然而,我并没有以某种方式为使事情变得更好做出贡献,可以肯定地说,我的工作已经被证明是无用的。

数据科学有潜力创造巨大的利益。例如,科学家已经使用深度学习检测木薯的病毒疾病,木薯是非洲最重要的食物来源之一。虽然人们可能已经获得了理解植物是否有疾病的经验感,但深度学习使它更容易、更快、更准确。

另一个例子是原油蒸馏过程,这是一个高耗能的过程。机器学习技术用于分析原油成分,从而改进蒸馏过程。这就是更有效地利用自然资源的价值。

我们可以很容易地扩展例子的列表。但关键是,如果你想从事数据科学,你的重点应该是价值。这是创造数据科学产品的唯一途径。

当我们开始在数据科学领域的旅程时,我们需要有这种创造价值的心态。否则,我们将更多地成为数据科学实践者,而不是使用数据创造价值的数据科学家。

当然,我们在旅途中需要一套工具。我们绝对需要这些工具来实现我们的目标。例如,如果没有统计,我们可能无法理解或理解数据之间的某些属性或关系。线性代数是全面理解数学运算的关键。

为了创建性能良好的模型,我们需要大量的数据,这些数据需要我们使用软件来处理或建模。因此,软件技能也很重要。

这些硬技能是可以学习的。你应该只是学习和练习。网上有很多学习资料,这使得学习它们变得很方便。但是,从数据中创造价值的技能是学不来的。没有一个证书叫“如何从数据中创造价值?”据我所知。

更像是一种心态。你总是需要关注价值。这是一切开始的地方。它甚至在收集数据之前就开始了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

马修·施瓦茨在 Unsplash 上的照片

虽然这种技能不能像数学或统计学那样学习,但随着经验的积累会变得更好。你最终会使你的思维方式始终集中在价值上。而且,你不需要像上图中的人那样等那么久。创造价值的心态将会成长并成为根本。

感谢您的阅读。如果您有任何反馈,请告诉我。

最重要的统计测试

原文:https://towardsdatascience.com/the-most-important-statistical-test-dee01f4d50cf?source=collection_archive---------28-----------------------

剧透警告:可能性比率测试

似然比检验(LRT)“统一”频数统计检验。诸如 t 检验、f 检验、卡方检验等品牌检验是 LRT 的特定案例(甚至是近似值)。

因此,令人惊讶的是许多人从未听说过 LRT。当我帮助人们解决他们的统计问题时,大多数时候他们只需要表演 LRT 就可以了。但是之后他们会问这是什么,问怎么做。如果你必须记住一个统计测试,那应该是 LRT。

本文将带您了解 LRT 的理论和应用。假设对数理统计有基本的了解。

尽管我学习贝叶斯理论,但任何应用统计学家也必须理解基本的频率主义方法。人们通常没有时间学习理论上的开销,上级要求报告中的 p 值。

什么是 LRT?

顾名思义,我们采用两种可能性的比率,并对其进行转换:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我为这个迟钝的符号道歉,但是它和维基百科中的一致,所以请参考它来澄清。分子是零假设下的似然,分母是零 备选假设并集下的最大似然。我用这个量δD 来表示零模型和松弛模型之间的偏差,-2 对数似然+某个常数(从减法中抵消)。如果现在还不清楚,不要担心;通过下面的一些例子,LRT 应该会变得更加清晰。

那些曾经看过 AICBIC 的人可能会对看似任意的-2 感到困惑,但偏差是很重要的,因为δD 是渐近χ分布的,其自由度(df)等于两个模型之间 df 的差异(估计参数数量的差异)。这个惊人的事实使得大多数假设检验成为可能。

尼曼-皮尔逊引理证明了 LRT 的使用是合理的,该引理指出 LRT 是比较两个简单假设的最强大的测试,例如 H0: θ = 0 和 Ha: θ = 2。

因为备选假设通常不简单,比如θ ≠ 0,我们用极大似然估计(MLE)将其简化为简单的比如θ = 2。通常最大似然估计是通过(广义)线性回归完成的。直觉上,如果我们不能在最大似然估计处拒绝零假设,那么我们不可能在任何其他点拒绝,所以最大似然估计是唯一重要的点。

将点连接起来:f 检验

用人类的语言来说,我们在比较两个模型:一个有约束,另一个有约束的放松。你经常把它看作

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在零模型中,我们将平均值限制为 0。在另一个模型中,我们允许平均值不为零。然后我们需要指定一个似然函数。这里,为了保持熟悉,我们假设观察值来自方差σ = 1 的正态分布。最大似然是样本平均值。因此:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这看起来很粗糙,但是δD术语看起来很熟悉:回归平方和(SS)!(应该是缩放的,但是这里的 scale 参数是 1。)它可以重新表示为总 SS 减去剩余 SS,如第二行所示。而 χ分布被定义为来自标准正态分布的 SS,所以这一切都有意义。因为在替代模型中我们估计了一个额外的参数,所以δD 遵循具有 1 df 的χ分布。

如果方差未知呢?那么零模型估计一个参数,而替代模型估计两个参数,因此 df 的差异仍然是 1。在这种情况下,我们更熟悉地称之为 ANOVA 或 f 检验,在本例中相当于截距的 t 检验。

还记得我的观点吗,所有这些名字不同的统计测试实际上都是一样的(LRT)?是啊。这里有一些 R 代码来演示等价性:

set.seed(123)
x <- rnorm(50, 0.5, 1)
model0 <- lm(x~0)
model1 <- lm(x~1)anova(model0, model1)
summary(model1)
t.test(x)

你可以把偏差看作是应用于非正态分布的 SS 的推广。虽然不完全准确,但直觉是存在的。作为练习,将二项式偏差与对数损失函数进行比较,后者有时会在分类模型中进行优化。

连接这些点:G 测试

除了测试样本均值之外,我们通常还想测试列联表的独立性。统计学充斥着许多过时的传统,这是其中之一。

大多数人会立即跳到皮尔逊卡方检验,但这仅仅是 T2 G 检验的近似值,是 LRT 的一个特例。在计算器出现之前,取对数很困难,所以统计学家使用卡方检验来简化计算。令人惊讶的是,我们现在有了计算器,但仍然没有默认切换到 G 测试。(另一个常见的替代方法, Fisher 精确检验,提供精确的 p 值,而不是依赖于渐近值,但是阶乘使得它对于大样本量的计算不切实际。)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

相依表

可能性有多大?在独立情况下,我们可以认为数据是从多项式分布中生成的,其中落在每个像元中的概率是

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

有了依赖,每个单元格中的下降概率为

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以将δD 计算为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这相当于 G-test 的 Wikipedia 页面中的测试统计。这个看起来很可疑 KL 发散,嗯?有趣的是,许多概念是如此的相互关联。

我们可以使用泊松回归很容易地执行这个测试:y~x1+x2 对 y~x1+x2+x1*x2。(相当于作为练习留下的多项式模型。哦不。我变成了我讨厌的东西。)

当所有πN 都很大时,卡方检验和 G 检验得出相似的 p 值。G 检验应该是更可取的,因为 LRT 是最有效的检验,并且检验统计量的分布更接近χ分布。

library(data.table)N <- 100 # play around with this
factor1 <- sample(
  c('A', 'B'), 
  N, 
  replace = TRUE, 
  prob = c(0.4, 0.6)
)
factor2 <- ifelse(
  factor1 == 'A',
  sample(c('C', 'D'), N, replace = TRUE, prob = c(0.3, 0.7)),
  sample(c('C', 'D'), N, replace = TRUE, prob = c(0.7, 0.3))
)
dat <- data.table(factor1, factor2)
xtab <- table(dat)
dat_count <- dat[,.N, by = .(factor1, factor2)]model_indep <- glm(
  N~factor1+factor2, 
  data = dat_count, 
  family = 'poisson'
)
model_dep <- glm(
  N~factor1*factor2, 
  data = dat_count, 
  family = 'poisson'
)
summary(model_indep)
summary(model_dep) # the fitted match the observed so deviance = 0pchisq(model_indep$deviance, df = 1, lower.tail = FALSE) # G-test
chisq.test(xtab) # Chi-Squared test

以上是 LRT 的一般程序。我们拟合了一个简单的回归模型,并将偏差与一个更复杂的模型进行比较。

如何表演 LRT?

从前面两个例子来看,很明显:

  1. 计算约束零模型下的最大对数似然
  2. 当约束放松时,计算最大对数似然
  3. 将δD 与具有适当 df 的χ分布进行比较,以获得 p 值

1)中的模型必须在 2)下嵌套。毕竟放松约束就是这个意思。否则,δD 没有理论上的保证。

例如,y~x1 对 y~x1+x2 的δD 是公平的,因为在第一个模型中,我们约束 b2 = 0,而在第二个模型中,我们放松了这个约束。

但是 y~x1 对 y~x2 的δD 是没有意义的。在第一个模型中,我们没有约束 b1 = 0,而在第二个模型中,我们有约束 b1 = 0。对于 b2 来说,反之亦然。

有时我们有一些假设,比如 H0: θ ≤ 0,哈:θ > 0。为了确保模型是简单的和嵌套的,当θ ≤ 0 时,零模型应该是最大似然,而当θ是任意实数时,替代模型应该是最大似然。

手工计算最大似然估计很麻烦,而且大多数时候最大似然估计没有封闭解。幸运的是,我们可以利用计算机的力量。

对于线性模型,统计软件包有内置函数来计算 GLMs 的 MLE,它涵盖了您想要测试的大多数假设。(小心!在 Python 中,sklearn 的逻辑回归函数不也不计算最大似然估计,并且会产生不正确的偏差。请改用 statsmodels。)我认为 GLM 是应用统计学家最重要的技能*,因为如此多的推理任务都可以归结为 GLM 问题。*

对于更复杂的似然函数(如截尾和截断),你需要写下函数并进行数值优化。

最后

你可以放弃几十种不同的统计测试,用 LRT(主要通过 GLM)取而代之,这应该是最强大的测试。学习如何将问题框定为正确的回归公式,选择最合理的分布,并诊断模型。

编写正确的回归公式是最棘手的部分。加入太多变量会导致非常不正确的推论。逐步回归是而不是要做的事情的典型代表,而正则化方法是而不是 MLE,因此我们无法计算δd。参见以前的文章以了解如何选择变量。

机器学习工程师最需要的技术技能

原文:https://towardsdatascience.com/the-most-in-demand-tech-skills-for-machine-learning-engineers-7498754887d4?source=collection_archive---------18-----------------------

机器学习工程师和数据科学家、数据工程师有什么不同?

在这篇文章中,你会看到新的研究显示了机器学习工程师工作清单中最受欢迎的技术术语。📊

我们将探索机器学习工程师如何适应组织中的数据流。最后,我将分享一个机器学习工程师技能的建议学习路径。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

资料来源:pixabay.com

机器学习工程师是一个听起来很时髦的职位,这个职位的人报酬很高。根据一份分析,这是 2012 年至 2017 年领英上最热门的新兴工作。的确报道称,截至 2020 年 6 月 26 日,美国机器学习工程师的平均工资为 140536 美元。不算太寒酸。😀

让我们看看机器学习工程师如何适应组织内的数据流。

组织中的数据流

这是数据如何在组织中流动的示意图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

由杰夫·黑尔创作

数据被生成、接收并存储在数据库中。可以通过 ETL 修改数据,使其更加可用,ETL 代表提取、转换、加载

然后,这些数据可以用来制作机器学习模型,进行推理,并创建分析。

如果数据用于机器学习模型,那么这些模型可能会通过网站或 API 提供给世界。那是左边的小路。📱

或者,如果数据是为了建立因果关系而获得的(通常是通过实验),那么可以进行统计分析并共享。🔬

最后,如果数据用于事后分析以收集见解,它可能会被输入到报告或演示文稿中。🖥

让我们将经常伴随数据流的角色添加到图表中。

数据角色

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

由杰夫·黑尔创作

橙色框代表做数据工作的人。😀

  • 数据工程师负责制作数据管道。他们创建系统来接收、存储数据,并将其转换为可供数据科学家和数据分析师使用的形式。💻
  • 数据科学家创建机器学习模型来帮助驱动决策和创建预测工具。他们也可能做实验和统计推断来得出因果结论。这第二个角色更多的是传统的统计学家的角色。🧪
  • 数据分析师在现有数据中发现见解,并与利益相关方分享这些信息。📊
  • 机器学习工程师采用数据科学家创建的概念验证机器学习模型,并将它们转化为可扩展、优化、可服务的模型,供 API 和应用程序使用。👩‍💻

角色之间经常有很多重叠。🙂

请注意,数据科学家可能更专注于机器学习或统计推断。这种区分类似于迈克尔·霍克斯特的对 A 型和 B 型数据科学家的区分。A 型数据科学家做更多的静态、统计推断和分析,B 型数据科学家做更多的机器学习系统构建和软件工程。参见 Robert Chang 的优秀文章进行讨论。

在小型组织中,数据科学家可能是多面手,扮演上图中所示的所有角色。如果组织是年轻的,首先需要的是让数据管道成形。然后是核心指标的分析、报告和仪表板,以推动业务决策。因此,数据工程师和数据分析师通常是早期雇员。

随着组织的数据和数据能力的增长,机器学习工程师通常会在稍后添加。如果机器学习是一个组织的核心竞争力,你会很快看到更多的机器学习工程师。👍

我们在这篇文章中的重点是机器学习工程师,所以让我们深入了解他们做什么。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

资料来源:pixabay.com

机器学习工程师技能

机器学习工程师的工作与数据科学家或数据工程师的工作有什么不同?

⭐️机器学习工程师采用科学家创建的显示预测前景的模型数据,将它们转化为在生产中表现良好的代码。⭐️

机器学习工程师需要编写代码来:

  • 预测准确
  • 生产准备好了吗,容易理解吗
  • 运行速度快,内存效率高
  • 对道德因素敏感

第一点需要了解如何评估机器学习模型的性能。机器学习工程师需要调整模型并测试不同的架构来提高性能。正如你马上会看到的,许多雇主正在寻找具有深度学习框架的技能。

机器学习工程师为生产编写代码,因此他们需要实践良好的软件开发实践。他们需要熟悉版本控制,遵循通用的代码风格规则,并且很好地记录代码。他们可能会处理持续集成、测试和容器化。他们甚至可能处理用于部署的容器编排——正如您稍后将看到的,Kubernetes 和 Docker 出现在相当多的工作描述中。

生产代码需要快速高效,所以机器学习工程师应该有计算机科学和大数据原理的基础。有很多方法可以提高代码效率和性能。我已经起草了一个关于这个主题的粗略大纲,所以跟我来以确保你不会错过完成的指南。😀

最后,机器学习工程师需要了解他们的模型可能会如何对人产生负面影响。查看凯茜·奥尼尔的数学毁灭武器的介绍。机器学习工程师的权力很大,俗话说:权力大责任大。🕷

现在让我们看看在机器学习工程师工作清单中找到的具体技术。

方法

我从搜集信息,简单雇佣了怪物,看看在美国的工作列表中哪些关键词出现了“机器学习工程师”。我在分析中使用了请求美汤熊猫Plotly Python 库。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我使用了从我对数据科学家数据工程师数据分析师工作列表的分析中收集的技术关键词。实际上没有包括在内,因为它偶尔不返回常见术语的信息,并且对于没有关键字的基线情况,它有时返回非常不同的计数。LinkedIn 没有被搜索到,因为它之前在抓取了它的网站后将我锁定在我的账户之外。☹️

对于 Monster 和 SimplyHired,我计算了每个关键词出现在总机器学习工程师列表中的百分比。然后我平均每个关键词的百分比。

结果

这是 2020 年 7 月 1 日出现在至少 15%的工作列表中的技术术语。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们开始吧!😀

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

大多数雇主都在寻找拥有 Python 技能的机器学习工程师。Python 在四分之三的工作列表中都能找到!🐍

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

TensorFlow 是第二常见的技术,出现在超过 40%的所有机器学习工程师列表中。TensorFlow 是一个开源的深度学习框架。

让我们看看其他频繁出现的深度学习框架。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Keras 在 20%的列表中。Keras 是 TensorFlow 的高级 API,现在与 TensorFlow 2.0 紧密集成。两者都主要是由谷歌开发的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

另一个主要的深度学习框架 PyTorch 出现在超过四分之一的列表中。它比 TensorFlow 年轻,但使用量一直在增长。看我这篇探索 PyTorch 和 TensorFlow 流行度的文章这里

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Java 出现在近三分之一的列表中。Java 是最常用的软件开发语言之一。然而,它不像 Python 或 r 那样被教授给数据科学。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Apache Spark 常用于大数据应用。它支持许多编程语言,包括 Java、Python、R 和 Scala。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

AWS 是机器学习工程师最常见的云提供商,在近 30%的列表中出现。这并不奇怪,因为它是占主导地位的云提供商。

与其他术语的比较

下面的图表比较了十个最常见的机器学习工程师术语,以及这些术语在数据科学家和数据工程列表中的常见程度。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2020 年 7 月 1 日

可以看到 Python 对于这三个职位都是相当受欢迎的。让我们来看看几项存在巨大差异的技术。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据工程师列表中包含 SQL 可能性是机器学习工程师列表的两倍多。数据科学家列表中也更有可能包含 SQL。这是有意义的,因为机器学习工程师更加关注组织数据管道中更下游的数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

C++ 出现在近四分之一的机器学习工程师列表中。这是数据科学家和数据工程师列表中的三倍多!机器学习工程师经常需要为快速训练和推理进行优化,像 C++这样的低级语言可以加快速度。🚀

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Scikit-learn 在机器学习工程师列表中比在数据科学家或数据工程师列表中被提及的频率高得多。我很惊讶它没有更多地出现在数据科学家列表中。🤔

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

R 在机器学习工程师列表中比在数据科学家工作列表中更不常见。然而,它比数据工程师列表中更常见。r 通常用于 A 类数据科学/统计领域,尤其是在学术界。在机器学习产品中就少多了。

值得一提的是,在 2020 年栈溢出开发者调查中,Java、C++和 R 都被更多的人列为害怕的,而不是喜欢的

这里有一个扩展的技术列表,平均至少出现在 5%的列表中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

建议

如果你想成为一名机器学习工程师,你将需要强大的软件开发和机器学习技能,以及多项技术的能力。你当然不需要学习使用上面列出的所有技术,但是如果你的最终目标是成为一名机器学习工程师,我建议你学习一些。

首先,现实一点:如果你正在从一个完全不相关的领域过渡,不要指望你会直接跳到一个机器学习工程师的角色。它发生了,但是我的感觉是它是罕见的。

在进入机器学习工程师的工作之前,你通常需要有相邻职位的经验。这些职位通常需要在计算机科学、数学或所谓的硬科学方面有很强的学术背景。相当多的机器学习工程师拥有硕士学位或博士学位。🎓

如果你想成为一名机器学习工程师,确保你了解 Python。这是机器学习的通用语言。如果你是 Python 的新手,我可以推荐我的难忘的 Python 书吗?😉

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后学习机器学习库 NumPy熊猫scikit-learn 。这些术语都出现在相当多的工作列表中,并在很大程度上被认为是机器学习工程师的工作。如果你也想学,我有一本关于熊猫的书给你。🐼

你应该知道 Git。凯蒂·塞勒-米勒朱莉娅·埃文斯有一本关于这个话题的有趣的书在这里

正如你在上面看到的,雇主通常希望有深度学习框架的经验。要入门,推荐阅读 Keras 的原作者Fran ois Chollet的《深度学习与 Keras》。在 2020 年晚些时候发行之前,你可以使用曼宁的早期访问程序来查看该书的更新版本。那本书会让你很好地适应 TensorFlow。

如果你想学习 PyTorch,fast.ai MOOC 是一个很好的介绍。它有很棒的视频和支持深度学习的社区。

学 SQL 是个好主意。我有一本关于 PostgreSQL 的 SQL 入门书,目的是做一个温和的介绍。

那么我建议你学习 AWS 基础知识,这样你就熟悉了最流行的云平台。 Linux Academy 有很棒的互动在线课程。

我建议你学习你需要的数学,因为你需要它做一个项目。脱离上下文学习数学很难。在某些时候,你可能想学习线性代数。 3Blue1Brown 在 YouTube 上有关于这个和许多数学和机器学习主题的精彩讲解视频。

一路走来,做好自己的项目,投入生产。定期参与 GitHub 活动,并在活动过程中回馈社区。参加 Kaggle 比赛。一边走一边与世界分享你的技能。🚀

这应该够你忙的了。😀

要知道的事情太多了,可能会让人不知所措,但是不要感到不知所措或气馁。一次只处理一件事,坚持,坚持,坚持。👍

记住,每个人都有自己的学习之旅——总有更多的东西要学。这使得机器学习令人兴奋。🎉

包装

我希望你发现这个机器学习工程师技术技能的分析和讨论是有帮助的。如果你有,请在你最喜欢的社交媒体上分享,这样其他人也可以找到它。😀

我写关于 PythonSQL其他技术主题。如果你对这些感兴趣,请注册我的邮件列表,那里有很棒的数据科学资源,点击这里阅读更多帮助你提高技能的内容。👍

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

资料来源:pixabay.com

机器学习快乐!🚀

Twitter 上最受欢迎的数据科学文章主题

原文:https://towardsdatascience.com/the-most-popular-towards-data-science-article-topics-on-twitter-2ecc512dd041?source=collection_archive---------49-----------------------

介绍文本分析,可以增加你的文章受欢迎程度

如果您已经撰写了数据科学文章或正试图开始,找到最受欢迎的主题对让您的文章被阅读有很大帮助。下面是使用 R 和分析结果轻松确定这些主题的步骤。本文也可以作为使用 API 的介绍,并在 r 中进行一些基本的文本处理。如果您只对结果感兴趣,可以随意修改这段代码来进行其他的 Twitter 分析并跳到最后。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由皮克斯拜的 Gerd Altmann 提供

Twitter API

如果你没有 twitter 账户,你需要创建一个。之后前往推特开发者。使用新帐户登录后,您可以选择“应用程序”菜单,然后创建应用程序。在那里填写应用程序的详细信息,在大多数情况下,除了应用程序的名称和详细信息,这可以留空。

安装 R 包

我们需要 3 R 软件包来完成这个项目——rtweet、tidyverse 和 tidytext。安装这些与

install.packages("package-name")

确保在脚本中使用 library()函数加载了这些包。

收集推文

要获取推文,我们首先需要生成一个令牌。我们可以用 rtweet 包中的 create_token()函数来实现。可以通过查看 Twitter 开发者网站上新应用页面上的信息来填充参数。所有这些变量对于安全性都很重要,所以无论何时使用 API,都要确保采取预防措施,将这些令牌和密钥保持为私有。

token <- create_token(app = "<app-name>",
  consumer_key = "<consumer-key>",
  consumer_secret = "<consumer-secret>",
  access_token = "<access-token>",
  access_secret = "<access-secret>")

现在来抓取推文!使用 get_timeline()函数来访问任何公共用户的 3200 条最近的推文,以便在一次查询中获得比这更多的内容。

tweets <- get_timeline("TDataScience", n=3200, token=token)

现在有 50 列数据和 3200 行存储在变量“tweets”中。我们主要关心的是 text、favorite_count 和 retweet_count 列,但是您也可以研究一下还需要查看什么。

删除不需要的短语

我们还想删除一些在这个域中常见的东西,主要是链接和 twitter 句柄。我们可以使用 gsub()函数将出现的链接和句柄替换为其他内容,在我们的例子中,我们通过用空字符串替换它们来删除它们。下面,我们使用管道操作符将文本列从一个 gsub()函数传递到下一个函数,删除 URL 和句柄,最终将它们保存在一个名为 clean_text 的新列中。

tweets$text %>% 
gsub("?(f|ht)(tp)(s?)(://)(.*)[.|/](.*)", "", .) %>% 
gsub("@([A-Za-z0-9_]+)", "", .) -> tweets$clean_text

删除停用词

现在我们想从 clean_text 列中删除停用词。停用词是对理解文章意思不重要的词。这些通常是一种语言中最常见的单词,但是对于某个特定的领域,您可能想要删除一些额外的单词。在我们的任务中,我们可能认为“数据”这个词无关紧要,因为几乎每篇文章都会提到数据。

标记化是将文本分割成多个部分的过程。这可以是句子、段落、单词或其他。在我们的例子中,我们将使用按单词拆分,这将获取我们的数据表,并使每个 tweet 中的每个单词在一个表中占一行。下面我选择感兴趣的列,然后对单词进行标记。

tweets %>% 
select(clean_text, favorite_count, retweet_count) %>%
unnest_tokens(word, clean_text)

这留给我们下面的表格,其中单词“include”、“training”和“operations”最初都是 clean_text 列中同一行的一部分。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在我们继续对 tidytext 包中的 stop_words 数据集进行反连接。这将删除属于 tweets 数据集和 stop_words 数据集的所有单词(本质上,这将从您的数据中删除停用词)。这方面的代码如下。

tweets %>% 
select(clean_text, favorite_count, retweet_count) %>%
unnest_tokens(word, clean_text) %>%
anti_join(stop_words)

获得平均收藏和转发

使用 tidyverse 中的 groub_by()和 summarise()函数,我们可以获得数据集中每个单词的收藏和转发次数的中位数。我在这里选择使用中位数来消除一些异常值可能对我们的数据产生的影响。

tweets %>% 
select(clean_text, favorite_count, retweet_count) %>%
unnest_tokens(word, clean_text) %>%
anti_join(stop_words) %>%
group_by(word) %>% 
summarise("Median Favorites" = median(favorite_count), 
  "Median Retweets" = median(retweet_count),
  "Count" =  n())

过滤结果

我们希望看到有最多人喜欢/转发的单词来通知我们应该写些什么。但是让我们考虑一个单词只使用一次的情况。例如,如果有一篇关于数据科学应用于密歇根地理的非常受欢迎的文章,我们不希望这使我们偏向于写关于密歇根的文章。为了解决这个问题,我用 filter()函数过滤掉至少 4 条 tweets 中没有使用的所有单词,然后用 arrange()函数对结果进行排序。留给我们最后一点代码。

tweets %>% 
select(clean_text, favorite_count, retweet_count) %>%
unnest_tokens(word, clean_text) %>%
anti_join(stop_words) %>%
group_by(word) %>% 
summarise("Median Favorites" = median(favorite_count),
  "Median Retweets" = median(retweet_count), 
  "Count" =  n()) %>%
arrange(desc(`Median Favorites`)) %>%
filter(`Count` > 4)

决赛成绩

因此,如果您想跳到最后看看结果如何,或者不想自己运行这段代码,下面是结果。这些是《走向数据科学》中的常用词,根据包含该词的推文通常获得的喜爱程度进行排名。

  1. 网站— 84.5 收藏夹
  2. 金融——72 个最爱
  3. 动作— 66 个收藏夹
  4. matplotlib — 59.5 收藏夹
  5. 绘图— 57 个收藏夹
  6. 漂亮— 55.5 个最爱
  7. 作品集— 51 个最爱
  8. 探索— 47 个最爱
  9. github — 46.5 收藏夹
  10. 综合— 46 个收藏夹

注意:我不得不删除“詹姆斯”这个词,因为显然有一个作者非常喜欢这个名字。恭喜你,詹姆斯!

我现在的建议是写一篇题为“用 Matplotlib 创建漂亮的财务图的综合指南”之类的文章。现在,你可以对任何其他拥有公共账户的 twitter 用户重复这个过程。

SKlearn 中最强大的组合拳:Pipeline & GridSearchCV

原文:https://towardsdatascience.com/the-most-powerful-one-two-punch-in-sklearn-pipeline-gridsearchcv-9fd5b66f1819?source=collection_archive---------46-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

澳门图片社Unsplash 上拍摄的照片

额外的好处:没有更多的意大利面条代码

有没有被自己的意大利面卡住过?

听起来很美味。

但是对于编码人员来说,这是非常令人沮丧的。

我将尝试为您提供两种工具,它们将缩短您的代码,并让您重新控制您必须经历的许多迭代,以优化您的机器学习工作流,而不是逆来顺受。

你的模型构建代码是什么样的?

我的过去是这样的:

管道

上面的代码可以通过 Sklearn 中的管道模块以一种更加简洁和容易的方式编写。

GridSearchCV

假设我们希望优化我们的分类器,并通过不同的参数进行迭代,以找到最佳模型。最好的方法之一是通过 SKlearn 的 GridSearchCV 。它可以从您输入的参数集中为您提供最佳参数。

强力组合

继续拳击的比喻,把这个钩子和刺拳放在一起会形成一个强大的组合。

它肯定会让你大吃一惊。

我们将有一个非常干净灵活的机器学习工作流程,只需要几行代码:

最后,我们可能希望使它更加通用,这样我们就可以迭代几个不同的模型、参数和特性操作。

使用这个函数,我们现在可以有一个非常短的主函数:

请享受使用这一个二打孔机学习组合!

以前发表的文章包括:

改善电子表格预测的最强大的东西

原文:https://towardsdatascience.com/the-most-powerful-thing-that-improves-spreadsheet-forecasting-447d6168e5d6?source=collection_archive---------84-----------------------

用一个简单的清单来避免忽略它

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

艾萨克·史密斯在 Unsplash 上拍摄的照片

我在我参加过最无聊的项目管理研讨会上睡着了。话题已经转到预测预算和进度上,这时老师突然问道:“你们中有多少人上过校对课?”不要举起手来。下一个问题更具修辞性,类似于“你们中的大多数人大部分时间都在做检查和校对,但你们从未接受过这方面的培训?”这达到了预期的效果——在接下来的几年里,我参加了几门校对文本文档、计划和规范以及电子表格的课程。

要改进你的电子表格,你能做的最重要的一件事就是制定一份校对清单。我知道那既无聊又老套。这话有些道理。另一方面,我并不是建议一个令人痛苦的标准格式,或者一个繁重的质量保证计划,甚至是高度技术性的调试协议。每次开发电子表格时,只要遵循一个简单的校对清单,就能提供可靠、易懂和有见地的结果。

校对清单

清单被定义为一系列需要的项目、要做的事情或要考虑的要点,用作提醒。在实践中,核对表用于更好地组织任务,并轻松验证最重要的任务。在业务流程中,清单有助于减少错误,确保一致性和完整性。检查表不能代替政策或程序。

你的购物清单是最简单的例子。它提醒你什么是重要的,帮助你不要忘记一些事情;然而,它不能帮助制定你应该(或不应该)吃什么的政策,也不能指导你如何去商店或购物的顺序。

校对清单应该包括三个主要方面和几个子方面。

影响图

影响图是一个问题的可视化显示,它描述了目标、关键元素和依赖关系。不同方面之间的影响用连接箭头表示。影响图是最先进的计算机编程的一个正常部分,但是在电子表格的世界里却被可悲地忽略或跳过。影响图很重要,因为它使校对电子表格的人能够直观地(容易地)理解问题及其界限。

将“影响图”作为校对清单中的一行。最重要的是在你的电子表格中建立可视化图表。是的,还有其他准备工作,如问题陈述、边界条件、数据验证、选择正确的工具(例如,你真的想使用电子表格吗?),以及结果的验证。让影响图保持简单、简洁和可视化。

质量的三个层次

校对清单的顶层由三个主要类别组成:模型在不崩溃的情况下计算结果;模型计算做了预期的事情(逻辑错误);而且,这个模型构造得很好,很容易转移给其他人。有许多方法可以解决这些类别中的每一个。最重要的问题是评审活动至少包括每个类别中的一个活动。伟大的思想会在细节活动上有所不同,一如既往,在某些情况下这是一个偏好的问题。

与确保模型计算达到预期目的相关的最巧妙的方法是用全范围的输入对模型进行压力测试。换句话说,仅仅检查基本情况通常很难理解全部功能。否则,Excel 会很好地提供错误消息和线索来修复基本的计算问题。

识别和处理逻辑错误是最困难的方面。此活动下的一些活动可以包括:创建单独的摘要图表,尤其是在执行时序分析时;检查模型中计算的绩效比率之外的绩效比率;以不同的方式重新计算和汇总产出,并将敏感度与模型进行比较;和执行灵敏度分析。发现逻辑错误需要一种结构化的方法,在模型之外做一些额外的工作,以及直觉上什么是有意义的。

另一种独特但未被充分利用的方法与灵敏度图有关,包括那些使用概率方法的方法。敏感性图的一种常见形式是龙卷风图,它在顶部用宽条表示较重要的不确定性来源,在底部用窄条表示不太重要的不确定性来源。校对检查是所有的条应该接触代表总成本或收入的某种形式的中心垂直线。如果横条没有碰到垂直线。那么该输入对模型的结果没有影响。这个模型很有可能没有像预期的那样工作。创建龙卷风图,并寻找“飞行棒”。

审查一个模型以确定它是否被很好地构建、理解和转移给其他人是一个好的实践、文档和版本控制的功能。其中一些将在下一节讨论。然而,最重要的是要认识到电子表格将被传递给其他人使用和审查。

良好实践

校对清单的第三层也是最后一层包括组织或分析团队认为最重要的 5 到 10 个项目。同样,有许多非常详细的电子表格标准,关于这些标准也有很多争论。这里的要点是要有一些基本的标准,而不是包括所有可能的标准。请记住,清单在实践中用于更好地组织任务,并轻松验证最重要的任务。清单不是完整的政策文件或标准操作程序。

八个潜在的最佳实践包括:

1.包括输入选项卡和结果选项卡

2.对输入、输出和计算的单元格进行不同的颜色编码

3.在等式中,使用输入名称而不是单元格引用(战舰语言)

4.输入名称应该是一个或两个单词

5.所有等式中都应该使用小写字母

6.使用工作模型,并将工作模型标记为不同于主版本

7.指定用于质量保证的代码评审工具和方法

8.确定遗留代码是否(以及在哪里)被导入和利用

总结一下

要改进你的电子表格,你能做的最重要的一件事就是制定一份校对清单。电子表格开发有许多标准,调试代码有更多标准。但是,俗话说,不要只见树木不见森林。在实践中,我们通常会放弃质量分析中最重要的方面。与模型一样,从简单开始,逐步增加复杂性。开发和维护一个基本的校对清单。

我们应该留在数据科学领域吗?

原文:https://towardsdatascience.com/the-most-realistic-data-science-career-guide-d12c4af87cc8?source=collection_archive---------10-----------------------

办公时间

数据科学家的 4 个现实职业选择

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

凯勒·琼斯Unsplash 上拍摄的照片

TL;“数据科学”成为主流已经快 10 年了。我们很少问如何进入数据科学,而是想知道“我应该留下吗?”以及“下一步是什么?”在这篇文章中,我分享了一些关于一些重要但实用的选项的见解——数据科学家的 4 个原型——以及它们的陷阱(对有抱负的数据科学家也很有用)。最后,你可以在最后找到一个现场调查,看看社区的发展方向。

2020 年 5 月 4 日更新: 我收录了一篇讨论调查结果的文章的链接。请在调查部分找到链接。

如果你的职位受到新冠肺炎的影响,并且你在加拿大工作或准备移居加拿大,加入这个开放的 人才帮助列表 寻找技术领域的潜在机会。注意安全,我们会很快度过难关的。

免责声明:本帖未经认可或赞助。我交替使用术语数据科学和 ML。

喜欢读什么? 跟我上 LinkedInTwitter。查看我的“ ”影响与机器学习 ”指南。它有助于数据科学家更好地交流。**

2020 年 2 月 27 日

大约在多伦多因为新冠肺炎而被封锁的三周前,我和一个朋友坐在多伦多市中心我们最喜欢的泰国餐馆里。

****“我应该留在数据科学吗?如果没有,接下来该怎么办?”朋友问。

就像聚会的声音和新鲜餐馆食物的味道一样,如何进入数据科学的问题现在似乎有点遥远。事实上,你可以在谷歌上找到约 30 亿条搜索结果,其中有一条极其具体的分步指南(只有约 20 亿条关于“如何赚钱”)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

截至 2020 年 3 月 25 日的谷歌搜索

然而,我朋友的问题挥之不去。在内心深处,这种紧张是由两个因素驱动的:1)数据科学的期望与现实— 它可能比我们预期的更无聊,以及 2)角色与我们的期望。

那么,有什么选择呢?

  1. 保持同样的角色,将挫败感内化(你可以跳过这篇文章,但请** 在点击关闭前分享🙂)**
  2. 离开目前的职位,但继续在其他地方做数据科学相关的工作(这篇文章是为你写的)
  3. 够了。我完全做完了(你确定吗?在此之前,请考虑选项 2)

但是,去哪里呢?

要知道我们想去哪里,你必须知道我们在哪里。为了更好地了解替代方案,我们许多人可能会问“什么是数据科学?”如果你在谷歌上搜索这个短语,我们可能会看到这样的内容:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

什么是数据科学,图片来源

这种分类是有道理的,但它并没有真正抓住 日常工作 公司性质的现实和细微差别。 这两个因素可以说是我们做职业决策时最重要的。

有一种更好的方式来思考这个问题。所以,让我向你展示数据科学家的原型**。**

请稍等…

在我们开始之前,重要的是考虑我的背景和旅程,这样你可以根据你自己的现实和限制来翻译我的见解。

简而言之我见证了数据科学的演变,为大型企业提供咨询,与许多类型的数据科学家成为朋友,并在一家最终被收购的人工智能初创公司构建 ML 产品。

我的观点只是一个数据点(希望这是一个有用且独特的数据点),所以请留意其他人的观点。希望最后的调查能有所帮助。

选项:数据科学家的原型

那么,什么是数据科学?这取决于公司的规模**(企业或初创企业)和角色的主要职责(面向客户或专注内部)。**

当你面试一个数据科学职位时,尽管有头衔和工作描述,但很有可能归入以下四个过于简单且带有主观标签的类别之一。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据科学家的四种原型。作者的分析

****你怎么能使用这个?原型向你展示了可能性。它让你看到你现在在哪里,以及眼前的选择是什么。对于有抱负的数据科学家来说,你可以用这个来计算你的最佳起点。

接下来,你可能会问:我怎么知道新角色是否更适合我?

为了帮助你决定,这里有一些每个角色的优点和缺点。此外,我将讨论最适合的人才概况。当然,这些有点主观:对我好的可能对你不好。总有例外。所以你自己做判断吧。

注:

  1. 您还可以根据公司的其他方面进行分类,例如行业和产品类型(例如,与数据科学相关的服务或工具、非数据科学产品)。我认为公司的规模对日常工作的影响更大。
  2. 公司规模不是二元的,有许多中型公司;为了简单起见,我将其二进制化。
  3. 在初创企业,面向客户和内部员工之间的墙并不真正存在;人们倾向于两者兼顾。只是时间分配的问题。

1 —昂贵的顾问

全球咨询公司的数据科学服务或大型技术公司的专业服务部门(如德勤、麦肯锡、埃森哲、谷歌、IBM 等)。)

吉菲

:非常好的解决问题和高效工作的培训。做非常“重要”的事情,因为客户为结果支付高额费用。每个项目都可以不同,以防你感到无聊或沮丧。非常明确的晋升途径和要求(例如,从分析师、经理到合作伙伴)。接触高级管理人员,早期职业生涯中的广泛话题,以及许多雄心勃勃的人。

:商业价值压倒一切(例如科学创新和酷算法)。要求所有资历的工作时间。一些公司可能不会考虑传统合作伙伴轨道的数据科学家(你可能会觉得被边缘化,但不要担心,大多数人都非常尊重)。很多阿尔法人格。

:受过一些技术培训、渴望在大公司里经营自己的“小生意”的商务型人士。刚刚起步、正在寻找导师、想要学习最好的行话并且不介意非常努力的学生。

2 —精通技术的销售人员

在专注于人工智能的初创公司或中型公司担任技术销售或项目领导角色(例如, DessaElement AIH2OClouderaPalantir )。

GIPHY

:你可以从事一些前沿的用例,因为客户通常期待你的创新,而不是交付(乏味的)长期、大规模的转型项目。在重要的战略和产品决策上有更大的发言权。保持敏捷和创新。

不好的一面:一些客户可能不信任你的大项目(例如获得更多预算),这是“灵活创新”的另一面可能需要做大量的“免费”工作来赢得客户的信任。与大公司相比,后台支持较少。产品愿景可能会受到投资者(如果你有错误的风投)或沉没成本心态的影响,而不是真正的市场需求。

:希望在早期阶段与公司一起成长,实现创业梦想,并且已经拥有坚实的商业网络、领域专长和/或声誉的人。不适合新手,因为你需要立即行动。

3 —产品嬉皮士

具有软件和/或 ML 背景的人,他们与工程人员一起在人工智能产品公司建立 IP、演示和支持销售电话。

吉菲

:致力于有趣和实际的问题,而不必处理太多的客户政治。短期项目。作为“内部用户”来影响或定义产品应该如何设计为客户或内部人员制作酷的东西。

:可能会被拉进一个面向客户或用户的角色,这会在竞争优先权和时间管理上造成紧张。很难在“前沿”和“立即实用”之间找到正确的平衡可能会陷入无休止的客户支持工作中。

:以产品为导向、以工程为中心,但有时又很粗鲁的人。经验丰富的专业人士,拥有特定技术堆栈或工作流领域的专业知识。具有开放和好奇心的学生,喜欢技术挑战,并能完成任务。

4——大家庭

好吧,家庭可能很复杂,所以这个群体需要分成两部分:无名英雄 超级极客****

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

家庭结构。作者的分析

4.1 — 无名英雄

来自企业内传统 BI、分析和建模团队的人员。他们大多与业务线或职能部门合作(例如营销、风险、财务等)。)在数据科学家这个术语被创造出来之前,他们就是数据科学家。

吉菲

好的 :工作非常专注。接近真实的商业运作。可以访问独特的数据集。能够使用可运行的大规模基础设施。很好的工作生活平衡。对投资决策有影响力或权力。

坏消息 :事情在(大多数)时候会变得缓慢而乏味。通常不被认为拥有 21 世纪最性感的工作。内部政治。缓慢的职业轨迹。被某些角色或项目所束缚。

:在生活中找到激情或喜欢在特定领域投入时间的人。不在乎炒作的人。有很多耐心和韧性的人。

4.2 —超级极客

数据科学中“金童”的刻板印象。在 R&D 大公司工作的人,比如谷歌大脑/ DeepMind,脸书博览会,优步,沃尔玛研究等等。

吉菲

:从事非常理智的话题。能够接触到独特的数据集和问题。能够利用大公司的资源挑战极限。获得很多认可和赞扬。

:因不得不展示“商业价值”而产生的强烈紧张感。业务优先级可以限制或影响研究主题。如果研究证明了价值,可能会陷入“无聊”的实现中。

最适合 :学院派。对学术研究和教育背景非常感兴趣的工程师。希望发表文章并接触一些行业的研究生。

下一步是什么

现在你已经很好地掌握了什么是可能的,问自己这些问题:

  • 我现在在哪里?我为什么会沮丧?
  • 在我的数据科学职业生涯(或总体生活)中,我真正想要的是什么?
  • 目的地是否提供了可感知的缓解和好处?(希望本文能提供一些见解)
  • 我有哪些可行的选择?
  • 我如何以最少的努力和最好的结果到达那里?

在下一篇文章中,我将分享一些常见的和非常规的路径及其挑战。敬请关注我的 LinkedIn,或Twitter

现场调查

这里有两个调查,希望了解我们的现状和我们想要达到的目标。所有数据都是匿名收集的。这不是用于任何商业目的,而是为了满足社区的好奇心。

这里有一篇文章讨论了这次调查的结果。

** [## 越线

数据科学家最受欢迎的过渡路线

towardsdatascience.com](/the-best-data-science-transition-routes-e809254934d0)**

喜欢读什么? 跟我上 LinkedIn,或者Twitter。还有,作为一名数据科学家,要不要学习商业思维和沟通技巧?查看我的“ ”影响与机器学习 ”指南。**

以下是我的一些文章,你可能会喜欢:

** [## 最有用的 ML 工具 2020

每个懒惰的全栈数据科学家都应该使用的 5 套工具

towardsdatascience.com](/the-most-useful-ml-tools-2020-e41b54061c58) [## 被遗忘的算法

用 Streamlit 探索蒙特卡罗模拟

towardsdatascience.com](/how-to-design-monte-carlo-simulation-138e9214910a) [## 数据科学很无聊

我如何应对部署机器学习的无聊日子

towardsdatascience.com](/data-science-is-boring-1d43473e353e) [## 12 小时 ML 挑战

如何使用 Streamlit 和 DevOps 工具构建和部署 ML 应用程序

towardsdatascience.com](/build-full-stack-ml-12-hours-50c310fedd51) [## ML 和敏捷注定的联姻

如何不对 ML 项目应用敏捷

towardsdatascience.com](/a-doomed-marriage-of-ml-and-agile-b91b95b37e35) [## 无用的机器学习

通过解决信任时刻来设计有用的 ML

towardsdatascience.com](/useless-machine-learning-momemts-of-trust-54c5a6c5f701)**

自工业革命以来最重大的变化

原文:https://towardsdatascience.com/the-most-significant-change-since-the-industrial-revolution-9b2b3dad199e?source=collection_archive---------59-----------------------

人工智能在当今工业中的应用概述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

奥马尔·弗洛雷斯在 Unsplash 上拍摄的照片

人工智能(AI)在工业 4.0 中的应用已经烘烤了相当长一段时间,但技术现在已经足够成熟,可以将其变为现实。它涉及制造过程中的数据融合和智能自动化以及人工输入。为此,它利用了各种技术,如物联网、云计算、区块链等。让我们花一点时间来理解为什么使用人工智能是重要的。

如果你是一家制造厂的老板,那么你可能熟悉各种机器协同工作,每天生产数千台设备。监控同时进行的不同过程已经是一件非常头痛的事情。最有可能的是,为了确保至少维持生产水平,你要受各种经营者的支配。然而,即使你采取了尽可能好的措施来降低风险并确保一切顺利进行,事情还是会出错。当他们这样做时,混乱就会爆发,直到主要问题得到解决。当问题在周末或公共假期出现时,事情会变得更加复杂,因为熟练专业人员的可用性非常有限且成本高昂。当生产停止时,显然会导致财务损失,这也可能影响生产期限。大型生产过程通常依赖于原材料、零件或其他物品的仓库。所有这些都需要大量资金,如果管理不当,还会带来巨大的风险。光是处理这些资产就已经让管理层非常头疼了。我们甚至还没有开始考虑如何改进工厂;也许通过优化或改变基本配置。但有时,在处理遗留系统时,任何变化都可能是灾难性的,因此,管理层可能会对市场不断变化的需求反应迟钝。有时,一切都太晚了,缺乏果断的行动会导致工厂走向毁灭。

这些场景听起来是不是太熟悉了?好的一面是,利用今天的技术,大部分问题都可以很容易地解决。为了理解我们的意思,让我们举几个例子。

远距离微监控

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

XR ExpoUnsplash 上拍摄的照片

考虑管理一个有数百台机器的工厂,像时钟一样工作。让事情变得复杂的是,让我们想象有一个以上的工厂分布在世界各地,位于不同的时区。你如何管理所有这些?

答案是一个人无法微观管理!你需要有人去做,尤其是当人数开始增加的时候。但是我们都知道人不是不会犯错的。解决方案是安装一个智能数字双(IDT)系统,该系统能够全天候不间断地监控您的所有机器,而不管它们实际位于何处。你可以忘记它,让系统处理出现的问题,同时只在真正需要你注意的时候提醒你。此外,它还能让你安心,因为你可以在需要时实时放大任何机器的内部工作情况。随着虚拟现实(VR)耳机或增强现实(AR)眼镜等工具的出现,你可以使用 VR 虚拟地被运送到制造工厂,或者使用 AR 虚拟地将工厂运送到你的办公室。混合现实体验可以在世界上的任何地方享受,并允许您实时查看您的设施的每个部分。

优化您的工厂

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由digity MarketingUnsplash 上拍摄

工厂优化和改进是一个巨大的游戏改变者。然而,它经常被忽视,因为俗话说:

“如果它没坏,就不要修理它”

但这有多真实呢?有人尝试过计算用不同方式做事的机会损失吗?最有可能的是,这种情况永远不会发生,因为通常情况下,您必须依靠专家来深入了解这些信息。除非专家有时间(他们通常没有),或者如果他们没有得到管理层的鼓励,他们永远不会这么做。但管理层很少关注这些事情,因为他们忙于工厂的日常运营,所以事情会不断恶化,直到系统突然失灵或竞争优势因系统效率低下而开始消失的那一天。

有了人工智能,这种情况就改变了,因为系统实际上执行这些计算,不需要任何人的提示。它将不断分析供应链,并快速模拟任何特定工作的理想和最有效的场景。它通过查看当前的生产,预测潜在的停工时间,在管道中插入新任务,并根据最后期限(如交付目标、可用材料等)提出建议。只需点击一个按钮。人工智能的最终目标是确保生产工厂始终处于优化状态,并根据工厂车间发生的变化不断地实时重新调整这些优化参数。

预测未来

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

杰里米·帕金斯Unsplash 上拍摄的照片

预测未来并不容易,但它是一个非常可取的功能,尤其是当人们考虑到机器停机时间等问题是造成生产损失的最大因素之一时。事实上,80%的公司无法计算他们的真实停机成本。平均而言,公司每天记录 4 小时的停机时间!

许多人试图完成这一壮举,但很少有预测能真正经受住时间的考验。然而,在处理一个封闭的系统时,过去的事件可以很好地预示未来会发生什么。制造工厂中的机器可以被认为是一个封闭的系统,已经运行了几个月,在某些情况下甚至几年。由于本质上是机械的,它们不断地记录大量宝贵的诊断数据,这些数据可能存在于某个数据库中,以备工程师需要。事实上,筛选所有这些数据是相当痛苦的,正是因为它的数量,所以人们很少参考它。

然而,人工智能系统擅长处理大量数据并进行分析。具体来说,他们发现定位模式相当容易,这些模式可以很好地预示将要发生什么。因此,人工智能系统可以很容易地预测机器什么时候会出故障,原因是什么。这将允许电厂组织规定的维护,从而将管理层对计划维护的严格依赖转变为能够根据实际事件采取实时行动。

此外,该系统不仅可以预测潜在的故障,还可以帮助管理层确定问题的根本原因。因此,一些故障可能会从生产周期中一劳永逸地消除,而其他故障将会及时得到处理。这样,计划外停机时间可以大大减少,甚至在某些情况下消除,从而最大限度地提高盈利能力和设备可靠性。

乐高工厂

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unsplash 上由amlie Mourichon拍摄的照片

在一个理想的世界里,人们会把机器集合起来,移动它们,直到找到正确的配置。这将最大限度地降低成本,优化可用空间。此外,当工厂开始发展和增加新的机器时,不同的配置可能是有益的。实际上,这种情况不会发生,因为这样做需要花费大量的时间和精力,甚至可能得不偿失。

然而,使用 IDT 系统,这可以很容易地实现。IDT 系统已经有了所有机器的虚拟副本,并且它们的状态是实时更新的。由于移动虚拟机和改变配置就像玩乐高一样,因此改变系统的配置就成了小孩子的游戏。可以添加或删除机器,并且可以使用系统已经拥有的历史信息很容易地模拟它们的输出。因此,为了找出可能的最佳配置,管理人员或控制工厂的人工智能系统可以设置不同的试验。一旦完成,就要评估这种配置的价值,如果它超过了成本,就可以在工厂的物理系统中进行部署。

简化资产管理

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Nana SmirnovaUnsplash 上的照片

管理一个组织中的所有资产是一件令人头痛的事情,尤其是在拥有数百台甚至数千台机器同时工作的工厂中。因此,预测变得更有价值,尤其是在管理备件采购以更换有缺陷的部件时,或者在规划即将到来的机器重新配置时。在这样做的时候,人工智能系统可以用来浏览在线商店,估计零件的成本(考虑交货日期等)。)并预测总拥有成本。

所有组件;购买的和通过制造过程生产的都可以通过它们的唯一标识符来跟踪。其中一些将使用射频识别(RFIDs)等技术进行标记,这些技术可以无缝地向中央系统提供有关组件物理移动的信息。因此,通过点击一个按钮,管理该系统的人将在任何一个时间点对工厂中所有可用的实际库存有一个最新的概览。永无止境盘点的日子已经一去不复返了。该系统将提供额外信息,如已订购产品或运输中的产品。此外,如果跟踪模块建立在区块链系统上,可以确保任何产品的完全可追溯性;从构成产品的原材料开始,直到产品生命周期结束的回收阶段。

更好的决策

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

斯科特·格雷厄姆Unsplash 上拍照

IDT 系统公司将协助管理层提供及时的信息,在数据海洋中进行筛选,并对各工厂的运营情况进行总结。毫无疑问,他们将成为管理人员的私人助理,不仅能够提供准确的快照,还能实时突出关注领域。

此外,将会有一天,组织的管理将被委托给人工智能系统,从而自动化整个决策过程。决策将以光速做出,一旦有事情发生,就会立即采取纠正措施。经理们将从日常的微观管理中解脱出来,他们可以从宏观的角度来看待工厂,并根据董事会的指示花更多的时间来规划未来的改进。

结论

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unsplash 上的twist拍摄的照片

未来的工业看起来光明而令人兴奋。但是未来从今天开始,因为上面提到的大部分技术都已经存在。那么,你还在等什么呢,跟上变革的潮流,让你的组织为未来的挑战做好准备吧!

如果你喜欢这篇文章,并想与我联系,请这样做🐦推特,🔗领英,📷 Instagram 或者😊脸书

[## 坐在一堆数字黄金上

如何利用你已有的资源改变你的组织!

towardsdatascience.com](/sitting-on-a-pile-of-digital-gold-f20b74e0ae47) [## 如何使用人工智能提升你的业务

一本给没有人工智能背景的人的简明指南

towardsdatascience.com](/how-to-pump-up-your-business-using-ai-ff9d7edb1d77) [## 一个全新的人工智能世界

疫情之后人工智能的兴起

towardsdatascience.com](/a-whole-new-ai-world-6a5e9e49aa12)

Alexei DingliProf 是马耳他大学的 AI 教授。二十多年来,他一直在人工智能领域进行研究和工作,协助不同的公司实施人工智能解决方案。他的工作被国际专家评为世界级,并赢得了几个当地和国际奖项(如欧洲航天局、世界知识产权组织和联合国等)。他出版了几本同行评审的出版物,并成为马耳他的一员。由马耳他政府成立的人工智能工作组,旨在使马耳他成为世界上人工智能水平最高的国家之一。

数据科学中最被低估的工具:NumPy

原文:https://towardsdatascience.com/the-most-underrated-tool-in-data-science-numpy-68d8fcbde524?source=collection_archive---------19-----------------------

NumPy 的强大功能以及如何有效地使用它

数据科学的一切都始于数据,数据有多种格式。数字、图像、文本、x 光、声音和视频记录只是数据源的一些例子。无论数据以何种格式传入,都需要转换成数字数组进行分析。复杂的计算机视觉模型无法像人类一样看到或处理图像。在分析之前,图像被转换成一组数字。因此,在数据科学中有效地存储和修改数字数组是至关重要的。NumPy(数字 Python)是一个科学计算包,它提供了非常实用的方法来创建和操作数字数组。所以我们对 numpy 的了解绝对要多于“把 NumPy 当 np 导入”。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图来源

Python 列表处理混合数据类型。例如,我们可以创建一个包含整数、浮点数、字符串和布尔值的列表。但是,NumPy 数组的所有元素必须属于同一类型。这听起来好像列表比 NumPy 数组更受欢迎,NumPy 数组对于小型列表可能是正确的。然而,我们几乎总是在现实生活的数据集中处理非常大的数字数组。就存储和处理而言,NumPy 数组比列表有效得多。

值得注意的是,最常用的数据分析工具熊猫是建立在 NumPy 之上的。

在这篇文章中,我将通过例子介绍 NumPy 数组的基础知识。

创建 NumPy 数组

我们可以从 python 列表创建一个数组:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以使用 dtype 明确选择数据类型:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们还可以使用嵌套列表创建更高维的数组:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

NumPy 有内置函数来从头开始创建数组,这样我们就不需要传入值了。01函数分别创建充满 0 和 1 的数组。 full 功能允许选择要填充到数组中的值。我们只需要传入维度:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们也可以使用arrange函数在特定范围内创建一个具有特定增量的数组:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

前两个参数指定范围,第三个参数是增量的大小。请注意,上限值不包含在内。

在一个范围内创建数组的另一种方法是 linspace 函数。在 linspace 函数中,我们需要在指定的范围内选择我们想要多少个值(不是增量的大小):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这些值是等距的,下限和上限都包括在内。记住上限不包括范围功能。

我们有时需要随机数据集进行实践或实验分析。NumPy 的 random 函数用随机数创建数组:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • random.random 创建 0 到 1 之间均匀分布的随机值。
  • random.normal 的自变量依次为均值、标准差和极差。
  • random.randint 创建指定范围内具有指定维数的整数数组。

我们在上面的例子中创建了数组,所以我们知道它们的属性。我们不会总是事先知道这些特性。NumPy 提供了 ndimsizeshape 方法来了解数组:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

访问数组元素

访问单个元素或数组片段类似于 Python 列表的相同操作:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第一个元素的索引是 0。如果从末尾开始,第一个元素的索引是-1,第二个元素是-2,以此类推。要访问数组的一部分,我们需要指定上限和下限,中间用冒号隔开。如果不指定下限(即[:3]),就从头开始。同样,如果没有指定上限,上限就是数组的结尾。请注意,指定的范围上限是唯一的。

选择一个范围内的单个元素或所有元素不是唯一的选项。在某些情况下,我们可能需要访问每第二个或第三个元素。此任务的语法是[开始:结束:步骤]。通过示例,这一点变得更加清楚:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果未指定下限值和上限值,数组的开始和结束将作为下限值和上限值。

要访问多维数组的元素,可以使用逗号分隔索引或嵌套索引:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对数组的操作

数组是可变的,所以我们可以改变数组中元素的值:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以使用整形功能改变数组的尺寸:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

算术运算可以作为矢量化运算在数组上进行。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

NumPy 还提供了数学函数,用作矢量化运算。这些功能也被称为 ufuncs (通用功能)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

NumPy 中还有许多其他的 ufuncs。你可以随时查看 NumPy 官网上的文档了解更多详情。

注: 向量化运算的优势在于执行速度。我在这里展示的例子包括小数组。然而,在实际项目中,我们需要对非常大的数字数组(即 100 万个元素)进行操作,这对速度至关重要。

我已经介绍了一些基础知识,但是 NumPy 提供了更多的东西,我计划在第二篇关于 NumPy 的文章中介绍。您可以随时访问官方网站获取更详细的信息。

感谢您的阅读。如果您有任何反馈,请告诉我。

我的其他帖子

数据分析

机器学习算法

参考文献

数据科学中最常用的概率分布

原文:https://towardsdatascience.com/the-most-used-probability-distributions-in-data-science-5b3c11d34bfe?source=collection_archive---------30-----------------------

统计学和概率是数据科学家箭袋中最好的箭。让我们看看一些常用的概率分布

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

统计学是数据科学家简历中的必备技能,因此如果有人想使用数据和机器学习模型,就必须提前了解一些概念和主题。

概率分布是必备工具。让我们来看看数据科学家应该知道的最重要的几条。

均匀分布

最简单的概率分布是均匀分布,它赋予一个集合中的任意点相同的概率。

在其连续形式中, ab 之间的均匀分布具有这样的密度函数:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是它是如何出现的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如你所见,范围越大,分布越低。这对于保持面积等于 1 是必要的。

均匀分布无处不在。任何蒙特卡罗模拟都是从生成均匀分布的伪随机数开始的。例如,在计算置信区间的自举技术中使用均匀分布。这是一个非常简单的分布,你会经常发现它。

正态分布

所有发行版中的女王,也可能是最著名的。如果你有一些有限方差的随机和独立变量,它们和的概率分布收敛于高斯分布。

这是概率密度函数:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

μ和σ是分布的平均值和标准差。平均值是峰值位置,而标准差与宽度有关。标准差越高,分布越大(峰越低,以保持面积等于 1)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

高斯分布的一个特殊情况是正态分布,其均值等于 0,标准差等于 1。

每个使用最小二乘法的回归模型都假设残差是正态分布的,因此了解我们的数据是否是正态分布的非常重要。用于比较两个数据集中模型残差方差的 F 测试假设残差呈正态分布。如果你从事数据科学工作,你和高斯分布将很快成为最好的朋友。

学生 t 分布

一个非常特殊的分布是学生的 t 分布,其概率密度函数为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

自由参数 n 称为“自由度”(通常缩写为 d.o.f .)。很容易看出,对于较高的 n 值,t 分布更接近正态分布。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果您必须比较不同样本的平均值或样本的平均值与总体的平均值,并且如果样本取自高斯分布,您通常会使用学生 t 检验,这是一种使用学生 t 分布进行的假设检验。也可以使用学生的 t 检验来检查两个变量之间的线性相关性。因此,在未来的数据科学家职业生涯中,您很可能会需要这种分布。

卡方分布

如果你取一些正态分布且独立的随机变量,取它们的平方值并求和,你得到一个卡方变量,它的概率密度函数是:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

k 是自由度的个数。它通常等于您求和的正态变量的平方数,但有时如果这些变量之间存在某种关系,它会减少(例如,曲线拟合问题中的模型参数数)。

以下是这种分布的一些例子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

您将在皮尔逊卡方检验中使用卡方分布,该检验在某些假设下将实验直方图与理论分布进行比较。卡方分布与方差相等的 F 测试相关,因为 F 分布是作为两个卡方变量之间比率的概率分布计算的。

对数正态分布

如果取一个高斯变量并对其取指数,则得到对数正态分布,其概率密度函数为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

μ和σ与原始高斯分布相同。

以下是一些例子:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对数正态分布在自然界中被广泛测量。血压遵循对数正态分布、城市规模等等。一个非常有趣的应用是在几何布朗运动中,这是一个随机行走的模型,通常用于描述金融市场,特别是在期权定价的布莱克-斯科尔斯方程中。

正如高斯分布在自然界中广泛存在于实域中的可观测量一样,对数正态分布对于具有正值的可观测量几乎同样常见。你可以注意到强烈的不对称性和长尾效应,这两种现象在处理正变量的许多情况下都很常见。

二项分布

二项分布通常被描述为抛硬币概率分布。它测量两个事件的概率,其中一个以概率 p 发生,另一个以概率 1-p. 发生

如果我们的事件是 0 和 1 的数字,并且 1 事件以 p 的概率发生,我们可以很容易地用狄拉克δ分布写出密度:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一种可能的表示如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

二项分布是任何概率课程的基本工具,在数据科学家的职业生涯中,可能会出现多次。想想二元分类模型,它处理 0-1 变量及其统计数据。

泊松分布

泊松分布通常被描述为罕见事件的分布。一般来说,如果一个事件以固定的速率在时间内发生(即每分钟 3 个事件,每小时 5 个事件),那么在时间单位内观察到若干 n 个事件的概率可以用泊松分布来描述,泊松分布的公式如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

μ是单位时间内的事件率。

以下是一些例子:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如您所见,其形状类似于高斯分布,峰值等于μ。

泊松分布在粒子物理学中非常常用,在数据科学中,它可以用于描述具有固定速率的事件(例如,早上进入超市的顾客)。

指数分布

如果泊松事件以固定的时间速率发生,则该事件两次连续发生之间的时间间隔呈指数分布。

指数分布有这样的密度函数:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

τ是两个连续事件之间的平均时间间隔。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

指数分布用于粒子物理学,一般来说,如果您想从泊松过程(在此过程中,您研究事件的数量)转移到与时间更相关的东西(例如,两个连续的顾客进入商店之间的时间间隔)。

结论

数据科学和统计学是两个非常相关的主题,如果不了解后者,就不可能很好地处理前者。在本文中,我向您展示了在您的数据科学家职业生涯中会发现的一些最重要的概率分布。可以找到其他分布(例如伽马分布),但在数据科学家的日常工作中,他可能会使用这里描述的分布之一。

最有用的 ML 工具 2020

原文:https://towardsdatascience.com/the-most-useful-ml-tools-2020-e41b54061c58?source=collection_archive---------2-----------------------

每个懒惰的全栈数据科学家都应该使用的 5 套工具

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unsplash创作八的照片

TL;构建好的机器学习应用程序就像做米其林风味的菜肴。拥有一个井井有条、管理有序的厨房至关重要,但有太多选项可供选择。在本文中,我强调了我发现的在交付专业项目中有用的工具,分享了一些想法和替代方案,并做了一个快速的实时调查(您可以在参与后看到社区的想法)。

像任何工具讨论一样,这个列表并不详尽。我试图专注于最有用和最简单的工具。欢迎评论区的任何反馈,或者告诉我是否有更好的选择。

免责声明 :本帖没有背书或赞助。我交替使用术语数据科学和 ML。

喜欢读什么? 跟我上 LinkedIn,以及*Twitter。查看我的《 用机器学习影响 》指南。它帮助数据科学家更好地解决问题、设计和交流。*

“我如何构建好的机器学习应用?”

在与学校中有抱负的数据科学家、希望转行的专业人士和团队经理的聊天中,这个问题以各种形式出现了多次。

交付专业数据科学项目有许多方面。像许多其他人一样,我喜欢用在厨房做饭来做类比:有配料(数据),食谱(设计),烹饪过程(嗯,你独特的方法),最后是实际的厨房(工具)。

所以,这篇文章走过我的厨房。它强调了设计、开发和部署全栈机器学习应用的最有用的工具——与系统集成或在生产环境中为人类用户服务的解决方案。

如果你想了解更多关于交付 ML 的其他方面,请点击这里查看我的文章。

压倒一切的可能性

我们生活在一个黄金时代。如果你在谷歌上搜索“ML 工具”或者咨询顾问,你很可能会得到这样的结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据& AI 景观 2019,图片来源

吉菲

外面有*(太多)工具**;可能的组合是无限的。这可能会令人困惑和不知所措。所以,我来帮你缩小范围。也就是说,没有完美的设置。这完全取决于你的需求和约束。因此,挑选,选择,并相应地修改。*

我的列表优先考虑以下几点(不按顺序):

  • 自由的💸
  • 易于学习和设置🧸
  • 未来证明(采用和工具成熟度)♻️
  • 工程超过研究🤖
  • 为初创企业或大型企业的大项目或小项目工作🚀
  • 完成任务就行了💪

警告:我使用 Python 🐍 99%的时候。因此,这些工具可以很好地与原生 Python 一起工作,或者用原生 Python 构建。我没有用其他编程语言测试过它们,比如 R 或 Java。

1.冰箱:数据库

PostgreSQL

一个免费的开源关系数据库管理系统(RDBMS ),强调可扩展性和技术标准遵从性。它旨在处理一系列工作负载,从单台机器到数据仓库或有许多并发用户的 Web 服务。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图像来源

替代品: MySQL SAS IBM DB2OracleMongoDBcloud era

2.台面:部署管道工具

管道工具对于开发的速度和质量至关重要。我们应该能够用最少的手工处理快速迭代。这里有一个很好的设置,更多细节请看我的 12 小时 ML 挑战文章。每个懒惰的数据科学家都应该在项目的早期尝试这种方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者作品, 12 小时 ML 挑战

Github

它提供了 Git 的分布式版本控制和源代码管理(SCM)功能,以及它自己的特性。它为每个项目提供了访问控制和几个协作特性,比如 bug 跟踪、特性请求、任务管理和 wikis。

备选:DVCbit bucket GitLab**

皮查姆 社区版

一种用于计算机编程的集成开发环境(IDE ),专门用于 Python 语言。它是由捷克公司 JetBrains 开发的。它提供了代码分析、图形调试器、集成单元测试器、与版本控制系统(VCSes)的集成,并支持使用 Django 进行 web 开发以及使用 Anaconda 进行数据科学。

替代品: 原子 崇高

Pytest

一个框架使得编写小测试变得容易,并且可以扩展以支持应用程序和库的复杂功能测试。它节省了手动测试的大量时间。如果每次修改代码时都需要测试一些东西,那么可以用 Pytest 自动测试。

备选:Unittest

CircleCi

CircleCI 是一个持续集成和部署工具。当您提交 Github 时,它使用远程 dockers 创建了一个自动化的测试工作流。Circle CI 拒绝任何没有通过 PyTest 设置的测试用例的提交。这确保了代码质量,尤其是当您与一个较大的团队一起工作时。

备选: 詹金斯 特拉维斯 CI Github Action

Heroku (仅当你需要虚拟主机时)

平台即服务(PaaS)使开发人员能够完全在云中构建、运行和操作应用程序。可以与 CircleCI 和 Github 集成,实现自动部署。

备选: Google App 引擎, AWS 弹性计算云 其他

Streamlit (仅当您需要交互式 UI 时)

Streamlit 是一个面向机器学习和数据科学团队的开源应用框架。近年来,它已经成为我最喜欢的工具之一。看看我如何使用它和本节中的其他工具来创建一个 电影 模拟 应用

备选: 烧瓶 姜戈 画面

3.iPad:探索工具

流线型(再次)

忘掉朱庇特笔记本吧。是的,没错。

Jupyter 我探索数据、进行分析、试验不同数据和建模过程的首选工具。但是我不记得有多少次:

  1. 我花了很多时间调试(并拔头发),但最终意识到我忘了从头开始运行代码;Streamlit 解决了这个问题。
  2. 我不得不等待一段时间,让我的数据管道重新运行,即使是一个小的代码更改;Streamlit 缓存解决了这个问题。
  3. 我不得不重写代码或将代码从 Jupyter 转换成可执行文件——以及花费在重新测试上的时间;Streamlit 提供了一条捷径。

令人沮丧🤯😭。于是,我用 Streamlit 做前期探索**,服务最终前端——一举两得。以下是我典型的屏幕设置。左边是 PyCharm IDE,右边是结果可视化。试试看。**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

IDE(左)Streamlit 的实时更新(右),作者的作品来自被遗忘的算法

备选: Jupyter 笔记本 Spyder from AnacondaMicrosoft Excel【严重】

4.刀子:ML 框架

就像使用真正的刀一样,你应该根据食物和你想怎么切来选择合适的刀。有通用刀和专用刀。

谨慎。使用寿司专用刀切骨头需要很长时间,尽管寿司刀更亮。选择正确的工具来完成工作。

Scikit-Learn(常见的 ML 用例)

用 Python 进行一般机器学习的首选框架。说够了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Scikit-Learn 的使用案例,来源

备选方案:无,句号。

PyTorch (深度学习用例)

基于 Torch 库的开源机器学习库。鉴于深度学习的重点,它主要用于计算机视觉和自然语言处理等应用。它主要由脸书人工智能研究实验室(FAIR)开发。最近很多知名的 AI 研究机构,比如 Open AI ,都在用 PyTorch 作为他们的标准工具。

替代品:tensor flowKeras Fast.ai**

开放 AI 健身房(强化学习用例)

开发和比较强化学习算法的工具包。它提供了 API 和可视化环境。这是一个社区正在开发工具的活跃领域。目前还没有很多打包好的工具可用。

替代品:很多小项目,但没有多少像健身房一样维护的那么好。

5.火炉:实验管理

图集

这是一个免费的工具,允许数据科学家用一些片段设置实验,并将结果显示在基于网络的仪表板上。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图册流程,来源

免责声明:我在 Dessa 工作,这家公司创造了亚多拉斯。

替代品: ML 流量 SageMaker 彗星 权重&偏见 数据机器人 **

一项调查

**出于好奇,**在寻找合适的工具时,什么最困扰你?我很想听听你下面的想法。这是一个现场调查,所以你在参与后会看到社区的想法。

另一种观点

正如我提到的,没有完美的设置。这完全取决于你的需求和约束。这是可用工具以及它们如何协同工作的另一个视图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2019 年 Sergey Karayev全栈深度学习的演讲

一个小小的挑战

如果你想更多地了解如何使用这些工具,最好的方法是找一个项目来做。你可以将这些工具整合到当前的项目中,或者做一个 12 小时的 ML 挑战。不确定怎么做?查看我如何创建一个用户授权的推荐应用并讨论工具和流程。

我期待看到你能创造出什么。请分享给社区,并在推特上给我加标签🙌。

喜欢读什么? 跟我上 LinkedIn,或者Twitter。还有,作为一名数据科学家,要不要学习商业思维和沟通技巧?查看我的《 用机器学习影响 》指南。

以下是我的一些文章,你可能会喜欢:

** [## 对生活的追求

一个发现为什么许多 ML 项目失败的工具

towardsdatascience.com](/the-pursuit-of-lift-why-ml-projects-fail-f032dc31a303) [## 被遗忘的算法

用 Streamlit 探索蒙特卡罗模拟

towardsdatascience.com](/how-to-design-monte-carlo-simulation-138e9214910a) [## 数据科学很无聊

我如何应对部署机器学习的无聊日子

towardsdatascience.com](/data-science-is-boring-1d43473e353e) [## 12 小时 ML 挑战

如何使用 Streamlit 和 DevOps 工具构建和部署 ML 应用程序

towardsdatascience.com](/build-full-stack-ml-12-hours-50c310fedd51) [## ML 和敏捷注定的联姻

如何不对 ML 项目应用敏捷

towardsdatascience.com](/a-doomed-marriage-of-ml-and-agile-b91b95b37e35) [## 人工智能的最后一英里问题

如何培养人类和人工智能之间的信任

towardsdatascience.com](/fixing-the-last-mile-problems-of-deploying-ai-systems-in-the-real-world-4f1aab0ea10) [## 又一个 AI 冬天?

如何部署更多的 ML 解决方案——五种策略

towardsdatascience.com](/the-last-defense-against-another-ai-winter-c589b48c561)**

多通道神经网络

原文:https://towardsdatascience.com/the-multi-channel-neural-network-26551bdfab6c?source=collection_archive---------14-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

神经网络可以,而且应该,在多种类型的特征上被训练。本教程将介绍如何使用 Keras Functional API 来扩展您的网络。

神经网络广泛应用于多个领域,如计算机视觉、音频分类、自然语言处理等。在大多数情况下,它们在这些领域中被单独考虑。然而,在现实生活中,这很少是最佳配置。更常见的是有多个通道,意味着几种不同类型的输入。类似于人类如何使用广泛的感官输入(听觉、视觉等)来提取洞察力。),神经网络可以(也应该)在多个输入上进行训练。

让我们以情感识别的任务为例。

人类不使用单一输入来有效地分类对话者的情绪。例如,他们不仅仅使用对话者的面部表情(视觉)、声音(听觉)或词语的含义(文本),而是混合使用。类似地,神经网络可以对多个输入进行训练,例如图像、音频和文本,并进行相应的处理(通过 CNN、NLP 等。),以得出对目标情绪的有效预测。通过这样做,神经网络可以更好地捕捉难以从每个通道单独获得的微妙之处(例如讽刺),类似于人类。

系统结构

考虑到情绪识别的任务,为简单起见,我们将其限制为三类(积极、消极和中性),我们可以将该系统想象为如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

该系统通过麦克风拾取音频,将声音的 MEL 声谱图计算为图像,并将其转录为一串文本。这两个信号然后被用作模型的输入,每个信号被馈送到它的一个分支。事实上,神经网络由两部分组成:

  • 左分支,通过卷积神经网络进行图像分类
  • 右分支,使用嵌入对文本执行 NLP。

最后,每一侧的输出被馈送到一组公共的密集层,其中最后一层具有三个神经元,以分别对三个类别进行分类(阳性、中性和阴性)。

设置

在本例中,我们将使用 MELD 数据集,该数据集由带有相关情绪标签的简短对话组成,表明陈述的情绪是积极的、中立的还是消极的。数据集可以在这里找到

你也可以在这里找到这篇文章的完整代码。

图像分类处

声音采集完成后,系统会立即计算音频信号的声谱图。音频分类的最新特征是 MEL 频谱图和 MEL 频率倒谱系数。对于这个例子,我们将使用 MEL 谱图。

首先,我们显然会从包含音频的文件夹中加载数据,在培训、验证和测试中进行拆分:

import gensim.models as gm
import glob as gb
import keras.applications as ka
import keras.layers as kl
import keras.models as km
import keras.optimizers as ko
import keras_preprocessing.image as ki
import keras_preprocessing.sequence as ks
import keras_preprocessing.text as kt
import numpy as np
import pandas as pd
import pickle as pk
import tensorflow as tf
import utils as ut

# Data
Data_dir = np.array(gb.glob('../Data/MELD.Raw/train_splits/*'))
Validation_dir = np.array(gb.glob('../Data/MELD.Raw/dev_splits_complete/*'))
Test_dir = np.array(gb.glob('../Data/MELD.Raw/output_repeated_splits_test/*'))

# Parameters
BATCH = 16
EMBEDDING_LENGTH = 32

然后,我们可以遍历这三个文件夹中的每个音频文件,计算 MEL 频谱图,并将其作为图像保存到新文件夹中:

# Convert Audio to Spectrograms
for file in Data_dir:
    filename, name = file, file.split('/')[-1].split('.')[0]
    ut.create_spectrogram(filename, name)

for file in Validation_dir:
    filename, name = file, file.split('/')[-1].split('.')[0]
    ut.create_spectrogram_validation(filename, name)

for file in Test_dir:
    filename, name = file, file.split('/')[-1].split('.')[0]
    ut.create_spectrogram_test(filename, name)

为此,我们在实用程序脚本中创建了一个用于训练、验证和测试的函数。该函数使用 librosa 包加载音频文件,对其进行处理,然后将其保存为图像:

import librosa
import librosa.display
import matplotlib.pyplot as plt
import numpy as np
import path as ph
import pydub as pb
import speech_recognition as sr
import warningsdef create_spectrogram(filename, name):
    plt.interactive(False)
    clip, sample_rate = librosa.load(filename, sr=None) fig = plt.figure(figsize=[0.72, 0.72])
    ax = fig.add_subplot(111)
    ax.axes.get_xaxis().set_visible(False)
    ax.axes.get_yaxis().set_visible(False)
    ax.set_frame_on(False) S = librosa.feature.melspectrogram(y=clip, sr=sample_rate)
    librosa.display.specshow(librosa.power_to_db(S, ref=np.max))
    filename = 'img/Train/' + name + '.jpg' plt.savefig(filename, dpi=400, bbox_inches='tight', pad_inches=0)
    plt.close()
    fig.clf()
    plt.close(fig)
    plt.close('all')
    del filename, name, clip, sample_rate, fig, ax, S

一旦我们将每个音频信号转换为表示相应频谱图的图像,我们就可以加载包含每个音频标签信息的数据集。为了正确地将每个音频文件链接到它的情感,我们创建一个 ID 列,包含该样本的图像文件的名称:

# Data Loading
train = pd.read_csv('../Data/MELD.Raw/train_sent_emo.csv', dtype=str)validation = pd.read_csv('../Data/MELD.Raw/dev_sent_emo.csv', dtype=str)test = pd.read_csv('../Data/MELD.Raw/test_sent_emo.csv', dtype=str) # Create mapping to identify audio files
train["ID"] = 'dia'+train["Dialogue_ID"]+'_utt'+train["Utterance_ID"]+'.jpg'validation["ID"] = 'dia'+validation["Dialogue_ID"]+'_utt'+validation["Utterance_ID"]+'.jpg'test["ID"] = 'dia'+test["Dialogue_ID"]+'_utt'+test["Utterance_ID"]+'.jpg'

自然语言处理处

同时,我们还需要获取与音频信号相关的文本,并使用 NLP 技术对其进行处理,将其转换为数字向量,以便神经网络可以对其进行处理。既然我们已经有了 MELD 数据集本身的文本信息,我们就可以继续了。否则,如果信息不可用,我们可以使用文本转换库,比如谷歌云的语音识别:

# Text Features
tokenizer = kt.Tokenizer(num_words=5000)
tokenizer.fit_on_texts(train['Utterance'])

vocab_size = len(tokenizer.word_index) + 1

train_tokens = tokenizer.texts_to_sequences(train['Utterance'])
text_features = pd.DataFrame(ks.pad_sequences(train_tokens, maxlen=200))

validation_tokens = tokenizer.texts_to_sequences(validation['Utterance'])
validation_features = pd.DataFrame(ks.pad_sequences(validation_tokens, maxlen=200))

我们首先标记每个音频中的句子,然后将它们转换成长度为 200 的数字向量。

数据管道

整合多媒体输入最棘手的一个方面是创建一个定制的数据生成器。这个结构基本上是一个函数,每次被调用时,它能够迭代地返回到模型的下一批输入。使用 Keras 的预制生成器相对容易,但没有实现允许您将多个输入合并在一起,并确保两个输入并排无误地输入到模型中。

下面的代码足够通用,可以在不同的设置中使用,而不仅仅是与这个例子相关。具体来说,它需要一个文件夹位置(图像所在的位置)和一个“普通”数据集(行中有样本,列中有要素)。然后,在这种情况下,它迭代地提供图像和文本特征的下一个样本,这两个样本都是相同大小的批次:

# Data Pipeline
def train_generator(features, batch):
    # Image Generator
    train_generator = ki.ImageDataGenerator(
        rescale=1\. / 255.) train_generator = train_generator.flow_from_dataframe(
        dataframe=train,
        directory="img/Train/",
        x_col="ID",
        y_col="Sentiment",
        batch_size=batch,
        seed=0,
        shuffle=False,
        class_mode="categorical",
        target_size=(64, 64)) train_iterator = features.iterrows()
    j = 0
    i = 0 while True:
        genX2 = pd.DataFrame(columns=features.columns) while i < batch:
            k,r = train_iterator.__next__()
            r = pd.DataFrame([r], columns=genX2.columns)
            genX2 = genX2.append(r)
            j += 1
            i += 1 if j == train.shape[0]:
                X1i = train_generator.next() train_generator = ki.ImageDataGenerator(
                    rescale=1\. / 255.) train_generator = train_generator.flow_from_dataframe(
                    dataframe=train,
                    directory="img/Train/",
                    x_col="ID",
                    y_col="Sentiment",
                    batch_size=batch,
                    seed=0,
                    shuffle=False,
                    class_mode="categorical",
                    target_size=(64, 64)) # Text Generator
                train_iterator = features.iterrows()
                i = 0
                j=0
                X2i = genX2
                genX2 = pd.DataFrame(columns=features.columns)
                yield [X1i[0], tf.convert_to_tensor(X2i.values, dtype=tf.float32)], X1i[1] X1i = train_generator.next()
        X2i = genX2
        i = 0
        yield [X1i[0], tf.convert_to_tensor(X2i.values, dtype=tf.float32)], X1i[1]

神经网络体系结构

最后,我们可以创建输入图像(声谱图)和文本(转录)的模型,并对它们进行处理。

输入

输入包括由 64x64 像素和 3 个通道(RGB)组成的图像,以及长度为 200 的“正常”数字特征,表示文本的编码:

# Model
# Inputs
images = km.Input(shape=(64, 64, 3))
features = km.Input(shape=(200, ))

图像分类(CNN)分部

影像分类分支由初始 VGG19 网络和一组自定义图层组成。通过使用 VGG19,我们可以利用迁移学习的优势。特别是,由于该模型已经在 ImageNet 数据集上进行了预训练,它已经从初始化为对图像分类任务有意义的值的系数开始。然后,输出被输入到一系列层中,这些层可以学习这类图像的具体特征,然后输出到下一个公共层:

# Transfer Learning Bases
vgg19 = ka.VGG19(weights='imagenet', include_top=False)
vgg19.trainable = False

# Image Classification Branch
x = vgg19(images)
x = kl.GlobalAveragePooling2D()(x)
x = kl.Dense(32, activation='relu')(x)
x = kl.Dropout(rate=0.25)(x)
x = km.Model(inputs=images, outputs=x)

文本分类分支

NLP 分支使用长短期记忆(LSTM)层和嵌入层来处理数据。为了避免模型过度捕捞,还添加了脱落层,类似于 CNN 分支机构所做的工作:

# Text Classification Branch
y = kl.Embedding(vocab_size, EMBEDDING_LENGTH, input_length=200)(features)
y = kl.SpatialDropout1D(0.25)(y)
y = kl.LSTM(25, dropout=0.25, recurrent_dropout=0.25)(y)
y = kl.Dropout(0.25)(y)
y = km.Model(inputs=features, outputs=y)

公共层

然后,我们可以将这两种输出结合起来,输入到一系列密集层中。一组密集层能够捕捉仅当音频和文本信号组合时才可用的信息,并且不能从每个单独的输入中识别。

我们还使用学习率为 0.0001 的 Adam 优化器,这通常是一个很好的组合:

combined = kl.concatenate([x.output, y.output])

z = kl.Dense(32, activation="relu")(combined)
z = kl.Dropout(rate=0.25)(z)
z = kl.Dense(32, activation="relu")(z)
z = kl.Dropout(rate=0.25)(z)
z = kl.Dense(3, activation="softmax")(z)

model = km.Model(inputs=[x.input, y.input], outputs=z)

model.compile(optimizer=ko.Adam(lr=0.0001), loss='categorical_crossentropy', metrics='accuracy')

model.summary()

模特培训

然后,可以使用我们之前通过执行以下操作创建的训练和验证生成器来训练该模型:

# Hyperparameters
EPOCHS = 13
TRAIN_STEPS = np.floor(train.shape[0]/BATCH)
VALIDATION_STEPS = np.floor(validation.shape[0]/BATCH)

# Model Training
model.fit_generator(generator=train_generator(text_features, BATCH),
                    steps_per_epoch=TRAIN_STEPS,
                    validation_data=validation_generator(validation_features, BATCH),
                    validation_steps=VALIDATION_STEPS,
                    epochs=EPOCHS)

模型评估

最后,在一组数据上评估模型,例如单独的验证集,然后保存为文件,以便在“实时”场景中使用时加载:

# Performance Evaluation
# Validation
model.evaluate_generator(generator=validation_generator(validation_features, BATCH))

# Save the Model and Labels
model.save('Model.h5')

摘要

总的来说,我们构建了一个能够接受多种类型输入(图像、文本等)的系统。),对它们进行预处理,然后将它们馈送到由每个输入的一个分支组成的神经网络。每个分支单独处理其输入,然后汇聚成一组公共层,预测最终输出。

具体步骤是:

  • 数据加载
  • 分别预处理输入(频谱图、符号化)
  • 创建自定义数据生成器
  • 构建模型架构
  • 模特培训
  • 性能赋值

要阅读更多类似的文章,请关注我的 Twitter LinkedIn或我的 网站

流行歌曲的音乐相似性-一篇评论文章

原文:https://towardsdatascience.com/the-musical-similarity-of-popular-songs-a-review-article-c47d5af52e62?source=collection_archive---------46-----------------------

使用数据可视化来解释概念

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://unsplash.com/photos/1oKxSKSOowE

“音乐是我所知道的唯一没有任何规则的东西。”- 乔希·霍姆

2014 年,史努比·道格问 50 Cent 他最怀念过去的什么,当时嘻哈“就是它”50 美分回答“真实性”,导致 Snoop 臭名昭著的模仿当今说唱歌手:https://pudding . cool/2018/05/similarity/assets/videos/video _ Snoop . MP4

我坚信,当谈到创造力时,无论是音乐、绘画还是写作,都没有规则可言。然而,尽管艺术作品具有不确定性,但人们必须从作品中挖掘出某些元素,以便对比和分析世界各地艺术家的努力。一个如此美丽的艺术量化,特别是流行音乐,在布丁的文章中显而易见,“ 热门歌曲的音乐多样性越来越少了吗?

这篇文章以这样一个论点开始,即当我们从 20 世纪 80 年代进入当今时代时,大多数热门歌曲的“声音”往往是相似的。但是如何比较无形数据呢?显示了一个条形图,解释了一个粗略但合理的特征,如 1980-1986 年期间歌曲中合成器的比例,这表明合成器的使用明显增加。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

快照来自 布丁文章

或者,人们可以研究复杂的数据集,如 音乐基因组计划 ,它使用数百种属性如速度、流派、音调等为歌曲评分。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者的故事基于的 8 个数据点,如“声学”、“舞蹈性”、“能量”、“乐器性”、“活性”、“响度”、“语音性”和“化合价”。这 8 个点中的每一个都有 0-1 之间的值,每个因素都有两个独特的例子来详细解释。因此,歌曲被简化为 8 维实体,可以使用像欧几里德距离这样的度量标准进行比较。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

快照来自布丁文章

有趣的是,歌曲的简单矢量表示为音乐产业的详细分析打开了一扇窗。我们观察到,从 1960 年到 2010 年,歌曲的相似度稳步上升。

另一个有说服力的评估歌曲的方法是记录每首热门歌曲的平均词曲作者数量。虽然有人会说这与音乐同质性的上升没有直接关系,但作者提供了令人信服的证据来证明一首歌中作家数量的增加会抵消他们的个人品质,导致歌曲不那么独特。以下是这篇文章的摘要:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我的观点:

虽然故事呈现得很优雅,但增加一个互动层,读者可以输入他们选择的任何两首歌曲来获得相似性得分,这将是蛋糕上的樱桃。(对于我的 UI 忍者朋友来说,这可能是一个有趣的项目想法)

选择比较你最喜欢的音乐不仅能吸引听众,还能让他们对流行趋势形成个性化的看法。此外,我想探索 2D 可视化(使用像 PCA 这样的降维技术生成)显示相似歌曲集群的形成。

总的来说,作品中充满了相关歌曲的片段,让读者参与进来,产生了令人信服的影响。它让我们得出两个合乎逻辑的结论——要么这一趋势将持续加速(从纯粹的统计角度来看),要么它将成为原创音乐从音乐排行榜上脱颖而出的前所未有的机会,因为对于音乐盒变平的听众来说,这将是一种“开箱即用”的体验。

(几乎)每个 ETL 管道中使用的 MySQL 函数

原文:https://towardsdatascience.com/the-mysql-functions-used-in-almost-every-etl-pipeline-d2007d6f5086?source=collection_archive---------27-----------------------

记住这些功能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

田宽Unsplash 上拍照

ETL 管道介绍

“ETL”代表什么?为了回答这个问题,让我们考虑一下每个数据科学家都知道的 80/20 法则:一个数据科学家 80%的时间被分配给 E 提取、 T 转换和 L 加载数据,20%的时间被分配给同时观看办公室重新运行和亚马逊 Prime 的杰克·瑞恩,以此来对比约翰·卡拉辛斯基令人难以置信的范围。

在这篇博客中,我们将研究一些最常用的 MySQL 函数,准确地说是五个函数,没有特定的顺序,每个 SQL 初学者都应该记住它们。

管道

因为这篇博客的目的是关注经常使用的 SQL 命令,所以我们将只关注管道的数据提取过程。

首先,让我们导入 Pandas 和 Sqlite3,并定义一个“游标”光标对象允许我们调用。execute()方法来执行 SQL 命令。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

光标对象允许我们调用。execute()方法来执行 SQL 命令

现在我们已经连接到数据库,这是一个名为“data.sqlite”的本地文件,我们可以开始提取数据了。但是首先,让我们检查一下数据库模式:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们的数据库模式

正如我们所看到的,我们有多个表,其中一些有一对一的关系,一些有一对多的关系(更多关于那个这里这里)。

功能 1:选择

选择功能允许我们获取所需的数据。假设我们需要 orderdetails 表中的每一列。我们可以编写如下查询:

query = """SELECT od.orderNumber,
                  productCode,
                  quantityOrdered,
                  priceEach,
                  orderLineNumber
            FROM orderdetails;"""

然而,我们可以简单地使用星号来抓取每一列,而不是写出每一列。

query = """SELECT * FROM ordertails;"""

现在,如果您的数据包含重复条目,您可以调用 DISTINCT 在将数据放入 dataframe 之前只获取唯一的数据点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

SELECT DISTINCT 查询示例

聚合器函数:COUNT()、SUM()、MIN()、MAX()、AVG()

请注意,上述数据帧的前四行具有相同的 orderNumber。我们可以看到每个 orderNumber 包含多个 productCodes,每个都有自己的数量和价格。比方说,对于每份订单,我们都想知道客户花费的总金额——请注意,我们没有每种产品的总计列。这就是聚合函数派上用场的地方。请注意,在使用聚合函数时,始终包含 GROUP BY 函数(稍后将详细介绍)是非常重要的,这样就可以知道聚合数据的内容,在本例中是 orderNumber。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

聚合器函数 SUM()和别名函数作为查询示例

使用 SUM() 函数允许我们创建一个名为“orderTotal”的新列(使用别名函数作为),我们可以看到前五个订单分别为$10,222.83、$10,549.01、$5,494.78、$50,218.95 和$40,206.20。挺有用的。

功能二:加入

JOIN 命令用于使用一个公共列(也称为外键)从不同的表中选择多行。我们将关注四个最常见的连接子句:outer、inner、left 和 right。注意,必须使用上的或使用上的来定义公共列。的语法将是…ON table 1 . common _ column _ name = table 2 . common _ column _ name,而 USING 的语法只是… USING (common_column_name)。

外部连接

外部连接返回左表或右表中匹配的数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自:https://www.w3schools.com/sql/sql_join.asp

内部连接

一个内部连接返回在左表和右表中都匹配的数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自:https://www.w3schools.com/sql/sql_join.asp

左连接

一个左连接返回左表中的所有记录以及右表中的匹配行。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自:https://www.w3schools.com/sql/sql_join.asp

右连接

一个右连接返回右表中的所有记录以及左表中的匹配行。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自:https://www.w3schools.com/sql/sql_join.asp

现在让我们看一个例子。使用我们以前的模式,假设我们需要每个雇员的雇员号、名、姓和邮政编码。我们可以使用 officeCode 作为外键来执行 employees 表和 offices 表的一个简单的内部连接(这只是许多方法中的一种)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

内部联接示例查询

注意,使用联接时,必须指定从哪个表中提取列。这可以通过在 SELECT 子句中使用语法 table_name.column_name 来完成。这可能很繁琐,所以更常见的方法是为每个表分配一个昵称。上面的代码将 employees 表标记为“e ”,将 offices 表标记为“o ”,以避免为所需的每一列键入完整的表名。

功能 3:在哪里

当我们想要对我们想要的数据设置某个条件时,使用 WHERE 函数。此外,您可以在之间使用 WHERE 连同 AND,OR,NOT,LIKE ,and 来设置数据的具体要求。让我们看几个简单的例子(这些查询没有使用原始的模式,纯粹是说明性的)。

与,或,与非

#all males that weigh more than 200lbs
query = """ SELECT patient_id, height, weight, age, sex, region
            FROM patients
            WHERE sex = 'M' AND weight > 200;"""#all patients that weigh more than 200 or are older than 50
query = """ SELECT patient_id, height, weight, age, sex, region
            FROM patients
            WHERE weight > 200 OR age > 50;"""#all patients not from the Northeast
query = """ SELECT patient_id, height, weight, age, sex, region
            FROM patients
            WHERE region NOT 'NE';"""

喜欢

#all patients whose patient_id starts with A100
query = """ SELECT patient_id, height, weight, age, sex, region
            FROM patients
            WHERE patient_id LIKE 'A100%';"""

在…之间

#all patients who weigh between 195 and 255 lbs
query = """ SELECT patient_id, height, weight, age, sex, region
            FROM patients
            WHERE weight BETWEEN 195 and 255;"""

功能 4:排序依据

ORDER BY 命令按照指定的列以升序(默认)或降序组织我们的数据。让我们重温一下我们的原始模式,看一个简单的例子。

升序(ASC)

让我们从 customers 表中获取 customerName、creditLimit、addressLine1、city、state、postalCode 和 country。我们将按照州和城市的字母顺序对结果进行排序。最后,我们将只考虑信用限额超过 25,000 美元的美国客户。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

按升序排序的查询示例

下降(DESC)

让我们查询完全相同的数据,只是这次我们将按 creditLimit 对行进行排序,并且只查看前 5 个 credit LIMIT(使用 LIMIT 子句)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

按降序排序的查询示例

功能 5:分组依据

如前所述, GROUP BY 函数通常与聚合函数一起使用,以便按一列或多列对“结果”数据进行分组。下面是一个简单的例子,说明我们如何按一列分组,以便查看应用于不同列的聚合函数。具体来说,假设我们想了解我们在美国哪五个州开展的业务最多。这可能涉及到按州对数据进行分组,并对我们之前计算的 orderTotal 列求和。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

分组依据和限制查询示例

请注意,在上面的代码中,您可以传递 1、2 等。而不是 column_name。这指定了对结果进行分组的列的位置(相对于选择原因)。所以在上面的例子中,我们可以说“GROUP BY 1”而不是“GROUP BY state ”,因为 state 位于 SELECT 子句的 1 位置

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

GROUP BY 1 查询示例

通过功能与组共同使用的另一个重要功能是 HAVING。具有功能的类似于 WHERE 功能,它创建了一个需要满足的条件,以便将一行包含在结果中,但不同之处在于具有子句的通过命令将条件直接分配给组。这可能有点令人困惑,所以让我们试着用一些代码来阐明这一点。

下面的代码为我们提取了任何累计订购了 10 个或更多产品的客户的 customerName、customerNumber、productName、productCode 和 totalOrdered。请注意, HAVING 子句的作用类似于此处的 WHERE 子句,但仅适用于 GROUP BY 1(客户名称)、4(产品代码)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

GROUP BY 和 HAVING 查询示例

最后一个技巧:子查询!

子查询基本上是查询中的查询。它们可以用在许多方面来解决许多不同的问题。但是最终,当您的条件变得复杂并且需要多个 JOIN 命令和/或多个 WHERE 命令时,您需要使用子查询。

例如,如果我们想获得少于 5 名雇员的办公室中每个雇员的名字、姓氏和城市,该怎么办?处理这种情况的一种方法是,首先查询一个少于 5 名雇员的办公室的结果集,然后只考虑其办公室代码在结果集中的雇员的名字、姓氏和城市。让我们看看代码是什么样子的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

子查询示例

小抄

在这篇博客中,我们介绍了典型 ETL 管道中最常用的 5 个 MySQL 函数,以及它们对应的所有子句/命令。让我们快速回顾一下。

函数 1: SELECT、SELECT DISTINCT、SELECT +聚合函数和 AS(在输出中应该调用的列的别名)

功能 2: JOIN(外/内/左/右)+ ON 或 USING

功能 3: WHERE +和/或/NOT,比如,BETWEEN

功能 4:按+ ASC(默认)或 DESC 排序

功能 5:分组依据+拥有

子查询:查询中的查询

我强烈鼓励每个阅读这篇博客的人做进一步的阅读。你怎么想呢?有什么荣誉奖吗?

所有 Covid 案例的秘密:为什么复杂性滋生阴谋

原文:https://towardsdatascience.com/the-mystery-of-all-the-covid-cases-why-complexity-breeds-conspiracy-643d9f5c8842?source=collection_archive---------49-----------------------

新冠肺炎的阴谋论让人们关注数据素养的鸿沟

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由晨酿Unsplash 拍摄

从初夏开始就有一个的想法流传开来,声称在谷歌上搜索任何一个后面跟有“新病例”的三位数,都会得到最近的头条新闻,上面有新的 covid 病例的确切数字。这意味着,在最近的新冠状病毒病例报告的标题中出现每一个三位数的数字是如此不太可能,只有媒体公司的阴谋才能让它发生,想必其目标是通过为任何特定数量的病例搜索提供标题来传播恐惧。

注意到搜索结果的不可思议并不是没有道理的(没试过就试试吧)。即使是倾向于数学的朋友,在不情愿地承认这种现象有点奇怪后,也不得不求助于计算来加强他们的感觉,即完全覆盖三位数的案例空间确实是可能的。因此,许多人将这种现象视为政府或媒体公司中少数强大参与者秘密合作的证据,这并不奇怪。我对任何阴谋都持怀疑态度,但除了对大数定律(又名聪明人的阴谋论)的油腔滑调之外,我无法提供任何直观的解释。我不得不绞尽脑汁,想出一些代码,看看如果报告的新病例数量基本上是随机的,那么完全覆盖到 999 人的可能性有多大(结果如下)。

我们能够直观地理解小变量系统(如投掷物体的轨迹)或聚合多变量系统(如水温)的直接因果模式,并利用这种理解投射到中等变量系统,如社会。因此,当一些人从一个能熟练监管一个国家方方面面的好领导人的想法中找到安慰时,另一些人也同样因为一群邪恶领导人想从内部摧毁这个国家的信念而感到安慰。它们都将巨大的复杂性简化为几个容易理解的变量。在光谱的另一端,我们通常对大量系统及其聚合行为感到舒适,因此预计会看到来自数千个来源的标题的变化,因为这让人想起一大群人进行许多单独对话时大声但不连贯的聊天。

但三位数的冠状病毒病例数所表明的趋同行为(许多不同的代理人表现得似乎很协调)令人惊讶,如果我们坚持用直觉找到因果链,我们将不得不求助于小数量或大数量的直觉。在这种情况下,大量的直觉是不好的,因为搜索结果表明有很高程度的表面相似性(没有什么比递增的整数更连贯),这表明协调的行动。这就留下了少量的直觉,这些直觉试图找到使事情发生的最小杠杆集,因此我们得到这样的想法,一些小的个人或组织必须组织起来以覆盖病例计数报告。

如果我们考虑几个报告来源,那么几个月的时间确实不足以完全填满三位数的范围。但是,如果我们考虑到有成千上万的同时报告来源,那么用几周甚至几天来填写整个三位数范围不仅是合理的,而且是可以预料的。至少希望如此。我们需要一些帮助来更加确定。

直觉助推火箭:模拟

【代码是可在 github 上获得。]

这个简单的模拟回答了这样一个问题:给定数量的报告源需要多长时间才能在其案例报告中完全“覆盖”1 到 1000 的范围。该模拟为每个时间步长的每个报告源生成随机数量的新事例(在 1 和 1000 之间),并一直进行下去,直到 1 和 1000 之间的所有整数都至少出现一个。如果我们假设每个报告源每天只报告一次,那么模拟中的每个时间步长相当于一天。

结果:

  • 报告来源:对于每个时间步,“新案例”标题报告来源的数量(例如,一些当地报纸)。
  • 模拟时间步长:从 1 到 1000 覆盖所有数字的平均时间步长数(每次运行 100 次试验)。
  • 预期时间步长:从 1 到 1000 覆盖所有数字的预期时间步长数

三位数理论的直觉在报告来源计数的低端是正确的。对于一个只有 10 个或更少来源的报告系统来说,根据病例报告填写所有数字(最多 1000 个)需要数年时间(假设每天都有报告)。当您考虑到仅在美国就有近两万个县,更不用说美国以外的许多城市和其他报告政府了,其中每个都可能报告自己的数字,实际的报告来源计数必须在此列表的高端或更高端,因此最近报告任何三位数病例的可能性相当高。

尽管像许多人一样,我怀疑大数可以解释这个谜,但我不知道越来越大的报告池会以多快的速度减少获得所有三位数(加上两位和一位数)值所需的时间。由于有超过一千个报告来源,要找到所有数字需要几天时间。

结果没有显示出来,但我们可以推断,在报告的数字中有很高的“冲突”率,因此不仅所有的数字都被覆盖,而且许多数字会被覆盖不止一次。搜索“341 个新案例”不仅会返回一个结果,而且可能会返回许多结果,进一步证明(如三位数理论家所声称的)结果的可能性。随着数千个报告源在几天内覆盖所有三位数,所有可能的数字很快就会有多个报告。

超级互联世界中的直觉

三位数的理论家不懒也不傻。他们只是相信他们对社会系统中概率的直觉,因为作为一个社会,我们还没有吸收和认可中等数量复杂系统的行为。就像通过传播天文学的非显而易见的课程来取代显而易见的扁平地球一样,传播关于社会系统分析和数据科学方法的知识可以为我们提供新的功能直觉。也许更重要的是,随着社会变革的加速,我们不仅迫切需要关于复杂社会系统的新事实,还需要更多人不断测试和重新设计他们对快速演变的社会世界的直觉的能力。否则,我们将面临新的社会分化:那些能够驾驭数据洪流和复杂性之谜的人,以及那些随波逐流的人。

美国总统大选不确定性的本质

原文:https://towardsdatascience.com/the-nature-of-uncertainty-in-the-us-presidential-election-d112061bd88c?source=collection_archive---------30-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

詹妮弗·格里芬在 Unsplash 上的照片

我们生活中普遍存在的不确定性很少像现在这样明显。从全球范围内导致 100 多万人死亡的疫情,到乔治·弗洛伊德(George Floyd)被谋杀后爆发的大规模抗议活动,今年出乎我们的意料。随着美国大选的临近,许多人转向预测,例如由538经济学家做出的预测,以量化不同情景发生的可能性。

大多数预测目前预测拜登获胜的概率为 90%左右。思考这个问题的一种方法是,想象从一顶帽子里抽出一个名字,帽子里有九张写着“拜登”的纸和一张写着“特朗普”的纸。虽然这是对许多人解读概率的方式的改进,但它并没有完全抓住我们在现实世界中面临的不确定性。

风险和不确定性

经济学家弗兰克·奈特(Frank Knight)在西班牙流感席卷全球之际写了一篇关于不确定性的文章,他提出了可计算风险和不确定性之间的区别。扔硬币是一个涉及风险的例子——掷骰子、旋转轮盘或者从帽子里抽出一个名字也是一样。它被认为是一种风险,因为潜在的过程不会改变,结果是明确规定的,并且在什么算作一次投掷中几乎没有模糊性。这使得通过多次投掷硬币或了解其物理特性来确定“正面”或“反面”的概率成为可能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

芝加哥大学摄影档案馆,AP f1–03513,芝加哥大学图书馆特别收藏研究中心。

大多数风险都有类似抛硬币的特征,但类似于《安娜·卡列尼娜》第一行的不幸家庭,不确定性有不同的味道。每当情况难以分类,机制没有被很好地理解,可能的结果没有定义,或者小的不准确导致大的错误时,它就会出现。不确定性使得我们很难知道为退休存多少钱,意味着你不应该依赖长期天气预报,这也是为什么我们不能预测像发现疫苗这样的科学发现。在每一种情况下,不确定性的特点是难以确定准确的概率——通常我们只能说“我们根本不知道”。

概率是你模型的一部分

在涉及不确定性的情况下,对于每种可能结果的相关概率,通常会有不同意见。这是 9 月初的情况,当时《经济学人》制作的预测预测特朗普有 15%的胜算,538%的预测是 29%。与此同时,投注者在博彩交易所暗示的概率几乎是一半一半。

如果你相信《经济学人》的模型,以这样的赔率在特朗普身上下注,就像接受一场赌博,你掷出一个骰子,只有当它显示“6”时才能赢得 1 美元,否则就会输掉 1 美元。这不会是一个有利可图的赌注。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

根据538经济学家制作的模型预测的拜登和川普获胜的几率,以及 Smarkets 博彩交易所的赌客暗示的概率(图片由作者提供)。

虽然预测市场存在问题,但这些差异表明,当一种情况以不确定性为特征时,分配给结果的概率是基于你对世界的理解。它们不能用扔硬币的方式来解释,因为就像启示录的传教士一样,你可以绝对肯定,也可以完全错误。

选举预测可能吗?

即将到来的美国大选的结果不应该被认为是一个可计算的风险,有多个方面的不确定性会影响预测的准确性。理解不确定性的本质可以帮助我们决定我们应该在多大程度上听取选举预测。

**不完全信息:**预测未来的唯一方法是基于你现在所拥有的信息;你的数据集中没有前所未有的事件并不排除它在未来的可能性(这种证据上的偶然性被哲学家称为归纳的问题,被计算机科学家称为没有免费的午餐定理)。

选举经常受到罕见事件的影响。2016 年大选的结果受到了联邦调查局局长詹姆斯·科米的影响,他宣布正在调查针对希拉里的案件中新发现的电子邮件;今年我们迎来了百年一遇的疫情。这些罕见事件的影响已经导致一些选举预测者为不太可能的结果分配额外的概率,但是这种方法仍然存在争议,并且人们普遍认为罕见事件本质上是无法以任何精度量化的

**独特事件:**今年大选这么多事情感觉不一样。我们怎么可能对如此前所未有的事情做出预测呢?经济学人模型背后的统计学家 Andrew Gelman,通过列举自 1948 年以来每一次选举的特质方面来回答类似的问题。其中包括最近的选举,首次出现了非白人(2008 年)、摩门教(2012 年)和女性(2016 年)候选人。这次选举比以往更不寻常吗?格尔曼给出了唯一合理的答案:“我不知道”。

尽管之前发生了前所未有的事件,选举预测还是让做出了准确的预测,在这种程度上,他们使用了捕捉广泛信息的代理。候选人的属性影响着平均投票率,疫情的一些影响也反映在经济指数中。因此,重要的问题是:这次选举中的独特事件会影响这些代理人之间的关系和结果吗?这次选举的一些方面,如邮寄选票和试图质疑选举过程合法性的企图可能属于这一类,这增加了不确定性。

**社会互动:**不断增加的连通性让事情变得更加不确定。这在新冠肺炎病毒传播期间很明显,一个人感染几个人,每个人又感染几个人,很快事情就失去了控制。由于误差的影响会随着时间的推移而累积,因此病例数量中的微小测量误差可能会导致未来结果的巨大差异。类似地,使用社交媒体的互动使得预测选举结果变得更加困难。最初只有一小部分人相信的信息会迅速传播开来,尤其是当有像福克斯新闻频道广播这样的超级传播事件时。

虽然社会互动增加了不确定性,但政治极化减轻了它的影响,并使预测变得更容易——不管是好是坏。与戴口罩减少新冠肺炎病毒感染人数的不确定性类似,越来越严重的两极分化使得人们不太可能将自己的观点传递给别人(进而让那些人将自己的观点传递给更多的人)。两极分化创造了一个信息爆发不太可能发生的环境,类似于政治群体免疫。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由蒂芙尼·特里普斯Unsplash 拍摄

**改变世界:**可计算风险(如抛硬币)的一个定义属性是,分配概率不会影响被测系统的行为。相反,对社会现象的预测经常会改变概率所描述的人们的行为。当对新冠肺炎感染人数的预测首次发布时,人们开始洗手,保持社交距离,并戴上口罩。就这些行为变化的发生程度而言,最终结果与最初预期的不同。

选举预测同样会影响他们试图预测的事物的行为。轮询信息不是女神雅典娜神奇地交给内特·西尔弗的;它是由其他有自己的欲望和信仰的人产生的。这些民意测验专家认识到,公布一项与公认的智慧(即值得尊敬的选举预测)截然不同的民意测验可能会损害他们的声誉。

民意测验专家通常会做出方法上的选择,让他们的结果更接近共识。选举预测利用民意测验来进行预测,因此,在一定程度上,民意测验受预测的影响,这就成了盲人摸象的情况。这被称为“羊群效应”,尽管有方法来识别偏离程度小于预期的投票,但不可能完全消除。

预测也能影响选民的行为。当新闻报道声称某个候选人是最受欢迎的候选人时,人们通常认为他们的投票不会影响结果。选举预测对投票率水平做出假设,如果足够多的人得出结论,他们的投票不会影响结果,那么总体而言,他们可能会影响结果。

时间:与天气预报越接近关注日期就越准确类似,随着选举日的临近,政治预测的不确定性也会降低。今天做出的预测和上个月做出的预测同样会受到从现在到选举期间发生的意外事件的影响。然而,除此之外,一个月前做出的预测还受到从上个月到现在发生的事件的影响。

离选举只有一周时间了,现在时间是有利于选举预测的主要因素之一。改变游戏规则的事件发生的概率每天都在减少。今年到目前为止,将近 7000 万人提前投票。对他们来说,选举日已经过去了。

对不确定性本质的更多理解改变了我们看待选举预测的方式。这次选举的一些方面,如邮寄选票的未知影响,使得预测更加困难;其他的,比如两极分化,让事情变得更容易。尽管如此,在涉及不确定性的情况下,假设特定的模型是正确的是不明智的。相反,我们应该制定计划,以适应我们对世界理解的不准确性。

FiveThirtyEight 的创始人内特·西尔弗(Nate Silver)对不确定性的影响做出了回应,他写道,他将“认为,特朗普获胜的可能性为 10%或 15%,实际上与 35%的可能性没有什么不同。“换句话说,如果你真的认为今年的选举结果对我们世界的未来很重要,并且你能够投票,那么即使预测显示你喜欢的候选人可能会获胜,你也应该投票。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

元素 5 数码Unsplash 上拍摄

结语:不确定性的 50 个词

在这本书的序言中,弗兰克·奈特对风险和不确定性进行了区分,他认为“这本书基本上没有什么新的东西。”不确定性是人类经验的核心,我们已经积累了大量的词汇来描述它:无知、模糊、歧义、定义不清的问题、模型不确定性、认知不确定性、小世界、邪恶的问题、神秘、黑天鹅、未知的未知、彻底的不确定、模糊、不确定、样本外、缺乏信息、非平稳性、非遍历性、非线性、混沌。

虽然不确定性的影响在即将到来的选举中尤为突出,但理解不确定性的本质对我们生活的许多方面都有影响。在人们使用数据的方式中,对概率的天真解释非常普遍。如果你发现自己在寻找小数第六位的答案,你应该记住你的置信区间是基于你的模型的;我们生活的世界从根本上不同于设计概率来描述的概率游戏。

根据这一区别,我们应该如何在一个充满不确定性的世界中行动?一方面,有时有可能认识到使预测特别困难的不确定性方面。你试图预测社会互动吗?你的预测有可能改变你正在研究的系统的行为吗?

另一方面,当我们考虑到金融危机和流行病时,不确定性可以长期伪装成风险。因此,不确定性给我们上的一课本质上是知识谦虚。挑战你最可靠的假设,考虑多种情况的影响,并在知道你可能是错的情况下找到弹性。

NBA 的 2023 MVP 是…

原文:https://towardsdatascience.com/the-nbas-2023-mvp-is-ff78deb85122?source=collection_archive---------56-----------------------

用递归线性回归预测 NBA 球员的职业生涯

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

UnsplashNeONBRAND 拍摄的照片

作为一个体育迷,有一种无法满足的渴望让我们不停地对未来做出大胆的预测。大规模的工业兴起来挠这个痒,幻想体育和赌博立即浮现在脑海里。此外,当我们在游戏范围内没有可预测的东西时,我们的预测就会超出范围。在最近的超级碗比赛中,人们不仅可以在比赛的 MVP 上下注,还可以在小狗碗 MVP 上下注。很明显我们控制不住自己。说到预测,我和其他人没什么不同。

欢迎来到我的体育主题数据科学系列的第四部分。几周前,我发表了《T4:年龄的资产》,详细描述了为什么 NBA 总经理在 NBA 选秀中觊觎青少年。总的来说,球员通常在二十岁左右快速发展,这可以通过数据清楚地显示出来。

为了将球员发展的概念更进一步,并进入预测领域,我使用我在之前的分析中收集的数据建立了一个模型,用于预测未来 NBA 球员的统计数据。在本文中,我讨论了项目的总体概念、数据准备、模型设计和性能表征。在文章的最后,我会提出我对 NBA 2023 年 MVP 的预测。

复制这个项目所需的所有代码都可以在 Github 上找到。

项目概念

这个项目的一般概念是,一个球员过去的表现和年龄预示着他们未来的表现。除非受伤,球员的下个赛季通常会和他们最近的赛季相似。考虑到这一点,可以使用过去几个赛季的统计数据来预测未来的一个赛季。然后,输出预测可以用作预测未来 2 个季节的输入,然后可以用于预测未来 3 个季节,等等。

递归模型

我刚才描述的是一个循环模型。递归神经网络由于其学习复杂函数的能力,是目前最流行的递归模型。然而,通过将输出作为输入反馈到模型中,可以使任何类型的回归模型重复出现。这可以通过线性回归、随机森林回归或梯度增强回归等方法来实现。因为 NBA 职业生涯的轨迹相对简单,所以不太复杂的回归模型,例如线性回归,实际上产生了最好的结果。更复杂的模型,如递归神经网络倾向于过度拟合这个问题,这导致一些非常奇怪的预测时,预测多个季节的未来。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

广义递归回归的表示。Pn+1 的预测是通过将最近的预测 Pn 与时间 Tn 相结合并馈入模型进行的。

非周期时间序列

关于预测 NBA 球员职业生涯,另一个需要注意的重要事情是,虽然这看起来像是一个典型的时间序列问题,但实际上不是。大多数时间序列都是周期性的,就像农业产出在多年内反复增减,有许多峰值和谷值。另一方面,一个 NBA 球员的职业生涯通常有一个增长期,然后是一个下降期;只有一个山峰,没有山谷。这不是一个周期性的过程。因此,旨在预测周期性数据的时间序列模型在这类问题上显然表现不佳。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

周期性与非周期性时间序列的比较。

预测目标和特征选择

对于这个项目,我希望能够预测一个赛季球员所有的传统得分统计。这些预测目标还必须作为模型输入,以产生重复预测。最后,我决定预测以下 13 个特征:2 分命中率,2 分尝试,3 分命中率,3 分尝试,罚球命中率,罚球尝试,防守篮板,进攻篮板,助攻,抢断,盖帽,失误,个人犯规。

上面列出的非百分比特征,也就是计数统计,都被转换为每 36 分钟统计。这有助于平滑数据集,因为许多季节因受伤而缩短。为了将每 36 分钟统计数据的预测转换回总数,训练了一个单独的模型,根据球员过去的分钟数和预测的表现来预测分钟数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

选择作为模型输入/输出的特征之间的相关性。

数据准备

与大多数数据科学项目一样,优化预测性能在很大程度上取决于获取质量数据、数据清理和特征工程。以下详细介绍了所使用的大多数数据准备步骤。

数据采集

这个项目的数据是从运动参考 API 中收集的,这个 API 之前在这个链接的文章中讨论过。本文介绍了如何使用 API 来构建一个全面的 NBA 球员统计数据集。这是用作该项目的起点的同一数据集。该数据集包含过去 20 年中在 NBA 打球的每个球员每个赛季的各种传统和高级统计数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个项目的数据是使用体育参考 API 获取的。

数据清理

在训练预测模型之前,需要执行许多数据清理步骤。最明显的是去除由非常小的几分钟样本量组成的季节。这些季节更有可能包含极端的统计异常值。总上场时间少于 400 分钟的赛季被删除。

另一个必要的清洁步骤是考虑低样品量拍摄的情况。例如,你知道伊内斯·坎特在 2013 赛季犹他爵士队的三分球命中率为 100%吗(1 投 1 中)。像这样的数据点,如果不加以考虑,会导致一些关于 3pt 投篮的相当荒谬的预测。在数据集中还有大约 700 个赛季,球员没有投出一个三分球,这些必须被分配一个有限的百分比。实施的解决方案是当样本量较低时,将拍摄百分比限制在某个范围内。

特征工程

第一个特征工程步骤是将上场时间转换成所有可能上场时间的比例。对于这一步,我们假设每场比赛的最大可能上场时间是 40 分钟。使用这种假设,上场时间的比例可以很容易地计算如下,(上场时间比例)=(上场时间)/((上场时间)* 40)。这有助于解释因受伤或停摆而缩短的赛季。

应用的第二个特征工程技巧是将 3 个百分点乘以 1.8。结合下述步骤,这有效地将 3 个百分点的模型输出限制在 55.5%,有助于防止模型过度预测 3 个百分点。

在应用上述特征工程步骤后,所有百分比特征、投篮命中率和上场时间比例都使用 logit 函数转换为对数赔率。实质上,这将任何后续线性回归转换为逻辑回归,并将要素的预测限制在范围(0,1)内。这个技巧在我之前的文章战胜困难中有更详细的描述。使用 sigmoid 函数可以很容易地将对数几率转换回百分比。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Logit 和 Sigmoid 函数

最后,引入了非线性特征年龄和年龄。这些特征允许递归线性回归模型学习关于年龄的高阶多项式函数,极大地提高了性能。

列车测试分离

训练和测试集是根据球员而不是单个赛季来划分的。这是为了评估模型根本没有训练过的球员的长期职业预测。

构建模型

简化测试

构建递归模型的第一步是测试预测单个特征的各种类型的回归。这是为了给出模型类型的一些指示,该模型类型将很好地用于构建完整的模型。对于这个简化的测试,scikit-learn 的 LinearRegression、RandomForestRegressor 和 GradientBoostedRegressor,以及 tensorflow 中创建的神经网络回归器,用于根据球员的年龄和有限的一组高度相关的过去特征来预测球员的两点尝试。简单的线性回归模型能够在该任务的测试集上获得最佳精度,预测每 36 分钟两次尝试,平均绝对误差为 1.2 次尝试。通过创建一些合成数据,该模型根据年龄对一名统计上平均水平的球员的两分尝试进行了调整。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以看出,这个简单的线性模型预测了 25 岁之前每 36 分钟 2 次投篮尝试的增加,之后投篮尝试预计会减少。还要注意这条曲线的形状,它是通过包含基于年龄的非线性特征而成为可能的。

多型号集装箱

完整的循环模型本质上是许多回归的组合,每个回归适合预测 13 个特征中的一个。虽然可以单独创建这些模型中的每一个,但在实践中,这会导致极其混乱的代码。解决方案是定义一个 python 类作为各种模型的容器。这个类在实例化时适合每一个模型,并包含一个从所有 13 个模型一次生成预测的方法。结果是,代码简洁明了。应用该类还使得在使用线性回归的递归模型和使用随机森林回归或梯度增强回归的递归模型之间切换变得简单。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

容纳用于预测 N+1 个输出的 N+1 个回归模型的多模型容器的图表。

模型评估

单一季节评估

评估模型性能的第一步是查看模型对未来一个季度性能的预测程度。因为平均绝对误差相对容易解释,所以选择平均绝对误差(MAE)作为评估标准。为了做到这一点,多模型容器实例中的每个单独的模型都被单独访问和评估。

虽然 MAE 很容易解释,但对于未缩放的数据,跨类别进行比较是相当困难的。很难说 1.2 次两分的平均出手次数比 1.2 次罚球的平均出手次数更好还是更差。一个简单的解决方法是将每个 MAE 除以其在数据集中的类别的标准偏差。这实质上是将 MAE 值转换成 Z 分数,这样就可以更容易地跨类别进行比较。对于使用线性回归对未来一个季节的预测,结果如下所示。这些结果对于随机森林回归因子和梯度增强回归因子来说稍差一些。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

预测未来一个赛季表现的结果。

该表显示,尽管该模型能够在 3%的 MAE 范围内预测两个百分点,但 Z 分数表明该模型在预测这一类别时最困难。为了生成整体模型性能的单个度量,这些 Z 分数在所有类别中相加。这给出了训练集的总分 4.91 和测试集的总分 4.93 。这里值得注意的是,训练集和测试集之间的性能非常相似,这是一个很好的迹象,表明该模型没有过度适应训练集。

全面职业评估

预测未来一个赛季的表现是不错的,但建立一个循环模型的全部意义在于能够做出更长期的预测;对未来 3 年、5 年甚至 10 年性能的预测。为了评估长期预测的性能,递归模型以每个球员的新秀赛季为种子,并以递归方式用于预测该球员职业生涯的每个后续赛季。在训练集和测试集中,球员的平均职业生涯长度是 9.8 个赛季,所以平均来说,该模型用于预测未来的 8.8 个赛季。使用与单季预测相同的技术对结果进行了汇编,如下所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

全面职业预测的结果。

在这种情况下,训练集的总 Z 分数为 6.84 ,测试集的总 Z 分数为 6.89 。尽管这些完整职业预测的表现明显更差,但考虑到任务难度的大幅增加,这实际上是一个非常好的结果。

预测退化

此外,确定模型的预测如何随时间退化也是令人感兴趣的。这是通过累计预测误差来实现的,而预测误差是基于一个球员的新秀赛季之后多长时间做出的。应用上述相同的技术来生成 MAEs,除以类别的标准偏差,并对每个类别的 Z 分数求和。结果如下所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

预测误差由球员新秀赛季之外的预测赛季数汇总而成。

预测上场时间

有了预测投篮命中率和每 36 分钟统计数据的模型,是时候建立一个预测球员上场时间的模型了。这将允许上面讨论的预测被转换成每场比赛平均和赛季总数的预测。

预测上场时间的模型的开发方式与上面讨论的略有不同。该模型不是使用球员过去的表现来预测当前的上场时间,而是根据当前的表现来进行预测。换句话说,该模型是在当前分钟数由当前绩效决定的假设下设计的。同样清楚的是,之前的上场时间是当前上场时间的最佳预测值,因此该模型也被设计为使用这一特性。除了之前的上场时间,我们发现个人犯规对预测上场时间也有不成比例的巨大影响。各种类型的回归模型被用于预测上场时间,然而再次发现线性回归提供了最好的结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

个人犯规对一般球员上场时间的影响。

分钟模型的表现,然后评估个人球员赛季。在这种情况下,模型被输入球员的实际表现,模型预测球员上场时间的比例。在这些情况下,训练集和测试集的 MAE 都是大约 8.5%,相当于每场比赛的 MAE 为 3 分 25 秒。

在此之后,分钟模型在球员的整个职业生涯中进行评估,评估方式与表现模型大致相同。这是通过输入球员在新秀赛季的实际表现,然后预测该球员在随后所有赛季的表现来实现的。然后将每个赛季的预测上场时间与实际上场时间进行比较。在这些情况下,训练集和测试集的 MAE 大约为 10.5%,相当于每场比赛的 MAE 为 4 分 25 秒。这个 MAE 被转换为测试集的 Z 分数 0.52 ,这表明该模型能够预测分钟以及其他类别。

2020 年以后的预测免责声明

在继续之前,有必要考虑一下这个模型的一些偏差。虽然上面讨论的评估为 2020 年以后的预测准确性确定了一个合理的基线,但也应该考虑到 NBA 在团队战略、规则和裁判方面不断发展。今天 NBA 比赛的方式和 20 年前不一样了。例如,今天许多球队采用的防守方案在 2000 年是非法的,直到 2001 年规则的改变取消了对区域防守的限制。这里的要点是,这个模型已经在 NBA 篮球最近时代的球员的职业生涯中进行了训练和评估。未来的时代可能会有很大的不同,并导致今天的长期预测比目前的评估更糟糕。

把所有的放在一起

有了这个快速的免责声明,让我们找点乐子,对未来做一些大胆的预测。训练集和测试集被合并,并且模型适合合并的数据集。然后以 2020 赛季为种子,将球员表现投射到未来。事不宜迟,你的 2023 NBA 统计领袖是:

每场比赛的点数

  1. 卢卡·东契奇:33.2 岁
  2. 特蕾·杨:31.2 岁
  3. 扬尼斯·阿德托昆博:29.9

场均篮板

  1. 扬尼斯·阿德托昆博:13.7
  2. 安德烈·德拉蒙德:12.7
  3. 哈桑·怀特塞德:11.9

场均助攻数

  1. 特蕾·杨:8.8
  2. 卢卡·东契奇:8.7
  3. Ja Morant: 7.8

2023 年最有价值球员奖将授予…

在每场比赛 38.2 分钟内,每场比赛平均 33.2 分,8.8 个篮板和 8.7 次助攻,以及高效的 49/41/83 投篮命中率之后,你的 2023 年 NBA MVP 是卢卡·东契奇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值