2017-06-26 4 views

Antwort

0

Der KMeans-Algorithmus basiert auf der euklidischen Entfernung und kann die Kosinusentfernung nicht direkt verwenden. Here ist eine gute Erklärung für diese Tatsache:

K-Means implizit paarweise euklidische Distanzen basiert b/w-Datenpunkte, da die Summe der quadrierten Abweichungen vom Zentroid euklidischen Abstände aufgeteilt auf die Summe der paarweise quadriert gleich durch die Anzahl der Punkte.

Wenn Sie den Cosinus-Abstand (oder eine andere Metrik) verwenden möchten, ist KMedoids eine gute Option. Es ist KMeans ähnlich, verwendet aber den Median anstelle des Mittelwerts im Aktualisierungsschritt. Dies erlaubt die Verwendung von beliebigen Distanzmetriken.

0

Ich implementierte meine eigene Version von K-Means auf Spark, die Standard-TF-IDF-Vektordarstellung und (-Ve) Kosinusähnlichkeit als Abstandsmetrik code snippet for reference verwendet. Die Ergebnisse von diesem k-Mittel sehen richtig aus, nicht so verzerrt wie Spark k-means. figure 1 and 2 Zusätzlich habe ich experimentiert, indem ich die euklidische Distanz als Ähnlichkeitsmetrik (in meine eigene Version von k-Mittelwert) eingefügt habe und die Ergebnisse weiterhin richtig aussehen, überhaupt nicht so verzerrt wie Spark k-means. Die Ergebnisse zeigen, dass es nicht mit Abstand messen, aber ein anderer Fall mit Sparks K-Mittel Umsetzung (scala mllib)

+0

Wie Sie die Kosinus-Metrik in Kmeans Funktion einfügen? – Charleslmh

+0

Da die Entfernungsmetrikfunktion eine private Methode in spark kmean ist, können keine anderen Metriken (Kosinus für diese Angelegenheit) eingesteckt werden. Und fwiw, es ist kein Problem mit der Entfernungsmetrik, aber ein Fehler in der kmean Implementierung selbst, experimentierte ich mit Beide Distanzmetriken (Kosinus sowie euklidisch) in meiner eigenen benutzerdefinierten Implementierung (entwickelt auf Spark) und erhalten bessere Qualität Cluster im Gegensatz zu Funken kmean. – rajanim

Verwandte Themen