Come valutare il clustering di testo?


8

Quali metriche possono essere utilizzate per valutare i modelli di clustering di testo? Ho usato tf-idf+ k-means, tf-idf+ hierarchical clustering, doc2vec+ k-means (metric is cosine similarity), doc2vec+ hierarchical clustering (metric is cosine similarity). Come decidere quale modello è il migliore?

Risposte:


6

Dai un'occhiata a questo documento . Risolve anche la questione di quanti cluster utilizzare. Il pacchetto R mclust ha una routine che proverà diversi modelli / numero di cluster e traccia il criterio di inferenza bayesiana (BIC). (ottima vignetta qui ). È un metodo generale, ovvero qualcosa che puoi fare senza essere specifici di dominio / dati. (È sempre bene essere specifici del dominio se si dispone di tempo e dati.)

La carta è tratta dalla vignetta di Lucca Scrucca. MClust prova 14 diversi algoritmi di clustering (rappresentati dai diversi simboli), aumentando il numero di cluster da 1 a un valore predefinito. Trova il BIC ogni volta. Il BIC più elevato è in genere la scelta migliore. È possibile applicare questa metodologia alla propria scuderia di algoritmi di clustering.

inserisci qui la descrizione dell'immagine


2

Guarda il punteggio della silhouette

Formula per i esimo punto di dati

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

dove b (i) -> dissomiglianza dal cluster vicino più vicino

a (i) -> dissomiglianza tra i punti all'interno del cluster

Questo dà un punteggio tra -1 e +1.

Interpretazione

+1 significa adattamento molto buono

-1 significa che è stato classificato erroneamente [avrebbe dovuto appartenere a un cluster diverso]

Dopo aver calcolato il punteggio silhouette per ciascun punto dati, è possibile effettuare una chiamata sulla scelta per il numero di cluster.

Esempio di codice

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

Sarebbe molto bello avere una misura di qualità del clustering. Sfortunatamente, questa misura è difficile da calcolare - probabilmente AI-difficile. Stai cercando di ridurre una cosa molto complessa a un singolo numero.

Se è difficile per l'IA, allora potresti chiedere alle persone di valutare i cluster in qualche modo. Non è l'ideale e non si ridimensionerà, ma avrai un solo numero che rappresenta qualcosa vicino a quello che vuoi.


Non penso sia corretto. Posso semplicemente inserire nei modelli un documento di testo ben studiato. Quindi confrontare l'appartenenza al cluster con le mie aspettative.
HelloWorld,

Sì. Usare la "tua" aspettativa è ciò che fai quando la misura è difficile per l'IA. Otterresti una misura migliore se includessi le aspettative degli altri.
Ray,

Ho un'idea. Posso provare ad addestrare il classificatore e ad inserirlo con etichette di modelli diversi con lo stesso numero di cluster. Migliore accurate__score, il modello migliore.
Толкачёв Иван,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.