如何在机器学习中处理大型数据集而不是大数据......数据集是共享共同属性的所有实例的集合。机器学习模型通常由许多不同的数据集组成,每个数据集用于履行系统中的各种角色。当任何经验丰富的数据科学家处理与ML相关的项目时,60%的工作将用于分析数据集,我们称之为探索性数据分析(EDA)。这意味着数据在机器学习中起着重要作用。在现实世界中,我们需要处理大量数据,这使得使用普通pandas进行计算和读取数据似乎不可行,这似乎需要更多时间,而且我们的工作资源通常有限。为了使其可行,许多人工智能研究人员提出了一种解决方案来识别处理大型数据集的不同技术和方法。现在,我将通过一些示例来分享以下技术。这里的实际实现,我使用的是RAM容量为12.72GB的googleColab。让我们考虑一个由0(含)到10(不含)的随机数创建的数据集,它有1000000行和400列。执行上述代码的CPU时间和墙时间如下:现在,让我们将此数据帧转换为CSV文件。执行上述代码的CPU时间和墙时间如下:现在,使用pandas加载现在生成的数据集(将近763MB),看看会发生什么。当你执行上面的代码时,笔记本电脑会由于RAM不可用而崩溃。在这里,我拿了一个相对较小的数据集,大约763MB大小,然后考虑需要处理大量数据的情况。解决这个问题的下一步计划是什么?处理大型数据集的技术:1.以块大小读取CSV文件:当我们通过指定chunk_size读取大型CSV文件时,原始数据帧将被分成块并存储在pandas解析器对象中。我们以这种方式遍历对象,并连接以形成花费更少时间的原始数据帧。在上面生成的CSV文件中,这个文件包含1000000行400列,所以如果我们读取CSV文件中的100000行作为chunksize,执行上面代码的CPU时间和walltime如下:现在我们需要迭代列表中的块,然后需要将它们存储在列表中并连接以形成完整的数据集。执行上述代码的CPU时间和walltime如下:我们可以观察到阅读时间有了很大的改善。这样,我们就可以读取大型数据集并减少读取时间,有时还可以避免系统崩溃。2.改变数据类型的大小:如果你想在对大数据集进行任何操作时提高性能,避免这个原因会花费更多的时间,我们可以改变一些列的数据类型的大小,比如(int64→int32),(float64→float32)以减少存储空间并保存在CSV文件中以供进一步实施。例如,如果我们将此应用于分块后的数据帧并比较文件大小减少一半前后的内存使用情况,内存使用量减少一半,最终导致CPU时间减少,前后的内存使用量数据类型转换后的情况如下:在这里,我们可以清楚地观察到3GB是数据类型转换前的内存占用,1.5GB是数据类型转换后的内存占用。如果我们通过计算数据帧前后的平均值来计算性能,那么CPU时间就会减少,我们的目标就达到了。3.从数据帧中移除不需要的列:我们可以从数据集中移除不需要的列,以减少加载的数据帧的内存使用,这可以提高我们在对数据集执行不同操作时的CPU性能。4.更改数据格式:您的数据是否以CSV文件之类的原始ASCII文本格式存储?也许您可以通过使用另一种数据格式来加快数据加载速度并使用更少的内存。一个很好的例子是二进制格式,例如GRIB、NetCDF或HDF。您可以使用多种命令行工具将一种数据格式转换为另一种数据格式,而无需将整个数据集加载到内存中。使用另一种格式允许您以更紧凑的形式存储数据以节省内存,例如2字节整数或4字节浮点数。5.使用正确的数据类型来减小对象大小:通常,可以通过将DataFrame转换为正确的数据类型来减少内存使用量。几乎所有的数据集都包含一个对象数据类型,通常是字符串格式,这在内存效率上不是很高。当你考虑日期、地区、城市、地名等分类特征时,它们会使用更多的内存,所以如果你将它们转换为相应的数据类型,如DateTime,分类将使内存使用量比以前减少10倍以上。6.使用像Vaex这样的快速加载库:Vaex是一个用于惰性Out-of-CoreDataFrame(类似于Pandas)的高性能Python库,可以直观地浏览大型表格数据集。它以每秒超过十亿(10^9)个样本/行的速度在N维网格上计算平均值、总和、计数、标准差等统计数据。可视化是使用直方图、密度图和3d体积渲染完成的,允许交互式探索大数据。Vaex使用内存映射、零内存复制策略和惰性计算来实现高质量的性能(不浪费内存)。现在,让我们在上面随机生成的数据集上实现vaex库来观察性能。1.首先,我们需要根据您使用的操作系统使用命令提示符/shell安装vaex库。2.然后,我们需要使用vaex库将CSV文件转换为hdf5文件。执行以上代码后,会在你的工作目录下生成一个dataset.csv.hdf5文件。数据类型转换前后的内存使用情况如下:可以看出,将CSV转换为hdf5文件用了将近39秒,相对于文件大小来说还是比较短的。3.使用vaex读取hdf5文件:-现在我们需要通过vaex库中的open函数打开hdf5文件。观察上面的代码,如果我们看输出,好像读取hdf5文件用了697毫秒,所以我们可以了解读取3GB的hdf5文件的执行速度。这就是vaex库的实际优势。通过使用vaex,我们可以对大型数据帧执行不同的操作,例如核心数据帧之外的表达系统快速分组/聚合快速高效的加入如果您想探索更多关于vaex库的信息,请单击此处。结论:通过这种方式,我们在处理大型数据集时可以在机器学习中遵循这些技术。如果你喜欢这篇文章,请阅读这篇文章。如果您想在linkedin上与我联系,请单击下面的链接。
