ML_聚类之Nearest neighbor search

有这么一个问题,说我在看一篇文章,觉得不错,想要从书架的众多书籍中找相类似的文章来继续阅读,这该怎么办?

于是我们想到暴力解决法,我一篇一篇的比对,找出相似的

最近邻的概念很好理解,我们通过计算知道了每一篇文章和目标文章的距离,选择距离最小的那篇作为最相近的候选文章或者距离最小的一些文章作为候选文章集。

让我们转化成更数学的表述方式:

    

这其实就是一个衡量相似性的问题(•?How do we measure similarity?)要完成上述想法,我们需要解决两大难题:

  1. 文档的向量化表示
  2. 距离的计算

文档的表示方法,经常听到的就是词袋模型

词袋模型文本被看作是无序的词汇集合,忽略语法、词序,假设每个词的出现都是独立的,不依赖与其他词是否出现。这样就可以将一篇文章表示出一系列词构成的长向量,向量元素是词频。显然,词频方法没有充分考虑特有词汇的重要性,进而我们引入TF-IDF算法。

TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。

距离的计算,在相似性(http://www.cnblogs.com/sxbjdl/p/5708681.html)一文中有具体学习,此处不再啰嗦

OK 接下来解决下一问题 搜索算法•?How do we search over articles?

k近邻法的最简单实现是线性扫描,这时要计算输入实例与每一个训练实例的距离,当训练集很大时,计算非常耗时,这种方法是不可行的。为了提高k近邻搜索的效率,可以考虑使用特殊的结构存储训练数据,以减少计算距离的次数。

具体方法有很多,这里介绍kd树方法(详见http://blog.csdn.net/likika2012/article/details/39619687)

?KD-trees are cool, but…
-?Non-trivial to implement efficiently
-?Problems with high-dimensional data

故而,引出LSH

locality sensitive hashing(局部敏感哈希LSH )
参看博文http://blog.csdn.net/icvpr/article/details/12342159
低维小数据集我们可以通过线性查找找到相似点,海量高维数据也采用该方法效率十分低下(非常耗时)。为了解决该问题,我们采用一些类似索引的技术来加快查找(如最近邻查找、近似最近邻查找)。LSH是ANN(Approximate Nearest Neighbor)中的一类方法,其基本思想是:如果我们对原始数据进行一些hash映射后,我们希望原先相邻的两个数据能够被hash到相同的桶内,具有相同的桶号。对原始数据集合中所有的数据都进行hash映射后,我们就得到了一个hash table,这些原始数据集被分散到了hash table的桶内,每个桶会落入一些原始数据,属于同一个桶内的数据就有很大可能是相邻的,当然也存在不相邻的数据被hash到了同一个桶内。因此,如果我们能够找到这样一些hash functions,使得经过它们的哈希映射变换后,原始空间中相邻的数据落入相同的桶内的话,那么我们在该数据集合中进行近邻查找就变得容易了,我们只需要将查询数据进行哈希映射得到其桶号,然后取出该桶号对应桶内的所有数据,再进行线性匹配即可查找到与查询数据相邻的数据。
需要注意的是,LSH并不能保证一定能够查找到与query data point最相邻的数据,而是减少需要匹配的数据点个数的同时保证查找到最近邻的数据点的概率很大。
LSH的应用场景:查重、图像检索、音乐检索、指纹匹配

时间: 2024-10-27 02:52:44

ML_聚类之Nearest neighbor search的相关文章

K Nearest Neighbor 算法

K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法和K-Means算法不同的是,K-Means算法用来聚类,用来判断哪些东西是一个比较相近的类型,而KNN算法是用来做归类的,也就是说,有一个样本空间里的样本分成很几个类型,然后,给定一个待分类的数据,通过计算接近自己最近的K个样本来判断这个待分类数据属于哪个分类.你可以简单的理解为由那离自己最近的K个点来投

机器学习三--分类--邻近取样(Nearest Neighbor)

最邻近规则分类 K-Nearest Neighbor 步骤: 1.为了判断未知实例的类别,以所有已知类别的实例作为参考. 2.选择参数K. 3.计算未知实例与所有已知实例的距离. 4.选择最近的K个已知实例. 5.根据少数服从多数,让未知实例归类为K个最邻近样本中最多数的类别. 优点:简单,易于理解,容易实现,通过对K的选择可具备丢噪音数据的强壮性. 缺点:1.需要大量空间存储所有已知实例.2.当样本分布不均衡时,比如其中一类样本实例数量过多,占主导的时候,新的未知实例很容易被归类这个主导样本.

Machine Learning: Clustering & Retrieval机器学习之聚类和信息检索(框架)

Case Studies: Finding Similar DocumentsLearning Outcomes:  By the end of this course, you will be able to:(通过本章的学习,你将掌握)   -Create a document retrieval system using k-nearest neighbors.用K近邻构建文本检索系统   -Identify various similarity metrics for text data

快速近似最近邻搜索库 FLANN - Fast Library for Approximate Nearest Neighbors

What is FLANN? FLANN is a library for performing fast approximate nearest neighbor searches in high dimensional spaces. It contains a collection of algorithms we found to work best for nearest neighbor search and a system for automatically choosing t

【Similarity Search】多探头LSH——构建高维相似性搜索的高效索引

摘要 针对高维数据的相似性索引非常适于构建内容相关的检索系统,尤其对于音频.图像.视频等内容丰富的数据.近年来,位置敏感哈希及其变种算法以近似相似性搜索的索引技术被提出,这些方法的一个显著缺点是需要很多的哈希表来保证良好的搜索效果.该文章提出了一个新的索引策略来克服上述缺点,称作多探头LSH. 多探头LSH建立在LSH技术基础上,它可以智能地探测哈希表中可能包含查询结果的多个桶(buckets),该方法受基于熵的LSh方法(设计用于降低基本LSH方法对空间的要求)的启发.根据评估显示,多探头LS

ADC方法(asymmetric distance computation)

<Aggregating local descriptors into a compact image representation>论文笔记 提取到VLAD特征后,要先用PCA降维,然后再用ADC方法对每一幅图像建立索引,这里先介绍ADC方法. ADC方法是对图片库中,除query vector x之外的所有图的vector Y=y1,y2...yn,做kmeans产生k个聚类中心,用log2kbit编码这k个center的ID,ci=q(yi),比如k=16,yi属于c8,那么用4bit编

配送交付时间轻量级预估实践

1. 背景 可能很多同学都不知道,从打开美团App点一份外卖开始,然后在半小时内就可以从骑手小哥手中拿到温热的饭菜,这中间涉及的环节有多么复杂.而美团配送技术团队的核心任务,就是将每天来自祖国各地的数千万份订单,迅速调度几十万骑手小哥按照最优路线,并以最快的速度送到大家手中. 在这种场景下,骑手的交付时间,即骑手到达用户附近下车后多久能送到用户手中,就是一个非常重要的环节.下图是一个订单在整个配送链路的时间构成,时间轴最右部分描述了交付环节在整个配送环节中的位置.交付时间衡量的是骑手送餐时的交付

Hash function

Hash function From Wikipedia, the free encyclopedia A hash function that maps names to integers from 0 to 15. There is a collision between keys "John Smith" and "Sandra Dee". A hash function is any function that maps data of arbitrary

【计算机视觉】OpenCV的最近邻开源库FLANN

FLANN介绍 FLANN库全称是Fast Library for Approximate Nearest Neighbors,它是目前最完整的(近似)最近邻开源库.不但实现了一系列查找算法,还包含了一种自动选取最快算法的机制. flann::Index_类 该类模板是最近邻索引类,该类用于抽象不同类型的最近邻搜索的索引. 以下是flann::Index_类的声明: template <typename T> class #ifndef _MSC_VER FLANN_DEPRECATED #e