モーメントを使用して整数ストリームの近似値を計算しますか?


20

math.stackexchangeから移行されました

私は整数の長いストリームを処理していますが、多くのデータを保存せずにストリームのさまざまなパーセンタイルをおおよそ計算できるようにするために、しばらく追跡することを検討しています。数秒からパーセンタイルを計算する最も簡単な方法は何ですか。少量のデータのみを保存するより良いアプローチがありますか?


2
ストリームの分布特性について具体的にご存知ですか?たとえば、彼らは肯定的ですか?有界?あなたが提供できる他の詳細は役に立ちます。モーメントは、ストリームの計算と保存が非常に簡単です。また、ストリームから分位数を直接推定することに関する以前の質問もあります。これは、あなたが本当にやろうとしていることのように聞こえます。あなたはそれらを検索し、それを通して見るかもしれません。
枢機

これらは処理時間を表しているため、肯定的であり、システムに何らかの技術的な問題や過負荷がない限り、ほとんどが緊密にクラスター化されています。分位数の質問を探します。彼らは十分に良いかもしれません。それでも、瞬間から任意のパーセンタイルに関連付けられた値を計算する方法に興味があります。瞬間を保存するのは簡単だと知っていますが、それをどのように使用するかはわかりません。
ジョンデリー

この質問を見ましたか?
枢機

回答:


15

これを明示的に述べることはありませんが、問題の説明から、高バイアスの分位セット(たとえば、50、90、95、99パーセンタイル)を求めているようです。

その場合、Cormodeらによる「データストリーム上のバイアスされた分位点の効果的な計算」で説明されている方法で多くの成功を収めました。これは、メモリをほとんど必要とせず、実装が簡単な高速アルゴリズムです。

この方法は、GreenwaldとKhannaによる以前のアルゴリズムに基づいており、サンプル内の値のランクの上限と下限とともに入力ストリームの小さなサンプルを維持します。いくつかの瞬間のコレクションよりも多くのスペースを必要としますが、分布の興味深い尾部領域を正確に記述するのにはるかに優れています。


1
はい、これは実際に行く方法です。実際、高位の分位数の推定値を取得するのは少し簡単です。特に、の形式のランクでエラーを許容するは、はアイテムの総数で、\ epsilon> 0 $はユーザーです定義された誤差項ϵnn
スレシュVenkatasubramanian

2

極端な分位数の非常に優れた推定値を提供する、このためのより最近のはるかに単純なアルゴリズムがあります。

基本的な考え方は、データ構造のサイズを制限し、小さなまたは大きなに対してより高い精度を保証する方法で、より小さなビンが極端に使用されるということです。このアルゴリズムは、いくつかの言語と多くのパッケージで利用できます。MergingDigestバージョンは動的な割り当てを必要としません... MergingDigestがインスタンス化されると、それ以上のヒープ割り当ては不要です。q

https://github.com/tdunning/t-digestを参照してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.