Mahout推荐系统构建

参考博客:

1,Mahout推荐算法基础。http://blog.csdn.net/ppcat_001/article/details/7736822

2,用Maven构建Mahout项目。http://blog.fens.me/hadoop-mahout-maven-eclipse/


Mahout的推荐引擎已经高度模块化,用户能基于Mahout用极简单的代码构建自己的推荐引擎。这篇博文参考上面两篇博文创建了一个简单的推荐引擎。

开始这个实例之前,有3个背景要交待:

1,实例基于Maven来管理项目。


2,Mahout有基于本机内存和基于hadoop分布式计算两种模式,本实例选择第一种。后面会有基于第二种的实例以及这两种方式的比较。


3,Mahout的推荐引擎按照模块的执行顺序可以分为:数据模型模块,近邻模块,相似度模块,推荐模块。这是本例程序的逻辑结构,也是初学者理解如何基于Mahout推荐引擎构建自己的推荐引擎的思路。

四大模块初识:数据模块,DataModel,类似于javaweb的javabean,就是用来封装数据的。 

近邻模块,根据各种基于统计学的数学算法计算各个记录之间的距离,Mahout实现的距离算法可参考:从源代码剖析Mahout推荐引擎

相似度模块:近邻模块算出距离之后,对于某个user或者item,安装某种规则取出top N,如取出3个距离最近的记录,或者10%的最近的记录,这里的3和10%有我们根据经验或者客户要求确定。

推荐模块:将相似度模块的结果安装某种结构封装到对象中,供我们解析调用。

     这四个模块都有API,只要按照一定的逻辑顺序,调用相应的API,就可以完成一个推荐程序。Apache  mahout 官方不只是提供了API,还推荐了逻辑顺序:按照下图中的1,2,3,4调用API,即可完成一个推荐程序。


5,实践开始。

第一步,准备数据。数据说明:一种是有用户偏好的数据,三列(UserId,ItemId,User-preference),用户id,物品id,用户偏好;另一种是没有用户偏好的数据,只有两列。这里要特别注意的是针对不同的数据创建的数据模型DataModel是不一样的


第二步,创建数据模型。

对于有用户偏好的数据:DataModel   dataModel=new FileDataModel(file);

对于没有用户偏好的数据:DataModel  dataModel =new GenericBooleanPrefDataModel(GenericBooleanPrefDataModel.toDataMap(dataModel));


第三步,计算用户相似度。相似度就是通过各种“距离”表现出来,计算相似度就是运用各个距离公式计算距离。对于不同种类的数据要使用不同的距离算法。

对于有用户偏好的数据,或者说必须要有用户偏好的算法如下

欧氏距离:EuclideanDistanceSimilarity
皮尔森距离:PearsonCorrelationSimilarity
余弦距离:UncenteredCosineSimilarity
对于没有用户偏好的数据,适用于以下算法
曼哈顿距离:CityBlockSimilarity
对数似然距离: LogLikelihoodSimilarity
Tanimoto:系数相似度

第四步,计算用户近邻度,实际是取top N,对于第三步算出来的距离,按照我们指定的规则取出一定数量或者一定比例的记录。

近邻算法分为2种:

  • NearestNUserNeighborhood:指定N的个数,比如,选出前10最相似的用户。
  • ThresholdUserNeighborhood:指定比例,比如,选择前10%最相似的用户。

第五步,将第四步的结果封装到Recommend对象中,供进一步处理。





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java追光着

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值