Кластеризація географічних координат (lat, довгі пари)


51

Який правильний підхід та алгоритм кластеризації для кластеризації геолокацій?

Я використовую наступний код для кластеризації геолокаційних координат:

import numpy as np
import matplotlib.pyplot as plt
from scipy.cluster.vq import kmeans2, whiten

coordinates= np.array([
           [lat, long],
           [lat, long],
            ...
           [lat, long]
           ])
x, y = kmeans2(whiten(coordinates), 3, iter = 20)  
plt.scatter(coordinates[:,0], coordinates[:,1], c=y);
plt.show()

Чи правильно використовувати K-засоби для кластеризації геолокацій, оскільки він використовує евклідову відстань, а не формулу Гаверсіна як функцію відстані?


Можна також поглянути на подібне запитання: datascience.stackexchange.com/questions/10063/…
— VividD

Я думаю, здійсненність k-засобів залежатиме від того, де перебувають ваші дані. Якщо ваші дані поширюються по всьому світу, вони не працюватимуть, оскільки відстань не є евклідовою, як уже розповідали інші користувачі. Але якщо ваші дані більш локальні, k-означає було б досить добре, оскільки геометрія є локально евклідовою.
— Хуан Ігнасіо Гіл

Відповіді:


7

К-засоби повинні бути правильними в цьому випадку. Оскільки k-засоби намагаються групуватись на основі виключно евклідової відстані між об'єктами, ви отримаєте назад кластери місць, близьких один до одного.

Щоб знайти оптимальну кількість кластерів, ви можете спробувати скласти «лікоть» графік з групової суми квадратної відстані. Це може бути корисно ( http://nbviewer.ipython.org/github/nborwankar/LearnDataScience/blob/master/notebooks/D3.%20K-Means%20Clustering%20Analysis.ipynb )


3
Як обробляються точки, близькі один до одного на точці обертання?
— casperOne

1
Вам потрібно знайти алгоритм, який приймає заздалегідь обчислену матрицю відстані або дозволяє поставити функцію відстані, яку вона може викликати, коли їй потрібно обчислити відстані. Інакше це не буде працювати.
— Spacedman

Розгортання ліктя може вам зовсім не допомогти, оскільки ліктя може бути. Також переконайтеся, що спробуйте кілька запусків k-засобів з однаковим номером кластера, оскільки у вас можуть бути різні результати.
— Коник

Це погана ідея, оскільки всі точки будуть кластеризовані, що рідко є хорошою ідеєю при картографуванні.
— Річард

52

K-засоби тут не є найбільш підходящим алгоритмом.

Причина полягає в тому, що k-засоби призначені для мінімізації дисперсії . Це, звичайно, виглядає з точки зору статистики та сигналу, але ваші дані не є "лінійними".

Оскільки ваші дані у форматі широти, довготи, ви повинні використовувати алгоритм, який може обробляти довільні функції відстані, зокрема геодезичні функції відстані. Ієрархічна кластеризація, PAM, CLARA та DBSCAN - популярні приклади цього.

https://www.youtube.com/watch?v=QsGOoWdqaT8 рекомендує кластеризацію OPTICS.

Проблеми k-засобів легко зрозуміти, якщо врахувати точки, близькі до + -180 градусів. Навіть якщо ви зламали k-означає використовувати відстань Haversine, на кроці оновлення, коли він перераховує середнє, результат буде сильно вкручений. Найгірший випадок, k-засоби ніколи не сходяться!


Чи можете ви запропонувати більш відповідний метод кластеризації географічних даних?
— Алекс Спрінгл

Ви помітили третій абзац?
— Аноні-Мус

7

Координати GPS можна безпосередньо перетворити на геогас . Geohash ділить Землю на "відра" різного розміру залежно від кількості цифр (короткі коди Geohash створюють великі області та довші коди для менших областей). Geohash - це метод регулювання точності кластеризації.


Це, мабуть, страждає від тієї самої проблеми на 180 градусів, яку займає K-Means відповідно до статті Вікіпедії, пов'язаної у відповіді.
— Норман Н

Так! Плюси кодів набагато кращі плюс.коди
— Брайан Шпірінг

Однією з переваг цього рішення є те, що доки ви обчислите геогас один раз, повторні операції порівняння пройдуть набагато швидше.
— Норман Н

У Geohash виникнуть проблеми із крайніми відрізками ковша - дві дуже близькі точки будуть розміщені у різних відрах на основі довільних країв кожного відра.
— Dan G

5

Я, мабуть, дуже запізнююся зі своєю відповіддю, але якщо ви все ще маєте справу з гео-кластеризацією, ви можете вважати це дослідження цікавим. Він стосується порівняння двох досить різних підходів до класифікації географічних даних: кластеризація K - означає та моделювання прихованого росту класів.

Один із образів дослідження:

введіть тут опис зображення

Автори дійшли висновку, що кінцеві результати були загалом схожими, і що існували деякі аспекти, коли LCGM перевищував K-засоби.


5

Для цього можна використовувати HDBSCAN . Пакет python підтримує відстань haversine, яка буде правильно обчислювати відстані між точками lat / lon.

Як згадуються в документах , для цього потрібно спочатку перетворити точки в радіани. Наступний psuedocode повинен зробити трюк:

points = np.array([[lat1, lon1], [lat2, lon2], ...])
rads = np.radians(points)
clusterer = hdbscan.HDBSCAN(min_cluster_size=N, metric='haversine')
cluster_labels = clusterer.fit_predict(points)

0

Алгоритм k-означає для кластеризації місць - погана ідея. Ваші місця розташування можуть бути розповсюджені по всьому світу, і кількість кластерів вам не можна передбачити, не тільки те, що якщо ви кладете кластер як 1, місця розташування будуть згруповані в один кластер. Я використовую ієрархічну кластеризацію для того ж.



-1

Ідіть з кластеризацією Kmeans, як HBScan займе назавжди. Я спробував це для одного з проектів і закінчився, але використовував Kmeans з бажаними результатами.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.