K-Means:隐变量、聚类、EM

K-Means:隐变量、聚类、EM

本文「最后」将介绍著名的KMeans算法,在此之前,先作一系列铺垫。只知道KMeans算法本身远远不够,且算法十分简单,并不值得花一整篇博客讲解。知其然且知其所以然,非常重要。

故本文从含有隐变量的概率模型开始讲起,介绍清楚最一般的情况,看看怎么用EM算法求解隐变量模型的最大似然估计。最后KMeans算法的出现就显得十分简单,几乎不值一提。阅读本文,你不但将知道KMeans算法的来龙去脉,还将对贝叶斯统计和隐变量模型有更深的理解。

如果你只想了解KMeans算法,一点数学推理都不想看,可以直接跳到文章的最后一个h1标题下的第一个标题。

本文思维导图:
思维导图
本文的md源码地址:AnBlogs

无监督学习和隐变量

无监督学习,就是目标没有给出的机器学习模型。聚类问题中,给出的数据没有「标签」,需要让模型「学」标签,并且能够把新来的数据归到标签中。

这样在数据集中没有给出的量,就是「隐变量」。聚类问题中,「隐变量」是模型的目标。在其他问题中,隐变量不一定是目标,可能是一个中间变量。故具有隐变量的模型不一定是无监督模型,无监督模型一定有隐变量。

概率模型描述

模型的任务

要对一系列对象特征(一行数据) x x x进行分类,分类的「标签」未知,需要模型自己发现。也就是「无监督学习」。可以理解为,数据表中的每一行有一个隐藏列,这个列的值没有给出,但模型认为这个列存在。

假设每个特征 x x x都对应一个隐变量 z z z z z z表示这个特征的「聚类」,也就是模型训练的结果。也就是说,数据集中的每一行都有一个隐藏属性,表示这一行对象的聚类。 z z z离散取值,模型的任务,就是求 p ( z = k ∣ x , θ ) p(z=k|x,\theta) p(z=kx,θ)。也就是,给定输入数据 x x x和参数 θ \theta θ的前提下,这个数据分类到某个聚类 k k k的概率。

和「监督学习」相比,监督学习的数据集中,数据的分类是给出的,通常用 y y y表示,不是「隐」的。

以下先探索最一般的情况,再带入具体的随机变量取值状况和服从的分布。

带入贝叶斯公式变形

直接给模型带入贝叶斯公式,对于一行数据 ( x ( i ) , z ( i ) ) (x^{(i)},z^{(i)}) (x(i),z(i))
p ( z ( i ) ∣ x ( i ) , θ ) = p ( z ( i ) , x ( i ) ∣ θ ) p ( x ( i ) ∣ θ ) p(z^{(i)}|x^{(i)},\theta)=\frac{p(z^{(i)},x^{(i)}|\theta)}{p(x^{(i)}|\theta)} p(z(i)x(i),θ)=p(x(i)θ)p(z(i),x(i)θ)
展开分子:
p ( z ( i ) , x ( i ) ∣ θ ) = p ( z ( i ) ∣ θ ) p ( x ( i ) ∣ z ( i ) , θ ) p(z^{(i)},x^{(i)}|\theta)=p(z^{(i)}|\theta)p(x^{(i)}|z^{(i)},\theta) p(z(i),x(i)θ)=p(z(i)θ)p(x(i)z(i),θ)
展开分母:
p ( x ( i ) ∣ θ ) = ∫ p ( x ( i ) , z ( i ) ∣ θ ) d z = ∫ p ( z ( i ) ∣ θ ) p ( x ( i ) ∣ z ( i ) , θ ) d z p(x^{(i)}|\theta)=\int p(x^{(i)},z^{(i)}|\theta)dz=\int p(z^{(i)}|\theta)p(x^{(i)}|z^{(i)},\theta)dz p(x(i)θ)=p(x(i),z(i)θ)dz=p(z(i)θ)p(x(i)z(i),θ)dz
这里将 z z z写作积分,为了适应更广泛的情况。当 z z z离散取值时,把积分换成求导即可,没有区别。

后验和似然

按照惯例,写出参数的后验和似然。这里需要特别注意,由于 z z z实际并未给出,在后验表达式中,不可以出现 z z z。换句话说,表示数据集的 D D D中不含 z ( i ) z^{(i)} z(i),只含 x ( i ) x^{(i)} x(i)。要估计参数, z z z必须作为中间量,不出现在最终结果中。故后验表达式应具有以下形式:
p ( θ ∣ D ) = p ( D ∣ θ ) p ( θ ) p ( D ) p(\theta|D)=\frac{p(D|\theta)p(\theta)}{p(D)} p(θD)=p(D)p(Dθ)p(θ)
其中似然展开:
p ( D ∣ θ ) = ∏ i p ( x ( i ) ∣ θ ) = ∏ i ∫ p ( x ( i ) , z ( i ) ∣ θ ) d z = ∏ i ∫ p ( z ( i ) ∣ θ ) p ( x ( i ) ∣ z ( i ) , θ ) d z p(D|\theta)=\prod_ip(x^{(i)}|\theta)=\prod_i\int p(x^{(i)},z^{(i)}|\theta)dz=\prod_i\int p(z^{(i)}|\theta)p(x^{(i)}|z^{(i)},\theta)dz p(Dθ)=ip(x(i)θ)=ip(x(i),z(i)θ)dz=ip(z(i)θ)p(x(i)z(i),θ)dz
取似然的对数:
l ( θ ) = log ⁡ p ( D ∣ θ ) = ∑ i log ⁡ ∫ p ( x ( i ) , z ( i ) ∣ θ ) d z l(\theta)=\log p(D|\theta)=\sum_i\log\int p(x^{(i)},z^{(i)}|\theta)dz l(θ)=logp(Dθ)=ilogp(x(i),z(i)θ)dz
要表达后验的对数也十分简单,是需要多乘一项作为先验:
l ( θ ) = ∑ i log ⁡ ∫ p ( x ( i ) , z ( i ) ∣ θ ) p ( θ ) d z l(\theta)=\sum_i\log\int p(x^{(i)},z^{(i)}|\theta)p(\theta)dz l(θ)=ilogp(x(i),z(i)θ)p(θ)dz
要求最大似然估计,或最大后验估计,优化问题都非常复杂。解决此类优化问题,常使用EM算法。

EM算法 (Expectation Maximization)

这个算法非常复杂,先介绍算法流程,带入一个具体例子GMM,再讲解原理。

流程

算法是一个迭代的过程,使用上一次迭代计算的结果 θ ( t ) \theta^{(t)} θ(t)进行本次计算,得到新的结果 θ ( t + 1 ) \theta^{(t+1)} θ(t+1)更新参数的估计值。

算法分成两步,E和M,以下分别介绍。
算法流程

E步

log ⁡ \log log中包含积分,是计算困难所在。

在此设置另一种「似然」,以求绕开这个积分。具体这样做的原因,在后文有解释。
l c ( i ) ( θ ) = log ⁡ p ( x ( i ) , z ( i ) ∣ θ ) l_c^{(i)}(\theta)=\log p(x^{(i)},z^{(i)}|\theta) lc(i)(θ)=logp(x(i),z(i)θ)
计算一个「条件均值」,作为「辅助函数」:
Q ( θ ∣ θ t ) = E z ( i ) ∣ x ( i ) , θ t [ ∑ i l c ( i ) ( θ ) ] = ∑ i E z ( i ) ∣ x ( i ) , θ t [ l c ( i ) ( θ ) ] Q(\theta|\theta^t)=\underset{z^{(i)}|x^{(i)},\theta^{t}}{E}[\sum_il_c^{(i)}(\theta)]=\sum_i\underset{z^{(i)}|x^{(i)},\theta^{t}}{E}[l_c^{(i)}(\theta)] Q(θθt)=z(i)x(i),θtE[ilc(i)(θ)]=iz(i)x(i),θtE[lc(i)(θ)]
设置另一种「后验」也很类似:
l c ( i ) ( θ ) = log ⁡ p ( x ( i ) , z ( i ) ∣ θ ) + log ⁡ p ( θ ) l_c^{(i)}(\theta)=\log p(x^{(i)},z^{(i)}|\theta)+\log p(\theta) lc(i)(θ)=logp(x(i),z(i)θ)+logp(θ)
由于「最大似然估计」和「最大后验估计」的EM算法求解过程几乎相同,下文只讲「最大似然估计」的情况,「最大后验估计」只需加上一项即可。

M步

最大化「辅助函数」,使用此时的 θ \theta θ作为新的参数值:
θ ( t + 1 ) = arg ⁡ max ⁡ θ Q ( θ ) \theta^{(t+1)}=\arg\max_\theta Q(\theta) θ(t+1)=argθmaxQ(θ)

混合高斯模型 (GMM)

这里带入著名的「混合高斯模型」,看看算法具体是怎样运行的。

带入混合高斯模型,就是指明了分布。 z z z离散取值,使用「多项伯努利分布」描述,参数为 π \pi π,下标 k k k表示「取离散值 k k k的概率」。 x x x连续取值,使用「正态分布」描述,参数为均值和协方差 μ , Σ \mu,\Sigma μ,Σ。把参数写在一起,方便表示, θ = ( μ , Σ , π ) \theta=(\mu,\Sigma,\pi) θ=(μ,Σ,π)。对于每个聚类 k k k,都有一组参数, θ k = ( μ k , Σ k , π k ) \theta_k=(\mu_k,\Sigma_k,\pi_k) θk=(μk,Σk,πk)
p ( z ( i ) = k ∣ π ) = π k , p ( x ( i ) ∣ z ( i ) = k , μ k , Σ k ) = N ( x ( i ) ∣ μ k , Σ k ) p(z^{(i)}=k|\pi)=\pi_k,p(x^{(i)}|z^{(i)}=k,\mu_k,\Sigma_k)=N(x^{(i)}|\mu_k,\Sigma_k) p(z(i)=kπ)=πk,p(x(i)z(i)=k,μk,Σk)=N(x(i)μk,Σk)
把聚类问题的目标表达成GMM:
p ( z ( i ) = k ∣ θ , x ( i ) ) ∝ p ( z ( i ) = k ∣ θ ) p ( x ( i ) ∣ z ( i ) = k , θ ) = π k N ( x ( i ) ∣ μ k , Σ k ) p(z^{(i)}=k|\theta,x^{(i)})\propto p(z^{(i)}=k|\theta)p(x^{(i)}|z^{(i)}=k,\theta)=\pi_kN(x^{(i)}|\mu_k,\Sigma_k) p(z(i)=kθ,x(i))p(z(i)=kθ)p(x(i)z(i)=k,θ)=πkN(x(i)μk,Σk)
可以理解为,有 K K K个不同的正态分布,带有不同的参数 μ k , Σ k \mu_k,\Sigma_k μk,Σk,每个分布对于「应该归进哪个聚类」都有一定「话语权」 π k \pi_k πk,最终的选择是比较 z z z取这 k k k个不同值的概率、从而「共同决策」的结果。

如下图所示,图中有三个正态分布,对应三个类。每个正态分布对应参数 π k , μ k , Σ k \pi_k,\mu_k,\Sigma_k πk,μk,Σk。通过每个正态分布的参数,计算出样本 x ( i ) x^{(i)} x(i)分到 k k k聚类的概率为 p ( z ( i ) = k ∣ x ( i ) , π k , μ k , Σ k ) p(z^{(i)}=k|x^{(i)},\pi_k,\mu_k,\Sigma_k) p(z(i)=kx(i),πk,μk,Σk

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值