Обчислити приблизні квантили для потоку цілих чисел, використовуючи моменти?


20

мігрували з math.stackexchange .

Я обробляю довгий потік цілих чисел і розглядаю можливість відстеження декількох моментів, щоб можна було приблизно обчислити різні відсотки для потоку, не зберігаючи багато даних. Який найпростіший спосіб обчислити відсотки за кілька моментів. Чи є кращий підхід, який передбачає зберігання лише невеликої кількості даних?


2
Чи знаєте ви щось специфічне щодо властивостей розподілу вашого потоку? Наприклад, чи вони, скажімо, позитивні? Обмежений? Будь-які інші деталі, які ви можете надати, будуть корисними. Моменти досить легко обчислити і зберегти для потоку. Тут також є попередні запитання щодо прямої оцінки квантилів з потоку, що звучить як те, що ви насправді намагаєтесь зробити. Ви можете шукати і переглядати ці.
кардинал

Вони представляють час обробки, тому вони є позитивними та здебільшого щільно кластеризовані, якщо не виникає якась технічна проблема або перевантаження в системі. Я буду шукати питання про кількісні питання; вони можуть бути досить хорошими. Ще мені цікаво, як перейти від моментів до обчислення значення, пов'язаного з довільним процентилем. Я знаю, що зберігати моменти легко, і як їх використовувати, я не знаю.
веселощі

Ви бачили це питання ?
кардинал

Відповіді:


15

Ви не заявляєте це прямо, але з вашого опису проблеми, мабуть, ви хочете отримати велику упереджену множину квантилів (наприклад, 50-й, 90-й, 95-й і 99-й процентилі).

Якщо це так, я мав великий успіх у методі, описаному в "Ефективне обчислення довілених квантилів над потоками даних" від Cormode та ін. Це швидкий алгоритм, який вимагає мало пам'яті, і це легко здійснити.

Метод заснований на більш ранньому алгоритмі Грінвальда та Ханни, який підтримує невелику вибірку вхідного потоку разом з верхньою та нижньою рамками на ранг значень у вибірці. Це вимагає більше місця, ніж колекція декількох моментів, але буде набагато краще точно описувати цікаву хвостову область розподілу.


1
Так, це справді шлях. насправді трохи легше отримувати оцінки високих квантовок, особливо якщо ви готові допустити помилки в ранзі форми де - загальна кількість елементів, а \ epsilon> 0 $ - деякий користувач визначений термін помилкиnϵnn
Суреш Венкатасубраманян

2

Для цього існує більш сучасний і набагато простіший алгоритм, який дає дуже хороші оцінки екстремальних квантилів.

Основна ідея полягає в тому, що менші бункери використовуються в крайніх межах таким чином, що обидва обмежують розмір структури даних і гарантують більш високу точність для малих або великих . Алгоритм доступний кількома мовами та багатьма пакетами. Версія MergingDigest не потребує динамічного розподілу ... як тільки екземпляр MergingDigest, подальше розподіл купи не потрібно.q

Дивіться https://github.com/tdunning/t-digest

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.