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 )
Die Kosinähnlichkeit sim(a,b)
ist im Zusammenhang mit der euklidischen Entfernung |a - b|
von
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.
Sie können mit dem Projekt simbase Ссылка nachsehen, es handelt sich um eine vektorähnliche nosql-Datenbank.
Simbase verwendet die folgenden Konzepte:
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%Tags und Links algorithm math cosine-similarity