前言
Mahout是Hadoop家族中与众不同的一个成员,是基于一个Hadoop的机器学习和数据挖掘的分布式计算框架。Mahout是一个跨学科产品,同时也是我认为Hadoop家族中,最有竞争力,最难掌握,最值得学习的一个项目之一。
Mahout为数据分析人员,解决了大数据的门槛;为算法工程师,提供基础的算法库;为Hadoop开发人员,提供了数据建模的标准;为运维人员,打通了和Hadoop连接。
Mahout就是驯象人,在Hadoop上创造新的智慧。
目录
- Mahout介绍
- Mahout学习路线图
- 我的学习经历
- Mahout的使用案例
1.Mahout介绍
Mahout是基于Hadoop的机器学习和数据挖掘的一个分布式框架。Mahout用MapReduce实现了部分数据挖掘算法,解决了并行挖掘的问题。
根据“Mahout in Action”书中介绍的,Mahout实现了三大算法,推荐(Recommendation)、聚类(Clustering)、分类(Classification)。
下文介绍的学习路线图,将以Mahout in Action书中思路展开。
2.Mahout学习路线图
Mahout的知识点,我已经列在图中,希望帮助其他人更好地理解Mahout。
3.我的学习经历
对于“Mahout in Action ”,先不急上手做什么,一遍一遍地读。直到读完3遍,心里才有把握。
从“推荐算法”开始,UserCF,ItemCF。记得第一次在公司给小组讲的时候,还设计了一份问卷,我列出了10个网站,(其中6个IT大站,2个个人blog,2个社交类社区),分别让大家去投票,0-5分,0为不知道,1-5为对网站的喜爱程度。
问卷结果格式:
user1, website1, 5
user1, website2, 2
user1, website3, 4
user2, website3, 2
user3, website3, 5
user4, website3, 0
…..
通过这个问卷来模拟尝试Mahout的推荐模型!计算的结果对大家来说,都是比较奇怪。为什么会有这样的推荐呢。 然后,深入Mahout源代码,看算法的实现,知道了相似度矩阵,距离算法,推荐算法,模型验证等,不同业务要求,不同的算法调用,对结果都是有影响的。把书中所有的的概念,关键词都整理过(可惜当时没写博客)。整整花了3个月,每天12个小时的强度,把推荐部分完整地学下来了。
然后,应用到实际业务中,我的任务是做“职位推荐”,我只有用户浏览职位,收藏职位,申请职位的行为数据。
第一次尝试,直接套用推荐模型,但结果非常之差。
出现问题的原因有2个:
- 职位是有时效性的,每个职位可能3个月就会过期:推荐结果包含了很多的过期职位。
- 大量的用户行为都是历史的,甚至是2-3年前的:推荐结果不符合用户的预期。我估计每半月用户的职位都可能有上升,所以历史行为是不能直接用于当前用户的计算的。
修改方案:
- 对用户行为数据集进行过滤,只计算最近半年内的用户行为。
- 对结果集进行过滤,排除过期的职位。
- 分别用不同的算法模型计算(我记得Tanimoto的Item Base结果最好)
聚类模型,我把这个算法 应用在网站用户的活跃度分析。假设一个网站,注册用户1000W,每天登陆的1W。我们想了解一下,未登陆的999W用户有什么特点!!用到Mahout的k-means和Canopy做聚类,假设1000W的用户可能可以划分为5个大的群体。
分类模型,我尝试着用Native Bayes对我的个人邮件进行垃圾分类。按机器学习的操作流程,历史数据健分词后,训练分类器,每天时时的数据通过分类器进行判断。整个自动化过程都已经完成。
4.Mahout的使用案例
- 用R解析Mahout用户推荐协同过滤算法(UserCF)
- RHadoop实践系列之三 R实现MapReduce的协同过滤算法
- 用Maven构建Mahout项目
- Mahout推荐算法API详解
- 从源代码剖析Mahout推荐引擎
- Mahout分步式程序开发 基于物品的协同过滤ItemCF
- Mahout分步式程序开发 聚类Kmeans
- 用Mahout构建职位推荐引擎