具有非常大矩阵的 K 均值

Posted

技术标签:

【中文标题】具有非常大矩阵的 K 均值【英文标题】:K-means with really large matrix 【发布时间】:2011-09-16 09:00:33 【问题描述】:

我必须在一个非常大的矩阵(大约 300.000x100.000 个值,超过 100Gb)上执行 k 均值聚类。我想知道我是否可以使用 R 软件来执行此操作或 weka。 我的计算机是一个多处理器,具有 8Gb 的内存和数百 Gb 的可用空间。

我有足够的空间进行计算,但加载这样的矩阵似乎是 R 的问题(我不认为使用 bigmemory 包会帮助我,大矩阵会自动使用我的所有 RAM,如果不够的话,我会使用我的交换文件空间)。

所以我的问题是:我应该使用什么软件(最终与其他一些软件包或自定义设置相关联)。

谢谢你帮助我。

注意:我使用的是 linux。

【问题讨论】:

使用 R 可能会遇到的问题是,将此数据存储在矩阵中会将索引限制为最大整数值 (2147483647),并且您拥有的元素不止于此。这不是内存限制,而是使用整数来索引数据的限制。你可以对矩阵进行采样吗? 为什么要一次聚集所有 300,000 个对象?为什么不抽取一个较小的样本,将其聚类,然后将剩余的对象分配到它们最近的聚类中? 您要查找多少个集群?是否有已知聚类的样本用于验证? 【参考方案1】:

我保留link(这对特定用户可能有用)但我同意 Gavin 的评论! 要在大数据上执行 k-means 聚类,您可以使用在 R 的 Revolution R Enterprise 专有实现中实现的 rxKmeans 函数(我知道这可能是个问题);这个函数似乎能够管理那种数据。

【讨论】:

在 *** 上,使用站外链接的简单答案充其量是不受欢迎的。如果该页面移动或变得不可用会发生什么?尝试在您的答案中包含足够的信息,以便它独立存在 - 一定要确定想法的来源,但不要只在答案中使用链接。【参考方案2】:

必须是 K-means 吗?另一种可能的方法是首先将您的数据转换为网络,然后应用图聚类。我是MCL 的作者,这是一种在生物信息学中经常使用的算法。链接到的实现应该很容易扩展到具有数百万个节点的网络 - 您的示例将有 300K 节点,假设您有 100K 属性。使用这种方法,数据将在数据转换步骤中自然地被修剪——这一步很可能成为瓶颈。你如何计算两个向量之间的距离?在我处理过的应用程序中,我使用了 Pearson 或 Spearman 相关性,而 MCL 随附的软件可以有效地对大规模数据执行这种计算(它可以利用多个 CPU 和多台机器)。

数据大小仍然存在问题,因为大多数聚类算法要求您至少执行一次所有成对比较。你的数据真的存储为一个巨大的矩阵吗?输入中有很多零吗?或者,您是否有丢弃较小元素的方法?您是否可以访问多台机器来分发这些计算?

【讨论】:

micans +1 MCL,如果可以的话 +1 “你如何计算两个向量之间的距离?” - 重要的。 Delphine,第一次对快速运行的样本训练集进行实验,看看它们是如何聚类的。 +1 不是为了互惠,而是为了更小的样本训练集——非常重要。 Delphine,如果你能多参与一点就好了。我想知道您的数据集是否真的最好被描述为单位,每个单位都有 100K 属性——因此我的问题是它是否是稀疏的(零丰富)。如果是这样的话,向量之间的距离实际上可能更类似于集合之间的重叠类型距离,并且在我看来加强了基于网络的方法的情况。【参考方案3】:

因为我们对数据一无所知,也不知道提问者的目标 为此,只需几个通用链接:I. Guyon's video lectures — 还有许多论文和书籍。feature selection on stats.stackexchange

【讨论】:

【参考方案4】:

查看 Mahout,它将在大型数据集上执行 k 均值:

http://mahout.apache.org/

【讨论】:

以上是关于具有非常大矩阵的 K 均值的主要内容,如果未能解决你的问题,请参考以下文章

可视化 K 均值结果

具有选定初始中心的 k 均值

如何确定 k 均值何时收敛于 tf idf?

k均值和kmeans的区别

聚类分析K均值算法讲解

三种聚类方法:层次、K均值、密度