1

目前我尝试从可扩展的机器学习库 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。

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

4

1 回答 1

1

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

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

许多加速 k-means 的策略涉及对输入数据集进行采样并在输入点的子集上运行 k-means。因为 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 更便宜。

于 2014-09-11T15:56:57.837 回答