当前位置:   article > 正文

肘部法和轮廓系数法确定K-means中的k值_手肘发如何确定k

手肘发如何确定k

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在这里插入图片描述

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这里插入图片描述

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/132442?site
推荐阅读
相关标签
  

闽ICP备14008679号