关于聚类如何确定K值的问题

聚类性能的度量
1. 内部指标和外部指标

这是机器学习一书中提出的两种度量方式,书中说的很详细,这里不再赘述,如下图所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.轮廓系数和平方误差
平方误差

平方误差是我们常说的手肘法,我们知道,常用拐点作为聚类数选取的依据,如下图
在这里插入图片描述
这时,可取聚类数K=5或6,具体取多少还要根据实际情况来定,因为这只是提供一个参考。(因为有些时候没有明显的拐点,就像一条平滑的曲线)
平方误差在sklearn里面有集成,已经帮我们计算好了,以k-means为例

"""
	模型属性: inertia_ :float
	Sum of squared distances of samples to their closest cluster center, weighted by the sample weights if provided.
	聚类完成后直接调用即可
"""
kmeans = KMeans(n_clusters=k, init='k-means++',random_state=100)  
kmeans.fit(data)
SSE = kmeans.inertia_
轮廓系数

我查了很多资料,这里首先说一下得到的一个结果吧:轮廓系数并不是越高越好
轮廓系数的计算方法,sklearn里面也有,具体的用法和参数大家可以去看官方文档。

from sklearn.metrics import silhouette_samples,silhouette_score
# label 是模型训练后数据的标签
lkxs = silhouette_score(data, labels) 
"""
	silhouette_samples 返回所有样本的轮廓系数
	silhouette_score  返回所有样本的平均轮廓系数
"""

轮廓系数是在[-1,1],很多资料说越接近于1,聚类结果越好,但我在是实验时取的最高的轮廓系数,并没有得到很好的聚类结果。之后我对比了一下轮廓系数和平方误差的图,如下
在这里插入图片描述

这是同一属性的两个指标的折线图,可以看到,随着类数量的增加,误差在减小,但轮廓系数却在下降。而轮廓系数最大时,同样误差也最大。

总结

当然并不是所有的数据都是这样,在我实验过程中其他属性的轮廓系数也是会随着误差的减小而升高的,我之前一直纠结于该用哪个指标取K值,现在看来得综合考虑,折中取值。其实我觉得不论哪种指标,他们都是提供一个参考,最后要聚成几类,不能只从数据的角度来定,还要考虑实际需求等情况。

以上仅代表个人观点,如有不妥,欢迎指正。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值