K-means(K均值聚类算法)算法笔记

K-means 算法,是比较简单的无监督的算法,通过设定好初始的类别k,然后不断循环迭代,将给定的数据自动分为K个类别。事实上,大家都知道K-means是怎么算的,但实际上,它是GMM(高斯混合模型)的一个特例,其而GMM是基于EM算法得来的,所以本文,将对K-means 算法的算法思想进行分析。

算法流程

K-means 算法的算法流程非常简单,可以从下图进行讲解


K-means(K均值聚类算法)算法笔记_聚类算法

将上图的所有点表示成

K-means(K均值聚类算法)算法笔记_聚类算法_02

,假设我们将类别k设为2, 那么在给定这些点的同时,我们要求出每个点的类别,以及最终的中心点

K-means(K均值聚类算法)算法笔记_kmeans算法_03


首先,随机生成两个中心点,然后以一下流程进行:

1.根据设定的两个中心点,将所有的

K-means(K均值聚类算法)算法笔记_机器学习_04

和所有的

K-means(K均值聚类算法)算法笔记_机器学习_05

进行距离计算,并根据最近距离分配类别。2.所有的

K-means(K均值聚类算法)算法笔记_机器学习_04

分配好类别之后,针对每个类别,对该类别的所有点进行中心点计算,并更新所有中心点

K-means(K均值聚类算法)算法笔记_机器学习_05


重复以上过程,直至所有中心点,不在变更。

目标函数和分析

通过以上过程,其实可以看到,K-means 其实在求两个东西:

1.每个点到底属于哪个类别

K-means(K均值聚类算法)算法笔记_距离计算_08

2.每个中心点的坐标

K-means(K均值聚类算法)算法笔记_机器学习_05

根据上述,我们可以写出K-means 的目标函数:

K-means(K均值聚类算法)算法笔记_距离计算_10

其中

K-means(K均值聚类算法)算法笔记_kmeans算法_03

,(假设K=2)是上述要求的中心点,而

K-means(K均值聚类算法)算法笔记_最大似然估计_12

是其中的隐变量(每个

K-means(K均值聚类算法)算法笔记_机器学习_04

所对应的类别,起初我们是不知道的)。和上述定义的一样,

K-means(K均值聚类算法)算法笔记_最大似然估计_12

表示的是,第i个样本所对应的类别,如果

K-means(K均值聚类算法)算法笔记_机器学习_04

属于第k个类别,那么

,而其他的都等于0,这里你可以理解为一个one-hot 编码,这样做也是为了方便描述目标函数。进一步进行解释,就是你可以认为有一个“类别矩阵”

K-means(K均值聚类算法)算法笔记_聚类算法_16


K-means(K均值聚类算法)算法笔记_最大似然估计_17

的每一行,对应的就是每个样本的类别向量。也即

(假设此时类别K=2,且

K-means(K均值聚类算法)算法笔记_机器学习_04

这时属于第二类)。通过上面的介绍,我们能够很明显看到EM算法的影子在里面,首先,对于每个类别,

K-means(K均值聚类算法)算法笔记_最大似然估计_12

就是对应的隐变量(我们并不知道每个类属于哪个类别)。其次是中心点,

K-means(K均值聚类算法)算法笔记_机器学习_05

就是我们所要求的参数。


1.通过首先对预设中心点,即假设

K-means(K均值聚类算法)算法笔记_机器学习_05

中心点已知,来求每个点的类别,所以相当于E步,求取隐变量

K-means(K均值聚类算法)算法笔记_最大似然估计_12

的期望2.其次,在确定隐变量

K-means(K均值聚类算法)算法笔记_最大似然估计_12

后,再对所求中心点

K-means(K均值聚类算法)算法笔记_机器学习_05

进行更细 ,即M步,即最大似然估计,也就是最小化目标函数。

通过如此往复的计算,最后得到结果。

为什么说K-means 是GMM的特例呢?

GMM是严格意义上的隐变量模型,它从EM进行推导是能直接推的,但是K-means算法不行,没有严格意义上的证明。

K-means 定义了每个点,有严格意义的类别。而GMM是根据对每个点进行一些概率的估计,即可能某个点,有0.3的概率属于第一个高斯模型,有0.4的概率属于第二个高斯模型,有0.3的概率属于第三个高斯模型,所以其对于每个点的分类,比较“soft”。

欢迎交流,批评指正。