silhouette_score#

sklearn.metrics.silhouette_score(X, labels, *, metric='euclidean', sample_size=None, random_state=None, **kwds)[source]#

计算所有样本的平均轮廓系数。

轮廓系数是根据每个样本的平均簇内距离 (a) 和平均最近簇距离 (b) 计算的。样本的轮廓系数为 (b - a) / max(a, b)。需要澄清的是,b 是样本与样本不属于的最近簇之间的距离。请注意,轮廓系数仅在标签数量满足 2 <= n_labels <= n_samples - 1 时才被定义。

此函数返回所有样本的平均轮廓系数。要获取每个样本的值,请使用 silhouette_samples

最佳值为 1,最差值为 -1。接近 0 的值表示簇重叠。负值通常表示样本被分配到错误的簇,因为另一个簇更相似。

详情请参阅用户指南

参数:
X{类数组, 稀疏矩阵} 形状为 (n_samples_a, n_samples_a) (如果 metric == “precomputed”)或 (n_samples_a, n_features) (否则)

样本之间的成对距离数组,或特征数组。

labels类数组,形状为 (n_samples,)

每个样本的预测标签。

metric字符串或可调用对象,默认为“euclidean”

用于计算特征数组中实例之间距离的度量。如果度量是字符串,则必须是 pairwise_distances 允许的选项之一。如果 X 是距离数组本身,请使用 metric="precomputed"

sample_size整型,默认为 None

在对数据随机子集计算轮廓系数时使用的样本大小。如果 sample_size None,则不进行抽样。

random_state整型、RandomState 实例或 None,默认为 None

确定用于选择样本子集的随机数生成。当 sample_size 不为 None 时使用。传递一个整型值以确保在多次函数调用中结果可复现。请参阅词汇表

**kwds可选关键字参数

任何其他参数将直接传递给距离函数。如果使用 scipy.spatial.distance 度量,则参数仍依赖于度量本身。请参阅 SciPy 文档以获取使用示例。

返回:
silhouette浮点数

所有样本的平均轮廓系数。

参考文献

示例

>>> from sklearn.datasets import make_blobs
>>> from sklearn.cluster import KMeans
>>> from sklearn.metrics import silhouette_score
>>> X, y = make_blobs(random_state=42)
>>> kmeans = KMeans(n_clusters=2, random_state=42)
>>> silhouette_score(X, kmeans.fit_predict(X))
0.49...