海量数据挖掘MMDS week7: 局部敏感哈希LSH(进阶)
http://blog.csdn.net/pipisorry/article/details/49686913
海量数据挖掘Mining Massive Datasets(MMDs) -Jure Leskovec courses学习笔记 相似项的发现:局部敏感哈希(LSH, Locality-Sensitive Hashing)
{博客内容:More about Locality-Sensitive Hashing:在海量数据挖掘MMDS week2: 局部敏感哈希Locality-Sensitive Hashing,
LSH中讲到的bands方法实际上只是一个特例,bands方法可以通过and-or级联实现,多个级联当然就是之前方法的拓展。The "bands" technique for LSH that we learned in Week 2 is actually just a special case of a more general technique. We will look at a completely different approach to LSH, which is
preferable when we are looking for sets of very high Jaccard similarity.}
局部敏感哈希函数族LSH families
{在海量数据挖掘MMDS week2: 局部敏感哈希Locality-Sensitive Hashing, LSH中,我们讨论了最小哈希函数minhash,接下来要讨论其它的LSH函数族,这些函数族也能高效地产生候选pairs,并能作用于集合空间和jaccard距离。下面要讲的就是面向jaccard距离的LSH函数族。}
LSH families的定义
定义一个判定函数f,判定两个输入是否是候选对。一般函数f对两个输入求hash值,hash值相同就说明是一个候选对。
这种形式的一系列函数集合构成一个函数族。如hash函数中的每个函数都基于特征矩阵的一个可能 的行排列转换而形成,这些函数构成一个函数族。
(d1,d2,p1,p2)-敏感的函数族的定义
例如minhash funcs假设点空间是集合sets,距离是Jaccard距离。
这里要注意的是,我们想要d1,d2固定的同时尽量分开p1,p2。
LSH哈希函数应满足的条件
最小哈希函数族minhash func families
minhash函数族实例
这里相等的概率就是1-距离。
局部敏感哈希族的放大amplify处理
{这就是要讨论hash函数族的目的,可以使概率p1变大,p2变小。lz觉得这里是通过AND和OR操作来控制之前文章讲到的S曲线。通过特例:and-or就可以模拟实现将signature矩阵划分成b个bands,每个bands有r行,同样得到S曲线f(S) = (1-S^r)^b的效果。如果通过多个级联会得到更优更复杂更接近阶跃函数的S曲线。}
hash函数的and构造
也就是说,F’中某个hash函数判定x,y候选对,实际上使用了r个hash函数来判定,r个hash函数都判定成功才成功,成功的概率当然会变成p^r。
hash函数的or构造
And和or构造的效果
AND construction like “rows in a band.”OR construction like “many bands.”
与构造中选取r要足够大,这样p2才会非常接近于0,同时p1也仍显著偏离0(注意这里并不是更接近于1了)。
也就量说这样做降低了false pos和neg的概率,使S曲线更接近于理想状态。当然同时也增加了hash计算的时间。
S曲线:
[LSH s曲线分析:海量数据挖掘MMDS week2: 局部敏感哈希Locality-Sensitive
Hashing, LSH]
Compose construction
{and/or构造的组合使用}
And or compositon
这里and构造中的hash函数要有r个,or构造中的hash函数要有b个,这样才能将之前的两个概率表达转换成1-(1-p^r)^b的S曲线形式。
实例
Or and composition
实例
级联casecading construction
上面的级联等价于先应用4路or,再用16路and,最后4路or。That would be the same as applying a four-way OR then a 16-way,AND and Finally another four-way OR.
使用minhash函数的数目:每个构造需要16个原始hash函数才能构造成4,4的or-and(反推得到,1个F''中的hash函数需要4个F'中的hash函数来构造,而1个F‘中的hash函数又需要4个F中的hash函数构造),通过级联两个构造就使用了256个minhash函数。Notice that each construction uses 16 of the original functions.So by cascading these two constructions,we use 256
minhash functions.
实例
S-Curves
{阈值的选择}
阈值选择为函数f(S) = (1-S^r)^b的不动点(近似值),也就是输入一个相似度S,得到一个相同的概率p(hash到同一个bucket中的概率)。当相似性相对不动点变大时,其hash到同一个bucket中的概率也变大,反之相似性相对不动点变小时,其hash到同一个bucket中的概率也变小了。
总结
这样做之后,原有的hash函数族(d1,d2,p1,p2)-敏感的函数族如(0.3,0.7,0.7,0.3),也就是当两个signatures的距离小于0.3时其hash后相似的概率为0.7,距离大于0.7的两个signatures其hash后相似的概率为0.3。
但是我们通过and-or函数级联后,hash函数族就变为如(0.3,0.7,0.9,0.1),也就是当两个signatures的距离小于0.3时其hash后相似的概率为0.9,距离大于0.7的两个signatures其hash后相似的概率为0.1。这样模型的false postive和false negtive都降低了,模型变好了!
面向其它距离度量的LSH函数族
{不是所有距离度量都存在LSH函数族}
面向海明距离的LSH函数族
海明距离的LSH函数族的规模最多为d,因为只要所有i(i=1~d),hash函数fi(x)=fi(y),则f(x)=f(y)。i大于向量长度d是没有效果的。
[距离和相似性度量方法-汉明距离-分类数据点间的距离]
面向cosin距离的LSH函数族(random hyperplanes)
两个向量的余弦距离是它们的夹角。夹角越小,其相似度越高,成为候选pairs的概率应该越大。那么这个与夹角相关的概率怎么表示呢?
答案就是通过一个hash函数对这两个向量进行hash,而这个hash函数实际上只是一个随机的向量,通过这个随机向量与这两个要比较相似性的向量的内积来判定,如果好多个这样随机的向量与它们的内积是同号的(同正或同负,总是同号说明划分平面总是在x,y夹角外侧不在夹角内部),则说明这两个向量的夹角很小,相似性大,否则相似性小。原因及解释见下面的解析。
cosin距离LSH函数族如下表示
哈希函数的表示
通过某个随机平面的法向量(一个随机的向量)和要比较相似度的两个向量x,y的内积的正负来判定x,y是否相似,而同为正或者负(就是有相似性)的概率可以表示为1-theta/180。
这也就是说,面向cosin距离的LSH哈希函数就是一个向量v,并且其hash的buckets只有两个——正和负。
注意,当x,y在法向量对应的平面同一侧时,与法向量的内积才会同号。
概率分析
随机向量(法向量)的选择
选择的随机向量(也就是hash函数)中的分量可以只是1、-1,这样计算内积更快。
conin距离的LSH函数族实例
面向Euclidean距离的LSH函数族
对于欧氏距离,我们也想找到一个hash函数,当两点的距离相对较小时,hash函数hash两点到同一个桶中的概率很大。
概率分析
根据上述分析,两点距离大于2a时候,最多有1/3概率分到同一bucket中;然而距离小于a/2时,最少有1/2概率分到同一bucket中。而1/3和1/2的概率差不多是至少到满足的了,这样也就是说两点小距离和大距离至少要有4倍(2a/(a/2))的差距才能很好的分离。
多维欧氏距离分析
根据上面的分析,大距离和小距离分开至少要4倍,也就是需要e > 4d。然而我们可以通过前面讲过的放大技术将后面的概率值调整到任意值附近。
from:http://blog.csdn.net/pipisorry/article/details/49686913
ref:海量数据挖掘MMDS week2: 局部敏感哈希Locality-Sensitive Hashing, LSH
海量数据挖掘MMDS week7: 局部敏感哈希LSH(进阶)的更多相关文章
- 海量数据挖掘MMDS week2: 局部敏感哈希Locality-Sensitive Hashing, LSH
http://blog.csdn.net/pipisorry/article/details/48858661 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...
- [机器学习] 在茫茫人海中发现相似的你:实现局部敏感哈希(LSH)并应用于文档检索
简介 局部敏感哈希(Locality Sensitive Hasing)是一种近邻搜索模型,由斯坦福大学的Mose Charikar提出.我们用一种随机投影(Random Projection)的方式 ...
- 局部敏感哈希LSH
之前介绍了Annoy,Annoy是一种高维空间寻找近似最近邻的算法(ANN)的一种,接下来再讨论一种ANN算法,LSH局部敏感哈希. LSH的基本思想是: 原始空间中相邻的数据点通过映射或投影变换后, ...
- 海量数据挖掘MMDS week7: 相似项的发现:面向高相似度的方法
http://blog.csdn.net/pipisorry/article/details/49742907 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...
- 局部敏感哈希LSH(Locality-Sensitive Hashing)——海量数据相似性查找技术
一. 前言 最近在工作中需要对海量数据进行相似性查找,即对微博全量用户进行关注相似度计算,计算得到每个用户关注相似度最高的TOP-N个用户,首先想到的是利用简单的协同过滤,先定义相似性度量(c ...
- 海量数据挖掘MMDS week2: LSH的距离度量方法
http://blog.csdn.net/pipisorry/article/details/48882167 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...
- [Algorithm] 局部敏感哈希算法(Locality Sensitive Hashing)
局部敏感哈希(Locality Sensitive Hashing,LSH)算法是我在前一段时间找工作时接触到的一种衡量文本相似度的算法.局部敏感哈希是近似最近邻搜索算法中最流行的一种,它有坚实的理论 ...
- 局部敏感哈希(Locality-Sensitive Hashing, LSH)方法介绍
局部敏感哈希(Locality-Sensitive Hashing, LSH)方法介绍 本文主要介绍一种用于海量高维数据的近似近期邻高速查找技术--局部敏感哈希(Locality-Sensitive ...
- 局部敏感哈希(Locality-Sensitive Hashing, LSH)
本文主要介绍一种用于海量高维数据的近似最近邻快速查找技术——局部敏感哈希(Locality-Sensitive Hashing, LSH),内容包括了LSH的原理.LSH哈希函数集.以及LSH的一些参 ...
随机推荐
- Elasticsearch 学习(二):安装和使用
一.安装 安装 Elasticsearch 之前,需要先安装 Java,并配置好 Java 环境变量. 安装好 Java 环境后,进入 Elasticsearch 官网下载安装包. 解压安装包,进入解 ...
- ignorable tips
枚举 索引从0开始 sort 默认升序排列 Array.Sort(intSort); //复制数组 Array.Copy(intSort,intNew,3); intsort 源数组 intnew ...
- Android编译安装失败解决办法
今天用AndroidStudio开发了一个手机App玩玩,但是偶然遇到一个问题,自己手机上测试得劲的很,分享给朋友做测试,但是nie,意外出现了.... 两个人都给我说个安装失败,这个就比较尴尬了,找 ...
- CentOS 7下GitLab搭建及配置
由于公司业务,需要上Git版本控制. * 目前市面上比较有名的Git服务提供商,国外有GitHub.BitBucket.GitLab,国内有码云,Coding. * 现有的服务商,对于免费的套餐都有一 ...
- python笔记七(递归函数)
在介绍递归函数之前,我们先介绍以下递归函数的使用有以下特征: 1.递归函数就是函数在函数体内部调用本身 2.递归函数的运算规模要不断减小,这样才是可以运算的 3.递归的层数不要超过999,因为函数调用 ...
- Bootstrap3 表单-水平排列的表单
通过为表单添加 .form-horizontal 类,并联合使用 Bootstrap 预置的栅格类,可以将 label 标签和控件组水平并排布局.这样做将改变 .form-group 的行为,使其表现 ...
- ubuntu重装指定版本的mysql
查看错误log cat /var/log/mysql/error.log 首先彻底删除mysql,比如版本5.5 apt-get autoremove --purge mysql-server-5.5 ...
- cassandra 并发技术介绍
摘要 本文主要介绍cassandra线程技术,cassandra的实现是基于java的,所以线程技术使用的也是jdk包提供的线程类.cassandra是分布式数据库,整个并发架构是基于阶段事件驱动架构 ...
- 剑指Offer——知识点储备-故障检测、性能调优与Java类加载机制
剑指Offer--知识点储备-故障检测.性能调优与Java类加载机制 故障检测.性能调优 用什么工具可以查出内存泄露 (1)MerroyAnalyzer:一个功能丰富的java堆转储文件分析工具,可以 ...
- Mybatis源码学习之TypeHandler
ORM框架最重要功能是将面向对象方法中的对象和关系型数据库中的表关联了起来,在关联过程中就必然涉及到对象中的数据类型和数据库中的表字段类型的转换,Mybatis中的org.apache.ibatis. ...