클러스터링 지리적 위치 좌표 (lat, long pairs)


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

Haversine 공식이 아닌 유클리드 거리를 사용하므로 지리적 위치 클러스터링에 K- 평균을 사용하는 것이 옳 습니까?


Yoou도 이와 유사한 질문을 살펴볼 수 있습니다 : datascience.stackexchange.com/questions/10063/…
VividD

k- 평균의 가능성은 데이터의 위치에 달려 있다고 생각합니다. 데이터가 전 세계에 퍼져 있다면 다른 사용자가 이미 말한 것처럼 거리가 멀지 않기 때문에 작동하지 않습니다. 그러나 데이터가 더 로컬 인 경우 지오메트리가 로컬로 유클리드되므로 k- 평균이면 충분합니다.
Juan Ignacio Gil

답변:


7

이 경우 K- 평균이 옳 아야합니다. k- 평균은 객체 간의 유클리드 거리만을 기준으로 그룹화하려고 시도하기 때문에 서로 가까운 위치의 클러스터를 다시 얻게됩니다.

최적의 군집 수를 찾으려면 그룹 내에서 제곱 거리의 '팔꿈치'그림을 만들어보십시오. 도움이 될 수 있습니다 ( http://nbviewer.ipython.org/github/nborwankar/LearnDataScience/blob/master/notebooks/D3.%20K-Means%20Clustering%20Analysis.ipynb )


3
랩 어라운드 지점에서 서로 가까이있는 지점은 어떻게 처리됩니까?
casperOne

1
미리 계산 된 거리 매트릭스를 사용하거나 거리를 계산해야 할 때 호출 할 수있는 거리 함수를 제공 할 수있는 알고리즘을 찾아야합니다. 그렇지 않으면 작동하지 않습니다.
Spacedman

팔꿈치가 없기 때문에 팔꿈치 플롯이 전혀 도움이되지 않을 수 있습니다. 또한 다른 결과를 얻을 수 있으므로 동일한 클러스터 번호를 가진 여러 k- 평균 실행을 시도하십시오.
Grasshopper

모든 점이 군집 될 것이기 때문에 좋지 않은 생각 입니다.
리처드

52

K- 평균은 여기서 가장 적합한 알고리즘이 아닙니다.

그 이유는 k- 평균이 분산최소화 하도록 설계 되었기 때문 입니다. 이것은 물론 통계 및 신호 처리 관점에서 볼 수 있지만 데이터는 "선형"이 아닙니다.

데이터는 위도, 경도 형식이므로 임의의 거리 함수, 특히 측지 거리 함수를 처리 할 수있는 알고리즘을 사용해야 합니다. 계층 적 클러스터링, PAM, CLARA 및 DBSCAN이 그 대표적인 예입니다.

https://www.youtube.com/watch?v=QsGOoWdqaT8 은 OPTICS 클러스터링을 권장합니다.

k- 평균의 문제는 + -180도에 가까운 점을 고려할 때 쉽게 알 수 있습니다. k- 평균을 해킹하여 Haversine 거리를 사용하더라도 업데이트 단계에서 평균을 다시 계산할 때 결과가 잘못 고정됩니다. 최악의 경우, k- 평균은 절대 수렴하지 않습니다!


지리적 위치 데이터에보다 적합한 클러스터링 방법을 제안 할 수 있습니까?
Alex Spurling

세 번째 단락을 보셨습니까?
Anony-Mousse

7

GPS 좌표는 geohash 로 직접 변환 할 수 있습니다 . Geohash는 자릿수에 따라 지구를 다른 크기의 "버킷"으로 나눕니다 (짧은 Geohash 코드는 큰 영역을 만들고 작은 영역의 경우 더 긴 코드를 만듭니다). Geohash는 조정 가능한 정밀 클러스터링 방법입니다.


이것은 답변에 링크 된 Wikipedia 기사에 따라 K-Means 가하는 것과 같은 180도 랩 어라운드 문제로 고통받는 것 같습니다.
Norman H

네! 더하기 코드가 더 좋습니다 plus.codes
Brian Spiering

이 솔루션의 한 가지 이점은 지오 해시를 한 번 계산하는 한 반복 비교 작업이 훨씬 빠르게 진행된다는 것입니다.
Norman H

Geohash는 버킷 에지 사례에 문제가 있습니다. 각 버킷의 임의의 가장자리에 따라 두 개의 매우 가까운 지점이 다른 버킷에 배치됩니다.
Dan G

5

아마 내 대답에 늦었을 지 모르지만 지리적 클러스터링을 다루는 경우이 연구가 흥미로울 것입니다. 지리 데이터 분류에 대한 두 가지 상당히 다른 접근법 인 K- 평균 군집화와 잠재 클래스 성장 모델링의 비교를 다룹니다.

연구의 이미지 중 하나 :

여기에 이미지 설명을 입력하십시오

저자들은 최종 결과가 전반적으로 비슷하고 LCGM이 K- 평균을 과도하게 퍼뜨리는 몇 가지 측면이 있다고 결론 지었다.


5

이를 위해 HDBSCAN 을 사용할 수 있습니다 . 파이썬 패키지는 위도 / 경도 지점 사이의 거리를 올바르게 계산할 수있는 헤르 세인 거리를 지원합니다.

는 AS 문서 언급 , 먼저이 작동하려면 라디안에 포인트를 변환해야합니다. 다음 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

HBScan은 영원히 걸릴 것이므로 Kmeans 클러스터링으로 이동하십시오. 나는 프로젝트 중 하나를 시도하고 종료했지만 원하는 결과로 Kmeans를 사용했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.