Scikit Learn - Avaliação de desempenho de clustering

Existem várias funções com a ajuda das quais podemos avaliar o desempenho de algoritmos de agrupamento.

A seguir estão algumas funções importantes e mais usadas fornecidas pelo Scikit-learn para avaliar o desempenho do cluster -

Índice Rand Ajustado

Rand Index é uma função que calcula uma medida de similaridade entre dois agrupamentos. Para este cálculo, o índice rand considera todos os pares de amostras e pares de contagem que são atribuídos nos clusters semelhantes ou diferentes no clustering predito e verdadeiro. Posteriormente, a pontuação do Índice Rand bruto é "ajustada para o acaso" na pontuação do Índice Rand Ajustado usando a seguinte fórmula -

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

Tem dois parâmetros a saber labels_true, que são rótulos de classe de verdade fundamental, e labels_pred, que são rótulos de clusters a serem avaliados.

Exemplo

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)

Resultado

0.4444444444444445

A rotulagem perfeita seria avaliada como 1 e a rotulagem incorreta ou independente seria classificada como 0 ou negativa.

Pontuação baseada em informações mútuas

Informação mútua é uma função que calcula a concordância das duas atribuições. Ele ignora as permutações. Existem as seguintes versões disponíveis -

Informação mútua normalizada (NMI)

Scikit aprender tem sklearn.metrics.normalized_mutual_info_score módulo.

Exemplo

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)

Resultado

0.7611702597222881

Informações mútuas ajustadas (AMI)

Scikit aprender tem sklearn.metrics.adjusted_mutual_info_score módulo.

Exemplo

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)

Resultado

0.4444444444444448

Pontuação de Fowlkes-Mallows

A função Fowlkes-Mallows mede a similaridade de dois agrupamentos de um conjunto de pontos. Pode ser definido como a média geométrica da precisão e recuperação dos pares.

Matematicamente,

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

Aqui, TP = True Positive - número de pares de pontos pertencentes aos mesmos clusters em rótulos verdadeiros e preditos.

FP = False Positive - número de pares de pontos pertencentes aos mesmos clusters em rótulos verdadeiros, mas não nos rótulos previstos.

FN = False Negative - número de pares de pontos pertencentes aos mesmos clusters nos rótulos previstos, mas não nos rótulos verdadeiros.

O Scikit learn tem o módulo sklearn.metrics.fowlkes_mallows_score -

Exemplo

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)

Resultado

0.6546536707079771

Coeficiente de silhueta

A função Silhouette calculará o Coeficiente Silhouette médio de todas as amostras usando a distância intra-cluster média e a distância média do cluster mais próximo para cada amostra.

Matematicamente,

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

Aqui, a é a distância intra-cluster.

e, b é a distância média do cluster mais próximo.

O Scikit aprender tem sklearn.metrics.silhouette_score módulo -

Exemplo

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

Resultado

0.5528190123564091

Matriz de Contingência

Esta matriz relatará a cardinalidade de interseção para cada par confiável de (verdadeiro, previsto). A matriz de confusão para problemas de classificação é uma matriz de contingência quadrada.

O Scikit aprender tem sklearn.metrics.contingency_matrix módulo.

Exemplo

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)

Resultado

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

A primeira linha da saída acima mostra que entre três amostras cujo verdadeiro cluster é “a”, nenhuma delas está em 0, duas delas estão em 1 e 1 está em 2. Por outro lado, a segunda linha mostra que entre três amostras cujo verdadeiro cluster é “b”, 1 está em 0, 1 está em 1 e 1 está em 2.