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

目录

    • 1. K-Means 算法
    • 2. 肘部法
    • 3. 轮廓系数法

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()

肘部法和轮廓系数法确定K-means中的k值_第1张图片

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()

肘部法和轮廓系数法确定K-means中的k值_第2张图片

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

你可能感兴趣的:(#,sklearn,算法,kmeans,聚类)