推荐系统初探

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Shingle_/article/details/82290427

推荐系统样例:

  • 基于对用户兴趣的预测结果,为读者推荐新闻报道、短视频等。(如:今日头条)
  • 基于顾客过去的购物或商品搜索历史,为在线商店的顾客推荐他们可能要买的商品。(如:亚马逊)

长尾:实体店的货架空间有限,只能给顾客展示所有存在商品的很小一部分,而在线商店能展示任何可用商品
—— 在线销售商对于传统实体销售商的优势。 同样,也是由于长尾的存在,信息爆炸,人们无法看到所有的东西,推荐系统发挥作用。

推荐系统中,用户(user)对物品(item)的偏好信息通过效用矩阵(utility matrix)表示。信息的获取方式:

  • 用户对物品评级:商品评价、电影打分等
  • 根据用户的行为推理:观看、阅读、购买、添加购物车等

基于内容(Content-based)的推荐

推荐系统面临的一个问题就是如何在缺乏数据时给出好的推荐,这称为冷启动(cold-start)。

可以将推荐看成搜索,这就可能会使用所需要推荐的物品的属性,可以使用属性作为相似度计算所需的数据,这称为基于内容的推荐

基于内容的系统集中关注物品的属性。物品之间的相似度通过计算它们的属性之间的相似度来确定,需要为每个物品构造特征。举例如电影的明星、导演、年份、流派等。

基于协同过滤(collaborative filtering)的推荐系统

不是利用专家给出的属性来描述物品来计算相似度,转而利用用户对物品的意见来计算相似度。协同过滤不是关心物品的描述属性,而是按照许多用户的观点来计算相似度

相似度计算:见距离计算Blog

  • 相似度 = 1 / (1 + 欧式距离)
def eulidSim(inA, inB):
    return 1.0 / (1.0 + np.linalg.norm(inA - inB))
  • 皮尔逊相关系数(Pearson correlation)
def pearsonSim(inA, inB):
    if len(inA) < 3:
        return 1.0
    return 0.5 + 0.5 * np.corrcoef(inA, inB, rowvar=0)[0][1]
  • 余弦相似度(cosione similarity)
def cosineSim(inA, inB):
    return 0.5 + 0.5 * (float(np.dot(inA, inB)) / (np.linalg.norm(inA) * np.linalg.norm(inB)))

相似性度量的选择

  • 当您的数据受用户偏好/用户的不同评分尺度影响时,请使用皮尔逊相似度(适合矩阵中仅由0和1组成)
  • 如果数据稀疏,则使用余弦(许多额定值未定义)
  • 如果您的数据不稀疏并且属性值的大小很重要,请使用欧几里得(Euclidean)。
  • 建议使用调整后的余弦(Adjusted Cosine Similarity)进行基于商品的方法来调整用户偏好。
  • 进行相似度度量时,可以选择对数据进行舍入处理或者评分归一化(即将每个评分减去某个用户的平均评分值)

内存方法(Memory-based)

基于用户的协同过滤

通过用户对物品的偏好来计算用户之间的相似度(与某用户相似的用户所喜欢的项会推荐给该用户)。

基于物品的协同过滤

通过喜欢物品的用户来计算物品之间的相似度。

UserCF和ItemCF比较与选择:
基于物品的相似度计算的时间会随物品数量的增加而增加,基于用户的相似度计算的时间则会随用户数量的增加而增加。如果商品数目比较少,用户的数目很多,可能倾向于基于物品相似度的计算方法(大部分产品导向的推荐引擎)。

模型方法(Model-based)

利用矩阵分解(Matrix factorization)提高推荐的效果

SVD分解

SVD分解会降低程序的速度,SVD分解可以在程序调入时运行一次。在大型系统中,SVD每天运行一次或者其频率更低,并且还要离线运行。

SVD++算法

协同关系矩阵

  • ( r u a ) U A :每个元素 r u a 表示 u a 上的交互强度
  • 此矩阵的大多数元素为未知,推荐算法的目标就是预测这些位置上的强度值(对比:Topic Model)

m i n b ( u , a ) K ( r u a μ b u b a p u T q a ) 2 + λ | | | | 2

上式: μ 为全局偏置, b u 为u的偏差, b a a 的偏差, p u u 的描述, q a a 的描述。

  • 矩阵分解方法,比SVD在处理未知元素上更合理,同时在矩阵稀疏时计算速度快
  • 无法直接处理新出现的 u a
  • 在Netflix电影推荐项目上取得了很好的效果
UV分解

M n × m = U n × d V d × m

推荐系统的评价

通用的一个指标:均方根误差(Root-Mean-Square Error, RMSE)

《推荐系统实战》

《Machine Learning in Action》 P253 14.1.2

《Mining of Massive Datasets》 9 P227

猜你喜欢

转载自blog.csdn.net/Shingle_/article/details/82290427