aus math.stackexchange migriert .
Ich verarbeite einen langen Strom von ganzen Zahlen und überlege, einige Momente nachzuverfolgen, um ungefähr verschiedene Perzentile für den Strom berechnen zu können, ohne viele Daten zu speichern. Was ist der einfachste Weg, um Perzentile von wenigen Augenblicken an zu berechnen? Gibt es einen besseren Ansatz, bei dem nur eine kleine Datenmenge gespeichert wird?
algorithms
mathematical-statistics
moments
jonderry
quelle
quelle
Antworten:
Sie geben dies nicht explizit an, aber aus Ihrer Beschreibung des Problems geht hervor, dass Sie wahrscheinlich nach einer stark voreingenommenen Menge von Quantilen suchen (z. B. 50., 90., 95. und 99. Perzentile).
In diesem Fall habe ich mit der in "Effektive Berechnung von verzerrten Quantilen über Datenströme" von Cormode et al. Beschriebenen Methode große Erfolge erzielt. Es ist ein schneller Algorithmus, der wenig Speicher benötigt und einfach zu implementieren ist.
Die Methode basiert auf einem früheren Algorithmus von Greenwald und Khanna, der eine kleine Stichprobe des Eingabestroms zusammen mit einer oberen und einer unteren Grenze für den Rang der Werte in der Stichprobe verwaltet. Es benötigt mehr Platz als eine Sammlung von wenigen Augenblicken, kann jedoch den interessanten Endbereich der Verteilung viel genauer beschreiben.
quelle
Dafür gibt es einen neueren und viel einfacheren Algorithmus, der sehr gute Schätzungen der extremen Quantile liefert.
Die Grundidee ist, dass kleinere Bins an den Extremen so verwendet werden, dass sowohl die Größe der Datenstruktur begrenzt als auch eine höhere Genauigkeit für kleine oder große garantiert wird . Der Algorithmus ist in mehreren Sprachen und in vielen Paketen verfügbar. Die MergingDigest-Version erfordert keine dynamische Zuordnung. Sobald die MergingDigest-Instanz erstellt wurde, ist keine weitere Heap-Zuordnung erforderlich.q
Siehe https://github.com/tdunning/t-digest
quelle