Saya memiliki satu set data 2-D di mana saya ingin menemukan pusat dari sejumlah pusat lingkaran ( ) yang memaksimalkan jumlah total poin dalam jarak yang ditentukan ( R ).
misalnya saya memiliki 10.000 titik data dan saya ingin menemukan pusat-pusat N = 5 lingkaran yang menangkap poin sebanyak mungkin dalam radius R = 10 . 5 pusat dan jari-jari 10 diberikan sebelumnya, bukan berasal dari data.
Kehadiran titik data dalam lingkaran adalah biner baik / atau proposisi. Jika , tidak ada perbedaan nilai ke titik 11 unit jauhnya vs 100 unit jauhnya, karena keduanya> 10. Demikian pula untuk berada di dalam lingkaran, tidak ada nilai tambahan untuk berada di dekat pusat vs dekat tepi . Titik data berada di salah satu lingkaran atau keluar.
Apakah ada algoritma yang baik yang dapat digunakan untuk menyelesaikan masalah ini? Ini tampaknya terkait dengan teknik pengelompokan, tetapi alih-alih meminimalkan jarak rata-rata, fungsi "jarak" adalah 0 jika titik berada dalam dari salah satu titik N , dan 1 sebaliknya.
Preferensi saya adalah menemukan cara untuk melakukan ini di R, tetapi pendekatan apa pun akan dihargai.
sumber
Jawaban:
Ini adalah variasi masalah k-means. Jari-jari pusat tidak masalah, asalkan diasumsikan sama.
Tautan:
Ini akan menempatkan pusat-pusat lingkaran di lokasi-lokasi dengan probabilitas poin tertinggi.
Prosedur K-means Klasik:
Pilihan:
Mengapa K-means menyerang masalah:
Seharusnya ada beberapa analog dari "Zero Inflated Poisson" di mana ada komponen yang non-gaussian yang mengambil distribusi seragam.
Jika Anda ingin "menyetel" model Anda dan yakin bahwa ada cukup banyak titik sampel maka Anda dapat menginisialisasi dengan k-means, dan kemudian membuat adjuster k-means tambahan yang menghilangkan poin di luar jari-jari lingkaran dari kompetisi. Ini akan sedikit mengganggu lingkaran yang Anda miliki, tetapi mungkin sedikit meningkatkan kinerja mengingat data.
sumber
Seseorang mungkin memiliki algoritma formal yang lebih baik, tetapi inilah satu pendekatan brute force (sebuah hack?). Saya akan menggunakan salah satu algoritma binning heksagonal untuk menghitung histogram 2D. Seperti
hexbin
diR
.Saya akan menggunakan ukuran segi enam yang kira-kira akan membatasi lingkaran jari-jari Anda R dan kemudian mengurutkan di atas N bin. Jika Anda punya
N
tempat sampah yang jauh, bagus. Sekarang salah satu cara adalah untuk bergerak di sekitar lingkaran secara lokal pada skala 2 * R (dalam arah x dan y) dari pusat heksagon kepadatan atas. Komputasi kepadatan dapat secara kasar mengoptimalkan posisi secara lokal. Ini akan menjelaskan fakta bahwa segi enam bukan jendela bergerak sehubungan dengan asal yang tetap.Jika semua tempat sampah teratas dekat, Anda harus memiliki cara yang lebih cerdas untuk menggerakkan lingkaran Anda di sekitarnya.
Perhatikan bahwa saya dapat memikirkan beberapa kasus sudut di mana strategi naif seperti itu akan gagal secara spektakuler. Namun, hanya titik awal.
Sementara itu, saya berharap seseorang memiliki algoritma yang lebih baik.
sumber
+R
dan-R
kemudian menempatkan semua solusi layak pada tumpukan dan memilih di antara mereka. misalnya dalam1D
contoh Anda tentang memukulnya28,29,30,31,32
akan geser jendela ke atas18-28
dan38-48
mencari semua solusi yang masuk akal. Kemudian dalam satu ini dapat mencari kombinasi menghasilkan titik maksimum. Tidak yakin apakah itu akan membantu? Saya mencoba melihat apakah algoritma naif saya dapat diselamatkan? :)