K-均值聚类算法

Posted petewell

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K-均值聚类算法相关的知识,希望对你有一定的参考价值。

K-均值(K-Means)算法用于解决无监督学习中聚类问题,其输入为聚类组数量$K$,以及数据集$x^(1),x^(2),dots,x^(m)$,其中$x^(i)inmathbbR^n$(不再添加$x^(i)_0=1$这一项)。算法步骤为:

技术图片

首先需要随机选取$K$个聚类中心(Cluster Centroid)$mu_1,mu_2,dots,mu_Kinmathbb R^n$。

  • 先计算每个样本与各个聚类中心的距离$|x^(i)-mu_k|$,令$c^(i)$为距离样本$x^(i)$最近聚类中心的索引$k$,即$c^(i)=minlimits_k|x^(i)-mu_k|$。
  • 然后对每个聚类中心$mu_k$,计算上一步中关联到该聚类的样本的均值(即所有$c^(i)=k$的样本$x^(i)$的均值),将该均值作为$mu_k$新的值,即找到新的聚类中心。

重复上面的步骤直至算法收敛,即聚类分组情况不再改变。

在算法的迭代过程中,可能遇到某个聚类中心没有关联到任何样本的情况(即没有样本与该聚类中心的距离最近),我们的解决办法通常是随机指定一个新的聚类中心替换掉它,或者直接淘汰该聚类组。

由上面的过程得知K-均值算法的代价函数为:

优化目标是:

K-均值算法的代价函数又称为畸变函数(Distortion Function),在迭代过程中,代价函数的值不可能增大,应该是一直减小的。

关于$K$个聚类中心的初始化,我们通常在数据集中选择$K$个不同的样本作为聚类中心的初始值。另外需要注意的是,选择不同的聚类中心初始值,可能使算法收敛于不同的结果,可能收敛于局部最优解而非全局最优解,如下图所示:

技术图片

右上角的结果为最优解,但如果聚类中心的初始值不同,可能收敛于下面两张图片表示的非最优解。

为避免这种情况,我们往往会多次运行K-均值算法,每次随机选择聚类中心的初始值,然后找到使代价函数值最小的聚类分组情况,作为我们最终的聚类分组结果。不过这种方法往往在聚类组数量较小时使用(通常为$Klt10$),如果$K$很大,即使算法没有收敛于全局最优解,往往也能输出理想的聚类分组结果,使用该方法的收效可能不大。

另外一个问题是如何选择聚类组数量$K$。显然,在聚类问题中,聚类组数目$K$通常应该小于样本数$m$。有时我们可能会使用“肘部法则”帮助我们选择$K$,其原理是在不同的$K$值下,计算算法收敛后的代价函数值,我们可能会得到如下图所示的“胳膊肘”曲线:

技术图片

随着$K$的增大,$J$的值一定会减小,除非我们的算法收敛于一个糟糕的局部最优解。我们根据上面的函数曲线,选择“肘关节”处$K$的值。但在实际情况中,函数曲线通常不会呈现出“胳膊肘”的形状(曲线较为平滑,没有斜率急剧变小的点),我们更普遍的做法依然是根据具体的问题和需求指定$K$的值。

原文:大专栏  K-均值聚类算法


以上是关于K-均值聚类算法的主要内容,如果未能解决你的问题,请参考以下文章

数字数据集上的K-均值聚类

K均值聚类算法

三种聚类方法:层次、K均值、密度

k-均值聚类

K-均值算法(K-means algorithm)

「聚类分析」16聚类分析之KMeans算法与K中心点算法