mlpack:内存不足错误

mlpack : out of memory error

本文关键字:错误 内存不足 mlpack      更新时间:2023-10-16

目前我尝试从可扩展的机器学习库mlpack中执行k-means聚类。

但当我在命令行执行bin/kmeans时,我总是收到错误。

error: arma::memory::acquire(): out of memory
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

输入文件的大小为7.4 GB。

你有什么建议吗?你知道适用于大型数据集的替代工具吗?

对于确切的答案,这里并不是一个简单的解决方案。问题是Armadillo(底层矩阵库)无法为您的输入数据分配足够的空间。

在大多数情况下,mlpack在RAM方面比MATLAB或R等其他工具更保守,但听起来你的数据集足够大,你的选择(除了像Kerrek建议的那样获得更多RAM的系统)有限。

许多加速k均值的策略包括对输入数据集进行采样并在输入点的子集上运行k均值。由于k-means对给定的初始质心非常敏感,因此这种采样策略通常用于选择初始质心。见Bradley和Fayyad,1998年:ftp://www.ece.lsu.edu/pub/aravena/ee7000FDI/Presentations/Clustering-Pallavi/Ref4_k-means.pdf

在您的情况下,只对可以加载到RAM中的数据子集运行k-means,并将其作为集群质心,这可能更容易,也足够准确。如果k相当小,而数据集中的点数量很大(也就是说,簇的数量远小于点的数量),那么这应该是一种合理的方法,当然也是一种比修改mlpack代码使其更保守的RAM或编写自己的程序使用mmap()或其他东西更简单的方法,并且比购买新的RAM更便宜。