有时候需要琢磨算法为什么奏效?背后到底有什么原因?什么时候算法会失效?这些问题都搞明白了,才算真正理解了算法。这里我想探讨一下K均值和EM算法背后深层的东西。
如果把来自不同样本类型的两组数据样本混在一起,比如男人身高和女人身高调查数据,能不能把混在一起的数据分开?K均值聚类算法迈出了非常精彩的第一步,基本思路是寻找两个类别的聚点中心。
K均值聚类的特点
首先随机给出两个聚点中心的位置(本例中,K=2),然后依据样本到这两个中心的距离把样本分成两类,然后重新计算两类的聚点中心。然后重复迭代上述过程,直到据点中心收敛。
这个迭代过程会使得每次重新计算的新聚点位置都会向真正的聚点逼近一些,最后收敛于真正的聚点。神奇的是,这个算法几乎总能成功。
K均值聚类的问题
如果女人身高聚点中心值为160cm,男人为180cm,K均值会以其均值170cm为分界线,把身高数据分成两类,数值较小的为女人身高集合F,数值较大另一部分为男人身高集合M。
这个办法寻找聚点是可以接受的,但是如此粗暴对数据分类很难令人信服,毕竟男、女身高数据有相当一部分是重叠的,强行分成两个不相交的集合F与M,对计算身高的均值、方差等统计数据都带来明显的偏差。
EM最大期望算法
EM算法最突出的一点是利用了模糊数学的思想,不再强行把男女身高数据分成泾渭分明的两个集合。计算刚开始,我们随机给出两类数据概率分布参数,任意一个数据 x ,假设在两个分布中的分布密度分别为 p(x) 和 q(x) ,那么我们把这个数据对集合F和M的隶属度按照概率密度的比例分配为:
F(x)=p(x)p(x)+q(x),M(x)=q(x)p(x)+q(x)
从模糊集合的观点看,K均值算法类集对应经典集合,EM算法对应模糊集合。实际上不难证明,K均值算法是EM算法退化到经典集合论的特例,EM算法是K均值算法向模糊集合的推广。
随机向两类数据概率分布参数赋以初值后,K均值算法可以得到一个近似的分类,同样,EM算法也可以得到两类数据初始的模糊集。虽然这两个集合距正确结果还有一定的差距,但是,和K均值聚类算法一样,随着迭代的逐步进行,两个集合对应的隶属函数,或者概率分布函数,距真正的模型越来越逼近。
理想情况下可以证明,EM算法最终能得到零偏差的逼近结果。
K均值和EM算法背后的本质是什么?
K均值算法目的是寻找聚点,EM算法的目的是估计样本的概率分布等统计参数或数据,他们面对的数据都有一个共同特点,数据存在一个或多个聚集中心点,在这个点附近,样本数量明显较多。
当K=1时,我们将看到样本数据呈现类似正态分布的情况,即中间数据多,两边较少。这个时候,随机选择一个中心点选择附近的数据作为初始样本,这个样本的均值将比初始位置更接近总体样本的均值点。也就是说,在类似正态分布这种数据分布中间多两边少的情形下,用任何连续区域内的样本子集估计总体均值,都有自动趋近分布中心峰值位置的趋势。换句话讲,任何连续局部空间内的样本,其均值位置(或聚点位置)都有自动爬坡的趋高倾向,这是K均值和EM算法凑效的原因。均方差是数据偏差的均值,因此,EM算法对于估计均方差之类的参数也是奏效的。
如果数据分散,没有明显的聚点,或者数据没有呈现类似正态分布的单峰分布,K均值和EM算法将变得毫无用途。