EM算法
也就是让期望最大化的方法,
最大似然估计
它是EM算法的核心,也就是已知样本服从的模型和样本观测情况,需要求解模型的参数,前面讲过了。在前面问题基础上又难了一点,在前面的基础上,问题是这样的:假设我们知道男生的一个身高分布,但是身高分布模型中有一个参数
θ
\theta
θ 我们不知道,这时候我们是利用样本观测数据和极大似然估计来求解参数。但是现在问题变为,抽样的样本中有两种类别,不光有男生还有女生(两个类别,2中参数),男生女生的身高都服从高斯分布,但是参数不同(均值、方差)。这个问题在于:我们不知道抽取的样本是从哪个分布里面抽取的。
以上问题就是EM算法需要解决的问题,多分类多变量的问题。
隐变量:
用 z=0 或者 z=1 标记样本来自哪个分布,这个 z 就是隐变量。数学表达式如下:
l
(
θ
)
=
∑
i
=
1
m
log
p
(
x
i
;
θ
)
=
∑
i
=
1
m
log
∑
z
p
(
x
i
;
z
;
θ
)
l\left ( \theta \right )=\sum_{i=1}^{m}\log p\left ( x_{i} ;\theta \right )=\sum_{i=1}^{m}\log \sum_{z}^{ \quad}p\left ( x_{i};z;\theta \right )
l(θ)=i=1∑mlogp(xi;θ)=i=1∑mlogz∑p(xi;z;θ)
求解方式:在给定初始值情况下进行迭代求解
首先假设两个参数一个为0.6,一个为0.5 。然后根据第一组样本的结果来计算是A样本的概率和B样本的概率,然后根据这个概率求解不同类别中正样本的期望和负样本的期望为多少。根据多组求解出来的期望,最终来求解A样本和B样本中投掷出正反的概率,也就是0.71和0.58 。再次用这个概率重复上面的过程,再次更新这两个概率。
以上就是EM算法的整个流程,分成E-step和M-step。
EM算法推导
Jensen不等式:
如果
f
(
x
)
f\left(x\right)
f(x)是凸函数,X是随机变量,那么有:
E
[
f
(
X
)
]
>
=
f
(
E
[
X
]
)
E\left [ f\left ( X \right ) \right ]> = f\left ( E\left [ X \right ] \right )
E[f(X)]>=f(E[X])。用图来解释:
\\
\\
\\
\\
假如X有0.5的概率是a,有0.5的概率是b,那么X的期望就是a和b的中值了,这样能很明显看出上述不等式。
由于
∑
z
Q
(
z
)
p
(
x
i
,
z
;
θ
)
Q
(
z
)
\sum_{z}^{ }Q\left ( z \right )\frac{p\left ( x_{i},z;\theta \right )}{Q\left ( z \right )}
∑zQ(z)Q(z)p(xi,z;θ)是
p
(
x
i
,
z
;
θ
)
Q
(
z
)
\frac{p\left ( x_{i},z;\theta \right )}{Q\left ( z \right )}
Q(z)p(xi,z;θ)的期望,所以假设
Y
=
p
(
x
i
,
z
;
θ
)
Q
(
z
)
Y=\frac{p\left ( x_{i},z;\theta \right )}{Q\left ( z \right )}
Y=Q(z)p(xi,z;θ),则有:
log
∑
z
Q
(
z
)
p
(
x
i
,
z
;
θ
)
Q
(
z
)
=
log
∑
Y
P
(
Y
)
Y
=
log
E
(
Y
)
\log \sum_{z}^{ }Q\left ( z \right )\frac{p\left ( x_{i},z;\theta \right )}{Q\left ( z \right )}=\log \sum_{Y}^{ }P\left ( Y \right )Y=\log E\left ( Y \right )
logz∑Q(z)Q(z)p(xi,z;θ)=logY∑P(Y)Y=logE(Y)
由Jensen不等式则有:
log
E
(
Y
)
≥
E
(
log
Y
)
=
∑
Y
P
(
Y
)
log
Y
=
∑
z
Q
(
z
)
log
p
(
x
i
,
z
;
θ
)
Q
(
z
)
\log E\left ( Y \right )\geq E\left ( \log Y \right )=\sum_{Y}^{ }P\left ( Y \right )\log Y=\sum_{z}^{ }Q\left ( z \right )\log \frac{p\left ( x_{i} ,z;\theta \right )}{Q\left ( z \right )}
logE(Y)≥E(logY)=Y∑P(Y)logY=z∑Q(z)logQ(z)p(xi,z;θ)
也就是说:
l
(
θ
)
=
∑
i
=
1
m
log
∑
z
p
(
x
i
,
z
;
θ
)
≥
∑
i
=
1
m
∑
z
Q
(
z
)
log
p
(
x
i
,
z
;
θ
)
Q
(
z
)
l\left ( \theta \right )=\sum_{i=1}^{m}\log\sum_{z}^{ }p\left ( x_{i},z;\theta \right )\geq \sum_{i=1}^{m}\sum_{z}^{ }Q\left ( z \right )\log \frac{p\left ( x_{i} ,z;\theta \right )}{Q\left ( z \right )}
l(θ)=i=1∑mlogz∑p(xi,z;θ)≥i=1∑mz∑Q(z)logQ(z)p(xi,z;θ)
GMM模型
全称是高斯混合模型,也就是数据可以看成是从数个Gaussian Distribution中生成出来的,GMM由k个Gaussian分布组成,每个Gaussian称为一个Component。
推荐系统
相似度计算
比如说有如下两个商品:
商品1 | 商品2 | |
---|---|---|
用户1 | 3.3 | 6.5 |
用户2 | 5.8 | 2.6 |
用户3 | 3.6 | 6.3 |
用户4 | 3.4 | 5.8 |
用户5 | 5.2 | 3.1 |
这种数据可以用欧式距离来计算相似度,除了欧式距离之外,还有其他的相似度计算方法:
欧式距离计算相似度
d
(
x
,
y
)
=
(
∑
(
x
i
−
y
i
)
2
)
s
i
m
(
x
,
y
)
=
1
1
+
d
(
x
,
y
)
d\left ( x,y \right )=\sqrt{\left ( \sum \left ( x_{i}-y_{i} \right )^{2} \right )} \\ sim\left ( x,y \right )=\frac{1}{1+d\left ( x,y \right )}
d(x,y)=(∑(xi−yi)2)sim(x,y)=1+d(x,y)1
皮尔逊相关系数
p
(
x
,
y
)
=
∑
x
i
y
i
−
n
x
y
ˉ
(
n
−
1
)
s
x
s
y
=
n
∑
x
i
y
i
−
∑
x
i
∑
y
i
n
∑
x
i
2
−
(
∑
x
i
)
2
n
∑
y
i
2
−
(
∑
y
i
)
2
p\left ( x,y \right )=\frac{\sum x_{i}y_{i}-n\bar{xy}}{\left ( n-1\right )s_{x}s_{y}}=\frac{n\sum x_{i}y_{i}-\sum x_{i}\sum y_{i}}{\sqrt{n\sum x_{i}^{2}-\left ( \sum x_{i} \right )^{2}}\sqrt{n\sum y_{i}^{2}-\left ( \sum y_{i} \right )^{2}}}
p(x,y)=(n−1)sxsy∑xiyi−nxyˉ=n∑xi2−(∑xi)2n∑yi2−(∑yi)2n∑xiyi−∑xi∑yi
这种相似度计算方法相当于先求解协方差,然后利用协方差除以两个变量的标准差得到的,如下:
Cosine相似度
T
(
x
,
y
)
=
x
⋅
y
∥
x
∥
2
×
∥
y
∥
2
=
∑
x
i
y
i
∑
x
i
2
∑
y
i
2
T\left ( x,y \right )=\frac{x\cdot y}{\left \| x \right \|^{2}\times \left \| y \right \|^{2}}=\frac{\sum x_{i}y_{i}}{\sqrt{\sum x_{i}^{2}}\sqrt{\sum y_{i}^{2}}}
T(x,y)=∥x∥2×∥y∥2x⋅y=∑xi2∑yi2∑xiyi
现阶段来说使用皮尔逊来计算相似度还是比较常用的。
邻居选择
计算出相似度之后,有两种方案来选择邻居:选择固定数量的邻居;基于相似度门槛来选择邻居。但是我们最好基于相似度门槛来选择邻居,也就是给一个相似度的阈值来判断是否为邻居。
协同过滤
协同过滤是推荐系统中比较重要的一种模型,分为两种:基于用户的协同过滤和基于物品的协同过滤。
1. 基于用户的协同过滤
如图上所示,假如现在有三个用户,我们想给A用户推荐一些东西,这样我们就比较其他用户与A用户比较相似,找到相似用户之后我们就将A用户没买而相似用户购买了的东西推荐给A。这种方法就是基于用户的协同过滤,但是这种算法对于新用户来说没有办法推荐,同时对于邻居没买的好东西没有办法推荐。
(这种方法并不流行,因为通常来说应用场景中有数百万的用户,计算量太大了;同时物品太多,会出现稀疏问题;最后,用户会跟随时间而改变)(通常用于实时推荐,如实时新闻等)
2. 基于物品的协同过滤
如图,现在我们有这样三个用户和物品打分情况,这时候我们是计算物品之间的相似度,计算出来之后知道物品A和物品C之家相似度高,同时三个用户都对物品A进行了打分,这样我们就将C推荐给对物品A打分而没有给物品C打分的用户。这就是基于物品的协同过滤,这种方法由于基于用户的协同过滤,优势在于:
用户数量远远大于物品数量,计算性能高;
可预先计算保留,物品并不善变。
3. 用户冷启动和物品冷启动
对于新用户来说,我们没有与他相关的信息,这样没有办法给用户进行推荐。这时候我们可以采用其他的方法来进行推荐,如:推荐排行榜单等。
对于新的物品来说,也同样存在上述问题。我们同样可以采取一些其他方式来进行推荐,如:物品描述文本分析、打标签、排行榜单等。
隐语义模型
这也是推荐系统中一个重要的模型。推荐物品的话,首先需要找到用户与物品之间的联系,而这个模型也就是找到与用户相关的隐含因子,再找到物品的隐含因子,通过隐含因子来联系用户和物品。
模型如图中所示,首先将用户与物品分解,原始是一个N x M 的矩阵,分解之后我们得到 F x N 和 F x M 的两个矩阵,只要我们能够得到这两个矩阵,我们用前面矩阵的转置乘以后面的矩阵,就能够得到用户与物品的联系。
1. 构建流程
R
U
I
=
P
U
Q
I
=
∑
k
=
1
K
P
U
,
k
Q
k
,
I
R_{UI}=P_{U}Q_{I}=\sum_{k=1}^{K}P_{U,k}Q_{k,I}
RUI=PUQI=k=1∑KPU,kQk,I
P表示用户与隐含因子之间的关系,Q表示物品与隐含因子之间的关系。
C
=
∑
(
U
,
I
)
∈
K
(
R
U
I
−
R
^
U
I
)
2
=
∑
(
U
,
I
)
∈
K
(
R
U
I
−
∑
k
=
1
K
P
U
,
k
Q
k
,
I
)
2
+
λ
∥
P
U
∥
2
+
λ
∥
Q
I
∥
2
C=\sum_{\left ( U,I \right )\in K}^{ }\left ( R_{UI}-\hat{R}_{UI} \right )^{2}=\sum_{\left ( U,I \right )\in K}^{ }\left ( R_{UI}-\sum_{k=1}^{K}P_{U,k} Q_{k,I}\right )^{2}+\lambda \left \| P_{U} \right \|^{2}+\lambda \left \| Q_{I} \right \|^{2}
C=(U,I)∈K∑(RUI−R^UI)2=(U,I)∈K∑(RUI−k=1∑KPU,kQk,I)2+λ∥PU∥2+λ∥QI∥2
C表示预测值与真实值之间的差异,后面两项是加上的一些损失项。
2. 求解隐语义模型
首先求解的话,判断条件肯定是误差最小,所以是对误差函数求导。
梯度下降方向:
∂
∂
P
U
K
=
−
2
(
R
U
I
−
∑
k
=
1
K
P
U
,
k
Q
k
,
I
)
Q
k
I
+
2
λ
P
U
k
\frac{\partial }{\partial P_{UK}}=-2\left ( R_{UI}-\sum_{k=1}^{K}P_{U,k}Q_{k,I}\right )Q_{kI}+2\lambda P_{Uk}
∂PUK∂=−2(RUI−k=1∑KPU,kQk,I)QkI+2λPUk
∂
∂
Q
K
I
=
−
2
(
R
U
I
−
∑
k
=
1
K
P
U
,
k
Q
k
,
I
)
P
U
k
+
2
λ
Q
k
I
\frac{\partial }{\partial Q_{KI}}=-2\left ( R_{UI}-\sum_{k=1}^{K}P_{U,k}Q_{k,I}\right )P_{Uk}+2\lambda Q_{kI}
∂QKI∂=−2(RUI−k=1∑KPU,kQk,I)PUk+2λQkI
迭代求解(也就是沿着梯度方向更新参数) :
P
U
k
=
P
U
k
+
α
(
(
R
U
I
−
∑
k
=
1
K
P
U
,
k
Q
k
,
I
)
Q
k
I
−
λ
P
U
k
)
P_{Uk}=P_{Uk}+\alpha \left ( \left ( R_{UI}-\sum_{k=1}^{K}P_{U,k}Q_{k,I} \right )Q_{kI}-\lambda P_{Uk} \right )
PUk=PUk+α((RUI−k=1∑KPU,kQk,I)QkI−λPUk)
Q
k
I
=
Q
k
I
+
α
(
(
R
U
I
−
∑
k
=
1
K
P
U
,
k
Q
k
,
I
)
P
U
k
−
λ
Q
k
I
)
Q_{kI}=Q_{kI}+\alpha \left ( \left ( R_{UI}-\sum_{k=1}^{K}P_{U,k}Q_{k,I} \right )P_{Uk}-\lambda Q_{kI} \right )
QkI=QkI+α((RUI−k=1∑KPU,kQk,I)PUk−λQkI)
隐语义模型参数选择:
隐特征的个数F,通常为100;
学习速率,别太大就行;
正则化参数lambda,别太大就行;
正负样本比例,根据实际情况来说(基本上5或者10都比较合理)。
评估标准
1. 比较
协同过滤 vs 隐语义模型
协同过滤是基于统计的,而隐语义是基于建模的;隐语义模型通常较小;两者都很难实现实时推荐,多数以离线计算多。
2. 评估指标
推荐系统中最基本的评估指标就是:准确率和召回率
准确率:
R
M
S
E
=
∑
u
,
i
∈
T
(
r
u
i
−
r
^
u
i
)
2
∣
T
∣
RMSE=\frac{\sqrt{\sum_{u,i\in T}^{ }\left ( r_{ui}-\hat{r}_{ui}\right )^{2}}}{\left | T \right |}
RMSE=∣T∣∑u,i∈T(rui−r^ui)2
召回率:
R
e
c
a
l
l
=
∑
u
∈
U
∣
R
(
u
)
∩
T
(
u
)
∣
∑
u
∈
U
∣
T
(
u
)
∣
Recall=\frac{\sum_{u\in U}^{ }\left | R\left ( u \right )\cap T\left ( u \right ) \right |}{\sum_{u\in U}^{ }\left | T\left ( u \right ) \right |}
Recall=∑u∈U∣T(u)∣∑u∈U∣R(u)∩T(u)∣
R(u)是根据用户在训练集上的行为给用户作出的推荐列表,T(u)是用户在测试集上的行为列表。
但是注意,准确率和召回率也不是就是做唯一的评估指标,对于推荐系统来说,这两个评估指标还不能满足要求。比如,网络商城里面推荐的目的是为了让顾客去买商品,所以不是说推荐准确顾客就会去买,最终导致顾客去买商品还和很多因素有关。