자작 나무 알고리즘이 예상대로 클러스터되지 않습니다


10

나는 한 작은 도시의 포인트 세트를 10 세트로 클러스터링하기 위해 scipy-learn Python 패키지의 Birch 알고리즘을 사용하고 있습니다.

다음 코드를 사용합니다.

no = len(list_of_points)/10
brc = Birch(branching_factor=50, n_clusters=no, threshold=0.05,compute_labels=True)

내 생각에, 나는 항상 10 포인트 세트로 끝날 것입니다. 제 경우에는 클러스터에 650 포인트가 있고 n_clusters는 65입니다.

그러나 내 문제는 임계 값이 너무 낮 으면 클러스터 당 1 개의 주소, 클러스터 당 40 개의 주소 인 아주 작은 임계 값으로 끝납니다.

내가 여기서 뭘 잘못하고 있니?


아마도 CRS 일 것입니다. 문제? WGS 84와 같은 각도로 시도한 경우 미터법을 시도하십시오. 좌표에는 큰 차이가 있으며 둘 다 다른 임계 값을 요구할 수 있습니다. 또한 다른 파이썬 라이브러리로 시도 할 수 있으므로 scikit-learn을 사용하는 것이 좋습니다.
dmh126

..erm, Google API에서 수신 한 GPS 좌표를 기준으로 클러스터링하고 있습니다. 표준 형식 인 것 같습니다. 아니?
kaboom

이 좌표를 여기에 붙여 넣으면 알아낼 것입니다.
dmh126

dmh126이 옳을 수 있음 : Goolge API는 WGS84와 함께 작동합니다. 이것은 지표가 아닌 (세계) 측지 시스템입니다
André

답변:


10

나는 약간의 연구를했다. 나는 두 좌표계 비 메트릭 (WGS84)과 메트릭 (Poland 1992)에서 몇 가지 점을 취했습니다.

나는이 코드를 사용했다 :

from scipy import loadtxt
from sklearn.cluster import Birch
import matplotlib.pyplot as plt

data84 = loadtxt("/home/damian/workspace/84.csv", delimiter=",")
data90 = loadtxt("/home/damian/workspace/90.csv", delimiter=",")

brc = Birch(threshold=0.5)

그런 다음 모델을 메트릭 데이터에 맞 춥니 다.

brc.fit(data90)

그리고 십자가가 내 지점이었고 원이 내 하위 클러스터 인 결과를 플롯하십시오.

c = brc.subcluster_centers_
plt.plot(data90[:,0], data90[:,1], '+')
plt.plot(c[:,0], c[:,1], 'o')
plt.show()

이것이 내가 얻은 것입니다 : 여기에 이미지 설명을 입력하십시오

각 지점에서 하위 클러스터를 찾았 기 때문에 임계 값이 너무 작다는 것을 알 수 있습니다.

임계 값 정의 :

새 샘플과 가장 가까운 서브 클러스터를 병합하여 얻은 서브 클러스터의 반경은 임계 값보다 작아야합니다. 그렇지 않으면 새 서브 클러스터가 시작됩니다.

따라서이 경우이 값을 늘려야합니다.

에 대한:

brc = Birch(threshold=5000)

훨씬 나아졌다 :

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

WGS84는 임계 값 0.5를 가리 킵니다.

brc = Birch(threshold=0.5)
brc.fit(data84)

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

하나의 하위 클러스터 만 좋지 않습니다. 그러나이 경우 임계 값을 줄여야하므로 0.05의 경우 :

brc = Birch(threshold=0.05)
brc.fit(data84)

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

좋은 결과를 얻었습니다.

결론:

CRS가 중요합니다. 데이터 좌표계와 점 사이의 거리에 따라 적절한 임계 값을 찾아야합니다. 메트릭 CRS가 아닌 경우 임계 값은 메트릭 시스템보다 상대적으로 작아야합니다. 미터와 도의 차이를 알아야합니다. 두 점 사이의 거리가 10000m 인 경우 WGS84에서 1도 미만입니다. 더 정확한 값으로 Google을 확인하십시오.

또한 n_clusters 값보다 많은 포인트가 있습니다. 괜찮습니다. 집단의 중심은 없지만 하위 클러스터가 있습니다. 무언가를 예측하거나 라벨을 인쇄하려고하면 포인트가 n_clusters 영역 중 하나 (또는 ​​0,1,2, ..., n_clusters 라벨로 분류 된 인쇄 포인트)로 분류됩니다.

다른 매개 변수를 사용하지 않으려면 언제든지 다른 알고리즘을 사용할 수 있습니다. 클러스터링을위한 매우 간단하고 일반적인 알고리즘은 K- 평균 알고리즘입니다.

http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html

임계 값 등을 신경 쓰지 않고 데이터에 대한 n 개의 클러스터를 찾아야합니다.

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