K-means聚类详解

聚类的思想

所谓聚类算法是指将一堆没有标签的数据自动划分成几类的方法,属于无监督学习方法,这个方法要保证同一类的数据有相似的特征,如下图所示:

在这里插入图片描述

根据样本之间的距离或者说是相似性(亲疏性),把越相似、差异越小的样本聚成一类(簇),最后形成多个簇,使同一个簇内部的样本相似度高,不同簇之间差异性高。

K-means方法是一种非监督学习的算法,它解决的是聚类问题

算法简介

K-means方法是聚类中的经典算法,数据挖掘十大经典算法之一;算法接受参数k,然后将事先输入的n个数据对象划分为k个聚类以便使得所获得的聚类满足聚类中的对象相似度较高,而不同聚类中的对象相似度较小。

K-Means算法是聚类中的基础算法,也是无监督学习里的一个重要方法。其基本原理是随机确定k(人为指定)个初始点作为簇质心,然后将数据样本中的每一个点与每个簇质心计算距离,依据此距离对样本进行分配;之后将每次簇的质心更改为该簇内所有点的平均值

普通的K-Means算法因为初始簇质心的随机性,很可能会收敛到局部最优。为解决这一情况,可以随机初始化若干次,取最好结果,但这种方法在初始给定k值较大的情况下,可能只会得到比前一次好一点的结果(因为k值越大,簇质心越多,则随机性带来的不确定性越小

算法思想

以空间中k个点为中心进行聚类,对最靠近他们的对象归类,通过迭代的方法,逐次更新各聚类中心的值,直到得到最好的聚类结果

相关概念

K值:要得到的簇的个数

质心:每个簇的均值向量,即向量各维取平均即可

距离量度:常用欧几里得距离和余弦相似度(先标准化)

在这里插入图片描述

算法描述

K-means是一个反复迭代的过程,算法分为四个步骤:

  • 1.随机选取数据空间中的K个对象作为初始中心,每个对象代表一个聚类中心
  • 2.对于样本中的数据对象,根据它们与这些聚类中心的欧氏距离,按距离最近的准则将它们分到距离它们最近的聚类中心(最相似)所对应的类
  • 3.更新聚类中心:将每个类别中所有对象所对应的均值作为该类别的聚类中心,计算目标函数的值
  • 4.断聚类中心和目标函数的值是否发生改变,若不变,则输出结果,若改变,则返回2)

手算举例

在这里插入图片描述

1.选择初始中心,即质心

我们就选P1和P2

2.计算其他点与初始中心的距离

P3到P1的距离从图上也能看出来(勾股定理),是√10 = 3.16;

P3到P2的距离√((3-1)2+(1-2)2 = √5 = 2.24,所以P3离P2更近,P3就跟P2混。

同理,P4、P5、P6也这么算,如下

在这里插入图片描述

第一次分组后的结果

组A:P1

组B:P2、P3、P4、P5、P6

3.再计算新的中心

A组质心还是P1=(0,0)

B组新的质心坐标为:P哥=((1+3+8+9+10)/5,(2+1+8+10+7)/5)=(6.2,5.6)

在这里插入图片描述

第二次分组结果

组A:P1、P2、P3

组B:P4、P5、P6

4.再次计算质心

P哥1=(1.33,1)

P哥2=(9,8.33)

在这里插入图片描述

第三次分组结果

组A:P1、P2、P3

组B:P4、P5、P6

可以发现,第三次分组结果和第二次分组结果一致,说明已经收敛,聚类结束。

常见的问题小结

1.K值怎么定?我怎么知道应该几类?
  • 这个真的没有确定的做法,分几类主要取决于个人的经验与感觉,通常的做法是多尝试几个K值,看分成几类的结果更好解释,更符合分析目的等。
  • 肘部法则
2.初始的K个质心怎么选?

最常用的方法是随机选,初始质心的选取对最终聚类结果有影响,因此算法一定要多执行几次,哪个结果更合理(reasonable),就用哪个结果

3.K-Means会不会陷入一直选质心的过程,永远停不下来?

不会,有数学证明K-Means一定会收敛,大致思路是利用SSE的概念(也就是误差平方和),即每个点到自身所归属质心的距离的平方和,这个平方和是一个函数,然后能够证明这个函数是可以最终收敛的函数

4.关于离群值

离群值就是远离整体的,非常异常、非常特殊的数据点,在聚类之前应该将这些“极大”“极小”之类的离群数据都去掉,否则会对于聚类的结果有影响。但是,离群值往往自身就很有分析的价值,可以把离群值单独作为一类来分析

5.单位要一致

比如X的单位是米,Y也是米,那么距离算出来的单位还是米,是有意义的。但是如果X是米,Y是吨,用距离公式计算就会出现“米的平方”加上“吨的平方”再开平方,最后算出的东西没有数学意义,这就有问题了

6.标准化

如果数据中X整体都比较小,比如都是1到10之间的数,Y很大,比如都是1000以上的数,那么,在计算距离的时候Y起到的作用就比X大很多,X对于距离的影响几乎可以忽略,这也有问题。因此,如果K-Means聚类中选择欧几里德距离计算距离,数据集又出现了上面所述的情况,就一定要进行数据的标准化(normalization),即将数据按比例缩放,使之落入一个小的特定区间

停止收敛条件

先随机选取K个对象作为初始的聚类中心。然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。一旦全部对象都被分配了,每个聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是以下任何一个:

  • 1.没有(或最小数目)对象被重新分配给不同的聚类,即样本所属类别没有发生改变
  • 2.没有(或最小数目)聚类中心再发生变化。
  • 3.误差平方和局部最小

K均值算法优缺点

优点

  • 原理简单(算法简单,容易实现)
  • 速度快
    • 它的复杂度大约是O(nkt),其中n是所有对象的数目,k是簇的数目,t是迭代的次数。通常k<<n。这个算法通常局部收敛。
  • 对大数据集有比较好的伸缩性
    • 对处理大数据集,该算法是相对可伸缩的和高效率的。
    • 算法尝试找出使平方误差函数值最小的k个划分。当簇是密集的、球状或团状的,且簇与簇之间区别明显时,聚类效果较好。

缺点

  • 需要指定聚类 数量K,K值比较难以选取

  • 对异常值敏感

    • 对于”噪声”和孤立点数据敏感,少量的该类数据能够对平均值产生极大影响
    • 不适合于发现非凸面形状的簇,或者大小差别很大的簇
  • 对初始值敏感

    • 对初值的簇心值敏感,对于不同的初始值,可能会导致不同的聚类结果
    • 对数据类型要求较高,适合数值型数据
    • 可能收敛到局部最小值,在大规模数据上收敛较慢

应用例子

https://blog.csdn.net/qq_42363032/article/details/106505008

代码实现

https://blog.csdn.net/qq_42363032/article/details/106505046

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WGS.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值