TowardsDataScience 博客中文翻译 2022(三百六十七)

原文:TowardsDataScience

协议:CC BY-NC-SA 4.0

机器学习对可再生能源行业的好处

原文:https://towardsdatascience.com/the-benefits-of-machine-learning-for-the-renewable-energy-sector-4315efae588e

使用逻辑回归、非平衡数据集和 l1 归一化的天气预报的个例研究

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

杰森·黑眼在 Unsplash 上的照片

我最近参加了一家咨询公司的面试,他们提出了一个迷人的场景:

假设这是你工作的第二天,你的主管打电话来请病假。他们要求你代替他们参加与能源部高级官员的会议。如果这些人问你你的机器学习背景如何帮助他们实现目标,你会怎么回答?

嗯,经过思考,我想出了一个我认为相当不错的答案,但在那之后的一周里,我对这个问题思考了很久。我个人相信使用机器学习作为理解现实世界现象的强大工具,而不是作为仅仅获得答案的黑匣子。但是这种观点如何影响现实世界的能源政策呢?当我在过去的一周里听播客和读文章时,我开始有了一些想法。

我在采访中的回答主要来自于最近听到的伍德·麦肯齐关于欧盟在最近的乌克兰危机面前的能源政策的播客。听听吧,很有意思。引起我共鸣的一点是,能源政策通常以气候变化争论为中心。这不是一件坏事。问题是气候变化总是一个长期的方法;我们总是在想 50 年后的事情,虽然现在做事情很紧迫,但末日即将来临的感觉太遥远,无法真正刺激严肃的行动。然而,最近的乌克兰危机凸显出能源政策不仅关系到长期气候变化,还关系到迫在眉睫的国家安全问题,特别是在欧盟。随着欧盟试图在短时间内摆脱对俄罗斯天然气的依赖,政策和技术必须快速实施。

这和机器学习有什么关系?我在最近的研究生经历中看到的最常见的一个说法是,机器学习是。我与之互动的一位教授发表了一篇论文,内容是与经典、半经典和量子力学方法相比,用机器学习预测反应速率常数的计算效率。计算上的节省是巨大的。或者,考虑非常复杂的计算流体动力学(CFD)领域,这是飞机设计或天气预报中的一个重要领域。本文讲述了另一种创新方法,与标准 CFD 相比,神经网络用于提高流体流动模拟的计算时间。一个快速的谷歌学术搜索会产生无数迷人领域的论文,这些论文都展示了这个概念。

因此,在这个世界上,我们制定能源政策的时间突然变得更加紧迫,机器学习帮助我们快速获得答案*。理想情况下,我们可以通过使用大量可用的原始数据和一个机器学习工程师团队,在不到一年的时间内得到答案,而不是雇佣一个博士团队来研究一个问题 5 年。*

快速的结果很好,但是我们总是会遇到这样的问题:

我们真的明白为什么我们会得到这样的结果吗?

我与之互动的另一位教授有一个奇妙的方法,利用机器学习来告知现实世界的解决方案。在开发钙钛矿太阳能电池的过程中,他的团队和合作者执行了一些与水加速光氧化相关的复杂物理模型,这对于理解电池的寿命非常重要。但他们并没有就此止步。开发模型后,他们将结果作为特征输入到之前基于 ML 的退化模型,然后使用 LASSO 回归获得特征重要性。事实证明,该模型选择了他们基于物理学的模型的结果作为一个重要特征,验证了这项工作。由此得到的教训是什么?机器学习实际上是对现实世界理解的强大验证器。如果一个客观的计算算法说一个结果是重要的,没有政治或研究议程的复杂混淆,我们可以在我们的物理理解中更有信心地前进。

我考虑的第三个好处是机器学习原则能够跨多个学科使用。每当我参加机器学习会议或海报会议时,我都会对所涵盖的工程主题的广度和深度感到惊讶。然而,让我真正兴奋的是,我实际上能听懂大部分的演讲!即使我可能不是细胞生物学之类的专家,我也可以去参加关于使用机器学习的主题的演示,我可以确切地看到他们正在试图做什么,并理解为什么他们的结果如此重要。在过去的十年里,机器学习几乎渗透到了每个领域,这肯定是有原因的。

这在可再生能源领域尤为重要。可再生能源是一个广阔的领域,有许多技术需要无缝集成。在制造光伏电池板时,我们在材料科学方面有所顾虑;对电化学感兴趣,以了解性能最佳的电池;需要了解电气工程以设计逆变器和电池充电控制器。然后,我们必须考虑电网互联和能源政策以及其间的一切。现在,我绝不是说机器学习让我们成为所有这些领域的专家。事实上,我非常支持使用机器学习,同时总是涉足真实的物理世界。但是机器学习给我们的优势在于协作。一个领域的专家可以与另一个领域的专家进行讨论,尽管他们可能对另一个领域知之甚少,但仍然可以说共同的语言,甚至可以从对方那里获得如何更有效地完成自己工作的见解!这是一个相当大的协同效应。

我本想把它作为一个随机的想法样本来发表,但是后来意识到一个真实的例子会更有趣!所以我调出了一个数据集,这是我最近在一门数据可视化课程中接触到的。这是西雅图的天气数据,在 Kaggle 上向公众开放,在这里我们有温度和风速等指标的每日数据,我们希望预测天气的类型。这是一个非常简单的分类问题,在类似太阳预报的事情中会很有用。我没有在这里重复代码,而是创建了一个 Jupyter 漫游笔记本,并对我正在做的事情进行了降价和评论。可以在我的 Github 回购上找到。在展示这些优点的同时,我希望你能为自己的学习学到一些技巧!这是混淆矩阵中的结果。它们并不精彩,但我想为此使用一些特定的 ML 模型,这些模型可能不是处理这类问题的最佳模型,但请允许我展示本文中的一些想法。看看能不能得到更好的结果!

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

预测和实际标签的混淆矩阵。作者的情节

这个例子告诉我们什么?首先,我不是天气建模或预报方面的专家,但只要有一些数据和机器学习,我就可以花一个下午的时间得出一些有趣的结果。我不必花费成百上千个小时来开发 CFD 模型来确定天气。我也不需要在气候学和天气建模领域获得任何特定的培训(尽管也许我只是在西雅图地区生活过一段时间!).此外,我还能够深入了解一些最重要的参数。事实证明,最重要的晴雨预报是……(鼓声)……降雨量。大惊喜?不。但也许在其他应用程序中,你会发现一个惊喜。知道我们的直觉与模型告诉我们的一致总是好的!

以上是我的一些想法。总之,机器学习在帮助我们更好地应对能源挑战方面提供了三个明显的优势:

  1. 我们可以很快得到初步的结果*,而不是花费数年在一些甚至可能不起作用的事情上。*
  2. 我们可以利用机器学习来获得更多的见解,或者使用公正的机制来验证直觉。
  3. 我们可以促进具有共同语言和方法的领域专家之间的跨学科合作。

我很好奇你的经历。机器学习方法更快吗?它是否让你对现实世界有了更多的了解,而你可能已经错过了?你会如何回答这个问题?欢迎在 LinkedIn 上与我联系!

AWS Lambda 函数静态初始化的好处

原文:https://towardsdatascience.com/the-benefits-of-static-initialization-for-your-aws-lambda-functions-c7372f682188

如何有效地编写和优化无服务器函数

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

约尔格·安格利在 Unsplash 上拍摄的照片

无服务器并不是一个流行词。这是用词不当。没有服务器也能运行应用程序的想法听起来像是魔术。如何才能避免让服务器全天候运行的高昂成本呢?

事实是你不能。无服务器只不过是一个服务器。它会在 5 分钟不活动后自动关闭。当需要再次调用它时,它会自动重启服务器。您只需在一个文件中指定依赖项,无服务器功能将从那些已安装的依赖项中创建一个容器映像,然后在重新启动时部署该映像和那些依赖项。

这就是为什么无服务器是一个误称。顾名思义,当在后台使用服务器时,不使用任何服务器。

但是无服务器功能仍然比实际的服务器便宜吗?这取决于你的商业案例。如果您的逻辑是轻量级的,可以放在一个函数中,那么无服务器更便宜。如果你的逻辑很重,依赖于巨大的软件包/定制操作系统/大存储,那么一个服务器就比较便宜。

等等,为什么我们的功能必须是轻量级的?

这个想法是,如果你的函数很小,当你需要在几分钟不活动后访问这个函数时,自动重新安装所有的包和依赖项会更容易。不活动后重新安装软件包和设置该功能的容器所需的时间称为冷启动。

容器将运行并在 5 分钟后关闭。如果在这 5 分钟内调用该函数,它将比在容器不活动期间调用该函数更快地返回结果。容器运行后获得函数结果所需的时间称为热启动

目标是尽量减少冷启动和热启动。从用户体验来说,调用一个函数,1 分钟后等待一个结果,会很烦。

好吧,但是如果在大小和逻辑上受到限制,那么无服务器有什么好处呢?

你肯定不想使用无服务器功能…

  • 托管网站
  • 高性能计算
  • 托管大型机器学习模型(神经网络、基于树的模型)
  • 灾难恢复

所有这些都可以在 EC2 上托管。机器学习模型可以托管在 AWS SageMaker 上。

您可以将无服务器功能用于…

  • 自动化任务
  • 触发器(处理上传到 AWS S3 的对象,发送到 AWS SQS 的事件)
  • 实时过滤和转换数据

因此,无服务器函数非常适合于获取数据、转换数据并将结果发送到另一个端点进行处理。它甚至可以用于将转换后的数据发送到 AWS SageMaker 上托管的机器学习模型,并从该模型中获得预测。

在我之前的一个教程中,我设计了一个 lambda 函数,将上传到 S3 桶的 PDF 文件发送到一个托管 AWS 服务的端点:Textract。

以下是该功能的要点

下面是详细介绍教程的文章。你有空的时候可以去看看。

https://medium.com/codex/improving-ocr-recognition-through-human-review-via-amazon-augmented-ai-a9c5f6d51c04

等一下。你提到无服务器应该是轻量级的。但是在你的 send_from_s3_to_textract 函数中,你使用的是 python 包 *boto3。*那不是超过 50 MB,会大幅度影响冷启动吗?

正确。为此函数初始化容器所需的时间会很慢。在处理多个请求时,有一个简单的技巧可以优化函数。

真的吗?这是什么?

我们在函数中初始化了两个不同的 boto3 客户端**:一个 textract 客户端和一个 s3 客户端。让我们把它从函数中移出。参见下面的要点。**

等等,你刚刚把第 15-17 行的 textracts3 boto3 客户端移到了第 10 -12 行的函数之外?这如何优化功能?

初始化 boto3 客户端已经是一项耗时的任务。如果它在函数处理程序内部(在本例中,在send _ from _ S3 _ to _ text ract函数内部),那么客户端将在每次调用时被初始化。从冷启动的角度来看,这并不重要,因为函数和客户端都已初始化和安装。从热启动的角度来看,在容器运行时,每次调用函数都要初始化两个巨大的客户端,这是非常耗时的。

如果我们想改进,我们希望在函数处理程序之外初始化客户端。这样,该函数将在多次调用中重用客户端。虽然这不会影响冷启动,但它会大大减少热启动,因为它会获取在冷启动/环境初始化阶段已经实例化的两个客户端。

这个过程称为**静态初始化。**静态初始化是在函数处理程序中代码开始运行之前,在处理程序之外运行逻辑的过程。开发人员使用静态初始化来导入库和依赖项,初始化与其他服务的连接,并在多个 lambda 函数处理程序中重用变量。

好吧,但我如何优化冷启动?

这是另一个超出本文范围的话题。最简单的解释是确保提前创建 lambda 函数容器,远在按需调用它们之前。AWS Lambda 允许提供并发,它在可预测的时间初始化 Lambda 函数。

这对于适应突发流量和重大扩展事件非常有用。启用预配并发后,用户可以避免在 lambda 调用时遭遇冷启动。

现在您知道了如何编写和优化无服务器函数。如果有人大胆地宣称无服务器将永远取代服务器,我们是否应该一笑置之。

感谢阅读!如果你想阅读更多我的作品,查看我的目录

如果你不是一个中等收入的会员,但对订阅《走向数据科学》感兴趣,只是为了阅读像这样的教程和文章,点击这里注册成为会员。注册这个链接意味着我可以通过向你推荐 Medium 来获得报酬。

参考文献:

https://lumigo.io/blog/provisioned-concurrency-the-end-of-cold-starts/ https://aws.amazon.com/blogs/compute/operating-lambda-performance-optimization-part-1/ https://aws.amazon.com/blogs/compute/operating-lambda-performance-optimization-part-2/

没有计算机科学学位的数据科学初学者的最佳编码技巧

原文:https://towardsdatascience.com/the-best-coding-tips-for-any-data-science-beginner-without-a-cs-degree-3881e6142668

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

Ashkan Forouzani 在 Unsplash 上的照片

如何编写生产就绪代码?

人们可以通过许多不同的方式过渡到数据科学领域。如果你没有技术背景,编程部分可能会显得令人望而生畏。我的背景不是计算机科学。在成为数据科学家之前,我是一名数学老师。在我从事数据科学的第一年,我有幸与一些 IT 重量级人物共事。以下是对我帮助最大的提示。

技巧 1:组织你的代码

编写一个运行完整流程的大型脚本似乎很诱人。或者就这样发生了:你从小处着手,然后你意识到你需要增加一些代码行。通过多次这样做,脚本变得越来越大。

这种方法有一些主要的缺点。首先,很难理解这个脚本做了什么,因为它做了很多事情。如果几个月后你回头看,很可能你不明白发生了什么。其次,您只能将脚本用于这个特定的过程。对于下一个项目,你需要重新开始。

解决方案很简单:将脚本分成函数和模块。每个函数应该只做一件事。通过将相关函数分组到一个模块(文件)中,您的代码变得易于理解和重用。您可以在下一个项目中从模块中导入函数或类。

什么时候开始组织都不晚!在软件工程中,你有一种叫做重构的实践,在这种实践中,你重构你的代码,而输出保持不变。

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

模块。图片作者。

技巧 2:不要做硬编码

硬编码是在源代码中存储配置或输入数据的实践。这可以是文件路径、URL、远程主机名或用户名。

为什么这是一种不好的做法?您的代码只能在特定的环境下工作,如果某些条件发生变化,您需要更改源代码。这意味着搜索你的代码,找到所有你放它的地方。

相反,您应该从配置文件、数据库、用户输入或其他外部来源获取配置或输入数据。这使得更新条件变得容易。每个环境都有自己的配置文件。为了从配置文件中提取数据,您可以使用一个配置解析器

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

左边是配置文件,右边是从文件中提取数据的代码。图片作者。

提示#3:不同的错误是进度

开始的时候很沮丧。你需要习惯各种错误。您的代码无法工作,并且需要花费大量时间来找到所有错误消息的解决方案。但是,如果你的程序说不,不要失望,因为你修复的错误越多,你解决它们的能力就越强。

在我作为数据科学家的第一年,我和一个很好共事的人一起工作。他很高兴,因为错误信息与之前的不同,而新的错误让我很沮丧。这对我是一个教训,并帮助我继续前进。

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

😁👍由布雷特·乔丹Unsplash 上拍摄的照片

提示 4:不要重新发明轮子

当你是一个初学者时,你必须意识到你不需要从头开始写每一个功能。假设你想用 Python 来抓取一个网站,如果没有 BeautifulSoup 或其他抓取包,你的工作会变得相当复杂。或者使用数据科学,你不需要实现机器学习模型背后的所有数学,因为 scikit-learn 是你的朋友。这些例子有些夸张,但也有很多小任务适用于此。

你想想或者需要的话,大概已经有了!

记住这一点,开始写你的程序,在你编码之前搜索!

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

照片由 Christian WiedigerUnsplash 上拍摄

技巧 5:优化你的代码

在大学或课程中,表格数据集大部分时间都很小。您不必考虑代码优化,for 循环也不是问题。当你开始用杂乱的大数据解决业务问题时,它将是。您的代码可以在开发环境中使用小数据集很好地工作,但是在生产中您的过程可能会花费太长时间。

一个数据科学的例子:不要迭代数据帧行。而是使用apply函数、np.where或其他矢量化解决方案。

这里有一些让你开始的建议。

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

timeit 可能也很有用,它是一个 Python 库,提供了一种简单的方法来为小代码片段计时。图片作者。

技巧 6:处理异常并编写测试

生产就绪代码的一个重要部分是处理异常。它使你的代码健壮。如果你不处理异常,你的程序将会崩溃并以一种不受控制的方式退出。

Python 中处理异常的方式是使用tryexcept块。首先,您尝试执行一些代码行,如果代码失败,except 块将接管。可选地,您可以添加一个elsefinally块。

如果你想了解更多,本教程将解释异常处理。

学习测试你的代码也是有帮助的。在开发过程中,您可以编写断言。使用断言,您可以进行健全性检查,以查看您的代码是否如预期的那样运行。如果x等于1assert(x==1)将返回True。如果不是这样,assert语句抛出一个断言错误。如果您创建一个测试文件,并添加带有断言的小函数,这些函数一起可以成为您的单元测试,并且您可以自动化您的测试。

技巧 7:学习如何正确调试你的代码

如果你使用print语句来检查你的代码在做什么,你最好使用调试器。调试器为您提供了在任何地方暂停或冻结程序的工具。通过设置断点,您的代码暂停,您可以检查那一刻的状态。您可以逐句通过您的代码,您可以检查逻辑或变量值。

如果您使用 PyCharm 或 VS Code 之类的 IDE 来运行代码,您可能知道如何调试。python 的另一个选择是使用 Python 调试器。

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

断点设置在第 14 行(红点)。图片作者。

技巧 8:添加日志记录

通过日志记录,您可以跟踪软件运行时发生的事件。这是你程序的重要部分,因为它在开发过程中有帮助。在生产中,日志将使检测问题的原因变得更加容易。没有,你将很难找到它。

记录真的很容易。在 Python 中,你只需要写下面两行代码:

import logging 
logging.basicConfig(filename='<filename>.log', level=logging.INFO)

在这种情况下,日志记录级别设置为 info,因此日志文件将包含所有 info、warning、error 和 critical 消息。如果将级别设置为错误,则只有错误和严重消息会写入日志文件。

当您想要记录一条信息消息时,键入logging.info('<message>'),对于一条错误消息:logging.error('<message>')

就这么简单!

技巧 9:添加文档

是的,文档是个无聊的话题。写下你的代码做了什么需要时间,也许没有人会看它。另一方面,如果你想写专业的代码,你肯定应该写文档!你知道一个没有适当文档的流行包吗?

记录代码最简单的方法是在源代码中留下注释,尽管我不推荐这样做。更好的方法是使用像狮身人面像这样的软件包。遵循教程,你的文档马上就可以运行了!编写文档的另一个好处是,它将改进代码的组织方式,因为您自动地必须考虑它。

此图像中的文档字符串:

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

函数内的 Docstring。图片作者。

显示此文档:

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

上述功能的文档网页。图片作者。

最后的想法

你可能会发现学习 git面向对象编程空间&时间复杂度数据结构反模式算法很有用。理解这些主题肯定会提高你的编码技能,并且更容易与技术人员交流。尽管最终,数据科学工作最重要的部分是使用数据增加商业价值。如果你是一名数据科学家,不要害怕问一些有经验的 IT 人员他们将如何从技术上解决问题。这让您有更多时间关注数据和业务价值。

我希望这篇文章是有帮助的!享受编码!

别忘了 订阅 如果你想在我发表新文章时收到电子邮件。

当然,最好的数据是免费数据

原文:https://towardsdatascience.com/the-best-data-is-free-data-of-course-b88230b5b47f

使用 Socrata 开放数据 API 和 sodapy 包访问大量的开放数据

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

jUnsplash 上拍照

介绍

数据科学项目常用的数据仓库是 Kaggle 和 UCI 机器学习仓库。然而,那里可用的许多数据集是合成的,并不代表真实世界。

联邦、州和地方政府提供了大量真实世界的开放数据,您可以也应该在您的项目中使用这些数据。在这篇文章中,我将分享获得访问权限的简单步骤。你所需要的只是 Socrata 开放数据 API 和 sodapy 包。

出于解释的目的,我们将使用来自旧金山开放数据仓库 DataSF 的空中交通乘客统计数据集。

1.获取 Socrata 应用程序令牌

你的第一步是在https://data.sfgov.org/login注册一个免费账户,获得一个应用令牌。获得凭据后,单击创建新的应用程序令牌并完成必填字段。

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

您将被要求输入应用程序令牌的名称和描述,任何唯一的名称都可以。您的应用程序令牌会自动生成并显示在屏幕上。

为其他开放数据仓库获取应用令牌的过程是相同的。例如,可以在以下地址找到 NYC open data:https://data.cityofnewyork.us/login

2.安装 sodapy

下一步是用pip install sodapy安装 sodapy 包

3.建立联系

现在,我们将跳转到 Python IDE 来建立与 Socrata 开放数据 API 的连接。我用过 Jupyter 实验室:

第一步是导入 sodapy 包。接下来,我们必须定义我们的数据源并提供我们的应用程序令牌:

  • DATA_LINK: 这将根据您试图访问的开放数据存储库而有所不同,并且可以从 URL 获得。对于 dataSF,它是 data.sfgov.org,而对于纽约开放数据,它是 data.cityofnewyork.us

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

  • DATA_ID: 这是 API 端点,一个特定于您试图访问的数据集的指示符,也可以从 URL:

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

  • APP_TOKEN: 这是您在前面的步骤中获得的令牌。在上面的代码中,我输入了“redacted ”,以保持我自己的应用程序令牌私有。

最后,我们通过实例化一个 Socrata 对象并将其命名为 client 来建立连接。我们传递数据源和应用程序令牌。

4.请求数据

用 Socrata 开放数据 API 请求数据只需一行代码:

我们在 Socrata 对象上调用 get()方法,客户端。我们传递之前定义的 DATA_ID。默认情况下,将请求数据集中的前 1,000 条记录。我们将很快了解如何在每个 API 调用中请求更多的记录。

值得注意的是,当重复完全相同的请求时,Socrata API 将而不是返回相同的记录。为了保证一致的响应, order 参数应该与值’:id '一起使用,它对数据集进行排序。

5.将数据放入数据帧

默认情况下,请求的数据以 JSON 格式返回:

[{'activity_period': '200507',
  'operating_airline': 'ATA Airlines',
  'operating_airline_iata_code': 'TZ',
  'published_airline': 'ATA Airlines',
  'published_airline_iata_code': 'TZ',
  'geo_summary': 'Domestic',
  'geo_region': 'US',
  'activity_type_code': 'Deplaned',
  'price_category_code': 'Low Fare',
  'terminal': 'Terminal 1',
  'boarding_area': 'B',
  'passenger_count': '27271'},
 {'activity_period': '200507',
  'operating_airline': 'ATA Airlines',
  'operating_airline_iata_code': 'TZ',
  'published_airline': 'ATA Airlines',
  'published_airline_iata_code': 'TZ',
  'geo_summary': 'Domestic',
  'geo_region': 'US',
  'activity_type_code': 'Enplaned',
  'price_category_code': 'Low Fare',
  'terminal': 'Terminal 1',
  'boarding_area': 'B',
  'passenger_count': '29131'}]

幸运的是,将 JSON 数据放入 pandas 数据框架非常容易:

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

数据帧的前五条记录。

至此,您已经能够使用 sodapy 将打开的数据导入到 DataFrame 中进行分析。然而,我们必须涵盖一些高级主题,以便您可以充分利用 Socrata 开放数据 API——通过数据集分页和高级过滤。

6.浏览数据集

开放数据数据集可能非常大,您可能需要在多个请求中翻阅数据集。下面的代码请求数据集的记录计数,并计算页面大小为 1,000 条记录时有多少页:

:: Number of Records Available: 46,670
:: Number of Pages: 47

下面的代码段根据选定的 page_size 和计算的 num_pages 在数据集中分页:

  • limit: 指定请求的记录数(可选)。
  • offset: 指定我们应该在数据集中的什么地方开始我们的请求,在这个例子中是在第一个可用的记录处(可选)。
  • order=‘:id’: 指定数据集应该排序

查询结果的顺序不是隐式排序的,所以如果您正在分页,请确保您提供了一个$order 子句,或者至少使用记录 ID: $order=:id。这将保证在浏览数据集时结果的顺序是稳定的。

7.高级过滤

除了请求完整的数据集,还可以通过在 get 请求中添加 where 子句来请求过滤后的数据集。以下代码段请求 2005 年 7 月的所有记录:

结束语

从本文中,您了解了如何使用 Socrata 开放数据 API 和 sodapy 包访问开放数据数据集。纽约和旧金山只是众多免费数据库中的两个——我鼓励您探索其他开放的数据库。

如果你喜欢阅读这样的故事,并想支持我成为一名作家,可以考虑注册成为一名媒体会员。每月 5 美元,你可以无限制地阅读媒体上的故事。如果你用我的链接注册,我会赚一小笔佣金。

也请查看我的系列文章通过示例学习 Python 数据分析:

以及我最近发表的其他文章:

学习 Tableau 的最佳免费资源

原文:https://towardsdatascience.com/the-best-free-resources-for-learning-tableau-skills-5f0e5bfaa87e

不用花一分钱就能最大限度地学习

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

作者的工作空间。

我认为 Tableau 是可用的最重要的数据可视化工具之一。学习 Tableau 的基础知识并不难,尤其是如果你对电子表格和数据透视表有很强的理解。但是,从基础到精通 Tableau 需要花费大量的时间和精力。幸运的是,有大量的资源支持你的学习。这篇文章是一组精选的在线资源,可以提升你的 Tableau 技能。这个列表并不全面,因为我想避免给新学员过多的资源。请注意,我的资源列表不是按照重要性排序的。

油管(国外视频网站)

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

危地马拉安提瓜一栋建筑的窗户和门。图片由作者提供。

Tim Ngwena 是我最喜欢的内容创作者之一。他定期提供内容更新,他的教程质量很高,很吸引人。我欣赏对 Tableau 特定问题的深入探讨和清晰解释。我发现 Tim 关于细节层次表达的视频做得非常好。

sqlbelle : Donabel Santos 有很多精彩的模块,有很多与新学员高度相关的内容。我经常向我的学生推荐她的频道,尤其是关于了解 Tableau 工作空间以及尺寸与度量之间差异的视频。

安迪·克里贝尔:安迪是 Tableau 领域最有影响力的教育家之一。我看过无数的视频,这些视频提供了各种类型图表的深度潜水。我特别喜欢安迪对视觉设计的关注。与蒂姆和多纳贝尔的视频不同,安迪的作品往往是未经编辑和无脚本的,最著名的是看我的,即视频。但是,这是他的教育方法的资产,因为你可以理解他的思维过程,尤其是在调试问题的时候。

Tableau 软件 : Tableau 维护这个通道。我推荐这个频道,但有几个注意事项。此频道的内容不是专门为学员创建的。因此,你会花更多的时间来整理视频和播放列表。但是,该频道包含许多内容,以跟上 Tableau 世界的活动,包括会议录音。Iron Viz 的录音绝对值得一看。

在线 Tableau 支持

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

危地马拉的街头小吃摊贩。图片由作者提供。

这些资源提供了从更广泛的 Tableau 用户社区获得免费支持的绝佳方式。请记住,提供支持的人给你他们的时间,所以要注意你如何参与这个社区。在发表问题之前,确保你首先努力自己解决问题。熟悉提问的 StackOverflow 指南。虽然这是特定于 StackOverflow 的,但这些已经成为在线社区中的最佳实践。

Discord: Discord 是一个即时通讯系统。Tableau 用户社区已经建立了一个“服务器”来讨论 Tableau 问题并提供实时支持。你必须先用 Discord 设置一个账号,搜索 Tableau 服务器才能加入。由于支持是实时提供的,因此该资源可以帮助您高效地解决问题。

Tableau 支持社区 : Tableau 使用公告板格式维护这个在线社区。如果你发布了一个高质量的问题,你几乎保证会收到一个解决方案。尝试发布 Tableau 打包工作簿(*。twbx)与简化的数据集。

Reddit :如果你是Reddit,加入 Tableau 子 Reddit,在线社区发布关于 Tableau 的问题、新闻和资源。

博客和网站

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

危地马拉城的鸡肉巴士。图片由作者提供。

Tableau Viz of the Day :这个网站由 Tableau 维护,是一个很好的灵感来源,每个工作日都会发布一个新的 Tableau 可视化。你会发现不同主题的设计范例。

周三锻炼:周三锻炼对技能培养很有帮助。每周都会发布一个新的挑战,以重新创建数据驱动的可视化。解决方案发布在 Tableau Public 和 Twitter 的网站和社区上。

周一改造:周一改造也是技能培养的好时机。每周都会有一个可视化的图片和原始数据的链接一起发布。然后,社区成员重新制作他们的 viz 并发布到 Twitter 上。周三的训练侧重于画面的技术方面,而周一的改造侧重于设计方面。不幸的是,这个网站在 2022 年不再运营,但该网站仍然有 2018 年至 2021 年的翻拍、解决方案和视频的完整收藏。这个网站上有大量的学习资料。

自 2015 年以来,凯文和肯·弗雷尔拉格一直在制作高质量的 Tableau 内容。他们的内容倾向于关注 Tableau 更高级的技术特性,这使得这个网站成为提升你技能的绝佳选择。我印象深刻的是他们将设计与先进的技术问题相结合。

文档和其他资源

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

内蒙古戈壁沙漠。图片由作者提供。

Tableau 帮助:每个 Tableau 用户都需要仔细阅读 Tableau 文档。这些内容可能不像本文中包含的其他资源那样令人兴奋有趣。但是,排除它将是我的失职。我鼓励新学员定期访问特定于 Tableau 函数的文章集。这样做将有助于你接触 Tableau 的语言,这对你的长期技能发展至关重要。

Tableau Discover:当您打开 Tableau Desktop 时,请熟悉页面右侧的 Discover 页面。在这里,您可以找到免费培训指南和其他资源的内置链接。

外卖食品

请注意,在 Tableau 中完成一门课程或培训会让你获得使用 Tableau 成功创建有意义和有洞察力的可视化的所有技能和知识。除了将你的技能应用到现实世界的问题中(而不是简单地完成学术练习),你还需要不断接触不同的概念和不同的解释。这里提供的免费 Tableau 资源集合可以帮助满足这一需求。

sklearn 的最佳进口产品

原文:https://towardsdatascience.com/the-best-imports-from-sklearn-b5b9c4f2c0e3

了解从这个神奇的 Python 库中导入什么以及何时导入

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

亚历山大·奈特Unsplash 上拍照

sci kit-学习

Science Kit Learn,或者对入门者来说简称为sklearn,可能是 Python 中建模数据的主要软件包。

Sklearn 是 2007 年由 David Cournapeau 开发的。历史告诉我们,它始于谷歌的一个夏季项目。从那以后,发生了很多变化,信不信由你,1.0 版本直到 2021 年 12 月才发布!当然,早在那个日期之前,它就已经在各地提供了巨大的成果。

总之, sklearn 是一个库,它不仅处理非监督学习(如聚类)和监督学习(如回归分类),还处理围绕数据科学项目的所有其他组件。使用 sklearn,我们可以访问预处理工具,如缩放、归一化。我们可以看到模型选择工具,如 k-fold,网格搜索,交叉验证。当然,有创建模型的算法,也有检查指标的工具,比如混淆矩阵。

在这篇文章中,我想与您分享的是在您使用 Scikit Learn 时要导入的一些模块,因此您可以在构建模型时使用这些内容作为快速参考。让我们看看他们。

预处理数据

建模数据不仅仅是加载 sklearn 并通过算法运行数据。它需要更多的时间来处理数据,因此您可以为模型提供良好的输入。为此,您可以使用以下模块。

最小最大缩放器

此工具将根据变量的最大值和最小值对数据进行归一化。最大值变为 1,最小值为 0,两者之间的所有值都是最大值的百分比。

from sklearn.preprocessing import [**MinMaxScaler**](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html#sklearn.preprocessing.MinMaxScaler)

标准缩放器

Normalize 会将变量转换为均值= 0,标准差= 1。但是,它不会改变数据的形状,这意味着它不会将数据转换为正态分布。

from sklearn.preprocessing import [S](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html#sklearn.preprocessing.StandardScaler)[tandardScaler](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html#sklearn.preprocessing.StandardScaler)

估算者

当缺失值过多,并且我们希望使用某种插补技术来估计当前为 NA 的值时,使用插补器。其主要模块如下。

from sklearn.impute import [**SimpleImputer**](https://scikit-learn.org/stable/modules/generated/sklearn.impute.SimpleImputer.html#sklearn.impute.SimpleImputer)from sklearn.impute import [**KNNImputer**](https://scikit-learn.org/stable/modules/generated/sklearn.impute.KNNImputer.html#sklearn.impute.KNNImputer)
from sklearn.impute import [**IterativeImputer**](https://scikit-learn.org/stable/modules/generated/sklearn.impute.IterativeImputer.html#sklearn.impute.IterativeImputer)

特征选择

如果挑战是为一个模型寻找最好的特征,有许多可能性。Scikit Learn 将提供这些以及更多。

from sklearn.feature_selection import [**SelectKBest**](https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectKBest.html#sklearn.feature_selection.SelectKBest), [**f_classif**](https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.f_classif.html#sklearn.feature_selection.f_classif), [**r_regression**](https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.r_regression.html#sklearn.feature_selection.r_regression)from sklearn.feature_selection import [**RFE**](https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html#sklearn.feature_selection.RFE)

总而言之:

【In】数字;[Out]数值:

SelectKBest(score_func=f_regression, k=number best attributes)

SelectKBest(score_func=mutual_info_regression, k=number best attributes)

【In】数字;[Out]分类:

SelectKBest(score_func=f_classif, k=number best attributes)

【直言不讳】;[Out]分类:

SelectKBest(score_func=chi2, k=number best attributes)

SelectKBest(score_func=mutual_info_classif, k=number best attributes)

型号选择

在经过预处理和特征选择之后,就到了选择模型的时候了。

列车测试分离

当然,我们需要将数据分为解释变量(X)和被解释变量(y)。为此,我们使用训练测试分割。

from sklearn.model_selection import **train_test_split**

交叉验证和折叠

有许多方法可以交叉验证数据。最常见的是使用 K-fold,将数据分成 K 个部分,每个部分都用作训练集和测试集。例如,如果我们将一个集合折叠成 3 个,则第 1 部分和第 2 部分是训练,第 3 部分是测试。然后下一次迭代使用 1 和 3 作为训练,使用 2 作为测试。最后,2 和 3 被训练,1 被测试。

from sklearn.model_selection import [**cross_validate**](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.cross_validate.html#sklearn.model_selection.cross_validate), [**cross_val_score**](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.cross_val_score.html#sklearn.model_selection.cross_val_score)
from sklearn.model_selection import [**KFold**](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.KFold.html#sklearn.model_selection.KFold)

在这个链接中,你可以看到更多的选项和文档,比如省去一个、分层折叠、洗牌拆分等等。

模型调整

为了调整模型,sklearn 将为我们提供这些令人惊叹的选项,即网格搜索或随机搜索。使用这种方法,可以测试模型参数的多种组合,将最佳结果作为继续预测的最佳估计值。

from sklearn.model_selection import[**GridSearchCV**](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html#sklearn.model_selection.GridSearchCV)from sklearn.model_selection import [**RandomizedSearchCV**](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html#sklearn.model_selection.RandomizedSearchCV)

评估者

估计量是可供我们使用的算法。Scikit learn 有很多这样的例子。

无监督:聚类

无监督学习是指我们不为预测提供标签。因此,该算法将在没有监督的情况下寻找模式并对数据点进行分类。意思是,没有“正确或错误的答案”。

# Clustering
from sklearn.cluster import [**KMeans**](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans)from sklearn.cluster import [**DBSCAN**](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html#sklearn.cluster.DBSCAN)from sklearn.mixture import [**GaussianMixture**](https://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture)

分类

分类模型将理解来自数据集的模式以及什么是相关联的标签或组。然后,它可以根据这些模式对新数据进行分类。最常用的是集合模型,如随机森林或梯度推进。还有一些更简单的,像决策树,逻辑回归和 K 近邻。

from sklearn.ensemble import [**RandomForestClassifier**](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier)from sklearn.ensemble import [**GradientBoostingClassifier**](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html#sklearn.ensemble.GradientBoostingClassifier)
from sklearn.tree import [**DecisionTreeClassifier**](https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier)
from sklearn.neighbors import [**KNeighborsClassifier**](https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html#sklearn.neighbors.KNeighborsClassifier)from sklearn.linear_model import[**LogisticRegression**](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression)

回归

回归问题是那些需要返回一个数字作为输出的问题。回归解决的经典问题是汽车和房价。在这种情况下,最常用的模型是线性模型。有一些正则化回归的选项,如山脊或套索。对于非线性关系,也可以使用基于树的模型。

from sklearn.linear_model import [**LinearRegression**](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html#sklearn.linear_model.LinearRegression)
from sklearn.linear_model import [**Ridge**](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Ridge.html#sklearn.linear_model.Ridge)from sklearn.ensemble import [**RandomForestRegressor**](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestRegressor.html#sklearn.ensemble.RandomForestRegressor)from sklearn.ensemble import [**GradientBoostingRegressor**](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingRegressor.html#sklearn.ensemble.GradientBoostingRegressor)

韵律学

最后,我们可以使用 sklearn 的度量组件来评估模型。接下来看看最常用的。

分类指标

from sklearn.metrics import [**f1_score**](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.f1_score.html#sklearn.metrics.f1_score)
from sklearn.metrics import [**confusion_matrix**](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.confusion_matrix.html#sklearn.metrics.confusion_matrix)
from sklearn.metrics import [**accuracy_score**](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.accuracy_score.html#sklearn.metrics.accuracy_score)
from sklearn.metrics import [**auc**](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.auc.html#sklearn.metrics.auc)

回归度量

from sklearn.metrics import [**mean_squared_error**](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_squared_error.html#sklearn.metrics.mean_squared_error)
from sklearn.metrics import [**mean_absolute_error**](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_absolute_error.html#sklearn.metrics.mean_absolute_error)
from sklearn.metrics import [**r2_score**](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.r2_score.html#sklearn.metrics.r2_score)

在你走之前

Scikit learn 是数据科学家的得力助手。在他们的文档中,您可以探索和学习更多的东西。

在这里,我们只介绍了一些常用于数据科学的导入,但是,如果您访问他们的页面,您可以看到更多。

他们的文档的优点是非常清晰和有条理。此外,很多时候它给你一个关于算法或函数所解决的问题的深度知识。

如果你喜欢这个内容,请关注我的博客。

http://gustavorsantos.medium.com/

参考

https://scikit-learn.org/stable/modules/classes.html# https://en.wikipedia.org/wiki/Scikit-learn

自预浸泡以来,浓缩咖啡的最佳改进:蒸汽预浸泡

原文:https://towardsdatascience.com/the-best-improvement-for-espresso-since-pre-infusion-steam-pre-infusion-42983203b79c

咖啡数据科学

利用杠杆机器的提示进行改进

在之前的中,我比较了 Kim Express 和体面的 Espresso (DE)咖啡机,发现 Kim Express 在味道和咖啡提取方面更好。随着我对原因的深入挖掘,我发现两个主要原因:水温和蒸汽预注入(PI)。

提高水温只能缩小差距,所以我调查了咖啡喷嚏,原来是蒸汽预浸。我想在 DE 中复制这一点,这是一个通向更好咖啡的有趣旅程。

轮廓开发

蒸汽预注入发生在 Kim Express 中,因为水箱中的水温超过 100 摄氏度。通常,我的在 116C 到 120C 之间,这意味着当水开始进入腔室时,它首先变成蒸汽。蒸汽先于水穿过冰球。

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

所有图片由作者提供

起始轮廓

我从一个我已经工作了几个月的档案开始。它包括快速预浸泡,一旦过滤器被咖啡覆盖,就手动结束预浸泡。随后暂停,直到手动输入开始进入压力脉冲

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

我开始使用 0.5 毫升/秒的流量限制添加 10 秒蒸汽 PI。这对唐努汀产生了直接影响。

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

我尝试了更长和更短的蒸汽 PI。最佳流速为 0.2 毫升/秒,因为它允许刚好足够的水进入圆盘。0.1 毫升/秒太慢,0.4 毫升/秒太快。

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

我还查看了 steam PI 的时间长度。理想状态是 5 到 20 秒。这取决于你的锅炉的温度。DE 中的测量值肯定会测量到更高的圆盘温度,但这是在顶部测量的。我还注意到水温没有我开始时下降得快。

我已经根据我正在煮的咖啡修改了蒸汽管道的长度。我继续测试这个变量,以便更好地理解如何使用它。

设备/技术

意式咖啡机 : 像样的意式咖啡机

咖啡研磨机 : 小生零

咖啡:家庭烘焙咖啡,中杯(第一口+ 1 分钟)

镜头准备:断奏夯实断奏

预灌注:长,约 25 秒

输液:压力脉动

过滤篮 : 7g/20g VST

其他设备: Atago TDS 计Acaia Pyxis 秤

绩效指标

我使用了两组指标来评估技术之间的差异:最终得分和咖啡萃取。

最终得分 是评分卡上 7 个指标(尖锐、浓郁、糖浆、甜味、酸味、苦味和回味)的平均值。当然,这些分数是主观的,但它们符合我的口味,帮助我提高了我的拍摄水平。分数有一些变化。我的目标是保持每个指标的一致性,但有时粒度很难确定。

使用折射仪测量总溶解固体量(TDS),该数字结合咖啡的输出重量和输入重量用于确定提取到杯中的咖啡的百分比,称为提取率(EY)** 。**

抽样资料

我看了一些样本数据,因为我还没有准备好拍摄一组配对照片。我想更好地理解这项技术。所以我看了两个样本集,它们显示了我的总体经历。

让我们从我 2022 年 5 月 4 日烤的有和没有蒸汽 PI 的例子开始。蒸汽码头似乎有一个稍微深一些的颜色。

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

看两次烘烤,每次烘烤三次,我们可以看看 Kim Express 的性能。蒸汽 PI 对两种烘焙都更好,但 5/4/2022 烘焙能够匹配 EY/TDS 上的 Kim,并在味道上击败它。

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

在一些蒸汽预注入后,射击时间更符合 Kim。

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

随着我对这项技术的进一步试验,这只是一个很小的数据分享。我想知道,如果 E61 型机器在淋浴屏幕上方有一些空间,它是否可以更好地模拟杠杆机器,允许在室内装满水时进行蒸汽预注入。我的目标是将来做一个更好的并列比较。

如果你愿意,可以在推特、 YouTubeInstagram 上关注我,我会在那里发布不同机器上的浓缩咖啡照片和浓缩咖啡相关的视频。你也可以在 LinkedIn 上找到我。也可以关注我在订阅

我的进一步阅读:

我未来的书

我的链接

浓缩咖啡系列文章

工作和学校故事集

我经历过的最好的面试从来都不是编码挑战

原文:https://towardsdatascience.com/the-best-interviews-ive-had-were-never-coding-challenges-95ec0cde765b

你可以尝试不同风格的面试

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

照片由 Maranda VandergriffUnsplash 上拍摄

面试可能是一次充满压力的经历。2018 年硕士毕业至今,面试了上百个职位。这些职位包括从数据科学家到分析师、解决方案架构师等等。其中,一些独特的采访让我印象深刻,有好有坏。面试的时候,你不仅仅是给一家公司你自己的第一印象,你是在获得他们和团队的第一印象。有了这些,这里有三种我认为有益的面试风格,还有一些,没那么有益。

白板挑战

当我刚毕业时,我参加了波士顿一家公司的数据分析师面试。最终,我没有接受这份工作,但我喜欢这种面试方式。当时,这次采访是在一个会议室里进行的。许多团队成员围坐在桌子旁和我交谈。我们讨论了你期望得到的一般性问题,比如你的背景、经历和学校教育。但我们也做了一个令人兴奋的数据清理挑战。他们打开了一个 Excel 表格,并在大屏幕上分享,而不是代码。我把这个挑战和其他白板会议归为一类。屏幕上有一个例子,如下所示:

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

作者创建的示例表

当看到这样的例子时,他们说,“清理数据”。预期是申请人将逐列、逐行地浏览数据。在此过程中,申请人需要与面试官讨论他们所看到的情况以及他们将如何处理每个案例。他们想知道你的选择背后的解释。

An example of some of the items you may pick out from above include:

1\. The column headers are different cases; some have spaces, some do not, and one name is unclear.
2\. First and last names are handled differently based on the case, and one person is missing a last name.
3\. Dates are in different formats.
4\. States have abbreviations, full spellings, and misspellings.
5\. The numeric column has a variation of ints longs, and one number has a comma.
6\. Alice appears twice and maybe the same person. Is the duplication needed?

我喜欢这个挑战,因为它让你思考如何解决这样的问题。你可以谈谈你的推理,和面试官谈谈你的决定。

我见过的另一种形式的白板会议包括实际的白板。在一次面试中,有人递给我一支马克笔,让我走一遍机器人地图系统的架构。在此期间,我需要展示脑海中出现的架构,并完成我的决策。当有人提出问题时,我会重新考虑设计并做出适当的修改。在很大程度上,我喜欢白板挑战,因为它们让受访者在纸上浏览想法。

我唯一一次对这种具有挑战性的风格有异议是在我被问到如何设计不同的解决方案的时候。比如一个问题给了一个数据集,要求对信息进行排序。我被告知“用你想要的任何语言起草解决方案。”看着他们提出的问题和数据,我用白板演示了一个地图缩减示例,并讨论了 Spark 如何扩展解决方案。他们没有讨论这个问题并进行更深入的研究,而是开始坚持认为这只能在 SQL 中完成。那时,他们希望每个问题都是 SQL 语言,并且只问针对该语言的问题。对我来说,这没有意义。那么,为什么指定您的解决方案可以用任何语言或格式设计,然后再推动一种特定的语言呢?相反,他们应该一开始就明确这种区别。

研究报告

我喜欢的下一种面试是陈述。面试前,我被要求准备一套 20 分钟的幻灯片。这副牌包括四个部分。前两个介绍了我以及我为什么对这个行业感兴趣。接下来,我将详细介绍我在数据科学领域所做的研究或项目。最后,我讲述了如何处理不明确的需求并形成数据解决方案。

我喜欢这种面试形式,因为它让我展示了我是谁以及我所做的工作。我利用演讲的研究部分浏览了不同会议上的所有科学演讲。在这些讨论中,我们浏览了海报,每个受访者都可以提出与工作相关的问题。最后,我们深入到不同的方面,展示了我所擅长的。

这种形式非常类似于在会议上展示海报。面试小组的任何人都可以过来问你问题。唯一的区别是这些人是面试官,他们根据看到的内容轮流提问。另一个原因是,我觉得这种类型的面试很有趣,因为压力较小。我知道我要展示的内容,以及围绕这项工作的问题。没有我预料不到的非常随机的问题。

在接受一个角色后,我在团队里呆了几个月,然后面试其他人加入我们。当我开始参与采访时,我们一直保持着我描述的那种形式。这是一个很好的方式来和人们讨论他们做得最好的是什么,那是他们的工作和研究。我记得曾经采访过一个人,关于他们所做的医学研究,有演示文稿是很棒的,因为它们可以包含图像。这些图片完美地配合了对话,因为我们可以看到他们描述的问题类型,并询问与我们在这些图片中看到或没有看到的内容相关的问题。

如果我不得不再次做这些采访,我会使用这种形式。然而,数据科学非常适合可视化,如果你能在采访中分享它们并讨论你的发现,为什么不呢!

一段对话

简单来说,一段对话。我遇到的一些最好的采访不是深入技术问题并找出某人到底研究了什么,而是关于这个领域、工作和生活的一般对话。在进入数据领域之前,我在 DevOps 中从事服务器方面的工作。我对那个全职职位的第一次面试是与我当时的经理的一次谈话,内容是他在团队中的工作以及我如何帮助他的工作。

几年后,我最近的一次采访是与一位资深数据科学家的对话。在这次谈话中,我们简短地讨论了他试图在他的项目中做的工作。这项工作包括自然语言处理和文本挖掘。有了这些信息,我们花了一个小时谈论我的工作有多少相似之处,然后我们深入探讨了如何一起解决一个具体的问题。和他谈过之后,我和招聘经理谈了谈。这时,他给了我一个他正在处理的客户的问题,我们讨论了如何围绕这个问题起草一个解决方案。最后,我们讨论了在您可能没有所有数据的情况下,您将如何处理此类解决方案的业务,以及您会提出什么类型的问题。

我发现这种类型的对话比技术问题或编码挑战的速度测试更有益,因为我可以和别人谈论我的工作和激情。我与之交谈的另一位经理在电话中花了两个多小时谈论公司、我们各自的职业生涯以及数据科学界的现状。当我们开始讨论一个特定的话题时,我们会深入探讨它的复杂性。因此,我们没有处于紧张的状态,而是就我的技能如何应用到他们的工作中进行了一次很好的交谈。我喜欢在采访中深入探讨的一个特殊领域是,数据科学领域的人员如何与业务和工程领域的不同人员互动。有效的沟通往往是一个伟大的话题,可以让许多人谈论。

最后的想法

不是所有的面试都需要编码挑战和速度问题来得到最快最好的答案。有些面试可以采取不同的形式,但仍能提供价值。例如:

  1. 白板会议是让人们参与到他们正在做的事情中并集体讨论问题的好方法。
  2. 深入研究某人的研究或过去的项目的演示可能很有见地。你可以看到某人专注于什么工作,并可以有针对性地询问该工作如何适用于你的空缺职位。
  3. 一段对话。简而言之,有时候,仅仅和某人进行日常对话就能收集到你需要的洞察力。当面对一个似乎非常渴望交谈的人时,这可能是一个有用的策略。

如果说我从这些采访中学到了什么,无论这个人的研究或背景如何,每个人都值得被倾听和尊重。你可以形成自己的观点,不想让某个人加入你的团队,而不会显得粗鲁或让他们感觉不好。

你经历过的最好和最差的面试形式是什么?你会再次使用它们吗?

感谢阅读!我希望你喜欢阅读我所学到的东西,并对关注更多,订阅我的通讯

最佳学习率时间表

原文:https://towardsdatascience.com/the-best-learning-rate-schedules-6b7b9fb72565

设置学习率的实用而强大的技巧

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

(由 Unsplash 上的 Element5 数码拍摄)

任何训练过神经网络的人都知道,在训练期间适当地设置学习速率是让神经网络表现良好的一个关键方面。此外,学习率通常根据一些学习率时间表沿着训练轨迹变化。这个时间表的选择对培训质量也有很大的影响。

大多数从业者在培训期间采用一些广泛使用的学习率计划策略;例如阶跃衰减或余弦退火。这些时间表中的许多都是为特定的基准而策划的,在经过多年的研究后,它们是根据经验确定的,以最大限度地提高测试的准确性。但是,这些策略往往无法推广到其他实验环境,这就提出了一个重要的问题:对于训练神经网络来说,最一致、最有用的学习速率表是什么?

在这个概述中,我们将着眼于最近对各种学习速率表的研究,这些学习速率表可用于训练神经网络。这样的研究发现了许多提高学习速度的策略,这些策略既高效又易于使用;例如循环或三角学习率计划。通过研究这些方法,我们将得出几个实用的要点,提供可以立即应用于改善神经网络训练的简单技巧。

为了补充这个概述,我实现了主要的学习率计划,我们将在这里的找到的库内探索这些计划。这些代码示例有些简单,但它们足以轻松实现本概述中讨论的任何学习率计划。

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

各种类型的学习率计划的图解(由作者创建)

神经网络训练和学习率

在监督学习设置中,神经网络训练的目标是生成一个神经网络,在给定一些数据作为输入的情况下,该神经网络可以预测与该数据相关联的基本事实标签。这方面的一个例子是训练一个神经网络,根据一个大的猫和狗的标记图像数据集,正确地预测一个图像是包含一只猫还是一只狗。

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

训练神经网络的组件(由作者创建)

如上所述,神经网络训练的基本组件如下:

  • **神经网络:**将一些数据作为输入,并根据其内部参数/权重对这些数据进行转换,以产生一些输出。
  • **数据集:**输入输出数据对(如图像及其对应的分类)的一大组实例。
  • **优化器:**用于更新神经网络的内部参数,使其预测更加准确。
  • **超参数:**由深度学习实践者设置的外部参数,用于控制训练过程的相关细节。

通常,神经网络开始训练时,其所有参数都是随机初始化的。为了学习更有意义的参数,向神经网络显示来自数据集的数据样本。对于这些样本中的每一个,神经网络试图预测正确的输出,然后优化器更新神经网络的参数以改进这种预测。

更新神经网络参数以使其能够更好地匹配数据集中的已知输出的过程称为训练。该过程反复重复,通常直到神经网络多次循环遍历整个数据集(称为一个训练时期)。

虽然这种对神经网络训练的描述并不全面,但它应该提供足够的直觉来完成这一概述。网上有许多关于神经网络训练的广泛教程。目前为止我最喜欢的教程来自杰瑞米·霍华德和 fast.ai 的《程序员实用深度学习》课程;请参见下面的视频链接。

什么是超参数?

模型参数由优化器在训练期间更新。相比之下,超参数是我们深度学习实践者可以控制的“额外”参数。但是,*我们实际上可以用超参数控制什么呢?*与本概述相关的一个常见超参数是学习率。

**学习率是多少?**简单来说,每次优化器更新神经网络的参数时,学习率控制着这次更新的大小。*我们应该大量更新参数,一点点更新,还是在中间某处更新?*我们通过设置学习率来做出选择。

**选择好的学习率。**设定学习率是训练神经网络最重要的方面之一。如果我们选择一个太大的值,训练将会发散。另一方面,学习率太小会导致表现不佳和训练缓慢。我们必须选择一个足够大的学习率,以便为训练过程提供正则化的好处并快速收敛,同时不能太大以至于训练过程变得不稳定。

选择好的超参数

模型参数由优化器在训练期间更新。相比之下,超参数是我们深度学习实践者可以控制的“额外”参数。但是,用超参数我们能控制什么呢?与本概述相关的一个常见超参数是学习率。

**什么是学习率?**简单来说,每次优化器更新神经网络的参数时,学习率控制着这次更新的大小。*我们应该更新参数很多,一点点,还是中间的某个地方?*我们通过设置学习率来做出选择。

选择一个好的学习率。设定学习率是训练神经网络最重要的方面之一。如果我们选择一个太大的值,训练将会发散。另一方面,学习率太小会导致表现不佳和训练缓慢。我们必须选择一个足够大的学习率,以便为训练过程提供正则化的好处并快速收敛,同时不能太大以至于训练过程变得不稳定。

选择好的超参数

学习率等超参数通常使用一种简单的方法选择,称为网格搜索。基本想法是:

  1. 为每个超参数定义一个潜在值范围
  2. 选择一组离散值在此范围内进行测试
  3. 测试可能的超参数值的所有组合
  4. 根据验证集性能选择最佳超参数设置

网格搜索是对最佳超参数的简单、详尽的搜索。有关潜在学习率值的网格搜索示例,请参见下图。

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

最佳学习率的网格搜索(由作者创建)

通过遵循类似的方法并测试超参数值的所有可能组合,可以将类似的方法同时应用于许多超参数。

网格搜索在计算上是低效的,因为它需要为每个超参数设置重新训练神经网络。为了避免这种成本,许多深度学习实践者采用“猜测和检查”的方法,在合理的范围内尝试几个超参数,看看什么有效。选择最佳超参数的替代方法已被提出[5],但网格搜索或猜测和检查程序因其简单性而被普遍使用。

学习率调度

在选择了学习率之后,我们通常不应该在整个训练过程中保持相同的学习率。相反,传统智慧建议我们应该 (i) 选择一个初始学习率,然后 (ii) 在整个训练过程中衰减这个学习率[1]。我们用来执行这种衰减的函数被称为学习速率表。

多年来已经提出了许多不同的学习速率表;例如,阶跃衰减(即,在训练期间将学习速率衰减 10X 几次)或余弦退火;见下图。在这个概述中,我们将探讨一些最近提出的表现特别好的时间表。

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

阶跃衰减和余弦退火学习率图表(由作者创建)

**适应性优化技术。**根据随机梯度下降 (SGD)的神经网络训练选择用于更新所有模型参数的单个全局学习速率。除了 SGD 之外,还提出了自适应优化技术(例如, RMSProp 或 Adam【6】),这些技术使用训练统计数据来动态调整用于每个模型参数的学习率。本概述中概述的大多数结果适用于自适应和 SGD 风格的优化器。

出版物

在本节中,我们将看到最近提出的学习率计划的几个例子。这些策略包括循环或三角学习率,以及学习率衰减的不同模式。最佳学习率策略高度依赖于领域和实验设置,但是我们将会看到,通过研究许多不同学习率策略的经验结果,可以得出一些高层次的结论。

训练神经网络的循环学习率【1】

作者在[1]中提出了一种在神经网络训练期间处理学习速率的新方法:根据平滑时间表在最小值和最大值之间循环变化。在这项工作之前,大多数实践者采用了流行的策略 (i) 将学习率设置为一个初始的大值,然后 (ii) 随着培训的进行逐渐降低学习率。

在[1]中,我们抛弃了这一经验法则,转而采用循环策略。以这种方式循环学习率有些违反直觉——在训练期间增加学习率会损害模型性能,对吗?尽管随着学习率的增加,网络性能会暂时下降,但循环学习率计划实际上会在整个培训过程中带来很多好处,我们将在【1】中看到。

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

(来自[1])

循环学习率引入了三个新的超参数:步长、最小学习率和最大学习率。由此产生的时间表是“三角形”的,意味着学习率在相邻的周期中增加/减少;见上文。步长可以设置在 2-10 个训练时段之间,而学习率的范围通常通过学习率范围测试来发现(参见[1]的第 3.3 节)。

增加学习率会暂时降低模型性能。然而,一旦学习率再次下降,模型的性能将会恢复并提高。考虑到这一点,我们在[1]的实验结果中看到,用循环学习率训练的模型在其表现中遵循一种循环模式。模型性能在每个周期结束时达到峰值(即,当学习率衰减回最小值时),并且在周期的中间阶段(即,当学习率增加时)变得有些差;见下文。

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

(来自[1])

[1]中的结果表明,在训练过程中,循环学习率有利于模型性能。通过循环学习率训练的模型比通过其他学习率策略训练的模型更快地达到更高的性能水平;见下图。换句话说,用循环学习率训练的模型的 anytime 性能真的很好!

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

(来自[1])

在 ImageNet 上的大规模实验中,循环学习率仍然有好处,尽管它们没有那么明显。

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

(来自[1])

SGDR:带有热重启的随机梯度下降

作者在[2]中提出了一种简单的学习率重启技术,称为重启随机梯度下降(SGDR),其中学习率被周期性地重置为其初始值并计划降低。该技术采用以下步骤:

  1. 按照固定的时间表降低学习速度
  2. 衰减计划结束后,将学习率重置为其原始值
  3. 返回步骤#1(即,再次衰减学习率)

下面提供了遵循该策略的不同时间表的描述。

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

(来自[2])

我们可以注意到关于上面的时间表的一些事情。首先,在[2]中总是使用余弦衰减时间表(该图的 y 轴是对数标度)。此外,随着训练的进行,每个衰减时间表的长度可能会增加。具体来说,[2]中的作者将第一个衰变周期的长度定义为T_0,然后在每个后续衰变周期中将该长度乘以T_mult;见下文的描述。

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

延长 SGDR 境内的周期长度(由作者创建)

按照[1]的术语,SGDR 的步长可能在每个周期后增加。然而,与[1]不同,SGDR 不是三角形的(即,每个周期只是衰减学习速率)。

在 CIFAR10/100 上的实验中,我们可以看到 SGDR 学习率计划比阶跃衰减计划更快地产生良好的模型性能——SGDR 具有良好的随时性能。在每个衰变周期之后获得的模型表现良好,并且在连续的衰变周期中继续变得更好。

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

(来自[2])

除了这些初步结果,我们还可以研究在每个衰变周期结束时拍摄“快照”所形成的模型集合。特别是,我们可以在 SGDR 时间表内的每个衰变周期后保存模型状态的副本。然后,在训练完成后,我们可以在推断时对这些模型中的每一个的预测进行平均,形成模型的集合/组;点击链接这里了解更多关于合奏的细节。

通过以这种方式形成模型集合,我们可以在 CIFAR10 上实现非常显著的测试误差减少;见下文。

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

(来自[2])

此外,来自 SGDR 的快照似乎提供了一套具有不同预测的模型。以这种方式形成集成实际上优于将独立的、完全训练的模型添加到集成中的正常方法。

超收敛:使用大的学习速率非常快速地训练神经网络 [3]

[3]中的作者研究了一种训练神经网络的有趣方法,该方法允许训练速度提高一个数量级。基本方法——最初在[8]中概述——是执行一个具有较大最大学习率的单一三角形学习率循环,然后在训练结束时允许学习率衰减到低于该循环的最小值;请看下面的插图。

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

1 周期学习率和动量表(由作者创建)

此外,动量以与学习速率相反的方向循环(通常在[0.85,0.95]的范围内)。这种联合循环学习速率和动量的方法被称为“1 循环”。作者在[3]中表明,它可以用来实现“超收敛”(即极快地收敛到高性能的解决方案)。

例如,我们在 CIFAR10 上的实验中看到,1cycle 可以比基线学习率策略获得更好的性能,训练迭代次数减少了 8 倍。使用不同的 1cycle 步长可以进一步提高训练速度,尽管精度水平会因步长而异。

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

(摘自[3])

我们可以在一些不同的架构和数据集上观察到类似的结果。参见下表,其中 1cycle 在数量少得惊人的训练时段中再次产生了良好的性能。

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

(摘自[3])

目前,由于[3]中提供的实验在规模和种类上有所限制,尚不清楚是否可以在大量的实验设置中实现超收敛。尽管如此,我们可能都同意超级趋同现象非常有趣。事实上,这个结果非常有趣,甚至被 fast.ai 社区推广和深入研究;见此处

REX:用改进的时间表重新审视预算培训

在[4]中,作者(包括我自己)考虑了在给定不同预算制度(即,小、中或大数量的训练时期)的情况下适当安排学习率的问题。你可能会想:*我们为什么要考虑这种设置?*通常,训练时期的最佳数量事先并不知道。此外,我们可能会使用固定的货币预算来限制我们可以执行的训练次数。

为了找到最佳的预算不可知的学习率计划,我们必须首先定义将被考虑的可能的学习率计划的空间。在[4]中,我们通过将学习率计划分解为两个部分来实现这一点:

  1. Profile: 学习率在整个训练过程中变化的函数。
  2. **采样率:**根据所选的配置文件更新学习率的频率。

这种分解可以用来描述几乎所有的固定结构的学习率时间表。不同的曲线和采样速率组合如下所示。较高的采样速率会使时间表与底层配置文件更加匹配。

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

用不同的曲线和采样速率描述学习速率表(来自[4])

[4]中的作者考虑了由不同的采样速率和三个函数轮廓形成的学习速率计划——指数(即,产生步进计划)、线性和 REX(即,在[4]中定义的新轮廓);见上图。

在这里,作者在 CIFAR10 上使用不同的采样速率和配置文件组合来训练 Resnet20/38。在这些实验中,我们看到阶跃衰减时间表(即,具有低采样率的指数曲线)仅在给定低采样率和许多训练时期的情况下表现良好。REX 调度每次迭代采样在所有不同的历元设置中表现良好。

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

(摘自[4])

先前的工作表明,线性衰减时间表最适合低预算的训练设置(即,具有较少时期的训练)[9]。在[4]中,我们可以看到 REX 实际上是一个更好的选择,因为它避免了在训练期间过早地衰减学习率。

从这里开始,[4]中的作者考虑了各种流行的学习率计划,如下图所示。

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

[4]中研究的不同学习率计划

这些时间表经过了各种领域和训练时期预算的测试。当汇总所有实验的性能时,我们会得到如下所示的结果。

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

(摘自[4])

很快,我们看到 REX 在不同的预算制度和实验领域取得了惊人的一致表现。没有其他的学习进度计划在实验中达到接近前 1/3 的比率,这表明 REX 是一个很好的领域/预算不可知的学习进度计划。

除了 REX 的一致性,这些结果教给我们一些更普遍的东西:*常用的学习速率策略在实验环境中并不通用。*每种学习计划(即使是 REX,尽管程度较轻)仅在少数情况下表现最佳,这表明为任何特定环境选择合适的学习率策略都非常重要。

外卖食品

正确处理学习速率可以说是神经网络训练最重要的方面。在这个概述中,我们已经了解了几个用于训练深度网络的实用学习率计划。研究这一行提供了简单易懂、易于实现且高效的要点。下面列出了一些基本要点。

**选择一个好的学习率。**正确设置学习率是训练高性能神经网络的最重要方面之一。选择不良的初始学习率或使用错误的学习率计划会显著降低模型性能。

**“默认”时间表并不总是最好的。**许多实验设置都有一个“默认”的学习速率表,我们往往会不假思索地采用它;例如用于训练图像分类的 CNN 的步进衰减时间表。我们应该意识到,随着实验设置的改变,这些时间表的性能可能会急剧恶化;例如,对于预算设置,基于 REX 的调度明显优于步长衰减。作为实践者,我们应该始终注意我们选择的学习率计划,以真正最大化我们模型的性能。

周期性的日程安排太棒了。循环或三角学习率计划(如[2]或[3])非常有用,因为:

  • 它们经常达到或超过最先进的性能
  • 他们随时都有很好的表现

使用循环学习率策略,模型在每个衰减周期结束时达到最佳性能。我们可以简单地继续训练任意给定的周期数,直到我们对网络的性能满意为止。最佳的训练量不需要事先知道,这在实践中经常是有用的。

**外面有很多值得探索的地方。**虽然学习速度策略已经被广泛研究,但似乎还有更多有待发现。例如,我们已经看到,采用替代衰变曲线有利于预算设置[4]和循环策略,在某些情况下甚至可以用来实现超收敛[3]。我的问题是:*还能发现什么?*似乎真的有一些有趣的策略(例如,分形学习率[7])有待探索。

软件资源

作为对这个概述的补充,我创建了一个轻量级代码库,用于复制一些不同的学习率计划,包括:

  • 产生不同衰变曲线的函数
  • PyTorch 优化器中用于调整学习率/动量的函数
  • 我们在本概述中看到的常见学习率计划的工作示例

虽然有点小,但这段代码提供了实现和使用我们到目前为止学习过的任何学习率策略所需的一切。如果您对使用这段代码不感兴趣,也可以使用 PyTorch 中直接实现的学习率调度器

结论

非常感谢你阅读这篇文章。如果你喜欢它,请在 twitter 上关注我,或者订阅我的深度(学习)焦点时事通讯,在那里我挑选了一个关于深度学习研究的单个两周一次的主题,提供了对相关背景信息的理解,然后概述了一些关于该主题的流行论文。我是 Cameron R. Wolfe ,ale gion的研究科学家,莱斯大学的博士生,研究深度学习的经验和理论基础。你也可以看看我在 medium 上的其他著述

文献学

[1] Smith,Leslie N .“训练神经网络的循环学习率” 2017 年 IEEE 计算机视觉应用冬季会议(WACV) 。IEEE,2017。

[2]洛希洛夫、伊利亚和弗兰克·哈特。" Sgdr:带有热重启的随机梯度下降." arXiv 预印本 arXiv:1608.03983 (2016)。

[3]史密斯、莱斯利·n .和尼古拉·托平。"超收敛:使用大的学习速率非常快速地训练神经网络."面向多领域运营应用的人工智能和机器学习。第 11006 卷。SPIE,2019。

[4]陈、约翰、卡梅伦·沃尔夫和塔索斯·基里利迪斯。"雷克斯:用改进的时间表重新审视预算培训."机器学习与系统学报4(2022):64–76。

[5]余、童、。"超参数优化:算法和应用综述."arXiv 预印本 arXiv:2003.05689 (2020)。

[6]金玛、迪德里克 p .和吉米巴。"亚当:随机最优化的方法."arXiv 预印本 arXiv:1412.6980 (2014)。

[7] Agarwal、Naman、Surbhi Goel 和 Cyril Zhang。"通过分形学习速率表加速."机器学习国际会议。PMLR,2021 年。

[8] Smith,Leslie N 神经网络超参数的训练方法:第 1 部分——学习速率、批量大小、动量和权重衰减〉 arXiv 预印本 arXiv:1803.09820 (2018)。

[9]李、、尔辛·尤默和德瓦·拉曼南。“预算训练:在资源限制下重新思考深度神经网络训练.” arXiv 预印本 arXiv:1905.04753 (2019)。

数据科学的最佳专业/学位

原文:https://towardsdatascience.com/the-best-major-degree-for-data-science-59cb34335e84

意见

数据科学不仅仅是数学和计算机科学

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

MD 杜兰Unsplash 上的照片

如果你在谷歌上搜索数据科学的最佳专业或学位,你会发现各种各样的建议,包括数学、统计学和计算机科学。在我作为数据科学家长达十年的职业生涯中,我发现没有一个专业或学位能够涵盖在数据科学领域取得成功所需的所有技能。我的数学学位绝对有助于我理解 scikit-learn 算法的内部工作原理,但为了编写代码将这些算法部署到生产中,我必须深入扩展我的计算机科学知识。

虽然数学、统计学和计算机科学向数据科学家传授了他们工作所需的技术技能,但我发现软技能同样重要,而且在这些领域没有得到足够的重视。为了提高我的软技能,我发现心理学和商业领域非常有帮助。

对于有抱负的数据科学家,我建议你考虑本文中任何领域的主修和/或副修,对于当前的数据科学家,让这些领域和资源推动你的学习。

计算机科学

让我们从一个最不令人惊讶的领域开始——计算机科学。我认识的许多数据科学家都研究过计算机科学、物理或工程等硬科学。如果你来自计算机科学以外的领域,我认为这是数据科学家扩展知识最有价值的领域之一。

数据科学家(名词):比任何软件工程师更擅长统计,比任何统计学家更擅长软件工程的人。—乔希·威尔斯

正如 Josh Wills 所言,软件工程是成功的数据科学家的基本能力。你可能足够幸运,有一个机器学习工程师为你生产你的 Jupyter 笔记本;然而,对于许多数据科学家来说,现实是他们需要编写和部署生产级代码。你在数学课上不会学到如何做到这一点。

如果您不熟悉计算机科学领域的广泛主题,您可以查看以下资源。

  • 戴维·托马斯和安德鲁·亨特的《实用程序员》
  • 布莱恩·克里斯蒂安和汤姆·格里菲斯的《赖以生存的算法》
  • 马丁·福勒的博客

数学与统计

在乔希·威尔斯的数据定义的另一边,科学家是数学和统计学。像 scikit-learn、PyTorch 和 TensorFlow 这样的框架使得创建复杂的模型变得简单,但是在每个模型背后都有一个使用数学进行决策的算法。对于数据科学家来说,数学和统计知识是不可讨价还价的。没有这些知识,你很可能不会理解为什么你的模型表现得特别好或者特别差。

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

杰斯温·托马斯Unsplash 上拍摄的照片

一旦你对基础知识(微积分、线性代数和概率论等)有了坚实的理解,我建议你查阅以下资源。

心理学

所以让我们假设你已经有了很强的技术背景,并且想扩展到计算机科学、数学和统计学之外。我发现自己经常退出的一个领域是心理学。

从表面上看,数据科学和心理学似乎并不相关;然而,当你去除数学和计算机科学时,数据科学的核心是帮助个人和组织做出更快、更好、更便宜的决策。我们可以借鉴多年来对决策过程背后的心理学的研究,来构建更好的机器学习系统。

人类是每个机器学习系统的核心。他们生成用于训练我们的模型的数据,消费我们的模型的输出,并最终由于我们的模型做出的决定而改变他们的行为(不管是好是坏)。虽然我的学位课程侧重于使用哪些算法,但我发现更重要的是关注与这些算法互动的

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

照片由克里斯汀·休姆Unsplash 拍摄

我经常发现自己倾向于心理学领域来解决日常数据科学工作中的问题。以获得标记数据集的过程为例。对于许多最有趣的问题来说,对于你试图完成的事情,没有一个完美标记的数据集。在我们能够建立一个模型之前,我们依赖人们为我们注释数据。

但是为我们的注释者设计最好的标记任务比看起来更复杂。假设我希望我的注释器为多类分类问题标记数据。你知道人类能够区分的类别数量是有极限的吗?如果我需要我的注释器为我的数据执行两个标记任务,该怎么办?第一个任务会偏向第二个任务的结果吗?当我收到注释时,如何处理注释者的异议和偏见?

这些只是在我们接触任何机器学习模型之前要问的一些重要问题的例子。据我所知,心理学领域收集人类数据的时间比任何其他专业都长,而且数据科学领域可以从一些重要知识中受益。以上所有问题都在心理学领域以这样或那样的方式得到了解决——我们只需要应用这些发现。

如果你想涉足心理学领域,这里有几本我最喜欢的书。

业务

最后,但肯定不是最不重要的,让我们讨论一下商业世界。了解企业如何运作是关键,因为通常是他们付钱让你做数据科学家的工作。要想成为一名高效的数据科学家,你需要快速了解你的业务是做什么的、如何做的,以及你如何融入全局。

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

Unsplash 上的 Smartworks 合作者的照片

了解了这些之后,我发现了解更多专门了解“客户”问题的具体职位是很有帮助的。我通常认为我的雇主是我的内部客户,我雇主的客户是我的外部客户。无论哪种情况,我都想成为双方都面临的问题的专家。为此,产品经理通常是外部客户问题的专家。

与产品经理会面并对他们的领域进行更多研究,帮助我更好地了解我的客户,并创建完全满足他们需求的机器学习系统。随着您开始发展这方面的技能,您可能会意识到产品管理和数据科学之间有相当多的重叠。产品经理需要对统计学有一个基本的了解,以理解他们的产品团队运行的 A/B 测试,还需要能够评估客户数据。此外,让他们了解一些用户体验知识也是有帮助的,这将我们带回心理学的世界。

了解更多关于产品管理、一般业务或任何介于两者之间的知识,将为你成为一名成功的数据科学家做好准备。下面列出了一些我推荐的资源,可以帮助你开始学习。

学习方法

那么,你如何尝试去了解一个对你来说完全陌生的领域呢?正规教育,就像大学的学位课程一样,是学习新领域基础知识的好方法,但它通常不会让你具备工作中需要的所有知识。

我最喜欢的学习新领域的方法之一是通过基于项目的学习。如果我有某种项目来强化我的学习,我会更容易陷入一个新的话题或领域。如果这个项目是我关心的,而不是某个人 Github 中的一个随机项目,那就更有帮助了。

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

照片由屋大维丹Unsplash

如果你目前是一名数据科学家,你应该已经有了一个可以帮助指导你学习的项目。如果没有,你可能想参加一个研讨会,教你构思、设计和建立一个项目。

我希望我在本文中提供的资源将成为您学习的坚实起点。但是对于那些阅读能力比我强的人来说,请在你最喜欢的书籍、博客、播客或视频中留下你对我在本文中提到的任何领域的评论。我很乐意向你学习!

结论

专业化是许多人在职业生涯中努力追求的目标。当你成为某个领域的专家时,你通常会得到回报。然而,数据科学挑战我们成为更多的通才。拓宽你对我上面提到的领域的理解(以及更多!)能让你在事业上更加强大。你永远不知道你下一步可能会潜入哪个领域来建立一个更好的机器学习模型。

资源

  1. https://365 data science . com/career-advice/career-guides/best-degrees-data-scientist/

一次性编码数据的最佳方法

原文:https://towardsdatascience.com/the-best-methods-for-one-hot-encoding-your-data-c29c78a153fd

数据准备

onehotencode vs get _ dummies vs to _ category

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

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

在将数据输入机器/深度学习模型之前,对数据进行预处理是整个过程中最重要的阶段之一。如果没有经过适当预处理的数据,无论你的模型多么先进和巧妙,最终都将是低效和不准确的。

对于独立分类数据来说,一种热编码可能是最常用的预处理方法,可确保模型能够公平、无偏见地解释输入数据。

本文将探索使用一次性方法对分类数据进行编码的三种最常见的方法,并讨论为什么首先要使用这种技术。

介绍

本文将对以下方法进行比较和讨论:

  • 熊猫 — get_dummies()
  • Scikit-Learn—OneHotEncoder()
  • Keras—to _ categorial()

所有方法基本上达到相同的结果。然而,它们以完全不同的方式进行,并且具有不同的特性和选项。

那么,哪种方法最适合您的具体情况呢?

什么是一键编码?

在我们开始之前,我认为有必要先简单介绍一下为什么你会想使用这种方法。

一个热编码基本上是一种准备分类数据的方法,以确保机器学习/深度学习模型将类别视为彼此独立。

确凿的例子

让我们举一个实际的例子来说明这个观点。我们有三个类别:

  • 鸡肉
  • 岩石

他们之间没有任何关系,完全独立。

为了将这些类别输入到机器学习模型中,我们需要将它们转化为数值,因为机器/深度学习模型无法处理任何其他类型的输入。那么如何最好地做到这一点呢?

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

一只逃跑的鸡。詹姆斯·温斯科特Unsplash 上的照片

最简单的方法是给每个类别分配一个编号:

  1. 鸡肉
  2. 岩石

这种方法(称为顺序编码)的问题是,当数字一个接一个时,模型可以推断出类别之间的关系。

枪比鸡重要是因为它的编号更高吗?鸡是半块石头吗?如果你有三只鸡,那和一把枪一样吗?

如果这些值是标签,如果模型输出的答案是 1.5,那会怎么样呢?所有这些说法都是无稽之谈,但由于模型只看到数字,而不是我们看到的名字,因此推断这些东西对模型来说是完全可行的。

为了避免这种情况,我们需要将类别完全分开。这就是一键编码所实现的目标:

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

一个热点编码的例子——作者列表

这些值只能是 1 或 0(开或关)。1 表示是那个东西,0 表示不是。

所以在第一排你有一只鸡(没有石头也没有枪),第二排有一块石头(没有鸡也没有枪)等等。由于这些值要么是开,要么是关,因此不可能以任何方式将一个与另一个相关联。

快速笔记

在更详细地研究这三种方法之前,我只想指出,我将使用 Colab 的一种替代方法,我通常使用它来为本文提供代码。

我将使用的替代方案是 deepnote 。它本质上与 Colab 相同,它让您可以在在线环境中运行 Jupyter 笔记本(有一些差异,我不会在这里深入讨论,但可以查看网站了解更多信息)。

这样做的主要原因是,为了演示本文中一些方法的最新特性,我需要访问 Pandas 1.5.0(撰写本文时的最新版本),而我似乎无法在 Colab 中实现这一点。

然而,在 deepnote 中,我可以指定一个 Python 版本(在本例中是 3.10),还可以创建自己的 requirements.txt 来确保环境安装 Pandas 1.5.0,而不是默认版本。

它还允许非常简单的从 Jupyter 笔记本直接嵌入到本文中(您将会看到),这非常有用。

我仍然会像往常一样让笔记本在 colab 中可用,但是一些代码不会运行,所以请记住这一点。

数据

这些数据基本上与饮酒对考试成绩的影响有关。不是你需要记住的东西,但如果你感兴趣的话…

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

vini cius“amnx”AmanoUnsplash 上拍摄

和以往一样,我把数据放在一个笔记本上。您可以在以下任一 deepnote 中访问它:

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

(如前所述,熊猫 1.5.0 已在 deepnote 中推出。只需在右边的“环境”部分激活 Python 3.10,在右边的“文件”部分创建一个名为“requirements.txt”的文本文件,其中有一行“pandas==1.5.0”。然后运行笔记本。)

或者 colab:

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

(由于需要 Pandas 1.5.0,下面的一些方法将不起作用)

我选择了一个数据集,它包括各种不同的分类和非分类列,这样就可以很容易地看出每种方法是如何根据数据类型工作的。这些列如下所示:

  • 性别 —二进制字符串(“M”代表男性,“F”代表女性)
  • 年龄 —标准数值栏(int)
  • Medu —母亲的教育程度—多类整数表示(0[无],1[初等教育],2 [五至九年级],3[中等教育]或 4[高等教育])
  • Mjob —母亲的工作—多类字符串表示—(‘教师’,‘健康’保健相关,民事’服务’(如行政或警察),‘在家’或’其他’)
  • Dalc —工作日酒精消耗量—多类分级整数表示(从 1[非常低]到 5[非常高])
  • Walc —周末饮酒量—多类分级整数表示(从 1[非常低]到 5[非常高])
  • G3 —最终成绩(标签)—多类分级整数表示(数字:从 0 到 20)

前五行的示例如下:

和数据类型:

熊猫—获取 _ 假人()

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

帕斯卡·米勒Unsplash 上的照片

pandas.get_dummies(data, prefix=None, prefix_sep=’_’, dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None)

文档

我会把 Pandas 的 get_dummies()方法描述为一个非常中庸的一次性编码器。它让事情变得简单,同时提供合理数量的选项,允许您适应最常见的用例。

您可以非常简单地将 Pandas dataframe 传递给 get_dummies(),它会计算出哪些列最适合一种热编码。

然而,正如您将看到的那样,这并不是处理事情的最佳方式:

如果您查看上面的输出,您将看到只有类型为“Object”的列被一次性编码(sex 和 MJob)。任何整数数据类型列都被忽略了,这在我们的例子中并不理想。

但是,您可以指定要编码的列,如下所示:

需要注意的一点是,当使用 get_dummies()时,它将所有内容都保存在 dataframe 中。没有额外的数组需要处理。它只是被整齐地保存在一个地方。OneHotEncoder()或 to _ categorical()方法则不是这种情况,我们将在后续章节中讨论。

在某些特定情况下,删除每个热编码序列的第一列可能是可取或有用的(例如,为了避免多重共线性)。get_dummies()内置了这种能力:

例如,请注意上面的“Medu_0”现在是如何丢失的。

现在的工作方式是,如果 Medu_1 到 Medu_4 都是零,这实际上意味着 Medu_0(唯一的其他选择)被“选择”。

以前,当包含 Medu_0 时(即不使用 drop_first),绝不会出现所有值都为零的情况。因此,实际上通过删除列,我们不会丢失关于类别的任何信息,但是我们确实减少了列的总量,因此减少了运行模型所需的处理能力。

在决定删除一个专栏是否合适时,有更多微妙的事情需要考虑,但是由于这种讨论需要自己写一整篇文章,所以我将把它留给您来研究。

附加选项

除了“drop_first”之外,还有其他方法,如“sparse”来生成稀疏矩阵,以及“dummy_na”来帮助处理数据中可能存在的 NaN 值。

如果您需要这种程度的灵活性,还可以对前缀和分隔符进行一些定制。

用 from_dummies()反转 get_dummies()

直到最近还没有从 Pandas 库中反转 get_dummies()的方法。您必须手动完成这项工作。

然而,从 Pandas 1.5.0 开始,有了一种叫做 from_dummies() 的新方法:

pandas.from_dummies(data, sep=None, default_category=None)

文档

这允许在不编写自己的方法的情况下实现反转。它甚至可以通过使用“default_category”参数来处理利用“drop_first”的一键编码的反转,如下所示:

要在编码中使用“drop_first”时进行反转,必须指定丢弃的项目:

scikit-learn — OneHotEncoder()

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

凯利·西克玛Unsplash 上拍摄的照片

Scikit-Learn 中的 OneHotEncoder()方法可能是所有热编码方法中最全面的。

sklearn.preprocessing.OneHotEncoder(*, categories='auto', drop=None, sparse=True, dtype=<class 'numpy.float64'>, handle_unknown='error', min_frequency=None, max_categories=None)

文档

正如您所看到的,上面的方法输入可以处理:

  • 为一个热门编码自动挑选类别
  • drop columns(不仅仅是第一种,还有更广泛的选择)
  • 生成稀疏矩阵
  • 处理可能出现在未来数据集中的类别(handle_unknown)
  • 您可以根据频率或最大类别数来限制编码返回的类别数量

该方法还使用了 fit-transform 方法,这对于在机器和深度学习的输入管道中使用该方法非常有用。

编码器

这种方法与所有其他方法的区别之一是,您创建了一个编码器“对象”,它存储了将用于编码数据的所有参数。

因此,这可以在代码的后面引用、重用和调整,使它成为一种非常灵活的方法。

一旦编码器被实例化,我们就可以一次性编码一些数据:

在这种情况下,我使用了“fit_transform”方法,但与所有遵循“fit”/“transform”模式的 sklearn 方法一样,您也可以在单独的步骤中拟合和转换数据。

OneHotEncoder 所做的是提取它认为应该一键编码的列,并将它们作为一个新数组返回。

这与 get_dummies()不同,后者将输出保存在同一个数据帧中。如果您想以最小的努力将所有数据包含在一个数据帧中,那么这是值得考虑的事情。

还应该注意的是,OneHotEncoder 在“auto”时识别更多 get_dummies()的输入列,如下所示。

无论如何,指定您希望作为目标的列仍然是一个很好的做法。

为了保持一致性,我将用 get_dummies()对与前面相同的列进行编码:

已编码的列,以及编码器的参数:

反转 OneHotEncoder

有一个非常简单的方法来反转编码,因为编码器被保存为它自己的对象(在本例中为“skencoder”),所以所有用于进行一次性编码的原始参数都保存在这个对象中。这使得反转非常容易:

其他有用信息

使用 OneHotEncoder 的另一个优点是,有大量的属性和帮助方法可以让您访问编码中使用的信息。我在下面提供了一些例子:

属性

方法

高级功能

如前所述,OneHotEncoder 有很多有用的特性,使它成为一种非常灵活的使用方法。

我将在下面谈到其中的一些方法。

最小频率

这可以用来限制编码类别。如果你有一个由几个重要的类别主导的特性,但是有许多更小的类别,那么你可以有效地将这些更小的类别归入一个单独的“其他”类别。

您可能会发现,您不想为不频繁的类别指定准确的记录数量。在这种情况下,您可以指定与可用记录总数相比的最小记录数。为此,您需要指定总计数的一部分。

在我们的例子中有 395 条记录,所以为了达到与指定正好 60 条记录作为限制相同的结果,我们可以指定 60 / 395 = 0.152,或者为了简单起见,指定 0.16(这基本上意味着一个类别必须占总计数的 16%才能被认为是重要的)

最大类别数

解决这个问题的另一种方法是指定类别的最大数量。

处理未知

处理未知是一个非常有用的特性,尤其是在用于机器学习或神经网络模型的流水线中。

本质上,它允许您在不中断输入管道的情况下,为将来可能出现的另一个类别制定计划。

例如,您可能有一个像“Medu”这样的特征,将来由于某种原因,在“高等教育”的最终类别之上的“PhD”类别被添加到输入数据中。理论上,这个额外的类别会破坏你的输入管道,因为类别的数量已经改变了。

处理未知允许我们避免这种情况。

虽然我不会给出一个具体的例子,但这很容易理解,尤其是如果你已经阅读了前两节关于“最大类别”和“最小频率”的内容。

设置选项:

  • 【错误】:这只会引发一个错误,如果你试图添加额外的类别,你可以说这是标准行为
  • 【ignore】:这将导致任何额外的类别都被编码为全零,因此如果最初有 3 个类别[1,0,0],[0,1,0]和[0,0,1],那么额外的类别将被编码为[0,0,0]。反转后,该值将为“无”。
  • ’ incocrative _ if _ exist ':如果您已经在编码器中实现了’ max_categories ‘或’ min_frequency ‘,那么附加类别将与任何非频繁类别一起映射到’ XXX _ incocrative _ sk learn '。否则,它将被完全视为“忽略”。

**重要提示:**不能同时使用 handle_unknown=‘ignore’ drop category 参数(如 drop: 'first ')。这是因为它们都产生全零的类别,因此冲突。

下降

就像来自 _dummies()的熊猫一样,你可以选择删除类别,尽管选项更广泛一些。

以下是选项(根据文档):

  • :保留所有功能(默认)。
  • ‘第一’:在每一个功能里放第一个类别。如果只存在一个类别,该特征将被完全删除。
  • ‘if _ binary’:将每个特征中的第一个类别,用两个类别进行拖放。具有 1 个或 2 个以上类别的特征保持不变。
  • 数组 : drop[i]是特征 X[:,i]中应该被丢弃的类别。

**重要提示:**不能同时使用 handle_unknown=‘ignore’ drop category 参数(如 drop: 'first ')。这是因为它们都产生全零的类别,因此冲突。

【第一次】

每个类别的第一个条目将被删除(“sex_F”、“Medu_0”和“Mjob_at_home”)。

【if _ binary】

只有恰好两个类别的特征会受到影响(在我们的例子中,只有‘sex _ F’被删除)。

【列阵】

在这种情况下,您可以从每个要素中准确选择应该删除的类别。我们将删除“sex_M”、“Medu_3”和“Mjob_other”。

分类分类

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

扬·安东宁·科拉尔在 Unsplash 上拍摄的照片

Keras 方法是一个非常简单的方法,虽然它可以像其他方法一样用于任何事情,但是它只能处理数值。

因此,如果您有字符串类别,您必须首先转换它们,这是其他方法自动处理的事情。

tf.keras.utils.to_categorical(y, num_classes=None, dtype='float32')

文档

Keras to _ categorical()可能对一个标签的热编码最有用:

上面没有告诉我们太多,所以让我们挑出索引 5 处的转换,这样我们可以看到编码了什么:

反转

没有专门的反转方法,但是通常 argmax 应该允许我们反转编码。Argmax 也可以从模型的输出中工作,其中的数字可能不是整数。

较小的示例:

所有数据:

指定类别

一个有用的特性是能够指定有多少独特的类别。默认情况下,类别的数量是数组中最大的数字+ 1。+1 是考虑到零。

值得注意的是,这是您可以指定的最小值。但是,可能有这样的情况,传递的数据不包含所有的类别,您仍然希望转换它(就像一小组测试标签),在这种情况下,您应该指定类的数量。

尽管该方法需要整数,但它可以按照下面的方式处理 float 数据类型。

这些是独特的类别:

这是唯一类的计数:

只有 18 个唯一的类,但是我们可以编码任意多的类,所以让我们编码 30 个类:

然后我们可以检查形状,看到我们有 30 个列/类:

…仍然可以顺利反转:

摘要

概括来说:

熊猫— get_dummies() :

  • 在数据框架内创建一个热编码列,而不创建新矩阵。如果你喜欢用最少的努力把所有的东西都保存在一个熊猫的数据框架内,这可能是适合你的方法
  • 只有能自动将非数字列识别为分类数据吗
  • 有一些有用的选项,比如稀疏矩阵和删除第一列
  • 从熊猫 1.5.0 开始,内置了一个反转方法

Scikit-learn—OneHotEncoder():

  • 设计用于管道,因此很容易集成到预处理工作流中
  • 可以自动挑出一个热编码的类别,包括数字列
  • drop columns(不仅仅是第一种,还有更广泛的选择)
  • 生成稀疏矩阵
  • 用于处理未来数据集中出现的类别的各种选项(handle_unknown)
  • 您可以根据频率或最大类别数来限制编码返回的类别数量
  • 有许多帮助器方法和属性来跟踪您的编码和参数

Keras—to _ categorial():

  • 一个非常简单的方法是只对数字数据进行热编码
  • 必须首先将数据转换为有序数字类别
  • 可能对标签最有用
  • 没有内置的反转方法

结论

总而言之,如果我必须推荐任何一种方法,那就是 Scikit-Learn 的 OneHotEncoder()。

你可能会说这个方法太复杂了。然而,我认为这种方法使用起来非常简单,而且您最终会获得可追溯性和灵活性,这是其他任何方法都无法实现的。

在考虑生产就绪代码时,将这种预处理方法与其他方法结合到处理管道中的能力以及 handle_unknown 等特性也是一个巨大的优势。

如果你觉得这篇文章有趣或有用,记得关注我,或者注册我的简讯获取更多类似的内容。

如果你还没有,你也可以考虑订阅媒体。你的会员费不仅直接支持我,也支持你所阅读的其他作家。你还可以完全不受限制地访问媒体上的每个故事。

使用我的推荐链接注册会给我一点回扣,对你的会员资格没有影响,所以如果你选择这样做,谢谢你。

https://medium.com/@maclayton/membership

参考

[1] Aman Chauhan,酒精对研究的影响 (2022),Kaggle,许可:归属 4.0 国际(CC BY 4.0)

[2] Paulo Cortez,学生表现数据集 (2014),UCI 机器学习知识库

[3] P. Cortez 和 A. Silva,使用数据挖掘预测中学生成绩 (2008),A. Brito 和 J. Teixeira 编辑。,第五届未来商业技术(FUBUTEC)会议论文集第 5–12 页,葡萄牙波尔图,2008 年 4 月,EUROSIS,ISBN 978–9077381–39–7

利用数据能力的最佳无代码人工智能平台

原文:https://towardsdatascience.com/the-best-no-code-ai-platforms-to-empower-your-data-capabilities-a812915c706

任何人手中神经网络的力量

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

Unsplash 上由米米·蒂安拍摄的照片

数据科学家比任何人都清楚这一点:训练机器学习模型是一项漫长而乏味的工作。

除此之外,数据工程师需要编写代码,清理数据,创建标签,完善模型…

即使模型能够胜任任务,他们仍然需要检查其输出,并防止过度拟合和欠拟合。

然而,正如无代码平台使网页设计变得更容易一样,新的平台已经出现,使 ML 模型培训变得容易。

这些无代码 AI 解决方案在市场上数不胜数,每一个都带来了独特的功能。以下是最适合您的使用案例和需求的一些。

结构化数据无代码人工智能

显然是艾

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

显然,人工智能将人工智能的预测能力添加到了你常用的电子表格中。通过将该工具与您的历史表格数据(客户数据、交易数据、价目表)相联系,您可以确定您的客户的可能流失率、您的实时最优价格或您的业务运营风险。您可以用许多数据源丰富您的 ML 模型,并改进您的预测。显然,人工智能是一个很好的工具,可以即时利用你的业务数据。

阿克基奥

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

Akkio 提供相同的功能,但与您的业务应用程序(SalesForce、Hubspot、Airtable)直接集成。凭借其直观的界面,它为运营商和工程师提供了强大的预测、排名和智能推荐工具。因此,他们可以识别和利用关键业务变量来优化绩效。最重要的是,Akkio 拥有市场上一些最精确的 ML 模型,可用于许多用例。

猴子学习

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

MonkeyLearn 是一个以自然语言处理和文本分析为主的无代码 AI 平台。你只需要导入你的文本文件(从电子邮件,社交媒体,调查…),你就会得到你的文本的语义和情感分析。通过数据标注训练模型,您可以自动对文本进行分类或找出有意义的关键字。通过这种方式,你可以将内容背后的感觉和意图形象化,或者轻松地发现特定的词语或谈话主题。MonkeyLearn 让您了解客户的感受,从而为您提供改善业务的关键见解。

非结构化数据的无代码人工智能

纳米网络

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

Nanonets 允许您利用在非结构化文档中发现的数据。基于 OCR 技术,您可以训练模型来分析您的书面文档,只需很少的手动干预。您可以自动将会计、发票和管理文档转换为表格文件。您也可以只记录文档的某些特定部分,以提高效率并保留重要信息。这为操作员节省了大量时间,并允许他们从业务文档中提取关键信息。

超壬酸盐

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

SuperAnnotate 致力于让文本、图片和视频注释的艰苦工作变得更加容易。无论是对文本进行分类,识别图片中的对象,还是跟踪视频流中的手势和事件,该平台都为您提供了一个一体化的界面来构建您的训练数据集。有了这些深入的、高质量的注释,您可以将它们集成到您的自动化项目中,并创建一个为您的任务而完美训练的模型。

考萨伦人

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

CauseLens 允许决策者利用公司的数据湖来指导和证明他们的决策。与仅依赖相关性的传统机器学习模型不同,使用该工具,您可以训练基于因果关系的模型。通过将它们连接到您的预测数据流和参考数据库,这些模型为您提供了有关业务关键决策的可解释预测。然后,您可以评估这些结果的相关性,获得下一步行动的建议,并向利益相关方证明您的决策是正确的。用于透明决策的透明人工智能。

没有代码人工智能的创造性使用

裂片

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

Lobe 是一款让训练图像和视频分类模型变得前所未有的简单的应用。通过非常友好的用户界面,您可以一键标记来自图库或网络摄像头的图片或视频,检查模型的准确性,并将其集成到您的应用程序中。您可以创建识别情绪、分析动物行为、监控设备维护和检测产品或对象的模型。Lobe 为几乎所有人推广机器学习用例!

跑道

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

Runway 为视频创作者带来人工智能的力量。借助预配置的视觉模板,您可以为视频添加高级滤镜,移除背景,并从您的帧中移动特定对象。这个视频平台以前是一个人工智能无代码工具,现在允许你通过自动对象识别和识别来进行专业的视频编辑。没有什么比成为高质量的视频制作者更有效的了!

可教机器

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

可教机器让机器学习的可及性更进了一步。直接从你的电脑或智能手机的网络摄像头,你可以训练一个模型识别某些物体,姿势或图像,并逐步测试它的能力。你马上就会得到一个应用程序,它可以翻译语言障碍手势,对物体进行分类,并允许你进行游戏实验或制作动画机器人。可教机器使人工智能成为一个有趣的互动游戏。

一体化无代码人工智能平台

轻率

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

轻佻通过一个仪表板将所有数据科学功能掌握在您团队的手中。用户可以对图像、视频、音频和文本文档执行视觉质量检查、面部识别、内容审核或预测性维护。他们还可以对 Instagram 视频进行分类,进行社交监听,通过视频监控他们的工业过程,并自动标记他们的产品图像。简而言之,它是利用中型公司数据的终极工具!

谷歌云 ML

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

Google Cloud ML 提供了同样的价值,但是使用了更大的用例列表和 Google 强大的技术。您可以分析和处理呼叫中心的音频数据,访问高级视觉识别技术,以及阅读非结构化文档。谷歌云环境的好处是,你可以在任何平台上集成你的应用程序,依靠预先训练的、最先进的 API 和可解释的模型。另一方面,这些解决方案不太容易获得,因为它们主要面向有经验的数据科学家工程师。

克拉里菲

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

Clarifai 的深度学习解决方案帮助您利用各种数据源潜力。无论是注释你的视频和文本,提供相关的搜索系统,还是在边缘为你的视觉监控和监视系统提供动力,Clarifai 的人工智能模型都是多功能的。它们让您的所有业务数据为您服务,并让您可以在单一平台上获得洞察力。您的团队拥有立即采取行动和预测威胁所需的一切。

这就是最好的无代码人工智能工具,让你的团队拥有数据智能。

客户终身价值的最佳 SQL 模板

原文:https://towardsdatascience.com/the-best-sql-template-for-customer-lifetime-value-56978b062c0b

用于 RFM 和 CLV 分析的可重用 SQL

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

图片来自 energo epic . com:https://www . pexels . com/photo/black-payment-terminal-2988232/

介绍

在过去 10 年的职业生涯中,我与各种客户、行业和数据集一起研究客户终身价值(CLV)模型。有许多不同的方法来解决这个问题,但是这篇文章不是关于这个的。相反,我想解释一下数据设置,这在博客圈经常被忽视。

在我的上一篇博客文章中,让我们用 SQL 走得更远,我谈到了我对结合 jinja 和 SQL 的潜力感到多么兴奋,以便利用 SQL 代码本身之上的语义抽象。这篇文章是最近在我脑海中出现的许多想法中的第一个。我的目标是(1)向您展示 CLV 模型的数据准备可以在 SQL 中完成,但更重要的是,(2)为您提供一个可以在其他地方应用的模板,这样您就不必真正从头开始编写 SQL。

入门指南

预测 CLV 最常用的概率模型是贝塔几何/负二项分布模型(通常缩写为 BG/NBD)。它有一个流行的表亲,帕累托/NBD 模型。这些模型试图预测给定客户的未来交易。 Gamma-Gamma 扩展模型关注的是那些交易的金额货币方面

今年,全世界成百上千的数据科学家将建立这种模型。

他们将如何开始?你会如何开始?如果你是诚实的,第一步可能是谷歌它,阅读一些博客,然后跟随你自己的数据。如果你能在网上找到一个足够好的例子,你就能以一种类似于博客文章的方式有条不紊地操作你的数据,直到你足够接近它,你就可以开始运行了。

一个熟悉的模式出现了

如果你读了足够多的博客,你会开始意识到有一个熟悉的模式。所有这些都是从将数据处理成特定形状开始的——通常称为 RFM 表

还有其他方法来计算 CLV,我不打算讨论这些。我主要关注的是 RFM 表,因为它不仅是一种非常流行的方法,而且是非常可重复的。如果你不熟悉 RFM 餐桌,可以看看我的朋友奥卢布库诺拉·阿金索拉在 T2 的博客文章。

基本要素是:

R —客户从该企业购买的最近日期
F —客户从该企业购买的频率
M —客户购买的货币价值。

选择 SQL

如果您读过我以前的博客文章,那么您已经知道我热衷于利用 SQL 来利用数据仓库的处理能力。为了创建 RFM 表,我们需要从原始事务级别聚集数据,这可能是我们数据库中最大的表之一。虽然确实有很多可用的 python 解决方案,但当我有一个非常好的数据仓库时,为什么要费心去卸载数百万或数十亿的事务,而这些事务可能甚至不适合我的 python 内存呢?

使其可重复

在接下来的几节中,我将演示一个示例,该示例从我在网上找到的销售数据集中创建一个 RFM 表。然而,这意味着任何人在将来偶然发现这篇文章,仍然要仔细重写 SQL 以匹配他们自己的数据库。

这就是金贾发挥作用的地方。Jinja 是一个有 14 年历史的模板引擎,主要用于动态生成 HTML、XML 和其他标记格式。最近,它被证明是 SQL 的强大伙伴,被 dbt 和 Rasgo 所利用。如果你想阅读基础知识, Julien Kervizic 在 2019 年写了一篇名为Jinja the SQL way of the Ninja的预言性文章。

因此,我不只是分享 SQL 代码和逻辑,而是将它带到下一个层次——我将分享一个模板,您可以使用它来为您的自己的数据动态创建 SQL。

浏览一个例子

让我们从 UCI 机器学习库中获取一些销售交易的例子。

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

原始交易数据的示例

我处理这个问题的方法是首先构建 SQL。这一部分显然很有挑战性,但我这样做是为了让你不必如此。下面是工作的 SQL。

这个查询的结果是一个格式正确的 RFM 表,就像我们需要开始我们的 CLV 建模一样。

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

结果-RFM 交易汇总

成为一名忍者

为了构建我们的 RFM 表,我们需要一个要聚合的事务表。在这个表格中,我们需要找到的是:

  • CustomerID —唯一标识客户的列
  • TransactionID —唯一标识交易或购买的列
  • 交易日期—标识交易日期/时间的列
  • TransactionAmount—标识交易的货币值金额的列

由于我们的目标是最终建立一个模型,我们还必须考虑一段时间的培训,以及随后的一段时间的验证/拒绝。

  • 观察结束—我们认为数据结束的日期(维持结束)
  • TrainingPeriodEnd —我们将培训的结束与维持的开始分开的日期

从我们的示例数据中,我们知道这些:

下一步是创建一个与 jinja 兼容的 SQL 模板,这样我就可以在不同的项目和客户中重复使用。

因为代码很长,我将用一个简短的例子来解释这是如何做到的。如果我们最初的查询是:

SELECT CustomerID
FROM tblCustomers

我们想创建一些参数,比如,

  • 列名
  • 表名

那么我们的 jinja 模板将是:

SELECT {{ column_name }}
FROM {{ table_name }}

因此,我将整个 CLV-RFM 查询参数化,以便我们将来可以在任何事务表上运行它。

为了渲染 jinja,有大量的在线渲染器,或者你可以使用 python 包jinja2.个人来说,我使用 Rasgo 来渲染模板。

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

用 Rasgo 渲染 SQL 模板

这里是完整的代码,准备好了!只需插入您自己的表名、列名,这将动态呈现为您的数据定制的 SQL。

结论

我真的为 SQL 模板的可能性感到兴奋。事实上,我已经有了一些其他的想法。例如,时间序列问题通常需要类似的数据准备步骤,

  • 删除负销售额
  • 为没有销售额的日期添加行
  • 向前填充那些缺失行的最后已知值
  • 添加滞后和基于窗口的聚合

我认为这听起来像是另一个模板的好候选。

你能想到什么吗?想投稿?请让我知道!

NLP 眼中的圣经(上)

原文:https://towardsdatascience.com/the-bible-under-the-nlp-eye-part-1-416dbfd79444

有趣的数据科学项目的第一部分,学习更多关于文本处理、NLP 技术以及从文本语料库中提取有意义的信息。

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

图片由 Pascal DebrunnerUnsplash 上拍摄

由于复活节即将来临,我想到了一个有趣的数据科学项目,将 NLP 技术应用于圣经。圣经可以从古腾堡计划https://www.gutenberg.org/cache/epub/1581/pg1581.txt(古腾堡许可)免费下载文本格式

《杜埃-兰斯圣经》是从拉丁文圣经翻译成英文的,总共有 74 本。圣经的第一部分是旧约,共 46 卷,讲述了以色列人的历史(摩西五经),善恶之分(智慧书),以及先知书。第二部分是新约,28 本书,讲述了基督和他的门徒的历史以及地球的未来,直到天启。这部分的主要书籍是马可福音、马太福音、路加福音、约翰福音和启示录。

这个项目希望温和地介绍 NLP 世界,带领读者经历每一步,从清理原始输入数据到获取和理解书籍的显著特征。在这第一部分中,我们将处理:数据清理,从语料库中提取数据,以及 Zipf 定律。

开始前

这是两篇文章中用到的所有包:

import re
import nltk
nltk.download('stopwords')
from nltk.corpus import stopwords
import glob
import string
import gensim
from gensim.corpora import Dictionary
from gensim.utils import simple_preprocess
from gensim.models import CoherenceModel, Phrases, LdaModel
from gensim.models.ldamulticore import LdaMulticore
import pandas as pd
from num2words import num2words
import numpy as np
from wordcloud import WordCloud
from sklearn.feature_extraction.text import CountVectorizer
import seaborn as sbn 
from matplotlib.pyplot as plt
from scipy.stats import hmean
from scipy.stats import norm

因此您可以提前安装,只需导入一次。

预处理

预处理是第一件事——我们应该牢记在心!在这里,原始输入文件被清理,书籍被细分为单个文件。我进行了一次简单的手工清理,取出了每本书的介绍、书名和简介,以及最后的古腾堡末日免责声明。在这一步之后,每本书都从图案Book_name Chapter 1开始,伴随着诗句、数字和文本。

图 1 显示了我是如何将所有的书分成单个文件的。使用.readlines()将输入文件作为单个字符串读取。旧约全书在old_books中,multinames列表表示所有有多个版本的书籍(如The First Book of Kings, The First Book of Paralipomenon 等)。

图 1:开始打扫卫生,收集书籍的索引。这些索引有助于以后保存每本书。

对于以Chapter开始的每一行,我们提取book_name。对于multinames的书,我们在每章的开头都有模式1 Book_Name Chapter 1,所以我们从val.split()[1]行中提取下一个单词。第一次出现的Book_Name Chapter 1标记了书的起始索引。当current_book_name不同于存储的tmp_book名称时,检索结束索引。因此,字典books_idx包含图书名称、起始索引和结束索引(例如{"Genesis":[0, 5689], "Exodus":[5689, 10258], ... })。从索引中,我们可以选择原始lines中的所有书籍,并将它们保存到一个txt文件中

如果没有不同的说明,输入文本已经以这种方式被清除,并作为字符串存储在data列表中:

图 2:输入书籍的清洁。每本书都要清理数字诗句模式、名称和章节号、标点符号、新行、停用词。

对于每本书来说,诗句的数字模式NUMBER:NUMBER. text都被移除了re以及与数字组合\d{1,}匹配的正则表达式r"\d{1,}\:\d{1,}\.、半列\:和最后一个点\.。同样,图案Book_name Chapter NUMBER被移除。最后,所有的文本都被转换成小写,标点符号以及停用词被删除。

获得一个初步的想法:wordcloud

对圣经中的主题和反复出现的词语有一个初步的概念是一个完美的起点。Wordcloud 以人类可理解的方式显示文本中出现最频繁的单词。所有的圣经书籍都可以压缩在一个big_string中,生成一个单词云WordCloud(width=IMAGE_WIDTH, height=IMAGE_HEIGHT, max_font_size=FONT_SIZE).generate(big_string):

图 3:从所有的书籍中创建一个单词云。WordCloud 的输入参数是一个字符串

图 4 显示了所有书籍的文字云。话题可以立刻被发现,还有lordgodcomesonisrealking等关键词

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

图 4:所有圣经书籍中的文字云。作者图片

我们可以做得更多,为每本书提取一个词云。图 5 显示了旧约的前三本书《创世纪》、《出埃及记》和《利未记》中的文字云的比较。我们可以清楚地认识到主要元素和差异。《创世纪》以earthgod开始,其中saidAbraham不吃树上的果子。从那里我们可以定义亚伯拉罕的其他后代,比如JosephIsaacBrethren。在《出埃及记》中,主角是MosesEgypt pharao。最后,在利未记中,主题是holocaust,所以我们会有sacrificebloodvictimfleshoffer这样的词

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

图 5:旧约前三卷中的字云比较。作者图片

我将留给你们去分析和观察福音书的词汇云的不同,并欣赏福音书、创世纪和启示录(这是最后一本圣经,可能是在基督后 100 年写的)之间的音调差异。

数字符号

因为圣经来自口头传统,所以有许多重复出现的模式。此外,还有很多象征意义。每个词在特定的上下文中都有它的含义。这同样适用于数字。数字被用来表达一个概念——例如“七倍多”或“七十七倍”通常被用来表示“很多”——并构成了一个独特而有趣的有待发现的特征。此外,在文本中查找数字是学习正则表达式的好方法,也是获取数字的小技巧。

任务是在文本中找到简单的英文数字。第一种简单的方法是将整数转换成字符串,将文本分割成空格以得到一个分割列表,并计算每个分割列表出现的次数。图 6 总结了这种方法。首先,我们用num2words将数字转换成字符串,并存储在一个列表中。在数据被清理(如上)后,我们可以计算每本书的每个数字出现的次数。在 Google Colab 笔记本上,这个过程对于 100k 个号码来说大约需要 12 秒。到目前为止还不错,但是,我们可以立即看到,最终的字典充满了大多数数字的 0 出现。此外,大多数找到的数字都在 0 到 20 之间。这是由于我们如何分割字符串以及如何将一些数字转换成字符串(例如,我们可能在数字列表中有 twenty-one ,但在文本中应该是twenty-one )

图 6:在文本中查找文字数字的第一种方法

我们可以使用 Python 模块re并构建一个正则表达式来改进这种方法。我不想教你如何创建一个正则表达式,有大量的源代码,记住如何创建一个正则表达式通常是没有用的。我想把我们的注意力集中在如何处理这个过程上。

我们的想法是创建一个正则表达式,它可以匹配给定书籍中的所有数字。正则表达式的核心部分可能类似于\b(numb1|numb2|numb3)\b。图 7 显示了对包含以下数字one, twenty thousand, three thousand thirty four, three thousand five hundred forty five的字符串的测试。因此,我们可以构建一个包含数字的正则表达式,并像re.findall(regex, test_text)一样对测试字符串运行它。超级简单,但是结果非常错误,因为找到的数字是one, twenty, three, thirty four, three, five, forty five。正如您所看到的,regex 是如何在找到匹配后立即停止的。这不是我们想要的。我们可以做一些更隐蔽的事情,颠倒正则表达式的顺序,在开头使用“罕见”的数字,在结尾使用小的“频繁”的数字。如您所见,结果是正确的,返回了我们想要的数字。

图 7:用正则表达式获取文字数字。记住:在正则表达式中,顺序是非常重要的!

有了这个方案,我们现在可以在圣经中查找数字,对从num2words转换来的数字增加一点预处理,如图 8 所示。正则表达式在 2 秒内创建,而运行匹配位需要 1 分 30 秒。在这种情况下,最终的字典match_dict将包含比我们之前的方法更重要和有用的信息,因为每本书都将记录正确的数字,避免大量的 0 值。然而,创建这样的正则表达式是很痛苦的,而且当我们必须运行匹配过程时,效率不是很高。https://www.rexegg.com/regex-trick-numbers-in-english.html 来帮忙了

图 8:使用逆序/非频繁数字顺序创建一个正则表达式

图 9 示出了我们可以创建正则表达式来匹配简单的英文数字,通过简单地使用字面数字构造,例如f(?:ive|our)并且定义从 0 到万亿中的万亿的数字,而不用在存储器中存储任何东西或者额外的过程。正则表达式的创建过程大约需要 300 微秒,而匹配过程大约需要 4 秒钟!

图 9:寻找数字的正则表达式,利用简单的英语规则

如你所见,最后一种方法是成功的方法。它更容易移植,不需要对数字进行额外的处理,而且比我们的第一种方法计算效率更高,可以返回完全正确的信息。

如果我们分析最终的匹配词典,我们可以看到Numbers是——不出所料——拥有最多数字的书,632 本。第二本书是Genesis,508,而Apocalypse有 323 个数字,比《新约》中的任何一本书都多,其中seven 重复了 76 次,one重复了 72 次。圣经中的最高数字是 800’000,它出现在撒母耳记下第二卷,24:9(旧约):

约押将百姓的总数奏告于王,以色列拿刀的勇士有八十万,犹大拿刀的勇士有五十万。

从输出字典中,我们可以通过pandas.DataFrame比较所有结果,并以直方图显示它们(图 10):

图 10:从输出字典创建一个熊猫数据帧。选择主要帐簿并创建直方图

我们可以比较圣经的主要书籍,即GenesisExodus、撒母耳记下第一、二卷(1Kings2KingsPsalmsIsaias、福音书:MarkMatthewLukeJohn和最后一卷Apocalypse

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

图 11:比较主要圣经书籍中常见数字的直方图。作者图片

10、1、7、2、3、4 和 6 是圣经中常用的数字。特别有趣的是注意到sevenGenesis(第一本书)和Apocalpyse(最后一本书)中的使用

齐夫定律

以美国语言学家乔治·金斯利·齐普夫命名的齐普夫定律将单词的出现频率和它们的排名联系起来。特别地,在文本语料库中,任何词的频率与其频率排名成反比。或多或少,出现频率最高的单词是第二高的单词的两倍,第三高的单词的三倍,依此类推。将该定律转换到对数-对数域,结果是作为单词等级和单词频率的函数的线性图。从这里,让我们看看圣经文集是如何与齐夫定律相关联的。

图 12 显示了如何计算每本圣经的词频和排名。首先,我们启动sklearn.feature_extraction.text.CountVectorizer()来统计每本书出现的所有单词。最终的矩阵计数all_df可以转换成一个pandas.DataFrame,对所有出现的单词tf = np.sum(all_df, axis=0)求和,并从cvev.get_feature_names()中检索单词。最终的数据帧term_freq_df将把单词作为索引和一列,这是语料库中单词的总计数。从那里可以在对数尺度上比较词的分布与 Zipf 定律。

图 12:根据圣经语料库计算并绘制齐夫定律

图 13 显示了最终的绘图结果。圣经稍微偏离了 Zipf 的线性。这并不奇怪。事实上,在《圣经》中有许多在自然语言中很少使用的重复词语。有趣的是,chin这个词只用了一次,在撒母耳记下第二卷 20:9:

约阿布对阿玛撒说:我的兄弟,愿天主拯救你。他用右手抓住阿玛萨的下巴亲吻他。

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

图 13:圣经语料库与 Zipf 的预期行为略有不同。作者图片

从这里,我们可以更深入地了解圣经中的用词,以便看到主要书籍之间的差异。首先,整部圣经中反复出现的主要词汇是:

  • lord出现 8377 次
  • god出现 5720 次
  • man出现 2999 次

有趣的是,DavidchristJesus用的次数多,分别是 1162、992 和 1028,而children这个词用了 1915 次。

接下来,我们可以检查一下新约和旧约在用词上的差异。表 1 显示了旧约(Old T%)和新约(New T%)中单词出现的百分比。我们可以看到lordIsraelkingpeople在旧约中的主要用法,以及它们在新约中对godJesuschristfatherman的翻译/转化。

表 1:旧约(旧 T %)和新约(新 T %)出现的百分比比较。

我们可以通过研究单词的出现来探索这种术语上的差异。图 14 示出了如何将旧/新约的单词出现与总比率和旧/新类别比率的正态累积分布函数的调和平均值相关联。这是什么意思?我们可以立即找到独特的词汇,这些词汇是旧约全书和新约全书的主要特征:

  • 首先我们计算一个单词率,即单词出现次数,term_freq_df[0表示总出现次数term_freq_df['total']old_rate
  • 类似地,我们计算特定类别的单词率,即使用term_freq_df[0].sum()old_freq_pct细分单词的出现
  • 我们计算old_rateold_freq_pct之间的类调和平均值
  • 从这里我们计算出old_rateold_freq_pctold_rate_normcdfold_freq_pct_normcdf的正态累积分布函数
  • 最后,我们计算出old_rate_normcdfold_freq_pct_normcdf之间的调和平均值,以给给定类别的唯一和特定的单词更多的权重

这种方法主要来自于里奇金的惊人文章

图 14:计算旧约/新约单词出现率的调和平均值的 normcdf

如果你画出old_normcdf_hmeannew_normcdf_hmean,你会看到图 15,它在左上角突出了所有独特的和主要在旧约中使用的词,在右下角突出了在新约中特别使用的词。

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

图 15:旧约和新约的谐音。左上角突出了独特和具体的话,主要用于旧约,而右下侧的话,特点是新约。作者图片

从这里我们可以立即看到《旧约》和《新约》之间的语气对比,表 2。在《旧约》中,更普遍的“战争”术语是valiantconvenient,故事的特点是“农村”社会。新约强调新的信仰,突出了angelscharityfaith的概念

表 2:描述以下特征的特定术语

作为最后一件事,上面的分析可以适用于所有四部福音书,突出了每部福音书的特征词。福音书写于不同的时代,最古老的是马可福音,其次是马太福音、路加福音和约翰福音。接下来会有不同的写作风格,以及每种风格中使用的更具体的词语。约翰福音似乎是最“天主教”的福音,用的术语指的是现在的教会:fleshglorifyparacletetruth。我们将在下一篇文章中回到这个话题:)

今天是一切:)

第一部分的结论

让我们回顾一下今天的内容:

  • 我们学习了如何预处理原始文本输入,为 NLP 分析做好准备,并将其保存到不同的文件中
  • 为了初步理解我们的数据,我们从这里开始运行WordCloud,我们能够识别圣经书籍中不同的主题
  • 我们看到了如何处理一个正则表达式问题,用简单的英语找到一系列数字,以及如何优化最终的解决方案
  • 最后,我们对照圣经语料库测试了齐夫定律,并扩展了这一分析,为四部福音书中的每一部定义了独特的词汇

下次我们将运行主题建模、单词嵌入和文本嵌入以及文本相似性。敬请期待:)

通过我的推荐链接加入 Medium,支持我的写作和项目:

https://stefanobosisio1.medium.com/membership

如果有任何问题或意见,请随时给我发电子邮件:stefanobosisio1@gmail.com 或直接在 Medium 这里。

NLP 眼中的圣经(下)

原文:https://towardsdatascience.com/the-bible-under-the-nlp-eye-part-2-df2559cdae5f

我们的 NLP 探索的第二部分:通过 TF-IDF 和 transfomers 的主题建模、单词嵌入和文本相似性

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

西蒙·伯杰在 Unsplash 上拍摄的图片

欢迎回到 NLP 世界的介绍。如果您错过了 NLP 介绍的第一部分,请单击此处:

今天我们将探索新的自然语言处理工具,来分析圣经:

  • 主题建模:从文档(圣经书籍)到主题
  • 单词嵌入:如何获得嵌入,我们能从这种方法中得到什么信息?
  • 文本相似性:福音书之间有多相似?我们可以使用什么技术来检测相似性,文本相似性意味着什么?

在这里你可以找到每个主题所需的所有软件包——更多软件包将在文章中给出。当在这里时,我已经为原始数据定义了预处理和清理代码

主题建模

数据科学家通常采用主题建模来从非结构化数据中获得洞察力,检索关键和简明的信息(例如,评论、医疗文档、机器信息、元数据)。在商业中有无数的主题建模的例子,从总结评论到在客户电话中发现商业问题。具体来说,有两个主要的主题建模策略:1)非负矩阵分解(NMF)——这是我关于 NMF 及其实现的文章——以及 2)潜在狄利克雷分配(LDA)。

在本教程中,我们将使用 LDA。LDA 的根源在于 2003 年的一篇论文(是的 19 年前!)发表在《机器学习研究杂志》上,作者大卫·布雷、吴恩达和迈克尔·乔丹——三位伟大的人工智能/人工智能作者。我将写一篇关于这种技术的文章,因为我喜欢它,但是,我很乐意让你抓住 LDA 工作的这个基本概念:可交换性。可交换性是一个简单的数学假设,1985 年和 1990 年的论文。根据意大利 Guido De Finetti 定理,任何可交换随机变量的集合都可以表示为混合分布。简而言之,我们可以在不考虑文档中单词顺序的情况下建立主题模型。有了这个定理,我们可以通过混合分布捕获重要的文档内统计结构。

让我们从旧约开始,通过像我们在第一个教程中所做的那样清理和分组所有的书,让我们看到所有书的主题。图 1 显示了对旧约全书执行 LDA 的工作流。

图 1:根据旧约全书搜索 LDA 的函数和参数。

首先,在第 60 行,我们对每本书执行一个gensim.utils.simple_preprocess,它被视为一个唯一的字符串/句子。其次,我们将创建一个字典,其中有一个单词索引映射(例如,单词allowed在 LDA 算法中表示为0)。一旦映射id2word我们就可以创建一个“单词袋”,字面意思就是装满单词的袋子。corpus返回每个文档中每个单词的出现频率。最后,我们用gensimgensim.models.ldamodel.LdaModel运行 LDA 算法

现在,让我们花一点时间来看看我们是如何运行 LDA 的。LDA 理论清楚地表明,我们需要给出我们期望的主题的输入数量。此外,我们还有一些其他超参数,例如,块大小和每次循环的迭代次数,循环次数。在这个例子中,我试图探索主题的数量和组块的大小,以找到最佳主题。然而,等一下,我们如何衡量一个成功的主题建模?嗯,我们有两个很好的指标可以帮助我们进行主题建模:perplexitycoherence

前一个度量是预测性度量,并且它与模型交叉熵相关联。perplexity在训练集上训练后,评估模型预测测试集主题的良好程度。很难给这个分数一个正确的解释,通常越负面越好,但是已经证明perplexity没有一个明确的人类解释。第二个指标,coherence,通过测量主题的可解释性来帮助我们——在更人性化的意义上,通过测量主题中的单词与文档中的单词的相似度。作为一个建议,在所有这些中,总是需要一点点人类的解释,所以不要过分地用分数来偏见自己。

事实上,这应该是你能得到的最好结果:

Num Topic 4 and chunksize 20 Computing LDA with  4 topics, 20 chunksize... 
Writing classification onto csv file... 
Topic Keywords 
['lord, saith, land, god, israel, people, shalt, king, man, day'  'lord, israel, king, god, said, son, house, people, juda, jerusalem'  'god, man, lord, things, heart, good, wisdom, men, fear, soul'  'king, great, jews, us, men, kings, daniel, kingdom, came, day']

正如你所看到的,前两个主题有着或多或少的相同含义,它们指的是应许之地,以色列或犹大家(或多或少在地理上)。第三个需要一点解释,它可能是指上帝的智慧以及人类应该如何敬畏上帝,或者是上帝和人类之间的相似性。最后是混合了丹尼尔的故事,以及有一天国王会到来的预言。

让我们对新约也这样做:

Num Topic 3 and chunksize 20 Computing LDA with 3 topics, 20 chunksize… 
Writing classification onto csv file… 
Topic Keywords 
[‘said, jesus, man, god, things, come, therefore, lord, came, say’ ‘god, christ, also, things, jesus, may, lord, faith, sin, according’ ‘god, earth, great, seven, angel, beast, heaven, voice, throne, come’] Perplexity -7.394623212885921 Coherence 0.4202057333015461 Num Topic 4 and chunksize 50 Computing LDA with 4 topics, 50 chunksize… 
Writing classification onto csv file… 
Topic Keywords 
[‘said, jesus, god, man, lord, things, come, came, saying, say’ ‘god, christ, also, things, lord, jesus, man, may, faith, according’ ‘god, earth, great, seven, come, heaven, angel, saying, things, beast’ 
‘god, christ, sin, law, faith, jesus, son, also, spirit, things’] Perplexity -7.347456308975332 Coherence 0.3708218577493271 Num Topic 5 and chunksize 50 Computing LDA with 5 topics, 50 chunksize… 
Writing classification onto csv file… 
Topic Keywords 
[‘said, jesus, god, man, lord, things, come, came, saying, also’ ‘god, christ, also, things, lord, jesus, man, may, faith, according’ ‘god, earth, great, seven, come, heaven, angel, saying, things, beast’ 
‘god, christ, sin, law, spirit, jesus, faith, also, son, world’ ‘jesus, things, god, christ, may, men, saviour, good, also, lord’] Perplexity -7.353096888524062 Coherence 0.3734882570283872

如您所见,许多主题相互重叠。我个人认为 3 个主题足以区分所有的新约主题。前者said, jesus,man, god, things, come, therefore, lord, came say指耶稣的寓言;第二个话题god, christ, also, things, Jesus, may, lord, faith, sin, according可能是指对上帝的信仰和耶稣为人类的罪所做的牺牲;最后一个话题指的是天启god, earth, great, seven, angel, beast, heaven, voice, throne, come

总之,主题建模是理解文档中引入的关键词和主题的一种很好的技术。我们不能用一种简单的方式来衡量主题的正当性,但是我们必须采用perplexitycoherence,无论如何,如果没有足够的人类解释,这是不够的。从旧约和新约,从应许之地到启示录,衍生出三个主题。我们能做更多来整合主题建模吗?当然,我们可以在单词嵌入上运行主题建模——我会把这个练习留给你来解决:)

单词嵌入

现在让我们来看一些更复杂的东西:单词嵌入。许多(显然)单词和文章都花在了单词嵌入上。简而言之,单词嵌入允许我们将多维单词、句子和文档简化为人类可解释的含义和计算有效的向量。一个向量可以有大量的维度,但是当所有的单词都投影到向量上时,就有可能将它们聚集在不同的类别中,从而解决并大大简化真正的大规模问题,并找到单词之间的有趣关系。

对于单词嵌入,我们需要以下附加包:

from sklearn.manifold import TSNE
from collections import Counter
from six.moves import cPickle
import gensim.models.word2vec as w2v
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
import multiprocessing
import os
import sys
import io
import re
import json
import nltk
nltk.download('punkt')

然后,我们将计算嵌入并创建一个w2v文件来保存来自gensim.w2v.Word2Vec的二进制单词嵌入

图 2:使用 gensim word2vec 函数从一系列文档中计算给定文本的单词嵌入表示。在这种情况下,我们正在处理新约全书

现在,我们想把这个多维向量形象化。一种常用的方法是使用 t 分布随机邻居嵌入或 *t-sne,*这是一种非线性降维技术。下面的代码将给我们一个在 2D 嵌入向量的单词:

图 3: T-SNE 函数表示二维的单词嵌入。最初,t-sne 是基于单词嵌入表示来计算的。然后检索最频繁的单词并收集最相似/相关的单词。最终的图表显示了一个单词与其他单词的关联程度

代码很长,所以我们要做的是:

  • 首先,我们通过带有calculate_t_sne的 t-sne 减少二维的单词嵌入,产生x_coords, y_coordslabels(它们是单词)
  • 我们用Counter().most_common()计算单词的频率
  • 对于前 50 个最常用的单词,我们将通过most_similar检查这些单词是如何与 word2vec 词汇表中的其他单词向量相关联的。最终,我们为 50 个最常用的单词返回一系列列表,并为每个单词返回相关的单词。
  • 在这一步之后,我们将这一系列列表转换为 t-sne 空间中的 x 和 y 坐标,并绘制最终结果。

在我看来,图 4 显示了 word2vec 的全部力量,我们可以清楚地看到摩西之间的正确联系。我们有SinaiCommandmentObservance(至十诫)、Pharaoh

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

图 4:圣经中单词嵌入的 t-sne 图。在这种情况下,摩西与他故事的所有元素都有关联

图 5 显示了单词 Death 的另一个特殊的单词嵌入。我们可以看到Life处于完全相反的位置,而在它们之间有revengecrimessicknessdangerconfusion

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

图 5:圣经中单词嵌入的 t-sne 图。在这种情况下,死亡与他的故事的所有元素相关联

图 6 是我们用 word2vec 得到的信息的最后一个例子,单词evil在相反的方向,我们将得到hope,有趣的是看到邪恶在整个圣经中是如何联系在一起的。邪恶是错误的,它与疾病、邪恶和虚荣联系在一起。

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

图 6:圣经中单词嵌入的 t-sne 图。在这种情况下,邪恶与他的故事的所有元素相关联

总而言之,单词嵌入可以给你单词间隐藏的联系。在真实的场景中,单词可以是评论、产品、搜集的数据,你可以通过嵌入建立重要的联系。此外,单词嵌入可以而且应该与主题建模一起使用,以进一步利用单词关联来发现更多可解释的主题。

文本相似度

圣经最受讨论的一个方面是书籍的重叠和相似,尤其是福音书。事实证明,马可福音 76%的内容是在马太福音和路加福音中共享的。此外,马太和路加分享了大约 50%的内容。稍有不同的是约翰福音,它是在将近 100 年后写成的,写作风格与天气福音相去甚远。

您可以尝试的第一种文本相似性方法是运行术语频率-逆文档频率或 TF-IDF。在这种方法中,我们将考虑整个语料库中的词的频率,而不是单个文档(例如,整个圣经而不是单本书)。关键是,在任何地方出现次数多的词,意义会低,而出现次数少的词,可能有意义。TF-IDF 的实现用scikit-learn很简单,如图 7 所示

图 7:sci kit-learn 中的 TF-IDF 实现。这里的数据是一个 dataframe,其中每一列都有一篇福音书(约翰福音、路加福音、马可福音和马太福音)

这里的data是一个熊猫数据框架,每一列都是一个福音。文本通过TfidfVectorizer处理,最后通过cosine_similarity ig 计算相似度。记住,当你想测量向量之间的相似程度时,余弦相似度是最好的方法。图 8 显示了四个福音的相似性结果。正如你所看到的,这个情节强烈地指向天气福音的相似性有多强,通过一点计算能力,我们已经对 4 本主要的圣经书籍有了一个很好的看法。

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

图 8:用 TF-IDF 方法分析四个福音的余弦相似性。我们用一种简单的方法复制了最初在圣经研究中发现的东西

这很好,但我们可以尝试做得更多,分析每本书的上下文内容。使用句子转换器可以实现更精确的方法。在这里,我们可以引用大量的模型,其中最著名的是 BERT 和 Sentence-BERT (SBERT ),它是由一个暹罗网络组成的,用于导出句子嵌入。这里我们不仅要看文本的相似性,还要看上下文的相似性。图 9 显示了实现,由于sentence_transformers包包含了我们想要的所有相关变压器,所以实现非常简单。我们选择stsb-roberta-large作为要使用的转换器,并对我们拥有的输入数据进行编码。最后,正如我们之前所做的,相似性是用余弦相似性来度量的。

图 9:通过 sentence_transformers 包实现 roberta transformer,并测量 4 部福音书的相似性。

图 10 显示了用 Roberta 和 wow 获得的结果!,在这里我们获得了新的有趣的信息。我们知道,约翰福音和路加福音的基调与马太福音和马可福音相去甚远,这两部福音书是最早写成的。因此,在上下文层面上,这两部福音书可能有更多的相似之处,出现了其他福音书中没有出现的词汇和概念。看到所有其他福音在上下文层面上彼此大相径庭,真的很有趣。

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

图 10:四部福音书中变形金刚的上下文层次分析。有趣的是乔恩和卢克有很高的上下文相似性,这可能与写作风格有关。

第二部分的结论

那么,做得好,这是我们的 2 部分教程的结束。让我们回顾一下今天的内容:

  • 我们学习了什么是主题建模,以及 LDA 建模的关键数学点是什么:可交换性
  • 我们可以做更多的工作来理解单词的含义,并将主题建模中的信息与单词嵌入相结合
  • 我们可以用 TF-IDF 这样的简单技术来测量文档之间的文本相似性,或者,如果我们想在上下文层次上研究相似性,我们可以使用奇妙的 sentence_transformers 库并旋转一个 transformer 来测量文本相似性。

从这两个教程中,你肯定学到了很多很多技术,这些技术在你每次开始一个新的 NLP/text 项目时都会有用。我希望您喜欢这一切,并在下一篇文章中尽快见到您:)

通过我的推荐链接加入 Medium 来支持我的写作和项目:

https://stefanobosisio1.medium.com/membership

如果有任何问题或意见,请随时给我发电子邮件,地址是:stefanobosisio1@gmail.com,或者直接在 Medium 这里。

ChatGPT 的碳足迹

原文:https://towardsdatascience.com/the-carbon-footprint-of-chatgpt-66932314627d

意见

本文试图估算名为 ChatGPT 的流行开放式聊天机器人的碳足迹

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

沃洛季米尔·赫里先科在 Unsplash 上的照片

最近有很多关于 ChatGPT 的讨论,有些人谈论运行该模型的货币成本,但没有多少人谈论该模型的环境成本。

人类活动导致的大气中温室气体含量的增加是气候变化的主要驱动力[8] **。**信息和通信技术(ICT)行业和数据中心行业在全球温室气体排放中占有相对较大的份额[9]。

因此,我们——运行在数据中心的数字工具的用户和开发者——需要尽自己的一份力量来减少数字活动的碳足迹,从而缓解气候变化。

为此,最重要的是,我们要意识到,即使是数字产品也需要能源来开发和消费,因此它们会产生碳足迹。这篇文章有助于实现这一目标。此外,在我们讨论如何减少我们的碳足迹时,获取事实信息也很重要,这样我们就可以优先解决那些产生最大碳节约的问题。

最后,我希望这篇文章将激励机器学习模型的开发人员公开他们模型的能耗和/或碳足迹,以便这些信息可以与模型准确性度量一起用于评估模型的性能。

https://kaspergroesludvigsen.medium.com/chatgpts-electricity-consumption-pt-ii-225e7e43f22b

大规模机器学习的环境成本

环境成本可能以各种形式出现,例如用水、土壤污染、空气污染。在本帖中,我们将从碳足迹的角度来看看 ChatGPT 对环境的影响。

当确定机器学习模型的碳足迹时,人们可以区分 a)来自训练模型的碳足迹,b)来自一旦被部署就用模型运行推理的碳足迹,c)模型的总生命周期碳足迹。要深入了解如何估计和减少机器学习模型的碳足迹,请参见[9]。

不管范围如何,计算任何模型的碳足迹都需要知道两件事:

  1. 它消耗的电量
  2. 这种电力的碳密度

1 在很大程度上取决于运行它的硬件以及硬件的利用率。

2 很大程度上取决于电力是如何产生的,例如太阳能和风能显然比煤更环保。为了量化这一点,我们通常使用硬件所在电网的平均碳强度。

来自培训聊天的碳足迹

如果我理解正确的话,ChatGPT 是基于 GPT-3 的一个版本。据估计,训练 GPT-3 消耗 1287 兆瓦时,排放 552 吨二氧化碳当量[1]。

然而,这些排放量不应仅归因于 ChatGPT,我不清楚如何将这些排放量的一部分分配给 ChatGPT。此外,ChatGPT 已经使用强化学习[2]进行了训练,这应该被添加,但是关于这个训练过程的相关信息是不可用的,并且我不知道任何合理的代理。如果是的话,请给我指出正确的方向。

运行 ChatGPT 的碳足迹

现在,让我们看看使用 ChatGPT 运行推理可能会产生多少 CO2e。我没有遇到任何关于# 1 和# 2 wrt 的信息。运行 ChatGPT。所以让我们来做一些猜测。

大型语言模型 BLOOM 曾经在一个使用 16 个 Nvidia A100 40GB GPUs 的 Google 云平台实例上部署了 18 天[3]。

让我们假设 ChatGPT 使用相同的硬件。由于模型的大小大致相同——GPT-3 和 BLOOM 的参数分别为 175b 和 176b 我们假设 ChatGPT 也运行在 16 个 Nvidia A100 40GB GPUs 上,但运行在 Azure 实例上,而不是 GCP 实例上,因为 Open AI 与微软有合作关系[4]。

由于 OpenAI 的总部位于旧金山,所以我们进一步假设 ChatGPT 运行在美国西海岸的一个 Azure 区域。由于美国西部的电力比美国西部 2 的碳强度低,所以让我们使用前者。

使用 ML CO2 影响计算器,我们可以估计 ChatGPT 每天的碳足迹为 23.04 kgCO2e。平均每个丹麦人每年排放 11 吨二氧化碳当量[7],所以 ChatGPT 每天的碳足迹大约是一个丹麦人每年碳足迹的 0.2%。如果 ChatGPT 运行一年,其碳足迹将为 365 * 23.04 千克= 8.4 吨,约为一个丹麦人年碳足迹的 76%。

每天 23.04 千克二氧化碳当量的估算值是通过假设每天 16 个 GPUs * 24 小时= 384 个 GPU 小时得出的。目前还不清楚,但我认为 ML CO2 Impact 假设硬件利用率始终为 100 %,这在这种情况下可能是一个合理的假设,因为据报道该服务正在经历沉重的负载。

我们应该在多大程度上相信这个猜测?

为了得到一个概念,让我们看看它是如何与布鲁姆的碳足迹进行比较的。

在 18 天的时间里,23.04 千克二氧化碳当量的日排放量将使 ChatGPT 的排放量达到 414 千克二氧化碳当量。相比之下,布鲁姆在 18 天内排放了 360 公斤。事实上,这两个估计值相差不远,表明 23.04 千克二氧化碳当量可能不是一个糟糕的猜测值。

两种排放估计之间的差异可以归结为许多事情,例如布鲁姆和查特 GPT 的电力的碳强度的差异。

同样值得注意的是,BLOOM 在 18 天内处理了 230,768 个请求[3],相当于平均每天 12,820 个请求。如果 ChatGPT 的 100 万用户中的 1.2 %每天发送一个请求,ChatGPT 将会产生与 BLOOM 同期相同数量的每日请求。如果社交媒体和传统媒体上对 ChatGPT 的所有讨论都表明了它的用途,那么 ChatGPT 可能会处理更多的日常请求,因此它可能会有更大的碳足迹。

另一方面,如果 OpenAI 的工程师已经找到一些更有效地处理所有请求的聪明方法,我对 ChatGPT 碳足迹的估计可能会太高。

</8-podcast-episodes-on-the-climate-impact-of-machine-learning-54f1c19f52d>

ChatGPT 全生命周期碳足迹

为了计算 ChatGPT 的总生命周期碳足迹,我们需要考虑训练过程中的排放。可以获得这方面的一些信息,但很难确定 GPT-3 训练排放中有多少份额应归于 ChatGPT。

我们还需要考虑训练数据预处理的排放。此信息不可用。

此外,我们还需要获得生产硬件的具体排放量的估计值。这是一个相当复杂的任务,留给读者来做练习。可以在[3]和[5]中找到有用的信息,前者估计了布鲁姆的总生命周期碳足迹,后者估计了脸书一些大型模型的总生命周期碳足迹。

https://kaspergroesludvigsen.medium.com/the-10-most-energy-efficient-programming-languages-6a4165126670

结论

这篇文章估计运行 ChatGPT 每天的碳足迹为 23.04 千克二氧化碳当量。这一估计是基于一些粗略的假设,因此存在很多不确定性,但与一个名为 BLOOM 的可比语言模型对碳足迹的全面估计相比,这似乎是合理的。

通过提供基于事实的 ChatGPT 碳足迹估计,这篇文章使得关于 ChatGPT 的成本和收益的辩论变得有根据。

最后,本文只关注 ChatGPT 的 CO2 排放量。除了二氧化碳排放,其他类型的环境影响,包括用水、空气污染、土壤污染等。,也是重要的考虑因素。

就是这样!我希望你喜欢这篇文章🤞

请留下评论让我知道你的想法🙌

关注更多与可持续数据科学相关的帖子。我也写时间序列预测,比如这里的或者这里的。

此外,请务必查看丹麦数据科学社区可持续数据科学指南,了解更多关于可持续数据科学和机器学习的环境影响的资源。

并随时在 LinkedIn 上与我联系。

参考

[1]https://arxiv.org/ftp/arxiv/papers/2204/2204.05149.pdf

[2]https://openai.com/blog/chatgpt/

https://arxiv.org/pdf/2211.02001.pdf

[4]https://news . Microsoft . com/2019/07/22/open ai-forms-exclusive-computing-partnership-with-Microsoft-to-build-new-azure-ai-super computing-technologies/

https://arxiv.org/pdf/2111.00364.pdf

[6]https://twitter.com/sama/status/1599668808285028353

[7]https://kefm . dk/aktuelt/nyheder/2021/apr/foerste-officielle-vurdering-af-danmarks-globale-klimaaftryk

[8]https://story maps . ArcGIS . com/stories/5417 CD 9148 c 248 c 0985 a5b 6d 028 b 0277

[9]https://medium . com/forward-data-science/how-to-estimate-and-reduce-the-carbon-footprint-of-machine-learning-models-49f 24510880

反对饼状图的理由

原文:https://towardsdatascience.com/the-case-against-the-pie-chart-43f4c3fccc6

为什么它的使用几乎从来没有正当理由

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

Unsplash 上的 dilja96 拍摄

问题是

通过图表和图形可视化定量数据的目的是使数据更容易理解,并从中获得有价值的见解。然而,饼状图往往适得其反,掩盖了所呈现数据的潜在数量。这主要是因为人类更擅长解释长度和高度,而不是从角度估计数量,这是阅读饼图所需的技能。正如统计学家和数据可视化先驱爱德华·塔夫特所说:

…唯一比饼图更糟糕的设计是其中的几个……—爱德华·塔夫特

尽管从各个角度受到了广泛的批评,饼状图仍然是商业、营销和新闻业中使用最广泛的图表之一。这经常导致数据以一种扭曲的方式呈现,结果,读者误解了试图传达的观点。

为了便于说明,下面几节包含一些假设情景,试图传达有关公司年收入的信息。

获得洞察力的困难

推导分数

包含大量切片的饼图将难以确定较小切片相对于较大切片的比例(图 1)。此外,在饼图中有许多小片段会产生标签问题,这只会增加读者理解它的难度。条形图通常是规避这些问题的一个很好的替代品。

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

表 1:显示五家公司年收入(十亿美元)的综合数据。

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

图 1:在饼图中,很难确定小切片相对于大切片的比例。例如,在相应的柱状图中,很明显 A 公司的收入是 B 公司的十倍,而 B 公司的收入是 d 公司的一半。

显示时间信息

随着时间的推移,变化是非常难以察觉的。在下图中,无法从饼图中推断出每个切片随时间的变化,而在条形图中,可以立即识别出这些变化。

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

表 2:显示五家公司连续三年年收入(十亿美元)的综合数据。

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

图 2.1:看这些饼图,A 公司 2021 年的收入比 2020 年少,然后在 2022 年增加。相比之下,E 公司的收入在此期间似乎相当稳定。事实上,A 公司的收入稳定在 520 亿美元,而 E 公司的收入波动很大。数字基于表 2。

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

图 2.2:将上述数据绘制成柱状图,可以更容易地发现收入随时间的波动。人们可以清楚地看到 A 公司收入的稳定性以及 e 公司收入的波动性。

*注意:*如果数据中的时间段更长,则使用折线图可以更有效地传达这一信息。

比较相似大小的切片

当试图比较大小相似的切片时,会出现另一个问题。

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

表 3:显示五家公司年收入(十亿美元)的综合数据。

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

图 3:看饼状图,能看出 A 公司和 B 公司的营收哪个更高吗?A 公司和 C 公司,或者 B 公司和 D 公司呢?同样,右边的条形图更有效地传达了这一信息。数字基于表 3。

仅显示两个值

如果你只是比较两个数值,那就没有理由使用饼状图或者其他图表(图 4)。在这种情况下,简单地用数字而不是图表来传达信息会更有效。

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

图 4:说明两家公司年收入的饼状图。生成图表来传达这种类型的信息是完全多余的。简单地说,A 公司的收入是 520 亿美元,而 B 公司的收入只有 350 亿美元,就能说明问题。

整体的一部分

如果需要显示整体是由什么组成的,树形图通常是更好的选择(图 5)。它不仅避免了读取角度的问题,而且还方便了标记方面,因为矩形比饼图中的楔形提供了更多的空间。如果需要的话,还可以很容易地扩展它们,以显示更多的值。理论上,饼图也可以扩展;然而,在饼的中心会有很多浪费的空间,并且标签问题只会随着饼的增长而加剧。此外,树状图也可以用于多层次数据,因为矩形可以很容易地分成子类别——这对于饼状图中的楔形来说是很困难的。

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

表 4:显示八家公司年收入(十亿美元)的综合数据。

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

图 5:右边的树形图使得可视化处理和解释所呈现的信息更加容易。此外,它支持多级数据的显示,更易于扩展和标记。数字基于表 4。

添加效果

在任何情况下都应避免使用 3D 或爆炸饼图(图 6 ),因为这些影响通常会导致数据进一步失真。

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

图 6:带有分解楔形的饼图。虽然由于我们天生没有阅读角度的能力,解释常规的饼状图已经很困难了,但这种描述进一步加剧了这个问题。数字基于表 3。

不出所料,爱德华·塔夫特对此也有自己的看法:

经常扭曲数据的表面修饰永远也不会弥补潜在的内容缺乏。—爱德华·塔夫特

例外

虽然我强烈反对在大多数情况下使用饼图,但在我看来,有两种情况下饼图可能是有益的:(1)如果唯一的目标是证明一个部分占整体的大多数,以及(2)如果分数正好是 25%或 50%。

关注最大的一块

如果图示的唯一目的是显示一个特定的部分占整体的大部分,或者超过所有其他部分的总和,那么饼图的使用是合理的。这种信息通常很难从条形图中获得,因为您必须手动将所有其他条形图相加才能获得这种洞察力(图 7)。

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

图 7:在左边的饼状图中,很容易看出公司 A 的收入高于所有其他公司的收入总和。通过分析相应的条形图,很难得出这种见解。

分数是 25%或 50%

虽然这种情况很少发生,但是如果您处理的数据恰好是 25%或 50%(图 8),那么饼图可以很好地说明这一点。

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

图 8:饼状图说明公司 A 的收入是公司 B 和 c 的两倍。

结论

本文中的插图表明,使用饼图几乎从来都不是一个好主意,在大多数情况下,简单的条形图提供了一个很好的替代品,有助于提取洞察力。虽然 3D 图表或爆炸切片等视觉效果在页面上看起来很花哨,但实际上它们并没有添加任何信息,而且事实上还会进一步扭曲数据。如果需要显示整体的组成,树形图是首选,因为它不需要读者评估角度,支持多级数据的显示,并避免了图表增长时的标记问题。

然而,如果唯一的目的是说明一个特定的切片构成了整体的大部分,或者如果切片的比例恰好是 25%或 50%,那么饼图的使用可能是合理的。

参考

[1]t .蒙兹纳(2015 年)。可视化分析与设计。CRC 出版社。ISBN: 9781498759717。

[2]爱德华·塔夫特,饼状图。【https://www.edwardtufte.com/bboard/q-and-a-fetch-msg? msg_id=00018S 。

[3]墨尔本大学,为什么不应该用饼状图https://SCC . ms . unimelb . edu . au/resources/data-visualization-and-exploration/no _ pie-charts

混合数据组织的案例

原文:https://towardsdatascience.com/the-case-for-a-hybrid-data-organization-bb6dc6211acf

数据组织

混合数据组织的案例

在各种形状和规模的数据组织中工作或与之共事 15 年的经验

过去的 15 年是一段有趣的旅程。我在几个不同的部门、国家和产品中工作,有幸参与了数据行业在这段时间里发生的令人难以置信的变化。

让我印象深刻的一件事是我参与(或合作)的数据组织的形状、大小和职权范围,以及它们对公司运营、产品和客户的影响程度。

举几个例子:一个人处理几千兆字节的数据,小型数据团队处理几千兆字节的数据,企业拥有众多国际互联的数据团队。

在每一种情况下,公司(或大型部门)都以自己独特的方式实现他们的数据组织和系统,随着时间的推移,随着需求的增加而进行调整和创新。然而,根据公司的属性,如规模、预算、成熟度、地理位置、监管要求等,每种方法都有共性、优点和缺点。

本文旨在强调我观察到的三种常见的数据组织类型,它们在文献中经常被讨论;集中式、分散式和混合式。最后,我将证明混合动力在许多情况下是理想的。

首先,我们来回答一个基本问题。为什么公司有某种形式的数据组织?

决策支持!

就本文的目的而言,我将把明确的决策支持数据组织和系统与运营数据组织和系统分开,运营数据组织和系统的存在主要是为了保持诸如法规遵从性之类的正常运行。

对于任何公司来说,数据组织都是一项昂贵的承诺,其预期结果是投资将从更有效的决策中获得正回报。虽然没有个人或公司是完美的决策者,数据本身也不能保证这一点,但公司至少可以努力提高做出更有效决策的机会。

对于一个公司来说,要建立和保持他们的竞争优势,这些决策必须尽可能地有影响力(增长)和有效率(成本),最好是需要尽可能少的决策。换句话说,公司必须不断努力达到最佳决策影响比。

如今,以数据为导向的决策可以延伸到公司的每个角落,并提出了什么类型的数据组织可以支持这种广度的问题。没有放之四海而皆准的方法,但我通常观察到三种类型:

  • 集中式 —个人/团队拥有其他行业/团队的数据并为其工作
  • 分散化 —每个个人/团队都拥有、成为专家并利用他们自己的数据
  • 混合 —以上的组合

有些人可能会争论这些定义,这没什么。这些是我对数据团队和非数据团队合作伙伴之间动态的观察。

让我们看看过去的一些数据组织

请注意,这些都是基于我的经验和观点,并不是对所有可能的数据组织的全面评估。

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

作者图片

小公司集中一个人的数据带

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

作者图片

  • 公司类型:小型,很少/很少持续的数据支持需求,经常临时运营。系统简单,数据集小。
  • 主要任务:基本报告/分析,通常是临时的
  • 好处:低成本,开始辅助决策
  • 弊端:关键人物依赖,意味着大部分数据技能和知识被锁在一个人身上(流失风险)。一个人也可能过于分散(并可能超负荷),而没有在某个特定领域积累专业知识。

中小型企业中的小型集中团队

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

作者图片

  • 公司类型:具有中等持续数据支持需求和较大、略复杂的系统和数据集的中小型企业。
  • 主要职责:更广泛的报告范围,开始有正式的指标/渠道、基本分析、维护数据系统和确保法规合规性。
  • 好处:成本仍然相对较低,比单人更具响应性和能力,可以开始支持战略决策。
  • 缺点:机会成本使企业中的员工没有建立他们的数据技能和领域知识,而仅仅依靠数据团队。

分散在一家小公司的精通数据的员工

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

作者图片

  • 公司类型:小公司,没有多余资源的初创公司
  • :特定领域的报告、计划、分析、实验等。
  • 好处:很少/没有正式的数据资源成本除了数据系统之外,员工(应该)成为其数据、产品和客户的完全所有者和专家,这应该能够实现更好、更有效的自主决策。
  • 缺点:学习和使用数据和工具而不是执行其他日常任务的潜在机会成本,数据系统和法规合规性更难维护

中小型企业中分散的精通数据的员工

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

作者图片

与分散的小公司非常相似,但具有放大的属性。

此外,没有一个这样规模的实体来粘合所有团队,并提供统一的输出和跨公司的叙述可能会成为一个问题。每个团队也可能变得过于孤立,不共享知识,并且在没有沟通的情况下做出影响其他团队的决策。员工可能会陷入忙碌的陷阱,无法频繁或充分地学习或使用他们的数据来增强决策。

简单混合中小型企业/企业

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

作者图片

  • 公司类型:中小型企业和企业,他们需要团队实现大部分数据自治,但也承认需要专家来支持数据系统和执行更深入更复杂的工作。
  • 主要职责:更高级的报告和分析,潜在的数据科学公司,机器学习和统计建模,实验支持,维护数据管道和监管。数据团队可能开始在高管层拥有一席之地(想想首席数据官)。
  • 好处:公司中大多数精通数据的员工应该能够提高他们的决策能力,同时也能够与专家合作来加强这些决策或卸载更复杂的工作。数据管道应该更加稳健、全面和合规。
  • 缺点:在这个阶段,人员和系统可能是一项重要的投资,尽管从理论上来说,这项投资应该会产生净收益。工作人员仍然会陷入忙碌的陷阱,没有足够频繁或深入地学习或使用他们的数据,或者将太多内容转移给数据团队。

多专业混合型企业

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

作者图片

与“简单”相同,但有多个数据团队,每个团队有不同的专长,例如,一个团队可能负责报告,另一个团队负责数据管道,另一个团队负责回答复杂问题的数据科学。

相对于简单混合模式的额外好处是角色更分散、更集中。例如,数据科学家可以更高效地完成工作,而不必同时做行政报告或管理管道。然而,在这种情况下,不利的一面可能是他们失去了业务中正在发生的事情的背景/可见性。

分布式混合企业

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

作者图片

与 simple(可能是多专业)相同,但公司足够大,可以保证每个部门都有自己的数据组织,因此增加了专业性,但每个部门(应该)一起工作以保持同步。

分布式混合企业与中央“粘合”团队。

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

作者图片

与分布式相同,但有一个独立的数据团队,将所有其他部门粘合在一起。部门数据团队专注于本地,中央团队处理跨部门的综合报告和分析,包括针对高管层的汇总叙述。该团队还可能维护一个集中的数据存储库,其中包含同质的部门数据。

共性总结

正如我们所见,没有固定的定义,也没有一个单一的定义适用于所有公司。下表旨在总结一些观察结果和共性:

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

作者提供的表格/图片

为什么沥青要进行杂交?

除了增强决策能力之外,还有三个主要原因:

1.协作影响(1+1=3) —精通产品和客户的员工与解决复杂性和/或跨公司凝聚力的专家的结合,应该会在整个公司产生更有效的决策。

2.治理和合规 —保留数据团队可以减轻员工的压力,让他们专注于自己的工作而不是系统,并确保数据得到治理(一致、准确和可信)和合规(想想 GDPR/CCPA/COPPA/HIPPA 等。).

3.对每个人都有好处 —每个人都是自己产品、客户和各自数据的专家,可以培养更好的产品经理,促进学习和个人成长,企业中的其他人也应该通过潜移默化而受益,公司有望更加成功。

(可选阅读)让我们来看一些场景,在这些场景中,混合动力车可能比其他车更有意义

一家小型创业公司

假设你是一个初创公司的创始人,即将从一个人的公司扩张到十个人的公司。你有足够的种子资金来开发你的想法,并将其投放到市场,但没有太多了。但是,您知道您需要数据来做出更有效、更快速的决策,并且已经拥有了基本的现成数据管道,能够进行简单的报告和分析。但是由于您缺乏资源,您将需要(目前)所有员工成为各自数据领域的专家,并执行大部分自主决策。所以,这应该是一个分散的模式,员工可以“凑合”吧?

也许不是。这些员工还能抽出时间和机会成本来维护数据管道、构建/监控/修复产品遥测、创建和分析出色的客户调查、建立营销活动系统、确保遵守所有法规、制定深入的季度/年度报告等吗?

请记住,根据严重程度,即使一次违反 GDPR 法规的行为也会使您的公司损失 2-4%的年收入。

让 1-2 名数据工作者组成一个小型混合数据组织来帮助处理上述大部分工作,同时确保 10 名员工仍然是他们数据的专家,这可能是值得的。

中间业务

假设您刚刚被一家 1,000 强公司聘用为首席数据官(CDO),负责建立其首个数据组织。该公司是成功的,势头强劲,但并不认为这是理所当然的。他们知道他们需要构建并更好地利用他们的数据资产来保持竞争力和合规性。

企业周围的员工大多根据个人判断和电子表格中的基本数据做出大多数决策,因此还没有形成数据文化。因此,最简单、最快捷的解决方案是建立一个集中的数据团队,您可以尽快开始运行并生成输出。对吗?你终究会勾选你的汇款的基本方框。

还是你有?您的团队资源有限,因此除了团队的日常任务(如管理数据管道和法规遵从性责任)之外,您无法满足业务中每个人的决策需求。所以,你没有有意义地改变现状。大多数员工仍然很少使用数据(并且可能没有动力使用),并且您所取得的大部分成果是进一步将一些责任卸载/转移到您自己的团队。该公司肯定处于一个更好的状态,但你有一个革命的机会,而不是进化。

相反,如果你承受了短期的痛苦,领导业务范围的计划,以建立一种数据主导的文化,通过教育和帮助他们实现利益,使其成为他们日常工作的核心部分,随着时间的推移,你应该实现一种授权和民主化的数据文化。你的团队变得更像一个咨询/增强机制,而不是所有者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值