K表示在矩阵上而不是数据上进行聚类

时间:2014-01-05 12:53:34

标签: algorithm matlab k-means vlfeat

在matlab中,我可以像

那样聚类数据矩阵
[centers, assignments] = vl_kmeans(da, 3);

矩阵“da”中的所有数据点将被分为3个簇。

但是,我想要对完整的矩阵进行聚类,而不是数据点。我有数百个128 * 19的矩阵,我想将这些矩阵分成五组。

例如

如果有11个矩阵,如果是128 * 19,

聚类后,我应该能够弄明白:

Cluster 1: 1, 7, 11
Cluster 2: 2,4,6,8,10
Cluster 3: 3,5,9

即中心1将返回矩阵编号1,7,11

如何在matlab中实现这一目标? 任何帮助/指针都非常受欢迎。

(这些128 * 19矩阵包含图像的SIFT描述符,并根据这些描述符的分类,我将分类图像)

感谢。

1 个答案:

答案 0 :(得分:1)

只需将每个矩阵转换为128 * 19长度的矢量,并将“矩阵矢量”连接成一个巨大的矩阵,您可以像往常一样聚类。

修改

一个重要的注意事项 - kmeans 群集而非分类算法。 Kmeans可用于帮助分类以减少描述符的数量,但不能用作分类工具。

编辑2

简单的例子:

有3个矩阵,大小为2x2

matrix 1: 
[[1, 2], 
 [2, 3]]

matrix 2: 
[[4, 5], 
 [5, 6]]

matrix 3: 
[[7, 7], 
 [8, 9]]

您可以将它们转换为一个大小为3x4(3x(2 * 2))

的大矩阵
[ [1,2,2,3],
  [4,5,5,6],
  [7,7,8,9] ]

并使用您的matlab集群对其进行聚类。每行都是您原始矩阵之一,因此您可以得到您所需要的