machine-learning - ELKI 可以处理多大的数据集?

标签 machine-learning cluster-analysis data-mining dbscan elki

我想使用 ELKI 中的 OPTICS 算法对 100,000 个点进行聚类。对于这个点集,我有一个包含大约 50 亿个条目的上三角距离矩阵。按照ELKI想要的矩阵格式,大约需要100GB的内存。我想知道 ELKI 是否可以处理这种数据负载?谁能确认一下您以前是否做过这项工作?

最佳答案

我经常使用ELKI,积分有10万,最高可达1000万。

但是,为了加快速度,您应该使用索引

由于明显的原因,任何基于密集矩阵的方法都将达到最佳规模O(n^2) ,并且需要 O(n^2)内存。这就是为什么我无法使用 R 或 Weka 或 scipy 处理这些数据集。他们通常首先尝试计算完整的距离矩阵,要么中途失败,要么中途耗尽内存,要么因负分配大小而失败(Weka,当您的数据集溢出 2^31 正整数时,即大约 46k对象)。

在二进制格式中,采用浮点精度,ELKI 矩阵格式应约为 100000*999999/2*4 + 4字节,也许添加另外 4 个字节作为大小信息。这是20 GB。 如果使用“易于使用”的ascii格式,那么确实会更多。但如果您使用 gzip 压缩,它最终可能会具有相同的大小。 gzip 通常将此类数据压缩到原始大小的 10-20%。根据我的经验,gzip 压缩的 ascii 可以小到二进制编码的 double 。 二进制格式的主要好处是它实际上驻留在磁盘上,并且内存缓存将由操作系统处理。

无论哪种方式,我建议首先不要计算距离矩阵

因为如果您决定从 10 万增加到 100 万,原始矩阵将增长到 2 TB,而当您增加到 1000 万时,原始矩阵将达到 200 TB。如果你想要 double ,那就加倍。

如果您使用距离矩阵,您的方法最多O(n^2) ,因此没有规模。首先避免计算所有成对距离是一个重要的速度因素。

我对所有内容都使用索引。对于 kNN 或半径限制方法(对于 OPTICS,使用 epsion 参数使索引有效!选择一个低 epsilon!),如果您要重复需要它们,您可以预先计算这些查询一次。

在我经常使用的数据集上,具有 75k 个实例和 27 个维度,存储预先计算的 101 个最近邻 + 关系( double )的文件为 81 MB(注意:这可以视为稀疏相似性矩阵)。通过使用索引来预先计算该缓存,计算只需几分钟;然后我可以在 108 毫秒内运行大多数基于 kNN 的算法,例如在这个 75k 数据集上运行 LOF(+262 毫秒用于加载 kNN 缓存 + 解析原始输入数据 2364 毫秒,总运行时间为 3秒;以解析 double 值为主)。

关于machine-learning - ELKI 可以处理多大的数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18730332/

相关文章:

algorithm - 最近邻的一些快速近似是什么?

machine-learning - 根据相似性(相等性)对独特的数据集进行聚类

hadoop - 使用MapReduce进行聚类的设计

python-3.x - ValueError : bad input shape (37533, 3) fit() 方法中的梯度 boost 错误

machine-learning - Caffe 中的目录结构和标签

python - DBSCAN 中的替代相似性度量?

java - K-means 聚类算法运行时间和复杂度

python - 在 train_test_split 中使用 'stratify' 没有什么区别。它是干什么用的?

python - Tensorflow:使用clip_by_norm或clip_by_global_norm时如何确定clip_norm的值?

r - 如何扩展 heatmap.2 中的树状图