![]() |
|
|
![]()
|
|
| mrgloom |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
появилась такая статья HEngine
но там используются бинарные векторы, а что если у нас есть обычные численные векторы и мы хотим осуществить поиск ближайшего соседа? Т.е. как преобразовать из численного вектора в бинарный? варианты: 1. на основании набора векторов, по каждой ячейке(числовой позиции например вектор vec={2 3 7} 3 позиции) вычислять среднее или медиану и соответственно если больше то 1, если меньше то 0. 2. кластеризовать вектора, взять k центров и смотреть расстояние до центров, если меньше dist то 1, если больше то 0 (соответственно тут мы получим сокращение размерности). непонятно правда как выбирать k и dist, в предельных случаях будем иметь пустой или очень разреженный вектор или всё в единицах ,а можно сначала заполнить новые вектора длины k расстояниями dist и сделать как в пункте 1. п.с. это похоже получается хэш-функция? но если так делать, то уже точное соответствие не найдешь, т.к. идёт потеря информации. п.с. как раз еще есть LSH есть так же развитой проект FLANN , но он так же Approximate Nearest Neighbors. Это сообщение отредактировал(а) mrgloom - 25.2.2014, 17:26 |
|||
|
||||
| Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 4 Всего: 17 |
Довольно забавный подход. Первый вопрос - какая у Вас задача.
Исходя из задачи выбирают расстояние. KNN необычайно чувствителен к выбору расстояния. Расстояние Хеминга пригодно только для качественных (категорийных) работ. В простейшем варианте - для бинарных данных. Если Вы работаете с действительными числами, то используйте другие расстояния - квадрат Эвклидова, расстояние Минковского, Манхеттенское и т.д и т.п. Их сотни описаны в литературе. Но увидев один метод подсчета чего-то очень быстро сводить свою задачу к этому чему-то несколько странно. -------------------- Mirkes |
|||
|
||||
| mrgloom |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
что значит качественных (категорийных) ?
У меня есть набор векторов интов, типа vec={12,1,2,4,23} (только большей размерности примерно 1к) Я использую стандартно евклидово расстояние(l2 distance). выше я предлагал свести вектор интов к бинарному вектору(по идее будет потеря информации). п.с. да я не силён в матане простанства, нормы и т.д. Это сообщение отредактировал(а) mrgloom - 4.3.2014, 17:28 |
|||
|
||||
| Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 4 Всего: 17 |
Это значит имеет несколько (мало) различных значений. Типичные примеры: пол, образование в анкете (среднее, среднее специальное, высшее). При преобразовании векторов из целых к бинарным может происходить потеря информации, а может не происходить. Сформулируйте задачу, что вы делаете с этими многомерными векторами? -------------------- Mirkes |
|||
|
||||
| mrgloom |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
||||
|
||||
| Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 4 Всего: 17 |
Я хорошо знаю задачу нахождения ближайшего соседа и KNN
Однако KNN это инструмент и не более. А какова задача? Поясняю. Пусть у нас МНОГО точек и нам нужно находить ближайших соседей для новых точек. В этом случае применяются специальные методы индексации точек для быстрого поиска соседей. Если множество базовых точек регулярно обновляется, это уже другая задача. Теперь по поводу 1000 мерных векторов. Есть хорошая статья о применимости KNN в этой ситуации: Beyer, K.; Goldstein, J.; Ramakrishnan, R.; Shaft, U. (1999). "When is “Nearest Neighbor” Meaningful?". Proc. 7th International Conference on Database Theory - ICDT'99. LNCS 1540: 217–235. doi:10.1007/3-540-49257-7_15. ISBN 978-3-540-65452-0 Кроме того, Вы так и не сформулировали задачу Зачем Вам ближайшие соседи? Или это просто самоцель? -------------------- Mirkes |
|||
|
||||
| mrgloom |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
задача: поиск похожих объектов в базе, типа CBIR
изначально, да.
оно может обновляться, но не по 1 точке, а групами точек, я так понимаю, просто при очередном добавлении придётся перестраивать индекс.
http://en.wikipedia.org/wiki/Curse_of_dimensionality что то такое читал |
||||||
|
|||||||
| Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 4 Всего: 17 |
Вот с таким я не работал, так что посоветовать ничего не могу. Насчет проклятия размерности - с ним очень даже можно бороться путем уменьшения пространства признаков (dimension reduction, feature selection). Однако все эти методы сильно зависят от конкретной задачи (набора признаков) и потребуют большого числа экспериментов для определения нужного поднабора признаков. Желаю удачи. -------------------- Mirkes |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |