聚类
以距离为特征,通过自下而上的迭代(距离比较),把一群样本分成k个类别的过程。最终的聚类中心点离类别里所有样本的距离之和必须是最小的。
K-Means聚类
运作原理
经典的K-Means聚类方法,是这样运作的:
1、在样本中随机选择K个点,作为每个类别的初始中心点。再计算每一个样本点离这K个中心点的距离,选出其中距离最近的中心点,这个样本就归属于该中心点的类别(也叫簇号或堆类别)。
2、舍弃原来的初始中心点,在划分好的K个类别里分别计算出新的中心点,使得这些中心点距离他类别里的所有样本的距离之和最小;
3、判断新中心点(也叫质心)与旧中心点是否一样。如果一样,代表这个中心稳定了,没必要继续迭代,如不一样则重新计算所有样本离这K个新的中心点的距离并进行比较,选出其中最近的距离并归到这个新的中心点的类别里,迭代这个步奏,直到一样则完成(即收敛)。
想看详细的迭代过程可以参考这里:https://zhuanlan.zhihu.com/p/24207557
缺点
k-means的聚类规则很容易陷入局部最小,陷入局部最小说简单的就是随机初始的质心分布的不是太好,最后迭代终止后,两个质心有可能在同一堆数据上,而另外一个质心成了另外两堆离的近样本的唯一质心。
说的复杂一些就是马尔科夫岁机场中配置的代价函数不是好的目标函数。为了解决这个问题,有了二分K均值聚类算法。
二分k均值算法
运作原理
首先把所有样本作为一个簇,然后二分该簇,接着选择其中一个簇进行继续进行二分。
选择哪一个簇二分的原则:是能否使得误差平方和(SSE: Sum of Squared Error)尽可能的小。也就是说该算法有了个好的目标函数,SSE的计算其实就是距离和。
该算法比传统的kmeans**效果好些,速度也快**些。
缺点
二者共同的缺点就是必须事先确定K的值,现实中的数据我们有可能不知道K的值,如何确定K的值也是学术界一直在研究的问题。
现在常用的解决办法是用层次聚类(Hierarchical Clustering),或者借鉴下LDA中的话题聚类分析。
最后多说一句:谱聚类也是图像中的一个大成员,用途很广,典型的就是图像分割。