varclus变量聚类对变量有啥要求_K-Means:隐变量、聚类、EM

本文使用 Zhihu On VSCode 创作并发布
本文约5023个字符,阅读需要很久

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

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

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

本文思维导图:

v2-a904faf75d05073ef701d5c62dc319ae_b.png
思维导图

本文的md源码地址:

AnBlogs​github.com

无监督学习和隐变量

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

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

概率模型描述

模型的任务

要对一系列对象特征(一行数据)

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

假设每个特征

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

和「监督学习」相比,监督学习的数据集中,数据的分类是给出的,通常用

表示,不是「隐」的。

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

带入贝叶斯公式变形

直接给模型带入贝叶斯公式,对于一行数据

展开分子:

展开分母:

这里将

写作积分,为了适应更广泛的情况。当
离散取值时,把积分换成求导即可,没有区别。

后验和似然

按照惯例,写出参数的后验和似然。这里需要特别注意,由于

实际并未给出,在后验表达式中,不可以出现
。换句话说,表示数据集的
中不含
,只含
。要估计参数,
必须作为中间量,不出现在最终结果中。故后验表达式应具有以下形式:

其中似然展开:

取似然的对数:

要表达后验的对数也十分简单,是需要多乘一项作为先验:

要求最大似然估计,或最大后验估计,优化问题都非常复杂。解决此类优化问题,常使用EM算法。

EM算法 (Expectation Maximization)

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

流程

算法是一个迭代的过程,使用上一次迭代计算的结果

进行本次计算,得到新的结果
更新参数的估计值。

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

v2-bb3cd5b79522f547af8f9da5730ee58c_b.jpeg
算法流程

E步

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

在此设置另一种「似然」,以求绕开这个积分。具体这样做的原因,在后文有解释。

计算一个「条件均值」,作为「辅助函数」:

设置另一种「后验」也很类似:

由于「最大似然估计」和「最大后验估计」的EM算法求解过程几乎相同,下文只讲「最大似然估计」的情况,「最大后验估计」只需加上一项即可。

M步

最大化「辅助函数」,使用此时的

作为新的参数值:

混合高斯模型 (GMM)

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

带入混合高斯模型,就是指明了分布。

离散取值,使用「多项伯努利分布」描述,参数为
,下标
表示「取离散值
的概率」。
连续取值,使用「正态分布」描述,参数为均值和协方差
。把参数写在一起,方便表示,
。对于每个聚类
,都有一组参数,

把聚类问题的目标表达成GMM:

可以理解为,有

个不同的正态分布,带有不同的参数
,每个分布对于「应该归进哪个聚类」都有一定「话语权」
,最终的选择是比较
取这
个不同值的概率、从而「共同决策」的结果。

如下图所示,图中有三个正态分布,对应三个类。每个正态分布对应参数

。通过每个正态分布的参数,计算出样本
分到
聚类的概率为
,比较
取不同值时候的概率大小,就知道应分到哪个聚类,也就是应归属哪个正态分布。

v2-d7fe31eed76f780c61d75b6e056769e9_b.png
多个高斯

我们来用EM算法求解这个模型。

E步:写出

写出

:

求和:

表达辅助函数:

计算里面的条件均值:

给计算结果一个记号:

,称为「responsibility」,可以理解为
聚类对第
行数据的「认领程度」。若认为行之间没有关联,每个样本都是相互独立的,这个「认领程度」可以写成

利用贝叶斯公式继续展开

:

其中最后

为正态分布。

这样就完整地表达了下一步所需要的各种函数和分布。

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
聚类迭代

推导KMeans

KMeans是混合高斯模型的特殊情况。设置

,协方差矩阵是对角矩阵
,则需要估计的只有

可以直接带入之前得到的GMM的结论。

E步:表达

表达

:

衡量一个聚类对样本的「认领程度」,也就是这个样本分到这个聚类的概率。这里使用更简单粗暴的办法,
,直接赋值。这样的直接赋值称为「硬」EM (Hard EM)。

这种「硬赋值」和原先「软求和」之间的联系可以这样理解。正态分布的方差

很小,使得
和中心
相差很小的距离的时候,概率密度就接近0。把这一系列概率密度求和,最终占主导地位的,还是离样本最近的中心计算的概率。

这样一来,对于给定的一系列

,我们都可以为所有样本找一个聚类,也就是给所有的
赋值。样本所属的聚类是通过比较概率
得到的,也就是通过比较
得到的,也就是比较样本到各个中心的距离。这正是KMeans算法中的关键一步「打tag」!

为所有样本根据

找到了聚类,也就是完成了
的赋值,接下来就要试着求
。还是通过求辅助函数
的优化问题得到新的参数,我们为每个中心
单独准备一个
,原先定义的辅助函数,由所有
求和得到,

表达

如下,省去了和优化求解无关的常数项。

下标

表示,只让选择归类到聚类
的样本参与求和。

M步:表达优化问题

在求解优化问题时,

之间互不关联,
求偏导,也就是
求偏导。故可以分
进行计算,将每个
最大化,也就是将整体
最大化。

中对数接受一个正态分布的概率密度函数,展开如下:

的最大值,也就是求
的最小值。

求偏导:

令偏导数为0,得到:

得到了KMeans算法的另一步「更新中心」:

至此,我们知道,KMeans算法的两步,正是EM算法的两步!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值