数据挖掘-推荐系统

文章探讨了推荐系统的核心原理,包括个性化推荐的动机、方法(如协同过滤、基于内容和模型的推荐),以及其优点(如减少信息过载)和缺点(如冷启动问题、过滤泡泡和回声室效应)。强调了过度个性化带来的风险以及实施推荐系统时的多元化策略。
摘要由CSDN通过智能技术生成

推荐系统 

动机

● 在线世界:信息和项目过载

    ■ 太多的项目:产品、歌曲、电影、新闻文章、餐厅等。

    ■ 更多的选择需要更好的过滤器 ➜ 推荐引擎

用户的观点提供者的观点

● 识别相关项目  

● 最小化努力 (为了找到相关的项目)

● 最大化满足度

● 优化资金和注意力的花费

● 最大化销售/交易

● 最大化用户参与度 (例如,为了最大化广告收入)

● 获得竞争优势

编辑推荐

● 由“专家”推荐

    ■ 专家 = 对某个项目有专业知识的人 (例如,电影或餐厅评论家、员工作家、记者)

    ■ 客观、详尽、可信、有信誉 (至少在理想的世界中是这样...)

    ■ 写编辑推荐通常是有报酬的工作

同伴推荐

● 由普通用户推荐

    ■ 在线口碑推荐 (然而,用户通常是陌生人)

    ■ 在购物/预订网站上常见的功能

    ■ 通常是主观的、简短的、有偏见的

    ■ 每个项目的许多评论形成了平均观点 但再次代表了信息过载。

手工推荐 — 优点 & 缺点

● 优点

    ■ 语义丰富(评分、纯文本、图片、视频等)

    ■ 可解释性 / 可解读性

● 缺点

    ■ 手工努力 — 写评论的动机是什么?

    ■ 缺乏个性化

幼稚/替代方法

推荐简单汇总

IMDB 最佳250部电影

● 根据汇总分数对项目进行排名

简单汇总 — 优点 & 缺点

● 优点

    ■ 相对容易计算(通常基于不同因素进行加权汇总)

    ■ 通常是好的/安全的推荐(特别是对于新的/未知的用户)

● 缺点

    ■ 需要每个项目有足够数量的评分

    ■ 高风险的受欢迎偏见;缺乏多样性 ("富者更富"效应,"少数变富"效应)

    ■ 缺乏个性化

个性化推荐

● 用户有不同的偏好,这决定了项目的相关性

    ■ 偏好 = 兴趣、喜好、需求、想要、欲望等

    ■ 相关项目 = 最符合用户偏好的项目

● 基本设置

    ■ 用户集合 U={u1,u2,…,un}

    ■ 项目集合 V={v1,v2,…,vm}

    ■ 评分矩阵 R 有 |U| 行和 |V| 列

    ■ 矩阵元素 Ruv​:u 对 v 的评分 (例如,1-5 星,二进制 0/1)

个性化推荐 — 核心任务

1. 收集评分 Ruv​

2. 推断缺失值 \hat{R}_{uv}

  ● 实际上,主要对高值感兴趣

  ● 推荐系统的算法组件

  ● 有各种现有的方法

3. 评估:推荐有多好?

  ● 将 \hat{R}_{uv}​ 与测试集中的真实 Ruv​ 进行比较

收集评分

● 显式

    ■ 请/邀请/鼓励用户评价项目

    ■ 付费给用户评价项目(例如,众包)

● 隐式 — 从用户行为中推断评分,例如:➜ 高评分 (但如何获得低评分?)

    ■ 购买的产品

    ■ 观看的视频

    ■ 阅读的文章

    ■ 点击的链接

    ■ ... 

关键挑战:实际中的评分矩阵 R 非常稀疏!

评估

● 将 R 分为训练集和测试集

● 性能指标

    ■ 均方根误差(用于数值评分)\sqrt{\frac{1}{|S|}\sum_{(u,v)\in S}(\hat{R_{uv}}-R_{uv})^2}

    ■ 精确度、召回率、F1得分等 (对于二进制评分或在转换数值评分后的二进制推荐的 TP, TN, FP, FN)

    ■ 精确度@k, 召回率@k (关于前 k 个最高预测评分的精确度和召回率)

    ■ 通过和\hat{R_{uv}} 与 R_{uv} 之比较排名 (还要考虑前 k 个最高评分的顺序)

使用关联规则的推荐

● 用户偏好和喜好

    ■ 项目:电影、歌曲、书籍等

    ■ 交易:观看/听/阅读历史

● 有趣的规则(电影):

    ■ 观众观看了电影 {a, b} 也观看了电影 {x, y}

    ■ 例子:{大白鲨} ➜ {它}

● 限制

    ■ 基本的AR算法忽略了评分

    ■ 受欢迎的偏见:具有非常独特口味的用户 可能会得到不佳的推荐

使用聚类的推荐

● 方法

    ■ 根据"有用"的特征对电影进行聚类 (类型、导演、编剧、长度...)

    ■ 推荐用户评价高的电影所在的聚类中的电影

● 限制

    ■ 在实践中找到好的特征 非常困难(我们会回到这一点)

    ■ 不系统:没有明确定义的 选择推荐的过程

使用回归(或分类)的推荐

● 示例方法:线性回归

    ■ 自变量:电影特征

    ■ 因变量:用户评分

● 限制

    ■ 每个项目都需要好的特征

    ■ 冷启动问题:需要大量的 用户评分来建立一个好的模型

基于内容的推荐系统

两两项之间的相似性

● 直觉

    ■ 向用户 u 推荐与 v 相似且 u 评价很高的项目 v

    ■ 例子:同一类型的电影,同一艺术家的歌曲, 关于同一主题的文章,具有相似特征的产品等。

● 基本要求:项目概况 = 每个项目的特征向量,例如:

    ■ 电影:类型、导演、编剧、演员、长度、年份...

    ■ 产品:类型、品牌、价格、重量、颜色...

    ■ 文章:一组(重要的)

运行示例

● MovieLens 数据集

    ■ 项目:不同类型的电影

    ■ 特征:20种类型(包括“未分类”)

    ■ 评分:1-5 星(包括半星)

● "小"数据集的数字

    ■ 610 个用户,9,742 部电影

    ■ 大约100k的评分 ➜ 稀疏度:约1.7% 简单方法 — 两两项目相似性

● 两两项目相似性 sim(x,y)

    ■ x, y — 电影的特征向量

    ■ 常见的度量:余弦相似度  sim(x,y)=cos(\theta)= \frac{x \cdot y}{||x|| \ ||y||}

● 限制:需要参考项目,例如:

    ■ 用户最近在观看的电影

    ■ 用户评价最高的电影

    ■ 用户当前正在浏览的电影

用户-项目相似性 

● 需要:用户概况 = 每个用户的特征向量

    ■ 要求:与项目概况形状相同,以计算相似性

    ■ 方法:用户概况 = 用户评价的项目概况上的"某种汇总"

项目相似性 - 二进制效用矩阵 

R_{uv} \in \{0,1\} — 例如,R_{uv}=1 如果

    ■ 用户 u 购买了电影 v

    ■ 用户 u 观看了电影 v 

暗示 u 喜欢 v(这里没有明确的评分可用;但也没有暗示的不喜欢!)

● 简单平均

用户-项目相似性 — 实值效用矩阵 

R_{uv} \in R — 例如,R_{uv} \in \{1.0, 1.5, 2.0, 2.5, ... ,5.0\} 星级评分

    ■ 用户 u 对电影 v 的明确评价

    ■ 重要:语义解释 — 评分既表示喜好也表示不喜欢(尽管所有评分都是正面的)

    ■ 使用评分作为权重为特征进行加权汇总

直觉

● 用户喜欢浪漫 和动画电影

● 用户不喜欢幻想 和冒险电影

用户-项目相似性 — 实值效用矩阵

● 第一步:标准化评分

    ■ 从每部电影的评分中减去平均用户评分

    ■ 将评分转化为正面(喜欢)和负面(不喜欢)的尺度

    ■ 区分"慷慨"的用户(大多数评分很高,3.0是低评分) 和更"暴躁"的用户(大多数评分低,3.0是高评分) 第二步:为用户概况计算加权特征

    ■ 权重是标准化权重

第二步:为用户概况计算加权特征

    ■ 权重是标准化权重

用户-项目相似性

● 两两项目相似性 sim(u,v)

    ■ u — 用户概况;v — 项目概况

    ■ 合适的度量标准:余弦相似性(注意用户和项目概况可以有不同的大小)

➜ 推荐最大相似性 sim(u,vi) 的项目 vi 给用户 u

● 实际考虑

    ■ 最相似的前 k 个项目总是相同的 ➜ 添加一些随机性以增加多样性 (如果用户评价更多项目,最相似的前 k 个项目集可能随时间变化)

    ■ 最相似的前 k 个项目可能包括用户已经评价过的项目 ➜ 移除这些项目 (实际中,推荐已知项目并不少见 — 例如,YouTube 推荐)

    ■ 可以设想更复杂的方法将项目概况聚合到用户概况 (例如:忽略代表性不足的特征,例如如果用户只评价了一部喜剧电影)

基于内容的推荐系统 — 优点 & 缺点

● 优点

    ■ 用户 u 的推荐不依赖于其他用户 (这也允许为具有非常独特口味的用户提供好的推荐)

    ■ 推荐还可以包括新的或不受欢迎的项目(即,没有或很少的评分)

    ■ 良好的可解释性(对高相似性影响最大的特征)

● 缺点

    ■ 冷启动问题:如何为新用户建立概况? (天真的方法:向新用户推荐普遍受欢迎的项目)

    ■ 找到项目的好特征(和值!)是一个非琐碎的任务 (问题:电影类型是一个好的特征集吗?)

    ■ 过度专业化:默认情况下,用户概况之外没有推荐 (实践中:在推荐过程中加入一些随机性)

协同过滤

● 思路:利用他人的意见

    ■ 推荐其他具有相似口味/偏好/需求的用户喜欢的项目

    ■ 不需要项目或用户特定的特征

● 两个视角

    ■ 基于用户 — 如果两个用户对相同的项目评价相似,则它们是相似的

    ■ 基于项目 — 如果两个项目被用户等同评价,则它们是相似的

基于用户的 CF — 计算相似性

● 例子:电影评分

    ■ Bob 可能会 喜欢电影 "Heat" 吗?

● 根据数据集的直觉

    ■ Alice 和 Bob 有相似的口味,所以 Bob 可能会给 "Heat" 一个和 Alice 相似的评分

    ■ Claire 和 Bob 有相似的口味,但 Claire 没有评价 "Heat"

    ■ Dave 和 Bob 的口味非常不同,所以 Dave 对 "Heat" 的意见不重要 (如果有的话,它应该是一个指示器,表示 Bob 会喜欢 "Heat";通常在实践中不相关) 

● 用 他们的评分向量 v 表示所有用户

    ■ 评分矩阵的行

问题

    ■ 缺失值(0)被视为负面

    ■ 所有评分都是正值 ➜ 没有明确的不相似概念 (只是更少或更多的相似)

● 想法:标准化评分向量

    ■ 均值居中 — 从每个评分向量中减去行均值

    ■ 缺失值(0)现在表示平均评分

    ■ 差评(即,低于平均值)现在由负值表示

余弦相似性和皮尔逊相关系数都是衡量两个向量之间相似性的方法。当这两个向量表示评分或偏好时,它们可以在推荐系统中用来找到相似的用户或项目。

基于用户的 CF — 预测评分

\hat{R}_{uv} = 来自相似用户的评分的加权平均值 \hat{R}_{uv}=\frac{\sum_{w\in N}sim(u,w)\cdot R_{wv}}{\sum_{w\in N }sim(u,w)}

    ■ N — 已经评价项目 v 且与 u 最相似的 k 个用户的集合

基于项目的 CF

● 与基于用户的方法类似

    ■ 对于一个项目 v,找到最相似的项目 (如果两个项目在所有用户中的评分相似,则它们是相似的)

    ■ \hat{R}_{uv}​ = 相似项目的评分的加权平均值

    ■ M — 已经被 u 评价且与 v 最相似的 k 个项目的集合

\hat{R}_{uv}=\frac{\sum_{i\in M}sim(i,v)\cdot R_{ui}}{\sum_{i\in M }sim(i,v)}

注意:回想一下,在基于内容的推荐系统中,衡量 项目之间的相似性依赖于项目概况/特征向量。在 项目-项目 CF 的情况下,一个项目的评分向量代表了它的概况。

基于项目的 CF — 示例

计算均值居中的评分向量 (这里:评分矩阵的列)

计算 "Heat" 与 Bob 已经评价的所有其他电影之间的距离

协同过滤 — 基于用户 vs. 基于项目

● 理论上:基于用户和基于项目是双重方法

● 实际上:基于项目的通常优于基于用户的 ➜ 项目-项目相似性通常更有意义

    ■ 项目比用户"简单"

    ■ 项目可以更容易地被描述

    ■ 用户可以有非常多样化的口味  

基于模型的协同过滤

● 潜在因子模型

    ■ 潜在表示:每个用户 u 和项目 v 的 k 维向量

    ■ 从数据中学习潜在表示 (与基于内容的系统不同,其中特征向量是构建的)

    ■ 估计未知评分 \hat{R}_{uv}=w_u^Th_v

● 方法:矩阵分解 ➜ 找到 W, H 使得 R = WH

    ■ 将所有用户向量放入矩阵 W

    ■ 将所有项目向量放入矩阵 H

矩阵分解 — 基本设置

● 给定:评分矩阵 R

    ■ m — 用户数 |W|

    ■ n — 项目数 |H|

● 超参数 k

    ■ 潜在表示的大小

找到矩阵 W, H

● 最小化损失函数

● 使用梯度下降 

Input: rating matrix R^(m*n), latent vector size k, #iteration T

Initialization: W^(m*k),H^(k*n) with values 0..1

for 1 to T

for all u,v with R_{uv}>0

w_u \leftarrow w_u+\eta [2(R_{uv}-w_u^Th_v)h_v-2\lambda w_u] \\ h_v \leftarrow h_v+\eta [2(R_{uv}-w_u^Th_v)w_u-2\lambda h_h]

return W,H

找到矩阵 W, H- 示例

● 正则化的效果

    ■ 增加 𝜆:已知评分的拟合度较差,所有评分的"平滑"值

    ■ 减少 𝜆:已知评分的拟合度较好,未知评分的值更"极端"

协同过滤 — 优点 & 缺点

● 优点

    ■ 无需找到并创建好的特征 (例如电影的类型)

    ■ 直观的方法

● 缺点

    ■ 相似度计算依赖于足够数量的评分

    ■ 新用户或项目的冷启动问题

    ■ 受欢迎的偏见:具有非常独特口味的用户可能会得到次优的推荐 (因为即使是 k 个最相似的用户也不会真的非常相似)

    ■ 朴素实现非常昂贵:找到 k 个最相似的用户/项目 ∈ O(|R|) (需要优化技术:例如用户/项目的聚类以限制搜索空间)

推荐系统 — 总结 

(过度)个性化的危险

● 2 个臭名昭著的副作用 (特别是在推荐新闻或社交媒体帖子时)

    ■ 过滤泡泡

    ■ 回音室效应

● 核心问题

    ■ 服务提供商没有动机 确保(足够的)多样性

    ■ 用户不知道显示了哪些内容 以及为什么(或为什么不)

总结

● 推荐系统

    ■ 更具体地说:个性化推荐系统

    ■ 许多在线平台的组成部分

    ■ 用户:找到相关项目 + 提供商:展示相关项目

    ■ 但是:过度个性化推荐的风险

● 实施推荐系统

    ■ 广泛的数据挖掘技术都适用

    ■ 没有“一刀切”的解决方案

    ■ 在实践中,混合方法最为成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值