赞
踩
k-means算法(详解k-means算法原理)是机器学习中常用的聚类算法,原理简单实现容易,内存占用量也比较小。
但使用这个方法时,需要事先指定将要聚合成的簇数 k。 在先验知识缺乏的情况下,想要确定k是非常困难的。
目前常用的用来确定 k 的方法主要有两种:肘部法、轮廓系数法。
- 取变化较大的拐点处的 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()
- 轮廓系数 (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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。