私は、ベイジアンネットワークを作成し、データからそのパラメーターを学習し、推論を実行するために、Windows上のpython3.xに最も適切なツールを探しています。
次のように自分で定義したいネットワーク構造:
this paperから取得されます。
「Size」と「GraspPose」を除き、すべての変数は離散的です(2つの可能な状態のみを取ります)。これらは連続的であり、混合ガウス分布としてモデル化する必要があります。
著者は、期待値最大化アルゴリズムを使用して条件付き確率テーブルのパラメーターを学習し、ジャンクションツリーアルゴリズム正確な推論を計算します。
私が理解しているように、すべてはマーフィーのBayes Net Toolboxを使用してMatLabで実現されています。
pythonで似たようなものを検索しようとしましたが、ここに私の結果があります:
PyMCは強力なモジュールのようですが、Windows 64でのインポートに問題がありますpython 3.3。開発バージョンをインストールするとエラーが発生します
警告(theano.configdefaults):g ++が検出されません! Theanoは最適化されたC実装(CPUとGPUの両方)を実行できず、デフォルトでPython実装です。パフォーマンスが大幅に低下します。この警告を削除するには、Theanoフラグcxxを空の文字列。
更新:
アドバイスや具体的な例は大歓迎です。
pomegranate は、ベイジアンネットワークを含むように最近更新されたようです。私は自分で試したことはありませんが、インターフェースは見た目が素晴らしく、見た目はすっきりしています。
いつものようにパーティーに遅れましたが、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
私は同様のライブラリを探していましたが、ザクロは良いものだとわかりました。ありがとう ジェームズ・アトウッド
以下に使用方法の例を示します。
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]]))
Pymcのg ++の問題については、g ++のインストールを完了することを強くお勧めします。これにより、サンプリングプロセスが大幅に向上します。
警告を修正する方法は次のとおりです。1. g ++をインストールし、cywingをダウンロードし、g ++をインストールします。グーグルで検索できます。これを確認するには、「cmd」に移動して「g ++」と入力します。「require input file」と表示されている場合、g ++がインストールされています。 2. install python package:mingw、libpython 3. install python package:theano
これにより、この問題が修正されます。
私は現在、あなたと同じ問題に取り組んでいます、幸運を祈ります!