推荐系统系列 - 实例二 - 协同过滤算法-储备知识

目录

  • 协同过滤简介
  • 协同过滤算法分类
    • 基于领域的协同过滤算法
    • 基于模型的协同过滤算法
  • 相似度算法
      • 欧式(欧几里得)距离相似度
      • 余弦相似度
      • 皮尔逊相关系数
      • Jaccard公式
  • 优势与劣势
    • 优势
    • 劣势

协同过滤简介

  • 协同过滤算法(collaborative filtering),协同过滤简写为cf,这就是user-cf,item-cf的简写来历.

  • CF算法的原理是汇总所有<用户,物品>的行为对,行为是评分(显式)或者是行为次数(隐式), 是集体智慧的体现。

    • 显式的用户反馈:这类是用户在网站上自然浏览或者使用网站以外,显式地提供反馈信息,例如用户对物品的评分或者对物品的评论,一版常见场景都是写的几星几星的。
    • 隐式的用户反馈:这类是用户在使用网站是产生的数据,不是用户主动填写评分信息,数据隐式地反映了用户对物品的喜好,例如用户购买了某物品,用户查看了某物品的信息等等,一版都是次数,然后做归一化处理。
  • 通俗一点就像是你和你的哥们都爱飙车,他又爱玩德州,因为你们有共同爱好,你们比较相似,所以你也可能喜欢玩德州,就把德州推荐给你 ,你们和哥们成为哥们很大原因是你们有共同爱好,就是你们的特征相似。(User-Based CF)。

  • 另外还有一个例子,比如两本书,第一本spark core讲解,第二本spark mllib,当你购买第一本的时候,我会给你推荐第二本,这两本书相似,相似是通过用户对书的喜欢提取出来的。(Item-Based CF)

协同过滤算法分类

基于领域的协同过滤算法

  • 这类算法的主要思想是利用的打分矩阵, 利用统计信息计算用户和用户, item和item之间的相似度。然后再利用相似度排序, 最终得出推荐结果。
  • 基于用户的协同过滤算法
    • 基于用户对物品的偏好找到邻居用户,然后将邻居用户喜欢的推荐给当前用户。数学上,就是将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度,找到 Topn邻居后,根据邻居的相似度权重以及他们对物品的偏好,预测当前用户没有偏好的未涉及物品,计算得到一个排序的物品列表作为推荐。
  • 基于物品的协同过滤算法
    • 基于物品的系统过滤的原理和基于用户的协同过滤类似,只是在计算邻居时采用物品本身,而不是从用户的角度,即基于用户对物品的偏好找到相似的物品,然后根据用户的历史偏好,推荐相似的物品给他。数学上,就是将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度,得到物品的相似物品后,根据用户历史的偏好预测当前用户还没有表示偏好的物品,计算得到一个排序的物品列表作为推荐。
  • 存在问题点
    • 用户数或者商品数变得巨大的时候,就变得运算量巨大,以至于无法运算
    • 矩阵太稀疏,特征较少,用户一般评价商品数也不多
    • 用户也习惯善于吐槽,不太善于表扬

基于模型的协同过滤算法

  • 基于矩阵分解和潜在语义的协同过滤算法
  • 基于贝叶斯网络的协同过滤算法
  • 基于SVM的协同过滤算法
  • 此处不做模型详细介绍,后面会单独讲解
  • spark mllib中实现了交替最小二乘法(ALS)协同过滤算法,其中也是对矩阵进行分解计算

相似度算法

欧式(欧几里得)距离相似度

  • 欧式距离相似度就是计算两个点直接距离,距离越大相似度越小,就是二位平面几何两点距离的一个推广,在n维空间依然适用.

余弦相似度

  • 余弦距离,也称为余弦相似度,是用向量空间中两个向量余弦值作为衡量两个个体间差异大小的度量值,即两个向量之间的夹角大小,二维和n维都适用.

皮尔逊相关系数

  • 皮尔逊相关系数是比欧几里德距离更加复杂的可以判断人们兴趣的相似度的一种方法。
  • pearson相似度与欧式距离相似度的最大区别在于它比欧式距离更重视数据集的整体性;因为pearson相似度计算的是相对距离,欧式距离计算的是绝对距离。
  • 就实际应用来说,有不同量纲和单位的数据集适合使用pearson相似度来计算,相同量纲和单位的数据集适合使用欧氏距离。

Jaccard公式

  • Jaccard系数主要用于计算符号度量或布尔值度量的个体间的相似度,因为个体的特征属性都是由符号度量或者布尔值标识,因此无法衡量差异具体值的大小,只能获得“是否相同”这个结果,所以Jaccard系数只关心个体间共同具有的特征是否一致这个问题。如果比较X与Y的Jaccard相似系数,只比较xn和yn中相同的个数。

优势与劣势

优势

  • 千人千面,不同人的得到不同的个性化推荐结果.
  • 能起到意想不到的推荐效果, 经常能推荐出来一些惊喜结果,尤其是user-base cf.
  • 进行有效的长尾item,可以是推荐的内容更为均匀,不像基于热度的推荐,会出现数据热点过热
  • 只依赖用户行为, 可以脱离繁重业务, 使用范围广.

劣势

  • 冷启动问题,开始需要大量的行为数据
  • 对于推荐结果很难给出合理的推荐解释,有时候甚至得到一些特别奇怪的结果

你可能感兴趣的:(推荐系统,推荐系统系列)