2011-06-16 55 views
9

我必须对一个真正巨大的矩阵(大约300.000x100.000的值超过100Gb)执行k均值聚类。我想知道我是否可以使用R软件来执行此操作或Weka。 我的电脑是一个8Gb内存和数百GB可用空间的多处理器。具有真正大矩阵的K-means

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

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

感谢您的帮助。

注:我使用linux。

+0

你很可能会在运行有R这样的问题:存储在矩阵这个数据将索引限制为最大整数值(2147483647),并且您有更多的元素。这不是内存限制,而是使用整数为数据建立索引的限制。你可以采样矩阵吗? – Noah 2011-06-16 13:37:33

+1

为什么你想要一次聚集所有300,000个物体?为什么不采取更小的样本,将其聚类,然后将剩余物体分配到最近的群集? – 2011-06-16 14:12:34

+0

你在寻找多少个集群?是否有已知聚类的样本进行验证? – denis 2011-06-17 16:00:35

回答

7

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

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

+1

micans +1 MCL,+1如果我可以为“如何计算两个向量之间的距离?” - 重要。 Delphine,第一个快速运行的样本训练集的实验,看看它们是如何聚类的。 – denis 2011-06-17 13:39:47

+0

+1不是为了回报,而是针对较小的样本训练集 - 非常重要。 Delphine,如果你更多地参与,这将是很好的。我想知道你的数据集是否真的被最好地描述为单位,每个单位有100K的属性 - 因此我的问题是它是否稀疏(零富)。如果是这样的话,矢量之间的距离实际上可能更类似于集合之间的重叠类型距离,并且在我看来加强了基于网络的方法的情况。 – micans 2011-06-17 22:35:13

1

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

+6

在StackOverflow上,使用网站链接的简单答案在最好的情况下是不被接受的。如果该页面移动或不可用,会发生什么情况?尽量在答案中包含足够的信息,以便它可以独立存在 - 通过一切手段来确定想法来自哪里,但不要在答案中使用链接。 – 2011-06-16 14:11:32

0

退房亨利马乌,它会做k表示在一个大的数据集:

http://mahout.apache.org/

+0

如果您没有注意到:他标记了“mahout”这个问题...... – 2012-09-15 09:52:55