Frequently Asked Questions
- Huginがメモリを使い果たしてしまいました。どうすればいいですか?
- ネットワークを学習するにはどれぐらいのデータが必要ですか?
- GUIで保存したドメインが読み込めません。故障ですか?
- 例に示されてるクラス内のノード名が違う名前になっています(c1,c2,...)
- ネットワークはどれぐらい複雑にできるのですか?
- c/c++/java/vb で書かれたプログラムをコンパイル/実行するにはどのようにするのですか?
- 普通のretractionとfast retractionとの違いはなんですか?
- なぜ、デフォルトでfast retractionを使わないのですか?
- ネットワークを学習しています、A→BはB→Aとすべきです。これはバグですか?
- 経験表を加え、エビデンスを入力しましたが、adaptが動きません。故障ですか?
- fading tableの扱いはどのようなものですか?
- 表の学習の後、ネットワークに新しいデータを挿入しようとすると、"inconsistent
evidence"と出ました。故障ですか?
- VB.NETからHugin ActiveX APIは使えますか?
- API内の単一ノードのサイズはどのようにセットするのですか?
- GUI関連のどんなプロパティをAPIから設定できますか?
- マウスのダブルクリックを用いてファイルを開くとエラーが出るのですか?
- EMに事前知識を指定するにはどのようにするのですか?
- 尤度エビデンスはどのように使われるのですか?
- 決定ノードや決定ノードに関連する変数へのリンクを解釈する方法は?
- "Print Probabilities"に関する問題
- "Unable to start with arguments ..."
- HUGIN Graphical User Interfaceが遅いです
- どれぐらい小さい確率がサポートされていますか、有効桁の数はいくつですか?
Huginがメモリを使い果たしてしまいました。どうすればいいですか?
ベイジアン・ネットワークのサイズはノードの数で指数的に成長するかもしれません。特にCPTのサイズは親の数で指数的に増加します。ですから、たとえば、親P1、P2、P3、P4、P5、P6、P7でそれぞれノードが10のステートを持つノードCがあったとすると、CのCPTのサイズは10の8乗=100,000,000個の数値になります。そのためCPTは非常に大きなものになるはずです。さらに、各数値は8バイトのメモリを使用します、このように、たった8ノードしかないネットワークのために、そのCPTは800Mb必要になります。他にメモリ使用の原因としては、(コンパイル中に起こる)ジャンクション・ツリーの作成があります。ネットワークの構造次第で、もしたくさんのノードか最も大きいCPTを持つノードが同じクリークに属すると、ジャンクション・ツリー内のクリークはとても大きく成長する可能性があります。
- もっとメモリをインストールしてください
- CPTを調べ、親を取り除くか、親やそのノード自身からステートを取り除いて、最も大きいものを減らしてください。
- もしエラーがコンパイル中に起きるなら、構築されたクリークを変えるために、ネットワークの構造を変えてください。これはしばしば異なるジャンクション・ツリーをもたらしますので、これの代わりに、triangulation(三角網)法を変えることもあります
(Network properties -> compilation -> triangulation method)。
これは、データが表現する領域次第なので、正確な尺度を与えるのは難しいです。モデルが複雑になればなるほど、データからモデルを学習するのに必要なデータは多くなります。
目安として、ネットワーク中の最も大きい表内のそれぞれのセルに対して少なくとも5ケースは入るべきです。つまり、どんな親構造の配置に対して分布を学習するためには、(5*ステート数)のケースが必要です。
Hugin 6.0以後、モデルを保存するためのデフォルトのタイプは、"Class"です
(古い.netファイルにあるネット識別子に対するものとして、その.netファイルにあるクラス識別子によって示されています)。これらのクラスは、ドメインに読み込めません。代わりに、それらはClassに読み込まれる必要があります。ClassCollectionを通して、.netファイルを読み込むことによって、間接的にこれがなされます。
もし新しいモデルをプログラムに読み込みたいのなら、5.7netファイルとして保存する必要があります
(ファイルメニューで "Save as"を選択)。
クラスからドメインを作成する際に、クラスは"flattened"になっています。つまり、すべてのインスタンス・ノード(もしくはサブネット)は拡張され、メインネットワークに置かれます。このため、ノードの名前が(求められているような)特有のものであることが保証するのは、もはや不可能です。このように、ドメイン内のノードは一般的な名前が与えられます。ドメイン内のノードを正確に識別するためには、そのノードのソース・ノードを見なければなりません。
Huginはネットワークの複雑性に関して制限を設けておりません。これはマシンにあるメモリの利用可能性によってのみ制限されています
(Question 1参照)。
Hugin C/C++/Java/VB APIを用いるための命令はHugin API Reference ManualSection 1.3あります。
fast retraction(高速退行)推論を実行する場合、(普通の推論でのプロパゲーション前とは対照的に)プロパゲーション中に、エビデンスのポテンシャルがクリーク・ポテンシャルに増殖します。もしこれが正確になされると、変数の集合Vでの結果のポテンシャルは、V内の変数を除くすべての変数にエビデンスを仮定したVの周辺確率になります。
これは疑わしい結論を識別するのに役立ちます。もし、そのオブザベーションによって、ある変数が非常に小さな確率を持つとすると、そのオブザベーションが原因で、何か間違っている可能性があります。
デフォルトのエビデンス結合モードとしてfast retractionを使うことは魅力的ではありますが、一般的には望ましいものとはいえません。なぜなら:
- fast retractionのプロパゲーションは、そのモデル中の論理的な関係性で失敗することがあります
- fast retractionのプロパゲーションは、圧縮されたドメイン、連続変数およびインフルエンス・ダイアグラムを持つドメインには利用できません。
いいえ。学習過程で、多くの状況が生起しますが、仮定されたリンクに強制的に固定された方向をつけさせることもあります(例えば、ネットワーク内での循環をさけるため)。時々、これにより上記のような結果を生み出すこともあります。ユーザーはたいていのケースで情報を求められるので、NPCアルゴリズムを用いることは、これが起こるのを最小限にします。リンクが書かれた方向であるべきだと、データが実際に示すこともあります。典型的に、これはもしデータ量が少ない場合に起きます(question 2参照)。
仮定された親の条件をもつノードの仮定の上でadaptationが動作するには、その条件についてのexperienceカウントがゼロよりも大きい必要があります。このことは、adaptationが使われる前に、すべてのexperienceカウントがゼロよりも大きい値に初期化されるべきであることを意味します。
新しいオブザベーションを考慮して、表を更新するとき、古いオブザベーションを"fade
out"させることが関連します。これは、モデル化されたモデルが動的であるときのケースです。fading
tableは、どれぐらい速く古いオブザベーションが消されるのかを指定します。fading
tableでの値”1”は、古いオブザベーションが消されていないことを示し、ゼロに非常に近い値はほとんど消されていいます。
(値”0”は、親条件に関するadaptationを無効にします)。
これを解決するためには、すべてが0よりも大きい確率をもち、すべての経験表が1に初期化されてEM学習を開始するべきです(普通、equal
distributionを用いる)。これは、学習が終わった後、確率がゼロにならないことを保証します。それ以外の場合は、表はこれをしないときにあなたが得るものとほぼ同じものになります。
はい。Hugin ActiveX APIはVB 6.0ために書かれていますが、 VB.NETで使うことも可能です。ですが、VB.NET
CollectionはVB 6.0 Collectionと相性が悪いため、特別なCollectionの使用を必要とします。その問題に関してはHugin
ActiveX Help(チュートリアル→Hello Bayes .net)をご覧ください。
ノードの個別のサイジングはGUIの機能で、APIにはあまり明確に提供されていません。しかしながら、APIから設定できる"HR_Node_Size"という名の属性に保存されています。GUIは、"(<
width >, < height >)"の形式を持つ属性を想定しています。
次の表に、APIから属性を書いて設定できるGUI関連のプロパティI、および各属性の形式を一覧します。
Network
| Property | Attribute | Format |
| Groups | Number of groups | HR_Groups_UserGroupsNo | int |
| Group names | HR_Groups_GroupNames | tab separated string |
| Group colors | HR_Groups_GroupColors | c1c2c3... where cx is a number from 00 to 63 denoting one of the standard colors |
| Color of continuous chance nodes | HR_Color_ContinuousChance | a number from 00 to 63 denoting one of the standard colors |
| Color of discrete chance nodes | HR_Color_DiscreteChance | a number from 00 to 63 denoting one of the standard colors |
| Color of decision nodes | HR_Color_Decision | a number from 00 to 63 denoting one of the standard colors |
| Color of utility nodes | HR_Color_Utility | a number from 00 to 63 denoting one of the standard colors |
| Color of instance nodes | HR_Color_Instance | a number from 00 to 63 denoting one of the standard colors |
| Grid | Show grid | HR_Grid_GridShow | 0 for hidden, 1 for shown |
| Snap to grid | HR_Grid_GridSnap | 0 for no snapping, 1 for snapping |
| Horizontal grid spacing | HR_Grid_X | integer |
| Vertical grid spacing | HR_Grid_Y | integer |
| Description | Description of the network | HR_Desc | String |
| Node font | Font name | HR_Font_Name | String |
| Font size | HR_Font_Size | int |
| Italic | HR_Font_Italic | 0 for normal, 1 for italic |
| Zoom | Zoom factor | HR_Zoom_ZoomFactor | integer (100 = normal, 200 = double size, etc.) |
| | | |
Node
| Property | Attribute | Format |
| Size |
HR_NodeSize |
( int, int ) |
| Group |
HR_Grp |
int denoting the group |
| Show name or label |
HR_Node_Label_Style |
int ( 0=label, 1=name, 2=label(name), 3=name(label) ) |
| Show x number of decimals in the table |
HR_Node_TablePrecision |
int |
| Description for state x |
HR_State_x |
String |
たぶん、ファイル "zlib1.dll"があなたのコンピュータ上のsystem32のディレクトリにないことが原因です。このディレクトリにファイルをコピーすると、問題は解決します。
EMアルゴリズムを実行する前に、条件付き確率表(CPT)の内容が、CPT上で事前知識を供給するのに使われます。事前知識を使用すると、(EM後の)CPTは、事前知識やデータをもとに推定されることになります、つまり、データと事前知識が融合されます。
ベイジアン・ネットワークにあるそれぞれのノードに関連したものは、経験表です。EM学習アルゴリズムは、経験表のあるノードそれぞれのCPTを推定します。もし、経験表が0もみを含なら、CPTの最初の内容は、対応するCPTを推定するときに考慮されません。それぞれの親条件に対して1つの経験countがあります。経験countはCPTの最初の内容の重みを指定します。
Aをあなたが(尤度)エビデンスを入力したいノードとします。新しいノードBをAの子として加え、次のように条件付き確率表P(B|A)を指定することを考えましょう:
| | a1 | a2 |
| b1 | 0.3 | 0.4 |
| b2 | 0.7 | 0.6 |
そのとき修正されたネットにオブザベーションB=b1を入力すると、元のネットのAに尤度(0.3,0.4)を入力したのと同じになります。 この機能は、不正確なオブザベーションに用いられるものです。Aが100%正確には観測できないもので、BはAのオブザベーションを表現しているとします。もし間違ったオブザベーションのリスクが10%あるなら、
P(B|A) このようになります。:
| | a1 | a2 |
| b1 | 0.9 | 0.1 |
| b2 | 0.1 | 0.9 |
もしBがネットの一部であるなら、実際のオブザベーションにより B=b1かB=b2を入力することになります。もしBがネットの一部でないなら、かわりにAの尤度として(0.9,
0.1) または(0.1, 0.9)を入力することになります。
尤度のその他の使用法としては: いくつかの"root''ノードがいくつかの他の事前分布を持っているかのように装って推論を行なうときがあります。。これは、望ましい事前分布と、オリジナルの事前分布との商に等しい尤度を指定して行います(もちろん、このトリックは、ゼロによる割り算が含まれないときのみ有効です)。
インフルエンス・ダイアグラムの決定ノードにささるリンクは、時間が先行していることを示している:
決定がなされるとき、決定ノードの親は観測されなければなりません。Huginツールはそのすべての将来の決定が最適の方法でされるという仮説のもとに最適な取るべき行動を計算します。それゆえに、すべての決定ノードを結ぶ直接パスを指定する必要があります。--このパスは決定に時間的順序を与えることになります。
決定ノードD(およびすべての前の決定ノードとその親)のすべての親が観測され、伝播されると、HuginはDのさまざまな行動の期待効用を表示します。将来、または、すべての親が観測されていないとき、決定に関する表示された値は、単純な方法では解釈できません。
HUGIN GUIの"Print Probabilities"機能では、プリンター(もし選ばれれば、ファイル)に選択されたノードの"monitor
window"をプリントします。確率(chace)ノードや決定ノードのみ、モニターを関連されます。効用ノードやインスタンスノードはモニターとは関連していません。このように効用ノードやインスタンスノード(あるいは、モニターを必要としないような封入されたノード)の確率をプリントするのは不可能です。
(null pointerエラーは、バージョン6.5(以前)にエラー提出したなかのバグによりおこります。このバグは6.6で修正されました(が6.6もインスタンスノード内のノードの確率をプリントすることはできません)。)
MS Windowsにシステムアドミニストレーターとして、HUGINソフトウェア(たとえば、DeveloperやResearcher)をインストールIし、すべてOKのようです。アドミニストレーターでログイン状態でHUGINソフトウェアを起動できます。プログラムをスタートしても適切に動いているようです。
その問題は、HUGINソフトウェアを(アドミニストレータ権限のない)他のユーザーログインから立ち上げようとするとおこります。エラーメッセージには:
"unable to start with arguments"と出て、次に"could not start
the application"とでます。
HUGINソフトウェアはアプリケーションを起動するたびに、有効なライセンス情報に関する登録データベースをチェックします。インストール・プログラムはHKEY_CURRENT_USERの下にライセンス情報を格納しています。これは、ソフトウェアをインストールするユーザーのみがソフトウェアをインストールできることを示しています。 もし、厳密に特定のユーザー種別(たとえばアドミニストレーター)でHUGINソフトウェアをインストールしたり、その他のユーザー種別でソフトウェアを実行したりする必要があれば、HKEY_LOCAL_MACHINEの下にライセンス情報を格納したインストールプログラム(そして有効なライセンス情報に関するこの位置をチェックするバージョンのHUGINソフトウェア)が必要です。これにより、コンピュータのすべてのユーザーがプログラムを起動することができる。
ノートパソコンのユーザーの中には、HUGIN Graphical User Interfaceが遅くなるのを経験している人もいます。つまり、これはATI
PowerPlayオプションが有効化されているとき、IBMのノートパソコン(たとえばIBMモデル T43p)でのケースです。
PowerPlayオプションを停止すると、パフォーマンスの問題が解決します。PowerPlayオプションはノートパソコンがプラグインしていると、グラフィックのパフォーマンスに影響を与えるようです。.
Hugin Graphical User Interfaceは倍精度のインタフェース・エンジンを使用しています。つまり、
"IEEE 754"倍精度浮動小数点演算を用いています。これによりおよそ
1E-300ぐらい小さい数の計算ができます。
IEEE 754倍精度は53有効ビッドを意味しています。これは10進数での15-16桁に相当します。もちろん、最後の数ビッドは、四捨五入の可能性があるため信頼できません。しかしながら、離散ノードのあるネットワーク内の確率の計算に用いられる演算は非常にしっかりしていますので、最初の13-14桁は信頼できます。 |