CountSketchデータ構造とその関連アルゴリズムの周りに私の頭をラッピングする作業。これは、ストリーミングデータの共通の要素を見つけるための優れたツールであると思われ、その追加的な性質は、頻度の大きな変化を発見していくつかの楽しいプロパティを作成します。おそらく、Twitterがトレンドトピックに使用するものに似ています。Countスケッチのデータ構造と関連するアルゴリズムを理解する
paperは、しばらくの間、より学問的なアプローチから離れている人にとっては少し難解であり、ここではprevious postが助けてくれました。少なくとも、私はまだかなりの質問が残っていました。
私が理解しているように、Count Sketch構造はブルームフィルタに似ています。しかし、ハッシュ関数の選択は私を混乱させる。構造は、変更する "バケット"を決定するM個の可能な値を有するN個のハッシュ関数を有するN×Mテーブルであり、 "ペアごとに独立"である各Nに対する別のハッシュ関数sを有する。
ハッシュをユニバーサルハッシングファミリー、h(x)=((ax + b)%some_prime)%Mの何かを言う?
もしそうなら、+ 1か-1のどちらかを返すハッシュはどこから選んでいますか?そして、バケツの1つからこれまでに引いた理由は何ですか?
fooが追加された場合、バケットの半分が-1になり、半分が+1になると、fooのESTIMATE関数によって返される中央値は0に向かないでしょうか? – Peck
これは、情報を調整しなければ平均カウントが0になることは事実です。しかし、今度は平均が0である単一のカウントを修正します。 'foo'イベントを考えてみましょう。 'foo'の方向を知ることを条件に、 'fooの方向に偏っており、推定値が0からその方向に変化する度合いは、' foo 'のカウントになります。 –
中央値の内側は推定される実際の値に偏りがあり、中央値は分散の多くを取り除きます。 –