简介:
给出n个观测值[
x1,x2,...,xn
],k-means聚类算法目标是把这n个观测值分成k(k<=n)个集合S(
S=[S1,S2,...,Sn]
),使得每个集合的平方和(within-cluster sum of squares,WCSS)最小。
步骤:
- 在数据中随机选取k个点,作为中心点 u
- 根据k个点画欧洛诺伊图(Voronoi Diagram),对点进行分类。简单理解就是算每个点到
u 的距离,到哪个中心点距离近,就归为这一类。 - 将归类之后的数据的每个类别从新计算中心值,重复以上步骤,直到每个类中的点到中心点的距离最小。
缺点:
- 由于WCSS的前提,k-means假设分类的结果是凸面型和isotropic,而对细长型和不规则的形状分类效果不好。
- 在高维空间中,欧氏距离(Euclidean distances)趋向于膨胀(维度灾难)。所以在做k-means之前先做降维处理,如PCA可以减轻维度灾难和加速计算。
- k-means可能达到局部最小,这种情况受初始值的影响。一个解决办法是使用k-means++算法,这个算法会将初始值相隔一定距离的点上。这样就可能比随机选取点获得更好的效果。在scikit-learn中使用init=’k-means++’
参考文献
https://en.wikipedia.org/wiki/K-means_clustering
http://scikit-learn.org/stable/modules/clustering.html#spectral-clustering