一文搞通推荐系统

  一直都想把推荐系统好好入个门,虽然在天池上打了一个入门赛,但是还是感觉对推荐系统很陌生,这篇文章就把我在推荐系统的入门到后期的学习进行一个积累,希望这一篇文章能够解决推荐系统入门上80%的困惑。

  首先推荐系统的岗位的要求有这两项:

  1、利用机器学习技术,改进推荐系统,优化数亿用户的体验; 2、分析基础数据,挖掘用户兴趣、内容价值,增强推荐系统的预测能力

  说白了就是相关的技术有:数据挖掘、数据分析、推荐系统搭建、推荐系统优化。四个重要的方向,其中前面两项不是这篇文章的重点,就不详细去讲了。那么推荐系统是怎么搭建又要从什么角度去优化呢?

  互联网的数据特点:数据分布属于长尾分布,很多数据使用频率很低少部分数据才能够被广泛使用。

  首先我们要知道比较常用的协同过滤算法有两种:1.基于物品的协同过滤算法(ItemCF) 2.基于用户的协同过滤算法(UserCF)。物品的协同过滤就是很多人买过A也买过B,我们认为AB具有一定相似性,所以可以给买过A的人推荐B,买过B的人推荐A。用户的协同过滤算法则是用户1买过ABC,用户2买过AB那么他和用户1很像就给他推荐用户1买过的C。这两种方法各有优劣,基于物品则对于物品数量的增加则带来惩罚,基于用户则用户增加带来惩罚,很明显大多数情况基于物品的协同过滤更加具有应用性。

  基于物品的协同过滤算法

    过程如下:

    1.使用某一相似度计量方法计算两两物品之间的相似度。

    2.根据物品的相似度和用户历史行为生成推荐表,存储起来需要的时候推荐给用户。

    

 

     别慌,2-8就是个计算相似度的公式,2-9则是最后兴趣度的计算。我们根据代码理解一下就明白了。

uid_score_bid = ['A,1,a','A,1,b','A,1,d','B,1,b','B,1,c','B,1,e','C,1,c','C,1,d','D,1,b','D,1,c','D,1,d','E,1,a','E,1,d']

  我们用A1a代表用户A对a的评分是1,我们就能得到这样的用户信息:(后面省略)

{'A': {'a': 1, 'b': 1, 'd': 1}, 'B': {'b': 1, 'c': 1, 'e': 1}, 

  这里代表A购买了abc分别打分都是1分。

  构建好我们的输入后,我们开始:

  1.构造共现矩阵N。(物品共出现了多少次)

  结果:{'a': 2, 'b': 3, 'd': 4, 'c': 3, 'e': 1}

  2.物品的同选矩阵C。(物品A被选的的时候还有什么物品被选择了几次)

  结果:

 

   代表买a的时候b被选择了1次,d被选择了2次,是在所有用户群里的。

  3.计算相似度W

  计算物品和物品之间的相似度,对于每一个物品要计算他和所有同选矩阵集里面的相似度即可,例如上面a计算b和d的相似度即可。

  i 是C的每一个key(上面的a),对于C的value,j和cij是Cvalue的key和数量(上面的'b':1 'd':2)。那么有W[i][j] = cij/math.sqrt(N[i] * N[j])

  也就是i和j的相似度W[i][j]等于:他们同选矩阵中出现的次数 / 根号下(共现矩阵中 i 出现的次数乘以 j 出现的次数)

 

 userCF和ItemCF的差别

  userCF是找到与用户相似的小圈子的热门物品,带有社交性质。而itemCF则是找到喜欢的物品类似的物品,带有个性化性质。

  userCF是粗粒度的,对于用户兴趣并没有那么细化。

  userCF时效性取决于社交热点,而itemCF时效性取决于最近的行为。

  userCF适合物品更新速度大于用户更新速度的,itemCF则相反。

  

posted @ 2021-06-25 10:37  灰人  阅读(188)  评论(0)    收藏  举报