聚类算法之k-means

1. 算法描述

k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法。其步骤是,预将数据分为K组,则随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。

算法流程:
1.选择聚类的个数k。
2.任意产生k个聚类,然后确定聚类中心,或者直接生成k个中心。
3.对每个点确定其聚类中心点。
4.再计算其聚类新中心。
5.重复以上步骤直到满足收敛要求。(通常就是确定的中心点不再改变)

2. 算法优缺点

2.1 优点

  1. 算法简单、快速
  2. 对大量数据进行处理时,算法时相对可伸缩和高效的
  3. 只需要调整参数k(簇中心个数)

2.2 缺点

  1. k的个数确定会影响聚类的效果 (用肘部法进行优化)
  2. 对初始值敏感,不同的初始值可能会得到不同的聚类结果 (使用k-means++算法进行优化)
  3. 不适合发现非凸面形的簇,或者密度差距很大的簇(适合使用DBSCAN算法)
  4. 当数据量较大时计算效率低(使用Mini-Batch K-Means算法进行优化)
  5. 对离群点,噪声敏感(中心点易偏移)。
  6. 很难发现大小差别很大的簇及进行增量计算。
  7. 结果不一定是全局最优,只能保证局部最优(与K的个数及初值选取有关)。

3. 算法效果衡量标准

3.1 误差平方和SSE(The sum of squares due to error)

在这里插入图片描述SSE(左图)<SSE(右图)

3.2 K值确定——“肘”方法(Elbow method)

  1. 对于n个点的数据集,迭代计算k from 1 to n,每次聚类完成后计算每个点到其所属的簇中心
    的距离的平方和;
  2. 平方和是会逐渐变小的,直到k==n时平方和为0,因为每个点都是它所在的簇中心本身。
  3. 在这个平方和变化过程中,会出现一个拐点也即“肘”点,下降率突然变缓时即认为是最佳的k值。
    在这里插入图片描述

3.3 轮廓系数(Silhouette Coefficient)

  1. 结合了聚类的凝聚度(Cohesion)和分离度(Separation),用于评估聚类的效果。
    在这里插入图片描述
  2. 每次聚类后,每个样本都会得到一个轮廓系数,当它为1时,说明这个点与周围簇距离较远,结果非常好;
  3. 当它为0,说明这个点可能处在两个簇的边界上,当值为负时,暗含该点可能被误分了。
  4. 求出所有样本的轮廓系数后再求平均值就得到了平均轮廓系数
  5. 平均轮廓系数的取值范围为[-1,1] ,系数越大,聚类效果越好
  6. 在轮廓系数大小相近时,根据簇的轮廓大小来衡量聚类效果,所有簇轮廓大小接近,聚类效果更好。
    轮廓大小差距大
    轮廓大小差距小

3.4 CH系数(Calinski-Harabasz Index)

  1. 类别内部数据的协方差越小越好,类别之间的协方差越大越好,这样的Calinski-Harabasz分数s会高,分数s高则聚类效果越好。
    在这里插入图片描述
    在这里插入图片描述

4.算法优化

4.1 Canopy算法配合初始聚类

Canopy算法的作用在于它是通过事先粗聚类的方式,为K-means算法确定初始聚类中心个数和聚类中心点。
在这里插入图片描述在这里插入图片描述
优点

  1. K-means对噪声抗干扰较弱,通过Canopy对比,将较小的NumPoint的Cluster直接去掉有利于抗干扰。
  2. Canopy选择出来的每个Canopy的centerPoint作为K会更精确。
  3. 只是针对每个Canopy的内做K-means聚类,减少相似计算的数量。

缺点

  1. 算法中T1,T2的确定问题。

4.2 K-means++算法

在这里插入图片描述
K-Means++算法采用下列步骤给定K个初始质点:

  1. 从数据集中任选一个节点作为第一个聚类中心。
  2. 对数据集中的每个点x,计算x到所有已有聚类中心点的距离和D(X),基于D(X)采用线性概率选择出下一个聚类中心点(距离较远的一个点成为新增的一个聚类中心点)。
  3. 重复步骤2直到找到K个聚类中心点。

4.2 二分K-means算法

解决K-Means算法对初始簇心比较敏感的问题,二分K-Means算法是一种弱化初始质心的一种算法,具体步骤如下:

  1. 所有点作为一个簇
  2. 将该簇一分为二
  3. 选择能最大限度降低聚类代价函数(也就是误差平方和)的簇划分为两个簇。
  4. 以此进行下去,直到簇的数目等于用户给定的数目k为止。
    在这里插入图片描述
    隐含原则:对误差平方和最大的簇进行再一次划分,因为误差平方和越大,表示该簇聚类效果越不好,越有可能是多个簇被当成了一个簇。

4.3 Kernel K-means

将每个样本进行一个投射到高维空间的处理,然后再将处理后的数据使用普通的k-means算法思想进行聚类。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.4 K-medoids(使用曼哈顿聚类度量聚类结果)ISODATA

在这里插入图片描述
在这里插入图片描述
算法流程:

  1. 总体n个样本点中任意选取k个点作为medoids。
  2. 按照与medoids最近的原则,将剩余的n-k个点分配到当前最佳的medoids代表的类中。
  3. 对于第i个类中除对应medoids点外的所有其他点,按顺序计算当其为新的medoids时,代价函数的值,遍历所有可能,选取代价函数最小时对应的点作为新的medoids。
  4. 重复2-3的过程,直到所有的medoids点不再发生变化或已达到设定的最大迭代次数。
  5. 产出最终确定的k个类。

优缺点:

  1. K-medoids对噪声的鲁棒性好(1,2,3,100)。
  2. K-medoids只能对小样本起作用,样本大速度太慢。
  3. K-medoids较K-means来说,多次运行每次结果偏差较小,而k-means对初值依赖大,导致每次运行结果相异程度大。

对比:
在这里插入图片描述

4.5 迭代自组织数据分析算法——ISODATA(Interative Self Organizing Data Anslysis Techniques Algorithm)

K-means和K-means++的聚类中心数K是固定不变的。而ISODATA算法在运行过程中能够根据各个类别的实际情况进行两种操作来调整聚类中心数K:(1)分裂操作,对应着增加聚类中心数;(2)合并操作,对应着减少聚类中心数。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

该算法能够在聚类过程中根据各个类所包含样本的实际情况动态调整聚类中心的数目。如果某个类中样本分散程度较大(通过方差进行衡量)并且样本数量较大,则对其进行分裂操作;如果某两个类别靠得比较近(通过聚类中心的距离衡量),则对它们进行合并操作。当聚类结果中某一类的类内方差太大,将该类进行分裂。

4.6 Mini Batch K-Means(适合大数据的聚类算法)

Mini Batch KMeans使用了Mini Batch(分批处理)的方法对数据点之间的距离进行计算。
Mini Batch计算过程中不必使用所有的数据样本,而是从不同类别的样本中抽取一部分样本来代表各自类型进行计算。由于计算样本量少,所以会相应的减少运行时间,但另一方面抽样也必然会带来准确度的下降。

步骤:

  1. 从数据集中随机抽取一些数据形成小批量,把他们分配给最近的质心。
  2. 更新质心。

区别:
与K-means相比,数据的更新在每一个小的样本集上。对于每一个小批量,通过计算平均值得到更新质心,并把小批量里的数据分配给该质心,随着迭代次数的增加,这些质心的变化是逐渐减小的,直到质心稳定或者达到指定的迭代次数,停止计算。

5. 总结

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值