Поиск ближайшего соседа ( NNS ), как форма поиска близости , является задачей оптимизации поиска точки в заданном наборе, которая ближе всего (или наиболее похожа) на заданную точку. Близость обычно выражается в терминах функции несходства: чем менее похожи объекты, тем больше значения функции.
Формально задача поиска ближайшего соседа (NN) определяется следующим образом: задано множество S точек в пространстве M и точка запроса q ∈ M , найти ближайшую точку в S к q . Дональд Кнут в т. 3 книги «Искусство программирования» (1973) назвал ее задачей почтового отделения , имея в виду приложение назначения ближайшему почтовому отделению места жительства. Прямым обобщением этой задачи является поиск k -NN, где нам нужно найти k ближайших точек.
Чаще всего M является метрическим пространством , а несходство выражается как метрика расстояния , которая симметрична и удовлетворяет неравенству треугольника . Еще чаще M принимается как d -мерное векторное пространство , где несходство измеряется с помощью евклидова расстояния , манхэттенского расстояния или другой метрики расстояния . Однако функция несходства может быть произвольной. Одним из примеров является асимметричная дивергенция Брегмана , для которой неравенство треугольника не выполняется. [1]
Задача поиска ближайшего соседа возникает во многих областях применения, в том числе:
Были предложены различные решения проблемы NNS. Качество и полезность алгоритмов определяются временной сложностью запросов, а также пространственной сложностью любых структур данных поиска, которые необходимо поддерживать. Неформальное наблюдение, обычно называемое проклятием размерности, гласит, что не существует универсального точного решения для NNS в многомерном евклидовом пространстве с использованием полиномиальной предварительной обработки и полилогарифмического времени поиска.
Простейшим решением проблемы NNS является вычисление расстояния от точки запроса до каждой другой точки в базе данных, отслеживая «лучшее на данный момент». Этот алгоритм, иногда называемый наивным подходом, имеет время выполнения O ( dN ), где N — мощность S , а d — размерность S . Нет структур данных поиска, которые нужно поддерживать, поэтому линейный поиск не имеет пространственной сложности за пределами хранилища базы данных. Наивный поиск может, в среднем, превосходить подходы с разделением пространства на пространствах более высокой размерности. [5]
Для сравнения расстояний не требуется абсолютное расстояние, требуется только относительное. В геометрических системах координат расчет расстояния можно значительно ускорить, исключив вычисление квадратного корня из расчета расстояния между двумя координатами. Сравнение расстояний все равно даст идентичные результаты.
С 1970-х годов к проблеме применяется метод ветвей и границ . В случае евклидова пространства этот подход охватывает пространственный индекс или методы пространственного доступа. Для решения проблемы NNS было разработано несколько методов разбиения пространства . Возможно, самым простым является дерево kd , которое итеративно делит пространство поиска на две области, содержащие половину точек родительской области. Запросы выполняются посредством обхода дерева от корня до листа путем оценки точки запроса при каждом разбиении. В зависимости от расстояния, указанного в запросе, может также потребоваться оценка соседних ветвей, которые могут содержать попадания. Для времени запроса постоянного измерения средняя сложность составляет O (log N ) [6] в случае случайно распределенных точек, сложность в худшем случае составляет O ( kN ^(1-1/ k )) [7] В качестве альтернативы структура данных R-дерева была разработана для поддержки поиска ближайшего соседа в динамическом контексте, поскольку она имеет эффективные алгоритмы для вставок и удалений, такие как дерево R* . [8] R-деревья могут выдавать ближайших соседей не только для евклидова расстояния, но и могут использоваться с другими расстояниями.
В случае общего метрического пространства подход ветвей и границ известен как подход метрического дерева . Конкретные примеры включают методы vp-tree и BK-tree .
Используя набор точек, взятых из трехмерного пространства и помещенных в дерево BSP , и заданную точку запроса, взятую из того же пространства, возможное решение задачи поиска ближайшей точки облака точек к точке запроса дается в следующем описании алгоритма.
(Строго говоря, такой точки может не быть, потому что она может быть не уникальной. Но на практике обычно нас интересует только нахождение любой из подмножества всех точек облака точек, которые существуют на кратчайшем расстоянии от заданной точки запроса.) Идея состоит в том, чтобы для каждого разветвления дерева предположить, что ближайшая точка в облаке находится в полупространстве, содержащем точку запроса. Это может быть не так, но это хорошая эвристика. После рекурсивного прохождения всех трудностей решения задачи для угаданного полупространства теперь сравните расстояние, возвращаемое этим результатом, с кратчайшим расстоянием от точки запроса до плоскости разбиения. Это последнее расстояние — это расстояние между точкой запроса и ближайшей возможной точкой, которая может существовать в полупространстве, в котором не производился поиск. Если это расстояние больше, чем возвращенное в предыдущем результате, то, очевидно, нет необходимости искать в другом полупространстве. Если есть такая необходимость, то вы должны пройти через трудности решения проблемы для другого полупространства, а затем сравнить его результат с предыдущим результатом, а затем вернуть правильный результат. Производительность этого алгоритма ближе к логарифмическому времени, чем к линейному времени, когда точка запроса находится вблизи облака, потому что, поскольку расстояние между точкой запроса и ближайшей точкой облака точек приближается к нулю, алгоритму нужно только выполнить поиск, используя точку запроса в качестве ключа, чтобы получить правильный результат.
Приблизительный алгоритм поиска ближайшего соседа позволяет возвращать точки, расстояние которых от запроса в большинстве случаев больше расстояния от запроса до его ближайших точек. Привлекательность этого подхода заключается в том, что во многих случаях приблизительный ближайший сосед почти так же хорош, как и точный. В частности, если мера расстояния точно отражает понятие качества пользователя, то небольшие различия в расстоянии не должны иметь значения. [9]
Методы графов близости (такие как навигационные графы малого мира [10] и HNSW [11] [12] ) считаются на данный момент передовыми методами приблизительного поиска ближайших соседей.
Методы основаны на жадном обходе в графах окрестностей близости , в которых каждая точка однозначно связана с вершиной . Поиск ближайших соседей к запросу q в множестве S принимает форму поиска вершины в графе . Основной алгоритм — жадный поиск — работает следующим образом: поиск начинается с вершины точки входа путем вычисления расстояний от запроса q до каждой вершины его окрестности , а затем находит вершину с минимальным значением расстояния. Если значение расстояния между запросом и выбранной вершиной меньше, чем между запросом и текущим элементом, то алгоритм переходит к выбранной вершине, и она становится новой точкой входа. Алгоритм останавливается, когда достигает локального минимума: вершины, окрестность которой не содержит вершины, которая ближе к запросу, чем сама вершина.
Идея графов близости соседей была использована в многочисленных публикациях, включая основополагающую работу Арьи и Маунта [13] в системе VoroNet для плоскости, [14] в системе RayNet для , [15] и в алгоритмах Navigable Small World, [10] Metrized Small World [16] и HNSW [11] [12] для общего случая пространств с функцией расстояния. Этим работам предшествовала пионерская работа Туссэна, в которой он ввел концепцию графа относительной близости . [17]
Хеширование с учетом локальности (LSH) — это метод группировки точек в пространстве в «корзины» на основе некоторой метрики расстояния, действующей на точки. Точки, которые находятся близко друг к другу в рамках выбранной метрики, сопоставляются с одной и той же корзиной с высокой вероятностью. [18]
Дерево покрытия имеет теоретическую границу, которая основана на константе удвоения набора данных. Граница времени поиска составляет O ( c 12 log n ), где c — константа расширения набора данных.
В особом случае, когда данные представляют собой плотную 3D-карту геометрических точек, проекционная геометрия метода зондирования может быть использована для значительного упрощения проблемы поиска. Этот подход требует, чтобы 3D-данные были организованы путем проекции на двумерную сетку, и предполагает, что данные пространственно гладкие по соседним ячейкам сетки, за исключением границ объектов. Эти предположения справедливы при работе с данными 3D-датчиков в таких приложениях, как геодезия, робототехника и стереозрение, но могут не выполняться для неорганизованных данных в целом. На практике этот метод имеет среднее время поиска O ( 1 ) или O ( K ) для задачи k -ближайшего соседа при применении к данным стереозрения реального мира. [4]
В многомерных пространствах структуры индексации деревьев становятся бесполезными, поскольку все больший процент узлов необходимо исследовать в любом случае. Для ускорения линейного поиска сжатая версия векторов признаков, хранящихся в оперативной памяти, используется для предварительной фильтрации наборов данных в первом запуске. Окончательные кандидаты определяются на втором этапе с использованием несжатых данных с диска для расчета расстояния. [19]
Подход VA-файла является особым случаем поиска на основе сжатия, где каждый компонент признака сжимается равномерно и независимо. Оптимальным методом сжатия в многомерных пространствах является векторное квантование (VQ), реализованное посредством кластеризации. База данных кластеризована, и извлекаются наиболее «многообещающие» кластеры. Были отмечены огромные преимущества по сравнению с VA-файлом, индексами на основе дерева и последовательным сканированием. [20] [21] Также обратите внимание на параллели между кластеризацией и LSH.
Существует множество вариантов задачи NNS, и два наиболее известных — это поиск k -ближайших соседей и поиск ε-приближенных ближайших соседей .
Поиск k -ближайших соседей определяет k- ближайших соседей для запроса. Этот метод обычно используется в предиктивной аналитике для оценки или классификации точки на основе консенсуса ее соседей. Графы k -ближайших соседей — это графы, в которых каждая точка связана со своими k- ближайшими соседями.
В некоторых приложениях может быть приемлемо получить "хорошее предположение" о ближайшем соседе. В таких случаях мы можем использовать алгоритм, который не гарантирует возврата фактического ближайшего соседа в каждом случае, в обмен на улучшение скорости или экономию памяти. Часто такой алгоритм находит ближайшего соседа в большинстве случаев, но это сильно зависит от запрашиваемого набора данных.
Алгоритмы, которые поддерживают приблизительный поиск ближайшего соседа, включают локально-чувствительное хеширование , поиск по лучшему корню и сбалансированное дерево на основе разложения ящиков. [22]
Коэффициент расстояния ближайшего соседа не применяет порог к прямому расстоянию от исходной точки до соседа-претендента, а к его отношению в зависимости от расстояния до предыдущего соседа. Он используется в CBIR для извлечения изображений через «запрос по образцу», используя сходство между локальными особенностями. В более общем плане он участвует в нескольких задачах сопоставления .
Ближайшие соседи с фиксированным радиусом — это проблема, в которой требуется эффективно найти все заданные точки в евклидовом пространстве в пределах заданного фиксированного расстояния от указанной точки. Расстояние предполагается фиксированным, но точка запроса произвольна.
Для некоторых приложений (например, оценка энтропии ) у нас может быть N точек данных и мы хотим узнать, какой из них является ближайшим соседом для каждой из этих N точек . Конечно, этого можно достичь, запустив поиск ближайшего соседа один раз для каждой точки, но улучшенной стратегией был бы алгоритм, который использует избыточность информации между этими N запросами для получения более эффективного поиска. Простой пример: когда мы находим расстояние от точки X до точки Y , это также сообщает нам расстояние от точки Y до точки X , поэтому одно и то же вычисление можно повторно использовать в двух разных запросах.
При наличии фиксированного измерения, полуопределенной положительной нормы (тем самым включающей каждую норму L p ) и n точек в этом пространстве ближайший сосед каждой точки может быть найден за время O ( n log n ), а m ближайших соседей каждой точки могут быть найдены за время O ( mn log n ). [23] [24]
{{cite journal}}
: Цитировать журнал требует |journal=
( помощь )