聚类的思想
所谓聚类算法是指将一堆没有标签的数据自动划分成几类的方法,属于无监督学习方法,这个方法要保证同一类的数据有相似的特征,如下图所示:
根据样本之间的距离或者说是相似性(亲疏性),把越相似、差异越小的样本聚成一类(簇),最后形成多个簇,使同一个簇内部的样本相似度高,不同簇之间差异性高。
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