Kümelenme coğrafi konum koordinatları (enlem, uzun çiftler)


51

Coğrafi konum kümelenmesi için doğru yaklaşım ve kümeleme algoritması nedir?

Coğrafi konum koordinatlarını kümelemek için aşağıdaki kodu kullanıyorum:

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()

Coğrafi konum kümelemesi için K-aracılarını kullanmak, doğru bir işlev olarak Haversine formülünü değil, Öklid mesafesini kullandığı için kullanmak doğru mu?


Bu benzer soruya da bir göz atabilirsiniz: datascience.stackexchange.com/questions/10063/…
VividD

Bence k-araçlarının uygulanabilirliği, verilerinizin bulunduğu yere bağlı olacaktır. Verileriniz tüm dünyaya yayılmışsa, diğer kullanıcıların zaten söylediği gibi, mesafe öklid olmadığından çalışmaz. Fakat eğer verileriniz daha yerel ise, geometri yerel olarak öklid olduğu için k-araçları yeterli olacaktır.
Juan Ignacio Gil,

Yanıtlar:


7

K-aracı bu durumda doğru olmalı. K-aracı yalnızca nesneler arasındaki öklid mesafesine göre gruplanmaya çalıştığından, birbirine yakın konum kümelerini geri alırsınız.

Optimal küme sayısını bulmak için, kare uzaklıktaki grup içindeki 'dirsek' grafiğini çıkarmayı deneyebilirsiniz. Bu yardımcı olabilir ( http://nbviewer.ipython.org/github/nborwankar/LearnDataScience/blob/master/notebooks/D3.%20K-Means%20Clustering%20Analysis.ipynb )


3
Kıvrılma noktasındaki noktalar birbirine nasıl yakın tutulur?
casperOne

1
Önceden hesaplanmış bir mesafe matrisi alan ya da mesafeleri hesaplaması gerektiğinde çağırabileceği bir mesafe işlevi sağlamanıza izin veren bir algoritma bulmanız gerekir. Aksi takdirde işe yaramaz.
Spacedman

Dirsek arsa size hiç yardımcı olmayabilir, çünkü dirsek olmayabilir. Ayrıca, aynı sonuç numarasıyla birkaç k-aracı çalıştırmayı denediğinizden emin olun, çünkü farklı sonuçlar alabilirsiniz.
Çekirge

Bu kötü bir fikir çünkü tüm noktalar kümelenecek, bu da haritalamada nadiren iyi bir fikir.
Richard,

52

K-aracı burada en uygun algoritma değil.

Bunun nedeni, k-araçlarının varyansı en aza indirecek şekilde tasarlanmış olmasıdır . Bu, elbette, istatistiksel ve sinyal işleme açısından görünmektedir, ancak verileriniz "doğrusal" değildir.

Verileriniz enlem, boylam formatında olduğundan, keyfi mesafe fonksiyonlarını, özellikle jeodezik mesafe fonksiyonlarını idare edebilecek bir algoritma kullanmalısınız . Hiyerarşik kümeleme, PAM, CLARA ve DBSCAN bunun popüler örnekleridir.

https://www.youtube.com/watch?v=QsGOoWdqaT8 OPTICS kümelemesini önerir.

+180 derece sarma çevresine yakın noktaları göz önüne aldığınızda k-araçlarının problemlerini görmek kolaydır. Haversine mesafesini kullanmak için k-araçlarını kırmış olsanız bile, güncelleme adımında ortalamayı yeniden hesapladığında sonuç kötü bir şekilde bozulacaktır. En kötü durum, k-araçları asla bir araya gelmez!


Coğrafi konum verileri için daha uygun bir kümeleme yöntemi önerebilir misiniz?
Alex Spurling,

Üçüncü paragrafı fark ettin mi?
Anony-Mousse,

7

GPS koordinatları doğrudan bir coğrafyaya dönüştürülebilir . Geohash Dünya'yı rakam sayısına göre farklı büyüklükteki "kovalara" böler (kısa Geohash kodları büyük alanlar ve daha küçük alanlar için daha uzun kodlar oluşturur). Geohash ayarlanabilir bir hassas kümeleme yöntemidir.


Bu, K-Means'ın cevaptaki bağlantılı Wikipedia makalesinde yaptığı aynı 180 derecelik sarma probleminden muzdarip görünüyor.
Norman H,

Evet! Artı kodları çok daha iyi artı plus.codes
Brian Spiering

Bu çözümün bir yararı, geohash'ı bir kere hesapladığınız sürece, tekrarlanan karşılaştırma işlemlerinin çok daha hızlı bir şekilde devam edeceğidir .
Norman H,

Geohash'ın kova kenarlarıyla ilgili sorunları olacak - her bir kovanın rastgele kenarlarına dayanarak iki farklı kapta çok yakın nokta konulacak.
Dan G,

5

Muhtemelen cevabımla çok geç kaldım, ancak hala coğrafi kümelenme ile uğraşıyorsanız, bu çalışmayı ilginç bulabilirsiniz . Coğrafi verilerin sınıflandırılmasında oldukça farklı iki yaklaşımın karşılaştırılmasıyla ilgilidir: K-kümeleme ve gizli sınıf büyüme modellemesi.

Çalışmadaki görüntülerden biri:

görüntü tanımını buraya girin

Yazarlar, sonuçların genel olarak benzer olduğu ve LCGM'nin K-araçlarının üstesinden geldiği bazı yönlerin olduğu sonucuna varmıştır.


5

Bunun için HDBSCAN kullanabilirsiniz . Python paketi, lat / lon noktaları arasındaki mesafeleri uygun şekilde hesaplayacak olan haversin mesafesini destekler.

Gibi dokümanlar söz , ilk önce bu çalışması için radyana puanlarınızı dönüştürmek gerekir. Aşağıdaki psuedocode hile yapmalı:

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

Konumları kümelemek için k-aracı algoritması kötü bir fikirdir. Konumlarınız tüm dünyaya yayılabilir ve küme sayısı sizin tarafınızdan tahmin edilemez, yalnızca kümeyi 1 olarak koyarsanız, konumların tek bir kümeye ayrılacağı anlamına gelmez. Aynı şekilde Hiyerarşik kümeleme kullanıyorum.



-1

HBScan sonsuza kadar sürecek gibi Kmeans kümeleme ile gidin. Projeden biri için denedim ve bitirdim ancak Kmeans'ı istenen sonuçlarla kullandım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.