轮廓系数简介
轮廓系数(Silhouette Coefficient)是聚类分析中常用的一个指标,用于评估聚类结果的优劣。它通过衡量每个样本与其同簇内样本的距离与不同簇内样本的距离的比值,来评估样本的聚类质量。轮廓系数的值介于-1到1之间,其中:
- 轮廓系数为1表示样本被正确分类,与其他簇样本的距离大于同簇样本的距离。
- 轮廓系数为0表示样本处于边界,与其他簇样本的距离等于同簇样本的距离。
- 轮廓系数为-1表示样本被错误分类,与其他簇样本的距离小于同簇样本的距离。
计算方法
轮廓系数的计算公式如下:
\[ \text{Silhouette Coefficient}(x) = \frac{b(x) - a(x)}{max(b(x), a(x))} \]
其中:
- \(a(x)\) 表示样本 \(x\) 到其同簇内所有样本的平均距离。
- \(b(x)\) 表示样本 \(x\) 到其最近簇的平均距离。
步骤一:计算 \(a(x)\)
- 找到样本 \(x\) 所在的簇 \(C\)。
- 对于簇 \(C\) 中的每个样本 \(y\),计算 \(x\) 和 \(y\) 之间的距离 \(d(x, y)\)。
- 计算 \(a(x) = \frac{1}{|C| - 1} \sum_{y \in C} d(x, y)\)。
步骤二:计算 \(b(x)\)
- 找到与样本 \(x\) 所在簇 \(C\) 距离最近的簇 \(D\)。
- 对于簇 \(D\) 中的每个样本 \(z\),计算 \(x\) 和 \(z\) 之间的距离 \(d(x, z)\)。
- 计算 \(b(x) = \frac{1}{|D| - 1} \sum_{z \in D} d(x, z)\)。
步骤三:计算轮廓系数
根据公式计算 \(x\) 的轮廓系数。
实际案例解析
以下以鸢尾花(Iris)数据集为例,展示如何计算轮廓系数。
数据集介绍
鸢尾花数据集是经典的机器学习数据集,包含150个样本,每个样本有4个特征(花瓣长度、花瓣宽度、花萼长度、花萼宽度),分为3个类别。
步骤一:数据加载
from sklearn import datasets
import numpy as np
iris = datasets.load_iris()
X = iris.data
y = iris.target
步骤二:聚类
使用KMeans算法进行聚类,设置聚类个数为3。
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)
labels = kmeans.labels_
步骤三:计算轮廓系数
from sklearn.metrics import silhouette_score
silhouette_avg = silhouette_score(X, labels)
print("For n_clusters =", 3, "The average silhouette_score is :", silhouette_avg)
结果分析
根据计算结果,轮廓系数为0.945,说明聚类效果较好。其中,0.945表示有94.5%的样本被正确分类,与其他簇样本的距离大于同簇样本的距离。
总结
本文介绍了轮廓系数的计算方法与实际案例解析,通过鸢尾花数据集展示了如何计算轮廓系数。在实际应用中,轮廓系数可以帮助我们评估聚类结果的质量,从而选择合适的聚类算法和参数。
