用于处理机器学习大数据文件的7种方法
2017年07月14日 由 xiaoshan.xiang 发表
232587
0
机器学习数据文件太大而不能装入内存数据集是很常见的。
这会导致以下问题:
如何加载多个G的数据文件?
当我尝试运行我的数据集时算法崩溃;我该怎么办?
您能帮助纠正内存不足的错误吗?
在这篇文章中,我想提出一些常见建议。
1.分配更多内存
一些机器学习工具或库可能受到默认内存配置的限制。
检查是否可以重新配置工具或库以分配更多内存。
一个很好的例子是Weka,在启动应用程序时,可以将增加内存作为参数。
2.使用较小的样本
您确定需要使用所有数据吗?
随机抽取数据,例如前1000或10万行。使用这个较小的样本来处理您的问题,然后在所有数据上使用最终模型(使用逐行读取数据技术)。
我认为这是对机器学习来说是一个很好的练习,可以让您快速查看算法和结果的转变。
您还可以考虑用于与模型技能相比较的数据进行灵敏度分析。
3.使用具有更多内存的计算机
您必须在你的电脑上工作吗?
也许您可以访问一个拥有更多内存的计算机。
例如,一个很好的选择是在云服务上计时租用,比如Amazon Web Services,它提供的机器带有数十G的运行内存,收费却不超过每小时一美元。
我发现这个方法在过去非常有用。
4.更改数据格式
您的数据是否存储在原始ASCII文本中,如CSV文件?
也许您可以通过使用其他数据格式来加快数据加载并减少内存使用。一个很好的例子是像GRIB,NetCDF或HDF这样的二进制格式。
有许多命令行工具可用于将一种数据格式转换为另一种不需要将整个数据集加载到内存中的数据格式。
使用另一种格式可能允许您以更紧凑的形式存储数据,从而节省内存,例如2字节整数或4字节浮点数。
5.数据流或使用逐行读取数据
所有的数据是否需要同时在内存中?
也许您可以使用代码或库来传输或逐步将需要的数据加载到内存中进行培训。
这可能需要可以使用诸如随机梯度下降的优化技术来迭代学习的算法,而不是需要存储器中的所有数据执行矩阵运算(诸如线性和逻辑回归的一些实现)的算法。
例如,Keras深度学习库提供了逐渐加载图像文件的功能,称为flow_from_directory。
另一个例子是熊猫库,可以加载大块的大型CSV文件。
6.使用关系数据库
关系数据库提供了存储和访问非常大的数据集的标准方法。
在内部,存储在磁盘上的数据可以批量逐步加载,并且可以使用标准查询语言(SQL)进行查询。
可以使用免费的开源数据库工具,如MySQL或Postgres,大多数(所有?)编程语言和许多机器学习工具可以直接连接到关系数据库。您还可以使用轻量级的方法,如SQLite。
这种方法在过去对于非常大的表格数据集非常有效。
同样,您可能需要使用可以处理重复学习的算法。
7.使用大数据平台
在某些情况下,您可能需要使用大型数据平台。
设计用于处理非常大的数据集的平台,允许您在其上使用数据转换和机器学习算法。
两个很好的例子是Hadoop的Mahout机器学习库和Spark机智的MLLib库。
我确实相信这是最后的手段,当您用尽了上述选项,只是为了机器学习项目带来的额外的硬件和软件复杂性。