推荐系统:Content-based & Collaborative Filtering

X = set of 顾客
S = set of 商品
Utility function: X × \times × S = R
R = 打分的集合
本文将主要针对以下关键问题进行阐述:
(1) 收集矩阵中已知的打分:怎么收集utility matrix中的数据
(2) 根据已知的打分推断未知的得分:我们主要关心的是未知的高分项,因为我们只想知道客户喜欢什么而不关心客户不喜欢什么
(3) 评估推断方法的优劣:怎样度量推荐方法的成功与否

Utility matrix (U)是稀疏的,因为大部分商品大部分人都没有打分
冷启动问题
1.新的商品没有打分
2.新的用户没有历史数据

1. Content-based Recommender Systems

基于内容推荐的主要思想是给用户x做推荐时,将与用户x之前高度打分的物品相似的物品推荐给x。比如做电影推荐时,可以推荐具有相同演员,编剧,类型的电影。推荐网站博客新闻时,将具有相似内容的网站进行推荐。
Item Profiles
对于每一个物品,创建一个物品profile,一个特征向量的集合。
比如对于电影来说:作者,题目,演员, 导演…
文本:文本中重要词的集合(权重可以是TF-IDF)
User profiles and Prediction:
User profile possibilities:
user的打分项profiles的加权平均,权重为它们与平均排名之间的差异
Prediction heuristic:
给定user profile x 和 item profile i,估计
u ( x , i ) = c o s ( x , i ) = x ⋅ i ∣ ∣ x ∣ ∣ ⋅ ∣ ∣ i ∣ ∣ u(x,i) = cos(x,i)=\frac{x \cdot i}{||x ||\cdot ||i||} u(x,i)=cos(x,i)=xixi

基于内容推荐方法的优点:

  1. 不需要其他用户的数据,基于商品的属性信息进行推荐,所以没有冷启动问题或者稀疏问题。
  2. 能够推荐与用户品味相同的商品
  3. 能够推荐新的或者不著名的商品
  4. 能够提供解释(通过列出导致该商品被推荐的content-features)
    缺点:
  5. 找到恰当的特征是困难的
  6. 给新用户做推荐时,如何建立一个user profile?
  7. 过分专业化:
    推荐从来不超过用户的content profile
    用户可能有多种兴趣
    不能利用其他用户的质量判断?

2. Collaborative Filtering

协同过滤方法的主要思想是当为用户x做推荐时,找到N个与x的打分很相似的用户,然后基于这些用户在N上的打分来估计x的打分。

1.找到相似的用户, r x r_x rx表示用户x的打分向量。

  • Jaccard相似度度量忽视了打分值的大小。
  • cosine相似度度量:
    s i m ( x , y ) = c o s ( r x , r y ) = r x ⋅ r y ∣ ∣ r x ∣ ∣ ⋅ ∣ ∣ r y ∣ ∣ sim(x,y) = cos(r_x, r_y) = \frac{r_x \cdot r_y}{ ||r_x|| \cdot ||r_y|| } sim(x,y)=cos(rx,ry)=rxryrxry
    问题:将缺失值(没有打分的项)当做了“negative”(默认为不喜欢0分)
    (因为交集为0,但是分母仍然除去了该打分项的大小)
    r x = { 1 , 0 , 0 , 1 , 3 } r_x= \left\{ 1,0,0,1,3 \right\} rx={ 1,0,0,1,3}
    r y = { 1 , 0 , 2 , 2 , 0 } r_y= \left\{ 1,0,2,2,0 \right\} ry={ 1,0,2,2,0}
  • Pearson correlation coefficient:
    S x y S_{xy} Sxy 为同时被用户x和y打分的物品
    s i m ( x , y ) = ∑ s ∈ S x y ( r x s − r x ′ ) ( r y s − r y ′ ) ∑ s ∈ S x y ( r x s − r x ′ ) 2 ∑ s ∈ S x y ( r y s − r y ′ ) 2 sim(x,y) = \frac{\sum_{s \in S_{xy}(r_{xs} - r'_x)(r_{ys}-r'_y)}} {\sqrt{\sum_{s \in S_{xy}(r_{xs} - r'_x)^2}} \sqrt{\sum_{s \in S_{xy}(r_{ys} - r'_y)^2}}} sim(x,y)=sSxy(rxsrx)2 sSxy(rysry)2 sSxy(rxsrx)(rysry)
    其中 r x ′ r'_x rx r y ′ r'_y ry是x,y的平均排名
  1. 根据相似性度量进行推荐:
    根据上一步计算的与x相似的用户,N表示k个用户的集合,他们与x最相似并且都对产品i打过分,根据上一步计算的与x相似的用户,N表示k个用户的集合,他们与x最相似并且都对产品i打过分
    预测分数为:
    r x i = 1 k ∑ y ∈ N r y i r_{xi} = \frac{1}{k} \sum_{y \in N} r_{yi} rxi=k1yNryi平均值
    r x i = ∑ y ∈ N s x y r y i ∑ y ∈ N s x y s r_{xi} = \frac{\sum_{y \in N}s_{xy} r_{yi}}{\sum_{y \in N} s_{xys}} rxi=yNsxysyNsxyryi加权平均值
    可能还有其他的技巧。
    上述为User-user的协同过滤,当然还有Item-Item之间的协同过滤,即计算物品之间的相似度。

Item-Item:

  • 对于item i,找到其他与其相似的items
  • 基于相似的items的打分来估计i的打分
  • 可以使用与user-user模型相同的相似性度量和预测函数
  • 定义items i和j之间的相似度 s i j s_{ij} sij , 选择k个最近邻 N ( i ; x ) N(i;x) N(i;x)(与i最相似的且被x所打分的items) , r x j r_{xj} rxj用户x对物品j的打分
    r x i = ∑ j ∈ N ( i ; x ) s i j ⋅ r x j ∑ j ∈ N ( i ; x ) s i j r_{xi}= \frac{\sum_{j \in N(i;x)} s_{ij} \cdot r_{xj}}{\sum_{j \in N(i;x)}s_{ij}} rxi=jN(i;x)sijjN(i;x)sijrxj
    常见做法(改进):
    r x i = b x i + ∑ j ∈ N ( i ; x ) s i j ⋅ ( r x j − b x j ) ∑ j ∈ N ( i ; x ) s i j r_{xi}= b_{xi}+\frac{\sum_{j \in N(i;x)} s_{ij} \cdot (r_{xj}-b_{xj})}{\sum_{j \in N(i;x)}s_{ij}} rxi=bxi+jN(i;x)sijjN(i;x)sij(rxjbxj)
    其中 b x i = μ + b x + b i b_{xi} = \mu + b_x +b_i bxi=μ+bx+bi,其中 μ \mu μ为电影评分的总体均值, b x b_x bx=用户x的平均打分- μ \mu μ(用户x的打分偏差),同理 b i b_i bi为电影i的打分偏差

实际中,发现item-item通常比user-user要更好,因为items更加简单,而用户有多种品味…
优点:

  • 不需要做特征选择

缺点:

  • 冷启动问题:需要足够的用户来找到匹配
  • user/ratings矩阵很稀疏,很难找到对相同的items进行打分的用户
  • First rater:不能推荐之前没有被打分过的item
  • popularity bias:
    不能向具有独特品味的人推荐商品
    倾向于推荐热门的商品

混合模型

将基于内容的方法加入到协同过滤的方法中
对于新商品问题制作item profiles
人口统计学来处理新用户问题??

评估预测

根据已知的打分进行比较预测

  • Root-mean-square error(RMSE)
    ∑ x i ( r x i − r x i ∗ ) 2 \sqrt{\sum_{xi}(r_{xi}-r^*_{xi})^2} xi(rxirxi)2 ,其中 r x i r_{xi} rxi是预测值, r x i ∗ r^*_{xi} rxi是x在i中上的真实打分

  • top10的精确率

  • Rank correlation

0/1模型:

  • Coverage
  • Precision
  • ROC
    错误度量中的问题:狭隘的关注与准确率有些时候会忽略重点,例如预测多样性,预测背景,预测顺序。在实际中,我们只关心于预测高打分。
    RMSE might penalize a method that does well for high ratings and badly for others.

复杂度

1.最昂贵的步骤是找到k个最相似的顾客 O ( ∣ X ∣ ) O(|X|) O(X),在运行时计算太费时间,可以预计算。
2.更多的数据比更好的算法更加有效,简单的算法在大量数据下就会做的很好。

你可能感兴趣的:(机器学习,算法,基于内容,协同过滤,推荐系统)