Biraz araştırma yaptım. Metrik olmayan iki koordinat sisteminde (WGS84) ve metrikte (Polonya 1992) bazı puanlar aldım.
Bu kodu kullandım:
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)
Sonra modelimizi metrik verilerle sığdırıyorum:
brc.fit(data90)
Ve sonuçları, haçların puanlarımın ve dairelerin alt kümelerim olduğu planlayın:
c = brc.subcluster_centers_
plt.plot(data90[:,0], data90[:,1], '+')
plt.plot(c[:,0], c[:,1], 'o')
plt.show()
Elimde bu var:
Gördüğünüz gibi, bu eşik değeri çok küçüktü, çünkü her noktada altküme bulmuş.
Eşik tanımı:
Yeni bir numunenin ve en yakın alt kümenin birleştirilmesiyle elde edilen altkümenin yarıçapı eşik değerden daha az olmalıdır. Aksi takdirde yeni bir altküme başlatılır.
Bu durumda bu değeri artırmamız gerekiyor.
İçin:
brc = Birch(threshold=5000)
çok daha iyiydi:
Ve WGS84 0.5 eşiğini işaret ediyor:
brc = Birch(threshold=0.5)
brc.fit(data84)
Sadece bir altküme, iyi değil. Ancak bu durumda eşik değerini azaltmalıyız, yani 0.05 için:
brc = Birch(threshold=0.05)
brc.fit(data84)
Güzel sonuçlar aldık.
Sonuç:
CRS önemlidir. Veri koordinat sistemlerinize ve noktalar arasındaki mesafeye bağlı olarak uygun bir eşik değeri bulmanız gerekir. Metrik olmayan CRS'niz varsa, eşik, metrik sistemden daha küçük olmalıdır. Metre ve derece arasındaki farkı bilmek zorundasınız, eğer iki nokta arasındaki mesafe 10000m'ye eşitse, WGS84'te 1 dereceden az olacaktır. Daha doğru değerler için Google'ı kontrol edin.
Ayrıca n_clusters değerinden daha fazla puan var. Tamam, kümelerin sentroidleri değil, alt kümeler var. Bir şeyi tahmin etmeye veya etiket yazdırmaya çalışırsanız, noktanızı n_clusters alanlarından birine (veya 0,1,2, ..., n_clusters etiketine sınıflandırılmış baskı noktaları) göre sınıflandırır.
Farklı parametreleri denemek istemiyorsanız, her zaman başka bir algoritma kullanabilirsiniz. Kümeleme için çok basit ve yaygın bir algoritma K-demektir algoritmasıdır.
http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html
Eşikler vb. İle ilgilenmeden verileriniz için n küme bulmalıdır.