打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
近似最近邻问题相关算法总结

http://blog.csdn.net/guoyilin/article/details/39668183

2014

当数据个数比较大的时候,线性搜索寻找KNN的时间开销太大,而且需要读取所有的数据在内存中,这是不现实的。因此,实际工程上,使用近似最近邻也就是ANN问题。

这里总结下常见的使用方法和相关的论文。每个方法都会有自己的优点。

第一, Tree-Based Method, 筛选候选子集。

1. Vantage-Point Tree

    Paper: http://www.pnylab.com/pny/papers/vptree/vptree/

    算法的代码和说明:http://stevehanov.ca/blog/index.php?id=130

    实际使用VP tree中可能回溯会比较多,特别是nearest neighbor's distance is not very small compare with farthest distance in all data.

2. K-d Tree

    kd tree 适用于维度比较低的情况,因为在维度高的情况下,kdtree的深度将会非常深,这样的tree的效率太低, 存储空间也大。

3. Randomized K-d tree

    见lowe 的 FLANN算法,http://www.cs.ubc.ca/research/flann/, 思想大概是用forest的思想来提升kdtree的recall

4. Random Projection Tree

    采用随机投影方法将每个节点中的数据投影到一维子空间,在子空间中进行划分。该方法实践中效果比较好。算法性能比较优秀。

    paper: Large-scale music similarity search with spatial trees

    实验发现投影方向的选择可以限制在-1, 0,1之间,在保证效果的情况下,进一步缩小投影方向的存储空间。

第二,lsh方法

根据使用的距离度量方法,选择合适的lsh。 要注意在保证recall的情况下,该算法可能几乎是线性搜索。

第三,Product Quantization

see paper: Product quantization for nearest neighbor search.

方法比较巧妙,后续有不少论文,主要思想是在子空间中进行k-means,这样划分的空间比较密集,利用k-means中心点能够对数据进行较好的近似,能够有效压缩数据。缺点是query的的时候,需要和每个数据进行比较。 当然论文提出可以先筛选初步的子集,在子集中使用该方法。实验效果比较该算法性能还不错。


可能还有更多的方法谈论该问题。后续补上。




本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
机器学习开放课程(三):分类、决策树和K近邻
一种基于配对矩阵改进的LE分类算法
局部敏感哈希(LSH)
机器学习笔记 第二章 k最近邻分类算法
四大机器学习降维算法:PCA、LDA、LLE、Laplacian Eigenmaps
各种聚类算法的比较
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服