基于Spark构建推荐引擎之一:基于物品的协同过滤推荐

本文介绍了如何使用Spark构建基于物品的协同过滤推荐系统,包括数据输入模型、相似度矩阵模型(如同现相似度、余弦相似度、欧氏距离相似度)以及推荐算法模型。通过计算用户评分数据,生成物品的相似矩阵,并提供推荐列表的计算方法。
摘要由CSDN通过智能技术生成

1、Spark构建推荐引擎之一:基于物品的协同过滤推荐

1.0 前言

目前SparkMLlib支持的推荐算法只有alternating least squares (ALS)这一种,相比较Mahout中的推荐算法,SparkMLlib目前不能支持目前的业务需求;因此,参照Mahout的推荐引擎,在Spark上构建同样一套推荐算法,以支持各种业务需求。

目前SparkMLlib官方网址:

http://spark.apache.org/docs/latest/mllib-guide.html


Mahout的推荐引擎的详细介绍参照:

http://blog.fens.me/mahout-recommend-engine/

 

1.1 数据输入模型

输入数据格式:

用户ID,物品ID,评分

用户输入数据模型:

 defUserData (

     sc:SparkContext,input:String,

     split:String

     ):(RDD[(String,String,Double)]) = {

     valuser_rdd1= sc.textFile(input,10)

     valuser_rdd2=user_rdd1.map(line=> {

     valfileds= line.split("split")

          (fileds(0),fileds(1),fileds(2).toDouble)

     })

     user_rdd2

  }

通过UserData可以获取用户评分RDD;

输入参数:sc是SparkContext,input就输入数据路径,split是数据分割符号。

 

1.2 相似度矩阵模型

 基于物品(ItemCF)的相似度算法:

1)同现相似度

2)欧氏距离相似度

3)余弦相似度

4)秩相关系数相似度

5)曼哈顿距离相似度

6)对数似然相似度

1.2.1 同现相似度矩阵

参照:《推荐系统实践》一书中的介绍:

公式定义:


实例:


同现相似度模型:根据用户评分数据表,生成物品的相似矩阵;

输入参数:user_rdd:用户评分表;

输出参数:余弦相似矩阵:物品1,物品2,相似度值;

同现相似度矩阵模型:

def Cooccurrence (

     user_rdd:RDD[(String,String,Double)]

     ) : (RDD[(String,String,Double)]) = {

   //  0 数据做准备

   valuser_rdd2=user_rdd.map(f => (f._1,f._2)).sortByKey()

   user_rdd2.cache  

   //  1 (用户:物品)笛卡尔积 (用户:物品) =>物品:物品组合    

   valuser_rdd3=user_rdd2joinuser_rdd2

   valuser_rdd4=user_rdd3.map(data=> (data._2,1))

   //  2 物品:物品:频次

   valuser_rdd5=user_rdd4.reduceByKey((x,y) => x + y)

   //  3 对角矩阵

   valuser_rdd6=user_rdd5.filter(f=> f._1._1 == f._1._2)

   //  4 非对角矩阵

   valuser_rdd7=user_rdd5.filter(f=> f._1._1 != f.

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值