Python 是代度提机器学习领域内的***编程语言,它易于使用,码让也有很多出色的数据库来帮助你更快处理数据。但当我们面临大量数据时,预处一些问题就会显现…… 目前,理速大数据(Big Data)这个术语通常用于表示包含数十万数据点的代度提数据集。在这样的码让尺度上,工作进程中加入任何额外的数据计算都需要时刻注意保持效率。在设计机器学习系统时,预处数据预处理非常重要——在这里,理速我们必须对所有数据点使用某种操作。代度提 在默认情况下,码让Python 程序是数据单个进程,使用单 CPU 核心执行。预处而大多数当代机器学习硬件都至少搭载了双核处理器。理速这意味着如果没有进行优化,在数据预处理的时候会出现「一核有难九核围观」的情况——超过 50% 的算力都会被浪费。在当前四核处理器(英特尔酷睿 i5)和 6 核处理器(英特尔酷睿 i7)大行其道的时候,这种情况会变得更加明显。 幸运的是,Python 库中内建了一些隐藏的网站模板特性,可以让我们充分利用所有 CPU 核心的能力。通过使用 Python 的 concurrent.futures 模块,我们只需要 3 行代码就可以让一个普通的程序转换成适用于多核处理器并行处理的程序。 标准方法 让我们举一个简单的例子,在单个文件夹中有一个图片数据集,其中有数万张图片。在这里,我们决定使用 1000 张。我们希望在所有图片被传递到深度神经网络之前将其调整为 600×600 像素分辨率的形式。以下是你经常会在 GitHub 上看到的标准 Python 代码: 上面的程序遵循你在处理数据脚本时经常看到的简单模式: 让我们在一个包含 1000 个 jpeg 文件的文件夹上测试这个程序,看看运行它需要多久: 在我的酷睿 i7-8700k 6 核 CPU 上,运行时间为 7.9864 秒!在这样的高端 CPU 上,这种速度看起来是难以让人接受的,源码库看看我们能做点什么。 更快的方法 为了便于理解并行化的提升,假设我们需要执行相同的任务,比如将 1000 个钉子钉入木头,假如钉入一个需要一秒,一个人就需要 1000 秒来完成任务。四个人组队就只需要 250 秒。 在我们这个包含 1000 个图像的例子中,可以让 Python 做类似的工作: 这一方法的重点在于,Python 帮我们处理了所有棘手的工作。我们只需告诉它我们想要运行哪个函数,要用多少 Python 实例,剩下的就交给它了!只需改变三行代码。实例: 从以上代码中摘出一行: 你的 CPU 核越多,启动的 Python 进程越多,我的 CPU 有 6 个核。实际处理代码如下: 「executor.map()」将你想要运行的源码下载函数和列表作为输入,列表中的每个元素都是我们函数的单个输入。由于我们有 6 个核,我们将同时处理该列表中的 6 个项目! 如果再次用以下代码运行我们的程序: 我们可以将运行时间降到 1.14265 秒,速度提升了近 6 倍! 注意:在生成更多 Python 进程及在它们之间整理数据时会有一些开销,所以速度提升并不总是这么明显。但是总的来说,速度提升还是非常可观的。 它总是那么快吗? 如果你有一个数据列表要处理,而且在每个数据点上执行相似的运算,那么使用 Python 并行池是一个很好的选择。但有时这不是***解决方案。并行池处理的数据不会在任何可预测的顺序中进行处理。如果你对处理后的结果有特殊顺序要求,那么这个方法可能不适合你。 你处理的数据也必须是 Python 可以「炮制」的类型。所幸这些指定类别都很常见。以下来自 Python 官方文件: 原文链接: https://towardsdatascience.com/heres-how-you-can-get-a-2-6x-speed-up-on-your-data-pre-processing-with-python-847887e63be5 【本文是专栏机构“机器之心”的原创译文,微信公众号“机器之心( id: almosthuman2014)”】 戳这里,看该作者更多好文