数据挖掘——聚类算法kmeans整理

本文详细介绍了k-means聚类算法的原理,包括随机选取k个中心点,根据距离划分数据,不断更新中心点直至收敛。同时探讨了k-means的优化方法,如通过多次执行选取最佳聚类结果,以及如何利用轮廓系数评估聚类效果。此外,还提出了K值的选取策略,通过计算不同k值下的平均轮廓系数来确定最佳的集群数目。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

【 kmeans算法原理】

  1. 随机选取k个中心点
  2. 遍历所有数据,将每个数据划分到最近的中心点中(根据距离的大小进行划分,即计算每个样本点到所有中心点的距离,选择距离最小的那个)
  3. 计算每个聚类的平均值,并作为新的中心点
  4. 重复2-3,直到这k个中心点不再变化(收敛了),或迭代次数达到规定值
    matlab函数调用:
[IDX,C,sumd,D] = kmeans(X,k,'distance','sqEuclidean','start','sample')  
//距离度量为欧氏距离的平方,初始点从样本X中随机选择k个点
// IDX: 每个样本点所在的类别
//   C: 所聚类别的中心点坐标位置(k*p,p为样本属性的维度)
//sumd: 每个类内各点到中心点的距离之和(1*k)
//   D:每个点到各类中心点的距离(n*k)

【算法的优化方法】

原因:初始中心点的随机选择——可能导致聚类的不正确性
方法1:重复执行几次kmeans,选取sum(sumd)最小的一次作为最终的聚类结果
方法2:重复执行几次kmeans,选取轮廓系数(下面有介绍)最小的一次作为最终的聚类结果

【K的选取】

首先认识下轮廓系数(Silhouette Coefficient)
轮廓系数:结合了聚类的凝聚度(Cohesion)和分离度(Separation),用于评估聚类的效果。该值处于-1~1之间,值越大,表示聚类效果越好。具体计算方法如下:

  1. 对于第i个元素x_i,计算x_i与其同一个簇内的所有其他元素距离的平均值,记作a_i,用于量化簇内的凝聚度。
  2. 选取x_i外的一个簇b,计算x_i与b中所有点的平均距离,遍历所有其他簇,找到最近的这个平均距离,记作b_i,用于量化簇之间分离度。
  3. 对于元素x_i,轮廓系数s_i = (b_i – a_i)/max(a_i,b_i)
    计算所有x的轮廓系数,求出平均值即为当前聚类的整体轮廓系数
    从上面的公式,不难发现若s_i小于0,说明x_i与其簇内元素的平均距离大于最近的其他簇,表示聚类效果不好。如果a_i趋于0,或者b_i足够大,那么s_i趋近与1,说明聚类效果比较好。

【K值选取方法】
在实际应用中,由于Kmeans一般作为数据预处理,或者用于辅助分类贴标签。所以k一般不会设置很大。可以通过枚举,令k从2到一个固定值如10,在每个k值上重复运行数次kmeans(避免局部最优解),并计算当前k平均轮廓系数,最后选取轮廓系数最大的值对应的k作为最终的集群数目。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值