web-dev-qa-db-ja.com

ベイジアンネットワークを作成し、Python3.xでパラメーターを学習する

私は、ベイジアンネットワークを作成し、データからそのパラメーターを学習し、推論を実行するために、Windows上のpython3.xに最も適切なツールを探しています。

次のように自分で定義したいネットワーク構造: enter image description here

this paperから取得されます。

「Size」と「GraspPose」を除き、すべての変数は離散的です(2つの可能な状態のみを取ります)。これらは連続的であり、混合ガウス分布としてモデル化する必要があります。

著者は、期待値最大化アルゴリズムを使用して条件付き確率テーブルのパラメーターを学習し、ジャンクションツリーアルゴリズム正確な推論を計算します。

私が理解しているように、すべてはマーフィーのBayes Net Toolboxを使用してMatLabで実現されています。

pythonで似たようなものを検索しようとしましたが、ここに私の結果があります:

  1. Python Bayesian Network Toolbox http://sourceforge.net/projects/pbnt.berlios/http://pbnt.berlios.de/ )。 Webサイトが機能せず、プロジェクトがサポートされていないようです。
  2. BayesPy https://github.com/bayespy/bayespy これは実際に必要なものだと思いますが、ネットワーク構造の構築にアプローチする方法を理解するために、私のケースに似た例を見つけることができません。
  3. PyMCは強力なモジュールのようですが、Windows 64でのインポートに問題がありますpython 3.3。開発バージョンをインストールするとエラーが発生します

    警告(theano.configdefaults):g ++が検出されません! Theanoは最適化されたC実装(CPUとGPUの両方)を実行できず、デフォルトでPython実装です。パフォーマンスが大幅に低下します。この警告を削除するには、Theanoフラグcxxを空の文字列。

更新:

  1. libpgm( http://pythonhosted.org/libpgm/ )。正確に私が必要なもの、残念ながらpython 3.x
  2. 非常に興味深い、活発に開発されているライブラリ:PGMPY。残念ながら、連続変数とデータからの学習はまだサポートされていません。 https://github.com/pgmpy/pgmpy/

アドバイスや具体的な例は大歓迎です。

22
Spu

pomegranate は、ベイジアンネットワークを含むように最近更新されたようです。私は自分で試したことはありませんが、インターフェースは見た目が素晴らしく、見た目はすっきりしています。

9
James Atwood

いつものようにパーティーに遅れましたが、JPypeを使用してBayesServer Java APIをラップしました。必要なすべての機能を備えていないかもしれませんが、上記のネットワークは:

from bayesianpy.network import Builder as builder
import bayesianpy.network

nt = bayesianpy.network.create_network()

# where df is your dataframe
task = builder.create_discrete_variable(nt, df, 'task')

size = builder.create_continuous_variable(nt, 'size')
grasp_pose = builder.create_continuous_variable(nt, 'GraspPose')

builder.create_link(nt, size, grasp_pose)
builder.create_link(nt, task, grasp_pose)

for v in ['fill level', 'object shape', 'side graspable']:
    va = builder.create_discrete_variable(nt, df, v)
    builder.create_link(nt, va, grasp_pose)
    builder.create_link(nt, task, va)

# write df to data store
with bayesianpy.data.DataSet(df, bayesianpy.utils.get_path_to_parent_dir(__file__), logger) as dataset:
    model = bayesianpy.model.NetworkModel(nt, logger)
    model.train(dataset)

    # to query model multi-threaded
    results = model.batch_query(dataset, [bayesianpy.model.QueryModelStatistics()], append_to_df=False)

私はBayes Serverと提携していません-Pythonラッパーは「公式」ではありません(Java APIを使用してPython直接)。ラッパーはいくつかの仮定を行い、あまり使用しない機能に制限を設けています。レポはここにあります: github.com/morganics/bayesianpy

0
Ian

私は同様のライブラリを探していましたが、ザクロは良いものだとわかりました。ありがとう ジェームズ・アトウッド

以下に使用方法の例を示します。

from pomegranate import *
import numpy as np

mydb=np.array([[1,2,3],[1,2,4],[1,2,5],[1,2,6],[1,3,8],[2,3,8],[1,2,4]])

bnet = BayesianNetwork.from_samples(mydb)

print(bnet.node_count())

print(bnet.probability([[1,2,3]]))
print (bnet.probability([[1,2,8]]))
0
Mohammed

Pymcのg ++​​の問題については、g ++のインストールを完了することを強くお勧めします。これにより、サンプリングプロセスが大幅に向上します。

警告を修正する方法は次のとおりです。1. g ++をインストールし、cywingをダウンロードし、g ++をインストールします。グーグルで検索できます。これを確認するには、「cmd」に移動して「g ++」と入力します。「require input file」と表示されている場合、g ++がインストールされています。 2. install python package:mingw、libpython 3. install python package:theano

これにより、この問題が修正されます。

私は現在、あなたと同じ問題に取り組んでいます、幸運を祈ります!

0
Teng Fu