标签:style blog http width 数据 2014
在实际应用的过程中,相似性度量和计算是非常常用的一个方法,例如网页去重、判断帖子是否相似、推荐系统衡量物品或者用户的相似度等等,当数据量大的时候,计算的时间和空间复杂度就会是一个非常重要的问题,例如在判断相似发帖的时候,我们可以用kmeans来进行聚类,但是资源的消耗是巨大的,所以本文推荐一种方法,minhash+lsh(局部敏感hash),用minhash来降维,用lsh来做近似查询,本文主要介绍一下minhash。
在介绍minhash之前,先给出相似性的度量方法。
相似性的度量
相似性度量有很多方法,欧氏距离是比较常用的,这里我们用一下Jaccard相似性系数,公式如下
计算方法很简单,文档A和文档B共有的单词数除以A和B单词的集合,例如A={a,b,c,d},B={c,d,e,f},那么相似性系数就是2/6=0.33。
minhash
刚才我们知道在求相似度的时候我们用到了文档和单词。通常情况下,我们都会将文档和单词表示成doc-term矩阵的形式,可以看到term具体的是什么对最后的结果没有任何影响,所以我索性用行号来代表term,行号跟term是一一对应的,例如
s1 | s2 | s3 | |
0 | 1 | 0 | 0 |
1 | 0 | 0 | 1 |
2 | 0 | 1 | 0 |
3 | 1 | 0 | 1 |
4 | 0 | 0 | 1 |
随机确定一个顺序,例如上面的顺序是01234,随机确定一个顺序,例如12340,注意这里是随机,目的就是不让最后的结果受人为的干扰,结果如下
s1 | s2 | s3 | |
0 | 0 | 0 | 1 |
1 | 0 | 1 | 0 |
2 | 1 | 0 | 1 |
3 | 0 | 0 | 1 |
4 | 1 | 0 | 0 |
用两个hash函数来产生行号的顺序,两个函数可以自己定义,最好保证hash后的值均匀,例如
标签:style blog http width 数据 2014
原文地址:http://blog.csdn.net/nwpuwyk/article/details/36222401