silhouette_samples#

sklearn.metrics.silhouette_samples(X, labels, *, metric='euclidean', **kwds)[source]#

计算每个样本的 Silhouette 系数。

轮廓系数(Silhouette Coefficient)用于衡量样本与其自身所属簇中其他样本的聚类效果。轮廓系数高的聚类模型通常被认为具有良好的密集性(同一簇内的样本彼此相似)和良好的分离性(不同簇之间的样本不相似)。

轮廓系数的计算方式为:对于每个样本,使用其簇内平均距离(a)和平均最近簇距离(b)。样本的轮廓系数为 (b - a) / max(a, b)。请注意,只有当标签数量满足 2 <= n_labels <= n_samples - 1 时,轮廓系数才有定义。

此函数返回每个样本的轮廓系数。

最佳值为 1,最差值为 -1。接近 0 的值表示存在重叠的簇。

更多信息请阅读 用户指南

参数:
X{array-like, sparse matrix} of shape (n_samples_a, n_samples_a) if metric == “precomputed” or (n_samples_a, n_features) otherwise

样本间的成对距离数组,或特征数组。如果提供了稀疏矩阵,应优先使用 CSR 格式以避免额外的拷贝。

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

每个样本的标签值。

metricstr or callable, default=’euclidean’

在特征数组中计算实例间距离时使用的度量标准。如果 metric 是字符串,则必须是 pairwise_distances 所允许的选项之一。如果 X 本身是距离数组,请使用“precomputed”作为度量标准。预计算的距离矩阵的对角线必须为 0。

**kwdsoptional keyword parameters

任何其他参数都将直接传递给距离函数。如果使用 scipy.spatial.distance 度量,参数仍取决于度量标准。有关用法示例,请参阅 scipy 文档。

返回:
silhouettearray-like of shape (n_samples,)

每个样本的轮廓系数。

References

示例

>>> from sklearn.metrics import silhouette_samples
>>> from sklearn.datasets import make_blobs
>>> from sklearn.cluster import KMeans
>>> X, y = make_blobs(n_samples=50, random_state=42)
>>> kmeans = KMeans(n_clusters=3, random_state=42)
>>> labels = kmeans.fit_predict(X)
>>> silhouette_samples(X, labels)
array([...])