我正在尝试在 python
中使用森林(或树)增强贝叶斯分类器(Original introduction,Learning)(最好是python 3,但python 2也可以接受),首先学习它(结构和参数学习)然后再使用它用于离散分类并获得具有缺失数据的那些特征的概率 . (这就是为什么只有离散分类甚至好的天真分类器对我来说都不是很有用 . )
我的数据进入的方式,我喜欢使用不完整数据的增量学习,但我甚至没有在文献中发现任何这两种情况,所以任何进行结构和参数学习和推理的东西都是好的回答 .
似乎有一些非常独立且没有维护的python包大致朝着这个方向发展,但是我没有看到任何适度的近期(例如,我希望使用 pandas
进行这些计算是合理的,但是 OpenBayes
几乎没有使用 numpy
),增强的分类似乎完全没有我见过的任何东西 .
那么,我应该在哪里寻找一些实现森林增强贝叶斯分类器的工作?在python类中是否有一个很好的实现Pearl的消息传递算法,或者这对于增强的贝叶斯分类器是否适用?是否有一个可读的面向对象的实现,用于学习和推理其他语言的TAN Bayes分类器,可以转换为python?
我知道现有的包,但发现不合适
-
milk,它支持分类,但不支持贝叶斯分类器(我绝对需要分类和未指定功能的概率)
-
pebl,只进行结构学习
-
scikit-learn,它只学习朴素的贝叶斯分类器
-
OpenBayes
,自从有人将其从numarray
移植到numpy
后,它几乎没有变化,文档可以忽略不计 . -
libpgm,声称支持一组甚至不同的东西 . 根据主要文档,它进行推理,结构和参数学习 . 除了似乎没有任何方法可以进行精确推理 .
-
Reverend声称是一个“贝叶斯分类器”,文档可以忽略不计,从查看源代码我得出的结论是,它主要是一个垃圾邮件分类器,根据Robinson's和类似的方法,而不是贝叶斯分类器 .
-
eBay's bayesian Belief Networks允许构建通用贝叶斯网络并实现对它们的推断(精确和近似),这意味着它可以用于构建TAN,但是那里没有学习算法,并且BN的构建方式来自函数意味着实现参数学习比假设的不同实现更难 .
5 回答
我知道这一天有点晚了,但Octave forge NaN package可能会让你感兴趣 . 该软件包中的一个分类器是增强朴素贝叶斯分类器 . 代码是GPL,因此您可以轻松地将其移植到Python .
我担心
Random Naive Bayes
分类器(不是我所知道的)没有开箱即用的实现,因为它仍然是学术问题 . 以下文章介绍了组合RF和NB分类器(在付费墙后面)的方法:http://link.springer.com/chapter/10.1007%2F978-3-540-74469-6_35我认为你应该坚持使用
scikit-learn
,这是Python最流行的统计模块之一(以及NLTK
),并且有很好的文档记录 .scikit-learn
有一个随机森林模块:http://scikit-learn.org/stable/modules/ensemble.html#forests-of-randomized-trees . 有一个子模块 may (我坚持不确定性)用于管道向NB分类器:当然,还有一个可以使用的Naive Bayes分类器的核心实现递增:http://scikit-learn.org/stable/modules/naive_bayes.html
我同样对如何用libpgm进行精确推理感到困惑 . 但事实证明这是可能的 . 例如(from libpgm docs),
要使示例起作用,here is the datafile(我将
None
替换为null
并保存为.json
) .我知道游戏已经很晚了,但这是我在搜索资源用Python做贝叶斯网络时发现的最好的帖子 . 我以为我会回答,以防其他人在寻找这个 . (对不起,会有评论,但只是注册了SO来回答这个问题而且代表不够高 . )
R的
bnlearn
具有Naive Bayes和Tree-augmented朴素贝叶斯分类器的实现 . 您可以使用rpy2将这些移植到Python .http://cran.r-project.org/web/packages/bnlearn/bnlearn.pdf
似乎还没有这样的事情 .
目前最接近的事情似乎是eBay的Belief Networks的开源实现bayesian . 它实现了推理(两种精确的方式和近似),这意味着它可以用于构建TAN . 在我的open20q存储库中可以找到一个示例(目前仍然是一段丑陋的意大利面条代码) .
优点:
它有效 . 也就是说,我现在有一个基于
bayesian
信念网络推断的TAN推断的实现 .分别使用Apache 2.0和3子句BSD样式许可证,合法地将
bayesian
代码和libpgm代码组合起来以尝试推理和学习工作 .缺点:
bayesian
没有任何学习内容 . 尝试将libpgm
学习与bayesian
类和推理相结合将是一个挑战 .更多,因为
bayesian
假定节点由固定python函数的因子给出 . 参数学习需要一些包装代码才能调整概率 .bayesian
是用纯python编写的,使用dicts等作为基本结构,不使用任何加速numpy
,pandas
或类似的软件包可能带来的,因此即使对于我构建的小例子也很慢 .