#python #optimization #scikit-learn #geospatial
#python #оптимизация #scikit-learn #геопространственный
Вопрос:
Я пытался найти стандартную метрику, которая включает в себя как расстояние, так и разницу в заголовках, и не очень успешно — надеясь, что смогу получить здесь некоторое представление и, возможно, немного помочь моему поиску, или даже просто сказать мне что-то очевидное, чего мне не хватает..
Я работаю с кучей точек широты / длины, которые также имеют определенный заголовок, и я хотел бы найти ближайшую точку в другом наборе, а также максимально соответствовать заголовку. Я использовал BallTree sklearn с метрикой haverine, чтобы добиться некоторого успеха в поиске ближайшего соседа между этими двумя наборами, но я хотел бы добавить заголовок в обоих наборах точек, чтобы попытаться минимизировать как расстояние, так и заголовок для метрики.
Похоже, я все равно не могу использовать пользовательские вызываемые объекты для алгоритмов дерева шаров sklearn и дерева KD, поэтому я бы согласился с алгоритмом грубой силы, если потребуется.
Я думаю, что я спрашиваю:
- Существует ли стандартная метрика расстояния, которая включает разницу в заголовках, которую я мог бы использовать повторно?
- Есть ли лучший подход к минимизации расстояния и заголовка между двумя наборами данных?
Одна из альтернатив, если я не могу этого понять, — это просто отфильтровать мой потенциальный набор точек (без заголовка) только для точек с заголовком в пределах некоторого допуска к заголовку каждой исходной точки, но это кажется довольно громоздким и неуклюжим. Любые другие предложения приветствуются!
Комментарии:
1. Я бы, вероятно, разделил данные. Определите, что вы хотите считать «достаточно близким» в отношении смещения заголовка. Затем половина данных разбивается на ячейки, где заголовок находится в соответствующей ячейке. Т.Е. Если вы хотите в пределах -20 градусов, разделите его на 0-10, 10-20, 20-30 …, затем постройте деревья KD для точек в каждой ячейке. Если вы ищете, скажем, заголовок в 5 градусов, вам нужно будет проверить ячейку 350-360, ячейку 0-10 и ячейку 10-20. Реальная проблема заключается в двусмысленности. Вы отдаете приоритет совпадению заголовка или ближайшей точке?
2. Вы также можете выполнить триангуляцию точек. Относительно быстро найти ближайшую точку в триангуляции. И как только у вас это будет, вы сможете быстро проверить близлежащие заголовки. Если заголовок является более приоритетным, вы можете отсортировать точки по заголовку, найти ближайшую точку, а затем работать в направлении наружу (круговой список), пока не найдете тот, который «достаточно близко). Опять же, реальная проблема заключается в том, какой вес вы придаете подобию угла по сравнению с подобием расстояния. Когда точка, находящаяся на расстоянии X и в пределах Y градусов, хуже / лучше, чем точка, находящаяся на расстоянии M и в пределах N градусов.
3. Спасибо за предложения, я также думал, какими могут быть веса (думал, может быть, что-то вроде равного взвешивания после того, как оба были нормализованы, но это, вероятно, не обязательно для моих нужд), и я, вероятно, хотел бы расставить приоритеты по сходству заголовков на высоком уровне. Это также может означать, чтобы упростить проблему, рассматривать только набор точек, равных — 20 градусам, и получать из этого наилучшее сходство расстояния.
4. Да, тогда мой первый комментарий должен быть довольно хорошим. Хотя все еще остается вопрос о чем-то подобном: точка A отклонена на 5 градусов, но в 1,5 раза дальше, чем точка B, которая отклонена всего на 3 градуса. Хотя не имеет значения, если вы просто используете маршрут «пока они находятся в пределах X градусов, просто используйте ближайший». Конечно, возможно, самое близкое на самом деле отклонено на 21 градус. Хотя в этом случае я бы, вероятно, просто сохранил дерево KD для каждой точки, а также в пределах 10 градусов друг от друга.
5. О, еще одна возможность: используйте KD-дерево с дополнительным развернутым измерением для заголовка, просто включите одну точку в фактический заголовок и еще две в
- 360
градусах. Т.Е.:1
было бы-359, 1, 361
и359
будет-1, 359 and 719
. Недостатком здесь является то, что вам может потребоваться немного масштабировать расстояния, чтобы избежать того, чтобы это измерение было намного больше или меньше по весу, чем должно быть. Источник этой идеи: stats.stackexchange.com/questions/51908 /…