Silhouette Score(轮廓系数)是用于评估聚类质量的指标之一。它衡量了数据点与同簇内其他点的相似度以及与最近簇的相似度之间的对比。
公式
对于一个数据点 i:
- a(i): 数据点 i 到同簇内其他点的平均距离(簇内不相似度)。
- b(i): 数据点 i到最近的其他簇中点的平均距离(簇间不相似度)。
- 轮廓系数计算公式:
- 其中:
- −1≤s(i)≤1
- s(i)≈1: 数据点聚类效果好,点接近同簇而远离其他簇。
- s(i)≈0: 数据点位于簇边界。
- s(i)≈−1: 数据点可能被错误分类到其他簇。
整体 Silhouette Score
对于整个数据集,Silhouette Score 是所有数据点 s(i) 的平均值,用于评价整个聚类的质量。
优点
- 无需知道数据的真实标签,可用于无监督学习的聚类模型评估。
- 提供了直观的数值指标,便于模型调参或聚类效果比较。
应用场景
- 选择最佳的聚类数 k:通过计算不同 k 的 Silhouette Score,选择分数最高的 k。
- 比较不同聚类算法的性能,例如 KMeans、DBSCAN 或层次聚类。
代码示例(使用 Python)
from sklearn.metrics import silhouette_score
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs# 生成样本数据
X, _ = make_blobs(n_samples=500, centers=4, cluster_std=0.7, random_state=42)# 使用 KMeans 聚类
kmeans = KMeans(n_clusters=4, random_state=42)
labels = kmeans.fit_predict(X)# 计算 Silhouette Score
score = silhouette_score(X, labels)
print("Silhouette Score:", score)
结果解读
- 如果分数接近 1,说明聚类效果较好。
- 如果分数接近 0 或为负数,说明聚类效果较差。