web-dev-qa-db-de.com

Verständnis der "Punktzahl", die von scikit-learn KMeans zurückgegeben wird

Ich habe Clustering auf eine Reihe von Textdokumenten angewendet (ca. 100). Ich konvertierte sie mit Tfidf in TfIdfVectorizer-Vektoren und lieferte die Vektoren als Eingabe an scikitlearn.cluster.KMeans(n_clusters=2, init='k-means++', max_iter=100, n_init=10). Jetzt wenn ich

model.fit()
print model.score()

bei meinen Vektoren bekomme ich einen sehr kleinen Wert, wenn alle Textdokumente sehr ähnlich sind, und einen sehr großen negativen Wert, wenn die Dokumente sehr unterschiedlich sind.

Es dient meinem grundlegenden Zweck, herauszufinden, welcher Satz von Dokumenten ähnlich ist, aber kann mir jemand helfen zu verstehen, was genau dieser Wert von model.score() für einen Fit bedeutet? Wie kann ich diesen Wert verwenden, um meine Ergebnisse zu rechtfertigen?

14
Prateek Dewan

In der Dokumentation heißt es:

Returns:    
score : float
Opposite of the value of X on the K-means objective.

Um zu verstehen, was das bedeutet, müssen Sie sich den Algorithmus von K-Means ansehen. Im Wesentlichen macht k-mittel Cluster-Zentren, die die Summe der Entfernungen zwischen Datenmustern und den zugehörigen Cluster-Zentren minimieren.

Dies ist ein zweistufiger Prozess, bei dem (a) jede Datenprobe ihrem nächstgelegenen Clusterzentrum zugeordnet ist, (b) Clusterzentren so eingestellt sind, dass sie in der Mitte aller ihnen zugeordneten Proben liegen. Diese Schritte werden wiederholt, bis ein Kriterium (maximale Anzahl von Iterationen/Min. Zwischen den letzten zwei Iterationen) erfüllt ist.

Wie Sie sehen, bleibt ein Abstand zwischen den Datenmustern und den zugehörigen Clusterzentren und das Ziel unserer Minimierung ist dieser Abstand (Summe aller Abstände).

Sie erhalten natürlich große Entfernungen, wenn Sie eine große Anzahl von Datenstichproben haben, wenn die Anzahl der Datenstichproben deutlich höher ist als die Anzahl der Cluster, die in Ihrem Fall nur zwei ist. Im Gegenteil, wenn alle Datenproben gleich wären, würden Sie unabhängig von der Anzahl der Cluster immer einen Abstand von Null erhalten.

Aus der Dokumentation würde ich jedoch erwarten, dass alle Werte negativ sind. Wenn Sie sowohl negative als auch positive Werte beobachten, ist der Score möglicherweise mehr.

Ich frage mich jedoch, wie Sie auf die Idee gekommen sind, sich in zwei Cluster zu gruppieren.

7
ypnos

ypnos hat recht, Sie finden hier einige Details: https://github.com/scikit-learn/scikit-learn/blob/51a765a/sklearn/cluster/k_means_.py#L893

inertia : float
    Sum of distances of samples to their closest cluster center.
"""
4
Mark Yang

Das in der Dokumentation gewählte Wort ist etwas verwirrend. Es heißt "Gegenüber dem Wert von X auf dem K-Means-Ziel.". 

K-Means-Ziel

Das Ziel in den K-Mitteln besteht darin, die Summe der Quadrate der Abstände der Punkte von ihren jeweiligen Cluster-Schwerpunkten zu reduzieren. Es hat andere Namen wie J-Squared-Fehlerfunktion, J-Score oder Quadratsumme innerhalb des Clusters. Dieser Wert gibt an, wie intern die Cluster sind. (Je weniger desto besser)

Die Zielfunktion kann direkt aus der folgenden Methode erhalten werden.

model.interia_

0