ml课程:推荐系统原理及相关案例代码

版权声明:===========版权所有,可随意转载,欢迎互相交流=========== https://blog.csdn.net/weixin_42446330/article/details/84588936

以下是我的学习笔记,以及总结,如有错误之处请不吝赐教。

本文主要介绍推荐系统常用的几种算法,以及相关案例代码。

基础知识:

推荐系统数学定义:设C为全体用户集合,设S为全部商品/推荐内容集合,设u是评判把si推荐cj的好坏评判函数,推荐是对于c∈C,找到s∈S,使得u最大,即:

推荐系统结构:推荐系统的意义是在信息过载的情况下,根据用户的相关action来推荐items。

推荐系统评估指标:推荐系统也需要评估指标,具体有以下几个:

  1. 准确度:主要包括打分系统和topN推荐两种:
  2. 覆盖率:表示对物品长尾的发掘能力(推荐系统希望消除马太效应),这个指标主要是对商家来说的,下面有两个计算公式如下(其中coverage比较粗糙,H熵则表示更细):

  3. 多样性:这个指标是对用户来说的,优秀的推荐系统能保证推荐结果列表中物品的丰富性(两两之间的差异性);假设s(i,j)表示物品i和j之间的相似度,多样性(即不相似度)表示如下:

  4. 新颖度:商品给永华的新鲜感(推荐他们不知道的商品);
  5. 惊喜度:推荐和用户历史兴趣不相似,却满意的;
  6. 信任度:提供可靠的推荐理由;
  7. 实时性:实时更新成都;
  8. ......

距离和相似度计算公式:用于后面介绍协同过滤算法。

推荐算法:

  • 基于内容:这个推荐算法主要是基于用户喜欢的物品属性、内容的推荐,需要分析内容,无需考虑用户与用户之间的关联;通常使用在文本相关产品上进行推荐;物品通过内容(比如关键词、电影题材、标志特征、年代等等);基于比对物品内容进行推荐,主要流程如下:
  1. 对于每个要推荐的内容,我们需要建立一份资料:①比如词Ki在文件Dj中的权重Wij;②常用方法有TF-IDF(具体可以看:ml课程:特征工程、面试题及相关案例代码中有详细解释);
  2. 需要对用户也建立一份资料:①比如说定义一个权重向量(wc1,…,wck);②其中wci表示第ki个词对用户c的重要度;
  3. 计算匹配度:比如用余弦距离公式

  • 协同过滤(Neighborhood-basedalgorithm):是一种基于‘近邻’的推荐算法,根据用户在物品上的行为找到物品或者用户的‘近邻’;协同过滤主要分为两种类型:
  1. 基于物品的协同过滤(item-basedCF):①对于有相同用户交互的物品,计算物品相似度;②找到物品“近邻”,进行推荐;具体流程如下:

    举例:计算一个用户对某一电影评分如下:

  2. 基于用户的协同过滤(user-based CF):①基于用户有共同行为的物品,计算用户相似度;②找到近邻,对近邻在新物品的评价(打分)加权推荐;方法与上面基于物品的协同过滤类似,区别是对每行的相似度/距离进行计算。具体流程如下:

  3. 两种协同过滤的区别

  4. 优缺点对比:

  • 隐语义模型(Latent Factor Model:通常很多评分矩阵都有空值,即有部分用户没有评分,如何正确填满未打分的项,因此我们假定有一些隐藏因子,可以对user和item进行关联,同时隐藏因子的个数小于user和item个数;那么如何进行预测呢?通常是求解用户/物品特征矩阵(user/itemfeaturematrix)即矩阵分解,有一种暴力解法是SVD(Singular Value Decomposition)或者SVD++:

    但是这种方法时间复杂度较高(Om3),而且原矩阵通常缺省值较多,因此我们使用改进的LFM隐语义算法,具体流程如下:
  1. 假定有U个用户,D个物品,R为打分矩阵,假定有K个隐含变量,我们需要找到矩阵P(U*K)和Q(D*K):

  2. 利用梯度下降找到合适的矩阵P(U*K)和Q(D*K):

  3. 正则化:

  4. 再次求梯度/偏导,更新迭代公式:

  5. 用P*Q还原矩阵补充未打分项,为保证可解释性,通常会限定分解得到的P和Q中的元素都是非负的,即非负矩阵分解(NMF,Nonnegtive Matrix Factorization)。因为不存在减法操作,因此可以看做对隐变量特征的贡献之和(加权),完成原矩阵拟合。
  6. 隐语义模型进一步优化,加“偏置”的隐语义模型,依旧使用梯度下降优化,新加的参数同样需要正则化,具体公式:

    相比隐语义模型,协同过滤更简单、直接、可解释性强;但是隐语义模型能更好地挖掘用户和物品隐藏关联关系,模型覆盖度更好。
  • 用户行为序列与word2vec模型:这个模型本质上也是体现商品关联,但是比协同过滤的覆盖度高;有给定中文分词后的文本,使用word2vec能得到每个词(phrase)在高维空间的特征向量,向量和向量之间的距离远近,表示2个词的关联度高低,在推荐系统中具体流程如下:
  1. 把用户的行为序列当做分词过后的phrase,送给word2vec学习;
  2. 根据商品映射得到的特征向量去找相似的商品。

冷启动:

  • 对于新用户:
  1. 所有推荐系统对于新用户都有这个问题 ;
  2. 推荐非常热门的商品,收集一些信息 ;
  3. 在用户注册的时候收集一些信息;
  4. 在用户注册完之后,用一些互动游戏等确定喜欢与不喜欢;
  • 对于新商品
  1. 根据本身的属性,求与原来商品的相似度
  2. Item-based协同过滤可以推荐

python推荐系统库surprise:基础算法(laseline algorithms)协同过滤(neighborhood methods)矩阵分解(matrix factorization-based SVD,PMF,SVD++,NMF),github源码地址

最后手动实现user-based协同过滤算法:欢迎关注我的github


To be continue......

猜你喜欢

转载自blog.csdn.net/weixin_42446330/article/details/84588936