Huginの製品・サービスはマインドウエア総研により翻訳・提供されています。pict

ベイジアンネットワークの構築

BN to an influence diagram.このチュートリアルでは、HuginGUIで小規模なベイジアンネットワークを実装する方法を示します。実装されるBNは、入門-ベイジアンネットワークのリンゴの木の例でモデルされたものです。次のチュートリアルで、このBNをインフルエンス・ダイアグラムに拡張していくことにします。

我々のBNの質的表現を図1に示します。

apple_bn

図 1: リンゴの木の問題ドメインのBN 表現

このBNの設計を理解するには、基本コンセプトをお読みください。

新しい BNを構築

Hugin GUIを起動すると、編集ウィンドウが開きます。このウィンドウには、メニューバー、ツールバー、ドキュメント面が含まれます。 ドキュメント面では、(図 2に示す)
ネットワーク・ウインドウ内に、"unnamed1"という名前がつけられた新しい空のネットワークが自動的に開かれます。BNの構築をただちに開始できる "編集"モードが起動します(その他の主なモードとしては、BNを使用できる "実行"モードがあります。 )。

show_pane

図 2: ツールバー、 ノード編集パネル、ネットワーク・パネルを含むネットワーク・ウィンドウ 

ノードの追加

まずやることはSickノードを追加することです。これは以下のように行います。

  • "unnamed1"ネットワーク・ウィンドウのツールバーにある離散確率ツールを選択する(図 3参照)
  • ネットワーク・パネルのどこかをクリックする (図 2)

ネットワーク・パネルをクリックすると, C1とラベル付けされたノードが現れます。このラベルを "Sick"に変更するには::

  • マウス・カーソルでノードを選択する
  • ノード・プロパティ・ ツールをクリックして、 "ノード・プロパティ"を入力する (図 3参照)
  • "名前" フィールドと "ラベル"フィールドの両方を "Sick"に変更する
  • "OK"ボタンを押す

"名前"とはノードの内部名であり、一方、 "ラベル"とはノードのラベルです。 ラベルが指定されていない場合(ラベルを変更する前の場合のこと)は、そのラベルには内部名が使われます。内部名には半角英数字 'a'-'z' 、'A'-'Z'、 '0'-'9',とアンダーバー '_'のみ使用できます。ラベルには、ほとんどの文字が使用できます。

3knap

図 3: 左から: 離散確率ツール、ノード・プロパティ、リンク(因果矢印)ツール。

Dryと Loses のノードも同じように追加します。ネットワーク・パネル内でSHIFTキーを押しながらクリックしていくと、離散確率ツールを押さなくてもノードの追加ができます。ネットワーク・パネルでノードを選択し、右クリックをすると, ノード・プロパティ・ツールにアクセスできます 。

show_nodes

図 4: BNに追加された3つのノードSick、 Dry、 Losesを含むネットワーク・パネル。 ノード編集パネルは、現在有効になっているノードのCPTを含む。

因果矢印の追加

すると、図4のネットワーク・パネルに示されるのと同じBNがあるはずです。SickからLoses、DryからLosesに因果矢印を加えてみましょう。以下のように行います:

  • リンク・ツールをクリック(図 3参照)
  • SHIFTキーを押しながらマウスの左ボタンをで、矢印をSick からLosesにドラッグする。SHIFTキー押していれば、リンク・ツールをもう一度押さなくても矢印を加えることができる
  • マウス左でDryからLosesへ矢印をドラッグする

ここまでで、図1と同様の完成した質的表現になっているはずです。次のステップで、それぞれのノードのステートと条件付き確率表(CPT)を指定します。

ステート

BNの入門で、ノードのステートを以下のように指定しました: Sickは"sick"と "not"の2ステート: Dryは"dry" and "not"の2ステート: Losesは"yes" と "no"の2ステートを持っている。

まず、Sickのステートを指定する方法を説明します。

  • ツールバー下部のドロップダウンリストから選択するか、もしくは単にそれをダブルクリックして、現在のノード(アクティブ・ノード)としてSickを選択する
  • ツールバーのadd stateを押す (図 5参照)
  • ノード編集面のCPTから"State 0"を含むフィールドをクリックする
  • ステートに名前をつけるためフィールドに "sick"とタイプする
  • CPTの "State 1"というテキストを含むフィールドをクリックする
  • そのフィールドに "not" とタイプする

そして、Dryでも同じことをします。

tool_states

図 5: ステート追加/削除ツール

Losesでも同じことを正確にしてみてください。でも、現在のノードとしてLosesを選択したとき少し驚くかもしれません。LosesのCPTは、SickやDryのCPTに比べて少し大きいからです。これは、単にLosesが親ノードを持つからです(SickやDryは持っていません)。

  • Losesにステートを加え、その2つのステートに "yes"、 "no"と名前をつける

CPT 値の入力

次のステップでは、CPT値を正しく入力します (デフォルトでHugin GUIには すべてのノードに一様分布が与えられています)。その値はBNの入門で指定したもので、表1、表2、表3に示します。

Sick="sick" Sick="not"
0.1 0.9
表 1: P(Sick).
Dry="dry" Dry="not"
0.1 0.9
表 2: P(Dry).
Dry="dry" Dry="not"
Sick="sick" Sick="not" Sick="sick" Sick="not"
Loses="yes" 0.95 0.85 0.90 0.02
Loses="no" 0.05 0.15 0.10 0.98
表 3: P(Loses | Sick, Dry).

まず最初に、Sickノードに値を入力します:

  • 現在のノードとしてSickノードを選択する
  • Sick="sick"を表すフィールドをクリックする
  • 値 0.1を入力する (表 1より)
  • Sick="not"を表すフィールドをクリックする
  • 値 0.9を入力 する(表 1より)

Dry 、Losesの値も同じ方法で入力します。 LosesノードのCPTに値を入力する際は、正しくできたか注意してください。すべてのCPTを入力すると、 ネットワーク・ウィンドウは図 6のように見えるはずです。

show_states

図 6: 現在のノードとして選択されているLosesがあるドキュメント・ウィンドウ。LosesのCPTはノード編集パネルに見られる

ここで、BNの構築を終了します。この時点で、BNを保存しておくのが良いでしょう。保存の方法は以下のとおりです:

  • "ファイル"メニューから"名前をつけて保存"を選択する
  • 名前を入力する (例 "apple.hkb")
  • "保存"を押す

これで、ベイジアンネットワーク・テクノロジーを用いたHuginナレッジベースの構築を終えました。そして、Huginナレッジベースをコンパイルし、実行し、正しく動作することを確認します。

続く >>