spark做视频推荐

来源:互联网 发布:雨果巴拉 知乎 编辑:程序博客网 时间:2024/06/09 23:36

推荐系统最常用的是协同过滤算法,下面我们来分析下同过滤算法

协同过滤算法可分为:

1.基于用户的(UserCF)

2.基于商品的(itemCF)

3.基于模型的(ModelCF)

按照模型可以分为

1.最近邻模型:基于距离的协同过滤

2Latent Factor Model(SVD):基于矩阵分解

3Graph:图模型


1.基于用户的协同过滤-基于用户相似性

通过不同用户对物品的评分来预测用户之间的相识度,基于用户之间的相似度做出推荐,就是给用户推荐和他兴趣相似的其他用户喜欢的物品

物品/用户    物品A     物品B      物品C                 物品D

用户A           1                         1                      推荐

用户B                         1 

用户C            1                        1                        1 


我们要给A推荐物品,因为用户A和C买的东西非常相似,用户C买了物品D,所有我们可以給用户A推荐物品D


基于UserCF的思想就是:基于用户对物品的偏好的相似性(通过用户对物品的评分,用户查看物品记录,用户对物品评论),找到相邻用户,将相邻用户喜欢的我推荐给当前用户。


基于商品(itemCF)-基于商品相似性

基于用户的协同过滤,通过用户对不同我的评分来预测物品之间的相似度,基于物品之间的相似度做出推荐。就是,给用户推荐和他之前喜欢的物品的相似的物品

用户/物品    物品A   物品B    物品C

用户A           1                      1

用户B           1          1          1

用户C           1                     推荐


因为用户A和用户C都买了物品A和物品C,说明物品A和物品C非常相似,用户C买了物品A,所以推荐用户C买物品C







推荐系统中迭代最小二乘算法的实现

实现代码:

inport org.apache.spark.ml.evaluation.RegressionEvaluator

import org.apache.spark.ml.recommendation.ALS


case class Rating(userId:Int,movieId:Int,rating:Float,timestamp:Long)

def parseRating(str:string):Rating={

val fields=str.split("::")

assert(fields.size==4)

Rating(fields(0).toInt,field(1).toInt,fields(2).tiFloat,fields(3).toLong)

}

//加载数据

val ratings=spark.read.textFile("data/mllib/als/sample_movielens_ratings.txt").map(parseRating).toDF

//分成训练集和测试集

val Array(training,test)=ratings.randomSplite(Array(0.8,0.2))

//在训练集上使用迭代最小二乘建立推荐模型

val als=new ALS().setMaxIter(5).setRegParam(0.01).setImlicitPrefs(true).setUserCol("userId").setItemCol("movieId").setRatingCol("rating")

val model=als.fit(training)

//在测试集上计算均方误差评估模型

val predictions=model.transform(test)


val evaluator=new RegressionEvalutor().setMetricName("rmse").setLabelCol("rating").setPredictionCol("prediction")


val rmse=evaluator.evaluate(predictions)

println(s"Root-mean-square error=$rmse")


topKRecs=model.recommendProducts(userId,K)

movieForUser=ratings.groupBy(user).mapValue(list).lookup(userId)

print moviesForUser





spark的使用矩阵因子来来做相关推荐

A*B的矩阵M=A*L矩阵N*L*B矩阵H

该模型称为潜在特征模型,旨在寻找那些潜在的特征,间接表示用户物品评分矩阵


隐式矩阵因子

前面我们在讨论显式的一些偏好信息,如rating,但在大部分应用中,拿不到这类信息,我们更多收集到的是隐式反馈信息,这类反馈信息没有明确地告诉某个用户对某个物品的偏好信息,但是可以从用户对某个物品的交互信息中建模出来,例如:一些二元特征,包括是否浏览过,是非购买过产品,以及多少次看过某部电影。


M矩阵是用户对物品的评分矩阵,N矩阵是是影片是否被某用户看过,用户看某部电影次数。



从数据中提取特征

数值特征:这些特征通常是实数或整数,比如年龄,

类别特征:它们的取值可能是状态集合中的某一种,例如用户性别,职业或电影类别,婚姻状况

文本特征:它们派生子数据中的文本内容,比如电影名,描述或是评论。

其它特征:大部分其他特征都最终表示为数值,比如图像,视频和音频被表示为数值数据的几何,地理位置则可由经纬或地理散列表示。






0 0
原创粉丝点击