Wie wird das Textclustering bewertet?

8

Welche Metriken können zur Bewertung von Textclustering-Modellen verwendet werden? Ich habe tf-idf+ k-means, tf-idf+ hierarchical clustering, doc2vec+ k-means (metric is cosine similarity), doc2vec+ verwendet hierarchical clustering (metric is cosine similarity). Wie kann man entscheiden, welches Modell das beste ist?

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

Antworten:

6

Schauen Sie sich dieses Papier an . Es wird auch die Frage behandelt, wie viele Cluster verwendet werden sollen. Das R-Paket mclust verfügt über eine Routine, die verschiedene Clustermodelle / Anzahl der Cluster ausprobiert und das Bayes'sche Inferenzkriterium (BIC) darstellt. (tolle Vignette hier ). Es ist eine allgemeine Methode, dh etwas, das Sie tun können, ohne domänen- / datenspezifisch zu sein. (Es ist immer gut, domänenspezifisch zu sein, wenn Sie Zeit und Daten haben.)

Die Karte stammt aus der Vignette von Lucca Scrucca. MClust probiert 14 verschiedene Clustering-Algorithmen aus (dargestellt durch die verschiedenen Symbole) und erhöht die Anzahl der Cluster von 1 auf einen Standardwert. Es findet jedes Mal den BIC. Der höchste BIC ist normalerweise die beste Wahl. Sie können diese Methode auf Ihre eigenen Clustering-Algorithmen anwenden.

Geben Sie hier die Bildbeschreibung ein

Pete
quelle
2

Schauen Sie sich die Silhouette-Punktzahl an

Formel für den i- ten Datenpunkt

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

wobei b (i) -> Unähnlichkeit vom nächsten benachbarten Cluster

a (i) -> Unähnlichkeit zwischen Punkten innerhalb des Clusters

Dies ergibt eine Punktzahl zwischen -1 und +1.

Deutung

+1 bedeutet sehr gute Passform

-1 bedeutet falsch klassifiziert [sollte zu einem anderen Cluster gehören]

Nachdem Sie die Silhouette-Punktzahl für jeden Datenpunkt berechnet haben, können Sie die Auswahl für die Anzahl der Cluster anrufen.

Codebeispiel

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
quelle
0

Ein Clustering-Qualitätsmaß wäre sehr schön zu haben. Leider ist dieses Maß schwer zu berechnen - wahrscheinlich AI-schwer. Sie versuchen, eine sehr komplexe Sache auf eine einzige Zahl zu reduzieren.

Wenn es AI-schwer ist, können Sie die Leute bitten, die Cluster irgendwie zu bewerten. Es ist nicht ideal und lässt sich nicht skalieren, aber Sie haben eine einzige Zahl, die etwas darstellt, das Ihren Wünschen entspricht.

Strahl
quelle
Ich denke nicht, dass das richtig ist. Ich kann einfach ein gut untersuchtes Textdokument in die Modelle einspeisen. Vergleichen Sie dann die Cluster-Mitgliedschaft mit meiner Erwartung.
HelloWorld
Ja. Verwenden Sie "Ihre" Erwartung, was Sie tun, wenn die Maßnahme AI-schwer ist. Sie würden ein besseres Maß erhalten, wenn Sie die Erwartungen anderer berücksichtigen.
Ray
Ich habe eine Idee. Ich kann versuchen, den Klassifikator zu trainieren und ihn mit Etiketten von verschiedenen Modellen mit der gleichen Anzahl von Clustern zu versehen. Je besser die Genauigkeit, desto besser das Modell.
Толкачёв Иван