【推荐系统】矩阵分解之FunkSVD和BiasSVD
在推荐系统的召回模型中,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=puTqi 本质是用户偏好与物品属性的匹配度(内积越大,评分越高)。
-
为什么需要隐特征?
原始的用户-物品交互数据是高维稀疏的(比如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≈puTqi=f=1∑kpuf⋅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−puTqi)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−puTqi)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=1kpuf2,
∥
q
i
∥
2
=
∑
f
=
1
k
q
i
f
2
\|q_i\|^2 = \sum_{f=1}^k q_{if}^2
∥qi∥2=∑f=1kqif2。
过拟合的本质是模型过度学习训练数据中的噪声(随机误差),而忽略了通用规律(真实模式),表现为训练误差小但测试误差大。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−puTqi)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}
puTqi=∑f=1kpufqif(用户
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=1kpuf2(用户特征向量的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−puTqi)2,令
r
^
u
i
=
p
u
T
q
i
\hat{r}_{ui} = p_u^T q_i
r^ui=puTqi,则该项可写为
(
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∑kpuf′qif′
注意到求和中只有当
f
′
=
f
f' = f
f′=f 时,项
p
u
f
q
i
f
p_{uf} q_{if}
pufqif 含
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′=1kpuf′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∑kpuf′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−puTqi)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−puTqi)puf−λqif]
其中
α
>
0
\alpha > 0
α>0 是学习率(控制更新步长)。
四、FunkSVD的特点
- 简化传统SVD:传统SVD需要对完整矩阵分解(包括填充稀疏值),而FunkSVD仅关注已观测的评分,计算效率更高,适合稀疏矩阵。
- 隐特征解释性:隐特征 k k k 的选择需结合业务(如电影推荐中 k k k 可对应“类型”“年代”等),但具体含义需通过结果反推。
- 超参数影响:
- k k k:过小可能欠拟合(无法捕捉复杂模式),过大会过拟合且计算量大(通常取10~200)。
- α \alpha α:学习率过大会导致震荡,过小会收敛太慢(可动态调整,如随迭代衰减)。
- λ \lambda λ:正则化系数过小易过拟合,过大会欠拟合(需通过交叉验证调优)。
五、扩展与改进
-
偏置项(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+puTqi
其中 μ \mu μ 是全局平均评分,损失函数需加入偏置项的正则化。 -
交替最小二乘(ALS):FunkSVD用梯度下降,ALS则固定一个矩阵(如P)求解另一个(如Q),交替迭代,适合分布式计算。
-
时序因素:考虑评分的时间影响(如用户偏好变化),引入时间相关的隐特征。
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+puTqi
其中:
- μ \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 puTqi 是隐特征交互项(与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的优势
- 捕捉系统性偏差:相比FunkSVD,BiasSVD能分离“用户/物品本身的特性”和“用户-物品交互特性”,例如:
- 即使两个用户对物品的隐特征偏好相同,苛刻用户( b u b_u bu 小)的评分仍会低于乐观用户;
- 即使一个用户对两类物品的隐特征匹配度相同,热门物品( b i b_i bi 大)的评分仍会更高。
- 提升预测精度:在稀疏数据中,偏置项能快速捕捉到简单的全局规律,减少隐特征的学习压力,从而提升模型的泛化能力。
六、与FunkSVD的对比
| 特性 | FunkSVD | BiasSVD |
|---|---|---|
| 模型复杂度 | 仅含隐特征交互项 | 含隐特征交互项+偏置项 |
| 偏差捕捉能力 | 弱(仅依赖隐特征) | 强(分离系统性偏差) |
| 适用场景 | 数据较稠密、偏差影响小 | 数据稀疏、偏差影响显著 |
| 预测公式 | r ^ u i = p u T q i \hat{r}_{ui} = p_u^T q_i r^ui=puTqi | 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+puTqi |
总结
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 puTqi)
-
用户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 pATqX=(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 pBTqY=(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 pATqY=(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通过隐特征量化用户偏好和物品属性,其数值大小与特征强度正相关,内积结果体现用户-物品的匹配度。实际应用中,隐特征的具体含义(如“动作”“喜剧”)是通过数据学习后反推的,而非预先定义。
更多推荐
所有评论(0)