1,,实现User-based协同过滤算法:
数据格式:【用户id】,【项目id】,【评分】
2,实现Item-based协同过滤算法
3,基于奇异值分解实现Model-based协同过滤算法
4,基于Spark的MLlib实现协同过滤算法
4.1 MLlib的推荐算法工具
org.spache.Spark.mllib.recommendation中提供了3个用于协同过滤推荐的数据类型,即Rating、ALS和MatrixFactorizationModel
Rating:Rating对象是一个用户、项目和评分的三元组。
ALS:ALS提供了求解带偏置矩阵分解的交替最小二乘算法
MatrixFactorizationModel:ALS求解矩阵分解返回的结果类型
作为训练结果的MatrixFactorizationModel中提供了许多推荐操作。
val productFeatures:RDD[(Int,Array[Double])]:返回矩阵分解的项目特征
val userFeatures:RDD[(Int,Array[Double])]:返回矩阵分解的用户特征
def predict(userProducts:RDD[(Int,Int)]):RDD[Rating]:根据参数中需要预测的用户-项目,返回预测的评分结果
def predict(user:int,product:int):预测用户user对项目product的评分
def recommendProducts(user:Int,num:Int):Array[Rating]:为用户user推荐个数为num的商品
def recommendUsers(product:Int,num:Int):Array[Rating]:为项目product推荐可能对其感兴趣的num个用户
4.1.2 协同过滤推荐实例
5,案例:使用Mllib协同过滤实现电影推荐
MovieLens数据集可以在官网https://movielens.org下载到
movies.csv 格式
movieID,Title,Generes
rating.csv格式
userID,MovieID,Rating,Timestamp
也可以使用Spark MLlib内置的求解RMSE和MSE
首先,我们使用RegressionMetrics来求解MSE和RMSE得分。实例化一个RegressionMetrics对象需要一个键值对类型的RDD。其每一条记录对应每个数据点上相应的预测值与实际值。