举例:有一个用户没有给任何电影评分,影响 θ(5) 值的唯一一项是λ/2[(θ(5)_1)^2+(θ(5)_2)^2]。即要选一个向量 θ(5)使得最后的正则化项尽可能地小。但是如果目标是最小化这一项,那么你最终得到的就会是 θ(5)=[0;0]。θ(5) 转置乘以 x(i)对任意i结果都会等于0,使得没有任何好电影推荐给她。均值归一化的想法可以解决这个问题。
举例实现均值归一化:计算每个电影所得评分的均值,它们存在一个向量中,称这个向量为 µ。
电影评分矩阵(Y矩阵):它的每一行都减去那个电影的平均评分。这么做就是把每个电影都归一化为平均评分为零。所以每个电影在新矩阵Y中的平均评分都是0。
然后对评分数据集使用协同过滤算法。新矩阵Y(每行的均值都是0)当做数据集用来学习,参数 θ(j)和特征变量 x(i)就是用这些均值归一化后的电影评分来学习。
θ(j) 转置乘以 x(i) ,其中 x 和 θ 都是均值归一化的数据集中学习出的参数,但是因为对数据集减去了均值,所以为了给电影i预测评分需要把这个均值加回来,这就是我得到的预测值。
如果参数是0,最终会预测为 µi。意思是如果Eve 没给任何电影评分,我们就对这个新用户 Eve 一无所知,我们要做的就是预测她对每个电影的评分,就是这些电影所得的平均评分。
均值归一化如果你有些电影是没有评分的,你可以尝试这个算法的其他版本,对不同的列进行归一化,使得它们的均值为0。
网友评论