K-Means集群算法

来源:互联网 发布:网上的淘宝刷手可靠吗 编辑:程序博客网 时间:2024/05/19 00:37
无论什么数据集,理论上都可以形成一定数量的集群。

例如,党我们拿到学生成绩表时,我们可以把成绩分数划分为优(90分左右)、良(80分左右)、中(70分左右)、差(60分及以下)。

再例如对于工人工资表,我们也可以把工人按照工资划分成一定数量的集群,每个集群一定是围绕某个工资水平的。

甚至我们可以抓取所有微信公众文章,将文章标题映射为向量表示(假设没有那些标题党文章的话),我们就可以对这些文章按标题进行集群分类。

我们还可以使用集群算法来对图像进行重新分配颜色,例如有一张灰度图,图像是由像素点构成,我们希望只用5种颜色来对像素点进行重构,将原始像素点划分成5个集群,然后对5个集群分别涂上5种不同的颜色,那么我们可以是用5-Means方法来做这件事,效果如下图所示(左边为原始图像,右边为使用5-Means重新染色的图像):


值得注意的是,集群算法既然是一种无监督学习,那么就没有绝对正确的集群算法,只能是一步一步使得集群划分更加优化。

K-Means集群算法(以下简称K-Means)是一种无监督机器学习算法,顾名思义,它使用K个集群对数据集进行分类,K的大小通常需要预先设定好,然后就可以靠距离中心点(Means)的远近来实现分类。

假设现有一个点集S,需要划分成S_1,S_2,...,S_K,那么使用K-Means的流程如下:
  (1)设定好K的大小,随机选取K个点作为初始中心点;
  (2)计算每个点到这K个中心点的距离大小,选取最近的中心点,划分到以该中心点为中心的集群中去;
  (3)重新计算K个新集群的中心点;
  (4)如果中心点保持不变,则结束K-Means过程。否则,重复进行(2)、(3)步;

K-Means的算法过程的确很简单,前文我们说过K要预先设定,但是实际中可能K需要不停去trials-and-errors才能确定最优的K,那么对于一个特定问题,如何找到最优的K呢?

通常,提到最优这个词必须得有个标准,这里也是一样,确定最优K的标准就是判断集群中每个点到集群中心的距离平方,距离平方越小,说明我们的集群划分越密集,即更符合集群的固有属性。

因此,可以设定K从1依次增大,然后判断误差曲线的弯曲程度,我们可以认为误差曲线的拐点处就是K的最优值。K越小,集群划分较少,点不太集中;相反K越大,及集群划分较多,给人一种过拟合的感觉(极端情况是100个点划分成100个集群,听起来似乎已经没有集群的概念了)。




0 0
原创粉丝点击