Saya menggunakan algoritma Birch dari paket Python scipy-learn untuk mengelompokkan satu set poin di satu kota kecil dalam set 10.
Saya menggunakan kode berikut:
no = len(list_of_points)/10
brc = Birch(branching_factor=50, n_clusters=no, threshold=0.05,compute_labels=True)
Dalam ide saya, saya akan selalu berakhir dengan set 10 poin. Dalam kasus saya sekarang, saya memiliki 650 poin untuk dikelompokkan, dan n_clusters adalah 65.
Tapi, masalah saya adalah bahwa dengan ambang yang terlalu rendah saya berakhir dengan 1 alamat sebuah cluster, hanya ambang yang lebih kecil - 40 alamat per cluster.
Apa yang saya lakukan salah di sini?
python
clustering
scipy.spatial
kaboom
sumber
sumber
Jawaban:
Saya sudah melakukan riset. Saya mengambil beberapa poin dalam dua sistem koordinat non metrik (WGS84) dan metrik (Polandia 1992).
Saya menggunakan kode ini:
Lalu saya cocokkan model kami dengan data metrik:
Dan plot hasilnya, di mana titik silang adalah titik saya dan lingkaran adalah subclusters saya:
Inilah yang saya dapat:
Anda dapat melihat, nilai ambang itu terlalu kecil, karena ditemukan subkluster di setiap titik.
Definisi ambang batas:
Jadi dalam hal ini kita perlu meningkatkan nilai ini.
Untuk:
itu jauh lebih baik:
Dan poin WGS84 untuk ambang 0,5:
Hanya satu subkluster, tidak bagus. Tetapi dalam hal ini kita harus mengurangi nilai ambang, jadi untuk 0,05:
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.
sumber