Ich habe einen großen Datensatz und eine Kosinusähnlichkeit zwischen ihnen. Ich möchte sie mit Cosinus-Ähnlichkeit gruppieren, die ähnliche Objekte zusammenfügt, ohne vorher die Anzahl der erwarteten Cluster angeben zu müssen.
Ich habe die sklearn-Dokumentation von DBSCAN und Affinity Propagation gelesen, in der beide eine Distanzmatrix (keine Kosinus-Ähnlichkeitsmatrix) benötigen.
Wirklich, ich suche nur nach einem Algorithmus, der nicht a) eine Entfernungsmetrik und b) eine vorgegebene Anzahl von Clustern erfordert .
Kennt jemand einen Algorithmus, der das tun würde?
quelle
DBSCAN kann trivial mit einem Ähnlichkeitsmaß anstelle einer Entfernung implementiert werden. Sie müssen nur das <= Epsilon in ein> = Epsilon ändern.
HAC funktioniert auch gut mit Ähnlichkeiten (mindestens Single-Link, Complete-Link, UPGMA, WPGMA - verwenden Sie nicht Ward), wenn Sie "min" und "max" tauschen (Sie möchten mit maximaler Ähnlichkeit und nicht mit minimaler Ähnlichkeit zusammenführen Entfernung).
Wenn Sie faul sind, können Sie Ihre Ähnlichkeit auch einfach in eine Distanz verwandeln. Wenn Sie ein festes Maximum haben, reicht dist = max-sim oft aus.
quelle
SimilarityNeighborPredicate
.Ich würde das hierarchische Clustering von sklearn verwenden
C
ist Ihr Clustering der Dokumentedocs
.Sie können stattdessen andere Metriken verwenden
cosine
und einen anderen Schwellenwert als verwenden0.1
quelle
docs
sind die Dokumente,Z
ist die Kosinus-ÄhnlichkeitsmatrixIch denke, das clustMixType- Paket könnte Ihnen bessere Ergebnisse / Erkenntnisse liefern.
Wenn Sie dieses Paket verwenden , können Sie die Kombination von kategorialen und numerischen Daten direkt verwenden. Es ist keine Hot-Codierung erforderlich.
Sie müssen nur die Daten eingeben und sie werden automatisch in kategoriale und numerische Daten getrennt. Wenn Sie zum Zeitpunkt der Trennung Probleme feststellen, können Sie Funktionen wie
as.factor(to convert to a categorical)
und verwendenas.numeric(to convert to a Numeric field)
.Sie können
Lambda(mean Distance value)
vorab berechnen und als Eingabe in den Algorithmus eingeben.Wenn Sie nicht die optimale Anzahl von Clustern kennen, können Sie verwenden
WSS(within Sum of Squares)
, umplot(elbow chart)
die optimale Anzahl von Clustern zu entscheiden.quelle
Alle Clustering-Methoden verwenden eine Entfernungsmetrik. Und denken Sie daran, dass die Entfernung im Wesentlichen ein Unähnlichkeitsmaß ist. Wenn Sie also Ihre Ähnlichkeit zwischen 0 und 1 normalisieren, beträgt Ihre Entfernung einfach 1-Ähnlichkeit
Für Algorithmen, für die keine Anzahl von Clustern angegeben werden muss, gibt es natürlich hierarchische Clustering-Techniken, die im Wesentlichen eine baumartige Struktur erstellen, die Sie nach Belieben "schneiden" können (Sie können einige Leistungsmetriken verwenden, um dies automatisch zu tun )
X-means ist eine Version von K-means, die eine bestimmte Anzahl von K versucht und diejenige auswählt, die eine Bewertungsfunktion maximiert.
Die mittlere Verschiebung "findet" auch eine natürliche Anzahl von Clustern, ist jedoch für andere Parameter wie beispielsweise die Bandbreite sinnvoll.
quelle