Warning: mkdir(): No space left on device in /var/www/group-telegram/post.php on line 37

Warning: file_put_contents(aCache/aDaily/post/URBAN_MASH/--): Failed to open stream: No such file or directory in /var/www/group-telegram/post.php on line 50
URBAN MASH | Telegram Webview: URBAN_MASH/244 -
Telegram Group & Telegram Channel
kNN для геоданных
В одном из последних постов упомянула, что классический knn не оч хорош для геоданных, полетели вопросы в лс) Поэтому решила сделать отдельный пост!

📍ПРОБЛЕМЫ

1. Масштабирование признаков
Геоданные обычно представлены в виде координат (широта, долгота), которые могут иметь разный масштаб (например, градусы vs. метры). Если не нормализовать данные, расстояние между точками будет искажаться.
Пример:
- В градусах: lat ∈ [-90, 90], lon ∈ [-180, 180] → долгота влияет сильнее.
- В метрах: 1° широты ≈ 111 км, 1° долготы ≈ 111 км × cos(lat) → зависимость от широты.

2. Расстояние на сфере (Земля не плоская)
Евклидово расстояние (sqrt(Δlat² + Δlon²)) плохо работает на больших дистанциях, так как искажает реальные расстояния на сфере.
Пример:
- Вблизи экватора 1° ≈ 111 км, но ближе к полюсам 1° долготы → 0 км.

3. Неравномерная плотность данных
В городах точек может быть много, а в сельской местности — мало. Это приводит к:
- Смещению предсказаний (kNN будет давать больше веса густонаселённым регионам).
- Проблемам с выбором k (в плотных районах нужно маленькое k, в разреженных — большое).

4. Вычислительная сложность
kNN требует хранения всех данных и вычисления расстояний для каждого нового объекта → O(N) на запрос. Для больших геодатасетов (миллионы точек) это неэффективно.

5. Категориальные признаки
Если в данных есть категории (например, тип местности), их сложно учесть в стандартной метрике расстояния.

📍КАК УЛУЧШИТЬ kNN ДЛЯ ГЕОДАННЫХ?

1. Использовать метрики, которые учитывают кривизну Земли.
- самая популярная Haversine distance
  from sklearn.metrics.pairwise import haversine_distances
distances = haversine_distances([[lat1, lon1], [lat2, lon2]])

- Vincenty distance более точный, но более медленный

2. Нормализация и масштабирование
- Если используете евклидово расстояние, приведите координаты к метрам (например, через pyproj).
- Можно применить StandardScaler или MinMaxScaler.
Спойлер: в конце будет про UTM

3. Учет пространственной автокорреляции
- Взвешенный kNN – давать больше веса ближайшим соседям (например, weight = 1 / distance).
- KD-деревья или Ball Trees – ускоряют поиск соседей в пространственных данных (sklearn.neighbors.BallTree)
*** кстати соседей в своей работе в Яндексе я ищу через роутеры по улично-дорожной сети, т.к. в моих задачах мне важна транспортная доступность

4. Оптимизация выбора k
- Использовать кросс-валидацию с учетом пространственного разделения (например, sklearn.model_selection.KFold с учетом координат).
- Методы вроде LOOCV (Leave-One-Out Cross-Validation) для маленьких датасетов.

📍А КАК ЖЕ UTM???
UTM действительно помогают работать с геоданными в локальных координатах, но у них есть свои нюансы. За этими проекции следуюдет признать:
Евклидово расстояние работает лучше – в метрах, а не в градусах.
Меньше искажений на небольших территориях (город, область).
Быстрые вычисления – не нужно считать Haversine.

Но есть ограничения...

1. Границы зон
Точки из разных зон UTM нельзя сравнивать напрямую (easting повторяется), нужно разбивать данные по зонам или использовать Haversine.
2. Большие расстояния
UTM искажает расстояния за пределами зоны (~1000 км), для континентальных данных лучше подходит Haversine/Vincenty.
3. Высота не учитывается
UTM работает только с 2D-координатами. Если нужен рельеф, нужно добавлять altitude в метрику расстояния.
4. Неравномерная плотность
В городах точек больше, чем в сельской местности, тут нужен адаптивный k или взвешенный kNN.

P.S. как быстро определить зону UTM
  import math
utm_zone = math.floor((lon+180)/6)+1

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

@urban_mash
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥174👍3🤔2



group-telegram.com/URBAN_MASH/244
Create:
Last Update:

kNN для геоданных
В одном из последних постов упомянула, что классический knn не оч хорош для геоданных, полетели вопросы в лс) Поэтому решила сделать отдельный пост!

📍ПРОБЛЕМЫ

1. Масштабирование признаков
Геоданные обычно представлены в виде координат (широта, долгота), которые могут иметь разный масштаб (например, градусы vs. метры). Если не нормализовать данные, расстояние между точками будет искажаться.
Пример:
- В градусах: lat ∈ [-90, 90], lon ∈ [-180, 180] → долгота влияет сильнее.
- В метрах: 1° широты ≈ 111 км, 1° долготы ≈ 111 км × cos(lat) → зависимость от широты.

2. Расстояние на сфере (Земля не плоская)
Евклидово расстояние (sqrt(Δlat² + Δlon²)) плохо работает на больших дистанциях, так как искажает реальные расстояния на сфере.
Пример:
- Вблизи экватора 1° ≈ 111 км, но ближе к полюсам 1° долготы → 0 км.

3. Неравномерная плотность данных
В городах точек может быть много, а в сельской местности — мало. Это приводит к:
- Смещению предсказаний (kNN будет давать больше веса густонаселённым регионам).
- Проблемам с выбором k (в плотных районах нужно маленькое k, в разреженных — большое).

4. Вычислительная сложность
kNN требует хранения всех данных и вычисления расстояний для каждого нового объекта → O(N) на запрос. Для больших геодатасетов (миллионы точек) это неэффективно.

5. Категориальные признаки
Если в данных есть категории (например, тип местности), их сложно учесть в стандартной метрике расстояния.

📍КАК УЛУЧШИТЬ kNN ДЛЯ ГЕОДАННЫХ?

1. Использовать метрики, которые учитывают кривизну Земли.
- самая популярная Haversine distance

  from sklearn.metrics.pairwise import haversine_distances
distances = haversine_distances([[lat1, lon1], [lat2, lon2]])

- Vincenty distance более точный, но более медленный

2. Нормализация и масштабирование
- Если используете евклидово расстояние, приведите координаты к метрам (например, через pyproj).
- Можно применить StandardScaler или MinMaxScaler.
Спойлер: в конце будет про UTM

3. Учет пространственной автокорреляции
- Взвешенный kNN – давать больше веса ближайшим соседям (например, weight = 1 / distance).
- KD-деревья или Ball Trees – ускоряют поиск соседей в пространственных данных (sklearn.neighbors.BallTree)
*** кстати соседей в своей работе в Яндексе я ищу через роутеры по улично-дорожной сети, т.к. в моих задачах мне важна транспортная доступность

4. Оптимизация выбора k
- Использовать кросс-валидацию с учетом пространственного разделения (например, sklearn.model_selection.KFold с учетом координат).
- Методы вроде LOOCV (Leave-One-Out Cross-Validation) для маленьких датасетов.

📍А КАК ЖЕ UTM???
UTM действительно помогают работать с геоданными в локальных координатах, но у них есть свои нюансы. За этими проекции следуюдет признать:
Евклидово расстояние работает лучше – в метрах, а не в градусах.
Меньше искажений на небольших территориях (город, область).
Быстрые вычисления – не нужно считать Haversine.

Но есть ограничения...

1. Границы зон
Точки из разных зон UTM нельзя сравнивать напрямую (easting повторяется), нужно разбивать данные по зонам или использовать Haversine.
2. Большие расстояния
UTM искажает расстояния за пределами зоны (~1000 км), для континентальных данных лучше подходит Haversine/Vincenty.
3. Высота не учитывается
UTM работает только с 2D-координатами. Если нужен рельеф, нужно добавлять altitude в метрику расстояния.
4. Неравномерная плотность
В городах точек больше, чем в сельской местности, тут нужен адаптивный k или взвешенный kNN.

P.S. как быстро определить зону UTM
  import math
utm_zone = math.floor((lon+180)/6)+1

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

@urban_mash

BY URBAN MASH


Warning: Undefined variable $i in /var/www/group-telegram/post.php on line 260

Share with your friend now:
group-telegram.com/URBAN_MASH/244

View MORE
Open in Telegram


Telegram | DID YOU KNOW?

Date: |

The Dow Jones Industrial Average fell 230 points, or 0.7%. Meanwhile, the S&P 500 and the Nasdaq Composite dropped 1.3% and 2.2%, respectively. All three indexes began the day with gains before selling off. These administrators had built substantial positions in these scrips prior to the circulation of recommendations and offloaded their positions subsequent to rise in price of these scrips, making significant profits at the expense of unsuspecting investors, Sebi noted. Such instructions could actually endanger people — citizens receive air strike warnings via smartphone alerts. Investors took profits on Friday while they could ahead of the weekend, explained Tom Essaye, founder of Sevens Report Research. Saturday and Sunday could easily bring unfortunate news on the war front—and traders would rather be able to sell any recent winnings at Friday’s earlier prices than wait for a potentially lower price at Monday’s open. Andrey, a Russian entrepreneur living in Brazil who, fearing retaliation, asked that NPR not use his last name, said Telegram has become one of the few places Russians can access independent news about the war.
from us


Telegram URBAN MASH
FROM American