나는 약간의 연구를했다. 나는 두 좌표계 비 메트릭 (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 개의 클러스터를 찾아야합니다.