首页 > 代码库 > 机器学习----推荐系统之协同过滤算法

机器学习----推荐系统之协同过滤算法

(一)问题描述

电影评分,下图中5部电影,4个人进行评分,评分从0-5,并且为整数,问号处表示没有评分。

技术分享

(二)基于内容的推荐系统

给每部电影添加两个features,针对这个问题中分别为romatic和action,范围为1-5,并且给出一部电影这两个参数就已知。

技术分享

这里设,每部电影由xi表示,xi为一个3*1的向量,第一个x0为截距1,第二个为romantic指数,第三个为action指数。每个人的评分也由一个3*1的向量表示,第二个和第三个分别表示每个人对romantic和action的喜欢程度。这样对于每一个人,如果已知每部电影的romantic和action指数,以及他对一部分电影的评分,就可以预测出另一部分电影的评分,这个问题就转换成了曲线的拟合,多元线性回归,因此有以下:

技术分享
技术分享
技术分享

(三)协同过滤算法

1、与基于内容的推荐系统相反,若已知每个用户对于romance和action的喜好指数,不知道每部电影的romance和action指数,如图:

技术分享


这样已知theta,求x,反过来也可以当作一个多元线性回归问题求解,只不过这里要求的是x得值而不是theta,如下图:


技术分享

2、协同过滤基本思想

将theta和x都当作未知数,先随机初始化theta或者x,之后迭代求解theta和x,最后theta和x收敛到一个稳定的值。

技术分享

3、协同过滤算法具体步骤
将theta和x都当作未知数,代价函数如图:

技术分享


(1)      随机初始化theta和x

(2)      针对代价函数,使用梯度下降法分别求解theta和x的值。

(3)      使用theta和x的值计算给用户推荐电影。

技术分享

4、初始化和归一化问题

问题:当有一个新用户,他没有给任何一部电影评分,这是按照协同过滤算法的计算,最终预测这个用户会给所有电影评分为0,没有意义。


技术分享

解决方法:均值归一化

求出每部电影的平均评分,将用户评分减去平均评分填入矩阵中,然后针对代价函数利用梯度下降进行处理,最终可以实现未评分的新用户给每部电影的评分为平均值,这符合我们直观的认知。

技术分享

机器学习----推荐系统之协同过滤算法