在参数方法中,我们假设样本来自于一个已知的分布,因此我们的主要工作就是估计有限的参数;而对于另外一些问题,我们不能确定样本遵从的分布假设,这时我们可以退一步,采用混合分布估计输入样本(也就是半参数方法);如果这样也不行,那么我们就要使用非参数的方法。今天我们来初步了解下聚类 学习。主要的要点如下:
之所以要提出混合分布,主要原因就是上面所说的分布假设无法确定的情况,另一个原因也有可能样本遵从的分布本身就不是单一的,比如语音识别的学习,同样一个单词,可能因为说话者的性别、年龄、方言等因素而有不同的发音,因此不能够用统一的分布假设来进行拟合。这里我们采取表示所有这些不同发音方法的策略,即半参数密度估计(semiparamitric density estimation),我们对样本假定有多个分组,每个分组仍然假定一个具体的模型。
混合密度(mixture density)记作:
这里的G-i称为混合分支(mixture component),也称做分组(group)或簇(cluster);P(x|G-i)是分支密度,而P(G-i)是混合比例,这里是通过概率的量来度量分支的比例和密度。分支数K是超级参数,应当是预先指定的。实际上,参数分类就是混合模型,但不同的 是,参数分类是有标号的,而这里是不知道标号的,也就是非监督学习问题。因此,我们需要估计标号,接着估计每个分支的参数,为此,先看K均值聚类。
如何对一个样本进行聚类分析呢?这里我们有一个简单的算法,称之为K-均值聚类。为了便于理解,我们引入一个颜色量化的实例。比如我们有一副24位/像素的图像(即24个比特位来标示图像,总共可以表示2^24中颜色,1600多万种),假定我们有个8位/像素的彩色屏幕,显示这副图像无疑会存在像素损失,现在的问题是我们从原先的1600万种颜色中选取256种颜色来显示图像呢?且尽可能不损失图像质量。
如果直接均匀量化是不实际的,因为图像像素的分布并不均匀,比如一副大海的图片蓝色比较多,而基本不会出现红色;我们量化后的图像像素应当尽可能地接近反映原来的像素密度,将映射表更多地放在高密度区域,丢弃没有数据的区域。
这里我们一个自然的想法,将“距离”比较近的一些像素用一个近似值来代表,从而实现像素的量化。比如对于24位的像素x,我们有24位的映射表集合M,如果对于某个映射m-i附近的像素值都用序号i来表示像素的话,那么我们只要选取256个映射表,就可以实现1600万-->256的映射。因此这里关键是度量像素样本x与映射表m之间的距离(都是24比特的二进制序列):
现在的问题是我们应当如何计算符合这样条件的m-i呢?我们的方法是计算总重构误差(reconsturction error),定义为:
我们可以根据一个迭代算法来计算出这样的m,最终参考向量被设置为它所代表的所有实例的均值。算法的伪代码是:
选择K个点作为初始中心;
Repeat
将每个点指派到最近的中心,形成K个簇;
重新计算每个簇的中心;
Until簇的中心不再变化
初始化K-均值算法可以有不同的方法,比如简单随机选择k个实例作为初始的M,或者可计算所有数据的均值,并将一些小的随机变量加到均值上,得到k个初始的m值。
参数K的去顶依赖于我们使用的聚类方法类型,我们可以将重构误差或对数似然作为k的函数绘制图形,找出“拐点”,即足够大的K之后,算法将开始分裂分组,此时重构误差不会大幅降低,而对数似然也不会大幅提高。
其实K-均值聚类算法是期望最大化算法(Expectation-Maximization, EM)的一个特例。
再给个详细解释:
聚类属于无监督学习,以往的回归、朴素贝叶斯、SVM等都是有类别标签y的,也就是说样例中已经给出了样例的分类。而聚类的样本中却没有给定y,只有特征x,比如假设宇宙中的星星可以表示成三维空间中的点集。聚类的目的是找到每个样本x潜在的类别y,并将同类别y的样本x放在一起。比如上面的星星,聚类后结果是一个个星团,星团里面的点相互距离比较近,星团间的星星距离就比较远了。
在聚类问题中,给我们的训练样本是,每个,没有了y。
K-means算法是将样本聚类成k个簇(cluster),具体算法描述如下:
1、 随机选取k个聚类质心点(cluster centroids)为。 2、 重复下面过程直到收敛 { 对于每一个样例i,计算其应该属于的类 对于每一个类j,重新计算该类的质心 } |
K是我们事先给定的聚类数,代表样例i与k个类中距离最近的那个类,的值是1到k中的一个。质心代表我们对属于同一个类的样本中心点的猜测,拿星团模型来解释就是要将所有的星星聚成k个星团,首先随机选取k个宇宙中的点(或者k个星星)作为k个星团的质心,然后第一步对于每一个星星计算其到k个质心中每一个的距离,然后选取距离最近的那个星团作为,这样经过第一步每一个星星都有了所属的星团;第二步对于每一个星团,重新计算它的质心(对里面所有的星星坐标求平均)。重复迭代第一步和第二步直到质心不变或者变化很小。
下图展示了对n个样本点进行K-means聚类的效果,这里k取2。
K-means面对的第一个问题是如何保证收敛,前面的算法中强调结束条件就是收敛,可以证明的是K-means完全可以保证收敛性。下面我们定性的描述一下收敛性,我们定义畸变函数(distortion function)如下:
J函数表示每个样本点到其质心的距离平方和。K-means是要将J调整到最小。假设当前J没有达到最小值,那么首先可以固定每个类的质心,调整每个样例的所属的类别来让J函数减少,同样,固定,调整每个类的质心也可以使J减小。这两个过程就是内循环中使J单调递减的过程。当J递减到最小时,和c也同时收敛。(在理论上,可以有多组不同的和c值能够使得J取得最小值,但这种现象实际上很少见)。
由于畸变函数J是非凸函数,意味着我们不能保证取得的最小值是全局最小值,也就是说k-means对质心初始位置的选取比较感冒,但一般情况下k-means达到的局部最优已经满足需求。但如果你怕陷入局部最优,那么可以选取不同的初始值跑多遍k-means,然后取其中最小的J对应的和c输出。
下面主要介绍EM的整个推导过程。
回顾优化理论中的一些概念。设f是定义域为实数的函数,如果对于所有的实数x,,那么f是凸函数。当x是向量时,如果其hessian矩阵H是半正定的(),那么f是凸函数。如果或者,那么称f是严格凸函数。
Jensen不等式表述如下:
如果f是凸函数,X是随机变量,那么
特别地,如果f是严格凸函数,那么当且仅当,也就是说X是常量。
这里我们将简写为。
如果用图表示会很清晰:
图中,实线f是凸函数,X是随机变量,有0.5的概率是a,有0.5的概率是b。(就像掷硬币一样)。X的期望值就是a和b的中值了,图中可以看到成立。
当f是(严格)凹函数当且仅当-f是(严格)凸函数。
Jensen不等式应用于凹函数时,不等号方向反向,也就是。
给定的训练样本是,样例间独立,我们想找到每个样例隐含的类别z,能使得p(x,z)最大。p(x,z)的最大似然估计如下:
第一步是对极大似然取对数,第二步是对每个样例的每个可能类别z求联合分布概率和。但是直接求一般比较困难,因为有隐藏变量z存在,但是一般确定了z后,求解就容易了。
EM是一种解决存在隐含变量优化问题的有效方法。竟然不能直接最大化,我们可以不断地建立的下界(E步),然后优化下界(M步)。这句话比较抽象,看下面的。
对于每一个样例i,让表示该样例隐含变量z的某种分布,满足的条件是。(如果z是连续性的,那么是概率密度函数,需要将求和符号换做积分符号)。比如要将班上学生聚类,假设隐藏变量z是身高,那么就是连续的高斯分布。如果按照隐藏变量是男女,那么就是伯努利分布了。
可以由前面阐述的内容得到下面的公式:
(1)到(2)比较直接,就是分子分母同乘以一个相等的函数。(2)到(3)利用了Jensen不等式,考虑到是凹函数(二阶导数小于0),而且
就是的期望(回想期望公式中的Lazy Statistician规则)
设Y是随机变量X的函数(g是连续函数),那么 (1) X是离散型随机变量,它的分布律为,k=1,2,…。若绝对收敛,则有 |
对应于上述问题,Y是,X是,是,g是到的映射。这样解释了式子(2)中的期望,再根据凹函数时的Jensen不等式:
可以得到(3)。
这个过程可以看作是对求了下界。对于的选择,有多种可能,那种更好的?假设已经给定,那么的值就决定于和了。我们可以通过调整这两个概率使下界不断上升,以逼近的真实值,那么什么时候算是调整好了呢?当不等式变成等式时,说明我们调整后的概率能够等价于了。按照这个思路,我们要找到等式成立的条件。根据Jensen不等式,要想让等式成立,需要让随机变量变成常数值,这里得到:
c为常数,不依赖于。对此式子做进一步推导,我们知道,那么也就有,(多个等式分子分母相加不变,这个认为每个样例的两个概率比值都是c),那么有下式:
至此,我们推出了在固定其他参数后,的计算公式就是后验概率,解决了如何选择的问题。这一步就是E步,建立的下界。接下来的M步,就是在给定后,调整,去极大化的下界(在固定后,下界还可以调整的更大)。那么一般的EM算法的步骤如下:
循环重复直到收敛 { (E步)对于每一个i,计算
(M步)计算 |
那么究竟怎么确保EM收敛?假定和是EM第t次和t+1次迭代后的结果。如果我们证明了,也就是说极大似然估计单调增加,那么最终我们会到达最大似然估计的最大值。下面来证明,选定后,我们得到E步
这一步保证了在给定时,Jensen不等式中的等式成立,也就是
然后进行M步,固定,并将视作变量,对上面的求导后,得到,这样经过一些推导会有以下式子成立:
解释第(4)步,得到时,只是最大化,也就是的下界,而没有使等式成立,等式成立只有是在固定,并按E步得到时才能成立。
况且根据我们前面得到的下式,对于所有的和都成立
第(5)步利用了M步的定义,M步就是将调整到,使得下界最大化。因此(5)成立,(6)是之前的等式结果。
这样就证明了会单调增加。一种收敛方法是不再变化,还有一种就是变化幅度很小。
再次解释一下(4)、(5)、(6)。首先(4)对所有的参数都满足,而其等式成立条件只是在固定,并调整好Q时成立,而第(4)步只是固定Q,调整,不能保证等式一定成立。(4)到(5)就是M步的定义,(5)到(6)是前面E步所保证等式成立条件。也就是说E步会将下界拉到与一个特定值(这里)一样的高度,而此时发现下界仍然可以上升,因此经过M步后,下界又被拉升,但达不到与另外一个特定值一样的高度,之后E步又将下界拉到与这个特定值一样的高度,重复下去,直到最大值。
如果我们定义
从前面的推导中我们知道,EM可以看作是J的坐标上升法,E步固定,优化,M步固定优化。
下面累述一下K-means与EM的关系,首先回到初始问题,我们目的是将样本分成k个类,其实说白了就是求每个样例x的隐含类别y,然后利用隐含类别将x归类。由于我们事先不知道类别y,那么我们首先可以对每个样例假定一个y吧,但是怎么知道假定的对不对呢?怎么评价假定的好不好呢?我们使用样本的极大似然估计来度量,这里是就是x和y的联合分布P(x,y)了。如果找到的y能够使P(x,y)最大,那么我们找到的y就是样例x的最佳类别了,x顺手就聚类了。但是我们第一次指定的y不一定会让P(x,y)最大,而且P(x,y)还依赖于其他未知参数,当然在给定y的情况下,我们可以调整其他参数让P(x,y)最大。但是调整完参数后,我们发现有更好的y可以指定,那么我们重新指定y,然后再计算P(x,y)最大时的参数,反复迭代直至没有更好的y可以指定。
对应于K-means来说就是我们一开始不知道每个样例对应隐含变量也就是最佳类别。最开始可以随便指定一个给它,然后为了让P(x,y)最大(这里是要让J最小),我们求出在给定c情况下,J最小时的(前面提到的其他未知参数),然而此时发现,可以有更好的(质心与样例距离最小的类别)指定给样例,那么得到重新调整,上述过程就开始重复了,直到没有更好的指定。这样从K-means里我们可以看出它其实就是EM的体现,E步是确定隐含类别变量,M步更新其他参数来使J最小化。这里的隐含类别变量指定方法比较特殊,属于硬指定,从k个类别中硬选出一个给样例,而不是对每个类别赋予不同的概率。总体思想还是一个迭代优化过程,有目标函数,也有参数变量,只是多了个隐含变量,确定其他参数估计隐含变量,再确定隐含变量估计其他参数,直至目标函数最优。
我们已经知道了EM的精髓和推导过程,再次审视一下混合高斯模型。之前提到的混合高斯模型的参数和计算公式都是根据很多假定得出的,有些没有说明来由。为了简单,这里在M步只给出和的推导方法。
E步很简单,按照一般EM公式得到:
简单解释就是每个样例i的隐含类别为j的概率可以通过后验概率计算得到。
在M步中,我们需要在固定后最大化最大似然估计,也就是
这是将的k种情况展开后的样子,未知参数和。
固定和,对求导得
等于0时,得到
这就是我们之前模型中的的更新公式。
然后推导的更新公式。看之前得到的
在和确定后,分子上面的一串都是常数了,实际上需要优化的公式是:
需要知道的是,还需要满足一定的约束条件就是。
这个优化问题我们很熟悉了,直接构造拉格朗日乘子。
还有一点就是,但这一点会在得到的公式里自动满足。
求导得,
等于0,得到
这样就神奇地得到了。
那么就顺势得到M步中的更新公式:
的推导也类似,不过稍微复杂一些,毕竟是矩阵。结果在之前的混合高斯模型中已经给出。
如果将样本看作观察值,潜在类别看作是隐藏变量,那么聚类问题也就是参数估计问题,只不过聚类问题中参数分为隐含类别变量和其他参数,这犹如在x-y坐标系中找一个曲线的极值,然而曲线函数不能直接求导,因此什么梯度下降方法就不适用了。但固定一个变量后,另外一个可以通过求导得到,因此可以使用坐标上升法,一次固定一个变量,对另外的求极值,最后逐步逼近极值。对应到EM上,E步估计隐含变量,M步估计其他参数,交替将极值推向最大。EM中还有“硬”指定和“软”指定的概念,“软”指定看似更为合理,但计算量要大,“硬”指定在某些场合如K-means中更为实用(要是保持一个样本点到其他所有中心的概率,就会很麻烦)。
另外,EM的收敛性证明方法确实很牛,能够利用log的凹函数性质,还能够想到利用创造下界,拉平函数下界,优化下界的方法来逐步逼近极大值。而且每一步迭代都能保证是单调的。最重要的是证明的数学公式非常精妙,硬是分子分母都乘以z的概率变成期望来套上Jensen不等式,前人都是怎么想到的。
在Mitchell的Machine Learning书中也举了一个EM应用的例子,明白地说就是将班上学生的身高都放在一起,要求聚成两个类。这些身高可以看作是男生身高的高斯分布和女生身高的高斯分布组成。因此变成了如何估计每个样例是男生还是女生,然后在确定男女生情况下,如何估计均值和方差,里面也给出了公式,有兴趣可以参考。
聚类可以用来探查数据,理解数据的结构。维度归约方法用来发现变量间的相关性,从而对变量分组;而聚类方法用于发现实例间的相似性,从而对实例分组。
聚类的一个最直接应用就是分类问题,一旦发现实例间存在基于某种相似性的分组,那么可以对分组进行命名标记,定义属性,比如“客户关系管理”中对客户进行分组。
聚类也可以作为监督式学习的预处理步骤,我们先了解发生了什么,然后学习它意味着什么。
上面的聚类方法通过混合模型拟合数据,或找出最小化重构误差的分组模式,还有一些聚类方法只关注实例间的相似性,对数据没有其他要求。这里的目标是找出分组,使得一个分组汇总的对象比不在一个分组中的对象更相似,这种方法称为层次聚类(hierarchiacl clustering)。
层次聚类的关键是度量相似性,常用的就是欧式距离(向量对应分量差的组合)和绝对值距离(向量间距离)。在单链接聚类中,距离定义为两个分组的所有可能元素之间的最小距离,而全链接聚类中,两个分组间的距离则取所有可能元素之间的最大距离。
Refer: 《机器学习导论》,Ethen Alpaydin(土耳其),机械工业出版社