Bagaimana cara 'secara cerdas' membuang koleksi data yang diurutkan?

11

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:nm

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 ?i={13},{49},{1012}

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.

Matthew Kemnetz
sumber
1
Bisakah Anda jelaskan apa artinya "secara cerdas"? Apa yang ingin Anda capai dengan binning? Mengapa Anda binning di tempat pertama?
Whuber
<3bin13&<4bin24bin3
Maksud saya cerdas seperti tidak naif seperti yang saya lakukan dengan mengasumsikan tempat sampah ditempatkan secara merata. jika sepotong data jatuh ke tempat sampah tertentu yang memberi tahu saya sesuatu yang sangat penting tentang potongan data itu. Saya mengurutkan data untuk menentukan indeks bin break dan kemudian memutuskan mana bin setiap potongan data jatuh secara individual.
Matthew Kemnetz
kecuali saya melakukan sesuatu yang salah dalam rata-rata saya, saya pikir saya sudah benar. dengan memilih genap; y tempat sampah berjarak semua titik akhir saya adalah 3. Jadi saya benar tidak bisa membuang data saya. Inilah sebabnya mengapa implementasi saya rusak tanpa tempat sampah.
Matthew Kemnetz
Inilah sesuatu yang saya lakukan dalam pengaturan yang sedikit berbeda.
Makro

Jawaban:

9

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:

bin_ids = kmeans(Values,3); 

Panggilan di atas akan mengelompokkan nilai-nilai di Valuesdalam tiga kelompok sehingga varians dalam-grup minimal.

emrea
sumber
1
Saya juga tahu itu. Inilah yang saya terapkan dan bekerja dengan sangat baik. Saya datang ke sini untuk menjawab pertanyaan saya sendiri tetapi Anda mengalahkan saya untuk itu! Clustering adalah apa yang saya coba lakukan.
Matthew Kemnetz
8

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

Memiliki QUIT - Anony-Mousse
sumber
Ini sangat menarik. Bisakah Anda menjelaskan lebih rinci mengapa ini mungkin lebih baik daripada k means?
Matthew Kemnetz
Alasan utama mengapa saya bertanya adalah karena saya menggunakan MATLAB untuk algoritme saya dan saya tidak dapat menemukan optimasi istirahat alami Jenks di kotak alat apa pun dll. Jadi saya perlu menerapkan sendiri. Saya hanya ingin tahu seberapa baik / lebih cepat ini sebelum saya pindah persneling dan mengimplementasikannya.
Matthew Kemnetz
1
k-berarti sangat bodoh. Ini memiliki cara, dan itu akan selalu terbelah di tengah dua cara. Jadi, misalkan 0 1 2 3 4 5 7 7 7, k-berarti akan lebih suka untuk membagi antara 4 dan 5. Kadang-kadang bahkan akan membagi antara 3 dan 4.
Memiliki QUIT - Anony-Mousse