sklearn中应用轮廓系数进行聚类结果的评估

  • 发布日期:2019-10-25
  • 难度:中等
  • 类别:聚类分析、轮廓系数、聚类结果的评估
  • 标签:Python、sklearn.metrics.silhouette_score

1. 问题描述

如下程序是scikit-learn中运用轮廓系数值来评估聚类最佳数目的一个实例。应用的数据集为sklearn中的make_blobs的1000个数据点,最佳聚类数目设为6类。

2. 程序实现

In [11]:
# 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()