Проклятье Размерности мешает здесь.Возможно, вы захотите применить Анализ основных компонентов ( PCA ), чтобы уменьшить размерность, но, насколько я знаю, никто не может дать на это хороший ответ.
Я имел дело с этим типом проблемыдо (в аудио и видео снятии отпечатков пальцев), иногда до 30 измерений.Анализ обычно показал, что некоторые измерения не содержат релевантной информации для поиска (фактически, нечеткие поиски, моя главная цель), поэтому я исключил их из структур индекса, используемых для доступа к данным, но включил их в логику для определения совпадений изсписок кандидатов, найденных при поиске.Это эффективно уменьшило размерность до приемлемого уровня.
Я еще больше упростил задачу, строго квантовав оставшиеся измерения, так что все многомерное пространство было отображено в 32-разрядное целое число.Я использовал это как ключ в карте STL (красно-черное дерево), хотя я мог бы использовать хеш-таблицу.Мне удалось динамически добавить миллионы записей в такую структуру (конечно, на основе ОЗУ) примерно за одну или две минуты, и поиск занимал в среднем около миллисекунды, хотя данные ни в коем случае не были распределены равномерно.Поиск требовал тщательного перечисления значений в измерениях, которые были сопоставлены с 32-разрядным ключом, но были достаточно надежными для использования в коммерческом продукте.Я считаю, что он используется по сей день в iTunes Match, если мои источники верны.:)
Суть в том, что я рекомендую вам взглянуть на ваши данные и сделать что-то особенное, что использует в них функции для быстрой индексации и поиска.Найти размеры, которые наиболее различаются и являются наиболее независимыми друг от друга.Квантовать их и использовать их в качестве ключа в индексе.Каждое ведро в индексе содержит все элементы, которые разделяют этот ключ (вероятно, их будет больше одного).Чтобы найти ближайших соседей, посмотрите на «близлежащие» ключи и в каждом сегменте найдите близлежащие значения.Удачи.
ps Я написал статью о своей технике, доступно здесь .Извините за платный доступ.Возможно, вы можете найти бесплатную копию в другом месте.Дайте мне знать, если у вас есть какие-либо вопросы по этому поводу.