在引入推荐系统这个概念前,我们首先讲述Long Tail现象。对于实体商店而言,由于其货架是有限的,所以要尽可能挑选卖的好的商品摆在货架上。Long Tail是指大部分的商品的popularity没那么高。同理对于线上商店来说,虽然可以摆出很多商品,但推荐给某个用户的商品也是有限的。

基于内容的推荐系统(Content-Based Recommendations)
主要思想:根据用户对打分比较高的产品推荐与这些产品较为相似的产品。例如,对于电影推荐而言,给用户推荐有相同导演、演员的其他电影;对于博客推荐而言,给用户推荐具有相似标题的博客。
产品画像(Item Profiles)的建立
对于产品(item),我们需重构其特征,这个过程叫做Item Profiles。例如,对于某部电影而言,其画像可以由该电影的演员、导演、上映时间、电影类型等组成;对于文本而言,其画像就是某些重要的单词的集合。下面给出如何为文本生成画像(Profile)。
fij:特征i(term)在文本j(item)出现的频率
TFij=maxkfikfij
说明:除的操作是为了对较长的文件产生折扣的效果
ni:包含特征i(item)的文本的数量
N:总的文本的数量
IDFi=logniN
TF−IDFscore:wij=TFij∗IDFi
最后选取该文本中TF−IDFscore较高的单词作为特征向量
对于该算法的解释:TFij表示的是该单词在文本中出现的频率,但是仅仅把这个频率作为评估该单词是否能成为特征是不合理的,例如,一些常用词:的、是等等,将这些常用词当作特征显然是不合理的,所以还应该结合IDFi衡量该单词在所有文本中出现的频率的倒数,如果该单词在所有文本中出现频率都较高,说明该单词是常用词,不应该将其当作特征。
用户画像(User Profiles)的建立
结合矩阵U中用户喜欢的电影,按照某种方式聚合得到用户的画像。例如,产品是电影,Utility Matrix中:1表示该用户喜欢这部电影,空表示该用户不喜欢该电影。在用户U喜欢的电影中,有20%的电影包含演员 Julia Roberts,所以用户U的画像中,Julia Roberts的值为0.2。若Utility Matrix中的打分为1−5。应该首先将Utility Matrix中,用户U的相关项减去平均值以达到正则的目的;然后将处理后的相关项取平均值得到用户U的画像中,Julia Roberts的值。

基于内容的推荐
给定用户的画像x、产品的画像i,计算余弦距离,余弦距离越大,则越应该推荐该产品。
u(x,i)=cos(x,i)=∣∣x∣∣∗∣∣i∣∣x∗i
总结:
- 不需要其他用户的数据
- 能够给用户提供个性化的推荐
- 能够推荐一些新的不那么流行的产品(item)
- 对于新用户无法建立用户画像
- 从来不会推荐用户产品画像外的产品
- 未结合其他用户来作综合推荐
协同过滤(Collaborative Filtering)
对于用户X而言,找出与用户X打分相似的其他用户,然后根据其他用户的打分来估计用户X对于某些产品(item)的打分。
User-user collaborative filtering
Jaccard距离:在计算距离时,会忽略用户对某个产品的打分,如果该用户对某个产品有打分,则为1;否则,为0
余弦距离:计算距离时,会将用户对未打分的产品的分值置为0
sim(x,y)=cos(rx,ry)=∣∣rx∣∣∗∣∣ry∣∣rx∗ry
Pearson correlation coefficient:sim(x,y)=∑s∈Sxy(rxs−rx)2∑s∈Sxy(rys−ry)2∑s∈Sxy(rxs−rx)(rys−ry)
其中:Sxy:用户x与用户y均有过打分记录的产品
rx:用户x对所有产品打分的均值

预测用户对于某个产品的打分,有以下的一些方法:
rxi=k1y∈N∑ryi
rxi=∑y∈Nsxy∑y∈Nryi∗sxy
其中:N表示与用户x最为相似的用户的集合
sxy=sim(x,y)
Item-item collaborative filtering
这里讲述的是基于相似用户来估计评分,这里的思路是结合相似的产品来进行评分。
- 对于产品(item)i而言,首先找出与i最为相似的产品的集合N
- 使用这些相似的产品(item)来估计i
rxi=∑j∈N(i:x)sij∑j∈N(i:x)sij∗rxj
其中:sij:产品(item)i与j的相似性


对于rating的估计,还有以下一种更为常见的方式。
rxi=bxi+∑j∈N(i;x)sij∑j∈N(i;x)sij∗(rxj−bxj)
其中:bxi=μ+bx+bi
以item是电影为例
μ:所有电影的平均打分
bx:用户x对于电影打分的偏差
bi:电影本身所造成的打分偏差
总结:
- 在实际的推荐系统中,item-item的表现效果一般要好于user-user
- 在系统中需要足够多的用户来匹配
- 不能够推荐之前未被打分的产品
- 协同过滤算法往往会推荐一些比较流行的产品,不能提供个性化的推荐
The Netflix Prize Model
前面已经提出了两种常见的推荐算法(基于内容和协同过滤),在这一节,将结合上述提到的推荐算法讲述其在实际场景中的应用。
Modeling Local & Global Effects
对于某个用户对于某部电影的打分,可以分成以下几个部分来看待:1、电影的平均分;2、电影自身的效应;3、用户本身的效应;4、该用户和该电影之间难以预测的效应。例如,电影的平均分为3.7,电影自身的效应为0.5,用户的效应为-0.2,所以可以得到该用户对于电影的baseline为4.0。最后结合该用户不喜欢该电影(-0.2),所以该用户对于该电影的打分为3.8
rxi=bxi+∑j∈N(i;x)sij∑j∈N(i;x)sij∗(rxj−bxj)
其中:bxi=μ+bx+bi
在上述定义中,权重的是由sij代替,但由于用户之间并不是相互独立的,所以是存在一些问题的,所以将上述定义改写成下面的形式。
rxi=bxi+j∈N(i;x)∑wij(rxj−bxj)
其中:bxi=μ+bx+bi
wij表示item i与j之间的联系
RMSE=∣R∣1(i,x)∈R∑(rxi−rxi)2
SSE=(i,x)∈R∑(rxi−rxi)2
可知RMSE与SSE两者的效果是一致的,为了达到求解wij,使用梯度下降法来求解。
J(w)=xi∑⎝⎛bxi+j∈(i;x)∑wij(rxj−bxj)−rxi⎠⎞2
∇wJ=∂wij∂J(w)=2x,i∑⎝⎛bxi+k∈N(i;x)∑wik(rxk−bxk)−rxi⎠⎞(rxj−bxj)
潜在因素模型(Latent Factor Models )

不难发现,将其按照两个坐标轴来看待,横坐标表示性别,纵坐标表示严肃或活泼与否,每个人会处在坐标轴中的某个位置。结合SVD分解,来发现其中的潜在因素。

现在想要达到的目标:min∑i,x∈R(rxi−qi∗px)2。在这里,并不要求矩阵P、Q的列向量的相互正交的,P表示的是用户与潜在因素间的矩阵,Q表示的是电影与潜在因素间的矩阵。
UV分解
由于部分地方表述不清,可以参见其他博客方便理解。
协同过滤推荐算法详解
关于Netflix Prize的总结