在大型数据集中查找关联

时间:2013-04-23 17:51:13

标签: algorithm matlab matrix large-data

我有一个庞大的数据集。我们正在讨论100个带有121x145x121单元的3D矩阵。任何单元格的值都在0到1之间,我需要一种方法根据它们的相关性聚类这些单元格。问题是数据集对于我所知道的任何算法都太大了;即使只使用它的一半(任何矩阵是大脑的MRI扫描),我们有大约4000亿对。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

作为第一步,我很想尝试K-means clustering

这在Matlab统计工具箱中显示为函数kmeans

在这个算法中,你最终只计算K个当前中心和数据之间的距离,所以对的数量比比较所有选择要小得多。

在Matlab中,我还发现操作的速度可能完全取决于矩阵的组织(由于内存缓存和优化问题)。我建议转换你的3d矩阵,使列(在内存中保存在一起)对应于特定单元格的100个值。

可以使用permute function完成此操作。

答案 1 :(得分:0)

尝试加权K-means++聚类算法。在每个点为所有100个输入矩阵创建一个值和的矩阵,以产生一个“灰度”矩阵,然后调整K-means ++算法以使用加权的(wt)值。

在初始化阶段,使用加权概率分布随机选择一个新数据点作为新中心,其中选择点x的概率与D(X)^ 2 x wt ^ 2成比例。

assignment step应该没问题,但在更新步骤中计算质心时,请调整公式以考虑权重。 (或使用相同的公式,但每个点都使用wt次)。

您可能无法使用库函数执行此操作,但您可以使用的点数和矩阵数量减少100倍。