肘部法和轮廓系数法确定K-means中的k值

本文介绍了K-Means聚类算法,并探讨了在缺乏先验知识时如何确定合适的簇数k。肘部法通过观察不同k值下簇内平方误差(SSE)的变化趋势来选择拐点,而轮廓系数法则根据样本集合的轮廓系数来评估聚类效果,取值范围在-1到1之间,数值越大表明分类效果越好。这两种方法都是实践中常用的选择k的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. K-Means 算法

k-means算法(详解k-means算法原理)是机器学习中常用的聚类算法,原理简单实现容易,内存占用量也比较小。

但使用这个方法时,需要事先指定将要聚合成的簇数 k。 在先验知识缺乏的情况下,想要确定k是非常困难的。

目前常用的用来确定 k 的方法主要有两种:肘部法、轮廓系数法。

2. 肘部法

  • 取变化较大的拐点处的 k 值
#-----------------------------7.肘部法确定k值(3)-----------------------------
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

distortions = []  # 用来存放设置不同簇数时的SSE值
for i in range(2,11):
    kmModel = KMeans(n_clusters=i)
    kmModel.fit(x)
    distortions.append(kmModel.inertia_)  # 获取K-means算法的SSE
# 绘制曲线
plt.plot(range(2, 11), distortions, marker="o")
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.xlabel("簇数量")
plt.ylabel("簇内误方差(SSE)")
plt.show()

在这里插入图片描述

3. 轮廓系数法

  • 轮廓系数 (Silhouette Coefficient):对于一个样本集合,它的轮廓系数是所有样本轮廓系数的平均值。
  • 轮廓系数的取值范围是[-1,1],同类别样本距离越相近不同类别样本距离越远,分数越高分类效果越好。
#-----------------------------8.轮廓系数法确定k值(3)---------------
from sklearn.metrics import silhouette_score
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

sil_score = []
for k in range(2,9):
    kmeans = KMeans(n_clusters=k,random_state=0).fit(x)
    sil_score.append(silhouette_score(x,kmeans.labels_))
plt.plot(range(2,9),sil_score,'o-')
plt.xlabel('k')
plt.show()

在这里插入图片描述

参考链接:
[1] https://blog.csdn.net/yeshang_lady/article/details/106636679

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值