k-d дерево, эффективное для поиска kNN. k ближайшие соседи ищут

Я должен реализовать k ближайших соседей, ищут 10 размерных данных в kd-дереве.

Но проблема состоит в том, что мой алгоритм очень быстр для k=1, но так же как 2000x медленнее для k> 1 (k=2,5,10,20,100)

Действительно ли это нормально для kd деревьев, или я делаю что-то неправильно?

9
задан Andraz 9 January 2010 в 17:24
поделиться

2 ответа

Вернувшись в 2002 году, когда я был прямым из колледжа, и работа было мало и далеко между до Dot-Com Bust, я присоединился к сервисной компании, которая использовалась для создания программного обеспечения для их клиентов в Java. Мне пришлось сидеть в кабинете клиента (который был Ramshackle Room в электрической подзаконе, оснащенной AC, чтобы сохранить работу серверов), совместно используя стулья / шт с другими парнями в команде. Другие инженеры (если я смогу позвонить им инженеров;) в группе, используемой для внесения изменений AD-HOC для исходного кода, компилируйте файлы и помещают их в производство.

  • Нет способа выяснить, кто сделал то, что изменилось.
  • Нет способа выяснить, почему любые изменения были сделаны.
  • Нет способа перейти к предыдущей версии кода, если только инженер не «запомнил», что он изменен.
  • Резервное копирование: скопируйте файлы с производственного сервера, которые были заменены новыми файлами.
  • Местоположение резервного копирования: домашний каталог инженера, копируя файлы на производственный сервер.

Отчеты о производственных серверах, происходящих из-за неудачных попыток копирования на файлы на сервер (пропущенный файл, который будет скопирован, резервные копии, полученные потерянные или неправильные файлы, скопированные или не все файлы, скопированные), были встречены с пожиманием (О нет, это вниз? Давайте посмотрим, что произошло; Эй, кто изменил то, что недавно ... УМММ ...).

В те дни, проведев несколько разочаровывающих дней, пытаясь выяснить, кто и сжимается за кодом, я разработал систему для комментариев в списке в заголовке исходного файла, который подробно описан следующее:

  1. Дата Изменения, сделанные
  2. , которые сделали изменение
  3. , почему было сделано изменение

через два месяца спустя, когда список угрожал оспаривать размер исходного кода в файле, менеджер имел яркое представление о получении источника Система управления версиями.

Мне никогда не нужно было поместить какие-либо комментарии в заголовки исходных файлов (за исключением уведомлений об авторских правах) в любой компании, с которой я работал с тех пор. В моей нынешней компании все остальное в основном самоочевидно, глядя на код или собираюсь в систему отчетности ошибок, которая интегрирована с системой управления исходной версией.

-121--2498563-

Ну, он в первую очередь зависит от вашей конкретной реализации и набора данных.

Плохо сбалансированное дерево будет означать, что вы должны найти больше данных, чем вам нужно. Убедитесь, что ваше дерево построение в здравом уме.

Это также может зависеть от того, как вы найдете k соседей. Если ваш алгоритм ищет дерево для ближайшего соседа и сохраняет его, затем ищет второй ближайший и сохраняет его и т. Д., Тогда вы не выполняете поиск очень эффективно. Вместо этого держите бегущий список ближайших соседей K и удары от списка, когда вы находите ближе, проходящие на дереве. Таким образом, вы ищете один раз, а не в раз.

В любом случае, похоже, вы делаете это для курса. Попробуйте поговорить с вашим профессором, TAS или одноклассниками, чтобы увидеть, типичны ли ваши результаты.

8
ответ дан 4 December 2019 в 14:28
поделиться

Я знаю, что на этот вопрос был дан ответ, но для получения более подробной информации о поиске KNN с k-d деревьями см. Bentley (1975: 514), Сообщения ACM 18 (9), сентябрь.

6
ответ дан 4 December 2019 в 14:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: