在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描述符,并根据这些描述符的分类,我将分类图像)
感谢。
答案 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集群对其进行聚类。每行都是您原始矩阵之一,因此您可以得到您所需要的