kd-Tree是K-means聚类的替代方案吗?

6
我正在使用BOW目标检测,并且正在进行编码阶段的工作。我看到一些实现在编码阶段使用了kd-Tree,但大多数资料建议使用K-means聚类。这两者有什么区别?
3个回答

6

在目标检测中,k-means用于量化描述符。kd-tree可用于搜索具有或不具有量化的描述符。每种方法都有其优缺点。具体而言,当描述符维数超过20时,kd-tree并不比暴力搜索更好。


我正在使用SIFT描述符,128维,因此我猜在我的编码阶段中我应该只使用k-means进行量化? - mugetsu
1
我曾经使用层次k-means聚类与词汇树以及每个级别的暴力搜索,取得了很好的性能。如果我需要进一步提高性能,我会考虑使用局部敏感哈希或结合PCA的kd树进行降维。 - Don Reba
我推荐使用FLANN。它可以为您进行分析,并为您提供最适合您特定数据集和内存/性能需求的最佳算法。请参见http://www.cs.ubc.ca/~mariusm/index.php/FLANN/FLANN。 - rkellerm
@DonReba,我想做分层k-means。您用什么软件来完成这个任务? - TyanTowers
@TyanTowers,只用了OpenCV做k-means,剩下的都是我自己用C++完成的。 - Don Reba

5

kd树通常用于标签阶段,当聚类的组数很大时,例如数百甚至数千个,比起简单地对每个组的所有距离取argmin的naive方法,它会更快。 K均值聚类是实际的聚类算法,它很快但不总是很精确,有些实现返回组,而另一些返回训练数据集的组和标签,这是我通常使用 http://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.cKDTree.htmlhttp://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.vq.kmeans2.html


只是为了澄清一下,您将使用kmeans对图像描述符进行量化。然后,您将使用这些描述符创建一个kdtree,以便在对象识别中搜索最近的邻居? - mugetsu
@mugetsu “然后你会用这些描述符来创建一个kd树”,基本上,我已经进行了一些基准测试,当处理大量组时,kd树的性能远远超过了我所有的优化方法...我建议你只是运行一些测试 :) - Samy Vilar
通过使用kdtree,你是不是跳过了直方图和支持向量机?我对这个工作方式感到困惑。https://dev59.com/nmXWa4cB1Zd3GeqPJx9g - mugetsu
@mugetsu 请查看 http://www.cs.brown.edu/courses/cs143/results/proj3/sungmin/ 我找不到更简单的教程了... - Samy Vilar
1
更新上面的链接:http://cs.brown.edu/courses/cs143/2011/results/proj3/sungmin/ - saurabheights

2

kd-TreeK-means算法是两种不同类型的聚类方法。

以下是几种聚类方法:

  • kd-Tree是一种方法(基于中位数)。
  • K-means是一种基于均值的聚类方法。
  • GMM(高斯混合模型)是一种基于概率的聚类方法(软聚类)。
  • 等等。

[更新]:

通常,聚类方法有两种类型,软聚类和硬聚类。像GMM这样的概率聚类属于软聚类类型,通过概率将对象分配到聚类中,而其他聚类方法则是绝对地将对象分配到一个聚类中。


除了这三种方法,还有许多其他的聚类方法。虽然我猜你可以将GMM用作聚类方法,但它实际上并不是一种聚类方法。K-means根本不使用标准差,它是基于均值和Voronoi图案的。 - Cris Luengo
当然,还有许多其他的聚类方法。在kmeans中,对象通过每个簇中最小标准差与其计算出的平均值进行选择,因此我也提到了标准差。而GMM可以作为一种聚类方法,例如使用三个高斯分布,将对象归属于它们中的每一个,并比较它们的概率,就像kmeans使用三个平均值一样。 - Benyamin Jafari
我刚刚质疑了在问题是“方法A和B之间的区别是什么”时提及另一个聚类算法的有用性,考虑到存在如此多的聚类算法,而且已经存在试图收集它们所有的列表。 (https://en.wikipedia.org/wiki/Category:Cluster_analysis_algorithms) - Cris Luengo
关于k-means:对象是通过到每个均值的最小距离(如Voronoi tessellation)来选择的,而不是通过标准差。标准差从未被计算或暗示。 - Cris Luengo
我不想说标准差被计算了(我写错了)。我的意思是,计算出的平均值在获得的聚类中,每个对象在其他对象中具有最小方差/标准差。 这是关于O'Reilly无监督学习书中GMM的内容。 - Benyamin Jafari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接