Bayes Server を試す

[前回](http://qiita.com/Masutani/items/cc825d8b93b77d5b1927)、Rで簡単にベイジアンネットワークを作ってみましたが、やはり本格的な使用となるとGUIを使った操作を使ってみたいと思うようになります。そうなると専用ツールしかほぼ選択枝はなくなります。
Bayesian Networkを操作するアプリケーションとしては、フリーから商用まで様々なものがありますが、きちんとしたグラフィカルツールがついていて、学習、推論がセットになっているものはなかなかありません。流行っていたころに定評のあったツールも、放置状態になっているものが多く、なかなか手を出すにも腰が引けてしまいます。

# Bayesian Network ツール

[10 Free and Open Source Bayesian Network Software](http://teklis.com/10-free-and-open-source-bayesian-network-software/) や[Software Packages for Graphical Models](http://www.cs.ubc.ca/~murphyk/Software/bnsoft.html)などにリストがありますが、ほとんどのものがGUIがなかったり、構造学習がなかったり、ベイジアンネットを簡易に使ってみたいという向きには難しいものが多かったです。
それらの中で、ツールとして常用してもよさそうだなというのを列挙しておきます。GUIがあって、構造学習、パラメータ学習ができるものに限定しました。

|Tool|GUI|Structure|Parameter|Screenshot|OpenScource|API|
|:-----------------|:-----------------|:------------------|:------------------|:------------------|:------------------|:------------------|
|[BayesiaLab](http://www.bayesialab.com/) |Yes|Yes|Yes|![image.png](https://qiita-image-store.s3.amazonaws.com/0/146939/701008b1-b451-003c-a1ec-fcbb442b1fd1.png)|No|Yes|
|[OpenMarkov](http://www.openmarkov.org/) |Yes|Yes|Yes|![ID-decide-therapy-priori.png](https://qiita-image-store.s3.amazonaws.com/0/146939/5f3c6e79-d56b-6da7-21dc-227640a8ca84.png)|Yes|No|
|[UnBBayes](https://sourceforge.net/projects/unbbayes/) |Yes|Yes|Yes|![image.png](https://qiita-image-store.s3.amazonaws.com/0/146939/7173febe-cf34-2085-fa0a-88dc22eeccf8.png)|Yes|Yes|
|[Hugin](http://www.hugin.com/) |Yes|Yes|Yes|![image.png](https://qiita-image-store.s3.amazonaws.com/0/146939/e18d589f-39f0-10dc-ebe2-3cee95ddb311.png)|Yes|Yes|
|[Uninet](http://www.lighttwist.net/wp/uninet) |Yes|Yes|Yes|![image.png](https://qiita-image-store.s3.amazonaws.com/0/146939/9952896e-8ec5-0fb8-f1af-367d95570686.png)|No|Yes|
|[BayesServer](https://www.bayesserver.com/) |Yes|Yes|Yes|![image.png](https://qiita-image-store.s3.amazonaws.com/0/146939/a633baab-4724-e4b3-75b5-236a9db8af3e.png)|No|Yes|

と、いろいろ見たのですが、どれも古き良き時代のレトロソフトみたいなものが多く、事実ディスコンになっているものも多く、2000年代初頭のベイジアンネットブームの名残としてひっそり置かれているという佇まいのものが多かったです。

日本では何といっても、本村先生の[BayoLink](http://www.msi.co.jp/bayolink/index.html)（旧BayoNet）が有名で、NTTデータ傘下になっても元気なようですね。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/146939/35d5ebca-822d-635f-03d4-00a83252998c.png)

色々見ていたのですが、GUIの使いやすさ（実は単にスクリーンキャプチャで判断していたりしますが）APIの充実度（今時っぽくHadoopやSparkへのアクセスも可能）などを見て、かつ、Webページなどモダンで、わかりやすいなどの理由で、Bayes Serverを試してみました。

# Bayes Server

Serverとありますが、Server動作を前提としているわけではなさそうです。特徴をざっくりあが得ていきます。Bayes Server Ltd. というイギリス南部のベンダーが開発しています。
2008年から開発され、もともとは Imperial Collegeで初版が作られたようです。

## GUIの充実

以下のように、各ノードの確率表(CPTではなく事前確率ですが)をノード内にインラインで表示するモードがあります。これで、ネットワークビューと確率表が別々になっているものに比べて格段に使いやすくなっています。ベイジアンネットワーク自体の理解にもこのビューは最適ですね。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/146939/19c5427f-d1e1-2ef6-6f44-6af16d54c376.png)
また、以下のようにエッジの重みづけなども当然可能です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/146939/db8005f1-8e7a-2ace-a660-099152115b6d.png)

## ユースケースの多さ

単純に構築して探索をGUI上でするだけでなく、いろいろな利用シーンを想定して作られています。
以下はバッチモードという多数の推論を一括して行う機能です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/146939/84d3d5b1-5316-c7fa-40cd-0809600ff749.png)
また時系列を扱うベイジアンネットも構築できるようです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/146939/b34443ce-6bd8-0312-ab74-05f9ea44aa04.png)


## データソースの充実

スタンドアロンで使うので、データソースのインポートなど周辺ツールも充実しています。ODBCやExcel,AccessなどからHadoop,SparkまでBIツール並にデータソースは豊富です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/146939/17768492-60ef-ae39-8f2b-baab4ac13e93.png)

## スケーラビリティ
試してみたところ、前回Rで少し苦労して可視化したレベルのノード数であれば十分表示できるようです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/146939/b1e5db5f-0c0e-fe7b-db9a-087206f6caed.png)

[FAQ](https://www.bayesserver.com/FAQ.aspx)には10,000ノードの実用的なデータ、テストにおいては100万ノードまでのネットワークが扱うことができたという報告があります。

## 豊富なAPI
推論、学習についてはAPIが.NET,Java,Python,R,Matlan,Excel,Sparkとおおよそデータハンドリングで使いそうな環境はすべて備えています。コアが.NETなので、それぞれの環境へのラッパーを利用するという形です。

実際ここまで完成度が高いと、すべてをベイジアンネットワークの枠組みで処理したくなりますね。