1. HOME
  2. 製品
  3. BayoLink
  4. サポート
  5. Q&A 操作に関する質問

BayoLinkの操作に関する質問とその回答をまとめました。

操作に関する質問

モデルの自動構築について

推論について

その他の操作について


モデルの自動構築について(質問への回答)

モデル構築で必要なメモリコストはどのような要因で決まりますか
一般に、モデルの探索に必要なメモリコストは、以下のような要因により決まります。

変数の数

変数の数が増えるとモデルの探索空間が大きくなるため、探索に時間がかかるようになります。

探索アルゴリズム
  • 全探索
    指定された探索空間の全てのモデルを探索します。計算のオーダーは N * 2^N (2 の N 乗の N 倍、N は変数の数) となります。
  • Greedy Search
    指定された探索空間内のモデルを小さなモデルから順に探 索し、良いモデルが見つからなくなるまで探索します。一般に全探索よりも計算量は小さくなります。

変数の状態数
状態数が大きな変数は、生成される CPT のサイズが大きくなります。

変数の親の数
状態数が小さくても親の数が多くなると、生成される CPT のサイズが大きくなります。
大規模データでモデルを構築したいのですが
BayoLinkではレコード数が数十万行、カラム数が100程度の大規模な学習データでもモデルを自動構築を行うことが可能です。しかし条件によっては現実的な時間で構築を終了することが困難な場合もあります。このようなモデル構築を行う場合は、次の条件を考慮することで目的が達成される場合があります。

使用メモリの上限を上げる
BayoLinkの実行で使用可能なメモリは当初512MB(ver 5.0.1以降は1024MB)に設定されています。初期設定のまま大規模データで構造学習を行うとメモリ不足が発生することがあります。
・関連項目

最大親数を指定する
モデル構築ウィザードの2ページ目で[最大親数]という項目があります。ここをチェックすると各ノードの親候補を指定した数で制限します。例えば、「3」と指定してモデル探索すると、各ノードの親は最大でも三つまでというモデルが構築されます。
学習データのカラム数とレコード数に上限はありますか?
モデルの自動構築で扱うことのできるカラム数とレコード数には、上限を設けておりません。但し多すぎる場合にはメモリエラーが発生いたします。
参考までに、以下はノード数=320個~500個、レコード数=10000件の学習データで構造学習を行った場合のベンチマークです。
ノード数 処理時間(分) 使用メモリ(MB)
320 29 260
400 46 370
500 78 460

※環境

  • CPU: Intel Core 2 CPU 6420 @2.13GHz 2.13GHz
  • 実装メモリ (RAM): 4.00GB
  • BayoLink(旧BAYONET) ver. 5.0.2 (64bit)
[データインポート] でエラーメッセージが表示されます。
[データインポート] で入力画面下のメッセージ欄に次のようなメッセージが表示される場合があります。

[ERROR] 学習データの読み込みでエラーが発生しました:Comparison method violates its general contract!

これはデータに含まれる数値(またはテキスト値) のパターンや順序などにより、まれに発生するエラーです。
BayoLink の設定ファイルを変更することで上記のエラーが回避できます。
  1. 以下のファイルをデスクトップなどにコピーします。
    C:\Program Files (x86)\BAYONET\bin\bayonet.l4j.ini
  2. コピーしたファイルを開き、3行目に次の一行を追加します。
    -Djava.util.Arrays.useLegacyMergeSort=true
  3. ファイルを保存して閉じます。そのまま元の場所に上書きコピーします。
  4. BayoLinkを再起動します。
※ C:\Program File(x86) 以下のファイルは、そのまま編集できないので別の場所にコピーして編集を行い、もとの場所に戻します。  
モデルの自動構築が失敗します。どのような原因がありますか
モデルの自動構築の途中でエラーメッセージが表示されたり、出来上がったモデルのノードに"CPT"という警告が表示されている場合は、モデルの自動構築が失敗している可能性があります。モデル構築の失敗は、以下 が原因の場合があります。

使用禁止文字
学習データに使用禁止文字が使われていないかご確認ください。使用禁止文字については操作マニュアルの$5.9( ver.5 の場合は $4.3.3)を参照してください。
学習データのフォーマット
学習データのフォーマットが不正でないか、以下についてご確認ください。
  • 各レコードのデータとヘッダーのカラムが完全に対応しているか
  • データの最終行の後にリターンのみの行や不正な値が入っていないか
ノードの親子関係をダイアログで1つ1つ設定するのは困難です
ノードの親子関係は通常モデル構築ウィザードで設定します。しかしノード数が多い場合や複雑な設定を行うときに、1つ1つダイアログで設定するのは大変です。このようなときモデルインフォメーションファイルを使用すると便利です。モデルインフォメーションファイルはモデルの親子関係を記述するファイルで、構築学習ウィザードで指定します。モデルインフォメーションファイルの使用方法は操作マニュアルの$7.1.2をご参照ください。
モデルインフォメーションファイル
構造学習のアルゴリズムで"Greedy Search" と "全探索"の違いを教えてください。
"Greedy Search" とは近似解法の一つです。具体的には、リンク無しのモデルから開始して、各ノードの親を欲張り法で決定します。つまり、評価基準値が一番良くなるリンクを順に追加していき、評価基準値の値を良くするようなリンクが無くなれば、そこで探索を終了します。

一方、"全探索" は指定された探索空間を全探索しますので、その解は取り得る全ての状態の中で評価基準値が最も良い厳密解となります。しかしながらノードの数が多い場合には時間的な問題、メモリの問題により実質的に探索不可能となります。

GreedySearch は近似解法ですので、一般的にその解は厳密解とは異なります。しかしながら 全探索 に比べ、時間とメモリのコストの削減が期待できます。このような場合を含め何らかの原因で厳密解が求めることが不可能な場合に、有効な探索アルゴリズムです。
何をもって最適なモデルとすれば良いでしょうか
最適なモデルとは、その目的によって異なるかと思います。例えば、次の二つの目的が考えられます。
  • 既存の学習データにフィットしたモデルを作成したい
  • 将来得られる未知のデータにフィットした(予測精度の高い)モデルが作成したい
仮に前者の目的であれば、相関や尤度などの統計量や人の目から見て自然かなどの基準によりモデルを作成していくことになるかと思います。また、後者の目的であれば、AIC や MDL などのペナルティ値を含む情報量基準を用いたり、交差検証により予測精度を評価したりしていくことになるかと思います。
このように情報量基準をデータや目的によって容易に使い分けることを可能にしている面は BayoLink の一つの機能であります。
数値データが離散化されるのはどういう場合ですか?
学習データにおける数値データの扱いはBayoLinkのバージョンにより異なります。
  • ver.6
学習データインポート時に任意で数値データを離散化できます。離散化できるのは値の型が『数値型』の 場合です。(『数値型』は値が数値のみのカラムが該当します。)
離散化の区間は、K-means法や等区間法で自動計算できます。また任意の区間を指定することもできます。
離散化をしない場合、数値をそのまま状態値とみなします。
離散化についての詳細は 操作マニュアル $6.3.4 をご参照ください。 ノードの設定テーブル(ver.6)
  • ver.5 以前
学習データで数値のみのカラムは、構造学習の際に自動的に離散化されます。離散化は、 数値データの状態数が一定の個数(初期設定では10)を越えた場合に行われます。
離散化が行われるカラムはモデル構築ウィザードで"type"項目がContinuousになります。
このカラムを離散化しない場合には、"continuous"項目のチェックをはずします。
学習データの離散化(ver.5)
離散化のパラメータはプロパティ[構造学習]→[離散化]より変更することが可能です。
詳しくは操作マニュアル$9.7.1をご参照ください。
数値データでモデル構築を行うと時間がかかります。
学習データに数値のみのカラムが多い場合、モデルの自動構築で非常に時間がかかる場合があります。
原因の1つとして数値データの離散化が考えられます。
離散化は数個のカラムで行われる分は問題ないのですが、数十個になるとモデル構築時の負荷は非常に大きくなります。このような負荷を抑えるためには次のような方法があります。

  • 学習データのカラム数やレコード数を少なくする。
  • あらかじめ、数値データをカテゴリ化してテキストで置き換えておく。例えば0から9までを"S1"、10から19までを"S2"などに置き換える。
モデル自動構築の評価基準はどれを選ぶとよいですか?
BayoLink では AIC などの情報量規準を評価関数とし、 Greedy Search アルゴリズムで各ノードに対して親を決めています。
情報量規準と呼ばれる ML(最大対数尤度), AIC, MDL については 結果として得られるモデルのリンク数に次のような傾向があります。

ML > AIC > MDL

ML はリンクの本数が多く検証では精度が良いという結果となりますが、パラメータ数が多くデータに過剰にフィットしているとも考えられます。未知のデータの予測などに対しては、よりシンプルなモデルが得られるAICやMDLを使う方が 一般的には良いとされています。
構造学習の実行中に 『構造学習を中止しました(Java heap space)』というエラーメッセージが表示され、学習が失敗します。
これは構造学習での消費メモリが非常に多い場合に発生します。
以下を行うと、メモリの消費量をおさえ学習が可能となる場合があります。
  • 各ノードで状態値の数をできるだけ少なくする (最大で5個くらいに絞る)
  • 構造学習の学習アルゴリズムで "欲張り法(Greedy Search)" を使う
  • モデルの親子関係の設定で、必須親または親候補を制限する

一つのノードに対して多数の必須親や候補親を指定して学習を行うと、学習が終了しない場合があります
一つのノードに多数の親をつけたり、各ノードの状態数が多いとクロス集計表が膨大なサイズとなりメモリ不足を起こしていることが原因です。
親ノードの数を減らす、または各ノードの 状態数を減らすことで学習が可能となる場合があります。
またノードの数を減らしたくない場合は、全親ノードについてリンクを逆転させ子ノードとするのも有効です。

推論について(質問への回答)

推論時に証拠状態をダイアログで1つ1つ設定するのは困難です。まとめて設定することはできないでしょうか?
付属のExcelアドインを利用することで複数の推論もまとめて実行することが可能です。詳しくは「Excel アドインマニュアル」をご参照ください。
推論を実行すると"network has cycle. not DAG."というメッセージが表示され実行できません。
これはネットワークに双方向リンクまたは循環があるときに発生します。循環回避コマンドを使用するか、または手動で循環を取り除いてから推論を実行してください。
推論を実行すると"failed to malloc output buffers"というメッセージが表示され実行できません。
これは推論を実行するのに必要なメモリが確保できない場合に発生します。原因として非常に大きなサイズのCPTが存在することや、BayoLinkの使用メモリを最大限大きくしていることが考えられます。
関連項目
推論による事後確率が実際に計算した値と異なります
ベイジアンネットのグラフ構造は変数間の独立性を表現しています。 変数間の関係(CPT)から確率計算を行いますので、 一般的にはデータ集計とは異なります。
集計結果と推論の結果が異なる理由として主に以下があります。
  1. 正規化手法に「MAP」を選択している場合
    「MAP」を選択している場合にはクロス表の各セル 1 を足して正規化しています。この場合は「ML」を選択すれば一致します。
  2. クロス表において全ての値が 0 のカラムがある場合
    クロス表のカウントが全て 0 となるカラムがある場合確率計算の結果はデータの集計と大きく異なるケースがあります。このようなカラムの確率分布は一様分布が与えられます。この分布はデータに基づいたものではありませんので、データ集計との乖離の原因となります。
  3. 推論アルゴリズムによる誤差
    BayoLink の推論アルゴリズムは近似解法ですので、グラフ構造によって誤差がでることがあります。この場合は、推論アルゴリズムを MSSM に変更し、samplecount の値を増やしていくと一致するようになります。

その他の操作について(質問への回答)

BayoLinkを起動すると"Could not create the Java virtual machine"というメッセージが出ます。
起動の際、次のメッセージが表示され起動ができない場合は使用メモリの上限値が大きすぎる可能性があります。使用メモリの上限値を下げてから起動してください。なおPCの環境によっては初期設定(メモリの上限=1024MB)で起動しない場合もあります。
起動エラー
関連項目
使用メモリの上限を変更したいのですが
BayoLinkで使用するメモリはおおまかに分類すると以下の3種類です。
  1. 推論以外のBayoLinkで使用するメモリ
  2. 推論で使用するメモリ
  3. その他JVM等で使用するメモリ
このうち 1 については以下の方法で上限値を変更することが可能です。

BayoLink(旧BAYONET) ver 3
  1. BayoLink 起動スクリプト (<BayoLink install dir>\bin\BayoNet.bat) をエディタで開き、最下部の Java 起動コマンドに以下のオプションを付け加える
  2. メモリを 1024MB に設定する場合の例
    "%J2RE_PATH%\bin\java" -Xmx1024m (・・・略・・・)
BayoLink ver 4-6
  1. BayoLinkの設定ファイル (<BayoLink install dir>\bin\BayoNet.l4j.ini) をエディタで開き、-Xmx項目を変更します。(OSがWindows Vistaまたは7の場合、ユーザーアカウント制御(UAC)を無効にしてから変更します。)
  2. メモリを 1024MB に設定する場合の例
    -Xmx1024m
(注意)
  • 変更できる値の上限値はOSやPCの環境等によって異なります。
  • 1を上限近くまで大きくすると、2に割り当てられるメモリが減少します。この状況で大きなCPTの存在するモデルで推論を行うとメモリ不足が発生し、推論ができない場合があります。
クロス集計表(CTT)を見たいのですが
クロス集計表は (Cross-Tabulation Table) を意味し、変数 の各状態ごとにデータを集計した結果が格納されます。モデル構築機能では、学習データからCTTを作成しさらにそれを正規化してCPT (条件付確率表 (Conditional Probability Table)) を作成します。
CTTは、CPTタブ内の[クロス集計]を選択することにより確認できます。 CTT
検証ツールの検証シナリオに表示されないノードがあります(ver.5.0)
BayoLink(旧BAYONET) ver 5.0.0の検証ツールはDCNodeに対応しておりません。このためモデルにDCNodeがあってもこれらのノードは[検証シナリオ]には表示されません。
なお、ver 5.0.1からはDCNodeに対応しております。
  • 対象バージョン: 5.0.0
Excelの推論アドインで使用できるノード数には上限がありますか?
Excelアドインの推論では、モデルのノード数の上限値は設定しておりません。ただし一枚のシートで説明変数と推論結果を記述するため、これらの項目の合計がExcelの列数の上限を超えてしまうと、エラーが発生します。

(列数の上限はExcel 2003の場合256個、2007及び2010の場合は16384個です。)

シートに記述する項目の列数は、以下の式で計算できます。

説明変数の個数 + 目的変数の個数 + 全目的変数の状態の和 + 2

(式最後の"2列"は、入力値と出力値の境界と、エラーメッセージの出力に使用します。)

上の式の値が、Excelの列数の上限を超えないように、説明変数や目的変数の数を調整します。 または、一度に指定する目的変数を減らして、複数回に分けて推論を行います。