bermigrasi dari math.stackexchange .
Saya sedang memproses aliran bilangan bulat yang panjang dan saya sedang mempertimbangkan untuk melacak beberapa saat agar dapat menghitung kira-kira berbagai persentil untuk aliran tanpa menyimpan banyak data. Apa cara paling sederhana untuk menghitung persentil dari beberapa saat. Apakah ada pendekatan yang lebih baik yang melibatkan hanya menyimpan sejumlah kecil data?
algorithms
mathematical-statistics
moments
jonderry
sumber
sumber
Jawaban:
Anda tidak menyatakan ini secara eksplisit, tetapi dari uraian masalah Anda, sepertinya Anda mencari kumpulan kuantil yang bias tinggi (mis. Persentil ke-50, ke-90, ke-95, dan ke-99).
Jika itu masalahnya, saya sudah banyak sukses dengan metode yang dijelaskan dalam "Perhitungan Efektif dari Bias Kuantitas atas Aliran Data" oleh Cormode et al. Ini adalah algoritma cepat yang membutuhkan sedikit memori dan itu mudah diimplementasikan.
Metode ini didasarkan pada algoritma sebelumnya oleh Greenwald dan Khanna yang mempertahankan sampel kecil dari aliran input bersama dengan batas atas dan bawah pada peringkat nilai-nilai dalam sampel. Ini membutuhkan lebih banyak ruang daripada kumpulan beberapa momen, tetapi akan jauh lebih baik dalam menggambarkan wilayah ekor yang menarik dari distribusi secara akurat.
sumber
Ada algoritma yang lebih baru dan lebih sederhana untuk ini yang memberikan perkiraan yang sangat baik dari quantiles ekstrim.
Ide dasarnya adalah bahwa nampan yang lebih kecil digunakan pada ekstrem dengan cara yang membatasi ukuran struktur data dan menjamin akurasi yang lebih tinggi untuk kecil atau besar . Algoritma ini tersedia dalam beberapa bahasa dan banyak paket. Versi MergingDigest tidak memerlukan alokasi dinamis ... setelah MergingDigest dibuat, tidak ada alokasi heap lebih lanjut yang diperlukan.q
Lihat https://github.com/tdunning/t-digest
sumber