Comment évaluer le clustering de texte?


8

Quelles mesures peuvent être utilisées pour évaluer les modèles de clustering de texte? J'ai utilisé tf-idf+ k-means, tf-idf+ hierarchical clustering, doc2vec+ k-means (metric is cosine similarity), doc2vec+ hierarchical clustering (metric is cosine similarity). Comment décider quel modèle est le meilleur?

Réponses:


6

Consultez cet article . Il aborde également la question du nombre de clusters à utiliser. Le package R mclust a une routine qui va essayer différents modèles de clusters / nombre de clusters et tracer le critère d'inférence bayésien (BIC). (grande vignette ici ). C'est une méthode générale, c'est-à-dire quelque chose que vous pouvez faire sans être spécifique au domaine / aux données. (Il est toujours bon d'être spécifique au domaine si vous avez le temps et les données.)

Le graphique est tiré de la vignette de Lucca Scrucca. MClust essaie 14 algorithmes de clustering différents (représentés par les différents symboles), augmentant le nombre de clusters de 1 à une valeur par défaut. Il trouve le BIC à chaque fois. Le BIC le plus élevé est généralement le meilleur choix. Vous pouvez appliquer cette méthodologie à votre propre écurie d'algorithmes de clustering.

entrez la description de l'image ici


2

Découvrez le score de silhouette

Formule pour le i ème point de données

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

b (i) -> dissimilarité du cluster voisin le plus proche

a (i) -> dissimilarité entre les points d'un cluster

Cela donne un score entre -1 et +1.

Interprétation

+1 signifie un très bon ajustement

-1 signifie une classification erronée [aurait dû appartenir à un autre cluster]

Après avoir calculé le score de silhouette pour chaque point de données, vous pouvez prendre un appel sur le choix du nombre de clusters.

Exemple de code

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)

0

Une mesure de la qualité du clustering serait très appréciable. Malheureusement, cette mesure est difficile à calculer - probablement difficile pour l'IA. Vous essayez de réduire une chose très complexe à un seul nombre.

Si c'est difficile pour l'IA, vous pouvez demander aux gens d'évaluer les regroupements d'une manière ou d'une autre. Ce n'est pas idéal et ne sera pas mis à l'échelle, mais vous aurez un seul numéro qui représente quelque chose de proche de ce que vous voulez.


Je ne pense pas que ce soit correct. Je peux simplement introduire un document texte bien étudié dans les modèles. Comparez ensuite l'appartenance au cluster à mes attentes.
HelloWorld

Oui. Utiliser "votre" attente est ce que vous faites lorsque la mesure est difficile à l'IA. Vous obtiendriez une meilleure mesure si vous incluez les attentes des autres.
Ray

J'ai une idée. Je peux essayer de former le classificateur et de l'adapter avec des étiquettes de différents modèles avec le même nombre de grappes. Le meilleur score de précision, le meilleur modèle.
Толкачёв Иван
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.