如下程序是scikit-learn中运用轮廓系数值来评估聚类最佳数目的一个实例。应用的数据集为sklearn中的make_blobs的1000个数据点,最佳聚类数目设为6类。
# k-means实验
#导入k-means包
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
#导入make_blobs数据集
from sklearn.datasets import make_blobs
#应用轮廓系数进行促评估。
from sklearn.metrics import silhouette_score
plt.figure(figsize=(24, 24))
#以下三行为图中标题中文显示问题的解决方案
from pylab import mpl
# 指定默认字体
mpl.rcParams['font.sans-serif'] = ['FangSong']
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
# 解决保存图像是负号'-'显示
mpl.rcParams['axes.unicode_minus'] = False
# 选取样本数量
n_samples = 1000
# 选取随机因子
random_state = 170
X, y = make_blobs(n_samples=n_samples, random_state=random_state,centers=6)
# 簇的个数
clusters = [2,3,4,5,6,7,8,9]
subplot_counter = 0
sc_scores = []
for t in clusters:
# 训练模型
kmeans_model = KMeans(n_clusters=t).fit(X)
sc_score = silhouette_score(X, kmeans_model.labels_, metric='euclidean')
sc_scores.append(sc_score)
plt.plot(clusters, sc_scores, '*-')
plt.xlabel('类团数目')
plt.ylabel('轮廓系数值')
plt.show()