Mímisbrunnr知恵の泉

← ネットワーク科学 一覧

🎓 レベル:発展 | 重要度:A(必須)

📎 前提:グラフの表現固有ベクトル中心性とPageRank | 関連:グラフラプラシアンとスペクトルスペクトルクラスタリング

要点(BLUF)

概念:グラフの上を歩く

ネットワークの構造を探る最も汎用的な道具がランダムウォークです。いまいるノードから、隣のどれかへランダムに1歩動く。これを繰り返すと、どのノードに長く滞在するか(定常分布)、どれくらいで全体を巡るか(被覆時間)といった量が、ネットワークの幾何を反映します。PageRank(固有ベクトル中心性とPageRank)、スペクトルクラスタリング(スペクトルクラスタリング)、拡散はすべてこの上に立っています。

数式による定義

次数対角行列を D=diag(deg(v))D = \mathrm{diag}(\deg(v))、隣接行列を AA とすると、ランダムウォークの遷移行列

P=D1A,Pvu=Avudeg(v)P = D^{-1} A, \qquad P_{vu} = \frac{A_{vu}}{\deg(v)}

各行が確率分布(和が1)。時刻 tt の分布 p(t)\mathbf{p}^{(t)}p(t+1)=p(t)P\mathbf{p}^{(t+1)} = \mathbf{p}^{(t)} P で更新されます。

定常分布 π\boldsymbol{\pi}π=πP\boldsymbol{\pi} = \boldsymbol{\pi} P を満たす分布。無向・連結・非二部グラフでは一意で、きれいに次数に比例します。

πv=deg(v)2m\pi_v = \frac{\deg(v)}{2m}

「次数が高いノードほど、ランダムウォーカーが長く滞在する」。これは固有ベクトル中心性・PageRank が次数と相関する根拠でもあります。

コードで確認

import networkx as nx
import numpy as np

G = nx.karate_club_graph()
A = nx.to_numpy_array(G)
deg = A.sum(axis=1)
P = A / deg[:, None]            # 各行を確率化 = 遷移行列

pi = np.ones(len(A)) / len(A)   # 一様分布から開始
for _ in range(2000):           # べき乗法で定常分布へ
    pi = pi @ P
pi = pi / pi.sum()

theory = deg / deg.sum()        # 理論: 定常分布 ∝ 次数

print("数値計算の定常分布(上位5):", [round(float(x), 4) for x in sorted(pi, reverse=True)[:5]])
print("理論 k/2m   (上位5)     :", [round(float(x), 4) for x in sorted(theory, reverse=True)[:5]])
print("両者の最大差            :", round(float(np.max(np.abs(pi - theory))), 8))

実行結果:

数値計算の定常分布(上位5): [0.1039, 0.0909, 0.0823, 0.0714, 0.0628]
理論 k/2m   (上位5)     : [0.1039, 0.0909, 0.0823, 0.0714, 0.0628]
両者の最大差            : 0.0

数値的に求めた定常分布が、理論値 deg(v)/2m\deg(v)/2m完全に一致しました(最大差ゼロ)。ランダムウォーカーの滞在確率は、純粋に次数で決まります。

拡散・PageRank・スペクトルとの接続

graph TD
    RW["ランダムウォーク P=D⁻¹A"] --> PR["PageRank<br/>+ランダムジャンプ"]
    RW --> Diff["拡散方程式<br/>連続時間極限"]
    RW --> Spec["正規化ラプラシアン<br/>L = I - D⁻¹A"]
    Spec --> SC["スペクトルクラスタリング"]

連続時間極限ではランダムウォークは拡散方程式になり、その生成作用素が正規化グラフラプラシアン L=ID1AL = I - D^{-1}Aグラフラプラシアンとスペクトル)。ラプラシアンの固有値・固有ベクトルがコミュニティ構造を露わにするのがスペクトルクラスタリング(スペクトルクラスタリング)です。

数式の直観的意味

定常分布 πv=deg(v)/2m\pi_v = \deg(v)/2m が成り立つ理由は、詳細釣り合いで見えます。エッジ (u,v)(u,v)uvu\to v に渡る確率流は πuPuv=deg(u)2m1deg(u)=12m\pi_u P_{uv} = \frac{\deg(u)}{2m}\cdot\frac{1}{\deg(u)} = \frac{1}{2m}。逆向き vuv\to u も同じ 12m\frac{1}{2m}。どのエッジでも両方向の流れが釣り合うので、次数比例の分布が動かない(定常)。要するに「ランダムウォークは、つながりが多い場所に比例して時間を使う」。これがネットワーク上のあらゆる拡散現象の基礎リズムです。

⚠️ よくある誤解・落とし穴

対応シミュレーション

本文のコードがそのまま検証用です。ラプラシアンとスペクトルは グラフラプラシアンとスペクトル

関連