Die beste Kosinusähnlichkeit in einem Vektorsatz finden

8

Ich habe n Vektoren mit jeweils m Elementen (reelle Zahl). Ich möchte das Paar finden, in dem die Kosinusähnlichkeit unter allen Paaren maximal ist.

Die einfache Lösung würde O (n 2 ) Zeit erfordern.

Gibt es eine bessere Lösung?

update

Kosinusähnlichkeit / Distanz- und Dreiecksgleichung inspiriert mich, dass ich könnte "Kosinusähnlichkeit" mit "Sehnenlänge" ersetzen, die  verliert Präzision, erhöht aber die Geschwindigkeit sehr. (Es gibt viele existierende Lösungen, die den nächsten Nachbarn im metrischen Raum lösen, wie ANN )

    
hs3180 01.12.2012, 16:39
quelle

2 Antworten

10

Die Kosinähnlichkeit sim(a,b) ist im Zusammenhang mit der euklidischen Entfernung |a - b| von

%Vor%

für die Einheitsvektoren a und b .

Das bedeutet, dass die Kosinusähnlichkeit am größten ist, wenn die euklidische Distanz nach Normierung durch die L2-Norm am kleinsten ist, und das Problem sich auf das nächstliegende Paar reduziert Punkte-Problem , das in O (n lg n) -Zeit gelöst werden kann.

    
Fred Foo 01.12.2012, 17:58
quelle
0

Sie können mit dem Projekt simbase Ссылка nachsehen, es handelt sich um eine vektorähnliche nosql-Datenbank.

Simbase verwendet die folgenden Konzepte:

  • Vektorsatz: eine Reihe von Vektoren
  • Basis: Die Basis für Vektoren, Vektoren in einem Vektorsatz haben die gleiche Basis
  • Empfehlung: eine binäre Ein-Richtungs-Beziehung zwischen zwei Vektormengen, die die gleiche Basis haben

Sie können redis-cli direkt für Verwaltungsaufgaben verwenden, oder Sie können Client-Bindungen in verschiedenen Programmiersprachen direkt in einer Programmiersprache verwenden. Hier ist ein Python-Beispiel

%Vor%     
Mountain 12.06.2014 15:10
quelle