不必时时怀念我,也不要指望我回来,我离开以后,你们就是我, Vive le peuple!
推荐算法大家都应该知道是什么玩意
引例
通过用户已评测电影的数据来预测其他用户对电影的评测分数 
基于内容的推荐算法
计算方法
对于内容进行分析,我们知道AB喜欢爱情片,CD则喜欢动作片 现在我们获得了每个电影的成分比例(爱情内容/动作内容的比例)  我们可以将特征转化为一个特征向量
 同时,我们还需要预测用户的喜好向量 就是用户对某个电影的喜欢程度(对目前来说我们可以得到此向量) 
如果我们要求A对第三个电影的评分,我们就可以这样做 将第三个电影的特征向量和A的喜好向量相乘 
优化函数
我们的目标是让以下的式子结果最小,和之前的代价函数类似 
对于theta的代价函数如下图  对应的梯度下降公式 
协同过滤
简单情况
假如我们知道用户的评分和喜好,但是不知道电影的具体成分  我们可以通过以下的表达式求出x(i)  将此问题推广到一般的情况  
一般情况
上面的情况相对来说比较简单,而事实上,有可能我们知道的数据就只有用户对于电影的不完整评分
按一般的方法,先预测出x再求出theta,然后按顺序反复循环  第一个求和运算是将所有用户j的总和和所有被该用户评分过的电影总和 加起来(也就是将所有的(i,j)对加起来) 第二个表示对于每一个电影i,将所有对它评分过的用户j进行求和
但按下面的公式求解就可以同时将两者求出来,也是 上面两个粉色框的公式就是下面公式的第一项,后面就是正则化了 
算法步骤
首先将x和theta设为小随机数 然后用梯度下降求出相关参数  如果一个电影要找到相关的电影,就可以计算下列的式子,如果越小则相关性越大 
如果想求预测评分,可以将x,theta进行以下处理并让其相乘 这种方式叫低秩矩阵分解 
均值规范化
如果有一种情况,一个用户刚注册,没有任何数据怎么办? 我们将所有的评分整合到一个矩阵里面(包括未评分的部分)  之后求平均值(不包括未评分的)  之后,让Y矩阵每个格子减去平均值 
之后,将此矩阵进行协同过滤,对于每个小格子,公式如下  对于新用户来说,它的预测评分如下(其实就是求个平均值。。。) 
|