您好我已经使用kmeans函数聚集了一些数据并存储了它作为输出生成的聚类中心。现在我在Mat对象中有一组新的向量,并想知道每个向量属于哪个簇。是否有一种简单的方法可以做到这一点,或者我应该只计算每个向量与所有中心的欧氏距离并选择群集最接近。
如果我应该采用第二种方式,是否有任何效率方面的考虑因素可以使其快速进行?
答案 0 :(得分:1)
您似乎对使用在初始数据集上运行K-Means的结果执行某种类型的群集分配感兴趣,对吗?
您可以将新观察分配到最接近的平均值。不幸的是,对于K-Means,您不了解每个群集的形状或大小。例如,考虑一个新向量与两个均值等距(或大致等距)的场景。你在这种情况下做了什么?你是否对其中一个集群进行了艰难的任务?
在这种情况下,实际上可能更好地查看包含每个群集的原始数据,并执行某种类型的K-Nearest Neighbor分配(http://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm)。例如,可能会发现,当新向量与两个不同的聚类中心大致等距时,它更接近来自其中一个聚类的数据(表明它可能属于该聚类)。
作为K-Means的替代方案,如果你使用像EM的高斯混合一样,你不仅会有一组聚类中心(和K-Means一样),还会有一个方差,描述大小集群对于每个新观察,您可以计算它属于每个集群的概率,而无需重新访问每个集群中的数据(因为它已经融入到MoG EM模型中)。