我必须在一个非常庞大的矩阵上执行k-means聚类(大约300.000x100.000值超过100Gb)。我想知道我是否可以使用R软件来执行此操作或weka。 我的计算机是一个多处理器,具有8Gb的ram和数百Gb的可用空间。
我有足够的空间进行计算但加载这样的矩阵似乎是R的问题(我不认为使用bigmemory包会帮助我和大矩阵自动使用我的所有RAM然后我的交换文件,如果不够空间)。
所以我的问题是:我应该使用哪种软件(最终与其他软件包或自定义设置相关联)。
感谢您的帮助。
注意:我使用的是linux。
答案 0 :(得分:7)
它必须是K-means吗?另一种可能的方法是首先将数据转换为网络,然后应用图形聚类。我是MCL的作者,这是一种在生物信息学中经常使用的算法。链接到的实现应该很容易扩展到具有数百万个节点的网络 - 假设您有100K属性,您的示例将具有300K节点。使用这种方法,数据将在数据转换步骤中自然地被修剪 - 并且该步骤很可能成为瓶颈。你如何计算两个向量之间的距离?在我处理的应用程序中,我使用了Pearson或Spearman相关性,而MCL附带了软件,可以有效地对大规模数据执行此计算(它可以使用多个CPU和多台机器)。
数据大小仍然存在问题,因为大多数群集算法都要求您至少执行一次所有成对比较。您的数据是否真的存储为巨型矩阵?输入中有多个零吗?或者,你有办法丢弃较小的元素吗?您是否可以访问多台计算机以分发这些计算?
答案 1 :(得分:1)
我保留link(对特定用户有用)但我同意Gavin的评论! 要在大数据上执行k-means聚类,您可以使用在Revolution R Enterprise R专有实现中实现的rxKmeans函数(我知道这可能是个问题);这个功能似乎能够管理那种数据。
答案 2 :(得分:0)
因为我们对数据一无所知,也没有提问者的目标
对于它,只是几个一般链接:
I. Guyon's video lectures - 许多论文和书籍
feature selection on stats.stackexchange
答案 3 :(得分:0)
查看Mahout,它将对大型数据集执行k表示: