19

我正在寻找最适合于python3.x的工具来创建贝叶斯网络,从数据中学习它的参数并执行推理。创建贝叶斯网络并使用Python3.x学习参数

的网络结构,我想自己定义如下: enter image description here

它是由this纸取出。

所有的变量都是离散的(并且只能采用2种可能的状态),除了“Size”和“GraspPose”,它们是连续的,应该被模拟为高斯混合。

作者使用最大期望算法学习的条件概率表的参数和结树算法计算精确推断。

据我所知,所有的都是通过Murphy的Bayes Net Toolbox在MatLab中实现的。

我试图寻找在python类似的东西,这里是我的结果:

  1. Python的贝叶斯网络工具箱http://sourceforge.net/projects/pbnt.berlios/http://pbnt.berlios.de/)。网站不起作用,项目似乎不被支持。
  2. BayesPy https://github.com/bayespy/bayespy 我认为这是我真正需要的,但我找不到类似于我的情况的一些例子,以了解如何处理网络结构的构建。
  3. PyMC似乎是一个功能强大的模块,但我在将它导入到Windows 64,python 3.3时遇到了问题。当我安装开发版本时出现错误

    WARNING(theano.configdefaults):g ++ not detected! Theano将无法执行优化的C实现(对于CPU和GPU),并将默认为Python实现。性能将严重下降。要移除此警告,请将Theano标志cxx设置为空字符串。

UPDATE:

  • libpgm(http://pythonhosted.org/libpgm/)。正是我需要的,不幸的是不支持python 3.x
  • 非常有趣的积极开发库:PGMPY。不幸的是,连续变量和数据学习尚未得到支持。 https://github.com/pgmpy/pgmpy/
  • 任何建议和具体的例子将不胜感激。

    +0

    我从来没有尝试过,但你可能会检查https://pypi.python.org/pypi/BNfinder/2.0.4 – runDOSrun 2015-02-10 12:26:42

    +0

    @runDOSrun谢谢。不幸的是似乎没有被移植到python 3.x – Spu 2015-02-10 12:29:56

    +2

    你是否尝试过scikit-learn? http://scikit-learn.org/stable/modules/naive_bayes.html似乎有你想要的,以及许多其他的ML算法在python 3.x中的工作。 – IVlad 2015-02-10 12:53:15

    回答

    6

    它看起来像pomegranate最近更新为包括贝叶斯网络。我没有自己尝试过,但界面看起来不错,而且非常清晰。

    +0

    是的,看起来很有前途,谢谢。我会试一试。展望当连续变量将被支持。 – Spu 2015-10-21 13:39:14

    +1

    @Spu你试过了吗?你有什么经验? – 2016-02-02 09:03:50

    0

    对于pymc的G ++的问题,我强烈建议得到G ++安装完成后,将获得巨大提升采样过程,否则,你将不得不忍受这个警告,坐在那里1小时为2000采样过程。

    获取固定警告的方法是: 1.安装g ++,下载cywing并获取g ++安装,您可以google。要检查这一点,只需进入“cmd”并输入“g ++”,如果它显示“需要输入文件”,很好,你已经安装了g ++。 2.安装python包:mingw,libpython 3.安装python包:theano

    这应该会解决这个问题。

    我目前正在与你一起工作,祝你好运!

    0

    一如既往的晚会,但我用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) 
    

    我不跟贝叶斯服务器下属 - 和Python包装不是“官方”(可以使用直接通过Python获得Java API)。我的包装做了一些假设,并对功能进行了限制,这些功能我并没有太多用处。回购是这里:github.com/morganics/bayesianpy