LoginSignup
7
6

More than 5 years have passed since last update.

ベイジアンネットワークのパッケージ 〜Peblのチュートリアル実行〜

Posted at

 前回、Attribution ModelにMarkov連鎖を使うネタがあったので、簡単な触りをしました。
Attribution Modelには、ベイジアンネットワークを用いたものもあるようなので、そちらのパッケージや使い方の確認もしたいと思います。
 ベイジアンネットワーク自体は、色々な記事と書籍を確認してください。ベイジアンネットワークそのもので検索したり、グラフィカルモデルでも関連するものが出てきます。

Pythonパッケージ

どうもこの2つがあるみたいです。
まずは、Peblを使って見たいと思います。

Pebl

インストール

※ 普段はmac利用ですが、もふもふ技術部の記事によると、macでpeblは動作しないとの情報がありました。今回は、virtualboxにubuntuを入れて動かします。
動作環境は
OS: Ubuntu16.0.4
anaconda: 3-4.1.0
python: 2.7.12
pydot: 1.0.28
numpy: 1.11.1

です。

本体と関連するパッケージは以下のものをインストールしました。
pip install pebl
conda install Graphviz
pip install simple_json

※ nose_testが通らなかったですが、Tutorialは実行できました。

利用データ

公式ページのTutorialを見ながら、サンプルデータを確認したいと思います。
そちらから、"pebl-tutorial-data1.txt"をDLして、実行するディレクトリに格納しておきます。
これは、ゲノム系のテストデータで、76行12列のデータみたいです。列名を見ても残念ながらよくわかりませんでした。

実行例

続いて、Tutorialのテストデータを実行します。
First Example中のコマンドex1result.tohtml("example1-result")で以下のエラーが出ました。
/home/usrname/.pyenv/versions/anaconda3-4.1.0/envs/py27/lib/python2.7/site-packages/pebl/network.pyc in layout(self, width, height, dotpath)
287 dotgraph = pydot.graph_from_dot_file(dot2)
288 nodes = (n for n in dotgraph.get_node_list() if n.get_pos())
--> 289 self.node_positions = [[int(i) for i in n.get_pos()[1:-1].split(',')] for n in nodes]
290
291

文字列の浮動小数点('99.9'みたいなもの)をint()に入れている所がエラーの原因らしいです。
仕方ないので、該当行に変更を加えました。
リファレンスのものとは少し違う出力が出る可能性が出てきましたが、実行はできました。
変更前) self.node_positions = [[int(i) for i in n.get_pos()[1:-1].split(',')] for n in nodes]
変更後) self.node_positions = [[int(round(i)) for i in n.get_pos()[1:-1].split(',')] for n in nodes]

Tutorialが回って、htmlファイルが出力されました。
Log Scoreなどが出てきましたが、この辺りの意味がわからないと読み解けないので、その辺りも調べないと。。。

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6