mmds10.6-7

37
MMDs 10.6-7

Upload: mfumi

Post on 20-Jul-2015

113 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: MMDs10.6-7

MMDs 10.6-7

Page 2: MMDs10.6-7

前回までの復習• 10.1: Social Networks as Graphs

• 10.2: Clustering of Social-Network Graphs Betweenness / Girvan-Newman Algorithm

• 10.3: Direct Discovery of Communities完全2部グラフの発見

• 10.4: Partitioning of Graphsラプラシアン行列

• 10.5: SIMRANK

Page 3: MMDs10.6-7

10.6 Counting Triangles• n個のノード, m本の辺があるランダムグラフを考える

• 3つのノードの組の数 : nC3 ≒ n^3/62つのノード間に辺のある確率: m/nC2 ≒ 2m/n^2 3つのノード間全てに辺のある確率: (2m/n^2)^3 = 8m^3/n^6 グラフ内の三角形の数の期待値は,(8m^3/n^6) * (n^3/6) = 4/3 (m/n)^3

Page 4: MMDs10.6-7

三角形を数える(探す)理由• グラフがソーシャルグラフなら,n人のグループ内にm個の友人関係が存在していることになる

• AとBが友人, BとCが友人なら CとAの友人の可能性は高いと考えられる=> グラフの三角形の数を数えることで,そのグラフがどれくらいソーシャルネットワークに近いか分かる

A B

C ?

Page 5: MMDs10.6-7

三角形を見つけるアルゴリズム• n個のノード, m ≧ n の辺を持つグラフを考える

• 各ノードは1,2,…,nの番号が振られている

• √m より次数が多いノードを heavy hitter と呼ぶ

• heavy hitter 三角形: 全てのノードがheavy hitter

• heavy hitter 三角形とそれ以外の三角形で違う数え方を使う

Page 6: MMDs10.6-7

前準備

• 各ノードの次数を求める : O(m)

• ノードペアをキーとする辺のインデックスを作成する. ハッシュテーブルが使える. : O(m)

• ノードをキーとする辺のインデックスを作成する

Page 7: MMDs10.6-7

前準備 (cond)

• 次数順にノードをソート

• vとuが同じ次数ならvとuの番号に従って並べる

• vの次数がuより小さい or vとuの次数でかつ v < u => v u と表す

Page 8: MMDs10.6-7

Heavy-Hitter 三角形の数• heavy-hitter ノードの数は O(√m)

• heavy-hitter ノードの3つ組の数は O(m^(3/2))

• 辺に関するインデックスを使うことでO(1)で辺が存在するか分かる => 全体では O(m^(3/2)) で heavy-hitter 三角形の数が分かる

Page 9: MMDs10.6-7

それ以外の三角形の数• (v1,v2) の辺を考える

• v1,v2共にheavy hitterなら辺を無視する

• v1がheay hitterではなく v1 v2のときu1,u2,…,ukをv1に隣接するノードとする (k < √m であり, O(k) = O(√m) で探せる)

• ui に対し (ui, v2)があるかをO(1)で判定またuiの次数もO(1)で求められる

Page 10: MMDs10.6-7

それ以外の三角形の数• (ui,v2)が存在し,v1 uiのときに三角形{v1,v2,ui}をカウント

• 全部でm個のへんがあるので,合計時間は O(m^(3/2))

• まとめ: 前処理 O(m), heavy-hitter O(m^(3/2)) それ以外: O(m^3/2))

Page 11: MMDs10.6-7

アルゴリズムの最適性

• 完全グラフの場合m = nC2, 三角形の数は nC3この三角形を数えるためには Ω(n^3) しかし m = O(n^2) より このアルゴリズムはO(m^(3/2))

Page 12: MMDs10.6-7

MapReduce を使う方法

• 便宜的にノードに1,2,…,nと番号を振る

• E(A,B) でノードA,B間の辺を表す(ただしA<B)

Page 13: MMDs10.6-7

MapReduce を使う方法• 三角形はE(X,Y), E(X,Z), E(Y,Z)の自然結合つまり E(X,Y) E(X,Z) E(Y,Z)

• SQLで表すと,SELECT e1.A, e1.B, e2.BFROM E e1, E e2, E e3WHERE e1.A = e2.A AND e1.B = e3.A AND e2.B = e3.B

e1.A = e2.A

e1.B = e3.A

e2.B = e3.B

X Y

Z

./ ./

Page 14: MMDs10.6-7

復習 : 関係代数 (2.3)

Attributes

タプルで表現

関係Rを R(A1,A2,…) と表す (AはAttributes)上の例だとR(From,To), 関係のタプルは(url1,url2), (url1,url3), (url2,url3), …

Page 15: MMDs10.6-7

復習 : 関係代数 (2.3)• 関係代数で定義される基本演算

• 選択, 写像,直積,和,差,自然結合

• 2.3.4 以下で各演算のMapReduceでの実装方法

• 参考: http://importantfish.com/relational-algebra-operations-with-mapreduce/

Page 16: MMDs10.6-7

復習 : 関係代数 (2.3)• 自然結合2つの関係のタプルのペアにおいて共通するattributeが全て一致した場合,そのタプルを結合する.R(A,B) S(B,C)と書く この場合関係RとSを満たすものでBが共通するものが(A,B,C)の形で得られる

./

Page 17: MMDs10.6-7

復習 : 関係代数 (2.3)• MapReduceによる自然結合 R(A,B) S(B,C) Map: Rのタプル (a,b) → (b, (R,a))  Sのタプル (b,c) → (b, (S,c))Reduce: (b, [(a1,b,c1), (a1,b,c2), …, (a1,b,cn), (a2,b,c1), (a2,b,c2), …, (a2,b,cn), …, (am,b,c1), (am,b,c2), …, (am,b,cn)])

./

Page 18: MMDs10.6-7

3つの自然結合• 今回求めたいのは,E(X,Y) E(X,Z) E(Y,Z)

• 方法

1. E(X,Y),E(X,Z) を先に結合,その後E(Y,Z)を結合

2. E(X,Z),(Y,Z) を先に結合,その後E(X,Y)を結合

3. 一度のMapReduceジョブで全部処理する

./ ./

Page 19: MMDs10.6-7

3つの自然結合

• 2.5.3 に 3つの自然結合を1回のMapReduceジョブでおこなう方法が載っている

Page 20: MMDs10.6-7

3つの自然結合R(A,B) S(B,C) T(C,D)./ ./

ex 2.9h(v)=2, g(w)=1

S(u,w) に対し,ハッシュ関数h,gを用意 (u,w) を (h(u),g(w))に対応するreducerに送る

R(u,v)に対し,(u,v)をh(u)に対応する行に送るT(w,x)に対し,(w,x)をg(w)に対応する列に送る

Page 21: MMDs10.6-7

MapReduceによる3角形のカウント

• b^3 のreducerを使う

• (u,v) をE(X,Y) の関係だとする→ (h(u),h(v),z)

• (u,v) をE(X,Z) の関係だとする→ (h(u),y,h(v))

• (u,v) をE(Y,Z) の関係だとする→ (z,h(u),h(v))

今回: E(X,Y) E(X,Z) E(Y,Z)./ ./

Page 22: MMDs10.6-7

MapReduceによる3角形のカウント

• b^3のreducerを使う場合E(u,v) の数がm個だとすると,Mapはm*3b 回reducerと通信. つまり O(mb)

• ハッシュ関数によって一様にreducerにタプルが割り振られたとする.各タスクは O(m/b^2)の辺を受け取る.10.6.2 と同じアルゴリズムを使えば O(m^3/2)

Page 23: MMDs10.6-7

より少ないreducerを使う

• 10.6.5

Page 24: MMDs10.6-7

10.7 Neighborhood Properties of Graphs

• 大規模なグラフにおいて2ノード間の最適パスを求めるには?

• 場合によっては近似アルゴリズムで妥協する

Page 25: MMDs10.6-7

有向グラフ• ex) u → v は ページuからページvへのリンク or u から v へ電話を掛けた事実

• 有向グラフにおける経路 (path) v0,v1,…,vk => v1 → vi+1 へ到達可能 (i=0,1,…,k-1)

• vの半径がd : vからあるノードuまでの距離が最大でもd. N(v,d) でそのようなuの集合を表す ex) N(v,0) = {v}, N(v,1) = {vとvに隣接するノード}

Page 26: MMDs10.6-7

Neighborhood Profile

• あるノードvについて |N(v,1)|, |N(v,2)|, … の数列をneighborhood profileという

Page 27: MMDs10.6-7

具体例

• N(A,0) = {A}, N(A,1) = {A,B,C} N(A,2) = {A,B,C,D}, N(A,3) = {A,B,C,D,E,F,G} Profile: 3,4,7,7,7,7…

• N(B,0) = {B}, N(B,1) = {A,B,C,D} N(B,2) = {A,B,C,D,E,F,G} Profile: 4,7,7,7,… ← Bの方がAより中心 (実はDが一番中心)

Page 28: MMDs10.6-7

グラフの直径• グラフの直径がd=> グラフ内の任意のノードuとvの距離が最大d

• 有向グラフの場合,グラフが強連結の時のみ直径が存在する(Webは強連結ではない)

• 無向グラフの場合,グラフが連結していれば直径が存在

Page 29: MMDs10.6-7

グラフの直径を求める• 全てのノードvについて |N(v,d)| = |N(v,d+1)| となるようなdが存在 そのようなdをd(v)で表す

• グラフが強連結なら max d(v)) が直径

• [証] N(v,d+1)はN(v,d)とN(v,d)内のノードuに隣接するノードwの和集合. N(v,d)にN(v,d)内の任意のノードが隣接するノードが含まれるのなら, |N(v,d)| = |N(v,d+1)| = |N(v,d+2)| = … . N(v,d) ⊆ N(v,d+1)より,|N(v,d)| = |N(v,d+1)| となるのは N(v,d)とN(v,d+1)が同じ集合のとき

Page 30: MMDs10.6-7

推移閉包 / 到達可能性

• グラフの推移閉包 (Transitive Closure) :長さ0以上の経路が存在するノードペア(u,v)の集合

• 到達可能性 (Reachability)uからvへの経路が存在することこれをpath(u,v) と書く

Page 31: MMDs10.6-7

推移閉包 / 到達可能性• グラフの推移閉包は,path(u,v)であるようなuとvのペアを全て見つける問題

• 到達可能問題はあるノードuに対して path(u,v)であるvを全て求める問題

• 到達可能問題は,N(u,∞) ≡ ∪i≧0 N(u,i)を求めるのと同じ

Page 32: MMDs10.6-7

推移閉包 / 到達可能性の例

• Webページのグラフ: 数十億のノード

• ある一つのページから到達可能なページを調べることは一つのコンピュータでできる

• しかしWebページのグラフの推移閉包を求めるのは困難 (10^18 のペアを考えなければならないため)

Page 33: MMDs10.6-7

MapReduceによる推移閉包の計算

• 関係Arc(X,Y) のペア(x,y) : x → y の辺が存在

• ノードvから到達可能なノード集合 Reach(X)を計算したい.i回目の繰り返しにおいてReach(X) = N(v,i)

Page 34: MMDs10.6-7

MapReduceによる推移閉包の計算

• Reach(X) は最初 v のみを含むMapReduceの計算を何回したらReach(X)がN(v,i)を含んだとする

• N(v,i+1) を求めるためには, ReachとArcを結合する必要がある. SQLなら,SELECT DISTINCT Arc.YFROM Reach, ArcWHERE Arc.X = Reach.X

Page 35: MMDs10.6-7

MapReduceによる推移閉包の計算

• この計算は 2.3.7 の手法が使える

• 重複を排除するためには 2.3.8 の手法が使える

• しかし,グラフによっては収束回数が全然異なるex) Webページ多くのページはあるページから10-15回で到達可. しかし到達まで長くかかる場合もある(前後にしかリンクがないチュートリアルのページなど)

Page 36: MMDs10.6-7

MapReduceによる推移閉包の計算

• recursive-doubling query SELECT DISTINCT p1.X, p2.YFROM Path p1, Path p2WHERE p1.Y = P2.X

• Path(x,y)は最初はArc(X,Y)と同じ

• 直径dならlog2dの反復で計算可能

• この計算で推移閉包は早く計算できても,到達可能性に比べ遥かに多くのメモリが必要なことは変わらない

Page 37: MMDs10.6-7

グラフのノード数削減• 推移閉包を求める際には強連結のノードは1つのノードにまとめられる

• ノード数を削減したいグラフをGとする

1. Gからノードvを適当に選ぶ

2. NG(v, ∞)

3. G内のノードからvに到達できるノードの集合NG’(v,∞)を求める

4. NG(v,∞) ∩ NG’(v,∞) によって強連結なノードを求める

5. 4. で求めたノードを削除し,1つのノードに置き換え,適当に辺を張る

6. 以上を適当に繰り返す