Saya memiliki beberapa poin dalam , dan saya ingin mengelompokkan poin sehingga:R hal
Setiap cluster berisi jumlah elemen . (Asumsikan bahwa jumlah cluster dibagi .)n
Setiap cluster "kohesif spasial" dalam beberapa hal, seperti cluster dari berarti.
Sangat mudah untuk memikirkan banyak prosedur pengelompokan yang memuaskan satu atau yang lainnya, tetapi apakah ada yang tahu cara untuk mendapatkan keduanya sekaligus?
machine-learning
clustering
k-means
unsupervised-learning
Bukan Durrett
sumber
sumber
Jawaban:
Saya menyarankan pendekatan dua langkah:
dapatkan perkiraan awal yang baik dari pusat-pusat klaster, mis. menggunakan hard-atau fuzzy K-means.
Gunakan penugasan Global Nearest Neighbor untuk mengaitkan titik dengan pusat klaster: Hitung matriks jarak antara setiap titik dan setiap pusat klaster (Anda dapat membuat masalahnya sedikit lebih kecil dengan hanya menghitung jarak yang masuk akal), mereplikasi setiap pusat klaster X kali, dan menyelesaikan linier masalah penugasan . Anda akan mendapatkan, untuk setiap pusat gugus, X yang cocok dengan titik data, sehingga, secara global, jarak antara titik data dan pusat gugus diminimalkan.
Perhatikan bahwa Anda dapat memperbarui pusat-pusat klaster setelah langkah 2 dan ulangi langkah 2 untuk menjalankan K-means pada dasarnya dengan jumlah poin tetap per kluster. Namun, itu akan menjadi ide yang baik untuk mendapatkan tebakan awal yang baik terlebih dahulu.
sumber
Coba variasi k-means ini:
Inisialisasi :
k
pusat dari dataset secara acak, atau bahkan lebih baik menggunakan strategi kmeans ++Pada akhirnya, Anda harus memiliki paritioning yang memenuhi persyaratan Anda dari + -1 jumlah objek yang sama per cluster (pastikan beberapa cluster terakhir juga memiliki nomor yang tepat.
m
Cluster pertama harus memilikiceil
objek, sisanya persisfloor
objek.)Langkah iterasi :
Persyaratan: daftar untuk setiap cluster dengan "swap proposal" (objek yang lebih suka berada di cluster yang berbeda).
Langkah E : hitung pusat-pusat cluster yang diperbarui seperti dalam k-means reguler
Langkah M : Iterasi semua poin (baik hanya satu, atau semuanya dalam satu batch)
Hitung pusat klaster terdekat dengan objek / semua pusat klaster yang lebih dekat dari kluster saat ini. Jika cluster berbeda:
Ukuran cluster tetap invarian (+ - perbedaan langit-langit / lantai), suatu objek hanya dipindahkan dari satu cluster ke yang lain selama itu menghasilkan peningkatan estimasi. Karena itu ia harus menyatu di beberapa titik seperti k-means. Mungkin sedikit lebih lambat (yaitu lebih banyak iterasi).
Saya tidak tahu apakah ini sudah diterbitkan atau diterapkan sebelumnya. Itu hanya apa yang akan saya coba (jika saya akan mencoba k-means. Ada banyak algoritma clustering.)
Tempat yang baik untuk memulai mungkin dengan implementasi k-means di ELKI , yang tampaknya sudah mendukung tiga inisialisasi yang berbeda (termasuk k-means ++), dan penulis mengatakan mereka juga ingin memiliki strategi iterasi yang berbeda, untuk mencakup semua berbagai kesamaan varian dalam mode modular (mis. Lloyd, MacQueen, ...).
sumber
Ini adalah masalah optimisasi. Kami memiliki pustaka java open source yang memecahkan masalah ini (pengelompokan di mana kuantitas per cluster harus berada di antara rentang yang ditetapkan). Anda akan membutuhkan jumlah total poin maksimum beberapa ribu - tidak lebih dari 5000 atau mungkin 10000.
Perpustakaan ada di sini:
https://github.com/PGWelch/territorium/tree/master/territorium.core
Perpustakaan itu sendiri adalah pengaturan untuk masalah tipe geografis / GIS - sehingga Anda akan melihat referensi ke X dan Ys, lintang dan bujur, pelanggan, jarak dan waktu, dll. Anda dapat mengabaikan elemen 'geografis' dan menggunakannya sebagai murni clusterer.
Anda memberikan satu set kluster masukan yang awalnya kosong masing-masing dengan jumlah target minimum dan maksimum. Clusterer akan memberikan poin ke cluster input Anda, menggunakan algoritma optimasi berbasis heuristik (swap, bergerak dll). Dalam optimasi itu pertama-tama memprioritaskan menjaga setiap cluster dalam kisaran kuantitas min dan max dan kemudian kedua meminimalkan jarak antara semua titik dalam cluster dan titik pusat cluster, sehingga sebuah cluster kohesif secara spasial.
Anda memberi pemecah fungsi metrik (fungsi jarak) antara titik-titik menggunakan antarmuka ini:
https://github.com/PGWelch/territorium/blob/master/territorium.core/src/main/java/com/opendoorlogistics/territorium/problem/TravelMatrix.java
Metrik sebenarnya disusun untuk mengembalikan jarak dan 'waktu', karena dirancang untuk masalah geografis berbasis perjalanan, tetapi untuk masalah pengelompokan sewenang-wenang, hanya menetapkan 'waktu' menjadi nol dan jarak menjadi metrik aktual yang Anda gunakan di antara poin.
Anda mengatur masalah Anda di kelas ini:
https://github.com/PGWelch/territorium/blob/master/territorium.core/src/main/java/com/opendoorlogistics/territorium/problem/Problem.java
Poin Anda adalah 'Pelanggan' dan jumlah mereka adalah 1. Di kelas pelanggan memastikan Anda menetapkan costPerUnitTime = 0 dan costPerUnitDistance = 1 dengan asumsi Anda mengembalikan jarak metrik Anda di bidang 'jarak' yang dikembalikan oleh TravelMatrix.
https://github.com/PGWelch/territorium/blob/master/territorium.core/src/main/java/com/opendoorlogistics/territorium/problem/Customer.java
Lihat di sini untuk contoh menjalankan solver:
https://github.com/PGWelch/territorium/blob/master/territorium.core/src/test/java/com/opendoorlogistics/territorium/TestSolver.java
sumber
Saya menyarankan makalah baru-baru ini Diskriminatif Clustering oleh Regulasi Informasi Dimaksimalkan (dan referensi di dalamnya). Secara khusus, Bagian 2 berbicara tentang keseimbangan kelas dan asumsi cluster.
sumber
Baru-baru ini saya membutuhkan ini sendiri untuk dataset yang tidak terlalu besar. Jawaban saya, walaupun memiliki waktu operasi yang relatif lama, dijamin akan menyatu dengan optimal lokal.
sumber