1、问题
题目参考链接
在本次练习中,你将实现协同过滤算法并将它运用在电影评分的数据集上,最后根据新用户的评分来给新用户推荐10部电影。这个电影评分数据集由1到5的等级组成。数据集有n u = 943 n_u=943n
u
=943个用户和n m = 1682 n_m=1682n
m
=1682部电影。在计算完协同过滤的代价函数以及梯度后,将使用牛顿共轭梯度法求得参数。
数据集中,Y是一个(1682, 943)的矩阵,存储了从1到5的评分,矩阵R为二值指标矩阵,其中如果用户j对电影i进行评级,则R ( i , j ) = 1 R(i, j)=1R(i,j)=1,否则R ( i , j ) = 0 R(i, j)=0R(i,j)=0。协同过滤的目的就是预测用户尚未评分的电影的评分,即R ( i , j ) = 0 R(i, j)=0R(i,j)=0的条目。这样我们就可以向用户推荐预测评分最高的电影。
X是电影的特征矩阵,Theta是用户的特征矩阵,X的第i行对应x ( i ) x^{(i)}x
(i)
,表示第i部电影的特征向量(即描述第i部电影内容的特征量),Theta的第j行对应θ ( j ) \theta^{(j)}θ
(j)
,表示第j个用户的特征向量(即第j个用户对不同类型电影的偏好)。这里x ( i ) x^{(i)}x
(i)
和θ ( j ) \theta^{(j)}θ
(j)
都是100维的向量,因此X的维数是(1682100),Theta的维数是(943100)。
推荐,根据评分,
1.1 基于内容的推荐
根据多个观影人对电影的评分,评分中有电影的特征信息,然后去学习参数,
1.2 协同过滤
根据多个观影人说出自己的喜好,(类似给出参数),去学习电影的特征,然后再去做推荐
实施:首先随机给出参数,去学习特征x,然后根据特征使用1.1去学习参数,再回头使用新学到的参数再学习特征,如此迭代下去。
1.3 低秩矩阵分解
1.4 均值归一化
当一个新用户对所有电影都没有打分的时候,如果使用协同过滤,这个新用户对所有电影的评分都是0,做不到推荐其他的电影,所以对之前已知的用户对电影的评分求一下均值,然后使用协同过滤算法,会把新用户对电影的评分计算成之前的均值,这样就可以做出推荐了。