我正在使用BOW目标检测,并且正在进行编码阶段的工作。我看到一些实现在编码阶段使用了kd-Tree,但大多数资料建议使用K-means聚类。这两者有什么区别?
在目标检测中,k-means用于量化描述符。kd-tree可用于搜索具有或不具有量化的描述符。每种方法都有其优缺点。具体而言,当描述符维数超过20时,kd-tree并不比暴力搜索更好。
kd树
通常用于标签阶段,当聚类的组数很大时,例如数百甚至数千个,比起简单地对每个组的所有距离取argmin的naive方法,它会更快。 K均值聚类
是实际的聚类算法,它很快但不总是很精确,有些实现返回组,而另一些返回训练数据集的组和标签,这是我通常使用 http://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.cKDTree.html与http://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.vq.kmeans2.html。
kd-Tree
和K-means
算法是两种不同类型的聚类方法。
以下是几种聚类方法:
kd-Tree
是一种层次聚类方法(基于中位数)。K-means
是一种基于均值的聚类方法。GMM
(高斯混合模型)是一种基于概率的聚类方法(软聚类)。[更新]:
通常,聚类方法有两种类型,软聚类和硬聚类。像GMM这样的概率聚类属于软聚类类型,通过概率将对象分配到聚类中,而其他聚类方法则是绝对地将对象分配到一个聚类中。
k-means
,剩下的都是我自己用C++完成的。 - Don Reba