聚类(cluster),其实就是在没有训练集的情况下对样本进行分类。说白了,其实就是按照某种规则对样本进行直接的分类。但是由于不存在训练集,所以聚类的算法一般不会按照监督学习算法中——先生成一个模型,再用这个模型分类数据,这样的思路来设计。
本文通过介绍几种常见的算法,来体现聚类算法的一般思路:
K-Means
K-Means算法的设计思路其实是EM算法的一种体现,具体步骤如下:
1.先随机指定k个点,通过计算每个样本分别与这些点的“距离”(欧氏距离等),把这些样本划分到这k个点的范围之内(离哪个点近就属于哪个点)。通过这一步,已经把样本进行了第一次的聚类,但是由于这k个点是随机取的,所以聚类的效果肯定不好。
2.第1步中,我们已经把样本分成了k类。然后,我们再去分别计算每个类别中所有样本点的中心点(比如,属于第a类的所有样本的中心点就是这些样本坐标和的均值)。这些中心点作为新的k个点,再重复步骤1进行迭代,直到收敛。
对比EM算法,K-Means先假设了k个中心点,然后用假设的点聚类(E步),再根据聚类结果更新这k个中心点(M步)。只不过,K-Means中更新中心点值时,用的是硬指定的方法(根据E步的结果,直接对样本点分类,再用分类结果计算)。而一般的EM算法中,采用的是软指定的方式——根据E步的结果,计算出隐藏变量取值的概率。
K-Means算法的有如下缺点:
1.对孤立点敏感。
2.可能取到局部最优解。
3.很多时候"距离"难以量化,比如对不同的动物进行聚类,如何计算牧羊犬和波斯猫之间的距离呢?
为了解决3中的问题,有人引入了相异度矩阵,矩阵中的值标明了两个样本之间的差异度,然后在求中心点时采用中位数(不是均值)的方法来求解。但是,由于中位数需要遍历,增加了计算复杂度。
高斯混合模型(GMM)
GMM可以说是一个标准的EM算法,对于它的描述可以参考上一篇博客。
谱聚类(spectral clustering)