MF回顾
在我前面的RS推荐系统文章中,讲到了矩阵分解的内容:所谓矩阵分解,就是将矩阵拆解为多个矩阵的乘积。
矩阵分解方法:
- EVD(特征值分解)
- SVD(奇异值分解)
求解近似矩阵分解的最优化问题:
- ALS(交替最小二乘法):ALS-WR
- SGD(随机梯度下降法):FunkSVD、BiasSVD、SVD++
Tips
- 奇异值分解可以对矩阵无损分解
- 在实际中,我们可以抽取前K个特征,对矩阵进行降维
- SVD在降维中有效,抽取不同的K值(10%的特征包含99%的信息)
- 在评分预测中使用funkSVD,只根据实际评分误差进行目标最优化
- 在funkSVD的基础上,加入用户/商品偏好 => BiasSVD
- 在BiasSVD的基础上,考虑用户的隐式反馈 => SVD++
- 以上的MF,我们都只考虑user和item特征,但实际上一个预测问题包含的特征维度可能很多
MF的局限性
对于一个推荐系统,特征维度不仅仅只有userID和ItemID,还会有其他维度。
- 蓝色部分:当前评分用户信息
- 红色部分:当前被评分电影
- 黄色:当前评分用户,评分过的其他电影
- 绿色:评分时间(按照2009年1月开始的间隔月数)
- 棕色:用户评分过的上一部电影
FM算法
在普通的线性回归里,对于特征向量
X
=
(
x
1
,
x
2
,
.
.
.
.
.
.
,
x
n
)
T
X = (x_1,x_2,......,x_n)^T
X=(x1,x2,......,xn)T,我们有目标预估函数:
y
^
(
x
)
=
w
0
+
w
1
x
1
+
w
2
x
2
+
…
w
n
x
n
=
w
0
+
∑
i
=
1
n
w
n
x
n
\begin{aligned} \hat{y}(x) &=w_{0}+w_{1} x_{1}+w_{2} x_{2}+\ldots w_{n} x_{n} \\ &=w_{0}+\sum_{i=1}^{n} w_{n} x_{n} \end{aligned}
y^(x)=w0+w1x1+w2x2+…wnxn=w0+i=1∑nwnxn
Tips:这时候认为变量之间是相互独立的,没有考虑变量之间的相互关系,比如性别+年龄的组合
所以创造二阶的表达式:
y
^
(
x
)
=
w
0
+
∑
i
=
1
n
w
i
x
i
+
∑
i
=
1
n
∑
j
=
i
+
1
n
w
i
j
x
i
x
j
\hat{y}(x)=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+\sum_{i=1}^{n} \sum_{j=i+1}^{n} w_{i j} x_{i} x_{j}
y^(x)=w0+i=1∑nwixi+i=1∑nj=i+1∑nwijxixj
Tips:二阶特征组合:考虑了两个特征变量之间的交互影响,但是在二阶交叉的过程中,如果观察样本中没有出现过该交互的特征分量(稀疏向量),那么直接估计将为0
所以,对于
W
i
j
W_{ij}
Wij的估计,又变成矩阵分解MF问题。即将
W
i
j
W_{ij}
Wij的稀疏矩阵通过MF变得稠密。
y
^
(
x
)
=
w
0
+
∑
i
=
1
n
w
n
x
n
+
∑
i
=
1
n
∑
j
=
i
+
1
n
w
i
j
x
i
x
j
=
w
0
+
∑
i
=
1
n
w
n
x
n
+
∑
i
=
1
n
∑
j
=
i
+
1
n
⟨
V
i
,
V
j
⟩
x
i
x
j
\begin{aligned} \widehat{y}(x)&=w_{0}+\sum_{i=1}^{n} w_{n} x_{n}+\sum_{i=1}^{n} \sum_{j=i+1}^{n} w_{i j} x_{i} x_{j}\\ &=w_{0}+\sum_{i=1}^{n} w_{n} x_{n}+\sum_{i=1}^{n} \sum_{j=i+1}^{n}\left\langle V_{i}, V_{j}\right\rangle x_{i} x_{j}\\ \end{aligned}
y
(x)=w0+i=1∑nwnxn+i=1∑nj=i+1∑nwijxixj=w0+i=1∑nwnxn+i=1∑nj=i+1∑n⟨Vi,Vj⟩xixj
对于
⟨
V
i
,
V
j
⟩
\left\langle V_{i}, V_{j}\right\rangle
⟨Vi,Vj⟩,又有:
⟨
V
i
,
V
j
⟩
:
=
∑
f
=
1
k
v
i
,
f
⋅
v
j
,
f
(
n
是
特
征
个
数
,
k
是
特
征
的
e
m
b
e
d
d
i
n
g
s
i
z
e
)
\left\langle V_{i}, V_{j}\right\rangle:=\sum_{f=1}^{k} v_{i, f} \cdot v_{j, f}\\ (n是特征个数,k是特征的embedding size )
⟨Vi,Vj⟩:=f=1∑kvi,f⋅vj,f(n是特征个数,k是特征的embeddingsize)
小结
FM矩阵将User和Item都进行了one-hot编码作为特征,使得特征维度非常巨大且稀疏,所以在计算二阶特征组合系数的时候,会产生稀疏且巨大的矩阵,这时候就需要引入MF矩阵分解,将这个稀疏矩阵通过SVD方法进行分解成两个稠密的矩阵,接着通过优化方法(SGD/ALS)进行估算出新的交叉矩阵,这时候矩阵不再稀疏。
- FM引入了更多辅助信息(Side information)作为特征
- 矩阵分解MF是FM的特例,即特征只有User ID 和Item ID的FM模型
- 矩阵分解MF只适用于评分预测,进行简单的特征计算,无法利用其他特征
- FM算法引入了特征交叉,是因为单纯的线性模型无法很好学习到特征之间的相关性。
- 因为计算量的原因,一般FM采用2阶特征组合的方式
- 实际上高阶/非线性的特征组合适合采用深度模型
- w i j = ⟨ V i , V j ⟩ w_{i j}=\left\langle V_{i}, V_{j}\right\rangle wij=⟨Vi,Vj⟩是FM的核心思想,使得稀疏数据下学习不充分的问题也能得到充分解决