- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嗨,我用kmeans函数对一些数据进行了聚类,并存储了它作为输出产生的聚类中心。现在,我在Mat对象中有了一组新的 vector ,并且想知道每个 vector 所属的簇。是否有简单的方法做到这一点?或者我应该只计算每个 vector 在所有中心的欧几里得距离,然后选择最接近的群集。
如果我应该选择第二种方法,是否有任何效率方面的考虑才能使其快速发展?
最佳答案
您似乎有兴趣使用在初始数据集上运行K-Means的结果来执行某种类型的集群分配,对吗?
您可以将新观察值分配给最接近的均值。不幸的是,使用K均值,您对每个群集的形状或大小一无所知。例如,考虑一种情况,其中新 vector 与两个均值等距(或大致等距)。在这种情况下您要做什么?您是否对其中一个集群进行了艰苦的分配?
在这种情况下,最好查看组成每个群集的原始数据,并进行某种类型的K最近邻居分配(http://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm)。例如,可能会发现,尽管新 vector 与两个不同的聚类中心大致等距,但它更接近于一个聚类中的数据(表明它可能属于该聚类)。
作为K-Means的替代方法,如果您使用诸如高斯混合与EM混合之类的方法,则不仅会拥有一组聚类中心(就像对K-Means所做的那样),而且还会有一个方差,描述了聚类的大小。对于每个新观察值,您都可以计算出它属于每个簇的概率,而无需重新访问每个簇中的数据(因为将其烘焙到MoG EM模型中)。
关于opencv - 使用Kmeans功能的输出中心对数据进行聚类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18246319/
我是一名优秀的程序员,十分优秀!