ベイジアンネットワークによる確率計算 のページは、 個々の現象のネットワークが分かっていて、また、 個々の関係の発生確率のデータを持っていて ベイジアンネットワーク のモデルが作れる場合をスタートにしています。
ところが、実際にベイジアンネットワークを使いたい時には、 ネットワークの構造がわからなかったり、発生確率のデータがない時もあります。
こうした事前情報はないけれども、 多変量解析 で使うような表形式のデータはある時に、 表形式のデータから発生確率のデータを作り、ベイジアンネットワークのモデルを作ってしまう方法が、 このページの話になります。
このサイトでは、 データマイニング として、 変数の類似度の分析 、 サンプルの類似度の分析 、 個々のカテゴリの類似度の分析 という分け方をしています。
アソシエーション分析 は、 個々のカテゴリの類似度の分析 の一種です。 ベイジアンネットワークとして作られるモデルは、矢印が付きますので、 アソシエーション分析 と見た目が似ていますが、モデルに出てくるのは、個々のカテゴリではなく変数です。 ベイジアンネットワークは 変数の類似度の分析 になります。
Rによる変数の類似度の分析 に 連関係数 を使って質的変数のネットワーク構造を調べる方法がありますが、 ベイジアンネットワークとは、これが一番近い方法になります。
本当の因果関係がよくわからない状況で、因果関係を考察するためのヒントを自動的に作成されたモデルから見つけたい場合は、 「因果関係が矢印で表されている」と思うより、 アソシエーション分析 で作られるグラフのように、「データの構造が、矢印で表される」と解釈しておいた方が、誤用しにくいです。 統計モデルによる仮説の探索 の方法の、ひとつになります。
構造解析のソフトでは、 「この変数とこの変数は、因果関係がないから結び付かない」をブラックリストとして、 「この変数とこの変数は、因果関係があるから結び付く」をホワイトリストして用意して、 その情報も参考にしながら、情報のない部分をソフトが推定する機能があります。
サンプル数は、多くても10000個くらいが良いです。 多ければ多いほど、本来あるはずのない辺が、作られやすくなります。
構造解析のソフトは、量的変数が使えるものもありますが、量的変数は質的変数に変換してから実行した方が良いです。
質的変数にした方が、間違いが起きにくい分析になります。 量的変数のままの時の、間違いの例は、 ベイジアンネットワークのアルゴリズムの違い のページにあります。
分析の結果、下記のグラフができたとします。
このグラフの意味は、「AとBを使うと、ABができる」ということになります。
例えば、
A + B = AB
や
A * B = AB
の式が背後にあると、このグラフになります。
この式を表すのに、矢印が役に立っています。
または、分析の結果、下記のグラフができたとします。
このグラフの意味は、「AとAC、ACとACD、AとACDは似た構造を持っている」ということになります。
上の例では、矢印だけ見ると、「AとBが原因で、ABが結果」に見えます。 AとBからABを作っているので、そう考えた場合は、矢印が因果関係の向きを表しています。
ただ、「ABの値で、AやBの値が決まる」という現象の場合は、矢印の向きと因果関係の向きは逆です。
データの背後に
A + B =AB
というものがあったとしても、「B」の変数がなく、「A」と「AB」しかない場合、ベイジアンネットワークによる構造解析では、矢印が一方向になりません。
が正解になります。
アルゴリズムによっては、矢印が一方向の結果が出ることもありますが、その場合は、変数の並び方が逆になると、矢の向きが逆になることもあります。
ちなみに、
量的変数に限定ですが、
LiNGAM
だと、「A」と「AB」だけの時に、
という結果を導けることがあります。
下の例は
AとBは独立、
AとA2とA3は、同じ値の変数、
ABという変数は、A + B で計算されてt作られている。
という量的変数のデータを、質的変数にしてから、構造を調べた結果です。
BとABは結び付いているのですが、A、A2、A3はABと結び付いていません。
ここでA2とA3を除くと、結果は下になり、元のデータの背景が見える結果になります。
重回帰分析
などで、
変数の選択
が必要なことはよく言われていますが、
ベイジアンネットワークで構造を調べる時にも、まったく同じであったり、相関が非常に高い変数のグループがある場合は、
前処理として、そのグループの中のひとつに絞った方が良いようです。
上の例に加えて
ACという変数が混ざっていたとします。
Cという変数があって、AC = A + Cという式で作られていますが、Cがデータに含まれていない場合です。
ここでBを除くと、A、AB、ACの3者の間には、一方向で矢印が付かないことがわかります。
また、BやACを除いた時も結果が変わります。
4種類のグラフを作りましたが、AとACについては、ABやBとの関係について、同じになっています。 ただし、AとACがまったく同じだと、ひとつ前のノウハウから、ABとは結び付かないはずですので、AとACは似ている部分があるけれども同じではないことまではわかります。
実務の中で、こうした分析をする時は、ベイジアンネットワークによる結果と、実際に起きていることを比べながら、本当の因果関係について、 考察を進めて結論を出すのがベストのようです。 ベイジアンネットワークだけで結論を出せないもどかしさはありますが。ベイジアンネットワークは考察のヒントとして使えます。
Rによるベイジアンネットワーク のページがあります。
R-EDA1
では、RのbnlearnというライブラリをGUIで使えるようになっています。
上記の例は、 Hill_Climbingで作っています。アルゴリズムが変わると、矢印の向きが逆になることもあります。
「Change integer variable into」を、 「numeric」にすると、「integer(正の整数)」になっている変数は、量的変数として扱います。 「categorical」にすると、質的変数として扱います。 数字のデータでも、数字の内容が使われないです。 この機能は、integerになっている変数の数字は、その数字が表している数字の大きさに特に意味がない場合がある場合や、 integerになっている変数は、原因側の変数として扱った方が良いことがあるために付けています。 ベイジアンネットワークでは、質的変数と量的変数があった場合には、質的変数から量的変数側に矢印を引くようになっています。
「Number of ranges」が、 例えば、「5」にすると、それぞれの量的変数について、最大値と最小値の間を5個の範囲に均等に分割して、 それぞれの範囲の範囲の名前をカテゴリとする質的変数に変換されます。 1以下の場合は、変換をしません。
Wekaでは、
起動直後のページ → エクスプローラー → 前処理でデータの読み込み、
→ Classifyのタブ → Chooseボタンを押して、小さな選択画面を出す
→ classifiers(分類) → bayes → BayesNetを選択後、Closeで選択画面を閉じる
→ Chooseボタンの右側に「BayesNet」で始まる文字列が出ているので、この文字列の辺りをダブルクリックして、選択画面を出す。
→ serchAlgorithmの右のChooseを押してHillClimberを選択
→ serchAlgorithmのChooseボタンの右側に「HillClimber」で始まる文字列が出ているので、この文字列の辺りをダブルクリックして、選択画面を出す。
→ maxNrOfParentsを変える。(1だと、ナイーブベイズモデルです。
ネットワークっぽくするには、2以上が良いです。
→ 「OK」で選択画面をそれぞれ閉じる。
→ Startで計算
→ Startボタンの下のResult listの中に計算の名前が出ているので、その文字列を右クリック
→ Visualize Graphと進むと、グラフが描けます。
詳しい内容は、シナジーマーケティング株式会社様のブログにもあります。 (ダブルクリックで小窓を出すところが、このブログではわからなかったので、上記で書きました。) http://lab.synergy-marketing.co.jp/blog/statistic/weka-bayesnet2
Wekaの場合は、質的変数が最低ひとつ必要です。 上記のHillClimberの場合は、一番元の親ノードは、解析者が指定する必要があります。また、そのノードは質的変数にしておく必要があります。
「Rと事例で学ぶベイジアンネットワーク 原著第2版」 Marco Scutari ・Jean-Baptiste Denis 著 共立出版 2022
構造学習だけで1冊の本になっていて、離散型データの場合、連続型データの場合、混合型の場合、時系列データの場合と続きます。
例題のデータのRによる分析方法を示しながらになっています。
Rユーザでないと、読みにくいかもしれません。
連続型データでは、3変数の間の矢印の有無は、線形の関係、ガウシアン(正規分布)を仮定して、条件付き独立性の検定で判断します。
時系列データの場合は、同一の変数を測定時間ごとに分割して、複数の変数として扱うことで、時系列を扱えるようにしています。
ベイジアンネットワークと
ベイズ統計
の違いについての説明もあります。
「ベイジアンの文脈であるか否かに限らず、データセットからベイジアンネットワークを学習することができる」
「データマイニング入門 :Rで学ぶ最新データ解析」 豊田秀樹 編著 東京図書 2008
データマイニング
全般の本です。
第7章がベイジアンネットワークです。
データの構造を調べる方法について、Rでの実施例がコード付きであります。
「フリーソフトではじめる機械学習入門」 荒木雅弘 著 森北出版 2014
機械学習全般の本ですが、
Wekaでデータの構造を調べる方法としてベイジアンネットワークを使う例が、少しあります。
「ベイジアンネットワーク」 植野真臣 著 コロナ社 2013
モデルが複雑な時の計算方法、データから発見的にモデルを作るための理論の話が詳しいです。
「グラフィカルモデル」 渡辺有祐 著 講談社 2016
グラフィカルモデルには、2種類あり、ベイジアンネットワーク(有向)と、マルコフ確率場(無向)。
マルコフ確率場は、確率的な依存関係のモデルで例として、統計力学などで出て来るイジングモデルが紹介されていました。
この本全体としては、ベイジアンネットワークの構造の推定の話が多かったです。
隠れ変数のあるモデルの扱い方として、
EMアルゴリズム
がありました。
「条件付き独立性検定による構造学習」 植野真臣 著 2016
http://www.ai.lab.uec.ac.jp/wp-content/uploads/2016/03/7b5a6437c76dc79ac91cbc88217dc84b.pdf
代表的なアルゴリズムが、コンパクトにまとまっています。
順路
次は
ベイジアンネットワークのアルゴリズムの違い