Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm kd-Tree是K-means聚类的替代方法吗?_Algorithm_Computer Vision_Cluster Analysis_K Means_Kdtree_Hierarchical Clustering - Fatal编程技术网

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

Algorithm kd-Tree是K-means聚类的替代方法吗?,algorithm,computer-vision,cluster-analysis,k-means,kdtree,hierarchical-clustering,Algorithm,Computer Vision,Cluster Analysis,K Means,Kdtree,Hierarchical Clustering,我正在进行弓目标检测,我正在进行编码阶段。我见过一些在编码阶段使用kd-Tree的实现,但大多数文章都认为K-means集群是一种可行的方法 这两者的区别是什么 kd-treeAFAIK用于标记阶段,当在大量组(成百上千)上进行聚类时,其速度要快得多,然后是简单地获取每个组的所有距离的argmin的简单方法,k-meanshttp://en.wikipedia.org/wiki/K-means_clustering是实际的聚类算法,它的速度很快,但并不总是非常精确,一些实现返回组,而另一些实现返

我正在进行弓目标检测,我正在进行编码阶段。我见过一些在编码阶段使用
kd-Tree
的实现,但大多数文章都认为
K-means
集群是一种可行的方法


这两者的区别是什么

kd-tree
AFAIK用于标记阶段,当在大量组(成百上千)上进行聚类时,其速度要快得多,然后是简单地获取每个组的所有距离的argmin的简单方法,k-means
http://en.wikipedia.org/wiki/K-means_clustering
是实际的聚类算法,它的速度很快,但并不总是非常精确,一些实现返回组,而另一些实现返回训练数据集的组和标签,这是我通常与对象检测结合使用的,k-means用于量化描述符。kd树可用于搜索带或不带量化的描述符。每种方法都有其优缺点。特别是,当描述符维数超过20时,kd树并不比暴力搜索好多少。

kd树
K-means算法是两种不同类型的聚类方法

以下是几种类型的聚类方法:

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

[更新]:


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

我使用的是SIFT描述符,128维,所以我想在我的编码阶段,我应该只使用k-means进行量化?我已经通过使用词汇树的分层k-means聚类和每个级别的蛮力搜索获得了很好的性能。如果我需要进一步提高性能,我会考虑使用局部敏感哈希或kd树,并通过PCA进行降维。我推荐使用FLANN。它将为您进行分析,并为您提供适合您特定数据集和内存/性能需求的最佳算法。请看@DonReba,我想做分层k-means。你用什么软件来做这件事?@TyanTowers,只需为
k-means
打开CV。其余的我自己用C++来做,所以为了澄清,你会用KFED来量化你的图像描述符。然后你会用这些描述符做一个kdtree,这样你就可以在对象识别中搜索最近的邻居了?@mugetsu
然后你会用这些描述符做一个kdtree,我已经做了一些基准测试,在处理大量组时,kdtree将我所有的优化都抛到了九霄云外。。。我建议您只运行一些测试:)那么通过使用kdtree,您是否跳过直方图和svm?我不知道这是怎么回事@mugetsu检查我找不到一个更简单的教程…更新上面的链接:有更多的聚类方法比这三个。GMM并不是一种真正的聚类方法,尽管我想你也可以这样使用它。K-means根本不使用标准差,它基于均值和Voronoi细分。当然,还有更多的聚类方法。在kmeans中,对象通过每个簇中的最小标准偏差及其计算的平均值进行选择,所以我也提到了标准偏差。gmm可以作为一种聚类方法,例如,使用三个高斯分布,每个对象都属于它们,并比较它们的概率,就像使用三种平均值的kmeans一样。我只是质疑在问题是“方法a和方法B之间的区别是什么”时提到另一种聚类算法的有用性,考虑到存在如此多的聚类算法,关于k-均值:对象是通过到每个均值的最小距离来选择的(如Voronoi细分),而不是通过标准差。标准偏差从未计算或暗示过。我不想说正在计算的标准偏差(我写错了)。我的意思是这意味着计算,在获得的集群中,每个对象在其他对象中的方差/标准偏差最小。