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

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

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

算法流程

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

(图来自:https://www.cnblogs.com/txx120/p/11487674.html)

K-means(K均值聚类算法)算法笔记_第1张图片

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

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

1.根据设定的两个中心点,将所有的\large x_{i}和所有的\large u_{k}进行距离计算,并根据最近距离分配类别。

2.所有的\large x_{i}分配好类别之后,针对每个类别,对该类别的所有点进行中心点计算,并更新所有中心点\large u_{k}

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

目标函数和分析

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

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

2.每个中心点的坐标\large u_{k}

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

其中,(假设K=2)是上述要求的中心点,而是其中的隐变量(每个\large x_{i}所对应的类别,起初我们是不知道的)。和上述定义的一样,表示的是,第i个样本所对应的类别,如果\large x_{i}属于第k个类别,那么,而其他的都等于0,这里你可以理解为一个one-hot 编码,这样做也是为了方便描述目标函数。进一步进行解释,就是你可以认为有一个“类别矩阵”,\large r的每一行,对应的就是每个样本的类别向量。也即(假设此时类别K=2,且\large x_{i}这时属于第二类)。

通过上面的介绍,我们能够很明显看到EM算法的影子在里面,首先,对于每个类别,就是对应的隐变量(我们并不知道每个类属于哪个类别)。其次是中心点,\large u_{k}就是我们所要求的参数。

(EM算法可以参考https://blog.csdn.net/Willen_/article/details/105004785)

1.通过首先对预设中心点,即假设\large u_{k}中心点已知,来求每个点的类别,所以相当于E步,求取隐变量的期望

2.其次,在确定隐变量后,再对所求中心点\large u_{k}进行更细 ,即M步,即最大似然估计,也就是最小化目标函数。

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

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

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

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

欢迎交流,批评指正。

 

你可能感兴趣的:(机器学习,机器学习,kmeans算法)