Saya mencoba untuk secara cerdas membuang koleksi yang diurutkan. Saya punya koleksi data. Tapi aku tahu bahwa data ini cocok dalam m merata berukuran sampah. Saya tidak tahu bagaimana memilih titik akhir secara cerdas agar sesuai dengan data. sebagai contoh:
Katakanlah saya memiliki 12 item dalam koleksi saya, dan saya tahu data akan masuk ke dalam 3 sampah:
Index: 1 2 3 4 5 6 7 8 9 10 11 12
Value: 1 1 1 3 3 3 3 3 3 5 5 6
Bagaimana saya secara cerdas memilih breakpoint saya untuk nampan dari ?
Implementasi saat ini saya telah memecah data menjadi nampan berukuran merata dan kemudian mengambil rata-rata titik akhir untuk menemukan indeks untuk akhir nampan. Jadi kerjanya seperti ini:
Index: 1 2 3 4 5 6 7 8 9 10 11 12
Value: 1 1 1 3 3 3 3 3 3 5 5 6
first break evenly: i = 1-4, 5-8, 9-12
mean endpoints: between 4 and 5: (3+3)/2 = 3
between 8 and 9: (3+3)/2 = 3
Jadi sekarang apa pun di bawah 3 cocok di nampan 1, apa pun di atas 3 tetapi di bawah 3 cocok di nampan 2, dan apa pun di atas 3 cocok di nampan 3. Anda dapat melihat apa masalah saya. Jika data memiliki tempat sampah yang tidak sama, metode saya gagal.
Seorang teman menyebutkan algoritma tetangga terdekat k-tapi saya tidak yakin.
sumber
Jawaban:
Saya pikir apa yang ingin Anda lakukan disebut clustering. Anda ingin mengelompokkan "Nilai" Anda sedemikian sehingga nilai yang sama dikumpulkan dalam nampan yang sama dan jumlah total nampan telah diatur.
Anda dapat memecahkan masalah ini menggunakan algoritma pengelompokan k-means . Di MATLAB, Anda dapat melakukan ini dengan:
Panggilan di atas akan mengelompokkan nilai-nilai di
Values
dalam tiga kelompok sehingga varians dalam-grup minimal.sumber
k-means adalah opsi, tetapi tidak masuk akal untuk data 1 dimensi. Dalam data satu dimensi, Anda memiliki satu manfaat luar biasa : data dapat disortir sepenuhnya.
Lihatlah optimasi jeda alami sebagai gantinya:
http://en.wikipedia.org/wiki/Jenks_natural_breaks_optimization
sumber