TowardsDataScience 博客中文翻译 2021(三百九十)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

如何用摩丁加速熊猫

原文:https://towardsdatascience.com/how-to-speed-up-pandas-with-modin-84aa6a87bcdb?source=collection_archive---------2-----------------------

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

Modin 的一个目标是允许数据科学家对小数据集(千字节)和大数据集(兆兆字节)使用相同的代码。图片由德文·彼得森提供。

pandas 库提供了像 pandas DataFrames 这样易于使用的数据结构以及数据分析工具。熊猫的一个问题是它处理大量数据会很慢。它不是为分析 100 GB 或 1 TB 数据集而设计的。幸运的是,有一个摩丁库,它有一些好处,比如能够通过改变一行代码来扩展你的熊猫工作流,并与 Python 生态系统和 Ray 集群集成。本教程讲述了如何开始使用 Modin,以及它如何加快你的熊猫工作流程。

如何入门摩丁

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

为了确定首先在 Modin 中实现哪些 Pandas 方法,Modin 的开发人员收集了 1800 个投票最多的 Python Kaggle 内核(代码)。图片由德文·彼得森提供。

Modin 对 pandas API 的覆盖率超过 90%,重点是最常用的 pandas 方法,如 pd.read_csv、pd。DataFrame、df.fillna 和 df.groupby。这意味着如果您有大量数据,您可以更快地执行大多数与 pandas 库相同的操作。本节重点介绍一些常用的操作。

要开始使用,您需要安装 modin。

pip install “modin[all]” # Install Modin dependencies and modin’s execution engines

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

安装 pip 时,不要忘记""迈克尔·加拉尼克拍摄的图片。

进口摩丁

Modin 的一个主要优点是它不需要你学习一个新的 API。您只需要更改您的导入语句。

import modin.pandas as pd

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

你只需要修改你的 import 语句来使用 Modin(图片由 Michael Galarnyk 提供)。

加载数据(read_csv)

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

摩丁确实在大型数据集上大放异彩。图片由德文·彼得森提供。

本教程中使用的数据集来自大约 2GB 的健康保险市场数据集。下面的代码将数据读入一个 Modin 数据帧。

modin_df = pd.read_csv("Rate.csv”)

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

在这种情况下,Modin 速度更快,因为它将工作从主线程转移到异步线程。文件是并行读取的。改进的很大一部分来自于异步构建 DataFrame 组件(图片由 Michael Galarnyk 提供)。

下面的代码使用了 head 命令。

# Select top N number of records (default = 5)
modin_df.head()

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

在这种情况下,Modin 较慢,因为它需要一起收集数据。然而,用户应该无法在他们的交互工作流程中察觉到这种差异。

分组依据

和熊猫类似,摩丁也有 groupby 操作。

df.groupby(['StateCode’]).count()

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

迈克尔·加拉尼克的图片。

请注意,有计划要进一步优化 Modin 中 groupby 操作的性能。

菲尔娜

使用 fillna 方法填充缺失值可以比使用 Modin 快得多。

modin_df.fillna({‘IndividualTobaccoRate’: ‘Unknown’})

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

迈克尔·加拉尼克拍摄的图片。

默认为 pandas 实现

如前所述,摩丁的 API 覆盖了熊猫 API 的 90%左右。对于尚未涉及的方法,Modin 将默认使用 pandas 实现,如下面的代码所示。

modin_df.corr(method = ‘kendall’)

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

当摩丁默认为熊猫时,你会看到一个警告。迈克尔·加拉尼克的图片。

尽管默认为 pandas 会有性能损失,但无论该命令当前是否在 Modin 中实现,Modin 都将完成所有操作。

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

如果一个方法没有实现,它将默认为 pandas(图片由 Devin Petersohn 提供)。

摩丁的文档解释了这个过程是如何运作的。

我们首先转换成熊猫数据帧,然后执行操作。由于 panda 的通信成本和单线程性质,从分区的 Modin 数据帧到 panda 会有性能损失。一旦 pandas 操作完成,我们就将数据帧转换回分区的 Modin 数据帧。这样,在默认为熊猫之后执行的操作将通过 Modin 进行优化。

摩丁如何加快你的熊猫工作流程

modin 使 pandas 工作流程更快的三个主要方法是通过它的多核/多节点支持、系统架构和易用性。

多核/多节点支持

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

熊猫只能利用单核。摩丁能够有效地利用所有可用的硬件。该图显示了 Modin 可以利用的资源(深蓝色),具有多个核心(B)和多个可用节点©。迈克尔·加拉尼克的图片。

熊猫图书馆只能使用一个核心。由于今天几乎所有的计算机都有多个内核,通过让 modin 利用计算机上的所有内核,有很多机会来加速您的 pandas 工作流。

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

出于这篇博客的目的,你可以把上面的 MacBook 想象成一个 4 核的单节点。图像由迈克尔·加拉尼克拍摄。

如果你想将你的代码扩展到 1 个以上的节点, Modin 有一个 API,可以在本地和云提供商/集群上切换运行代码

系统结构

另一个让摩丁比熊猫更快的原因是熊猫本身是如何实现的。熊猫的创造者韦斯·麦金尼做了一个著名的演讲“我讨厌熊猫的 10 件事”,他谈到了一些熊猫缺乏灵活性和表现问题。

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

韦斯·麦金尼的一些熊猫问题与表演有关(来自 PyData 2013 的幻灯片)。

摩丁试图解决其中的一些问题。要理解这一点,重要的是要理解它的一些系统架构。下图概述了 Modin 组件的一般分层视图,并对每个主要部分进行了简短描述。

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

摩丁的系统架构(图片由德文·彼得森提供)。

API 层:这是面向用户的层,主要是 Modin 对 pandas API 的覆盖。SQLite API 是实验性的,而 Modin API 仍在设计中。

摩丁查询编译器:除了它的其他职责之外,查询编译器层严格遵循 pandas API,但是去掉了大部分的重复。

摩丁数据帧层:这是摩丁优化数据帧代数发生的地方。

执行:虽然 Modin 也支持其他执行引擎,如 Dask,但最常用的执行引擎是 Ray ,您可以在下一节中了解到。

雷是什么

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

Ray 让并行和分布式处理工作更像你所希望的那样( image source )。

Ray 是 Modin 的默认执行引擎。本节简要介绍了什么是 Ray,以及它如何不仅仅被用作执行引擎。

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

迈克尔·加拉尼克的图片。

上图显示,在高层次上,Ray 生态系统由核心 Ray 系统和用于数据科学的可扩展库组成,如 Modin 。这是一个用于在多个内核或机器上扩展 Python 应用的库。它有几个主要优点,包括:

  • 简单性:无需重写就可以扩展 Python 应用程序,相同的代码可以在一台或多台机器上运行。
  • 健壮性:应用程序优雅地处理机器故障和抢占。
  • 性能:任务以毫秒级延迟运行,扩展到数万个内核,并以最小的序列化开销处理数字数据。

因为 Ray 是一个通用框架,所以社区在它的基础上构建了许多库和框架来完成不同的任务,如用于任何规模的超参数调整的 Ray Tune 、用于易于使用的可扩展模型服务的 Ray Serve 以及用于强化学习的 RLlib 。它还集成了 scikit-learn 等机器学习库以及对 PySpark 和 Dask 等数据处理库的支持。

虽然您不需要学习如何使用 Ray 来使用 Modin,但下图显示,通常只需要添加几行代码,就可以将一个简单的 Python 程序变成一个跨计算集群运行的分布式程序。

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

如何用 Ray 把一个简单的程序变成分布式的例子(代码解释)。迈克尔·加拉尼克拍摄的图片。

结论

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

Modin 的一个目标是允许数据科学家对小数据集(千字节)和大数据集(兆兆字节)使用相同的代码。图片来自德文·彼得森

Modin 允许您对笔记本电脑上的 10KB 数据集和集群上的 10TB 数据集使用相同的 Pandas 脚本。由于 Modin 易于使用的 API 和系统架构,这是可能的。这种架构可以利用 Ray 作为执行引擎,使扩展 Modin 变得更加容易。如果您对 Ray 有任何问题或想法,请随时通过 DiscourseSlack 加入我们的社区。你也可以查看射线峰会页面,看看射线是如何在整个行业中使用的!

最初发表于【https://www.anyscale.com】

如何将 Python 数据管道加速到 91X?

原文:https://towardsdatascience.com/how-to-speed-up-python-data-pipelines-up-to-91x-80d7accfe7ec?source=collection_archive---------8-----------------------

一个 5 分钟的教程可以为您的大数据项目节省数月时间。

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

照片由 Vicky YuUnsplash 上拍摄

作为一名数据科学家,令人沮丧的事情是等待大数据管道完工。

尽管 python 是数据科学家的浪漫语言,但它不是最快的。这种脚本语言在执行时被解释,使得它很慢,并行执行很困难。可悲的是,并不是每个数据科学家都是 C++专家。

如果有一种并行执行,以编译代码的速度运行 python 代码的方法会怎样?这就是 Tuplex 正在解决的问题。

Tuplex 是用 Python 编写的并行大数据处理框架。如果您曾经在 Apache Spark 中工作过,这可能对您来说很熟悉。然而,与 spark 不同,Tuplex 不调用 Python 解释器。它优化管道并将其转换为 LLVM 字节码,以极快的速度运行,与手工优化的 C++代码一样快。

Python 使用多重处理库来并行执行。这个库的缺点是它不能在任何 REPL 环境下工作。然而,我们数据科学家喜欢 Jupyter 笔记本。在幕后,多重处理甚至不是一种并行执行技术。它只启动多个子进程,操作系统负责它的并行执行。事实上,不能保证操作系统会并行运行它们。

在本文中,我们将讨论:

  • 如何安装 Tuplex
  • 如何运行琐碎的数据管道;
  • Tuplex 中便捷的异常处理:
  • 高级配置如何帮助您,以及;
  • 将它与普通的 python 代码进行对比。

我确信这将是一次公园散步。

启动并运行 Tuplex。

尽管它很有用,但 Tuplex 的设置非常简单。PyPI 做到了。

pip install tuplex

虽然在 Linux 上推荐使用这种方法,但是在 Mac 上可能必须使用 docker 容器。

这里有一点需要注意的是,它还没有在 Windows 电脑上测试过。至少 Tuplex 的文档没有提到。请分享你的 Windows 电脑体验。

你的第一条数据管道。

一旦安装了 Tuplex,运行并行任务就很容易了。这是来自 Tuplex 官方文档页面的例子。

来自 Tuplex 文档的片段。

首先,您必须创建一个复合上下文。您可以通过从 Tuplex 模块导入它来做到这一点。

从这里开始,运行并行函数执行只需要三个步骤;并行化、映射和收集。

Tuplex 上下文对象的并行化方法是您的起点。它将输入值列表作为参数传递给函数。该列表中的每个元素都将通过函数与其他元素并行运行。

您可以传递一个用户定义的函数,该函数使用 map 函数转换每个输入。最后,使用 collect 方法收集所有并行执行的输出。

Tuplex 中方便的异常处理。

我最喜欢 Tuplex 的一点是它在管理异常方面的便利性。数据管道中的错误处理是一种令人畏惧的体验。想象一下,花几个小时处理一个数据流,却发现一个被零除的细微错误扼杀了你所做的一切。

来自 Tuplex 文档的片段。

上面的代码会产生一个被零除的错误。如果您使用 spark 或任何标准 python 模块来处理这个问题,至少情况是这样的。

在 Tuplex 中,错误处理是自动的。它会忽略有错误的那个并返回其余的。上面的代码将返回[2,-4],因为列表中的第一个和第三个输入无法执行。

但是,忽略错误有时是有问题的。通常你必须以不同的方式处理它们,而 Tuplex 的 API 足够灵活,可以做到这一点。事实上,Tuplex 方法很方便。

来自 Tuplex 文档的片段。

Tuplex 使错误处理变得毫不费力。您必须在“map”和“collect”方法之间链接一个“resolve”方法。在上面的例子中,我们已经传入了 ZeroDivisionError 类型,并通过替换零来处理它。

resolve 方法的第二个参数是一个函数。有了这个函数,您可以告诉 Tuplex 在出现这种类型的错误时应该做什么。

为高级用例配置 Tuplex。

您可以用两种方式配置 Tuplex。第一种是直截了当的解决方案;只需将字典传递给上下文初始化。下面是一个将执行内存设置为较高值的示例。

来自 Tuplex 文档的片段。

Tuplex 还支持在 YAML 文件中传递配置。在生产环境中,您可能必须将配置存储在文件中。YAML 文件是处理不同配置并在开发和测试团队之间传递的一种很好的方式。

来自 Tuplex 文档的片段。

下面是一个配置文件的例子,它包含了您可以从 Tuplex 文档中进行的所有不同的定制。

来自 Tuplex 文档的片段。

性能基准

Tuplex 的承诺耐人寻味。是时候看看它的性能提升了。

在这次基准测试中,我使用了这个简单的质数计数器函数。我首先使用 for 循环运行这个函数,然后使用 python 内置的多处理模块,最后使用 Tuplex。

作者的片段。

用标准 Python 执行密集型任务。

在 for 循环中运行函数是最简单的。我使用 Jupyter 笔记本中的“%%time”助手来跟踪执行时间。

作者摘录。

多次运行上述代码平均需要 51.2 秒才能完成。

在 for 循环执行中,执行速度会很慢。但是让我们用 python 内置的多处理模块来做同样的尝试。下面的代码不能在 REPL 的 like Jupyter 笔记本上运行。你必须把它放在一个. py 文件中,然后在命令行中执行它。

作者摘录。

运行这个多处理脚本的平均时间为 30.76 秒。与 for-loop 方式相比减少了 20.44 秒。

并行处理密集型任务。

最后,我们执行相同的素数计数器函数,这次是用 Tuplex。下面这段简洁的代码平均花费了 0.000040 秒,并产生了相同的结果。

作者摘录。

与其他标准 python 方式相比,Tuplex 的性能提升非常显著。这个小例子的执行时间比多处理短 769k 倍,比普通 for 循环快 1280k 倍。

我们会…让我们坚持 Tuplex 团队的 5–91X 承诺。然而,Tuplex 敦促我在编写另一个 for 循环之前要三思。

结论

Tuplex 是一个易于安装的 python 包,可以为您节省大量时间。它通过将数据转换成字节码并并行执行来加速数据管道。

性能基准测试表明,它对代码执行的改进是深远的。然而,它的设置非常简单,语法和配置非常灵活。

Tuplex 最酷的部分是它方便的异常处理。数据管道中的错误处理从未如此简单。它与交互式 shells 和 Jupiter 笔记本集成得很好。编译语言通常不是这种情况。甚至 python 本身也不能像 Jupyter notebook 那样在 REPL 内部处理并行处理。

Tuplex 在提升 Python 性能方面取得了显著的成功。但是与 Python 传统的高性能计算方法相比,它的性能如何呢?这里有一篇文章将它与 Cython 进行了对比。

谢谢你的阅读,朋友。看来你和我有许多共同的兴趣。一定要看看我的个人博客。

向我问好LinkedInTwitter。我会为你打破僵局。

还不是中等会员?请使用此链接 成为 会员。你可以享受成千上万的有见地的文章,并支持我,因为我赚了一点佣金介绍你。

如何加快编写大型 SQL 查询

原文:https://towardsdatascience.com/how-to-speed-up-writing-a-large-sql-query-9237c6db56cc?source=collection_archive---------21-----------------------

更聪明地工作,而不是更努力:在大约 3 分钟内学会!

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

图片由 Prateek Katyal 通过 Unsplash 提供

我们都经历过这种情况:从一个大表中提取数据,这个大表有个需要聚合的数字列。为什么要为 30 多列中的每一列都键入“SUM(col_1) AS col_1,etc ”,而这可以简单得多?注意:第二个超级省时器跟在第一个魔术后面!

Excel 不仅仅可以用于数据透视表

在下图中,我使用了一个假想的 SQL 表中的 10 列。对于每一列,我们将对值求和。我们可以使用 Excel 的内置函数 CONCATENATE()来完成所有繁重的工作,而不是把这些都写出来。

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

作者照片

在 A 列中,我们有一个要求和的列的列表。在 B 列中,我们输入连接函数。这可以通过别名、不同的聚合等来改变。基本语法是:

  1. 逗号(也可以放在末尾)
  2. 带有左“(”的聚合名称
  3. 列名
  4. 用空格结束“)”
  5. “AS”这个词(AS 不是必需的,但既然如此简单,不妨使用它)
  6. 再次输入列名

一旦我们创建了 B 列,只将复制并粘贴到另一列。然后,您可以复制这些结果并将其粘贴到您的 SQL 查询中。

对 10 列这样做将节省少量时间。真正的好处是当你开始引入 30 或 50+列时。

但是等等,还有更多…

在 A 列或步骤 1 中,我们需要一个列名列表。如果可以加快这个过程,为什么还要把这些都打出来呢?下一部分将根据您使用的 SQL 类型而有所不同。对于 MS SQL Server,您可以使用此查询从表中提取所有列名的列表:

该查询中的一列是您特别命名的表中所有列的名称。您可以复制并粘贴所有列,只删除不需要聚合的列。从 Excel 中删除 20 行比键入 40 个列名要快得多。

最后的想法

正如在以前的文章《V2:什么造就了一个伟大的分析师?》中提到的,你一定是个骗子。一个很好的习惯是确定你经常被要求完成的普通类型的任务,找出节省时间的方法,实施它,然后与你团队中的其他人分享这个想法。一如既往,继续学习!

找出“V2:是什么造就了一个伟大的分析师?”:

和 V1:

如何加快 XGBoost 模型训练

原文:https://towardsdatascience.com/how-to-speed-up-xgboost-model-training-fcf4dc5dbe5f?source=collection_archive---------18-----------------------

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

虽然增加计算资源可以加快 XGBoost 模型训练的速度,但为了更好地利用可用的计算资源,您也可以选择更高效的算法(图片由 Michael Galarnyk 提供)。

梯度推进算法广泛应用于监督学习。虽然他们很强大,但他们可能需要很长时间来训练。Extreme gradient boosting,或 XGBoost ,是一个开源的梯度增强实现,旨在提高速度和性能。然而,即使是 XGBoost 训练有时也会很慢。

有很多方法可以加速这一过程,例如:

本文将回顾每种方法的优点和缺点,以及如何开始。

改变你的树构造算法

XGBoost 的tree_method参数允许您指定想要使用的树构造算法。为你的问题选择一个合适的树构造算法(exactapproxhistgpu_histauto,可以帮助你更快的产生一个最优的模型。现在让我们回顾一下算法。

确切的

这是一个精确的算法,但是它的可扩展性不是很好,因为在每个 split find 过程中,它会遍历所有的输入数据条目。实际上,这意味着长时间的训练。它也不支持分布式训练。可以在原 XGBoost 论文中了解更多关于这个算法的内容。

虽然确切的算法是准确的,但当数据不能完全适合内存时,它是低效的。原始 XGBoost 论文中的近似树方法使用分位数草图和梯度直方图。

hist

LightGBM 中使用的近似树方法与approx在实现上略有不同(使用了一些性能改进,如 bin 缓存)。这通常比approx更快。

gpu_hist

由于 GPU 对于许多机器学习应用来说至关重要,XGBoost 拥有 hist 算法gpu_hist的 GPU 实现,该算法支持外部存储器。它比 hist 快得多,使用的内存也少得多。注意,XGBoost 在某些操作系统上没有对 GPU 的原生支持

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

XGBoost 文档

汽车

这是参数的默认值。基于数据集的大小,XGBoost 将选择“最快的方法”。对于小型数据集,将使用 exact。对于较大的数据集,将使用近似值。注意,在这种基于启发式的方法中,不考虑 hist 和 gpu_hist,尽管它们通常更快。

如果你运行下面的代码,你会看到使用 gpu_hist 运行模型是如何节省大量时间的。在我的计算机上的一个相对较小的数据集(100,000 行,1000 个要素)上,从 hist 更改为 gpu_hist 将训练时间减少了大约 1/2。

如果 XGBoost 在您的操作系统上没有对 GPU 的本地支持,请将第 17 行修改为 methods = [‘exact ‘,’ approx ‘,’ hist ‘,’ auto’]。这将删除“gpu_hist”。

利用云计算

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

云计算不仅可以让你利用比本地机器更多的内核和内存,还可以让你访问专门的资源,比如 GPU。

最后一节主要是关于选择更有效的算法,以便更好地利用可用的计算资源。然而,有时可用的计算资源是不够的,你只是需要更多。比如下图所示的 MacBook,只有 4 核,16GB 内存。此外,它运行在 MacOS 上,而在撰写本文时,XGBoost 还没有 GPU 支持。

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

出于本文的目的,你可以将上面的 MacBook 想象成一个 4 核的单节点(图片由 Michael Galarnyk 提供)。

解决这个问题的方法是在云上利用更多的资源。利用云提供商不是免费的,但他们通常允许你利用比本地机器更多的内核和内存。此外,如果 XGBoost 不支持您的本地机器,很容易选择 XGBoost 支持的实例类型。

如果你想尝试加速你在云上的训练,下面是来自杰森·布朗利的文章中关于如何在 AWS EC2 实例上训练 XGBoost 模型的步骤概述:

1.设置 AWS 帐户(如果需要)

2.启动 AWS 实例

3.登录并运行代码

4.训练 XGBoost 模型

5.关闭 AWS 实例(仅在使用实例时付费)

如果您选择一个比本地更强大的实例,您可能会发现云上的训练更快。注意,使用 XGBoost 的多 GPU 训练实际上需要分布式训练,这意味着您需要不止一个节点/实例来完成这个

使用 Ray 进行分布式 XGBoost 训练

到目前为止,本教程已经介绍了通过改变树构造算法和通过云计算增加计算资源来加速训练。另一个解决方案是用利用 Ray 的 XGBoost-Ray 来分发 XGBoost 模型训练。

雷是什么?

Ray 是一个快速、简单的分布式执行框架,可以轻松扩展您的应用程序并利用最先进的机器学习库。使用 Ray,您可以将按顺序运行的 Python 代码,通过最少的代码更改,转换成分布式应用程序。如果你想了解雷和演员模型,你可以在这里了解

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

虽然本教程探索了 Ray 如何使 XGBoost 代码的并行化和分发变得容易,但需要注意的是,Ray 及其生态系统也使普通 Python 代码以及现有库的分发变得容易,如 scikit-learnLightGBMPyTorch 等等(图片由 Michael Galarnyk 提供)。

如何开始使用 XGBoost-Ray

要开始使用 XGBoost-Ray,首先需要安装它

pip install "xgboost_ray"

因为它与核心 XGBoost API 完全兼容,所以您只需要修改一些代码,就可以将 XGBoost 培训从单台机器扩展到拥有数百个节点的集群。

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

XGBoost-Ray 支持多节点/多 GPU 训练。在机器上,GPU 通过 NCCL2 传递梯度。在节点之间,他们用 Rabit 代替。你可以在这里了解更多信息。

正如您在下面的代码中看到的,这个 API 非常类似于 XGBoost。粗体部分是代码与普通 XGBoost API 不同的地方。

**from xgboost_ray import RayXGBClassifier, RayParams**
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split

seed = 42

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, train_size=0.25, random_state=42
)

**clf = RayXGBClassifier(
    n_jobs=4,  # In XGBoost-Ray, n_jobs sets the number of actors
    random_state=seed)**

# scikit-learn API will automatically convert the data
# to RayDMatrix format as needed.
# You can also pass X as a RayDMatrix, in which case
# y will be ignored.

clf.fit(X_train, y_train)

pred_ray = clf.predict(X_test)
print(pred_ray)

pred_proba_ray = clf.predict_proba(X_test)
print(pred_proba_ray)

上面的代码显示了使用 XGBoost-Ray 只需要修改很少的代码。虽然您不需要 XGboost-Ray 来训练乳腺癌数据集,但之前的一篇文章在不同数量的工作人员(1 到 8)中对几个数据集大小(大约 1.5M 到大约 12M 行)进行了基准测试,以显示它在单个节点上对更大的数据集的性能。

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

单节点基准测试的训练时间(越短越好)。XGBoost-Ray 和 XGBoost-Dask 在单个 AWS m 5.4x 大型实例上实现了类似的性能,该实例具有 16 个内核和 64 GB 内存(图像源),

XGBoost-Ray 在多节点(分布式)设置中也是高性能的,如下图所示。

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

多个合成数据集的多节点训练时间从大约 400k 到大约 2B 行(越低越好)。XGBoost-Ray 和 XGBoost-Spark 实现了类似的性能(图像来源)。

如果你想了解更多关于 XGBoost Ray 的信息,请查看 XGBoost-Ray 上的这篇帖子。

结论

这篇文章介绍了几种可以用来加速 XGBoost 模型训练的方法,比如改变树的构造方法、利用云计算和在 Ray 上分布式 XGBoost。请记住,有许多不同的方法可以做到这一点,所以请随时用你最喜欢的方式发表评论。如果你想了解雷的最新消息,可以考虑在 twitter 上关注@ Ray distributed

如何将 K-Means 聚类速度提高 10 倍

原文:https://towardsdatascience.com/how-to-speed-up-your-k-means-clustering-by-up-to-10x-over-scikit-learn-5aec980ebb72?source=collection_archive---------12-----------------------

使用 Faiss 库

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

ChireCC BY-SA 4.0 ,通过维基共享

K-Means 聚类是机器学习中最知名、最常用的聚类算法之一。具体来说,它是一种无监督的机器学习算法,这意味着它在不需要地面事实标签的情况下进行训练。实际上,要使用它,你所要做的就是设置期望的聚类数 K ,初始化 K 形心,然后执行算法得到类。

K-Means 的优点在于它的简单性:它真正做的只是计算点和组中心之间的距离,从而导致线性复杂度 O ( n )。对于大多数不需要处理数百万个数据点的数据集来说,这种方法非常有效。

但这就是我们遇到问题的地方:当涉及到更大的数据集时,K-Means 是缓慢的,因为有太多的数据点需要比较。更糟糕的是,最流行的 K-Means 聚类实现,即 Scikit-Learn ,并没有得到很好的优化。

但不用担心。这就是我们的新朋友费斯的用武之地!

什么是 Faiss?

Faiss 是一个快速相似性搜索和聚类的库。它是由脸书人工智能研究所创建的,非常智能地使用向量,以及跨 CPU 核心的并发性来加快计算速度。更重要的是,它有一个 GPU 组件,用于在更大的数据集上提高速度。

尽管所有这些神奇的事情都发生在幕后,Faiss 仍然提供了一个 Python 接口,这使得编码非常容易。事实上,一旦你进入其中,你会发现代码的布局看起来与 Scikit-Learn 惊人的相似。

安装 Faiss 库

安装 Faiss 最简单的方法是使用 conda。首先,创建您的 conda 环境并激活它:

然后,您可以在环境中安装 Faiss 库。我们还将安装 scikit-learn,因为我们将比较两者之间的速度。最后,我们将安装 Keras 和 TensorFlow —我们将使用其中的数据集。

下面我安装了 Faiss 的 CPU 版本,但他们也有一个 GPU 版本,如果你感兴趣的话。如果你想做一个非常漂亮的安装,你可以随时查看安装文档

太好了!现在我们已经准备好让我们的 K-Means 超级快!

使用 Scikit-Learn 设置数据和基准

我们要做的第一件事是运行 Scikit-Learn 实现。这是为了建立一个通用的比较基准。供您参考,我运行这些测试的机器有以下规格:

  • i7–8700k CPU
  • 32 GB DDR 4 3000 MHz 内存

我们首先要做的是导入和数据加载。

我们将使用经典的 MNIST 数据。MNIST 是由 60,000 幅训练图像和 10,000 幅测试图像组成的数据集。每个图像是 28x28 像素,在黑色背景上包含一个白色像素的数字(0 到 9 中的一个)。它通常被用作机器学习的快速基准——挑战足够有意义,但又足够小,不需要大量的计算能力。

看看下面的代码,看看我们是如何做到的。我们直接从 Keras 获取数据,对其进行整形,并将输入规范化为浮点类型,值介于 0 和 1 之间。

接下来我们要做的是运行我们的 scikit-learn K-Means 基准测试。看看下面的代码,看看我们是如何做到的。

我们将 K-Means 设置为 10 个聚类,因为这是我们的数据集拥有的类标签(数字)的数量。然后,我们运行我们的fit()函数,它实际上创建了集群。我们测量这需要多长时间作为“训练时间”。接下来是我们使用predict()函数在测试集上执行的预测。在这里,我们测量对所有样本进行预测所花费的总时间,作为“预测时间”。

不错!

最终,对这 60,000 幅图像的训练花费了 21.51 秒,而对 10,000 幅图像的总预测时间为 0.0203 秒

使用 Faiss 在 CPU 上运行

现在,我们将看看如何使用 Faiss 实现同样的集群,当然,在 CPU 上要快得多。代码类似于 scikit-learn,只是有几个不同的变量名。

看看下面的代码,看看我们是如何做到的。我们再次将聚类数设置为 10。我们还必须设置两个变量:niter,它相当于来自 scikit-learn 的max_iternredo,它相当于来自 scikit-learn 的n_init。此外,代替fit(),用于训练的函数被称为train(),代替predict(),用于预测的函数被称为search()

我们再次测量训练和预测的时间。在 Faiss 库的情况下,对这 60,000 幅图像的训练花费了 2.33 秒,而总预测时间为 0.0112 秒。这几乎是训练的 10 倍加速和预测的 2 倍加速!

总是超级快吗?

不,不总是。

在我对更小的数据集做的所有测试中,比如波士顿、鸢尾和 T21,几乎没有改善。我认为这是因为 Faiss 需要时间来设置和矢量化所有的数据,所以只有在更大的数据集上才能实现改进。

如果你想在 GPU 上运行,Faiss 团队也有进一步的建议,他们再次指向更大的数据集。这当然是有意义的,因为将数据从 CPU 传输到 GPU 总是需要时间。因此,一般来说,利用 GPU 只能真正为非常大的数据集(即数百万个样本)加速。

了解更多信息

我强烈推荐查看 Faiss Wiki 来了解更多关于如何使用这个库的信息。该库在相似性搜索和检索方面做了令人难以置信的优化(例如 KNN ),并且有大量的例子让你开始。

如何通过 PySpark 加速您的 Python 代码

原文:https://towardsdatascience.com/how-to-speed-up-your-python-code-through-pyspark-e3296e39da6?source=collection_archive---------19-----------------------

环境设置

关于如何安装和运行 Apache Spark 和 PySpark 以提高代码性能的教程。

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

图片由拍摄来自 Pixabay

当你处理巨大的数据集时,瓶颈不是你的代码(我希望如此…),而是对你的数据集执行某些操作所耗费的时间。出于这个原因,开发一些可以加速代码的库是非常重要的。

阿帕奇 Spark 或许能帮到你。Apache Spark 是一个开源项目,相对于标准技术,它可以将工作负载加速 100 倍。它可以在分布式环境中工作(集群),但也可以在本地使用,例如当您的机器中有多个处理器时。

实际上,在 Apache Spark 中有两种类型的节点:主节点和许多工作节点,主节点是集群的主计算机。主服务器组织工作并在工人之间分配,然后检索结果。

在本教程中,我涉及以下几个方面:

  • 下载并安装 Apache Spark
  • 安装 PySpark 以配置 Python 来与 Apache Spark 一起工作
  • 运行一个简单示例

下载并安装 Apache Spark

Apache Spark 可以从其官方网站下载:

https://spark.apache.org/downloads.html

你可以选择火花释放和包装时间。如果您没有任何特殊需求,可以下载 Apache Hadoop 的最新版本和预编译版本。下载后,您可以将其移动到您的首选目录,并用一个较短的名称重命名。

Apache Spark 可以通过 PySpark 包与 Python 结合使用。

Apache Spark 也需要安装 Java。Java 的兼容版本从 8 到 11 不等。不支持其他版本。

安装 PySpark

现在您可以安装 PySpark,例如通过pip管理器:

pip install pyspark

安装完成后,您需要配置SPARK_HOME并修改您的.bash_profile.profile文件中的PATH变量。该文件是隐藏的,位于您的主目录中。您可以打开它,并在文件末尾添加以下代码行:

export SPARK_HOME="**/path/to/spark**/spark"
export PATH="$SPARK_HOME/python:$PATH"

您可以保存文件并启动终端。您可以输入以下命令:

pyspark

pyspark终端启动。要退出它,只需写下quit()并按回车键。

作为选项,您可以配置 **pyspark** 使用 Jupyter 笔记本。

在这种情况下,您可以使用findspark包,它会为您搜索 Spark 在哪里。实际上,findspark包会从你的概要文件中读取SPARK_HOME目录。

您可以通过以下命令安装findspark:

pip install findspark

安装完成后,您可以启动 Jupyter notebook,并在代码开头添加以下代码行:

import findspark
findspark.init()

简单的例子

现在,您已经准备好运行您的第一个pyspark 示例了。首先,您可以创建一个SparkContext,它对应于您的集群的主节点。您可以指定一些配置参数,例如应用程序名称(myproject)和 url ( local):

from pyspark import SparkContext, SparkConfconf = SparkConf().setMaster("local").setAppName("myproject")
sc = SparkContext.getOrCreate(conf=conf)

getOrCreate()函数创建一个新的SparkContext,如果它还不存在,否则它检索现有的。这是因为只能有一个运行中的SparkContext实例。

现在您可以创建一个 Spark 数据帧,它的行为很像一个 SQL 表。火花数据帧可从SparkContext对象创建,如下所示:

from pyspark.sql import SparkSessionspark = SparkSession.builder.getOrCreate()

现在您可以使用spark对象来读取 CSV 文件:

df = spark.read.csv("/path/to/your/csv/file",inferSchema=True, header=True)

inferSchema=True参数允许自动识别数据类型,但需要更多时间。您可以通过show()函数列出数据帧的第一行:

df.show()

结果看起来像一个 SQL 表。

您可以通过经典的 SQL 查询来查询数据帧。为此,首先必须将新的数据帧注册到可用表列表中:

df_sql = df.createOrReplaceTempView('df_name')

其中df_name是您希望在 SQL 中使用的表的名称。您可以列出所有可用的表格:

print(spark.catalog.listTables())

现在,您可以通过以下代码查询您的表:

query = 'SELECT count(*) FROM df_name'
sc.sql(query)

摘要

在本教程中,我演示了如何在您的计算机上安装和运行 Apache Spark 和 PySpark。此外,我还举例说明了如何将 CSV 文件读入 Spark DataFrame。

如果你想了解我的研究和其他活动的最新情况,你可以在 TwitterYoutubeGithub 上关注我。

相关著作

https://medium.com/geekculture/the-top-25-python-libraries-for-data-science-71c0eb58723d [## 如何在 Android 设备上安装 Python 和 Jupyter Notebook

towardsdatascience.com](/how-to-install-python-and-jupyter-notebook-onto-an-android-device-900009df743f)

参考

https://medium.com/tinghaochen/how-to-install-pyspark-locally-94501eefe421 https://www.sicara.ai/blog/2017-05-02-get-started-pyspark-jupyter-notebook-3-minutes

如何通过缓存加速 Python 代码

原文:https://towardsdatascience.com/how-to-speed-up-your-python-code-with-caching-c1ea979d0276?source=collection_archive---------1-----------------------

使用 cachetools 的快速指南

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

安东·马卡连柯的图片来自派克斯

几周前,我开始研究优化我的代码。我了解了常见的反模式和最坏的实践,查看了创建 Python 对象时如何分配内存,并最终理解了多线程和多处理等概念以及之间的区别。

今天,我将告诉你关于缓存:一种最小化不必要的计算并加速你的程序的机制。如果做对了,你会惊讶于这是多么有效。

在这篇文章中,我们将了解什么是缓存,什么时候与使用相关,以及我们如何使用 ***cachetools*** python 包将其应用于各种用例。

事不宜迟,我们来看看吧!🔎

什么是缓存?

缓存是一种优化技术,包括将最近(或经常)使用的数据保存在一个内存位置,该位置可以廉价快速地访问重复查询。

由于多种原因,从原始源访问数据可能会很昂贵,缓存似乎是缓解这一问题的解决方案。

👉让我们考虑一个经常使用缓存的应用 : web 服务器。

你正在建立一个小网站来分享你所在地区的本地新闻。

当用户滚动新闻提要并点击一篇文章时,他被重定向到一个网页:浏览器在这一步所做的是查询远程服务器,接收页面源代码并以人类可读的格式呈现它。正如您所料,这个操作非常耗时,因为它涉及到下载远程文件(这是一个网络绑定的操作)和渲染它们。

⚠️每次用户点击这个链接时都重复同样的操作,这似乎是一个不必要的计算。我们已经知道第一次提取后的结果,为什么不重用它呢?

✅:在这种情况下,你应该做的是在获取每篇文章后将内容存储在本地。下次用户打开同一篇文章时,应用程序将从本地副本中读取内容。这会快得多。

您可能已经在不知不觉中实现了缓存

让我们回到前面的例子,尝试提出一个简单的缓存实现。

我们想要的是将每篇文章的内容存储在本地内存中(例如 RAM 中的一个对象),如果用户以后请求相同的链接,就可以重用它。

这看起来像是字典的完美工作。

如果我们试图用同一个 url 连续运行两次fetch_article

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

作者截图

我们会注意到一个巨大的差异。

  • 第一次:118 毫秒
  • 第二次:5.01 秒

这是一个 2360 的惊人比例!

你会告诉我,118 毫秒还是很快。但是想象一下,如果同一个用户每天多次执行这个操作。有很多时间可以节省。

使用 cachetools 和 TTLCache 实现相同的缓存机制

cachetools是一个提供各种记忆集合和装饰器的模块,包括 Python 标准库的 @lru_cache 函数装饰器的变体。

使用cachetools添加缓存行为非常简单。我们只需添加几行:

如您所见,我们不再需要处理缓存更新的fetch_article函数。

在理解每个 import 语句的作用之前,先让代码替我们说话。

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

作者截图

运行之后,我们注意到,就像前面的例子一样,相同的时间差。

第一行输入我们需要使用的cachetools包。

**from cachetools import cached, TTLCache**

第二行是我们创建缓存对象的地方:第一个参数指定了我们存储在缓存中的对象的数量。我将它设置为 100,但它可以根据您的使用情况而变化。

第二个参数是生存时间的缩写,基本上是每个结果存储在缓存中的时间。过了这段时间,缓存的结果就过期了。

我随意地将它设置为 86400 秒,这相当于一整天。

**cache = TTLCache(maxsize=100, ttl=86400)**

第三行是我们添加到每个我们想要使用缓存的函数之上的装饰器。

其他缓存策略

我们已经配置了一个 TTL 缓存,但是其他类型的缓存也是可用的。

用哪一个高看你的需求了。有:

  • LFUCache(最少使用):记录检索项目的频率,并丢弃最少使用的项目
  • LRUCache(最近最少使用):丢弃最近最少使用的项目
  • RRCache(随机替换):随机选择物品并丢弃

感谢阅读🙏

缓存是一种重要的优化技术,可以防止重复,提高应用程序的速度。

知道何时以及如何添加缓存是提高代码效率的实用技能。

我希望这篇文章对你有用。今天就这些了。

下次见!👋

资源

您可以查看以下链接,了解更多关于 Python 中缓存的信息

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

照片由卡斯滕·怀恩吉尔特Unsplash 上拍摄

新到中?您可以每月订阅 5 美元,并解锁无限的文章— 单击此处。

当你在等待数据分析结果的时候,你是如何打发时间的

原文:https://towardsdatascience.com/how-to-spend-your-time-when-you-are-waiting-for-a-data-analysis-output-e71b383f43cb?source=collection_archive---------28-----------------------

数据科学讨论

当你的计算机正在运行你喜欢的算法,而你正在等待结果时,一些建议不要浪费你的时间。

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

图片由 anncapictures 来自 Pixabay

数据科学家的工作非常具有挑战性:你的知识必须涵盖从数据挖掘到数据分析,直到数据可视化。你从不停止

然而,当你启动一个繁重的计算时,比如一个大数据集上的机器学习算法,会发生什么?你停下来等待结果。你可能会看着屏幕几个小时,希望你的剧本完成。

不管怎么说,这不是消磨时间的最佳方式。你应该做些别的事情。你不能坐下来等待结果。

在这篇文章中,我向你推荐两种可能的替代方法来填补等待时间:

  • 专注于你的项目
  • 敞开心灵

1.专注于你的项目

花时间的一种可能方式是专注于你的项目,也就是说你可以尝试改进你的项目。如何?以下是一些可能的策略。

1.1 再次检查您的代码

第一个策略是再次检查你的代码,确保没有错误。这可能会导致您发现数据中的编程错误或问题。

你可以说我:“是的,你是对的!但是我如何检查我的代码写得好不好?”

一些提示:

  • 你的函数、变量和类都有有意义的名字,从某种意义上说,它们的名字反映了它们是什么。请不要使用my_variable作为变量的名称。如果变量代表某事物的总和,则使用total_sum
  • 你的代码易于阅读:编程语言只是另一种交流语言。因此,你的语言能被解读成旋律是非常重要的。
  • 如果由于代码的复杂性,您不能立即阅读您的代码,您可以向它添加注释。对一个写得好的代码来说,注释代码是最好的实践。

1.2 与你的同事讨论你的解决方案

你可以告诉你的同事你所采用的解决方案,比如解决旅行问题所采用的算法。你的同事可以为你的问题提出其他可能的解决方案。因此,您可以尝试实现它们,并与您的原始解决方案进行比较。

这样的讨论可以帮助你找到解决问题的替代方案,也许比你的方案更好。

1.3 思考接下来的步骤

另一个消磨时间的策略可以是开始思考你的输出的一些可能的可视化。因为你的观想依赖于你分析的输出,根据可能的输出,你可以想象不同的观想。

你可以列出可能的观想工具,并试着理解哪一个最适合你的情况。

1.4 搜索类似项目

你可以谷歌搜索类似的项目,也就是说你可以搜索你的竞争对手是如何解决与你类似的问题的

这个相位会向你揭示新的策略,也许,你会在等待你的算法输出的时候尝试去实现它们。

1.5 搜索其他数据

最后,但同样重要的是,你可以搜索其他的补充数据,这可以揭示你问题的另一个方面。存在许多开放资源,您可以在其中搜索感兴趣的数据。

以下是一些开源数据提供商:

  • 欧盟统计局数据库 —欧洲统计
  • Data.world —云原生数据的目录
  • data.gov—美国公开政府数据

2.敞开心灵

等待数据分析结果的另一种可能方式是知识提升。你可以尝试用不同的方式提高你的技能和知识,比如参加网络研讨会、在线课程等等。

2.1 学习

你可以通过学习来投资你的时间。例如,你可以买一本你不知道的主题的书,然后开始学习。或者,你可以参加一个在线课程,比如那些由 CourseraDatacamp 提议的课程。

就我个人而言,我建议你参加在线课程,这可以很快提高你的技能。我也建议你参加网上研讨会和会议,这可能会打破界限。

2.2 阅读

你可以通过阅读文章、博客和类似的东西来扩展你的知识,让自己跟上时代。例如,您可以在 Twitter 上关注数据科学影响者,阅读他们提出的文章和主题。

以下是一些在数据科学领域非常受欢迎的影响者,你可以在 Twitter 上关注他们:

和许多其他人。

2.3 做练习

你可以通过锻炼来保持健康,或者通过参加网络上发起的挑战。事实上,许多网站建议每月或每周练习,这可能有助于你保持最新的。

以下是一些提出挑战和练习的网站:

  • kaggle —一个提出数据科学竞赛的平台。
  • storytellingwithdata —这个网站提供许多资源和挑战,帮助您提高从数据中构建故事的技能。

2.4 写作

知识不仅包括你自己,也包括其他人。出于这个原因,你可以打开你的思维,开始写。例如,你可以开一个博客,作为作者开始写作。你可以写任何你想写的东西。

另一个选择是开通一个 Youtube 频道,向他人传播你的知识。

写作总是涉及到学习,因为如果你想把一件事解释清楚,你必须非常了解它。

摘要

在本文中,我提出了一些利用等待代码结果的时间的策略:

  • 专注于你的项目
  • 打开你的思维。

我个人建议,首先专注于你的项目,然后打开你的思维。

我提出的只是一个建议,如有意见请回复本文:)你怎么看?

如果你想了解我的研究和其他活动的最新情况,你可以在 TwitterYoutubeGithub 上关注我。

相关文章

https://alod83.medium.com/how-to-design-a-data-journalism-story-b2e421673b6e

如何用 Python 将数据集分割成训练集和测试集

原文:https://towardsdatascience.com/how-to-split-a-dataset-into-training-and-testing-sets-b146b1649830?source=collection_archive---------1-----------------------

探索从建模数据集创建训练和测试样本的三种方法

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

照片由 Siora 摄影Unsplash 上拍摄

在机器学习的背景下,将我们的建模数据集分成训练和测试样本可能是我们需要进行的最早的预处理步骤之一。为训练和测试创建不同的样本有助于我们评估模型性能。

在本文中,我们将在建模和模型训练的上下文中讨论训练和测试样本的目的。另外。我们将探索使用 Python 和 pandas 创建此类样本的三种简单方法。更具体地说,我们将展示如何创建训练和测试样本:

  • 使用scikit-learn(又名sklearn ) train_test_split()
  • 使用numpyrandn()功能
  • 或者用内置的pandas方法称为sample()

为什么我们需要训练和测试样本

训练模型时一个非常常见的问题是过度拟合。当一个模型在我们用来训练它的数据上表现很好,但它不能很好地推广到新的、看不见的数据点时,就会出现这种现象。发生这种情况的原因有很多,可能是由于数据中的噪声,也可能是模型学会了预测特定的输入,而不是帮助它做出正确预测的预测参数。通常,模型越复杂,过度拟合的可能性就越大。

另一方面,欠拟合发生在模型表现不佳时,即使是在用于训练它的数据上。在大多数情况下,出现拟合不足是因为模型不适合您试图解决的问题。通常,这意味着模型没有学习那些可以被证明是可预测的参数所需的复杂。

为训练和测试模型创建不同的数据样本是可以用来识别这类问题的最常见的方法。通过这种方式,我们可以使用训练集来训练我们的模型,然后将测试集视为数据点的集合,这将帮助我们评估模型是否可以很好地推广到新的、未知的数据。

将建模数据集分为训练集和测试集的最简单方法是将 2/3 的数据点分配给前者,将剩余的三分之一分配给后者。因此,我们使用训练集训练模型,然后将模型应用于测试集。这样,我们可以评估我们的模型的性能。例如,如果训练精度非常高,而测试精度很差,那么这是模型可能过度拟合的良好指示。

请注意,将数据集分成训练集和测试集并不是避免过度拟合等现象所需的唯一操作。例如,如果训练集和测试集都包含现实世界数据中不存在的模式,那么模型的性能仍然会很差,即使我们无法从性能评估中观察到它。

第二点,你应该意识到在某些情况下你应该考虑创建一个额外的集合叫做验证集合。当除了模型性能之外,我们还需要在许多模型中进行选择并评估哪个模型性能更好时,通常需要验证集。

如何将数据集分成训练集和测试集

在这一节中,我们将探索创建训练集和测试集的三种不同方法。在开始这些方法之前,让我们创建一个虚拟数据集,用于演示目的。在下面的例子中,我们将假设我们有一个数据集作为 pandas 数据帧存储在内存中。虹膜数据集包含 150 个数据点,每个数据点有四个特征。

在下面的例子中,我们将假设我们需要 80:20 的训练:测试集比率。

使用熊猫

第一种选择是使用 pandas DataFrames 的方法[sample()](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sample.html):

从一个对象轴中返回一个随机的项目样本。

您可以使用 random_state 来获得再现性

我们最初通过从 pandas 数据帧的所有行中抽取分数为 0.8 的样本来创建训练集。注意,我们还定义了与种子相对应的random_state,这样结果是可重复的。随后,我们通过简单地从现在包含在训练集中的原始数据帧中删除相应的索引来创建测试集。

正如我们所看到的,训练集包含 120 个示例,这与我们在对原始建模数据帧进行采样时所要求的分数一致。剩余的 30 个例子被打包到测试集中。

使用 scikit-learn

第二种选择——也可能是最常用的——是使用sklearn的方法[train_test_split()](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html):

将阵列或矩阵拆分为随机训练和测试子集

我们可以通过将建模数据帧以及应该包括在测试集中的部分示例传递给train_test_split(),在一行中创建训练集和测试集。如前所述,我们还设置了一个random_state,以便结果是可再现的,也就是说,每次我们运行代码时,相同的实例将分别包括在训练集和测试集中。方法会传回包含两个资料框的 tuple,其中包含训练和测试范例。

使用 numpy

最后,一种不太常用的创建测试和训练样本的方法是使用numpy的方法[randn()](https://numpy.org/doc/stable/reference/random/generated/numpy.random.randn.html):

从“标准正态”分布返回一个或多个样本。

我们首先创建mask,这是一个 numpy 数组,其中包含通过比较介于 0 和 1 之间的随机浮点数字与我们希望为训练集保留的分数计算的布尔值。随后,我们通过相应地过滤 DataFrame 来创建训练和测试样本。但是,请注意,这种方法将近似为给出 80:20 的比率,这意味着训练和测试样本中包含的示例数量不一定像本文前面讨论的两种方法那样准确。

下一步是什么?

现在,您已经从原始建模数据集创建了训练和测试集,您可能还需要执行进一步的预处理步骤,如缩放或归一化。这样做时必须小心,因为您需要避免将未来的信息引入到培训集中。这意味着某些动作需要首先应用于训练集,然后使用从该步骤中学习的参数,以便也将它们应用于测试集。有关此主题的更全面解释,请阅读下面的文章。

结论

在本文中,我们探讨了将初始建模数据集分成训练和测试样本的重要性。此外,我们讨论了这些集合如何帮助我们识别我们的模型是过拟合还是欠拟合。最后,我们已经看到了如何用 Python 和 pandas 以三种不同的方式实现这种分离;使用pandas.sample()sklearn.traing_test_split()numpy.randn()

如何将 Tensorflow 数据集拆分为训练集、验证集和测试集

原文:https://towardsdatascience.com/how-to-split-a-tensorflow-dataset-into-train-validation-and-test-sets-526c8dd29438?source=collection_archive---------5-----------------------

为什么以及何时需要训练、验证和测试分割,以及如何使用 Python 从 tf.data.Dataset 构建分割

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

图片来自 Pixabay

为什么以及什么时候我们需要训练、验证和测试分割?

开发机器学习模型时最大的挑战之一是防止它过度拟合数据集。当模型学习到在用于训练的数据上表现良好的权重组合,但当模型被给予它从未见过的图像时却不能推广时,困难就出现了。这就是所谓的过拟合

当实现一个将在现实世界中部署的模型时,我们可能希望对它投入生产后的行为有一个估计。这就是测试集发挥作用的地方,它是原始数据集的随机分区,旨在表示不用于训练的数据,以便我们可以估计我们的模型在看不见的数据下会如何表现。

此外,当我们计划对模型的不同配置进行实验时,第三个集合是有用的,例如备选架构、优化器或损失函数,也称为超参数调整。为了比较这些实验的性能,可以从原始数据集中提取另一个随机分割,该随机分割既不用于训练也不用于测试,而是用于在不同配置中验证我们的模型。这被称为验证集

现在,你可能想知道,但是验证和测试集的目的是一样的,对吗?的确,这两个数据集都用来评估我们的模型在没有用于训练的数据上的表现。然而,当尝试不同的模型配置以获得最佳验证度量时,我们在某种程度上使我们的模型适合验证集,选择在该集上具有最佳性能的参数组合。

一旦我们运行了我们的超参数调整,并且有了表现最好的模型,测试集允许我们了解这个模型在生产中的表现如何。因此,它应该只在项目结束时使用。

我应该使用哪种分割尺寸?

根据我们数据集的大小,可以使用不同的分割大小,同时考虑更适合当前可用数据但具有不太现实的指标(大训练分割大小)的模型或减少用于训练的数据量但具有更接近真实世界性能的验证和测试指标之间的权衡。

对于训练集、验证集和测试集,一个流行的划分是 80%、10%和 10%。

TensorFlow 实现

Tensorflow 2.0 中使用 Keras 时,我个人推荐使用 tf.data API ,它提供了构建复杂输入管道的抽象。例如,它允许从分布式文件系统中加载数据,使用有效的转换来映射数据,并将结果合并到批处理中进行训练。

但是,tf.data 不提供将 tf.data.Dataset 拆分为上述三个分区的直接调用。为此,我为您带来了一个简单的代码片段,它利用了 API 提供的 take 和 skip 方法。

该方法需要数据集的大小,因为数据集可以动态加载(例如,使用 CSV 数据)并且大小未知。如果数据是从静态源(比如 NumPy)加载的,那么可以使用’ TF . data . experimental . cardinality(dataset)'来检索数据集的大小。

另外,请注意,在创建拆分之前,可以为该方法提供一个标志来打乱原始数据集。在大多数情况下,强烈建议这样做,以获得更现实的验证和测试指标。指定了洗牌的种子,以便我们可以运行相同的方法,并且分割保持不变(这对可靠的结果非常重要)。

熊猫实施

作为使用 TensorFlow 数据 API 的替代方法,这里有另一种对存储在 Pandas DataFrame 中的数据集进行分区的方法,在分割之前对整个数据集进行洗牌。这三个部门可以根据需要用于培训。

另一个流行的选择是从 scikit-learn 中调用两次train_test_split 方法(一次用于 train-test split,另一次用于 test-val split),但是我更愿意为您提供一个更本地的解决方案。

最后的话

在本文中,我们不仅探讨了如何将 Tensorflow 数据集划分为训练、验证和测试分区,还探讨了为什么这在任何机器学习项目中都很重要,以及每个分区的用途。

如果你想发现更多像这样的帖子,你可以在下面找到我:

如何将数据分成三组(训练、验证和测试),为什么?

原文:https://towardsdatascience.com/how-to-split-data-into-three-sets-train-validation-and-test-and-why-e50d22d3e54c?source=collection_archive---------0-----------------------

Sklearn 火车测试拆分不够。我们需要更好、更快的东西

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

内森·杜姆劳Unsplash 拍摄的照片

介绍

为什么需要拆分数据?

您不希望您的模型过度学习训练数据,并在部署到生产中后表现不佳。你需要有一个机制来评估你的模型推广的有多好。因此,您需要将输入数据分成训练、验证和测试子集,以防止模型过度拟合,并有效地评估模型。

在这篇文章中,我们将涉及以下内容。

  1. 培训、验证和测试数据集的简要定义
  2. 准备好使用代码来创建这些数据集(2 种方法)
  3. 了解数据集分割率背后的科学原理

训练有效测试分割的定义

训练有效测试分割是一种评估机器学习模型性能的技术,无论是分类还是回归。你把一个给定的数据集分成三个子集。下面是对每个数据集的作用的简要描述。

训练数据集

  • 用于学习(由模型)的数据集,即,使参数适合机器学习模型

有效数据集

  • 调整模型超参数时,用于对符合训练数据集的模型进行无偏评估的数据集。
  • 也在其他形式的模型准备中发挥作用,如特征选择、阈值截止选择。

测试数据集

  • 一组数据,用于对符合训练数据集的最终模型进行无偏评估。

如果你想了解更多关于机器学习专家如何定义训练、测试和验证数据集的信息,请阅读 Jason Brownlee 的这篇文章。#1 下面参考资料部分的链接

准备使用代码片段

在本帖中,我们将看到将数据分为训练、有效和测试集的两种方法

  1. 随机分裂
  2. 使用时间分量进行分割

1.随机分裂

您无法使用用于训练的相同数据来评估模型的预测性能。如果你用模型之前没有见过的新数据来评估模型,那是最好的。随机分割数据是该无偏评估最常用的方法。

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

将输入数据随机分为训练集、有效集和测试集。作者图片

一、使用 sk learn→‘train _ test _ split’

在下面的代码片段中,您将学习如何使用两次train_test_split来创建我们期望比例的 train | valid | test 数据集。

二世。使用 Fast _ ml →’ train _ valid _ test _ split ’

在下面的代码片段中,您将学习如何使用train_valid_test_split在一行代码中创建我们期望比例的 train | valid | test 数据集。

2)使用时间分量进行分割

你可以听听杰瑞米·霍华德关于机器学习的 fast.ai 讲座:程序员机器学习入门。在第 3 课中,他谈到了*“什么是好的验证集,我们利用这个讨论来为这个新数据选择一个验证集。”#2*

他举了一个例子,“假设您正在构建一个模型来预测下个月的销售额。如果你无法知道你建立的模型是否能够提前一个月预测销量,那么你也无法知道当你将一个模型投入生产时,它是否会变得更好。”#3

每当数据集包含日期变量,并且我们希望预测未来的事情时,使用时态变量是拆分数据集的一种更可靠的方法。因此,我们必须使用最新的样本来创建验证和测试数据集。主要思想是始终选择一个样本子集,忠实地代表我们的模型随后将接收到的数据(无论我们面对的是现实世界的问题还是 Kaggle 竞争)。

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

对数据进行排序后,训练有效的测试数据集。作者图片

一、自定义代码

在下面的代码片段中,您将学习如何编写自定义代码,以便在对数据进行排序后,创建符合我们期望比例的 train | valid | test 数据集。稍加修改后,您可以直接使用这段代码。

二世。使用 Fast _ ml →’ train _ valid _ test _ split ’

在下面的代码片段中,您将学习如何在对数据进行排序后,使用train_valid_test_split来创建我们期望比例的 train | valid | test 数据集。所有这些都在一行代码中完成。

数据集分割率背后的科学

经常有人问,将数据集分成训练集、验证集和测试集的比例是多少?

这个决定主要取决于两件事。首先是数据中的样本总数,其次是您正在训练的实际模型。

  • 有些模型需要大量的数据来进行训练,因此在这种情况下,您可以针对更广泛的训练集进行优化。
  • 具有很少超参数的模型将易于验证和调整,因此您可以减少验证集的大小。
  • 但是,如果您的模型有许多超参数,您也会希望有一个重要的验证集。
  • 如果您碰巧有一个没有超参数或者不容易调整的模型,您可能也不需要验证集。

参考文献

1https://machine learning mastery . com/difference-test-validation-datasets/# 2https://www.fast.ai/2018/09/26/ml-launch/

3https://www.youtube.com/watch?v=YSFG_W8JxBo

感谢阅读!!

笔记本可在以下位置获得,并附有完整的功能代码:

https://www.kaggle.com/nextbigwhat/train-valid-test-split-instead-of-train-test-split

2021 年成为伟大数据科学家的 5 种方法

原文:https://towardsdatascience.com/how-to-stand-out-as-a-great-data-scientist-in-2021-3b7a732114a9?source=collection_archive---------34-----------------------

帮助您脱颖而出并从经验丰富的数据科学领导者那里获得聘用的技巧

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

被录用!(图片由真诚媒体Unsplash 上拍摄)

介绍

由于许多原因,数据科学是一个极具吸引力的职业,因此竞争可能会很激烈。下面一些让优秀候选人脱颖而出的建议可能会让你大吃一惊!

我为各种各样的读者写了这篇文章:

  • 你可能刚刚开始尝试你的第一个角色
  • 你可能在一个无关紧要的技术领域,想要做出改变
  • 或者,你可能已经是一名经验丰富的数据科学家,希望提高自己的技能。

为什么这么难?

这是我在用户组和社区活动中经常遇到的问题,针对的是有抱负的或职业生涯早期的数据专业人士。这是一个竞争激烈的领域,进入门槛正在发生变化——不再像我开始时那样需要博士学位。随着竞争的加剧,全力以赴的技术能力变得更难让你脱颖而出。

为什么要听我的?

我经历过——在桌子的两边!我是一名经验丰富的数据科学家,在科技初创公司中,我经历了高级职位和团队领导职位,一直到总监级别的职位。

在我的职业生涯中,我进步很快,我相信下面概述的几点对此有很大的贡献。

在更高级的职位上,我已经面试并雇佣了几十个候选人——从才华横溢、沉默寡言的专业人士到古怪而出色的人(有时间问问我关于滑板吸血鬼的事情)。我面试过各种各样的角色,包括:

  • 数据科学家
  • 机器学习工程师
  • 数据工程师
  • 分析员
  • BI 开发人员
  • DevOps 工程师、CRM 顾问、项目经理…

在所有这些经历中,有一些关键的主题和技能非常突出(剧透:它们大多是非技术性的技能)。我将在下面分享我对它们的看法,并尝试给出一些如何改进它们的建议。

技术

现在开始,我不打算讨论你应该知道什么算法,你应该阅读什么统计学书籍,或者你应该选择哪个机器学习堆栈。外面有很多课程,其中很多是免费的,这会给你在这个领域打下良好的基础。我在博士期间通过像这种的免费资源学习,但是有很多方法可以获得正确的体验。

宽广还是深邃?

做多面手好还是做专家好?这不是数据科学特有的问题,而是适用于许多技术角色的问题。这个问题也没有明确的答案,这真的取决于你想在什么样的组织中工作。如果你的梦想是在一个专注于一件事的知名技术团队或研究小组中获得一个角色,那么学习机器学习模型的每一种风格都不会像真正深入探索那个利基一样有效。这个领域太大了,不可能成为所有领域的专家(即使是跟上某个领域的研究也已经足够困难了)。

然而,如果你想成为一个组织进入数据科学的第一步,或者你想在一家羽翼未丰的初创公司工作,那么拥有广阔的视野通常是最好的。了解整个行业的工具和技术将使您能够解决更广泛的问题,并更容易知道如何在需求和要求发生变化时从数据中发掘价值。

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

优秀的候选人通常都有 T 型经验——广泛的知识和对领域的熟悉,以及他们真正闪光的专业(图片由作者提供)。

脱颖而出的候选人往往是 T 型的。他们对更广泛的领域有很好的理解,但只专注于一件事。对你的职业生涯来说,这通常也是一种更有回报的方式!它让你专注于你喜欢的一件事,并真正突出你的优势,同时仍然能够投入到其他类型的项目中。

小贴士# 1——在你的专业技能上呈 T 型可以让你集中精力展示你的专业技能,但仍然有助于一个充满活力的团队处理各种各样的任务。

展示你的弱点

人们通常认为你必须知道一切并表现出来——尤其是在面试的时候。事实并非如此,那些尝试过的人往往面试得很糟糕。当候选人直截了当地告诉我他们不知道一些事情时,我真的感到如释重负——这会建立信任和融洽。

数据科学是一个庞大而复杂的领域。没有人是这方面的专家。如果你不喜欢统计,那就敞开心扉。

像许多人一样,你可能是一个自学成才的程序员,在这种情况下,不要在编码测试中磕磕绊绊地背诵考试答案,而不是真正理解为什么。

如果你得到了这份工作,仅仅是在面试时假装成功就能让你在最初的几个月里感到不舒服。

秘诀 2——诚实面对你的弱点和你不知道的事情。当有人在虚张声势时,通常很容易辨别出来,而你真的不想最终担任一个不允许你表现出色的角色。

软件工程

申请数据科学职位的绝大多数人都花了所有的时间学习机器学习、统计、编码,也许还有一些可视化技能。当你开始催促他们关于设计模式或者软件开发方法的时候,他们会完全不知所措。

在 Jupyter 笔记本上编写粗糙的小模型和构建可以轻松打包、测试和扩展到生产中的强大机器学习工作流之间有很大的区别。

花些时间学习软件工程的基础知识。即使你不需要经常使用它,你也会在整个职业生涯中与软件工程师打交道。他们为早期职业数据科学家遇到的许多问题设计了解决方案,因此要向他们学习。此外,如果你受雇于一家公司的技术部门,你的部门主管或首席技术官很有可能原本是一名软件工程师——会说他们的语言对你有好处。

开始学习可能会很困难,但是开始学习以下两本书的主题是不会错的:

https://amzn.to/39TdfxD https://amzn.to/3jpDE9s

技巧 3——学习软件工程的基础知识。这将使您的工作更容易,您的代码更健壮,并允许您更好地与组织的其他部分联系起来。

运行正常的

对于大多数组织来说,如果最全面、最先进的模型只能由数据科学家来运行,它们就毫无价值。很多数据科学团队和机器学习项目失败是因为他们无法超越探索阶段。

你不需要成为容器和流程编排方面的专家(除非你想成为一名 ML 工程师),但是将你的模型转化为价值是这个角色的关键部分。我几乎总是问这个问题:

你将如何把你的模型交到一个非技术用户的手中?

在我见过的最好的一次面试中,候选人向我展示了他们准备的一些代码和一个非常简单的 web 应用程序,其中包含了这个模型。我马上就能玩它,并围绕他们做了什么提出问题。

如果您想开始使用 MLOps,我在这里写了一个简短的系列文章,带您浏览一个端到端的示例:

技巧 4——了解将您的工作部署到生产环境中的方法和工具。了解基本的 MLOps 将表明你理解模型开发只是工作的一小部分。

证明它

有时候,甚至去面试都很困难。这与上一篇技巧文章中给出的例子非常吻合。在你的申请中,没有比证明你已经做过这类工作更有力的了。

如果我在浏览简历时偶然发现一份带有 GitHub 链接的简历,我会一直查看它,并且通常会投入比我分配给那个人的时间更多的时间。它甚至不需要完全是原创的项目,更重要的是看你如何解决问题。如果你刚刚开始,没有大量的作业,把你的课程作业放上去,写一篇关于你是如何完成的评论。这将有助于你在面试开始前引导面试,因为你的面试官几乎肯定会问这个问题。

还有很多其他途径来展示你的作品。可以考虑边学边写博客(Medium 超级容易上手)。不要害怕通过 YouTube 或者在聚会和活动中出现在人们面前——这也将有助于提高一些重要的软技能。

你不一定要成为专家才能为人们的学习做出贡献。如果你对此不确定或者不知道从哪里开始,我强烈推荐阅读奥斯汀·克莱恩的一些作品,比如这篇文章:

https://medium.com/low-pass-filter/show-your-work-39e6466c4273

或者这本伟大的书更详细地探讨了这个问题:

https://amzn.to/39WKPTp

技巧 5——展示你所知道的。在 GitHub 上做项目,在博客上谈论你学到的一些东西,演讲和活动或者活跃的 YouTube 频道会让你鹤立鸡群。

结论

今天,我试图分享什么样的技能,至少对我来说,能让一名优秀的数据科学候选人脱颖而出。如果所有这些对你来说都是新的或令人生畏的,选择一个,从小处着手。如果你开始写博客,并一边写一边加入 GitHub,你将开始提高你的技能并获得自信。

很难找到适合你的角色。许多人会喜欢一个更全面的候选人,可以在整个组织中交流。仅仅知道最多的算法或最新的工具并不是让你在求职中脱颖而出的最佳方式。

希望这些建议能让你得到工作。如果您有任何反馈,我将非常感谢您的来信。如果你也是这个领域的招聘经理,我很想知道你的想法。

进一步阅读

下面是其他可能有帮助的资源列表。如果上面提到的书有点沉重,那么由 Ahmed Besbes 撰写的这篇关于软件工程的文章是一个很好的开端:

https://medium.com/swlh/software-engineering-tips-and-best-practices-for-data-science-5d85dbcf87fd

这是 Vincent Tatan 对最近 MLOps 思想的一个很好的介绍和概述:

免责声明:这篇文章确实包含附属链接。

如何作为一名有抱负的数据科学家脱颖而出

原文:https://towardsdatascience.com/how-to-stand-out-from-the-crowd-as-an-aspiring-data-scientist-a7fe446421bc?source=collection_archive---------23-----------------------

给有抱负的数据科学家的改变游戏规则的职业建议

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

图片来源: Skye Studios @ Unsplash

近年来,数据科学一直是应届毕业生和年轻人才最青睐的工作之一。尽管对数据科学家的需求仍在激增,至少在欧洲和北美的就业市场上,但在过去几年里,对于有抱负的数据科学家来说,找到入门级工作变得越来越难。

一个原因可能是,在一个新的就业市场中成为一名合格的候选人自然具有挑战性。随着数据科学在人才中越来越受欢迎,以及雇主推动的所需技术技能的膨胀,在过去几年中,数据科学就业市场对候选人的竞争越来越激烈,尤其是对应届毕业生。然而,有抱负的数据科学家面临越来越多的困难,因为许多雇主正在将注意力转向更高级的候选人或来自数据工程和云计算等其他领域的候选人。

在本文中,我们将讨论有抱负的数据科学家如何脱颖而出,吸引雇主的注意力,并获得聘用:

  1. 获得最低水平的技术技能以赶上市场趋势

在当今不断变化的技术领域,获取新的技术技能不仅对有抱负的数据科学家来说是必要的,对有经验的数据专业人员来说也是必要的。技术来来去去,新工具在几个月内就变得流行起来。这转化为雇主在发布的工作中的动态和不断变化的工作要求。因此,如果简历中没有丰富的技术技能,有抱负的数据科学家就无法进入就业市场。虽然学习如此多的新技术可能是一项非常耗时的任务,但有抱负的数据科学家可以采用敏捷和快速学习的心态来获得最低要求的技术技能,以使他们进入工作岗位,并帮助他们在工作中进一步发展。

2。用突出的方式写你的简历

写一份能脱颖而出的简历,仍然是有抱负的数据科学家无法脱颖而出的最容易被忽视的原因之一。这主要是因为缺乏必要的反馈和对实际工作的理解。简历是初步筛选面试的入口,尤其是由人力资源专业人员或申请人跟踪软件(ATS)审查。写一份能给人力资源专家和招聘人员留下良好第一印象的简历是求职成功的关键。此外,现在的雇主大多使用 ATS 对收到的求职简历进行排名。因此,拥有一份可读的简历,容易被机器解析,并且以比其他候选人排名更高的方式撰写,是获得许多数据科学工作面试的另一个关键因素。

3。制定可靠的网络战略

在数据科学就业市场中,网络的重要性不容忽视。大多数候选人已经感觉到,申请著名工作论坛上发布的工作不再是找到数据科学工作的最终解决方案。然而,大多数候选人没有做任何事情来提升自己的水平,让自己被介绍给那些能让自己更接近被录用的人。候选人必须努力避免迷失在标准的招聘流程中,因为在他们之前有数百名候选人,他们必须在招聘公司内部找到更深层次的关系。这样做的一些方法可以是(a)直接与招聘经理建立关系网,(b)与拥有强大员工推荐计划的公司的员工会面,©与内部或外部招聘人员建立关系网,他们可以把你介绍给招聘经理。在这里,人际关系网中使用的目标或方法不如定期会见新专业人士的一致性重要。因此,有抱负的数据科学家必须走出他们的外壳,与人们谈论他们的抱负,并寻求他们对改善职业地位的建议。

4。在目标市场中建立信任和信誉

信任是每个招聘决定中最重要的因素之一。我们需要记住,每次招聘经理做出招聘决定时,他们所经历的思考过程与我们的购买决定非常相似。当我们购买昂贵的产品或服务时,我们希望确保它是高质量的,有效的,可靠的,简而言之,物有所值。有抱负的数据科学家可以通过建立足够的可信度和信任来实现这一目标。做到这一点的一个有效方法是展示以前的雇主,不管是长期的还是临时的,在雇佣你作为数据科学家时所拥有的经验。为了解决这给应届毕业生带来的先有鸡还是先有蛋的问题,我们建议有抱负的数据科学家在职业生涯开始时认真对待实习和临时工作,并专注于获得对这些工作的积极反馈。候选人不应该等太久才得到他们梦想中的工作,而是应该抓住每一个机会为就业市场建立概念证明来完成工作。通过这种方式,有抱负的数据科学家最终可以让雇主非常容易地做出招聘决定,从而雇佣他们从事他们梦想的工作。

5。在你的面试管道中加入大量公司

同样重要的是要注意,尽管采用了前面提到的所有方法,但不是每个雇主都会觉得你适合他们,反之亦然。找工作永远是一场数字游戏,候选人必须总是积极主动地计划如何填补他们的面试渠道,并保持他们的选择余地。通过保持面试渠道畅通,有抱负的数据科学家不仅可以增加尽快获得理想工作的机会,还可以建立关系,在未来的职业生涯中为他们提供帮助。

更多文章来自作者:

</8-career-paths-for-junior-data-scientists-to-pursue-3e6041950e4e> https://medium.com/geekculture/working-as-a-data-engineer-1f53b04aff83 [## 作为数据工程师工作

medium.com](https://medium.com/geekculture/working-as-a-data-engineer-1f53b04aff83)

关于作者:

Pouyan R. Fard 是 Fard 咨询公司的首席执行官兼首席数据科学家。Pouyan 在数据科学、人工智能和营销分析方面拥有多年的公司咨询经验,从初创公司到全球公司。他曾与制药、汽车、航空、运输、金融、保险、人力资源和销售等行业的财富 500 强公司合作。

Pouyan 也在指导活跃在大数据行业的初创公司和人才。他的热情是通过职业培训培养下一代数据科学家,并帮助他们找到数据科学领域的顶级工作机会。

Pouyan 已经完成了关于消费者决策预测建模的博士研究工作,并对开发机器学习和人工智能领域的最先进解决方案保持兴趣。

如何从艺术开始数据分析师的职业生涯,为什么

原文:https://towardsdatascience.com/how-to-start-a-career-as-a-data-analyst-from-a-background-in-the-arts-and-why-913b3ac6710d?source=collection_archive---------11-----------------------

你拥有的 STEM 毕业生可能没有的东西,以及“大数据”必须从艺术中获得的东西

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

亚当·威尔森在 Unsplash 上拍摄的照片

当工科学生称自己为工程师时,难道不令人讨厌吗?他们太超前了。这不像你听到医学生自称医生或艺术生自称咖啡师!

一个关于艺术学位的笑话是这样说的,这是一条为懒惰或愚笨的人提供的简单的教育途径,充满了乐趣,却不会有任何结果。

对我这个法语毕业生来说,这是一份分析职业,我发现这份职业很有价值,非常适合我在大学期间获得的能力。这与许多人没有明显的联系,但我想鼓励世界上更多的人这样做。

我已经在这个领域工作了十多年,经历了从没有特定培训的起点发展专业技能的过程,以及在伦敦和悉尼的机构、初创企业和大公司中实践分析的过程。

在过去的三年里,我一直在为我的公司雇主招聘分析师,并能够挑战候选人必须拥有 STEM 学科学位的规范,我自己的经验证明,商业分析充分利用了在人文学科研究中获得的能力(我更喜欢“人文学科”而不是“艺术”,但我在这里可以互换使用)。

在这篇文章中,我将试图解释这些能力是什么,它们如何适应分析,以及对于那些考虑从事非 STEM 背景的分析职业的人来说,从哪里开始。我希望激励有正确倾向的毕业生去尝试,说服招聘经理更开放地考虑他们考虑的简历,并在拉近人文科学和科学之间的距离方面发挥作用。

什么是“数据分析师”?

首先,我这里所说的数据分析师是指什么?一个人如何利用他们的时间?

我可以说,现在的分析世界由三个核心学科组成,通常分为“数据分析师”、“数据工程师”和“数据科学家”三个标签。简而言之,数据分析师探索数据以获得可用于业务决策的见解,数据工程师管理收集、存储和访问“大”数据所需的计算工具,数据科学家构建可用于业务预测、个性化建议等的软件。

我不会在这里更详细地描述其他两个学科,我只想说,它们是专业的、技术性很强的角色,可能不适合通才毕业生(尽管在入门级别的时候,界限往往很模糊)。但要了解这三个学科之间的更多区别,这里的是一篇比较每个角色的招聘广告的好文章。

另一方面,数据分析师的角色更容易获得,因为相对简单的技术知识的新手可以通过其他才能为组织带来价值,例如良好的沟通或洞察力。我们可以把这个角色比作一个记者揭露一个故事,建立一个证据体系来证明一个假设,并通过使用有说服力的故事来吸引他们的读者。对于数据分析师来说,证据通常基于数字数据,由数据可视化引导的故事讲述,但潜在的追求和思维模式是相似的。(关于用数据讲故事的经典例子,请看汉斯·罗斯林的 TED 演讲)。

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

卡斯帕·卡米尔·鲁宾在 Unsplash 上的照片

隐藏在数据中的故事可能是对某种产品的需求激增,这种需求可能与某些情况有关(如雨天的食品配送),或者是某种产品对某些类型的受众的特殊吸引力(如自行车社区的咖啡)。在这些情况下,分析师可以帮助做出的商业决策可能是增加下次我们预期的此类事件的资源,或者向这些社区投放广告。

用于数据分析的工具通常包括电子表格(如 Excel、Google Sheets)、数据可视化工具(如 Tableau、Google Data Studio)和 SQL 代码。在本文的后面,您可以找到更多关于如何开始使用这些工具的信息。Python 和 R 在与职位相关的方面也被大量引用,对于统计分析和从互联网上导入公开可用的数据尤其有用,尽管我认为它们在招聘广告中很流行,但它们一开始并不重要,甚至在高层也是不错的选择。

在典型的一周中,经验丰富的数据分析师可能会:

  • 与组织中的决策者会面,讨论他们的问题(例如是什么让我上一次的营销活动如此成功?人们不与我们重复购买的原因是什么?)并咨询使用可用数据回答这些问题的方法。
  • 使用上述任何工具浏览和清理数据集。“清理”是将杂乱的数据排列起来的过程,这通常是分析数据集所花费的最长时间。(举一个简单的例子,显示客户性别的数据列可能混合了“F”、“female”和“Female ”,它们都表示相同的东西,但就数据而言是不同的。为了清理这个,我们可以把所有这些都转换成 F。)
  • 花时间做研究,了解他们正在处理的数据是如何收集的。例如,在一个营销结果数据集中,收入按推动购买的渠道细分,我们如何准确地将购买归因于社交媒体广告、电子邮件简讯等?如果客户在选择购买之前看到了来自多个渠道的多个广告,该怎么办?
  • 设计实验来测试假设。
  • 使用视觉故事向决策者展示调查结果,并根据洞察提出行动建议。

随着分析师加深他们的技术能力,积累领域知识,他们分析的潜在复杂性将会增加,但是**如果他们的观众不能理解他们或者看不到‘那又怎样?’的话,这些都不会有效所有分析的背后。**正是在这种情况下,只见树木不见森林的能力和有说服力的沟通变得至关重要。这是一个让许多技术出众的人绊倒的障碍,也是一个人文学科毕业生可能会发现自己拥有优势的关键领域。

他们还能带来什么?

人文学科给数据分析带来了什么?

2020 年,在澳大利亚政府停止资助高等教育中的人文学科后,澳大利亚卫报向人文学科毕业生征集意见,询问他们的学位如何让他们适应工作。

你认为评论中的核心主题是什么?你能猜出哪个包含人文价值的两个词在所有评论中出现得最多吗(准确地说,在 484 条评论中出现了 90 次)?

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

照片由 GiammarcoUnsplash 上拍摄

在我们找到答案之前,这里有一条评论,举例说明了读者反映的主题:

这个学位给了我独立思考的工具,让我对别人告诉我的一切提出质疑,并得出自己对真实情况的结论[……]交流技能,能够清晰、清晰、有说服力地写作,一直被雇主视为招聘新员工的最重要的品质之一。然而,奇怪的是,他们似乎没有把他们所寻求的技能和艺术毕业生联系起来。[Bizkit]

这里有一条来自一位在数字领域工作的评论者,我们倾向于将它与 STEM 背景联系起来:

我主修英语和古典文学。我职业生涯的大部分时间都在从事基金管理。我为主要的上市公司和私人公司管理过两家公司,并与澳大利亚一家领先的基金经理共事了十多年。我的批判性评估技能弥补了我缺乏会计培训的不足。艺术学位教你如何学习和批判性思考——更多的人应该尝试。【mgan ci23】

这就是:“批判性思考”。在一个面对大量信息和不确定事实的世界里,我们如何知道该相信什么,如何做出决定?

该术语及其变体在 484 条顶级评论中出现了 90 次,其他评论中的许多讨论也借鉴了相同的观点。除了“艺术学位”和“人文学位”这两个词,这是遥遥领先的顶级二元词(两个词的组合),在所有单个词频的统计中(这对挑选关键主题不太有用),关于“思考”的变体排名非常高。如果你想看的话,这里是数据集。

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

作者图片

那么,为什么“批判性思维”是人文学科的标志,它真的不是 STEM 教育的一部分吗?

我想象会有 STEM 毕业生准备坚定地捍卫他们在学习或其他方面获得的批判性思维能力,但我认为有足够的证据表明,STEM 广泛教授的方式存在一些不足。目前,社会科学领域正在上演一场被广泛讨论的复制危机,这让人们对科学家得出结论的基本方法产生了怀疑,似乎部分科学界已经习惯于使用统计工具,但他们并不完全理解这些工具。大卫·爱泼斯坦,对糟糕的科学研究持批评态度,他认为肤浅的思维是科学中的通病,这是从大学里学到的,他在他的书 Range 中声称:

像许多研究生一样,我有一个大数据库,按下电脑按钮运行一个普通的统计分析,从来没有人教我深入思考(或根本没有)统计分析是如何工作的。stat 程序给出了一个被普遍认为“具有统计学意义”的数字。不幸的是,这几乎肯定是一个假阳性,因为我不理解在我应用它的环境中统计测试的局限性。审查这项工作的科学家也没有[……]我在没有学会科学推理的情况下就一头扎进了极其专业的科学研究。(然后我也因此得到了奖励,硕士学位)。

很容易想象,在工程和计算机科学等学位中,学生们倾向于基于规则的思维,积累事物如何组合的知识,以及解决逻辑问题的灵活性——毫无疑问,这是宝贵的技能。但是,在人类决策的世界里,这些技能能在多大程度上帮助他们呢?在这个世界里,问题往往没有直接的答案,或者存在缺失的事实,或者得出结论的时间有严格的限制。

如何在不确定性中衡量证据,形成立场并解释这是人文学科的领域,随着 STEM 浪潮的兴起,也出现了来自人文学科的反压力,要求平衡。一个很好的焦点可以在 STEAM 运动中找到,该运动提倡在 STEM 教育中增加“艺术”的“A ”,以培养更多以人为中心的思维。

但是这和数据分析有什么关系呢?数据的使用基本上不就是一个数学问题吗?不,这也是在实践中对分析所需要的东西仍然存在巨大误解的地方。最大的误解是,数据告诉我们的是客观事实,这个行业从坚持这一点中受益。在现实中,数据的使用存在不确定性和主观性(参见 Jonathan Choi 的讨论,这是一个很好的起点),有足够的空间来歪曲数据,以人为地支持一个议程,如《T4》《谎言实地指南》* (也以标题武器化的谎言)和 称之为扯淡等书所强调的。大机构中有经验的分析师可能都非常熟悉用支持性数据来支持声明的要求,或许有机会质疑它,但没有足够的时间这么做。*

当谈到人文学科在数据分析中可能扮演的角色时,我们通常会跳到交流方面,但另一个关键的倾向是质疑数据将如何被使用的心态(导致‘那又怎样?’)以及同样重要的数据来源。计算机科学中有一句名言垃圾进垃圾出*,但是很少有分析师首先质疑数据的有效性,或者将数据的来源作为他们调查的主题。首先,数据收集的方式往往存在偏见或问题,这可能会改变我们对数据的解释,尽管这听起来可能很明显,但分析师往往无法严格检查他们的信息来源。*

批判性思维是一种很难教授的思维习惯。操纵数据的技术,无论是通过代码还是其他工具,都更容易。

为什么数据分析师职位的招聘广告要求 STEM 学位

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

照片由本工程 RAEngUnsplash 上拍摄

从我的第一份工作开始,我得到的每一份分析工作都要求有数学、计算机科学、统计学、经济学之类的学位,而我没有。但是这从来没有阻碍过。

在澳大利亚,上大学的风气似乎比在英国更注重职业培训,同事们对我的学位背景感到惊讶。当我在 LinkedIn 上建立新的联系时,我很好奇要检查他们的教育背景,我想不出我在澳大利亚遇到的任何一个分析师没有 STEM 或商业相关学位。在英国,雇主对本科生的学习领域没有那么严格的规定,这里的背景更为混杂。(奇怪的是,软件开发人员似乎来自更古怪的背景)。

我不怀疑 STEM 学位为工作提供了一些实用的工具,并为获得第一份工作提供了帮助,但我希望其他人知道,这些学位中的大多数并不直接让毕业生具备工作能力。没有人教数学家如何评估营销活动的表现。没有人教计算机科学家如何在企业中进行 A/B 测试。他们在工作中学会了这些东西,雇主们寻找那些学得快、教得愉快、并且在进入角色后能与每个人相处融洽的毕业生。

对于数据分析至关重要的技术技能可以在工作中相当快地学习到足够有用的标准,职业发展很快就开始专注于构建领域知识(即,你所在的行业如何运作,最新趋势是什么)和提高“软技能”,而大学学位没有涵盖任何相关的深度。这并不是说 STEM 与这一角色无关——科学方法和某些细节(如对统计学的理解)非常有用——但我的观点是,它不会直接让你为这份工作做好准备,人文学科中的一些品质也是有用的,但被低估了。最终,是一个适合有范围的人的角色。

它可能有助于求职者理解,招聘广告中需要 STEM 的主要原因是,它们充当过滤器,有助于减少招聘人员必须审查的申请数量。由于任何人都可以自由申请公开招聘的职位,大公司可能会收到数百份申请,根本不可能审查每一份,因此他们需要一种方法来最大限度地增加在时限内找到优秀候选人的机会。

为此,预先增加 STEM 学位的要求是假设 STEM 申请者比人文学科申请者更适合这个职位。申请人池的假定组成可能如下所示。(这些分布是假设的,其目的是帮助将招聘经理使用的决策启发概念化。它的目的不是洞察人才库的规模和形状。)

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

作者图片

条形图代表了人文学科和 STEM 毕业生在初级数据分析师职位上取得成功的可能性分布。

我们假设一般的 STEM 毕业生比一般的人文毕业生有更高的成功可能性,但是毕业生的适合性在每个组中都是不同的,一些人文毕业生比许多 STEM 毕业生更适合。

尽管一些优秀的人文学科候选人处于分布的高端,但如果雇主考虑申请人的时间有限,那么只从绿色候选人中挑选将是一种合理的节省时间的措施。

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

作者图片

但是黄色分布右尾的例外人文毕业生呢?不幸的是,错过它们是使用过滤器的代价。他们被拒绝不是因为他们实际上不适合这个角色,而是因为他们不适合雇主的考虑考虑到他们的时间限制和他们所发挥的启发。(作为一个有趣的旁白,有人建议类似的过程是对电子邮件骗子糟糕的英语语法采取行动——那些不太可能上当的人会对糟糕的写作产生怀疑,并立即离开,从而最大限度地减少骗子在后续工作中浪费的时间,这些工作最终不会有回报。)

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

作者图片

所以,求职者们,要明白,未能通过申请的筛选阶段可能与你在该职位和职业中的潜力无关,而是与雇主考虑每份申请的实际限制有关。可悲的是,目前使用 STEM 的启发式方法是有效的,所以那些受害者需要另一条途径。

获得第一份分析工作

不管你的背景如何,如果“前门”被证明是困难的,这里有一些进入这个领域的技巧。

1.开始在线学习

我进入分析领域得益于书本上的一些自学。自那以后,行业对数据分析师的需求急剧膨胀,在线学习资源的数量也在不断增加。钻研一些知识不仅会给你在数据分析职业中直接有用的技能,还会测试你是否真的喜欢这个职业。

我向初学者推荐的免费在线资源是 Mode 关于 SQL 的优秀入门书。对于更广泛的付费选项,我建议潜入数据营的交互式 SQL 教程或谷歌在 Coursera 上的数据分析课程,这似乎是现在得到了很多关注

连续三个月每周给自己 10 个小时的学习时间,你将会很好地体会到工作中涉及的内容和一些有用的技能,以及你的动机的证据。

2.网络

在 LinkedIn 和 Twitter 上关注从事分析工作的分析机构和个人。不要犹豫向陌生人寻求建议,如果你大多得不到回应也不要气馁。他们发布的内容会让你对当前社区中的热门话题有一个很好的了解,并且通常会有免费网络研讨会和你可以参加的当地活动的链接。在 meetup.com 上查找您当地城市的分析活动(我推荐“数字分析星期三”或“数据与分析星期三”,这在世界各地的许多主要城市每月举行一次)。请你认识的人把你介绍给他们认识的分析师,并获得他们的建议。

3.通过其他角色输入分析

你很难找到数据没有用的业务功能。不要因为申请其他职位而觉得自己走错了路,一旦进入,就想办法接触数据。自愿清理一份电子表格,或者挑战自己,用数据来改善你的部分功能。或许你可以组织一次内部调查,并为你的团队制作一个可视化结果的包。与贵组织中负责数据分析的人员联系。晚上坚持参加网上课程。

结束语

我打算把这篇文章主要写给来自艺术界的求职者,事实上,你找到了写这篇文章的方法,这可能意味着你已经把这当成了你人生的一个方向。我希望我已经能够激励你去冒险,并说服你这可能是一个可行的选择,尽管所有的迹象都指向相反的方向。

对于其他人,尤其是商界人士,我希望这能让您思考一下在动态、快速发展的环境中进行数据分析所面临的挑战,以及更多批判性思维的必要性。

如何开始分析职业生涯

原文:https://towardsdatascience.com/how-to-start-a-career-in-analytics-808bf7b69c5c?source=collection_archive---------35-----------------------

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

洛伦佐·菲利波摄

我已经在分析行业工作了将近 6 年,我的职业生涯非常激动人心,并且还在不断发展。令人难以置信的是,越来越多的人对这个领域感兴趣。过去几个月,我们为那些希望在职业生涯中转行做分析的女性开办了一个为期 5 周的聚会班。我发现类似的问题不断出现:

  • 没学过相关的可以吗?
  • 我需要学习哪些技能?
  • 你正在使用的工具是什么?
  • 初级职位应该应聘小型、中型还是大型公司?
  • 我该从何说起呢?

是很多;想把你的职业换成不同的东西会让人不知所措。外面有很多信息,有些与你有关,有些则无关。你怎么知道?

我的个人经历

我将描述的只是我自己的旅程和与该领域其他人分享的经验。我目前在脸书工作,是一名数据工程师,在此之前,我是一名商业智能分析师和商业智能顾问。

我学的是机械工程,一直热爱数学。我小时候想成为一名数学老师,但我的分数很高,所以我决定学工程。老实说,我从来不喜欢它,在我学业结束时,我在寻找一些不同的东西。我毕业于希腊严重的经济危机时期(2012 年),所以当时市场上没有多少工作。我在学习的同时做了一些学生工作,然后开始攻读博士学位。就在那时,我爱上了数据模式。我发现通过数据探索话题和行为很有意思。当时开始自学东西,主要是 Python。我记得这非常令人沮丧,我对编程失去了希望。还有,我记得我从来不能专注于一件事(我的博士学位)。我有十个不同的想法总是在我的脑海中运行,这将导致十个以上的想法。就像一只蝴蝶,我的心会被它看到的每一朵花分心。以至于我完全不知道自己在做什么,想解决什么。

:博士需要大量的纪律和指导。我意识到我是一个喜欢一心多用的人。这可能是我的副业,但不是我的主业。我还意识到,学术生涯可能是一个非常漫长的旅程,这使我对我选择的道路失去了信心。

总之,两年半过去了。我写论文,参加会议,学习大量的研究,但是我仍然没有像我希望的那样进步。然后我得到了一个在柏林进行为期三个月的项目的机会,在那里我将为一个非政府组织做分析研究。听起来很刺激。

我确实去了。我很快就学到了很多东西。

第一课

三个月之内,我的编码技能有了显著的提高。当你周围的人可以给你看东西,你可以问问题,而不是自己一个人研究 aaaaaall 时,情况会有很大的不同。

我发现自己喜欢柏林,享受这条新的道路。有同事,有工作,看到事情进展得更快。我决定试着找一份工作,如果可能的话,延长我的旅程。

我申请了初级分析师/初级 BI 分析师职位,这 3 个月的经验是我唯一的工作经验。

我发了很多申请,并被两家创业公司接受面试。我得到了第一家回复的公司的工作。第二次,我参加了一次面试,但已经得到了前一次的工作邀请。

你可能认为这是运气,但我是一个非常勤奋的人,学得很快。不知何故,我知道我想进入这个领域,我对数学和模式的热爱帮助了我。当我接受采访时,我努力学习 SQL,并做了大量研究来了解分析是如何工作的。此外,即使我当时不知道,我在博士和研究中的经验也帮助我以正确的方式处理问题。

第二课:

我没有专注于我所知道的工具,但是我专注于我的分析技能和热情。当时,我不知道可视化工具,也不知道 SQL 细节;我曾经用过的只是一些 python 库。然而,我太兴奋了,对正在发生的事情以及数据如何帮助决策真正感兴趣。我问了正确的问题,只是因为我喜欢思考如何用数据回答问题的过程。

对产品的理解是我的强项之一。也不一定是你的。但是如果你想开始一个分析职业,你确实需要发展这个技能。这是帮助你前进的技能之一。

你如何看待一个产品?以及数据如何帮助你。

工具/技术

你从哪里开始?你需要学习什么?

SQL

这里我最大的建议就是学习 SQL。需求量非常大。而且很简单。比 Python & R 更容易,你会在很多分析职位上需要它。

一个开始的方法是 w3schools

你可以随时下载一些公共数据集来玩。还有在线编辑器,在那里你可以探索如何处理数据

(英)可视化(= visualization)

有大量的观想工具,对于一个初级角色来说,你不可能知道很多这样的工具。但是有很多免费的试用版,你可以下载这些工具并试用。

我见过的最流行的有:PowerBI,Tableau,Looker。

Tableau 有很棒的教程,你可以玩玩在线版本,也可以在在线社区发帖。观看他们如何创造观想,并从我最喜欢的观想传说中获得灵感。

建立你的分析直觉

我这里没有关于在线链接的任何建议,但是在线研究并理解数据、模式&它们如何在不同的情况下帮助你。如果你已经在一家公司工作,了解数据如何帮助日常决策。将这些想法融入你的思考过程。

没学过相关的可以吗?

是的。我认识一些人,他们从哲学、音乐变成了分析师或软件工程师。这不是一个容易的转变,但是如果你喜欢,如果你喜欢进入数字,你可以做到。一开始需要努力,有很多新的概念。但是这是可行的,并且正在发生。市场上的分析课程越来越多,需求也越来越大。

初级职位应该应聘小型、中型还是大型公司?

中型或大型公司会雇用更多的初级员工,并对他们进行更多的投资。这可能是你最好的机会了。大的创业公司也想要有激情的人。你需要用你的热情说服一家公司,然后你就加入了。一旦有了第一份工作,就只能成长。

你的人际网络也可能充满了能给你推荐或见解的人。伸手向人们询问。

我朋友的建议也是:“首先申请你不想去的公司”。和他们面谈,了解情况,从你的错误中学习。当你在这个过程中有了更多的经验,申请你想工作的公司。

我认为这是一个很好的建议。

另一种方法也可以是看看你现有的公司,换个角色或者获得你想要的技能。

我最大的建议是**尝试失败。失败是获得第二次机会的途径。不要认为你失败了,要理解发生了什么,并从中吸取教训。**然后多问问题,再试一次。我们好奇的头脑总能给出新的观点和方法。你的背景没有你的激情和想法重要。千万不要低估这一点!

如何在 2021 年开始一个数据科学项目样板?

原文:https://towardsdatascience.com/how-to-start-a-data-science-project-boilerplate-in-2021-33d81393e50?source=collection_archive---------22-----------------------

在本文中,我想展示我如何准备数据科学项目的三个步骤。

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

艾通过作者创造艺术。更多例子上https://www.instagram.com/art_and_ai/**;受香波特* 的启发,https://unsplash.com/photos/bHlZX1D4I8g*

目录

为什么

我开始的每个数据科学项目都有不同的结果,但开始总是一样的。在本文中,我想展示我如何准备数据科学项目的三个步骤。它涵盖了以下主要领域

  • 应对虚拟环境
  • 管理依赖性和
  • 正确跟踪 jupyter 笔记本的变化

我想涵盖这些方面,因为我没有找到一个合适的样板为我这样做。我知道库克科特项目。然而,我不是在寻找一个文件夹结构,因为这很容易适应。我在寻找自动化步骤,确保我在开发过程中保持适当的标准。

以下网址提供了简单的样板文件设置:

https://github.com/Createdd/data_science_boilerplate▶️

它专注于在 jupyter 笔记本电脑中开发概念验证,而不是生产。如果你也想要一个生产设置,请告诉我。

1.创建项目手续

本地设置步骤。我用的是 Conda 环境和 Git + Github。按照以下步骤来做:

  1. 创建本地文件夹mkdir NAME
  2. NAME在 Github 上创建一个新的存储库
  3. 创造康达环境conda create --name NAME python=3.7
  4. 在 jupyter 中注册新环境ipython kernel install --name NAME--user
  5. 激活康达环境conda activate PATH_TO_ENVIRONMENT
  6. 创建 git repo git init
  7. 连接到 Github repo。添加自述文件,提交并
*git remote add origin URL_TO_GIT_REPO
git branch -M main
git push -u origin main*

2.依赖性管理

我用 Python 开发了很长时间,仍然在改进依赖管理设置。这是我目前的做法。

Pip 没有提供自己的适当的依赖性管理,因为

  • pip 冻结的需求文件不提供任何结构
  • 安装的版本没有固定,这导致每次安装都不一样
  • 没有依赖关系解析

还有一些有用的附加库:

以更好的方式安装依赖项

我使用一个自动化的工作流程来处理依赖列表和编译。

  • 将使用固定的子依赖关系更新需求文件,并创建需求文件。

因此,我们需要用

*python -m pip install pip-tools*

来使用它,而不是编写常规的pip install jupyter jupytext

我们通过以下方式创建一个requirements_dev.in文件

*touch requirements_dev.in*

然后我们打开这个文件,添加我们想要添加的库。我们将在整个存储库中遵循这种风格!

让我们从依赖关系开始

  • jupyter 笔记本
  • jupytext(用于转换。ipynb 文件)
  • pipdeptree(用于显示依赖关系树)
  • when-changed(编译和安装包的监视程序)

那就跑

*pip-compile requirements_dev.in
pip install -r requirements_dev.txt*

这会生成一个格式很好的requirements_dev.txt文件,然后安装所有的东西

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

良好的排序和显示依赖关系;作者图片

所以每次我们添加一个库时,我们都需要运行编译命令。这也是一个可以自动化的步骤。

我们将使用 when-changed 库。因为我们已经用以前的列表安装了它。我们现在可以做以下事情:

*when-changed requirements_dev.in pip-compile requirements_dev.in;pip install -r requirements_dev.txt*

现在,每次您添加一个包并保存到.in文件时,编译和安装命令都会被触发。

捆绑在单个启动脚本中

为 jupyter notebook 和 change watcher 设置自己的终端窗口可能会很烦人。一种解决方案是将命令捆绑在自己的 bash 脚本中。

*touch startup.sh*

然后插入正在执行的命令,比如

*#!/bin/bashjupyter notebook &
when-changed requirements_dev.in pip-compile requirements_dev.in &
when-changed requirements_dev.in pip install -r requirements_dev.txt*

然后使文件可执行(在 mac 上)并启动脚本。

*chmod +x startup.shtbash startup.sh*

现在两个命令在同一个终端窗口中并行运行。

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

运行捆绑包脚本;作者图片

3.正确跟踪 jupyter 笔记本的变化

转换为 python 文件

我们将使用 jupytext 将.ipynb文件转换成.py文件。这允许正确跟踪 Git 中的变化。

我们已经在前面的步骤中安装了软件包。现在我们只需要添加一个 githook 来自动完成转换。

为 jupytext 安装 githook

.git/hooks/pre-commit中设置一个钩子,用于正确跟踪 git 中的笔记本变化;

*touch .git/hooks/pre-commit
code  .git/hooks/pre-commit*

把这个复制到文件里

*#!/bin/sh
# For every ipynb file in the git index, add a Python representation
#jupytext --from ipynb --to py:light --pre-commit
jupytext --from ipynb --to jupytext_conversion//py:light --pre-commit*

之后让钩子可执行(在 mac 上)

*chmod +x .git/hooks/pre-commit*

现在,在提交对 jupyter 笔记本的更改之前,该文件被转换为 python 文件,并且这些更改将完美地反映出来:

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

正确跟踪 ipynb 变化;作者图片

以下网址提供了简单的样板文件设置:

https://github.com/Createdd/data_science_boilerplate▶️

放弃

我与本文中使用的任何服务都没有关联。

我不认为自己是专家。我不是博主什么的。我只是记录工作流程。因此,这些内容并不代表我任何作品的质量,也不完全反映我对事物的看法。

我总是乐于听取建设性的意见以及如何改进。

这写于 21.02.2021 。我无法监控我的所有文章。当你在时间流逝后读到这篇文章时,提示已经过时,流程已经改变,这种可能性很大。

关于

丹尼尔是一名艺术家、企业家、软件开发人员和商业法毕业生。他的知识和兴趣目前围绕着编程机器学习应用程序及其所有相关方面。从本质上说,他认为自己是复杂环境的问题解决者,这在他的各种项目中都有所体现。

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

连接到:

直接:

如何开始成为一个主动的学习者?

原文:https://towardsdatascience.com/how-to-start-being-an-active-learner-8d311d68fb70?source=collection_archive---------20-----------------------

计算机视觉主动学习简介

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

照片由莱昂Unsplash 上拍摄

深度学习(DL)模型是计算机视觉中许多任务最常用的方法。DL 通过使用大量的标记数据取得了巨大的成果。然而,随着计算机视觉任务变得更加复杂,DL 网络变得更大,参数数量增加,这需要更多的标记数据来训练网络。

为什么这是个问题?

  • 标注周期 —要标注的数据集越大→价格越高+完成所有标注的时间越长。
  • 训练周期 —更大的训练数据集→更长的训练时间。

主动学习是来救援的!

DL 中主动学习的目标是用更少的数据——更便宜的标注预算和更短的训练周期——训练一个模型,并获得相似的性能。

在这篇文章中,我将描述什么是主动学习,分享一些常见的方法,它们的利弊,并添加一些个人见解。

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

图 1-绿线 —相同数据量的准确度更高。橙色线— 数据量更少时精度水平相同。(图片由作者创作)

什么是主动学习?主动学习是一个连续的训练管道,它利用不同的方法(如下所述)来选择下一个要注释的样本。选择过程是知情的,而不是通常所做的随机选择过程(图 3 (b))。

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

图 2 — 主动学习通用管道[8]

我们怎样才能做到呢?主动学习方法旨在从我们的未标记图像集中选择最具信息量和代表性的图像子集。这样,我们可以在使用较小数据集的同时获得更高的模型精度。

主动学习方法:

主动学习方法可以分为三大类[1]:

  1. 不确定性方法 —定义和测量不确定性的数量以选择数据点(图 3 ©)。
  2. 多样性方法 —选择代表未标记池整体分布的多样性数据点(图 3 (d))。
  3. 预期模型变化 —选择会导致当前模型参数或输出最大变化的点,如果它们的标签已知的话。

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

图 3- 采样策略【4】。蓝点和红点代表不同类别的数据。

预期模型变化方法*,a* 成功应用于小模型,但对于最近的深度网络在计算上不切实际。因此,我们将着重于前两类。

根据我的经验,主动学习方法也可以分为特定任务型和不特定任务型。如果我有一个包含几个任务的管道,我可能更喜欢找到一个任务不可知的方法,用于所有的模型。相比之下,我可能已经找到了一个很好的方法,针对某个特定的任务,极大地提高了我的结果。在这种情况下,维护几种不同的方法可能是值得的。

不确定性方法:

不确定性方法旨在选择模型最不确定其输出的图像。因此,大多数不确定性方法是依赖于模型的,需要针对每个新模型进行训练或调整。

直接在输出上测量不确定性(特定于任务和模型)

从输出中直接测量不确定性的最简单方法是在推断中使用一个下降图层(也称为蒙特卡洛下降)。在推断中使用丢弃,我们的预测不再是确定性的,而是取决于随机丢弃的节点。因此,可以通过计算 T 个不同预测的方差来估计图像输出的不确定性(更多信息参见[9],例如关于分割任务参见[6])。

结合在网络中的不确定性测量(任务特定和任务不可知)

获得不确定性度量的不同方法是通过添加额外的并行分支将不确定性预测并入网络。

接下来,我将描述使用这种方法的两种方法,一种方法是特定于任务的,另一种是任务不可知的。

特定任务[1】—特定于图像分割任务。关注边界框和遮罩预测中的不确定性。

两个平行分支连接到网络的检测头和掩模头(图 4-蓝色网络分支)。每个分支的输出是预测预测边界框和目标框的交集(IoU)以及预测遮罩和目标遮罩的 IoU 的值。最终预测得分是 IoU 预测和分类得分的组合。分数越低,不确定性越高。

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

图 4— 架构示意图。蓝色表示 IoU 预测的附加分支和训练的附加损失[1]

任务无关[2】—可以添加到我们使用的任何现有网络中。目标是学会预测网络的损耗。损耗越高,网络输出越不确定。

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

图 5【2】

不确定性方法的收获

  • 优点:易于实现,可以很容易地插入到现有模型中。
  • 缺点:可能包含多余的数据点。深度学习在相似图像上往往是不确定的。
  • 个人见解:我发现不确定性方法很容易理解,无论是从算法方面还是从实现方面。

多样性方法:

多样性方法旨在从我们的非注释集中选择一个子集,这样它将代表我们的数据分布。与可能导致冗余实例的不确定性方法相比,多样性方法试图将选择的数据分散到整个分布中。

多样性方法测量图像特征之间的相似性,并输出未注释图像的子集,以使其代表整个数据分布,重点是对不同情况进行采样。

那么我们如何创建这些图像特征呢?

一种直接的方法是测量从卷积神经网络提取的特征之间的距离。然后,将选择与许多其他无注释图像相似并覆盖不同情况的图像(更多信息见[5])。

一种不同的方式是使用变分自动编码器并学习到具有期望概率分布的潜在空间的映射函数。然后,对于新的一批未标注数据,创建一个子集,其到潜在空间的映射分布类似于已学习的分布(更多信息见[3])。

多样性方法的收获

  • 优点:独立于模型和任务。可以用来发现罕见的情况,并处理阶级不平衡。
  • 缺点:可能更难理解,需要更深入的理论理解
  • 个人见解:我喜欢主动学习和具体任务之间的耦合消除。

享受两个世界——使用两种方法

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

可以看出,每一个类别都有自己的优点和缺点。为什么不把它们结合起来,一起享受呢?在下一篇文章中,我将详细阐述如何利用这两种方法的优点来获得更好的结果。现在,你可以看看[3]和[6]并开始成为一个积极的学习者!

参考资料:

[1] 通过得分预测进行实例分割的半监督主动学习

[2] 主动学习的学习损失

[3] 基于贝叶斯样本查询的分词主动学习

[4] 学会抽样:一个主动的学习框架

[5] 提示性标注:生物医学图像分割的深度主动学习框架

[6] 用于黑色素瘤分割的成本有效的主动学习

[7] 作为贝叶斯近似的辍学:表示深度学习中的模型不确定性

[8] 贝叶斯层定位与深度贝叶斯主动学习中模型不确定性的相关性

[9] 作为贝叶斯近似的漏失:表示深度学习中的模型不确定性

如何开始为开源项目做贡献

原文:https://towardsdatascience.com/how-to-start-contributing-to-open-source-projects-41fcfb654b2e?source=collection_archive---------9-----------------------

开始往往是成功的一半

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

图片由来自 PixabayMarkus Winkler 拍摄

为开源项目做贡献可能是了解您感兴趣的技术、为您最喜欢的工具的发展做贡献以及向未来的员工展示您的能力的最佳方式。

此外,您还可以加入一个活跃的社区,结识有共同兴趣和想法的开发人员,并让您的名字在该领域广为人知。

如何在不污染系统的情况下创建开发环境,并在隔离的便携式工作区中通过第一批测试?

然而,开始并不容易,这是一个关键的步骤,如果做得不好,可能会让任何人气馁。克隆项目、设置环境、构建二进制文件以及通过测试并不总是简单明了的。

这个故事提供了一些想法,关于如何开始一个新的开源项目,创建一个开发环境而不污染我们的系统,并在一个隔离的便携式工作空间中通过第一次测试。

Learning Rate 是一份时事通讯,面向那些对 AI 和 MLOps 世界感到好奇的人。你会在每周五收到我关于最新人工智能新闻和文章的更新和想法。订阅这里

连续的例子

本文使用了一个运行的例子,一个简单的用例,它将使一切变得透明;我们将克隆一个名为 Kale 的开源项目,设置工作环境,并运行我们的第一个测试。

Kale 是一个开源项目,它简化了数据科学家使用 Kubeflow 和 Kubernetes 的体验。

你可以把 Kale 想象成你在 Kubeflow 上的机器学习(ML)项目指挥者;作为数据科学家,我们可以在我们最喜欢的 JupyterLab 环境中工作,无需任何代码更改,就可以在 Kubeflow 和 Kubernetes 上运行 ML 管道,此外,我们可以运行超参数优化实验,将我们的模型作为可扩展的 API,创建 AutoML 项目,并毫不费力地分发我们的深度学习(DL)训练过程。

如果您有兴趣了解更多关于羽衣甘蓝和 Kubeflow 的信息,请阅读以下文章:

既然我们已经看到了羽衣甘蓝是什么,以及它如何将我们的 ML 实验提高到一个新的水平,让我们假设我们愿意积极参与它的开发。怎么才能开始呢?

设置开发环境

当然,第一步是克隆项目:

git clone [https://github.com/kubeflow-kale/kale.git](https://github.com/kubeflow-kale/kale.git)

Kale 是一个 JupyterLab 扩展和一个 Python 库。我更熟悉 Python,所以我将在这篇文章中介绍如何开始为 Kale 的后端 Python 库做贡献。

在克隆项目并在 Visual Studio 代码中打开它之后,您将会看到:

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

羽衣甘蓝项目——作者图片

然而,我们对此无能为力;最重要的是,我们没有安装必要的库。那我们该怎么办?我们应该把 Kale 需要的所有东西直接安装到我们的系统中吗?我们是否应该创建一个单独的虚拟环境,并将它们安装在那里?不,不!

首先,我们来看看羽衣甘蓝需要什么。一些项目带有我们可以使用的requirements.txt文件,其他项目带有用于 conda 的environment.yaml文件,或者甚至是简化一切的docker-compose.yaml文件。

羽衣甘蓝这些都没有,就从简单的开始吧;让我们创建一个requirements.txt文件。打开backend文件夹中的setup.py文件,复制install_requires列表中的所有库,粘贴到一个新文件中,命名为requirements.txt。它应该是这样的:

kfp
autopep8>=1.4<1.5
astor>=0.8.1
nbformat>=4.4<5.0
networkx>=2.3<3.0
jinja2>=2.10<3.0
graphviz>=0.13<1.0
pyflakes>=2.1.1
dill>=0.3<0.4
IPython>=7.6.0
jupyter-client>=5.3.4
jupyter-core>=4.6.0
nbconvert>=5.6.1<6.0.0
ipykernel>=5.1.4
notebook>=6.0.0
packaging>20
ml_metadata==0.24.0
progress>=1.5
kfserving>=0.4.0<0.5.0
kubernetes<12.0.0

请注意,将来依赖关系的版本可能会改变。

我们现在可以创建一个安装了这些依赖项的 Docker 映像,并将 Kale 项目复制到其中,这样我们就可以使用它了。但是这看起来工作量太大了。让我们自动化吧!

首先,我们需要为 VS 代码安装[remote-containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)扩展。您可以在市场中搜索它,然后单击安装。然后,点击右下方的Open a Remote Window选项,选择Add development container configuration files选项。

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

按照向导,选择一个最近的 Python 3 环境(所有高于3.5的环境应该都可以),如果您也想在 JupyterLab 扩展上工作,安装 NodeJS。最后,点击 OK,一个名为.devcontainer的新文件夹将会出现在你的项目的根文件夹中。

该文件夹包含两个文件:

  • 一个devcontainer.json文件来保存您的配置选项
  • 建立你的形象

一切都为你准备好了,但是我们需要对Dockerfile做一个小小的修改。打开它,取消安装您的requirements.txt文件的注释行:

COPY requirements.txt /tmp/pip-tmp/
RUN pip3 --disable-pip-version-check --no-cache-dir install -r /tmp/pip-tmp/requirements.txt \
&& rm -rf /tmp/pip-tmp

最后,再次点击右下方的Open a Remote Window选项,并选择Reopen in container。VS 代码将构建您的映像,启动一个容器,并挂载您启动 Kale 所需的文件。就这么简单!

如果您想更进一步,您可以更改您的devcontainer.json来安装您想要的 VS 代码扩展,并更改容器内的 VS 代码设置。例如,我倾向于使用Pylance作为我的 Python 语言服务器。如果你想了解更多关于Pylance的信息,请阅读下面的故事:

我的 Kale 的devcontainer.json配置文件如下所示:

如果你想了解更多关于 VS 代码[remote-containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)扩展的信息,请阅读下面的故事:

</5-visual-studio-code-extensions-for-data-scientists-937487b987c0>

运行您的第一个测试

了解一个新项目的最好方法是通过 VS 代码可视化调试器来跟踪它的逻辑。但是你得先知道跑什么。如何触发调试器?为此,您可以阅读文档或直接询问维护人员。在我们的例子中,我们应该从相关文件夹中运行以下命令:

cli.py --nb /kale/backend/kale/tests/assets/notebooks/pipeline.ipynb

但是如何通过可视化调试器来设置断点并遵循逻辑呢?让我们创建一个launch.json配置文件。

转到 visual debugger 窗格,点击create a launch.json file。然后,复制以下几行:

这个文件做三件事:

  1. 在当前活动的.py文件上启动调试器
  2. 传递正确的参数
  3. 设置PYTHONPATH

导航到/backend/kale/cli.py,从这个文件运行调试器。设置您的断点并遵循逻辑!你完了!

结论

为开源项目做贡献可能是了解我们正在使用的技术、为我们最喜欢的工具的发展做贡献以及向未来的员工展示我们的能力的最佳方式。

此外,我们可以参与到一个活跃的社区中,与有共同兴趣和想法的开发人员会面,并让我们的名字在该领域为人所知。

然而,开始并不总是那么容易。这个故事使用了一个运行示例来设置 Kale 的工作开发环境,Kale 是一个开源项目,它简化了数据科学家使用 Kubeflow 和 Kubernetes 的体验。

这是我处理新项目的方式。如果你有任何关于如何丰富这个过程的想法,或者你遵循的任何不同的技术来促进设置工作流,请在评论区留下它们!

关于作者

我叫 Dimitris Poulopoulos ,是一名为 Arrikto 工作的机器学习工程师。我曾为欧洲委员会、欧盟统计局、国际货币基金组织、欧洲央行、经合组织和宜家等主要客户设计和实施过人工智能和软件解决方案。

如果你有兴趣阅读更多关于机器学习、深度学习、数据科学和数据操作的帖子,请关注我的 MediumLinkedIn 或 Twitter 上的 @james2pl

所表达的观点仅代表我个人,并不代表我的雇主的观点或意见。

如何开始对音乐实施机器学习

原文:https://towardsdatascience.com/how-to-start-implementing-machine-learning-to-music-4bd2edccce1f?source=collection_archive---------10-----------------------

讨论两个丰富领域的交集。

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

阿列克谢·鲁班在 Unsplash 上的照片

介绍

对于那些从事数据科学和机器学习的人来说,他们未来职业生涯中最重要的决定之一是追求哪个领域的专业并成为该领域的专家。一些最突出的领域是自然语言处理(NLP)、计算机视觉和量化交易。这些领域正在呈指数级增长,其中的新技术似乎每天都在发展。

然而,虽然不是机器学习最赚钱的应用(就当前的盈利能力而言),但音乐领域已经发展了巨大的洞察力和显著的进步,其中大部分是由于各种机器学习和深度学习应用。

在这篇文章中,我的目标是概述机器学习在音乐应用中的两个主要子领域,进入该领域所需的技能,最佳初学者项目(在我看来)和当前的艺术应用状态。

音乐机器学习需要什么?

音乐机器学习主要有两个子领域。第一个是音乐信息检索(MIR ),第二个是生成音乐。这两个子领域并不排斥,几乎每一个与音乐机器学习相关的应用和技术都需要 MIR。然而,一般来说,这两个子字段对整个字段进行了很好的分类。

关于音乐信息检索:

MIR 是计算机科学、统计学、音乐学和数字信号处理的交叉领域。所有这些任务结合起来形成了 MIR,因为音乐中的信息并不像看起来那样简单。

表面上有简单的信息,可以从你喜欢的歌曲中理解(即速度、音色、响度等。)这些音乐的表示是相对低级的,并且更容易跨不同流派和风格的歌曲进行计算。然而,能够制定更高层次的解释(或人类更经常感知的概念),如情绪和灵感,则更难确定。这就是利用低级统计的多元函数可以发挥作用的地方,以便更好地了解我们想要建模的内容。然而,重要的是要知道,人类从音乐中带走的许多概念至今无法完美建模,因为音乐本身之外有太多的因素在它的感知中发挥作用。

尽管孤立的 MIR 最常见的使用案例是基于音乐的推荐系统,但 MIR 本身是机器学习的每个基于音乐的应用的基础。

关于再生音乐:

至于生成音乐,名字就比较简单了。这个子领域着眼于将深度学习用于广泛的生成任务,无论是产生新的声音还是全新的歌曲。尽管在音乐机器学习中是一个“独立”的领域,它仍然大量使用 MIR,原因很明显。为了生成音乐,围绕这一代的信息应该是最高质量的。

然而,声音的产生并不一定要严格地以新音乐或声音隔离的形式进行。生成音乐还包括将一种声音转换为另一种声音的行为,甚至能够通过去噪或在其上添加新音乐来重建它,以给歌曲添加更多层,这两种应用我们将在后面看到。从本质上讲,音乐的产生并不等于自动化,有许多生产性的途径来利用音乐的产生,这将在后面讨论。

如果你感兴趣,我已经写了关于完全自动化音乐的可能含义,你可以阅读。

音乐机器学习需要哪些技能?

可以说,最重要的技能是数字信号处理(DSP)知识。DSP 是电子工程中的一个领域,它接收物理信号,如我们发出的声音,并将其转换为数字格式,以便对其进行数学处理和转换。

理解 DSP 在音乐机器学习中的作用可能是相当容易的。许多 ML 工程师习惯于通过规范化或标准化对数据进行预处理。然而,对于那些想要从事音乐工作(或者更一般地基于音频)的人来说,机器学习有一个稍微不同的障碍要克服。虽然归一化和标准化在该领域中具有一些效用,但是理解 DSP 的人将知道从波形到频谱图的变换是预处理的确定方法。你决定使用什么样的声谱图取决于问题本身,这就是你对该领域的理解和你的智慧发挥作用的地方。

如果你想开始学习 DSP,我有一系列专门从数据科学角度学习 DSP 的文章,叫做从音频中学习。您可以在这里找到 GitHub 笔记本资源库的链接,也可以在 README 中找到 Medium 文章本身的链接。

*https://github.com/theadamsabra/LearningfromAudio

注: 最明显的技能是机器学习和编程,我不打算过多地钻研这个。然而,我将在下面的 当前最先进的应用 章节中概述一些今天使用的最重要和最有用的模型。*

面向初学者的项目

对于这个领域的新手来说,最好的第一个项目是乐器或流派分类。乐器/流派分类是一种分类形式,它利用音频的结构并确定其中的乐器或流派。

我在这个项目中交替使用乐器和流派,只是因为总体学习体验是相同的,但是在你决定如何处理音频本身时会有细微的差异,只是因为你可能会寻找不同的模式/结构,各种频谱图可以返回给你。你选择哪一个并不重要,所以对你来说最好的选择是选择你最感兴趣的项目。

一旦你建立了这个分类项目,并取得了良好的结果,你就已经完全掌握了基本原理。从那里,你可以开始阅读关于各种先进应用的文献来着手解决。

乐器或流派分类数据集

各种先进的应用

音乐源分离

我把这个放在第一位,不仅因为这是我目前的论文,而且我还发现这个应用程序非常有用。音乐源分离是一项任务,在这项任务中,机器学习模型学习特定声音的结构,提取它,并将其与它混合的其他声音隔离开来。无论是创作一首歌曲的阿卡贝拉版本,还是提取你最喜欢的低音线,都可以通过神经网络以接近/快于实时的速度完成。

此用例的当前艺术应用状态是 Deezer 的 Spleeter。Spleeter 是一个双向 LSTM,它在 MUSDB 数据集上训练,MUSDB 数据集专门用于音乐源分离。

Deezer:

*https://github.com/deezer/spleeter

音乐数据库:

https://sigsep.github.io/datasets/musdb.html

实时伴奏

实时伴奏是处理音乐创作中的创意的更有趣的问题之一。这个问题旨在解决的核心概念是创建一个能够与另一首歌曲一起演奏乐器的生成网络。让我们举个例子来更好地理解这一点。

假设你决定教网络通过钢琴演奏爵士乐( 旁注: *这是非常不可能的,因为它太广泛了。在流派中磨砺将显著提高模型的性能。)*当您在没有钢琴的情况下输入音乐时,它会与其他乐器一起实时演奏,创造出自己的演奏效果!

这一领域有许多先进的应用,因此我将在下面列出几个:

MuseGAN:用于符号音乐生成和伴奏的多轨道顺序生成对抗网络:

https://paperswithcode.com/paper/musegan-multi-track-sequential-generative

音乐渐变:通过低级特征建模基于高级特征的可控音乐生成:

https://paperswithcode.com/paper/music-fadernets-controllable-music-generation

自动音乐转录

音乐自动转录的问题,顾名思义,目的是转录任何一段音乐。这对那些演奏乐器的人来说非常有用。人们不仅可以输入他们最喜欢的歌曲,并随时随地播放乐谱,而且同一首歌曲还可以转换成 MIDI 文件,以便在计算机上进行编辑。对于那些不知道的人来说,MIDI 代表乐器数字接口。根据 MIDI 协会的说法,它是一种行业标准的音乐技术协议,连接来自许多不同公司的数字乐器、计算机、平板电脑和智能手机。

因此,这些网络不仅允许为几乎任何歌曲的进一步练习和研究而创作乐谱,而且还允许用于操纵、灵感以及新歌创作的数字等价物。

类似于实时伴奏问题,有许多先进的解决方案。这里有几个例子:

通过回归开始和偏移时间用踏板进行高分辨率钢琴转录:

https://cs.paperswithcode.com/paper/high-resolution-piano-transcription-with-1

走向多乐器鼓转录:

https://paperswithcode.com/paper/towards-multi-instrument-drum-transcription

这样的例子不胜枚举!

如果这三个应用程序听起来对你都不太感兴趣,但你仍然想进一步研究 MIR 和机器学习的可能性,最好的资源是国际音乐信息检索协会(ISMIR。)

https://ismir.net/

自 2000 年以来举行的所有会议以及提交的会议记录和文件都可以在网站上找到。虽然你们中的大多数人可能会阅读该领域最近几年的资料,但如果你决定继续在该领域工作,这个年度会议仍然是一个值得关注的问题。

最后的想法

即使通读了这篇文章,重要的是要知道所有这些信息仍然只是皮毛。还有更多的问题有待发现,不仅仅是迭代当前的 SOTA 解,还有这个领域的未来。

希望这篇文章能为你在这个引人注目的领域开始职业生涯打下基础。参与其中的人越多越好。*

如何免费开始机器学习

原文:https://towardsdatascience.com/how-to-start-with-machine-learning-for-free-483c1974c4b6?source=collection_archive---------7-----------------------

这个领域提供有竞争力的薪水,既有挑战性又有趣。最棒的是你可以免费学习。

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

Unsplash 上的 Roméo A. 拍摄的照片

人们对机器学习领域越来越感兴趣。对于深度学习和神经网络的大肆宣传,我并不感到惊讶。除此之外,这个领域提供有竞争力的薪水,既有挑战性又有趣。

我假设你是这个领域的新手,不知道从哪里开始。

我最常被问到的问题是:如何从机器学习开始?我的答案总是一样的,因此我写了这篇文章来指导你的旅程。

我的建议是:从免费内容开始,因为网上有很多很好的资源。甚至常春藤盟校也免费提供在线课程。

通过学习这些资源,你将了解机器学习是否适合你

不要马上开始花钱上昂贵的课程。把付费课程当成一门专业。幸运的是,你可以免费学习强大的机器学习基础。

通过阅读本文,你将了解哪些是值得学习的优秀电子书和课程:

  • 用 Python 编程
  • 熊猫的数据分析
  • 从数据科学和机器学习开始

我也分享几个如何高效学习机器学习的小技巧。

介绍

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

照片由蒂姆·莫斯霍尔德Unsplash 上拍摄

在我们开始之前,我想给你一些建议。

不要太深入任何一本书或课程。当你开始一个新的领域时,了解这个领域的广度是很重要的。

同时从多本书和课程中学习。这样你会听到从不同角度对复杂概念的解释。

练习也很重要。没有任何实践经验不要太深入理论。泰坦尼克号——从灾难中学习机器是一个很好的起点。看看代码和讨论部分。

概念都不背,学习还有什么意义?一个很好的记忆方法是使用 Anki**——**一个使用间隔重复的应用程序。

编程电子书

面向专业人士的 Python 注释

作者:堆栈溢出的人

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

专业人士阅读 Python 笔记(图片由作者制作)

这本 Python 书籍是我见过的最完整的 Python 指南之一。它是由栈溢出文档编译的,内容是由栈溢出的人编写的。

这本书广泛涵盖了你(很可能)会用到的 Python 的每个领域。我建议你不要从头到尾读一遍,而是把它作为你想进一步了解的某个主题的参考。

如果你不精通 Python,我推荐你深入阅读这本书。这本书有 816 页,提供的信息足以让你精通 Python。

我为什么推荐这本书?因为你可以随时重温。它可以作为你旅途中的参考。

学习熊猫

作者:埃尔南·罗哈斯

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

照片由斯坦 YUnsplash 上拍摄

Pandas 成为 Python 中数据科学的事实上的标准。学习熊猫这本书是用 Jupyter 笔记本写的,并附有文字。

它从如何创建数据框架的基本课程开始,以创建 Excel 报表结束。它的目标是那些仍在熟悉熊猫的初级数据科学家。

要了解更多先进的熊猫技巧,我建议你查看我的熊猫系列进行数据分析:

https://medium.com/@romanorac/pandas-data-analysis-series-b8cec5b38b22

机器学习电子书

Python 数据科学手册

作者:杰克·范德普拉斯

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

Viktor Forgacs 在 Unsplash 上拍摄的照片

Python 数据科学手册面向初级数据科学家。它展示了如何使用最重要的工具,包括 IPython、NumPy、Pandas、Matplotlib、Scikit-Learn 和许多其他工具。这本书非常适合解决日常问题,例如清理、操作和转换数据,或者构建机器学习模型。

可解释的机器学习

副标题:让黑盒模型变得可解释的指南
作者:克里斯托夫·莫尔纳尔

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

卢卡斯·本杰明在 Unsplash 上的照片

这本书使用了“支付你想要的价格策略”,所以从技术上来说它不是免费的。

可解释机器学习专注于表格数据(也称为关系或结构化数据)的 ML 模型,较少关注计算机视觉和自然语言处理任务。

这本书推荐给机器学习从业者、数据科学家、统计学家和其他任何对让机器学习模型可解释感兴趣的人。它详细说明了如何为机器学习项目选择和应用最佳解释方法。

免费在线课程

机器学习课程

大学:哥伦比亚
导师:约翰·w·佩斯利博士

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

照片由 h heyerleinUnsplash 上拍摄

https://www.edx.org/course/machine-learning

机器学习是当今数据分析领域最激动人心的职业的基础。您将学习模型和方法,并将它们应用到现实世界中,从识别趋势新闻话题到构建推荐引擎、给运动队排名和绘制电影僵尸的路径。

涵盖的主要观点包括:

  • 概率与非概率建模
  • 监督与非监督学习

主题包括分类和回归、聚类方法、序列模型、矩阵分解、主题建模和模型选择。

方法包括线性和逻辑回归、支持向量机、树分类器、boosting、最大似然和 MAP 推断、EM 算法、隐马尔可夫模型、卡尔曼滤波器、k 均值、高斯混合模型等。

人工智能课程

大学:ColumbiaX
导师:Ansaf Salleb-Aouissi 博士

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

亚历山大·奈特Unsplash 上拍照

https://www.edx.org/course/artificial-intelligence-ai

自动驾驶汽车、人脸识别、网页搜索、工业机器人、导弹制导、肿瘤检测有什么共同点?

它们都是复杂的现实世界问题,正在通过智能(AI)的应用来解决。

本课程将提供对构建智能计算机系统的基本技术的广泛理解,以及对人工智能如何应用于问题的理解。

你将学习人工智能的历史、智能代理、状态空间问题表示、无信息和启发式搜索、玩游戏、逻辑代理和约束满足问题。

您将通过构建一个基本的搜索代理获得实践经验。对抗性搜索将通过创建一个游戏来探索,机器学习的介绍包括线性回归的工作。

在你走之前

- [Advance your Career in Cybersecurity (60% off) [Course]](https://imp.i115008.net/c/2402645/1024607/11298)- [Become a Cloud Developer using Microsoft Azure [Course]](https://imp.i115008.net/c/2402645/895504/11298)- [Binary logistic regression overview](https://dataanalysis.substack.com/p/supervised-machine-learning-binary-logistic-regression-overview-47282b9c608b)- [Free skill tests for Data Scientists & Machine Learning Engineers](https://aigents.co/skills)

上面的一些链接是附属链接,如果你通过它们购买,我会赚取佣金。请记住,我链接课程是因为它们的质量,而不是因为我从你的购买中获得的佣金。

Twitter 上关注我,在那里我定期发布关于数据科学和机器学习的消息。

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

照片由Courtney hedgeUnsplash 拍摄

如何开始为数据科学写作

原文:https://towardsdatascience.com/how-to-start-writing-for-data-science-12bcd0bb51f?source=collection_archive---------11-----------------------

通过发布您的作品来创建令人印象深刻的作品集

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

凯利·西克玛在 Unsplash 上的照片

当我在学校的时候,我的朋友经常在考试前来找我帮忙。他们中的许多人从来没有注意过老师——他们不做笔记,或者经常逃课,考试临近时经常努力跟上。

我会在午休时抽出一些时间来帮助他们学习材料。

久而久之,我意识到这样做其实对我在学校的表现有帮助。

有时,我的朋友会问我一些我从未想过的问题,同样的问题后来会出现在我的试卷上。

教人意味着我必须理解一个主题(真正理解它,而不仅仅是尽可能多的往脑子里塞)。这意味着我能够更长时间地记住信息,不再需要在考试前开夜车。

我开始意识到学习任何东西的最好的方法是教它

我对教学产生了热情。它帮助我提高了我所教授的科目的技能,并且我能够超越课本材料。

放学后,我成了一名兼职教师,并且在我生命中的很大一部分时间里都在教书。

当我开始学习数据科学时,我很快就迷失在在线知识的海洋中。我发现很难记住我学过的概念,很容易失去动力。

我决定回到我最擅长的事情——教书。

听起来可能很有趣,每次我学习一个新概念,我都用白板假装向学生解释这个话题。

这帮助我更深入地了解我正在学习的概念。

不久之后,我创建了一个数据科学博客,并开始写一些主题来分解它们。我还开始展示我构建的项目,并解释创建它们的步骤。

自从我开始为数据科学写作以来,已经有将近两年的时间了。在这篇文章中,我将分解一些我自从开始写数据科学博客以来学到的东西,并提供一些技巧来帮助你做同样的事情。

设身处地为读者着想

每当你想出一篇新文章的想法时,问问自己这个问题:

“读者读完这篇文章会有什么收获?如果我是数据科学行业的新手,我会点击阅读吗?”

在你开始写文章之前,你需要了解你是为谁而写。

技术含量高的人经常会纠结于此。看过很多不理解的数据科学文章。这些文章看似面向行业新手,但夹杂着复杂的术语,对读者来说并不友好。

如果你的读者需要在你文章的每两行后查找一个术语,你会很快失去他们。

人们在不理解事物时会感到沮丧。

每次你解释一个概念的时候,问问你自己,作为一个行业的初学者,你是否能够理解这个概念。问问你自己是否有更简单的方法来分解它。大多数时候,答案是肯定的。

如果你的文章是在一个稍微更高级的水平,你的读者在阅读你的文章之前需要理解某些基本概念,提供学习资源的链接。

告诉读者首先从这些资源中学习,否则,他们将无法理解你所写的内容。这将节省他们大量的时间,并给他们一个扩展知识的机会。

首先成为一名教师,然后成为一名作家

大多数数据科学作者犯的另一个错误是,他们太专注于写作,而不是表达观点。

你不需要成为一个伟大的作家或使用大词。当你写技术文章时,你的主要焦点需要是你的内容是否能被读者理解。

当我第一次想开一个数据科学博客时,我记得我推掉了它,因为我觉得我好像还没有准备好。我阅读了关于成为一名更好的作家的文章和在线课程。我痴迷于语法、拼写和句子结构。

然而,在我写完第一篇文章后,我意识到读者对花哨的术语不太感兴趣,而对内容更感兴趣。

我不需要成为周围最好的作家,我只需要写得足够好来表达我的观点。我开始花更多的时间思考我想传授给读者的知识,并专注于使概念简单易懂。

多读,少写

我通常给任何想成为作家的人的第一条建议是阅读。

在我开始写作之前,我每天都会阅读 3-4 篇关于媒体的文章。这让我了解了人们写的主题、他们的写作风格以及他们表达思想的方式。

我读得越多,我对要写的内容类型或接下来要创建的项目类型就有了更多的想法。

我认为不存在不读书的多产作家。

当你写一篇文章时,你把你学到的技能和知识分享给其他人。写了一段时间后,你的思想和想法库就会枯竭。

你需要创建新的项目,阅读更多的文章,并不断学习,以便通过写作不断传授知识。

随着时间的推移,我认识到输入输出一样重要。为了想出文章、教程或项目(输出,你首先需要自己消费和消化信息。

结论

我等了很久才发表我的第一篇文章,因为我觉得我还不够好。我想等到我成为一个多产的作家后,再开始和别人分享我的作品。

我花了一段时间才意识到,真正擅长某件事的唯一方法是持续不断地做下去。我最初的几篇文章很乱,随着时间的推移,我越写越好。

如果你想开一个博客,但认为你还不够资格,那么你应该现在就开始。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值