数据读取
1.导包
import matplotlib.pyplot as plt
from sklearn.metrics import silhouette_score
from sklearn.cluster import KMeans
2.读取数据
data = readData("test_data.cvs")
用手肘法 看看 不同聚类个数的效果
distortions = [] # 簇内误差平方和
sil_score = [] # 轮廓系数
for i in range(2, 50):
kmeans_model = KMeans(n_clusters=i)
predict_y = kmeans_model.fit_predict(data)
distortions.append(kmeans_model.inertia_) # 簇内误差平方和
sil_score.append(silhouette_score(data, predict_y)) # 轮廓系数
print('簇内误差平方和:', distortions)
print('轮廓系数:', sil_score)
绘图
plt.plot(range(2, 50), distortions, marker='x')
plt.xlabel('Number of clusters')
plt.ylabel('Distortion')
plt.title('distortions')
plt.show()
plt.plot(range(2, 50), sil_score, marker='x')
plt.xlabel('Number of clusters')
plt.ylabel('silhouette_score')
plt.title('silhouette_score')
plt.show()
从图中可以看出,最优k值应为21。