Der Fluch der Dimensionalität hindert uns hier daran. Du könntest in Betracht ziehen, Principal Component Analysis (PCA) anzuwenden, um die Dimensionalität zu reduzieren, aber soweit ich weiß, hat niemand eine großartige Antwort darauf.
Ich habe mich mit diesem Problem bereits beschäftigt (in Audio- und Video-Fingerprinting), manchmal sogar mit bis zu 30 Dimensionen. Die Analyse ergab in der Regel, dass einige der Dimensionen keine relevanten Informationen für Suchvorgänge enthielten (eigentlich unscharfe Suchvorgänge, mein Hauptziel), also habe ich sie aus den Indexstrukturen ausgelassen, die für den Zugriff auf die Daten verwendet wurden, aber in der Logik zur Bestimmung von Übereinstimmungen aus einer Liste von Kandidaten, die während der Suche gefunden wurden, eingeschlossen. Dadurch wurde die Dimensionalität effektiv auf ein handhabbares Niveau reduziert.
Ich habe die Dinge weiter vereinfacht, indem ich die verbleibenden Dimensionen stark quantisiert habe, so dass der gesamte multidimensionale Raum in eine 32-Bit-Ganzzahl abgebildet wurde. Ich habe dies als Schlüssel in einer STL-Map (einem Rot-Schwarz-Baum) verwendet, obwohl ich auch eine Hashtabelle hätte verwenden können. Ich konnte Millionen von Datensätzen dynamisch zu einer solchen Struktur (natürlich basierend auf RAM) in etwa einer Minute oder zwei hinzufügen, und Suchvorgänge dauerten im Durchschnitt etwa eine Millisekunde, obwohl die Daten keineswegs gleichmäßig verteilt waren. Suchvorgänge erforderten eine sorgfältige Aufzählung von Werten in den Dimensionen, die in den 32-Bit-Schlüssel abgebildet waren, waren jedoch zuverlässig genug, um sie in einem kommerziellen Produkt zu verwenden. Ich glaube, dass es auch heute noch in iTunes Match verwendet wird, wenn meine Quellen stimmen. :)
Letztendlich empfehle ich Ihnen, sich Ihre Daten anzusehen und etwas Individuelles daraus zu machen, das Merkmale ausnutzt, um eine schnelle Indizierung und Suche zu ermöglichen. Finden Sie die Dimensionen, die am meisten variieren und am unabhängigsten voneinander sind. Quantisieren Sie diese und verwenden Sie sie als Schlüssel in einem Index. Jeder Eimer im Index enthält alle Elemente, die diesen Schlüssel teilen (wahrscheinlich mehr als einen). Um die nächsten Nachbarn zu finden, betrachten Sie "nahegelegene" Schlüssel und suchen Sie innerhalb jedes Eimers nach nahegelegenen Werten. Viel Glück.
p.s. Ich habe eine Arbeit über meine Technik verfasst, die hier verfügbar ist. Entschuldigen Sie die Paywall. Vielleicht können Sie anderswo eine kostenlose Kopie finden. Lassen Sie mich wissen, wenn Sie Fragen dazu haben.