0

嗨,我已经使用 kmeans 函数对一些数据进行了聚类,并将其生成的聚类中心存储为输出。现在我在 Mat 对象中有一组新的向量,想知道每个向量属于哪个簇。有没有一种简单的方法可以做到这一点,或者我应该只计算每个向量与所有中心的欧几里德距离并选择离它最近的集群。

如果我应该采用第二种方式,是否有任何效率考虑可以使其快速?

4

1 回答 1

1

您似乎有兴趣使用在初始数据集上运行 K-Means 的结果来执行某种类型的集群分配,对吧?

您可以将新观察值分配给最接近的平均值。不幸的是,使用 K-Means,您对每个集群的形状或大小一无所知。例如,考虑一个新向量与两个均值等距(或大致等距)的场景。在这种情况下你会做什么?您是否对其中一个集群进行了艰苦的分配?

在这种情况下,最好实际查看包含每个集群的原始数据,并进行某种类型的 K-最近邻分配 ( http://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm )。例如,结果可能是,虽然新向量与两个不同的集群中心的距离大致相等,但它更接近来自其中一个集群的数据(表明它可能属于该集群)。

作为 K-Means 的替代方案,如果您使用类似混合高斯与 EM 的方法,您不仅会有一组集群中心(就像您使用 K-Means 所做的那样),而且还有一个方差,描述了集群的大小. 对于每个新观察,您可以计算它属于每个集群的概率,而无需重新访问来自每个集群的数据(因为它已融入 MoG EM 模型)。

于 2013-11-20T17:14:45.163 回答