Scikit Learn - Évaluation des performances du clustering

Il existe différentes fonctions à l'aide desquelles nous pouvons évaluer les performances des algorithmes de clustering.

Voici quelques fonctions importantes et principalement utilisées fournies par Scikit-learn pour évaluer les performances de clustering -

Index Rand ajusté

Rand Index est une fonction qui calcule une mesure de similarité entre deux regroupements. Pour ce calcul, l'index rand considère toutes les paires d'échantillons et les paires de comptage qui sont assignées dans les clusters similaires ou différents dans le clustering prédit et vrai. Ensuite, le score brut de l'indice Rand est `` ajusté pour le hasard '' dans le score de l'indice Rand ajusté en utilisant la formule suivante -

$$ Adjusted \: RI = \ left (RI-Expected _ {-} RI \ right) / \ left (max \ left (RI \ right) -Expected _ {-} RI \ right) $$

Il a deux paramètres à savoir labels_true, qui sont les étiquettes de classe de vérité terrain, et labels_pred, qui sont des étiquettes de clusters à évaluer.

Exemple

from sklearn.metrics.cluster import adjusted_rand_score
   
   labels_true = [0, 0, 1, 1, 1, 1]
   labels_pred = [0, 0, 2, 2, 3, 3]

adjusted_rand_score(labels_true, labels_pred)

Production

0.4444444444444445

Un étiquetage parfait serait noté 1 et un mauvais étiquetage ou un étiquetage indépendant serait noté 0 ou négatif.

Score basé sur les informations mutuelles

L'information mutuelle est une fonction qui calcule l'accord des deux affectations. Il ignore les permutations. Les versions suivantes sont disponibles -

Information mutuelle normalisée (NMI)

Scikit learn avoir sklearn.metrics.normalized_mutual_info_score module.

Exemple

from sklearn.metrics.cluster import normalized_mutual_info_score
   
   labels_true = [0, 0, 1, 1, 1, 1]
   labels_pred = [0, 0, 2, 2, 3, 3]

normalized_mutual_info_score (labels_true, labels_pred)

Production

0.7611702597222881

Informations mutuelles ajustées (AMI)

Scikit learn avoir sklearn.metrics.adjusted_mutual_info_score module.

Exemple

from sklearn.metrics.cluster import adjusted_mutual_info_score

   labels_true = [0, 0, 1, 1, 1, 1]
   labels_pred = [0, 0, 2, 2, 3, 3]

adjusted_mutual_info_score (labels_true, labels_pred)

Production

0.4444444444444448

Score de Fowlkes-Mallows

La fonction Fowlkes-Mallows mesure la similitude de deux regroupements d'un ensemble de points. Elle peut être définie comme la moyenne géométrique de la précision et du rappel par paires.

Mathématiquement,

$$ FMS = \ frac {TP} {\ sqrt {\ left (TP + FP \ right) \ left (TP + FN \ right)}} $$

Ici, TP = True Positive - nombre de paires de points appartenant aux mêmes clusters dans les étiquettes vrai et prédit à la fois.

FP = False Positive - nombre de paires de points appartenant aux mêmes clusters dans les étiquettes vraies mais pas dans les étiquettes prédites.

FN = False Negative - nombre de paires de points appartenant aux mêmes clusters dans les étiquettes prédites mais pas dans les étiquettes vraies.

L'apprentissage Scikit a le module sklearn.metrics.fowlkes_mallows_score -

Exemple

from sklearn.metrics.cluster import fowlkes_mallows_score

   labels_true = [0, 0, 1, 1, 1, 1]
   labels_pred = [0, 0, 2, 2, 3, 3]

fowlkes_mallows__score (labels_true, labels_pred)

Production

0.6546536707079771

Coefficient de silhouette

La fonction Silhouette calculera le coefficient de silhouette moyen de tous les échantillons en utilisant la distance moyenne intra-cluster et la distance moyenne du cluster le plus proche pour chaque échantillon.

Mathématiquement,

$$ S = \ gauche (ba \ droite) / max \ gauche (a, b \ droite) $$

Ici, a est la distance intra-cluster.

et b est la distance moyenne du groupe le plus proche.

Les Scikit apprennent ont sklearn.metrics.silhouette_score module -

Exemple

from sklearn import metrics.silhouette_score
from sklearn.metrics import pairwise_distances
from sklearn import datasets
import numpy as np
from sklearn.cluster import KMeans
dataset = datasets.load_iris()
X = dataset.data
y = dataset.target

kmeans_model = KMeans(n_clusters = 3, random_state = 1).fit(X)
labels = kmeans_model.labels_
silhouette_score(X, labels, metric = 'euclidean')

Production

0.5528190123564091

Matrice de contingence

Cette matrice indiquera la cardinalité d'intersection pour chaque paire de confiance de (vrai, prédit). La matrice de confusion pour les problèmes de classification est une matrice de contingence carrée.

Les Scikit apprennent ont sklearn.metrics.contingency_matrix module.

Exemple

from sklearn.metrics.cluster import contingency_matrix
x = ["a", "a", "a", "b", "b", "b"]
y = [1, 1, 2, 0, 1, 2]
contingency_matrix(x, y)

Production

array([
   [0, 2, 1],
   [1, 1, 1]
])

La première ligne de la sortie ci-dessus montre que parmi trois échantillons dont le vrai cluster est «a», aucun d'entre eux n'est à 0, deux d'entre eux sont en 1 et 1 est en 2. D'autre part, la deuxième ligne montre que parmi trois échantillons dont le vrai cluster est «b», 1 est en 0, 1 est en 1 et 1 est en 2.