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) 使用的哈希函数较多时,分组数就会随之变多,数据量会随着哈希函数的个数线性增长。
最小哈希对形如“用户,商品”的数据进行计算,得到多个用户组成的群组,起到一个聚类的作用。当然,也可以是“物品,属性”这样的数据,来对物品进行聚类。