Гетча з цим питанням "довільнаметрика ". Якщо ви не знаєте, що це, це просто спосіб вимірювання відстані між точками. (У" реальному "світі 1-розмірне відстань - це лише абсолютна величина різниці між двома точками ).
Досить попередніх лім. Я намагаюся знайти алгоритм швидкого k найближчого сусіда з цими властивостями:
- працює на довільній метриці
- дещо простий у виконанні
- оптимізовано для знаходження відстані набору точок до іншого набору точок
Вікіпедія дає список алгоритмів та підходів, але нічого не стосується реалізації.
ОНОВЛЕННЯ: метрика - це схожість косинусів, яка є ні задовольнити запитання трикутника. Однак, здається, я можу використати "кутову схожість" (відповідно до Вікіпедії).
ОНОВЛЕННЯ: випадок використання - це обробка природної мови. "Вектори" - це "контекст" даного слова, представлений бінарними властивостями (наприклад: назва документа). Отже, хоча може бути лише декілька властивостей (зараз я просто використовую 3), кожен вектор має довільно великий розмір (у прикладі заголовка кожен заголовок у базі даних відповідав би розміру у векторі).
ОНОВЛЕННЯ: Для допитливих я реалізую цей алгоритм:
http://josquin.cs.depaul.edu/~mramezani/papers/IEEEIS.pdf
ОНОВЛЕННЯ: Алгоритм повинен буде знайти найближчих сусідів приблизно з десяток балів приблизно з 100s балів. Середній вимір, ймовірно, буде дуже великим, скажімо, 50 (я насправді ще не знаю). І так, мене цікавить алгоритм, а не бібліотека. І так, оцінки, мабуть, досить хороші.
Відповіді:
1 для відповіді № 1Я б радив вам перейти на "Місцевий стан"хешинг (LSH), який зараз в тренді. Це зменшує розмірність даних високих розмірів, але я не впевнений, чи буде ваш параметр добре відповідати цьому алгоритму. Дивіться Вікіпедію сторінка для більш.
Ви можете використовувати власну метрику, але загалом це можна зробити в багатьох алгоритмах. Сподіваюся, це допомагає.
Ви можете поїхати за деревами RKD, лісом з них, але, можливо, зараз це занадто багато.