K-means(K均值聚类算法)算法笔记
K-means 算法,是比较简单的无监督的算法,通过设定好初始的类别k,然后不断循环迭代,将给定的数据自动分为K个类别。事实上,大家都知道K-means是怎么算的,但实际上,它是GMM(高斯混合模型)的一个特例,其而GMM是基于EM算法得来的,所以本文,将对K-means 算法的算法思想进行分析。
算法流程
K-means 算法的算法流程非常简单,可以从下图进行讲解
将上图的所有点表示成
,假设我们将类别k设为2, 那么在给定这些点的同时,我们要求出每个点的类别,以及最终的中心点
。
首先,随机生成两个中心点,然后以一下流程进行:
1.根据设定的两个中心点,将所有的
和所有的
进行距离计算,并根据最近距离分配类别。2.所有的
分配好类别之后,针对每个类别,对该类别的所有点进行中心点计算,并更新所有中心点
。
重复以上过程,直至所有中心点,不在变更。
目标函数和分析
通过以上过程,其实可以看到,K-means 其实在求两个东西:
1.每个点到底属于哪个类别
2.每个中心点的坐标
根据上述,我们可以写出K-means 的目标函数:
其中
,(假设K=2)是上述要求的中心点,而
是其中的隐变量(每个
所对应的类别,起初我们是不知道的)。和上述定义的一样,
表示的是,第i个样本所对应的类别,如果
属于第k个类别,那么
,而其他的都等于0,这里你可以理解为一个one-hot 编码,这样做也是为了方便描述目标函数。进一步进行解释,就是你可以认为有一个“类别矩阵”
,
的每一行,对应的就是每个样本的类别向量。也即
(假设此时类别K=2,且
这时属于第二类)。通过上面的介绍,我们能够很明显看到EM算法的影子在里面,首先,对于每个类别,
就是对应的隐变量(我们并不知道每个类属于哪个类别)。其次是中心点,
就是我们所要求的参数。
1.通过首先对预设中心点,即假设
中心点已知,来求每个点的类别,所以相当于E步,求取隐变量
的期望2.其次,在确定隐变量
后,再对所求中心点
进行更细 ,即M步,即最大似然估计,也就是最小化目标函数。
通过如此往复的计算,最后得到结果。
为什么说K-means 是GMM的特例呢?
GMM是严格意义上的隐变量模型,它从EM进行推导是能直接推的,但是K-means算法不行,没有严格意义上的证明。
K-means 定义了每个点,有严格意义的类别。而GMM是根据对每个点进行一些概率的估计,即可能某个点,有0.3的概率属于第一个高斯模型,有0.4的概率属于第二个高斯模型,有0.3的概率属于第三个高斯模型,所以其对于每个点的分类,比较“soft”。
欢迎交流,批评指正。