如何确定K-means算法中的k值?

  • 最常用最简单的方法可视化数据,然后观察出聚类聚成几类比较合适
  • 绘制出k-average with cluster distance to centroid的图表,观察随着k值的增加,曲线的下降情况,当曲线不再“急剧”下降时,就是合适的k值
  • 计算不同k值下KMeans算法的BIC和AIC值,BIC或AIC值越小,选择该k值
  • 使用 Canopy算法先进行粗略的聚类,产生的簇的个数,作为KMeans算法的k值
  • 使用x-means方法结合BIC准则去判定簇的个数,也就是k值
  • 使用Gap Statistic公式来确定k值
  • 使用轮廓系数来确定,选择使系数较大所对应的k值
  • 使用交叉验证来确定使目标函数(距中心的距离的平方差)变小的k值
  • 利用Affinity propagation的方法估计最优的聚类数目,进一步进行KMeans的算法
  • 利用层次聚类,可视化后认为地观察认定可聚为几类,确定k值
  • 确定较粗的数目,并找到一个初始聚类,然后用迭代重定位来改进该聚类。

1) 肘部法

肘部法所使用的聚类评价指标为:数据集中所有样本点到其簇中心的距离之和的平方。但是肘部法选择的并不是误差平方和最小的,而是误差平方和突然变小时对应的值。

2) 轮廓系数法

轮廓系数是一种非常常用的聚类效果评价指标。该指标结合了内聚度和分离度两个因素。其具体计算过程如下:

假设已经通过聚类算法将待分类的数据进行了聚类,并最终得到了个簇。对于每个簇中的每个样本点,分别计算其轮廓系数。而所有样本点的轮廓系数的平均值,即为该聚类结果总的轮廓系数。 ,越接近与1,聚类效果越好。

3) 具体案例

先利用sklearn.datasets中的方法生成自己的聚类数据集。具体如下:

 对数据x进行归一化(因为KMeans算法中涉及到距离的计算),具体如下:

  使用肘部法确定值,其代码如下:

  使用轮廓系数确定值,其代码如下:

 参考文章:如何确定K-means算法中的k值?_Sun_Sherry的博客-CSDN博客_kmeans算法k值的确定

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值