【问题标题】:Is kd-Tree an alternative to K-means clustering?kd-Tree 是 K-means 聚类的替代方案吗?
【发布时间】:2012-06-20 22:28:12
【问题描述】:

我正在处理 BOW 对象检测,并且正在编码阶段。我已经看到一些在编码阶段使用kd-Tree 的实现,但大多数著作都建议K-means 集群是要走的路。

两者有什么区别?

【问题讨论】:

    标签: algorithm computer-vision cluster-analysis k-means kdtree


    【解决方案1】:

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

    【讨论】:

    • 我正在使用 SIFT 描述符,128 维,所以我想在我的编码阶段我应该只使用 k-means 进行量化?
    • 我已经获得了出色的性能,仅使用带有词汇树的分层 k-means 聚类和每个级别的蛮力搜索。如果我需要进一步提高性能,我会考虑使用局部敏感哈希或 kd-trees 并通过 PCA 结合降维。
    • 我推荐 FLANN。它将为您进行分析,并为您提供适合您特定数据集和内存/性能需求的最佳算法。见cs.ubc.ca/~mariusm/index.php/FLANN/FLANN
    • @DonReba,我想做分层k-means。你用什么软件来做这个的?
    • @TyanTowers,只是用于k-means 的 OpenCV。其余的都是我自己用 C++ 完成的。
    【解决方案2】:

    kd-tree AFAIK 用于标记阶段,它的速度要快得多,当聚类大量组时,如果不是数千组,数百甚至数千组,然后简单地取每个组的所有距离的 argmin,k -意思是http://en.wikipedia.org/wiki/K-means_clustering 是实际的聚类算法,虽然并不总是很精确,但它的速度很快,一些实现返回组,而另一些实现返回组和训练数据集的标签,这就是我通常使用的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

    【讨论】:

    • 所以为了澄清,您将使用 kmeans 来量化您的图像描述符。然后你会用这些描述符做一个kdtree,这样你就可以在对象识别中搜索最近的邻居?
    • @mugetsu Then you would make a kdtree out of those descriptors 差不多,我已经完成了一些基准测试,并且当与大量组一起工作时,kdtree 将我所有的优化都从水中吹了出来......我建议你简单地运行一些测试:)
    • 那么通过使用 kdtree,您是否跳过了直方图和 SVM?我对这是如何工作的感到困惑。 stackoverflow.com/questions/11091972/…
    • @mugetsu 查看cs.brown.edu/courses/cs143/results/proj3/sungmin 我找不到更简单的教程...
    【解决方案3】:

    kd-Tree和K-means算法是两种不同的聚类方法。

    这里有几种聚类方法如下:

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

    [更新]:

    一般有两种聚类方法,软聚类和硬聚类。像 GMM 这样的概率聚类是软聚类类型,将对象分配给具有概率的聚类,而其他的则是硬聚类,将对象绝对分配给聚类。

    【讨论】:

    • 聚类方法远不止这三种。 GMM 并不是真正的聚类方法,尽管我猜你可以这样使用它。 K-means 根本不使用标准差,它基于均值和 Voronoi 细分。
    • 是的,当然,还有更多的聚类方法。在 kmeans 中,对象通过每个集群中的最小标准偏差及其计算平均值进行选择,所以我也提到了标准偏差。并且 gmm 可以作为一种聚类方法,例如使用三个高斯分布,其中对象属于每个对象,并像 kmeans 一样将它们的概率与三种均值进行比较。
    • 我只是质疑当问题是“方法 A 和 B 之间有什么区别”时提及另一种聚类算法的有用性,考虑到存在如此多的聚类算法,there already exist lists that try to collect them all。跨度>
    • 关于 k-means:对象是通过与每个均值的最小距离(如在 Voronoi tessellation 中)而不是标准差来选择的。从不计算或暗示标准差。
    • 我不想说正在计算的std-dev(我写错了)。我的意思是计算的平均值,并且在获得的集群中,每个对象在其他对象之间具有最小方差/标准差。 And this is about the GMM in O'Reilly book about unsupervised learning.
    猜你喜欢
    • 2011-12-07
    • 2015-04-11
    • 1970-01-01
    • 2011-08-13
    • 2013-08-08
    • 2013-02-14
    • 2018-01-14
    • 2014-04-13
    • 2015-11-20
    相关资源
    最近更新 更多