mahout之MinHash实现

本文介绍Apache Mahout中的MinHash实现及其在聚类中的应用。具体包括MinHash算法原理、关键参数设置、Mapper与Reducer的工作流程等,并通过实例解释了如何通过调整参数实现更精确的聚类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MinHash可用于聚类或者计算相似度,详情概述参见"MinHash概述及举例"博客,此处阐述mahout的MinHash实现,mahout用minhash来聚类。

涉及主要类:

 

org.apache.mahout.clustering.minhash.MinHashDriver
org.apache.mahout.clustering.minhash.MinHashMapper
org.apache.mahout.clustering.minhash.MinHashReducer

 

 参数说明如下:

 

 

Path input //输入数据文件,为SequenceFileInputFormat格式,其key为Text value为VectorWritable
Path output //输出数据文件,由debugOutput决定,true时为为SequenceFileOutputFormat false为TextOutputFormat,其key为Text value为VectorWritable或者Text
int minClusterSize    //最小族数,默认为5,达不到此值直接丢弃
int minVectorSize    //最小参与计算的vector size默认为5
String hashType      //hash type,有 LINEAR, POLYNOMIAL, MURMUR, MURMUR3,默认LINEAR
int numHashFunctions  //hash 函数个数,默认10,也就是hash次数
int keyGroups         //此值比较有意思,后面详述
int numReduceTasks  //reduce个数
boolean debugOutput //决定输出数据文件的数据格式和value值

 

Mapper执行过程:

 

1.针对Vector的每个元素执行hash运算,每次获取最小hash值,执行numHashFunctions次,共获取numHashFunctions个最小hash值

2.mahout分族采用的是keyGroups的形式去操作,也就是说需要分的族数,这样就利用每次hash的最小值执行组合操作,keyGroups为1那么不进行任何组合,只要hash最小值有相同的那么就在一个族中

3.针对keyGroups举例如下:

numHashFunctions为3

V1:1,2,3

V2:3,2,1

如果keyGroups为1那么V1和V2在一个族中,属于 1,2,3这三个族

如果keyGroups为2那么V1组合1-2,2-3,3-1;V2组合3-2,2-1,1-3那么V1和V2不在一个族中

也就是说keyGroups可以避免每次Hash的冲突

reduce执行过程:

1.获取每个组的Collection<Writable>

2.如果Collection<Writable>大于指定的minClusterSize 那么保留,反之丢弃

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值