zoukankan      html  css  js  c++  java
  • 最小哈希函数

    1.1      算法简介

    最小哈希(minhash),简单来说就是从用户喜欢的所有商品中随机抽出n个商品,对于抽出的这n个商品都相同的几个用户,认为是兴趣相似的用户,属于同一类。例如用户A喜欢商品{a、b、c},用户B喜欢商品{b、c、d},用户C喜欢商品{c、e、f},在每个用户喜欢的商品列表中都随机抽出2个商品,用户A抽出的商品是{b、c},用户B抽出的商品是{b、c},用户C抽出的商品是{c、e},因为用户A和用户B抽出的两个商品都是{b、c},所以认为用户A和用户B是兴趣相同的用户,属于同一类。用户C抽出的商品与用户A和用户B商品抽出商品不完全相同,所以用户C和用户A、用户B不是同一类用户。

    这里叫做最小哈希,是指在抽取商品时用的方法是最小哈希的方法。先对每个商品计算一个哈希值(可以认为是一个函数,输入是商品,返回一个数值),把哈希值最小的作为抽出来的商品。如果要同时抽出多个商品,那就使用多个哈希函数计算得到多个哈希值。还是上面的例子,要抽出两个商品,就准备两个哈希函数h1和h2(就理解为函数,哈希可以认为是名称,该函数尽量保证不同的值计算得到不同的结果),分别对每个商品求出一个值。如对于用户A,使用h1函数计算得到三个值h1(a),h1(b),h1(c),比较它们的大小,如果其中最小的是h1(b),则先记录下来,在用h2函数同样计算得到三个值,取其中的最小值,例如是h2(c),那么,我们认为“h1(b)_h2(c)”代表用户A属于这样的一个群组。如果用户B使用h1函数和h2函数分别计算出的最小值也是h1(b)和h2(c),就认为用户B也属于“h1(b)_h2(c)”群组,则用户A和用户B是一组的,即兴趣相似的。

    在应用中,会使用多个哈希函数,如2n个hash函数,这样对于一个用户,会被分到n个组中(如上所述,两个哈希函数算出来的值组成一个组号,2n个哈希函数,能组成n个组)。

    1.2      算法应用

    最小哈希在这里属于一个聚类算法,根据用户及其喜欢的商品来对用户进行聚类,将存在相同喜欢商品的用户聚成一类。

    最小哈希聚类算法的优点是:

    (1)       计算比较简单,比起两两用户间的比较,效率提高较大

    (2)       能够很快的找出有相同商品的用户

    (3)       能简单地对用户进行聚类

    最小哈希聚类算法的缺点是:

    (1)       hash函数具有一定的偶然性,很可能会有遗漏。

    (2)       使用的哈希函数较多时,分组数就会随之变多,数据量会随着哈希函数的个数线性增长。

    最小哈希对形如“用户,商品”的数据进行计算,得到多个用户组成的群组,起到一个聚类的作用。当然,也可以是“物品,属性”这样的数据,来对物品进行聚类。

     
     
  • 相关阅读:
    POJ 1330 Nearest Common Ancestors (LCA,dfs+ST在线算法)
    BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊 (动态树LCT)
    HDU 4010 Query on The Trees (动态树)
    SPOJ 375. Query on a tree (动态树)
    BZOJ 2049: [Sdoi2008]Cave 洞穴勘测 (动态树入门)
    HDU 3726 Graph and Queries (离线处理+splay tree)
    POJ 3580 SuperMemo (splay tree)
    Android中visibility属性VISIBLE、INVISIBLE、GONE的区别
    mysql如何在一张表中插入一万条数据?(用存储过程解决)
    Gradle Build速度加快方法汇总
  • 原文地址:https://www.cnblogs.com/peizhe123/p/5728707.html
Copyright © 2011-2022 走看看