zoukankan      html  css  js  c++  java
  • minhash

      minhash是一种基于jaccard index 相似度的算法。属于LSH(Location Sensitive Hash)家族中的一员。

      jaccard index :有两个集合A={a , b , c , d , e } ,B={a , e , f , g},根据jaccard index 来计算两个集合的相似度Jaccard(A,B)=|A∩B| / |AUB|=2/7≈0.2857

      当集合较大或者集合数量过多时,直接计算集合交集与并集过于耗时,因此提出了minhash方法。

      minhash:

    A∩B={a , e}   AUB = {a , b , c , d , e , f , g} , 这里,我们假如要从AUB中随机挑选一个元素,毫无疑问这个元素属于A∩B的概率也为2/7,即与A,B的jaccard相似度相等,这里,我们假设自己有A , B集合中有很多数据,我们不方便直接计算A∩B , 但是我们可以从A中随机抽取部分(可以按比例)数据记作AA,从B中也随机抽取部分(可以按比例)数据 记作BB,则从AAUBB中随机抽取一个元素,这个元素落在AA∩BB中的概率 等 AA∩BB / AAUBB = A∩B / AUB,而这就是minhash降维的基本原理。(minhash算法中,不是随机抽取的)

             在minhash算法中我们是采用hash函数来随机抽取原A、B集合的子集的。(这里说的随机不是真正意义上的随机,hash函数实际上是对全集U中的元素进行了映射,U中的每个元素在同一个hash函数下被映射成不同的数字,其实是对U集元素的一个排列),下面具体讲下minhash算法

             算法:

    1. 使用多个hash functions 时

        最简单的minhash方案就是使用k个hash函数,这里k为正整数。依次取每个hash函数对集合中的所有函数进行hash运算,取每个hash函数对应的最小值。这样我们对每个集合都取到了k个值,这k个值就的集合就是原集合的minhash , 相似度估计为两个集合的minhash的交集除以k。

      2. 使用单个hash function

        a)      使用单个hash functions 时,只是使用一个hash function 对集合进行hash,取前k个最小的值组成minhash,其余与使用多个hash functions 一样。

      3. 在处理大数据中的方法

        a)      矩阵:其实当我们使用一个hash function 对集合进行hash时,其时就是对集合进行排列,而取最小的一个值,我们可以理解为排列为升序,而我们取的是列顶元素。根据这个原理我们可以简化处理大数据中的一些运算,具体方法这里不做细解。

        b)     分布式:mahout中集成了minhash算法,算法采用了多个hash functions,但不同的是mahout minhash中引入了一个group的方法,这个group方法通过指定的整数,把生成的minhash截成若干个字符串,这样就可以把这些个字符串当成原始集合的hash指纹,这里group的值越大(小于等于k),相似度阈值越高。具体细节  这里也不赘述。

        c)      合并相同指纹时的算法:在使用分布式时,由于算法通过group算法生成的是一系列的短指纹(把原来的minhash信息指纹截取了),判定是只有两个短指纹完全相等,两个集合才相等。这是个两两比较的问题,直接计算时间复杂度过高,可以用并查集算法解决。至于并查集算法 ,这里也不做赘述。

    注:本文只是对minhash的简单使用笔记,以防以后忘记,写的很水,如有写错的地方,欢迎指点。

  • 相关阅读:
    树结构中的左右值计算
    Gitlab Runner实现NetCore自动化持续集成
    使用docker搭建gitlab服务器
    Linux笔记
    Miniprofiler在swagger、vue、angular中的使用
    MySqlException: The user specified as a definer ('root'@'%') does not exist解决方法
    从NetCore报错到MySql安全
    Asp.NetCore+Microsoft.AspNetCore.SignalR前后端分离
    学习sqlserve的一些笔记
    再见Jenkins,从Gitlab代码提交到k8s服务持续交付只需七毛三(走过路过不要错过)
  • 原文地址:https://www.cnblogs.com/nocml/p/3962627.html
Copyright © 2011-2022 走看看