【机器学习】K-means怎么确定K

K-means算法流程

  1. 设置聚类中心数K
  2. 从数据集中随机选取K个数据作为初始聚类中心
  3. 对数据集中每个样本计算同聚类中心的距离归入距离最小的类簇
  4. 更新的类簇分别计算新的聚类中心
  5. 重复3-4,直到新的聚类中心到旧的聚类中心的距离小于某个阈值,或达到迭代次数上限

那么K值如何选取呢?也就是如何估计类别数?

  • 直观选取:

    • 数据可视化,通过样本空间的分布确定大致类别数;
  • 定量分析:

    • 手肘法:随着聚类数k的增大,样本划分会更加精细,每个簇的聚合程度会逐渐提高,误差平方和SSE逐渐变小

      流程就是,分别用不同的K跑多个模型,然后计算SSE,并绘制SSE-K曲线来观察和确定K值。

      k小于真实聚类数时,由于k的增大会大幅增加每个簇的聚合程度,故SSE的下降幅度会很大。

      k到达真实聚类数时,再增加k所得到的聚合程度回报会迅速变小,所以SSE的下降幅度会骤减

      SSE和k的关系图是一个手肘的形状,而这个肘部对应的k值就是数据的真实聚类数。当然,这也是该方法被称为手肘法的原因。(如下图,K大于4之后SSE降低变缓)

      S S E = ∑ i = 1 k ∑ p ∈ C i ∣ p − m i ∣ 2 S S E=\sum_{i=1}^{k} \sum_{p \in C_{i}}\left|p-m_{i}\right|^{2} SSE=i=1kpCipmi2

      其中,Ci是第i个簇,p是Ci中的样本点,mi是Ci的质心(Ci中所有样本的均值),SSE是所有样本的聚类误差,代表了聚类效果的好坏。 img

    • 轮廓系数法选择使系数较大所对应的k值

      计算样本 i 到同簇其他样本的平均距离 ai。ai 越小,说明样本 i 越应该被聚类到该簇。将 ai 称为样本i的簇内不相似度。 簇 C 中所有样本的 ai 均值称为簇 C 的簇不相似度

      计算样本i到其他某簇Cj 的所有样本的平均距离bij,称为样本i与簇 Cj 的不相似度。定义为样本i的簇间不相似度:bi =min{bi1, bi2, …, bik} 。bi越大,说明样本i越不属于其他簇。

      轮廓系数

      s ( i ) = b ( i ) − a ( i ) max ⁡ { a ( i ) , b ( i ) } s ( i ) = { 1 − a ( i ) b ( i ) , a ( i ) < b ( i ) 0 , a ( i ) = b ( i ) b ( i ) a ( i ) − 1 , a ( i ) > b ( i ) s(i)=\frac{b(i)-a(i)}{\max \{a(i), b(i)\}} \quad s(i)=\left\{\begin{array}{cc}1-\frac{a(i)}{b(i)}, & a(i)<b(i) \\0, & a(i)=b(i) \\\frac{b(i)}{a(i)}-1, & a(i)>b(i)\end{array}\right. s(i)=max{a(i),b(i)}b(i)a(i)s(i)=1b(i)a(i),0,a(i)b(i)1,a(i)<b(i)a(i)=b(i)a(i)>b(i)

      判断:

      • 轮廓系数范围在[-1,1]之间。该值越大,越合理。
      • si接近1,则说明样本i聚类合理;
      • si接近-1,则说明样本i更应该分类到另外的簇;
      • 若si 近似为0,则说明样本i在两个簇的边界上。

      所有样本的si的均值称为聚类结果的轮廓系数,是该聚类是否合理、有效的度量。 选择使系数较大所对应的k值

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值