使用spark mllib协同过滤进行图书推荐(Java版)

0. 协同过滤算法简介

    协同过滤(Collaborative Filtering),简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息。根据关注内容的不同,协同过滤算法分为三类:

以用户为基础(User-based)的协同过滤:用相似统计的方法得到具有相似爱好或者兴趣的相邻用户,使用与推荐用户相似用户的感兴趣的项目进行推荐。

以项目为基础(Item-based)的协同过滤:“能够引起用户兴趣的项目,必定与其之前评分高的项目相似”,透过计算项目之间的相似性来代替用户之间的相似性。

以模型为基础(Model-based)的协同过滤:用历史数据得到一个模型,再用此模型进行预测。

    mllib中实现了以模型为基础的协同过滤,使用als算法训练模型。

1. 数据源

book-crossing dataset:

http://www2.informatik.uni-freiburg.de/~cziegler/BX/

其中包含三个文件

评分数据文件:"User-ID";"ISBN";"Book-Rating"

图书数据文件:"ISBN";"Book-Title";"Book-Author";"Year-Of-Publication";"Publisher";"Image-URL-S";"Image-URL-M";"Image-URL-L"

用户数据文件:“User-ID”;"Location";"Age"

2. 数据预处理

    MLlib的ALS算法实现有一个小缺点:它要求user和item的ID必须是数值型,并且是32位非负整数。评分文件中userid为int类型,而ISBN为string类型,需要将其先转换为 int类型。这里我们采用将BX-Books中的所有图书一一对应到从1开始的自增id,使用hashmap保存映射关系,而后将BX-Book-Ratings

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值