Matlab中的聚类
Posted
技术标签:
【中文标题】Matlab中的聚类【英文标题】:Clustering in Matlab 【发布时间】:2014-09-16 21:54:57 【问题描述】:您好,我正在尝试使用链接()进行集群。这是我正在尝试的代码..
Y = pdist(data);
Z = linkage(Y);
T = cluster(Z,'maxclust',4096);
我收到如下错误
The number of elements exceeds the maximum allowed size in
MATLAB.
Error in ==> linkage at 135
Z = linkagemex(Y,method);
数据大小为 56710*128。如何将代码应用于小块数据,然后以最佳方式合并这些集群?或任何其他解决问题的方法。
【问题讨论】:
【参考方案1】:Matlab 可能无法使用该算法对这么多对象进行聚类。
他们很可能在实现中使用了距离矩阵。 56710 个对象的成对距离矩阵需要 56710*56709/2=1,607,983,695 个条目,或大约 12 GB 的 RAM;很可能还需要一份工作副本。很有可能默认的 Matlab 数据结构并没有准备好处理这么多的数据(而且您也不想等待算法完成;可能这就是它们“只允许”一定数量的原因)。
尝试使用子集,看看它的扩展性如何。如果您使用 1000 个实例,它是否有效?计算需要多长时间?如果增加到2000,需要多长时间?
【讨论】:
如果您改变数据集大小,运行时和内存使用量如何扩展?每次达到 56k 是否现实?因为众所周知,层次聚类的扩展性很差。以上是关于Matlab中的聚类的主要内容,如果未能解决你的问题,请参考以下文章
Pyspark Dataframes:创建要在 python 中的聚类中使用的特征列