Saya sudah melakukan riset. Saya mengambil beberapa poin dalam dua sistem koordinat non metrik (WGS84) dan metrik (Polandia 1992).
Saya menggunakan kode ini:
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)
Lalu saya cocokkan model kami dengan data metrik:
brc.fit(data90)
Dan plot hasilnya, di mana titik silang adalah titik saya dan lingkaran adalah subclusters saya:
c = brc.subcluster_centers_
plt.plot(data90[:,0], data90[:,1], '+')
plt.plot(c[:,0], c[:,1], 'o')
plt.show()
Inilah yang saya dapat:
Anda dapat melihat, nilai ambang itu terlalu kecil, karena ditemukan subkluster di setiap titik.
Definisi ambang batas:
Jari-jari subkluster yang diperoleh dengan menggabungkan sampel baru dan subkluster terdekat harus lebih rendah dari ambang batas. Kalau tidak, subkluster baru dimulai.
Jadi dalam hal ini kita perlu meningkatkan nilai ini.
Untuk:
brc = Birch(threshold=5000)
itu jauh lebih baik:
Dan poin WGS84 untuk ambang 0,5:
brc = Birch(threshold=0.5)
brc.fit(data84)
Hanya satu subkluster, tidak bagus. Tetapi dalam hal ini kita harus mengurangi nilai ambang, jadi untuk 0,05:
brc = Birch(threshold=0.05)
brc.fit(data84)
Kami mendapat hasil yang bagus.
Kesimpulan:
CRS penting. Anda perlu menemukan nilai ambang yang tepat, tergantung pada sistem koordinat data Anda dan jarak antar titik. Jika Anda memiliki CRS non metrik, ambang batas harus relatif lebih kecil daripada dengan sistem metrik. Anda harus tahu perbedaan antara meter dan derajat, jika jarak antara dua titik sama dengan 10000m, itu akan kurang dari 1 derajat di WGS84. Periksa google untuk mendapatkan nilai yang lebih akurat.
Juga ada lebih banyak poin daripada nilai n_clusters. Tidak apa-apa, tidak ada centroid dari kluster, tetapi subkluster. Jika Anda mencoba memprediksi sesuatu, atau mencetak label, itu akan mengklasifikasikan poin Anda ke salah satu area n_clusters (atau mencetak poin yang diklasifikasikan ke 0,1,2, ..., label n_clusters).
Jika Anda tidak ingin mencoba parameter yang berbeda, Anda selalu dapat mengambil algoritma lain. Algoritma yang sangat sederhana dan umum untuk pengelompokan adalah algoritma K-means.
http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html
Itu harus menemukan n cluster untuk data Anda tanpa peduli tentang ambang batas dll.