高维数据的快速最近邻
来源:互联网 发布:软件架构师 英文 编辑:程序博客网 时间:2024/09/21 09:02
高维数据的快速最近邻算法FLANN
1. 简介
在计算机视觉和机器学习中,对于一个高维特征,找到训练数据中的最近邻计算代价是昂贵的。对于高维特征,目前来说最有效的方法是 the randomized k-d forest和the priority search k-means tree,而对于二值特征的匹配 multiple hierarchical clusteringtrees则比LSH方法更加有效。
目前来说,fast library for approximate nearest neighbors (FLANN)库可以较好地解决这些问题。
2. 快速近似NN匹配(FAST APPROXIMATE NN MATCHING)
2.1 随机k-d树算法(The Randomized k-d TreeAlgorithm)
a. Classick-d tree
找出数据集中方差最高的维度,利用这个维度的数值将数据划分为两个部分,对每个子集重复相同的过程。
参考http://www.cnblogs.com/eyeszjwang/articles/2429382.html。
b. Randomizedk-d tree
建立多棵随机k-d树,从具有最高方差的N_d维中随机选取若干维度,用来做划分。在对随机k-d森林进行搜索时候,所有的随机k-d树将共享一个优先队列。
增加树的数量能加快搜索速度,但由于内存负载的问题,树的数量只能控制在一定范围内,比如20,如果超过一定范围,那么搜索速度不会增加甚至会减慢。
2.2 优先搜索k-means树算法(The Priority Search K-MeansTree Algorithm)
随机k-d森林在许多情形下都很有效,但是对于需要高精度的情形,优先搜索k-means树更加有效。 K-means tree 利用了数据固有的结构信息,它根据数据的所有维度进行聚类,而随机k-d tree一次只利用了一个维度进行划分。
2.2.1 算法描述
算法1 建立优先搜索k-means tree:
(1) 建立一个层次化的k-means 树;
(2) 每个层次的聚类中心,作为树的节点;
(3) 当某个cluster内的点数量小于K时,那么这些数据节点将做为叶子节点。
算法2 在优先搜索k-means tree中进行搜索:
(1) 从根节点N开始检索;
(2) 如果是N叶子节点则将同层次的叶子节点都加入到搜索结果中,count += |N|;
(3) 如果N不是叶子节点,则将它的子节点与query Q比较,找出最近的那个节点Cq,同层次的其他节点加入到优先队列中;
(4) 对Cq节点进行递归搜索;
(5) 如果优先队列不为空且 count<L,那么从取优先队列的第一个元素赋值给N,然后重复步骤(1)。
聚类的个数K,也称为branching factor 是个非常主要的参数。
建树的时间复杂度 = O( ndKI ( log(n)/log(K) )) n为数据点的总个数,I为K-means的迭代次数。搜索的时间复杂度 = O( L/K * Kd * ( log(n)/(log(K) ) ) = O(Ld ( log(n)/(log(K) ) )。
2.3 层次聚类树 (The Hierarchical ClusteringTree)
层次聚类树采用k-medoids的聚类方法,而不是k-means。即它的聚类中心总是输入数据的某个点,但是在本算法中,并没有像k-medoids聚类算法那样去最小化方差求聚类中心,而是直接从输入数据中随机选取聚类中心点,这样的方法在建立树时更加简单有效,同时又保持多棵树之间的独立性。
同时建立多棵树,在搜索阶段并行地搜索它们能大大提高搜索性能(归功于随机地选择聚类中心,而不需要多次迭代去获得更好的聚类中心)。建立多棵随机树的方法对k-d tree也十分有效,但对于k-means tree却不适用。
3. 参考文献
(1) ScalableNearest Neighbor Algorithms for High Dimensional Data. Marius Muja, Member,IEEE and David G. Lowe, Member, IEEE.
(2) OptimisedKD-trees for fast image descriptor matching. Chanop Silpa-Anan, Richard Hartley.
(3) FastMatching of Binary Features. Marius Muja and David G. Lowe.
from:http://blog.csdn.net/jinxueliu31/article/details/37768995
- 高维数据的快速最近邻
- 高维数据的快速最近邻算法FLANN
- 高维数据的快速最近邻算法FLANN
- 海量高维数据与近似最近邻
- 快速最近邻匹配
- [课程设计] Medrank高维近似最近邻查询算法
- 数据挖掘:K最近邻(KNN)算法的java实现
- 数据挖掘:K最近邻(KNN)算法的java实现
- 数据挖掘:K最近邻(KNN)算法的java实现
- 快速近似最近邻搜索库 FLANN
- 高质量的快速的图像缩放 之 近邻取样插值和其速度优化
- 高质量的快速的图像缩放 上篇 近邻取样插值和其速度
- 高维空间中, cosine similarity 的 k-近邻 搜索
- 推荐系统-基于用户的最近邻协同过滤算法(MovieLens数据集)
- 推荐系统-基于用户的最近邻协同过滤算法(MovieLens数据集)
- 数据挖掘模型介绍之四:最近邻方法和基于记忆的推理
- (数据挖掘-入门-1)基于用户的协同过滤之最近邻
- 基础知识(六)KD-Tree快速最近邻搜索
- JVM调优总结 -Xms -Xmx -Xmn -Xss
- ffmpeg 最简单的水印功能
- 大数据如何改变经济咨询服务行业?
- JBoss启动常见的错误
- Google检索技巧
- 高维数据的快速最近邻
- 关于图像快速缩放算法,目前看到的最好的最清晰的一篇文章
- Spring用代码来读取properties文件
- layui 关闭弹出框
- matlab 结束imrect的等待
- MFC读取图片文件并获得图片头和数据
- 堆排序
- SpringBoot-04SpringBoot使用JdbcTemplate操作数据库
- tensorflow实现循环神经网络