基于协同过滤的推荐系统


概述

为了让推荐结果符合用户口味, 我们需要深入了解用户和物品. 用户的兴趣是不断变化的, 但用户不会不停的更新兴趣描述. 最后, 很多时候用户并不知道自己喜欢什么. 因此, 我们需要通过算法自动发觉用户行为数据. 从用户的行为中推测用户的兴趣, 从而给用户推荐满足他们兴趣的物品. 通常我们会给用户推荐其他用户看过的物品, 或者是浏览物品相关的类似商品.

基于用户行为分析的意见算法是个性化推荐系统的重要算法, 学术界一般将这种类型的算法称为协同过滤算法. 顾明思议, 协同过滤是指用户可以齐心协力, 通过不算地和网站互动, 是自己的推荐列表能够不断过滤掉自己不敢兴趣的物品, 从而来满足自己的需求.

用户行为数据简介

用户行为数据最简单的存在形式就是日志. 网站在运行过程中都产生大量原始日志, 并将其存储在文件系统中. 很多互联网业务会把多种原始日志按照用户行为汇总成会话日志. 推荐系统和电子商务网站就会将原始日志描述成用户行为的会话日志. 会话日志同存储在分布式数据仓库中, 如支持离线分析的 Hadoop Hive. 这些日志录了用户的各种行为, 如在电子商务网站中这些行为主要包括网页浏览, 购买, 点击, 评分和评论等.

用户行为在个性化推荐系统中一般分为两种: 显性反馈行为和隐性反馈行为.

当然, 在很多时候我们一般数据集中必须含有产生行为的用户和行为的对象就是所有行为的对象就是所有行为都必须包含的. 一般来说, 不同的数据集包含不同的行为. 目前使用较多的数据集:

  • 无上下文信息的显性反馈数据集, 每一条记录包含用户 ID, 物品 ID 和用户对物品的评分

用户行为分析

仅仅基于用户行为数据涉及的推荐算法一般称为协同过滤算法. 学术界对协同过滤算法进行了深入研究, 提出了很多方法. 比如基于领域的方法, 隐语义模型等. 在这些方法中, 在业界得到最广泛的算法是基于领域的方法. 而基于领域的方法主要包含下面两种:


  • 基于物品的协同过滤算法, 这种算法给用户推荐和他之前喜欢的物品相似的物品
  • 基于用户的协同过滤算法, 这种算法给用户推荐和他兴趣相似的其他用户喜欢的物品

基于物品的协同过滤算法

基于物品的协同过滤算法是目前业界应用最多的算法. 无论亚马逊网, 还是 Netflix, YouTube, 其推荐算法的基础都是该算法. 基于物品的协同过滤算法主要分为三步:


  1. 计算物品之间的相似度
  2. 计算被推荐物品的兴趣度
  3. 根据物品的相似度和用户的历史行为给用户生成推荐列表

计算物品相似度

我们将通过一个公式来定义物品的相似度, 这个公式叫做余弦相似度. 其实有点类似 KNN 算法中的距离公式, 都是找到最近相似的事物. 其中 N(i) 是喜欢物品 i 的用户数, N(j) 是喜欢物品 j 的用户数. 公式的意思是共同喜欢 i 和 j 的人数 / sqrt(喜欢 i 的人数 * 喜欢 j 的人数)

从这个式子中可以看出, 在协同过滤中两个物品产生相似度是应为它们共同被很多用户喜欢. 那么如果需要计算相似度, 需要构建一个基于物品的矩阵. 我们通过一个用户和电影的简单例子来看一看.

假设我们现在有用户 A, B, C, D, 电影 m1, m2, m3, m4, m5, 那么有用户看过这些电影:


  • A: m1, m3, m5
  • B: m2, m4
  • C: m2, m3, m4
  • D: m4, m5

那么我们可以发出这样 4 个临时矩阵:

(对于用户 A)

机器学习进阶 第二节 第十一课_数据

(对于用户 B)

机器学习进阶 第二节 第十一课_协同过滤算法_02

(对于用户 C)

机器学习进阶 第二节 第十一课_相似度_03

(对于用户 D)

机器学习进阶 第二节 第十一课_数据_04

那么将上面的矩阵合并得到一个公共矩阵:

机器学习进阶 第二节 第十一课_相似度_05

矩阵的里面的数字表示公共人数, 那么接下来需要计算相似度. 利用上面的公式, 其中看过的各个电影的人数为 m1:1, m2:2, m3:2, m4:3, m5:2 人. 得到相似度矩阵:

机器学习进阶 第二节 第十一课_数据_06

计算被推荐物品的兴趣

首先我们要建立用户对物品的评分矩阵, 我们以A用户为例子, 假设评分为: m1:2, m3:4, m5:3.

机器学习进阶 第二节 第十一课_协同过滤算法_07

那么计算被推荐物品的兴趣度计算公式为:

p(ij) = W(ij) * r(i)

其中 W(ij) 为推荐的与 i 相近的 j 物品, r(i) 为用户对物品 i 的评分.

通过这个式子我们可以得出兴趣度, 但是推荐电影当然要去除已经看过的. 用户 A 对电影 m1, m3, m5 每个相似度中只有 m2, m4 没有看过, 所以计算 m2, m4 的兴趣度:

m3-m2: 4 * 0.50 = 2.00
m3-m4: 4 * 0.41 = 1.64
m5-m4: 3 * 0.41 = 1.23

那么我们确定一个要推荐的影片个数 K, 假设为 1. 那么通过比较我们得出兴趣度最高的是 m2, 则将 m2推荐给 A 用户.