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.