Eigen Analysis of Networks
Journal of Social Structure に Eigen Analysis of Networks というレビューがありました。これで NEGOPY というソフトウェアの存在を知って探して みたんだけど、動かなかった・・・・・。
Journal of Social Structure に Eigen Analysis of Networks というレビューがありました。これで NEGOPY というソフトウェアの存在を知って探して みたんだけど、動かなかった・・・・・。
隣接行列の固有値を小さい順にグラフにプロットしてみました。 Watts Storogatz Simulator 2005/10/29 版 です。使い方は同じです。
kの値を3にすると、初期状態のレギュラーネットワークそれぞれのノードから 前後に合計6個のリンクが出ることになる。 この状態で、確率pを0にして randomize する、すなわちリンクのつけかえをせずに 固有値の分布だけを見ると、小さい値はほぼ等差数列(直線がフィットしそう)で あるが、上位3割ぐらいはそれから外れていて、直線にもフィットしそうにない。 確率pを0.2位にしてリンクの付替を繰り返すと、距離の平均値がほぼ一定の値に 落ち着くと同時に、固有値の分布もほぼ全体が一つの直線にフィットするようになる。 この現象は確かランダム行列の話と関わっている記憶があるが、今はちょっと わからないので、宿題。線形から離れるところを定量的に評価できれば、それが ランダムネスの一つの指標になるだろうし、それと距離平均の関係を調べても 面白そう。少し変えました。 Watts Storogatz Simulator 2005/10/28 版 です。例によって Java Web Start で起動します。
Watts Storogatz Simulator を作ってみました。Java Web Start で起動します。
グラフ理論の復習。 無向重みなしグラフ(隣接行列が対称で、成分が0または1)を考える。 隣接行列 A の (i,j) 成分は i 番目の頂点から j 番目の頂点への辺があるか ないかを表している。このとき、行列 A の n 乗の (i,j) 成分は i 番目の頂点から j 番目の頂点へ n ステップで到達することのできる 場合の数を表している。
これを利用して、A の n 乗の (i,j) 成分がはじめて 0 でない数になる n を求めると、i 番目の頂点から j 番目の頂点への距離となる。 普通距離はこの様にして計算されるが、有限の距離を持つかの判定が この方法でできるわけではないので、適当なところで打ち切る 必要がある。その意味で正確な計算方法ではないが、他のよい方法は 知らない。PageRank の計算も WebLink の隣接行列を考えて、 最大固有値の非負固有ベクトルを求めているのだろう。 Google PageRnak の原論文まで読んだわけではない (読まなくちゃね)ので、計算方法がどうなっているのかは知らないが、 Perron-Frobenius の方法をつかえば、すべての固有ベクトルまで求めなくてもよいし、 近似が荒くてよければ収束計算を途中で打ち切ればよいので、パフォーマンスも期待できる。 逆に言えば、ネットワーク分析でボナチッチの中心性指標を計算している、 と説明するよりも、このリンク構造の PageRank を計算している、といった方が 今やわかりやすいだろうな。
少し検索してみると、Perron-Frobenius の方法を改良して計算効率を上げようとか、 別のネットワーク指標を作ろうという研究は山ほど出てくる。 MATLAB NEWS のコラム(かなり古いが)に The World’ s Largest Matrix Computation というのがある。日本語だと Google の秘密 - PageRank 徹底解説 が面白い。以前にも紹介した Java Numerics にも挙げられていますが、 JSci という数学関係のライブラリがありました。 wavelet や MathML 用の DOM もあるみたい。
java.net の中にもedu-math というカテゴリーがあるけど、あまりたくさん登録されていない。 上位階層のedu-developer からたどってみる方が面白いものがあるかも。 edu-desktoptools にはちゃんと Project Looking Glass が登録されています。ネットワーク分析の分野でボナチッチのの中心性指標という指標が知られている。 無向グラフで辺に重みも多重辺もないとする。つまり隣接行列Aは対称で成分には 0と1しかないとする。
p0をすべての成分が1のベクトルとして、pn = A・pn-1 を成分の最大値で割って正規化したものとして、pnの極限を考えたものがボナチッチの中心性指標だと定義されている。 (「社会を<モデル>で見る」より) 数学の立場ではこれはいわゆるペロン・フロベニウスの定理で導かれる非負行列 (この場合は隣接行列)の最大固有値の非負固有ベクトルを求めていることに過ぎない。 要するにこれも隣接行列の固有値を考えるという意味で、グラフのスペクトル理論の 範疇にあるといっていい。
VR が Learning システムの中でどのように使われているのかを調べていたら、 Collaborative M-learning using Agents and Virtual Reality というのを発見。M-Learning の M とは mobile の m らしい。 システムとしては、VR のフレームワークである CLEV-R と e-Learning (画面から推察するとたぶんBlackBoard)のエージェントシステムである ABITS を融合してモバイル化しようという試みらしい。VR を PDA で見せられても という気はするものの、適材適所で使うというのはありでしょうね。
Permalink が変わってしまってます。リンク切れしてしまったらごめんなさい。
グラフ理論の復習。 線形代数的グラフ理論(竹中 淑子)などを参考に。
グラフの表現のひとつとして、隣接行列を考える。 つまり、頂点が n 個のグラフの場合、n×n行列で、(i,j)成分 = i番目の頂点からj番目の頂点への辺の個数とする行列を、隣接行列という。無向グラフの場合は対称行列になる。 有向グラフの場合はそうとは限らない。辺に重みがあるとき、多重辺 (ある始点からある終点までの辺が2つ以上あること)を持たない場合に
(i,j)成分 = i番目の頂点からj番目の頂点への辺の重み。辺がないときは0。と定義することもある。ここでは重みの値は正であることを仮定する。 (参考: Weighted Graph (mathworld)) 仮定しない場合は、重みが0のときと辺がないときの区別がつけられない、 内積をうまく定義できない、などの弊害が出てしまう(後述)。 このように定義すると、隣接行列からグラフを構成することができる。 グラフから隣接行列を定義するには、頂点の順番の取り方によって 置換行列による相似変換の分だけのあいまいさがある。 とすると、グラフの性質を調べるには隣接行列の置換行列による 相似変換によって変化しない不変量を考えればよい。 隣接行列(またはそこから導かれるラプラシアン行列)の固有値について調べることは、 一般の相似変換によって変化しない不変量を調べていることになるから、 情報は少し落ちている。でも調べやすいので、まずはそこから考えてみる。
ネットワーク分析に興味が出てきたので、グラフ理論の復習をしながら、 簡単なシミュレータを作っていこうと思う。 中期的なプランとしては(また放ったらかしにならないようにせねば)
3D Visual Data Mining というデンマークの大学がやっているプロジェクトはおもしろい。 データマイニングの可視化。
3DChat.org フリーの3Dワールドサーバ。3Dチャットもできる。
Complex network study of Brazilian soccer players なんて言うのを発見してしまいました。洒落なのか、まじめなのか よくわかりません。スポーツ番組の蘊蓄みたいな内容ですが、 面白いです。題材選択の勝利だなあ。
通算出場試合数の分布をとると、40試合で相転移が起こり、 通算獲得得点数の分布をとると、10点で相転移が起こるそうです。 ブラジルの選手でも40試合未満しか出られず、ゴールも一桁の プレーヤーが大多数で、それ以上のプレーヤーとは層が違う ということが証明されてしまったわけで。 本家 Wikipedia での Complex network の項目にも取り上げられているので、やっぱりまじめなのかな。さて、sourceforge の ImageJ Plugiins に行ってみる。そこの IJ Plugins: 3D Toolkit の手順にしたがってインストールする。 具体的には、
ImageJ というアメリカ国立衛生研究所(NIH)が作っているソフトウェアがある。 Java ベースの画像解析用のソフトウェアで、plugin やマクロで機能を追加できる。 おそらくMRIなどの医療用の画像を表示したり、画像処理したりするのが 目的で開発されたのだろう。これの 3D 表示用の plugin を使ってみる ことを目標にする。
まずは ImageJ 単体の起動。上に書いた ImageJ のサイトから最新版を ダウンロード。JDK1.5 の環境では、JRE のバンドル版じゃなくて JAR File バージョンで大丈夫だった。zip ファイルを展開して ij.jar と言うファイルができたら、そこで$ java -jar ij.jarとすればよい。これで jpeg や gif ファイルを開いて簡単なフィルタを かけたりすることができる。Java で書かれているが、それほど遅くはない。