Como avaliar o agrupamento de texto?

8

Quais métricas podem ser usadas para avaliar modelos de cluster de texto? Eu usei tf-idf+ k-means, tf-idf+ hierarchical clustering, doc2vec+ k-means (metric is cosine similarity), doc2vec+ hierarchical clustering (metric is cosine similarity). Como decidir qual modelo é o melhor?

Толкачёв Иван
fonte

Respostas:

6

Confira este documento . Ele também aborda a questão de quantos clusters usar. O pacote mclust do R possui uma rotina que tenta diferentes modelos de cluster / número de clusters e plota o critério de inferência bayesiana (BIC). (ótima vinheta aqui ). É um método geral, ou seja, algo que você pode fazer sem ser específico do domínio / dados. (É sempre bom ser específico do domínio, se você tiver tempo e dados.)

O gráfico é da vinheta de Lucca Scrucca. O MClust tenta 14 algoritmos de clustering diferentes (representados pelos diferentes símbolos), aumentando o número de clusters de 1 para algum valor padrão. Ele encontra o BIC toda vez. O BIC mais alto geralmente é a melhor escolha. Você pode aplicar essa metodologia ao seu próprio estábulo de algoritmos de clustering.

insira a descrição da imagem aqui

Pete
fonte
2

Confira a pontuação da silhueta

Fórmula para o i ponto de dados

(b(i) - a(i)) / max(a(i),b(i))

onde b (i) -> dissimilaridade do cluster vizinho mais próximo

a (i) -> dissimilaridade entre pontos no cluster

Isso dá uma pontuação entre -1 e +1.

Interpretação

+1 significa ajuste muito bom

-1 significa classificado incorretamente [deveria pertencer a um cluster diferente]

Depois de calcular a pontuação da silhueta para cada ponto de dados, você pode fazer uma chamada para a escolha do número de clusters.

Exemplo de código

from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_samples, silhouette_score

X, y = make_blobs(n_samples=500,
                  n_features=2,
                  centers=4,
                  cluster_std=1,
                  center_box=(-10.0, 10.0),
                  shuffle=True,
                  random_state=1)  # For reproducibility

range_n_clusters = [2, 3, 4, 5, 6]

for n_clusters in range_n_clusters:
    # Initialize the clusterer with n_clusters value and a random generator
    # seed of 10 for reproducibility.
    clusterer = KMeans(n_clusters=n_clusters, random_state=10)
    cluster_labels = clusterer.fit_predict(X)

    # The silhouette_score gives the average value for all the samples.
    # This gives a perspective into the density and separation of the formed
    # clusters
    silhouette_avg = silhouette_score(X, cluster_labels)
    print("For n_clusters =", n_clusters,
          "The average silhouette_score is :", silhouette_avg)

    # Compute the silhouette scores for each sample
    sample_silhouette_values = silhouette_samples(X, cluster_labels)
Vivek Kalyanarangan
fonte
0

Seria muito bom ter uma medida de qualidade de agrupamento. Infelizmente, essa medida é difícil de calcular - provavelmente difícil para a IA. Você está tentando reduzir uma coisa muito complexa para um único número.

Se for difícil para a IA, você pode pedir às pessoas para classificar os agrupamentos de alguma forma. Não é o ideal e não será dimensionado, mas você terá um único número que representa algo próximo ao que deseja.

Raio
fonte
Eu não acho que isso esteja correto. Eu posso simplesmente alimentar um documento de texto bem estudado nos modelos. Em seguida, compare a associação do cluster com a minha expectativa.
HelloWorld 10/10
Sim. Usar a "expectativa" de você é o que você faz quando a medida é difícil para a IA. Você obteria uma medida melhor se incluísse as expectativas de outras pessoas.
Ray
Eu tenho uma ideia. Eu posso tentar treinar o classificador e ajustá-lo com etiquetas de diferentes modelos com o mesmo número de clusters. Quanto melhor a precisão, o melhor modelo.
Толкачёв Иван