3

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

4

2 回答 2

4

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

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

在此算法中,您最终只计算 K 个当前中心与数据之间的距离,因此对的数量比比较所有选择要少得多。

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

这可以通过permute 函数来完成。

于 2013-04-23T18:24:20.453 回答
0

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

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

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

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

于 2013-04-24T05:27:51.857 回答