5

Wie die Kosinusähnlichkeit (http://en.wikipedia.org/wiki/Cosine_similarity)Kosinusähnlichkeit wenn einer der Vektoren nur Nullen

auszudrücken, wenn einer der Vektoren nur Nullen?

v1 = [1, 1, 1, 1, 1]

v2 = [0, 0, 0, 0, 0]

Wenn wir in der klassischen Formel berechnen nach bekommen wir eine Division durch null:

Let d1 = 0 0 0 0 0 0 
Let d2 = 1 1 1 1 1 1 
Cosine Similarity (d1, d2) = dot(d1, d2)/||d1|| ||d2||dot(d1, d2) = (0)*(1) + (0)*(1) + (0)*(1) + (0)*(1) + (0)*(1) + (0)*(1) = 0 

||d1|| = sqrt((0)^2 + (0)^2 + (0)^2 + (0)^2 + (0)^2 + (0)^2) = 0 

||d2|| = sqrt((1)^2 + (1)^2 + (1)^2 + (1)^2 + (1)^2 + (1)^2) = 2.44948974278 

Cosine Similarity (d1, d2) = 0/(0) * (2.44948974278) 
          = 0/0 

Ich möchte dieses Ähnlichkeitsmaß in einer Clusteranwendung verwenden. Und ich werde oft solche Vektoren vergleichen müssen. Auch [0, 0, 0, 0, 0] vs. [0, 0, 0, 0, 0]

Haben Sie Erfahrung? Da dies eine Ähnlichkeit (keine Entfernung) Maßnahme ist, sollte ich Sonderfall für

d verwenden ([1, 1, 1, 1, 1]; [0, 0, 0, 0, 0]) = 0

d ([0, 0, 0, 0, 0]; [0, 0, 0, 0, 0]) = 1

was über

d ([1, 1, 1 , 0, 0]; [0, 0, 0, 0, 0]) =? usw.

Antwort

8

Wenn Sie 0 Vektoren haben, ist Cosine die falsche Ähnlichkeitsfunktion für Ihre Anwendung.

Der Kosinusabstand entspricht im Wesentlichen dem quadrierten euklidischen Abstand auf normalisierten L_2-Daten. I.e. Sie normalisieren jeden Vektor auf Einheitslänge 1 und berechnen dann quadrierten euklidischen Abstand.

Der andere Vorteil von Cosine ist Leistung - Berechnung es auf sehr spärlich, hochdimensionale Daten ist schneller als euklidische Entfernung. Es profitiert von der Sparsity zum Quadrat, nicht nur linear.

Während Sie offensichtlich versuchen können, die Ähnlichkeit zu 0 zu hacken, wenn genau eins Null ist, und maximal, wenn sie identisch sind, löst es nicht wirklich die zugrunde liegenden Probleme.

Wählen Sie nicht die Entfernung durch, was Sie leicht berechnen können.

Wählen Sie stattdessen die Entfernung, so dass das Ergebnis bedeutet auf Ihre Daten. Wenn der Wert undefined ist, haben Sie keine Bedeutung ...

Manchmal kann es funktionieren, Constant-0-Daten als bedeutungslose Daten sowieso zu verwerfen (z. B. Twitter-Rauschen zu analysieren, und einen Tweet zu sehen, der alle Zahlen ist, keine Worte). Manchmal nicht.

1

Es ist nicht definiert.

Denken Sie, Sie haben einen Vektor C, der nicht null ist, an Stelle Ihres Nullvektors. Multiplizieren Sie es mit Epsilon> 0 und lassen Sie Epsilon auf Null laufen. Das Ergebnis hängt von C ab, daher ist die Funktion nicht kontinuierlich, wenn einer der Vektoren Null ist.

Verwandte Themen