Source code for pycrostates.metrics.silhouette

"""Silhouette score."""

import numpy as np
from sklearn.metrics import silhouette_score as sk_silhouette_score

from ..cluster._base import _BaseCluster
from ..utils import _distance_matrix
from ..utils._checks import _check_type
from ..utils._docs import fill_doc


[docs] @fill_doc def silhouette_score(cluster): # higher the better r"""Compute the mean Silhouette Coefficient. This function computes the Silhouette Coefficient\ :footcite:p:`Silhouettes` with :func:`sklearn.metrics.silhouette_score` from a fitted :ref:`Clustering` instance. Parameters ---------- %(cluster)s Returns ------- silhouette : float The mean Silhouette Coefficient. Notes ----- For more details regarding the implementation, please refer to :func:`sklearn.metrics.silhouette_score`. This proxy function uses ``metric="precomputed"`` with the absolute spatial correlation for distance computations. References ---------- .. footbibliography:: """ _check_type(cluster, (_BaseCluster,), item_name="cluster") cluster._check_fit() data = cluster._fitted_data labels = cluster._labels_ keep = np.linalg.norm(data.T, axis=1) != 0 data = data[:, keep] labels = labels[keep] distances = _distance_matrix(data.T) silhouette = sk_silhouette_score(distances, labels, metric="precomputed") return silhouette