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.