本文使用 Zhihu On VSCode 创作并发布
本文约5023个字符,阅读需要很久
本文「最后」将介绍著名的KMeans算法,在此之前,先作一系列铺垫。只知道KMeans算法本身远远不够,且算法十分简单,并不值得花一整篇博客讲解。知其然且知其所以然,非常重要。
故本文从含有隐变量的概率模型开始讲起,介绍清楚最一般的情况,看看怎么用EM算法求解隐变量模型的最大似然估计。最后KMeans算法的出现就显得十分简单,几乎不值一提。阅读本文,你不但将知道KMeans算法的来龙去脉,还将对贝叶斯统计和隐变量模型有更深的理解。
如果你只想了解KMeans算法,一点数学推理都不想看,可以直接跳到文章的最后一个h1标题下的第一个标题。
本文思维导图:
![v2-a904faf75d05073ef701d5c62dc319ae_b.png](http://img-03.proxy.5ce.com/view/image?&type=2&guid=bb9d5242-3a2a-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-a904faf75d05073ef701d5c62dc319ae_b.png)
本文的md源码地址:
AnBlogsgithub.com无监督学习和隐变量
无监督学习,就是目标没有给出的机器学习模型。聚类问题中,给出的数据没有「标签」,需要让模型「学」标签,并且能够把新来的数据归到标签中。
这样在数据集中没有给出的量,就是「隐变量」。聚类问题中,「隐变量」是模型的目标。在其他问题中,隐变量不一定是目标,可能是一个中间变量。故具有隐变量的模型不一定是无监督模型,无监督模型一定有隐变量。
概率模型描述
模型的任务
要对一系列对象特征(一行数据)
假设每个特征
和「监督学习」相比,监督学习的数据集中,数据的分类是给出的,通常用
以下先探索最一般的情况,再带入具体的随机变量取值状况和服从的分布。
带入贝叶斯公式变形
直接给模型带入贝叶斯公式,对于一行数据
展开分子:
展开分母:
这里将
后验和似然
按照惯例,写出参数的后验和似然。这里需要特别注意,由于
其中似然展开:
取似然的对数:
要表达后验的对数也十分简单,是需要多乘一项作为先验:
要求最大似然估计,或最大后验估计,优化问题都非常复杂。解决此类优化问题,常使用EM算法。
EM算法 (Expectation Maximization)
这个算法非常复杂,先介绍算法流程,带入一个具体例子GMM,再讲解原理。
流程
算法是一个迭代的过程,使用上一次迭代计算的结果
算法分成两步,E和M,以下分别介绍。
![v2-bb3cd5b79522f547af8f9da5730ee58c_b.jpeg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=bb9d5242-3a2a-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-bb3cd5b79522f547af8f9da5730ee58c_b.jpeg)
E步
在此设置另一种「似然」,以求绕开这个积分。具体这样做的原因,在后文有解释。
计算一个「条件均值」,作为「辅助函数」:
设置另一种「后验」也很类似:
由于「最大似然估计」和「最大后验估计」的EM算法求解过程几乎相同,下文只讲「最大似然估计」的情况,「最大后验估计」只需加上一项即可。
M步
最大化「辅助函数」,使用此时的
混合高斯模型 (GMM)
这里带入著名的「混合高斯模型」,看看算法具体是怎样运行的。
带入混合高斯模型,就是指明了分布。
把聚类问题的目标表达成GMM:
可以理解为,有
如下图所示,图中有三个正态分布,对应三个类。每个正态分布对应参数
![v2-d7fe31eed76f780c61d75b6e056769e9_b.png](http://img-01.proxy.5ce.com/view/image?&type=2&guid=bb9d5242-3a2a-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-d7fe31eed76f780c61d75b6e056769e9_b.png)
我们来用EM算法求解这个模型。
E步:写出
写出
表达辅助函数:
计算里面的条件均值:
给计算结果一个记号:
利用贝叶斯公式继续展开
其中最后
这样就完整地表达了下一步所需要的各种函数和分布。
M步:求解优化问题
表达出最终的Q:
有一个约束条件不要忘记
具体求偏导的过程相对复杂,以下分别描述。
对
只有约束项和第一个
于是有
两边对
右边为:
其中,
以上说明,
用这个估计值更新
对
只有第二个
这是个标准的「正态分布最大似然估计」问题,这里省掉求解过程,直接给出结论。求解过程十分复杂,需要使用复杂的张量代数,不是本文的重点。以后可能专门写文介绍正态分布的各种结论。
总结GMM
以上以「混合高斯模型」为例,介绍了EM算法求解聚类问题的一般流程。其他问题与此类似,修改一些步骤即可。
EM算法严谨地遵守了规定的步骤。先表达
原理 (Why does it Work???)
以上介绍的EM算法的求解过程,建议你反复阅读,反复体会。
这里给出算法的严格证明,和对算法的直观理解。你可以跳过严格证明,直接看对算法的理解,可能对你帮助更大。
严格证明算法正确性
我们之前把
对它取对数:
等式两边,在给定
等式左边不变,只有右边发生了变化。
记
利用简单的变量代换:
只要能够证明
要证明这个关系,就是证明
看似复杂,实则简单。写出左边减右边:
这是一个「均值」:
由于
这个不等式右边的均值很好计算:
也就是说:
取等条件很严格,
这是严格证明。
直观理解
EM算法的出发点,是绕开复杂的对
这种通过优化下界来优化目标本身的操作,属实牛逼。
K-Means算法
KMeans算法是「混合高斯模型」GMM的EM算法的特殊情况,如果你已经阅读了上文,理解起来应该十分简单。KMeans算法中关键的两步,正好可以对应EM算法中的E步和M步!
算法流程
算法启动时,初始化一些「中心」,「中心」的个数人为指定,是为
判断一个对象
打tag
每次迭代,先给所有的样本划分类别。划分的方式,就是计算样本到每个中心的距离,选择距离最近的中心为归属。
表现为给隐变量赋值:
更新中心
给样本打好tag之后,计算新的中心
其中,求和下标
如此重复,直到算法收敛,达到预定精度。
算法的运行可以由下图表现。(a)中初始化了两个中心,(b)基于这两个中心给所有样本归类打tag,(c)基于(b)中归类重新计算了中心,(d)又基于(c)的中心重新计算了归类打了tag,如此重复。
![v2-0d09708a84ff458c5d3006f2cf81cd7a_b.png](http://img-01.proxy.5ce.com/view/image?&type=2&guid=bb9d5242-3a2a-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-0d09708a84ff458c5d3006f2cf81cd7a_b.png)
推导KMeans
KMeans是混合高斯模型的特殊情况。设置
可以直接带入之前得到的GMM的结论。
E步:表达
表达
这种「硬赋值」和原先「软求和」之间的联系可以这样理解。正态分布的方差
这样一来,对于给定的一系列
为所有样本根据
表达
下标
M步:表达优化问题
在求解优化问题时,
求
对
令偏导数为0,得到:
得到了KMeans算法的另一步「更新中心」:
至此,我们知道,KMeans算法的两步,正是EM算法的两步!