数据挖掘读书笔记-相似项发现

相似项发现

1.相似度

1.集合的Jaccard相似度

Jaccard系数主要用于计算样本间的相似度。Jaccard系数的计算方式为:样本交集个数和样本并集个数的比值:
J ( A , B ) = A B A B J(A,B)=\frac{|A\cap B|}{|A\cup B|}
Jaccard系数相反的即为jaccard距离:
d j ( A , B ) = 1 J ( A , B ) = A B A B d_{j}(A,B)=1-J(A,B)=\frac{|A\cap B|}{|A\cup B|}

2.文档的shingling

1.k-shingle

定义:文档中任意长度为k的子串

2.k大小的选择

文档中常见字符个数为n,那么 n k n^{k} 应该远大于文档长度

3.对shingle进行哈希

将长度为k的字符串映射为哈希桶编号,把通编号看成最终的shingle,如果使用9-shingle然后映射成4字节整数,那么效果要优于直接使用4-shingle。

3.保持相似度的集合摘要表示

1.集合的矩阵表示

如果包含相应元素,则对应位置设为1

元素 S 1 S_{1} S 2 S_{2} S 3 S_{3} S 4 S_{4}
a 1 0 0 1
b 0 0 1 0
c 0 1 0 1
d 1 0 1 1
e 0 0 1 0

2.最小哈希

将矩阵重新排列,对于每个集合,第一个不为0的数对应的元素就是最小哈希值

元素 S 1 S_{1} S 2 S_{2} S 3 S_{3} S 4 S_{4}
b 0 0 1 0
e 0 0 1 0
a 1 0 0 1
d 1 0 1 1
c 0 1 0 1

比如: h ( s 2 ) = c , h ( S 3 ) = b h(s_{2})=c,h(S_{3})=b

3.最小哈希与Jaccard相似度

两个集合经过随机排列转换之后,得到的两个最小哈希值相等的概率的等于两个集合的Jaccard相似度

【证明】考虑集合 S 1 S 2 S_{1}和S_{2} ,共x行两列均为1,y行两列分别为1和0,z行两列均为0,那么Jaccard相似度为 S I M ( S 1 S 2 ) = x x + y SIM(S_{1}S_{2})=\frac{x}{x+y} ;对矩阵随机排列转换,从上到下扫描,在碰到那些y之前碰到x的概率是 x x + y \frac{x}{x+y} ,(相当于在X+Y的样本中第一次抽取到X的概率),这也是 h ( S 1 ) = h ( S 2 ) h(S_{1})=h(S_{2}) 的概率。

4.最小哈希签名

对大规模矩阵进行排列转换不可行,但是我们可以使用n个哈希函数替代n个排列转换。

S 1 S_{1} S 2 S_{2} S 3 S_{3} S 4 S_{4} x + 1 m o d    5 x+1\mod5 3 x + 1 m o d    5 3x+1\mod5
0 1 0 0 1 1 1
1 0 0 1 0 2 3
2 0 1 0 1 3 2
3 1 0 1 1 4 0
4 0 0 1 0 0 3

那么签名矩阵为

S 1 S_{1} S 2 S_{2} S 3 S_{3} S 4 S_{4}
h 1 h_{1} 1 3 0 1
h 2 h_{2} 0 2 0 0

如何计算呢,以 S 1 S_{1} 为例,对于 h 1 h_{1} ,由哈希得到的最小值(此处是0)开始,从小到大找到对应的 S 1 S_{1} 的值,如果为1那么就填入签名矩阵,并且不在往下找, h 2 h_{2} 同理。

4.文档的局部敏感哈希

1.面向最小哈希签名的LSH

对最小哈希签名矩阵,将其划分为b个行条,每个行条由r行组成,对每个行条使用独立的桶数组,即使是不同行条中的相同向量列,也不会哈希到同一桶中。

在这里插入图片描述
对于 [ 0 , 2 , 1 ] [0,2,1] 肯定会被哈希到同一个桶,其他不相同的列仍然有三次机会成为候选对,签名矩阵越相似,成为候选对的概率越大,这使得相似的列更有可能成为候选对。

2.一个完整的发现相似项的方法

  • 选择某个k,对每篇文档构建k-shingle集合。将k-shingle集合映射成更短的桶编号(后一步可选)。
  • 将文档k-shingle对照shingle排序。
  • 选择最小哈希签名长度n。将上一步排好序的表计算最小哈希签名。
  • 选择阈值t来定义达到的相似程度。选择行条数b和每个行条中的行数r,使得br=n,t近似为 ( 1 / b ) 1 / r (1/b)^{1/r}
  • 使用LSH技术构建候选对
  • 检查每个候选对的签名,确定他们一致性的比例是否大于t。

5.距离测度

  • 欧式距离
  • Jaccard距离
  • 余弦距离
  • 编辑距离
  • 海明距离

6.局部敏感函数理论

1.局部敏感函数族要求

  • 尽可能选择近距离对
  • 统计上相互独立:联合概率=独立事件概率乘机
  • 在以下两个方面有很高的效率:很短时间内识别候选对;组合在一起可以跟很好的避免伪正例或伪反例

2.敏感函数族定义

对于候选对x、y, d 1 < d 2 d_{1}<d_{2} 是某个距离测度d下的两个距离值,如果函数族F的每个函数都满足以下条件,则成为敏感的:

  • 如果 d ( x , y ) d 1 d(x,y)\le d_{1} ,那么 f ( x ) = f ( y ) f(x)=f(y) 的概率至少是 p 1 p_{1}
  • 如果 d ( x , y ) d 2 d(x,y)\ge d_{2} ,那么 f ( x ) = f ( y ) f(x)=f(y) 的概率最大是 p p_{2}

如图所示

在这里插入图片描述

3.局部敏感函数族放大

1.与构造:将函数族中r个函数作用在x、y上,如果全都有 f i ( x ) = f i ( y ) f_{i}(x)=f_{i}(y) ,那么才有 f ( x ) = f ( y ) f(x)=f(y)

2.或构造:将函数族中r个函数作用在x、y上,如果有一个 f i ( x ) = f i ( y ) f_{i}(x)=f_{i}(y) ,那么就有 f ( x ) = f ( y ) f(x)=f(y)

7.面向高相似度的方法

1.相等项发现

  • 对文档头部少许字符进行哈希,然后只对进入同一桶的文档进行比较
  • 对整篇文章哈希
  • 对所有文档随机选择固定点,并依据此进行哈希

2.集合的字符串表示方法

  • 将全集中的所有元素按照固定规则排序
  • 将所有集合按照规定排序规则表示

如将字母组成的集合按照字母表顺序排序,那么集合 e , r , f {e,r,f} 表示为 e , f , r {e,f,r}

3.基于长度的过滤

  • 将所有字符串按长度排序
  • 假定两个字符串Jaccard距离上界是J
  • 对于字符串s和他后面的t,交集不大于 L s L_{s} ,并集不小于 L t L_{t} ,Jaccard相似度最大 L s / L t L_{s}/L_{t}
  • 为了是s和t能够对比,必须有 1 J L s / L t 1-J\le L_{s}/L_{t}

4.前缀索引

  • 将字符串前p个字符组成前缀
  • Jaccard距离下届J
  • 任意其他满足 S I M ( s , t ) 1 J SIM(s,t)\ge 1-J 的字符串t的前缀没有在s的前缀出现
  • 那么s和t的Jaccard相似度为 ( L s p ) / L s (L_{s}-p)/L_{s}
  • p至少为 L s ( 1 J ) + 1 \lfloor L_{s}(1-J)\rfloor +1

5.位置信息的使用

  • Jaccard距离下届J
  • 对符号建立索引的同时,也对其位置进行索引,如 ( x , i ) (x,i) 表示x在前缀中的位置i
  • 分别从s、t的i、j个字符开始比较时, j ( L s ( 1 J ) i + 1 + J ) / J j\le (L_{s}(1-J)-i+1+J)/J
发布了80 篇原创文章 · 获赞 68 · 访问量 7559

猜你喜欢

转载自blog.csdn.net/weixin_44048823/article/details/100715352