一、推荐系统
根据用户的历史数据发掘用户的潜在需求。
二、长尾商品
区别于热门商品,热门商品代表用户们的普遍需求,而长尾商品代表用户的个性化需求。
三、推荐方法
1)专家推荐(人工推荐):资深专家根据经验给出推荐。
2)统计推荐(热门推荐):根据历史记录进行统计,得出推荐结果,简单有效。
3)内容推荐:利用机器学习,根据物品的特性,找出相似物品。
4)协同过滤推荐:根据本用户的历史数据,找出最相近的用户,根据最近用户对某物品的喜好,计算本用户对该物品的喜好程度。
5)混合推荐:多种方法结合进行推荐。
四、推荐系统架构
三个要素:
1)用户特征(用户行为数据、属性数据)
2)物品特征(物品和用户的交互数据、属性数据)
3)推荐算法
两个关键:
1)推荐准确性
2)推荐计算时长
五、协同过滤算法
三种类型:
1)基于用户的协同过滤(userCF)
2)基于物品的协同过滤(itemCF)
3)基于模型的协同过滤(modelCF)
userCF算法---步骤:
1)找出与目标用户兴趣相同的用户集合。
2)找出集合中用户所喜欢的、但目标用户没接触过的物品,推荐给目标用户。
例如:用户1看了a、b两部电影,用户2看了a、b、c三部电影,则认为用户1和用户2为相似用户,并且把用户2看过的,但用户1没看过的电影c推荐给用户1。
itemCF算法---步骤:
1)计算物品间的相似度。
2)根据物品的相似度和用户的历史记录进行推荐。
例如:用户1看了a、d、g三部电影,用户2看了c、d、g三部电影,则认为电影d、g为相似电影,如果用户3看了电影d,而没有看电影g,则把电影g推荐给用户3。
Q: itemCF(基于物品的协同过滤) 和前面讲的内容推荐,都需要找出相似物品,两者之间有什么不同?
A:
内容推荐是根据物品的属性数据来计算相似度的(例如 电影a、c的类型属性都是“喜剧片”,或地区属性都是“大陆”,则两个电影相似)。
itemCF是根据大量用户的行为记录来计算相似度的(例如 大多数用户既看了电影a,也看了电影c,则两个电影相似)
modelCF算法:
同时考虑了用户和物品两个方面,通过所用用户给物品 的评分,来对某个用户的喜好进行判断(具体内容见下文)。
不同的算法有相应适合的应用场景。
六、电影推荐系统
电影推荐系统使用的就是spark MLlib中 的基于ALS矩阵分解的协同过滤算法,属于基于模型的协同过滤算法(modelCF)。
spark MLlib :
七、电影推荐算法步骤
1)获取用户id
2)删除用户之前存在的推荐结果
3)装载样本评分数据(不同用户对不同电影的评分数据:userid、 movieid、rating、timestamp )
4)装载电影信息数据(从movieinfo表中取出movieid、moviename、typelist)
注:样本评分数据和电影信息数据以.dat文件的形式被传入HDFS中
5)将样本评分数据切分成3部分,60%用于训练(训练集)、20%用于校验(校验集)、20%用于测试(测试集)
6)训练不同参数下的模型,并在校验集中校验,找出最佳模型
如何训练?
设置参数(隐语义因子的个数、ALS的正则化参数、迭代次数),将设置的参数和训练集作为参数传入到spark MLlib库的ALS()函数中,得到推荐模型,调整参数会得到多个不同的模型。
如何校验?
将校验集装入模型中,得到用户对电影的预测评分,计算预测评分和实际评分的均方根误差,找出多个模型中均方根误差最小的模型作为最佳模型。
7)用最佳模型预测测试集的评分,并计算预测评分和实际评分的均方根误差,改进最佳模型。
8)用最佳模型预测某用户对电影信息数据集中的所有电影的评分,选出评分最高的前十部电影
9)将推荐结果存入数据库recommendresult表中
八、ALS()函数
ALS()函数:
用户对电影的评分行为可以表示成一个评分矩阵(mxn),U(用户user),I(电影 item)
由于用户不会对所有电影进行评分,所以矩阵中一定会存在缺失值,类似于稀疏矩阵。
在实际应用中,m和n的数值都很大,矩阵很可能突破上亿项,这时需要对矩阵进行分解,而ALS算法对于这种大规模矩阵的分解可以取得较好的分析效果。
ALS算法旨在找到两个低维矩阵X(m x k)和Y(k x n),使这个两个矩阵的内积XY可以近似表示A。
这里k被称为隐语义因子。
原先的评分矩阵A为m个用户对于n部电影的评分,分解后:
X矩阵表示m个用户对于电影的k个特征(类型、导演、年代等)的偏好程度。
Y矩阵表示n部电影对k个电影特征的包含程度。
向量Xu 和 Yi 的转置的内积就是用户u对于电影i的近似评分。
ALS算法即"最小交替二乘法"算法首先会随机对X和Y矩阵进行初始化,接着随机初始化X0,然后固定X0去求解Y0,再固定Y0去求解X1,直到两个矩阵的内积(即预测评分)和实际评分的均方根误差小于预定义的阈值时,则求出了一个推荐模型。