Scikit Learn: evaluación del rendimiento de la agrupación en clústeres

Hay varias funciones con la ayuda de las cuales podemos evaluar el rendimiento de los algoritmos de agrupamiento.

A continuación se presentan algunas funciones importantes y más utilizadas proporcionadas por Scikit-learn para evaluar el rendimiento de la agrupación en clústeres:

Índice de rand ajustado

Rand Index es una función que calcula una medida de similitud entre dos agrupaciones. Para este cálculo, el índice rand considera todos los pares de muestras y pares de conteo que se asignan en los grupos similares o diferentes en el agrupamiento predicho y verdadero. Posteriormente, la puntuación bruta del índice Rand se 'ajusta por probabilidad' en la puntuación del índice rand ajustado mediante la siguiente fórmula:

$$ Ajustado \: RI = \ left (RI-Esperado _ {-} RI \ right) / \ left (max \ left (RI \ right) -Esperado _ {-} RI \ right) $$

Tiene dos parámetros a saber labels_true, que son etiquetas de clase de verdad fundamental, y labels_pred, que son etiquetas de clústeres para evaluar.

Ejemplo

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)

Salida

0.4444444444444445

El etiquetado perfecto se puntuaría con 1 y el etiquetado incorrecto o independiente se puntuaría con 0 o negativo.

Puntuación basada en información mutua

La información mutua es una función que calcula la concordancia de las dos asignaciones. Ignora las permutaciones. Hay las siguientes versiones disponibles:

Información mutua normalizada (NMI)

Scikit aprende tener sklearn.metrics.normalized_mutual_info_score módulo.

Ejemplo

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)

Salida

0.7611702597222881

Información mutua ajustada (AMI)

Scikit aprende tener sklearn.metrics.adjusted_mutual_info_score módulo.

Ejemplo

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)

Salida

0.4444444444444448

Puntuación de Fowlkes-Mallows

La función Fowlkes-Mallows mide la similitud de dos agrupaciones de un conjunto de puntos. Puede definirse como la media geométrica de la precisión y el recuerdo por pares.

Matemáticamente,

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

Aquí, TP = True Positive - número de pares de puntos que pertenecen a los mismos conglomerados tanto en etiquetas verdaderas como predichas.

FP = False Positive - número de pares de puntos que pertenecen a los mismos conglomerados en etiquetas verdaderas pero no en las etiquetas predichas.

FN = False Negative - número de pares de puntos que pertenecen a los mismos conglomerados en las etiquetas previstas pero no en las etiquetas verdaderas.

El aprendizaje de Scikit tiene el módulo sklearn.metrics.fowlkes_mallows_score -

Ejemplo

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)

Salida

0.6546536707079771

Coeficiente de silueta

La función de silueta calculará el coeficiente de silueta medio de todas las muestras utilizando la distancia media dentro del grupo y la distancia media del grupo más cercano para cada muestra.

Matemáticamente,

$$ S = \ left (ba \ right) / max \ left (a, b \ right) $$

Aquí, a es la distancia entre grupos.

y b es la distancia media al grupo más cercano.

Los Scikit aprenden tienen sklearn.metrics.silhouette_score módulo -

Ejemplo

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')

Salida

0.5528190123564091

Matriz de contingencia

Esta matriz informará la cardinalidad de intersección para cada par confiable de (verdadero, predicho). La matriz de confusión para problemas de clasificación es una matriz de contingencia cuadrada.

Los Scikit aprenden tienen sklearn.metrics.contingency_matrix módulo.

Ejemplo

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)

Salida

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

La primera fila del resultado anterior muestra que entre tres muestras cuyo verdadero conglomerado es "a", ninguna de ellas está en 0, dos de ellas están en 1 y 1 está en 2. Por otro lado, la segunda fila muestra que entre tres muestras cuyo verdadero cluster es "b", 1 está en 0, 1 está en 1 y 1 está en 2.