mahout之推荐系统源码笔记(4) ---总结与优化

本文总结了Mahout推荐系统基于Java单机和Hadoop MapReduce的源码,探讨了相似度计算、矩阵处理和优化思路。提出简化编程环境、改进数据挖掘方法的建议,以及对协同过滤的优化方案。
摘要由CSDN通过智能技术生成

mahout之推荐系统源码笔记(4) —总结与优化

花了几天的时间阅读分析了mahout推荐系统中基于java单机和基于hadoop的分布式mapreduce源码。根据其推荐系统hadoop程序的job划分写了笔记1、2、3。在这里,基于笔记1,2,3做一个总结。
我们先从相似度开始。

什么是相似度,就是我们在构建推荐系统时,基于user或者基于item都需要计算出相应的候选item或者是user。那么在mahout的hadoop程序中,他运用的是基于item的推荐系统,同样的,也需要计算相似度。
计算相似度的公式我在之前的笔记中列举过,有欧几里得,皮尔森等等。
sim
可以看到这些计算公式都需要向量的乘积和平方。
什么是一个向量呢,就是说我们比较item两两之间的相似度的时候,则用户就是维度,这样两个向量就由< item , user>构成,而其中的值就是pref偏好。
然后我们通过将item或者user转化为向量,运用公式计算相似度,就得到了item或者user两两之间的相似度。

那么mahout需要计算相似度就要求向量之间的平方和、内积。他是怎么操作的呢?
我们回到mahout的mapreduce转化。
在准备阶段,我们分别通过输入数据得到了以下的结构:

输入数据:
String: userid item pref
mapreduce:
Long: userid , Vector: <itemid , pref>
Long: itemid , Vector: <userid , pref>

得到这两个结构以后,这两个结构我们开始分开使用。首先我们需要用Long: userid , Vector: < itemid , pref>来计算相似度,的到物品两两之间的相似度矩阵,并且根据用户输入的最大行/列队矩阵向量进行规范剪枝,来缩小矩阵的体积,删去相似度低不会用到推荐系统的向量。具体的过程就不一一阐述,输入输出如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值