Я провів деякі дослідження. Я взяв кілька пунктів у двох системах координат не метричних (WGS84) та метричних (Польща 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, поріг повинен бути порівняно меншим, ніж у метричній системі. Ви повинні знати різницю між метрами та градусами, якщо відстань між двома точками дорівнює 10000 м, це буде менше 1 градуса в WGS84. Перевірте google на більш точні значення.
Також є більше балів, ніж значення n_clusters. Це нормально, є не центроїди кластерів, а підкластери. Якщо ви спробуєте щось передбачити або надрукувати мітки, він віднесе вашу точку до однієї з областей n_clusters (або пунктів друку, віднесених до 0,1,2, ..., n_clusters label).
Якщо ви не хочете спробувати різні параметри, ви завжди можете скористатися іншим алгоритмом. Дуже простим і поширеним алгоритмом кластеризації є алгоритм K-засобів.
http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html
Він повинен знайти n кластерів для ваших даних, не піклуючись про пороги тощо.