LoginSignup
0
0

More than 5 years have passed since last update.

Mining of Massive Datasets Chap. 4.3 Filtering Streams

Posted at

Mining of Massive Datasetsの4.3節の概要を書きます。

  • ストリームの中から集合を見つける
  • メモリーに載り切らない時どうするか?
    • Bloom filteringでしょ!

4.3.1 A Motivating Example

  • メールアドレスの中からスパムと登録されたアドレスをdropしたい
  • 最大10億個のメールアドレスの集合Sを仮定する
  • ストリームはメールアドレスと、メール自身のペアとする
  • 全メールアドレスをメモリに保持するのは辛いし、ディスクアクセスもしたくない

  • Bloom filteringの基本は、bit arrayで集合Sの要素を表現する

  • 要素に対して、k個のhash関数を通した値を保持しておく

  • streaming dataに対してhash関数を書けて、全ての値が0になったらspamとして捨てる

  • hashの衝突で、ざっくり1/8くらいはfalse positiveが発生するが、7/8殺せるなら問題ない

4.3.2 The Bloom Filter

Bloom filterの構成要素は以下からなる。

  1. 0で初期化された、n-bitのarray
  2. ハッシュ関数 h_1, h_2, ..., h_k。 "key"となる値をn個のbucketに保管し、n bitのbit-arrayを作る
  3. m個の値を持った集合S

集合Sのkey Kに対して、h_i(K)を計算して対応するbitについて、bit-arrayに1を立てる

ここのFigure. 1-4がわかりやすい

4.3.3 Analysis of Bloom Filtering

原理上、false positiveが発生してしまう。
その確率は、bit-arrayを持つ数でコントロールできる。

  • x個のダーツの的とy本のダーツがあったとする
  • どのダーツも当確率で的に当たるとする
  • いくつの的に1本以上のダーツが当たるか?

ある的にダーツが1本も当たらない確率は (x-1)/x
y本のダーツがある的にあたらない確率は

$$ \left(\frac{x-1}{x} \right)^y = \left(1-\frac{1}{x} \right)^{x \left( \frac{y}{x} \right)} $$

1.3.5 の近似より、εが小さい時
$$ (1-ε)^{1/ε} = 1/e $$
とかけるので

$$ e^{-y/x} $$

になる。

example 4.3はわかりやすい例

実際の問題だと、
集合S は要素を m 個持っていて、bit-arrayはn-bit、k個のハッシュ関数を仮定する。
的の数はx = n, ダーツの数は y=kmとなり
0のままのbitの数は
$$ e^{-km/n} $$

全部1が立つfalse positiveなケースは
$$ 1-e^{-km/n} $$
ハッシュの数を増やすと
$$ \left( 1-e^{-km/n} \right)^{k} $$

4.3.4 Exercises for Section 4.3

省略

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0