在推荐系统的召回模型中,UserCF和ItemCF都面临着数据稀疏的挑战,因此引入FunkSVD。

  • 引用:矩阵分解 UserCF和ItemCF虽然思路直观、易于理解,但它们都面临一个根本性的挑战:数据稀疏性。在真实的推荐场景中,用户-物品交互矩阵往往是极度稀疏的——大部分用户只与极少数物品发生过交互。这导致两个问题:一是很难找到足够的共同评分来计算可靠的相似度;二是即使找到了相似用户或物品,他们的交互覆盖面也可能很有限。
    更深层的问题在于,邻域方法将相似度计算和推荐预测分离开来,先显式地计算相似度,再基于相似度进行推荐。这种两阶段的方法虽然直观,但缺乏对用户-物品交互数据的全局优化。能否换一种思路——不再显式计算相似度,而是通过学习用户和物品的隐向量表示,让向量空间中的距离自然地反映相似性?矩阵分解正是这一思想的体现,它标志着协同过滤从统计方法向机器学习方法的转变。

应用场景

  • 推荐系统:预测用户对物品的评分,生成Top-N推荐(如电影、商品)。
  • 缺失值填充:补全稀疏矩阵中的缺失项。
  • 协同过滤:无需物品/用户的显式特征,仅通过历史交互数据学习。

FunkSVD

隐特征

隐特征是无法直接观测,但能通过数据间接反映的潜在维度或属性,是矩阵分解中连接用户与物品的“桥梁”。

  • 直观理解: 以电影推荐为例,用户-评分矩阵中,我们能直接看到“用户A给电影X打了4分”,但背后的原因(如用户喜欢“科幻”“悬疑”,电影包含这些元素)是隐藏的。FunkSVD中的隐特征(如“科幻偏好”“演员号召力”“年代风格”等)就是这些隐藏的原因,它们无法从原始数据中直接读取,而是通过算法从评分模式中学习得到。

  • 数学意义: 在FunkSVD中,用户特征矩阵 P P P 的每行 p u p_u pu​ 是用户 u u u 在 k k k 个隐特征上的“偏好强度”,物品特征矩阵 Q Q Q 的每行 q i q_i qi​ 是物品 i i i 在这 k k k 个隐特征上的“属性强度”。预测评分 r ^ u i = p u T q i \hat{r}_{ui} = p_u^T q_i r^ui​=puT​qi​ 本质是用户偏好与物品属性的匹配度(内积越大,评分越高)。

  • 为什么需要隐特征?
    原始的用户-物品交互数据是高维稀疏的(比如10万用户×1万物品,评分数据可能只有1%),直接用原始数据建模效率低且泛化能力差。隐特征通过“降维”将高维稀疏数据映射到低维稠密空间(维度 k k k 通常为10~200),既能捕捉数据中的潜在模式,又能解决稀疏性问题。

一、FunkSVD的核心思想

FunkSVD是矩阵分解(Matrix Factorization) 在推荐系统中的经典应用,由Simon Funk在2006年Netflix Prize竞赛中提出。其核心目标是:
对于一个稀疏的用户-物品评分矩阵 R ∈ R m × n R \in \mathbb{R}^{m \times n} R∈Rm×n( m m m 个用户, n n n 个物品),将其分解为两个低秩矩阵的乘积:用户特征矩阵 P ∈ R m × k P \in \mathbb{R}^{m \times k} P∈Rm×k 和物品特征矩阵 Q ∈ R n × k Q \in \mathbb{R}^{n \times k} Q∈Rn×k,其中 k k k 是隐特征维度(通常远小于 m , n m, n m,n)。

通过分解,用户对物品的评分可以通过两个矩阵的内积近似:
r ^ u i ≈ p u T q i = ∑ f = 1 k p u f ⋅ q i f \hat{r}_{ui} \approx p_u^T q_i = \sum_{f=1}^k p_{uf} \cdot q_{if} r^ui​≈puT​qi​=f=1∑k​puf​⋅qif​
其中 r ^ u i \hat{r}_{ui} r^ui​ 是预测评分, p u p_u pu​ 是用户 u u u 的隐特征向量, q i q_i qi​ 是物品 i i i 的隐特征向量, p u f p_{uf} puf​ 和 q i f q_{if} qif​ 分别表示用户 u u u 和物品 i i i 在第 f f f 个隐特征上的权重(例如“喜剧偏好”“动作偏好”等)。

二、数学原理与优化目标

FunkSVD的本质是通过最小化预测误差来学习 P P P 和 Q Q Q。

1. 损失函数

定义训练集中已观测评分 r u i r_{ui} rui​ 与预测评分 r ^ u i \hat{r}_{ui} r^ui​ 的平方误差(Squared Error)为损失函数:
Loss = ∑ ( u , i ) ∈ K ( r u i − p u T q i ) 2 \text{Loss} = \sum_{(u,i) \in \mathcal{K}} (r_{ui} - p_u^T q_i)^2 Loss=(u,i)∈K∑​(rui​−puT​qi​)2
其中 K \mathcal{K} K 是所有已评分的 ( u , i ) (u,i) (u,i) 对集合(避免对未知评分计算误差,这是FunkSVD对传统SVD的简化)。

2. 正则化(防止过拟合)

为避免模型过度拟合训练数据,引入L2正则化项,损失函数修正为:
Loss = ∑ ( u , i ) ∈ K ( r u i − p u T q i ) 2 + λ ( ∥ p u ∥ 2 + ∥ q i ∥ 2 ) \text{Loss} = \sum_{(u,i) \in \mathcal{K}} (r_{ui} - p_u^T q_i)^2 + \lambda (\|p_u\|^2 + \|q_i\|^2) Loss=(u,i)∈K∑​(rui​−puT​qi​)2+λ(∥pu​∥2+∥qi​∥2)
其中 λ > 0 \lambda > 0 λ>0 是正则化系数, ∥ p u ∥ 2 = ∑ f = 1 k p u f 2 \|p_u\|^2 = \sum_{f=1}^k p_{uf}^2 ∥pu​∥2=∑f=1k​puf2​, ∥ q i ∥ 2 = ∑ f = 1 k q i f 2 \|q_i\|^2 = \sum_{f=1}^k q_{if}^2 ∥qi​∥2=∑f=1k​qif2​。

过拟合的本质是模型过度学习训练数据中的噪声(随机误差),而忽略了通用规律(真实模式),表现为训练误差小但测试误差大。L2正则化通过限制模型参数的“大小” 来缓解过拟合,核心逻辑如下:

  • L2正则化的形式:
    在FunkSVD的损失函数中,L2正则化项为 λ ( ∥ p u ∥ 2 + ∥ q i ∥ 2 ) = λ ∑ ( p u f 2 + q i f 2 ) \lambda (\|p_u\|^2 + \|q_i\|^2) = \lambda \sum (p_{uf}^2 + q_{if}^2) λ(∥pu​∥2+∥qi​∥2)=λ∑(puf2​+qif2​),即所有参数的平方和乘以正则化系数 λ \lambda λ。

  • 限制参数大小:
    优化过程中,损失函数最小化会同时“惩罚”预测误差和参数平方和。若参数过大(比如某些 p u f p_{uf} puf​ 或 q i f q_{if} qif​ 非常大),即使预测误差小,正则化项也会使总损失升高。因此,算法会倾向于选择更小、更平缓的参数值。

  • 为什么小参数能防过拟合?
    参数值过大意味着模型对输入的微小变化更敏感(比如用户的一次偶然评分会被放大),容易拟合噪声;而小参数会让模型更“稳定”,输出随输入的变化更平缓,更倾向于学习数据中的整体趋势(通用规律),从而减少过拟合。

三、参数求解:梯度下降法

FunkSVD通过梯度下降(Gradient Descent) 迭代更新 P P P 和 Q Q Q 的参数,直到损失函数收敛。

1. 计算梯度

FunkSVD的损失函数(含L2正则化)为:
Loss = ∑ ( u , i ) ∈ K [ ( r u i − p u T q i ) 2 + λ ( ∥ p u ∥ 2 + ∥ q i ∥ 2 ) ] \text{Loss} = \sum_{(u,i) \in \mathcal{K}} \left[ (r_{ui} - p_u^T q_i)^2 + \lambda (\|p_u\|^2 + \|q_i\|^2) \right] Loss=(u,i)∈K∑​[(rui​−puT​qi​)2+λ(∥pu​∥2+∥qi​∥2)]
其中 p u T q i = ∑ f = 1 k p u f q i f p_u^T q_i = \sum_{f=1}^k p_{uf} q_{if} puT​qi​=∑f=1k​puf​qif​(用户 u u u 与物品 i i i 的隐特征内积), ∥ p u ∥ 2 = ∑ f = 1 k p u f 2 \|p_u\|^2 = \sum_{f=1}^k p_{uf}^2 ∥pu​∥2=∑f=1k​puf2​(用户特征向量的L2范数平方)。

要计算对 p u f p_{uf} puf​ 的偏导,需分两部分展开:预测误差项的偏导和正则化项的偏导。

预测误差项对 p u f p_{uf} puf​ 的偏导

预测误差项为 ( r u i − p u T q i ) 2 (r_{ui} - p_u^T q_i)^2 (rui​−puT​qi​)2,令 r ^ u i = p u T q i \hat{r}_{ui} = p_u^T q_i r^ui​=puT​qi​,则该项可写为 ( r u i − r ^ u i ) 2 (r_{ui} - \hat{r}_{ui})^2 (rui​−r^ui​)2。
对 p u f p_{uf} puf​ 求偏导:
∂ ∂ p u f ( r u i − r ^ u i ) 2 = 2 ( r u i − r ^ u i ) ⋅ ∂ ∂ p u f ( r u i − r ^ u i ) \frac{\partial}{\partial p_{uf}} (r_{ui} - \hat{r}_{ui})^2 = 2(r_{ui} - \hat{r}_{ui}) \cdot \frac{\partial}{\partial p_{uf}} (r_{ui} - \hat{r}_{ui}) ∂puf​∂​(rui​−r^ui​)2=2(rui​−r^ui​)⋅∂puf​∂​(rui​−r^ui​)
其中 r u i r_{ui} rui​ 是常数(已知评分),因此:
∂ ∂ p u f ( r u i − r ^ u i ) = − ∂ ∂ p u f r ^ u i = − ∂ ∂ p u f ( ∑ f ′ = 1 k p u f ′ q i f ′ ) \frac{\partial}{\partial p_{uf}} (r_{ui} - \hat{r}_{ui}) = -\frac{\partial}{\partial p_{uf}} \hat{r}_{ui} = -\frac{\partial}{\partial p_{uf}} \left( \sum_{f'=1}^k p_{uf'} q_{if'} \right) ∂puf​∂​(rui​−r^ui​)=−∂puf​∂​r^ui​=−∂puf​∂​ ​f′=1∑k​puf′​qif′​ ​
注意到求和中只有当 f ′ = f f' = f f′=f 时,项 p u f q i f p_{uf} q_{if} puf​qif​ 含 p u f p_{uf} puf​,其他项与 p u f p_{uf} puf​ 无关,因此:
∂ ∂ p u f r ^ u i = q i f \frac{\partial}{\partial p_{uf}} \hat{r}_{ui} = q_{if} ∂puf​∂​r^ui​=qif​
综上,预测误差项的偏导为:
2 ( r u i − r ^ u i ) ⋅ ( − q i f ) = − 2 ( r u i − r ^ u i ) q i f 2(r_{ui} - \hat{r}_{ui}) \cdot (-q_{if}) = -2(r_{ui} - \hat{r}_{ui}) q_{if} 2(rui​−r^ui​)⋅(−qif​)=−2(rui​−r^ui​)qif​

正则化项对 p u f p_{uf} puf​ 的偏导

正则化项中与 p u f p_{uf} puf​ 相关的部分是 λ ∥ p u ∥ 2 = λ ∑ f ′ = 1 k p u f ′ 2 \lambda \|p_u\|^2 = \lambda \sum_{f'=1}^k p_{uf'}^2 λ∥pu​∥2=λ∑f′=1k​puf′2​,对 p u f p_{uf} puf​ 求偏导:
∂ ∂ p u f ( λ ∑ f ′ = 1 k p u f ′ 2 ) = λ ⋅ 2 p u f (仅当  f ′ = f  时导数非零) \frac{\partial}{\partial p_{uf}} \left( \lambda \sum_{f'=1}^k p_{uf'}^2 \right) = \lambda \cdot 2 p_{uf} \quad \text{(仅当 } f'=f \text{ 时导数非零)} ∂puf​∂​ ​λf′=1∑k​puf′2​ ​=λ⋅2puf​(仅当 f′=f 时导数非零)

总偏导

将两部分相加,得到损失函数对 p u f p_{uf} puf​ 的偏导:
∂ Loss ∂ p u f = − 2 ( r u i − r ^ u i ) q i f + 2 λ p u f \frac{\partial \text{Loss}}{\partial p_{uf}} = -2(r_{ui} - \hat{r}_{ui}) q_{if} + 2\lambda p_{uf} ∂puf​∂Loss​=−2(rui​−r^ui​)qif​+2λpuf​

2. 参数更新规则

根据梯度下降法,参数沿负梯度方向更新:
p u f ← p u f + α ⋅ [ ( r u i − p u T q i ) q i f − λ p u f ] p_{uf} \leftarrow p_{uf} + \alpha \cdot \left[ (r_{ui} - p_u^T q_i) q_{if} - \lambda p_{uf} \right] puf​←puf​+α⋅[(rui​−puT​qi​)qif​−λpuf​]
q i f ← q i f + α ⋅ [ ( r u i − p u T q i ) p u f − λ q i f ] q_{if} \leftarrow q_{if} + \alpha \cdot \left[ (r_{ui} - p_u^T q_i) p_{uf} - \lambda q_{if} \right] qif​←qif​+α⋅[(rui​−puT​qi​)puf​−λqif​]
其中 α > 0 \alpha > 0 α>0 是学习率(控制更新步长)。

四、FunkSVD的特点

  1. 简化传统SVD:传统SVD需要对完整矩阵分解(包括填充稀疏值),而FunkSVD仅关注已观测的评分,计算效率更高,适合稀疏矩阵。
  2. 隐特征解释性:隐特征 k k k 的选择需结合业务(如电影推荐中 k k k 可对应“类型”“年代”等),但具体含义需通过结果反推。
  3. 超参数影响:
    • k k k:过小可能欠拟合(无法捕捉复杂模式),过大会过拟合且计算量大(通常取10~200)。
    • α \alpha α:学习率过大会导致震荡,过小会收敛太慢(可动态调整,如随迭代衰减)。
    • λ \lambda λ:正则化系数过小易过拟合,过大会欠拟合(需通过交叉验证调优)。

五、扩展与改进

  1. 偏置项(Bias):加入用户偏置 b u b_u bu​(用户评分整体偏高/偏低)和物品偏置 b i b_i bi​(物品普遍评分),预测公式修正为:
    r ^ u i = μ + b u + b i + p u T q i \hat{r}_{ui} = \mu + b_u + b_i + p_u^T q_i r^ui​=μ+bu​+bi​+puT​qi​
    其中 μ \mu μ 是全局平均评分,损失函数需加入偏置项的正则化。

  2. 交替最小二乘(ALS):FunkSVD用梯度下降,ALS则固定一个矩阵(如P)求解另一个(如Q),交替迭代,适合分布式计算。

  3. 时序因素:考虑评分的时间影响(如用户偏好变化),引入时间相关的隐特征。

BiasSVD

  • 引用:BiasSVD 基础模型虽然简洁,但在实际使用中我们发现了一个问题:不同用户的评分习惯差异很大。有些用户天生就是“好人”,很少给低分;有些用户则比较严格,平均分都不高。同样,有些电影因为制作精良或者明星云集,普遍得到较高评分;而有些冷门或质量一般的电影则评分偏低。这些系统性的偏差如果不处理,会影响推荐的准确性。BiasSVD (Koren et al., 2009) 正是为了解决这个问题而提出的。

BiasSVD(带偏置的SVD)是FunkSVD的改进版本,核心是在矩阵分解的基础上引入偏置项(Bias Terms),以更精准地捕捉评分数据中的系统性偏差,提升预测效果。以下是其详细介绍:

一、BiasSVD的核心思想

在实际的用户-物品评分数据中,评分不仅取决于用户与物品的隐特征匹配度,还受一些系统性因素影响:

  • 有些用户天生评分偏高(如乐观用户)或偏低(如苛刻用户)——用户偏置;
  • 有些物品普遍获得高分(如经典电影)或低分(如劣质商品)——物品偏置;
  • 所有评分可能整体偏高或偏低(如平台评分习惯)——全局偏置。

BiasSVD在FunkSVD的基础上,将这些偏置项纳入预测模型,使评分预测更贴近真实场景。

二、数学模型与预测公式

BiasSVD的预测评分公式为:
r ^ u i = μ + b u + b i + p u T q i \hat{r}_{ui} = \mu + b_u + b_i + p_u^T q_i r^ui​=μ+bu​+bi​+puT​qi​
其中:

  • μ \mu μ 是全局平均评分(所有观测评分的均值,反映整体评分水平);
  • b u b_u bu​ 是用户偏置(用户 u u u 的评分偏离全局均值的程度, b u > 0 b_u > 0 bu​>0 表示用户评分偏高);
  • b i b_i bi​ 是物品偏置(物品 i i i 的评分偏离全局均值的程度, b i > 0 b_i > 0 bi​>0 表示物品普遍受欢迎);
  • p u T q i p_u^T q_i puT​qi​ 是隐特征交互项(与FunkSVD一致,反映用户偏好与物品属性的匹配度)。

三、损失函数与正则化

BiasSVD的损失函数在FunkSVD的基础上,增加了对偏置项的正则化(防止偏置项过度拟合噪声):
Loss = ∑ ( u , i ) ∈ K [ ( r u i − r ^ u i ) 2 ] + λ ( ∥ p u ∥ 2 + ∥ q i ∥ 2 + b u 2 + b i 2 ) \text{Loss} = \sum_{(u,i) \in \mathcal{K}} \left[ (r_{ui} - \hat{r}_{ui})^2 \right] + \lambda \left( \|p_u\|^2 + \|q_i\|^2 + b_u^2 + b_i^2 \right) Loss=(u,i)∈K∑​[(rui​−r^ui​)2]+λ(∥pu​∥2+∥qi​∥2+bu2​+bi2​)
其中:

  • ( u , i ) ∈ K (u,i) \in \mathcal{K} (u,i)∈K 表示所有已观测的评分对;
  • λ \lambda λ 是正则化系数(控制所有参数的“大小”,包括隐特征向量和偏置项);
  • b u 2 b_u^2 bu2​ 和 b i 2 b_i^2 bi2​ 是偏置项的L2正则化项,防止用户/物品偏置被过度放大。

四、参数求解:梯度下降法

BiasSVD的参数包括:用户特征矩阵 P P P、物品特征矩阵 Q Q Q、用户偏置 b u b_u bu​、物品偏置 b i b_i bi​。通过梯度下降法迭代更新所有参数,步骤如下:

1. 计算各参数的梯度

以损失函数对 b u b_u bu​、 b i b_i bi​、 p u f p_{uf} puf​、 q i f q_{if} qif​ 的偏导为例(推导逻辑与FunkSVD类似):

  • 对用户偏置 b u b_u bu​ 的偏导:
    ∂ Loss ∂ b u = − 2 ( r u i − r ^ u i ) + 2 λ b u \frac{\partial \text{Loss}}{\partial b_u} = -2(r_{ui} - \hat{r}_{ui}) + 2\lambda b_u ∂bu​∂Loss​=−2(rui​−r^ui​)+2λbu​
  • 对物品偏置 b i b_i bi​ 的偏导:
    ∂ Loss ∂ b i = − 2 ( r u i − r ^ u i ) + 2 λ b i \frac{\partial \text{Loss}}{\partial b_i} = -2(r_{ui} - \hat{r}_{ui}) + 2\lambda b_i ∂bi​∂Loss​=−2(rui​−r^ui​)+2λbi​
  • 对用户隐特征 p u f p_{uf} puf​ 的偏导(与FunkSVD一致):
    ∂ Loss ∂ p u f = − 2 ( r u i − r ^ u i ) q i f + 2 λ p u f \frac{\partial \text{Loss}}{\partial p_{uf}} = -2(r_{ui} - \hat{r}_{ui}) q_{if} + 2\lambda p_{uf} ∂puf​∂Loss​=−2(rui​−r^ui​)qif​+2λpuf​
  • 对物品隐特征 q i f q_{if} qif​ 的偏导(与FunkSVD一致):
    ∂ Loss ∂ q i f = − 2 ( r u i − r ^ u i ) p u f + 2 λ q i f \frac{\partial \text{Loss}}{\partial q_{if}} = -2(r_{ui} - \hat{r}_{ui}) p_{uf} + 2\lambda q_{if} ∂qif​∂Loss​=−2(rui​−r^ui​)puf​+2λqif​
2. 参数更新规则

沿负梯度方向更新所有参数:

  • 用户偏置 b u b_u bu​:
    b u ← b u + α ⋅ [ ( r u i − r ^ u i ) − λ b u ] b_u \leftarrow b_u + \alpha \cdot \left[ (r_{ui} - \hat{r}_{ui}) - \lambda b_u \right] bu​←bu​+α⋅[(rui​−r^ui​)−λbu​]
  • 物品偏置 b i b_i bi​:
    b i ← b i + α ⋅ [ ( r u i − r ^ u i ) − λ b i ] b_i \leftarrow b_i + \alpha \cdot \left[ (r_{ui} - \hat{r}_{ui}) - \lambda b_i \right] bi​←bi​+α⋅[(rui​−r^ui​)−λbi​]
  • 用户隐特征 p u f p_{uf} puf​:
    p u f ← p u f + α ⋅ [ ( r u i − r ^ u i ) q i f − λ p u f ] p_{uf} \leftarrow p_{uf} + \alpha \cdot \left[ (r_{ui} - \hat{r}_{ui}) q_{if} - \lambda p_{uf} \right] puf​←puf​+α⋅[(rui​−r^ui​)qif​−λpuf​]
  • 物品隐特征 q i f q_{if} qif​:
    q i f ← q i f + α ⋅ [ ( r u i − r ^ u i ) p u f − λ q i f ] q_{if} \leftarrow q_{if} + \alpha \cdot \left[ (r_{ui} - \hat{r}_{ui}) p_{uf} - \lambda q_{if} \right] qif​←qif​+α⋅[(rui​−r^ui​)puf​−λqif​]
    其中 α \alpha α 是学习率,控制更新步长。

五、BiasSVD的优势

  1. 捕捉系统性偏差:相比FunkSVD,BiasSVD能分离“用户/物品本身的特性”和“用户-物品交互特性”,例如:
    • 即使两个用户对物品的隐特征偏好相同,苛刻用户( b u b_u bu​ 小)的评分仍会低于乐观用户;
    • 即使一个用户对两类物品的隐特征匹配度相同,热门物品( b i b_i bi​ 大)的评分仍会更高。
  2. 提升预测精度:在稀疏数据中,偏置项能快速捕捉到简单的全局规律,减少隐特征的学习压力,从而提升模型的泛化能力。

六、与FunkSVD的对比

特性FunkSVDBiasSVD
模型复杂度仅含隐特征交互项含隐特征交互项+偏置项
偏差捕捉能力弱(仅依赖隐特征)强(分离系统性偏差)
适用场景数据较稠密、偏差影响小数据稀疏、偏差影响显著
预测公式 r ^ u i = p u T q i \hat{r}_{ui} = p_u^T q_i r^ui​=puT​qi​ r ^ u i = μ + b u + b i + p u T q i \hat{r}_{ui} = \mu + b_u + b_i + p_u^T q_i r^ui​=μ+bu​+bi​+puT​qi​

总结

BiasSVD通过引入偏置项,解决了FunkSVD无法区分“系统性偏差”和“用户-物品交互”的问题,是推荐系统中更常用的矩阵分解模型。在实际应用中,BiasSVD通常比FunkSVD表现更好,尤其在评分数据稀疏时,偏置项的作用更为明显。

补充:用户特征向量 p u p_u pu​和物品特征向量 q i q_i qi​的具体例子

假设我们用BiasSVD做电影推荐,隐特征维度 k = 2 k=2 k=2,且这两个隐特征可大致解释为:

  • 隐特征1:“动作元素强度”(值越高,用户越喜欢动作片,电影动作元素越浓)
  • 隐特征2:“喜剧元素强度”(值越高,用户越喜欢喜剧片,电影喜剧元素越浓)
1. 用户特征向量 p u p_u pu​(用户偏好)
  • 用户A的特征向量: p A = [ 0.8 , 0.2 ] p_A = [0.8, 0.2] pA​=[0.8,0.2]
    含义:用户A更偏好动作片(隐特征1得分0.8),对喜剧片兴趣较低(隐特征2得分0.2)。

  • 用户B的特征向量: p B = [ 0.3 , 0.9 ] p_B = [0.3, 0.9] pB​=[0.3,0.9]
    含义:用户B更偏好喜剧片(隐特征2得分0.9),对动作片兴趣一般(隐特征1得分0.3)。

2. 物品特征向量 q i q_i qi​(物品属性)
  • 电影X(动作片)的特征向量: q X = [ 0.9 , 0.1 ] q_X = [0.9, 0.1] qX​=[0.9,0.1]
    含义:电影X动作元素强(隐特征1得分0.9),几乎无喜剧元素(隐特征2得分0.1)。

  • 电影Y(喜剧片)的特征向量: q Y = [ 0.2 , 0.8 ] q_Y = [0.2, 0.8] qY​=[0.2,0.8]
    含义:电影Y喜剧元素强(隐特征2得分0.8),动作元素少(隐特征1得分0.2)。

3. 隐特征交互项的计算( p u T q i p_u^T q_i puT​qi​)
  • 用户A对电影X的交互得分:
    p A T q X = ( 0.8 × 0.9 ) + ( 0.2 × 0.1 ) = 0.72 + 0.02 = 0.74 p_A^T q_X = (0.8 \times 0.9) + (0.2 \times 0.1) = 0.72 + 0.02 = 0.74 pAT​qX​=(0.8×0.9)+(0.2×0.1)=0.72+0.02=0.74
    (匹配度高,符合“动作偏好用户”对“动作片”的喜好)

  • 用户B对电影Y的交互得分:
    p B T q Y = ( 0.3 × 0.2 ) + ( 0.9 × 0.8 ) = 0.06 + 0.72 = 0.78 p_B^T q_Y = (0.3 \times 0.2) + (0.9 \times 0.8) = 0.06 + 0.72 = 0.78 pBT​qY​=(0.3×0.2)+(0.9×0.8)=0.06+0.72=0.78
    (匹配度高,符合“喜剧偏好用户”对“喜剧片”的喜好)

  • 用户A对电影Y的交互得分:
    p A T q Y = ( 0.8 × 0.2 ) + ( 0.2 × 0.8 ) = 0.16 + 0.16 = 0.32 p_A^T q_Y = (0.8 \times 0.2) + (0.2 \times 0.8) = 0.16 + 0.16 = 0.32 pAT​qY​=(0.8×0.2)+(0.2×0.8)=0.16+0.16=0.32
    (匹配度低,符合“动作偏好用户”对“喜剧片”的低兴趣)

4. 结合偏置项的完整预测(BiasSVD)

假设全局平均 μ = 4 \mu=4 μ=4,用户A的偏置 b A = 0.5 b_A=0.5 bA​=0.5(评分偏高),用户B的偏置 b B = − 0.3 b_B=-0.3 bB​=−0.3(评分偏苛刻);电影X的偏置 b X = 0.8 b_X=0.8 bX​=0.8(普遍好评),电影Y的偏置 b Y = 0.2 b_Y=0.2 bY​=0.2(评价中等)。

  • 用户A对电影X的预测评分:
    r ^ A X = 4 + 0.5 + 0.8 + 0.74 = 6.04 \hat{r}_{AX} = 4 + 0.5 + 0.8 + 0.74 = 6.04 r^AX​=4+0.5+0.8+0.74=6.04(接近实际高分)

  • 用户B对电影Y的预测评分:
    r ^ B Y = 4 + ( − 0.3 ) + 0.2 + 0.78 = 4.68 \hat{r}_{BY} = 4 + (-0.3) + 0.2 + 0.78 = 4.68 r^BY​=4+(−0.3)+0.2+0.78=4.68(因用户偏苛刻,预测分低于交互项对应的水平)

p u p_u pu​和 q i q_i qi​通过隐特征量化用户偏好和物品属性,其数值大小与特征强度正相关,内积结果体现用户-物品的匹配度。实际应用中,隐特征的具体含义(如“动作”“喜剧”)是通过数据学习后反推的,而非预先定义。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐