贝叶斯网络工具Hugin api的使用

由于做毕设的需要,最近一直在研究Hugin Expert,一个关于贝叶斯网络的软件,今天有一些眉目, 总结一下,方便自己也方便他人。

Hugin Expert是一款商业软件,提供c、c++、java、.net的api支持,并且有免费的Hugin lite使用, 它的贝叶斯网络支持离散和连续的节点,支持表达式和高斯分布。这是我找了很多软件后最终选择Hugin 的原因。

由于我的毕设打算用java做,所以我开始只看java的api,没想到这该死的java api文档竟然没有一点 例子,郁闷得我不行,上网找也没找到有用的信息。几天后,一个偶然的机会让我打开了.net的api,竟 然发现其中有例子,而且还很详细,惊喜之余赶紧看,终于看明白了。然后就是把.net的转为java就行了 ,这难不倒我,java和.net我都比较熟,应该没什么问题。下面就讲讲我用得到的一些东西。

在api中,用到最多的就是Domain这个类了,它就是指一个贝叶斯网络,可以通过getNodes()方法获得 其中的所有节点。Node代表贝叶斯网络中的一个节点,它是一个基类,子类包括ContinuousChanceNode,  DiscreteNode, InstanceNode, UtilityNode。其中ContinuousChanceNode顾名思义就是连续节点了 ,DiscreteNode顾名思义就是离散节点,UtilityNode就是工具节点,InstanceNode,我目前还没有用到 它。DiscreteNode还有子类DiscreteChanceNode, DiscreteDecisionNode,最长用到的是 DiscreteChanceNode。

构建一个贝叶斯网络,可以通过载入某个文件,也可以新建一个网络,下面的代码演示,载入一个网 络:Domain domain = new Domain("C:\\Program Files\\Hugin Expert\\Hugin Lite 7.0 \\Samples\\fire.net", new DefaultClassParseListener());,新建一个网络更简单,只要调用Domian 的无参构造就好了。

现在由于自己也研究得不是很通,就不多做叙述了,贴一下代码:

package com.ssdut.wangyou;

import COM.hugin.HAPI.*;

public class LoadAndRun {

public static void main(String[] args) throws ExceptionHugin {

Domain domain = new Domain("C:\\Program Files\\Hugin Expert\\Hugin Lite 7.0 \\Samples\\fire.net", new DefaultClassParseListener());

domain.openLogFile("mylog.log");

domain.compile();

domain.closeLogFile();

domain.propagate(Domain.H_EQUILIBRIUM_SUM, Domain.H_EVIDENCE_MODE_NORMAL);

DiscreteChanceNode node = (DiscreteChanceNode)domain.getNodeByName("Fire");

node.selectState(1);

PrintNodeMarginals(domain);

}

    public static void PrintNodeMarginals(Domain domain) throws ExceptionHugin

     {

         NodeList nlist = domain.getNodes();

         for(int i=0; i<nlist.size(); i++)

         {

             DiscreteChanceNode node = (DiscreteChanceNode)nlist.get(i);

             int nStates = node.getNumberOfStates();

            System.out.println(node.getLabel());

             for (int j = 0; j < nStates; j++)

             {

                System.out.println(("-" + node.getStateLabel(j) + " " + node.getBelief(j)));

             }

         }

    }

}

上面的代码是载入一个网络,然后将名为Fire的节点设为证据,然后再显示所有节点的概率。如果有 研究Hugin Expert,我们可以一起探讨,请留言。

时间: 2024-10-25 18:23:48

贝叶斯网络工具Hugin api的使用的相关文章

从贝叶斯方法谈到贝叶斯网络

从贝叶斯方法谈到贝叶斯网络 0 引言     事实上,介绍贝叶斯定理.贝叶斯方法.贝叶斯推断的资料.书籍不少,比如<数理统计学简史>,以及<统计决策论及贝叶斯分析 James O.Berger著>等等,然介绍贝叶斯网络的中文资料则非常少,中文书籍总共也没几本,有的多是英文资料,但初学者一上来就扔给他一堆英文论文,因无基础和语言的障碍而读得异常吃力导致无法继续读下去则是非常可惜的(当然,有了一定的基础后,便可阅读更多的英文资料).     11月9日上午,机器学习班第9次课,邹博讲贝

分类算法-贝叶斯网络(Bayesian networks)

2.1.摘要       在上一篇文章中我们讨论了朴素贝叶斯分类.朴素贝叶斯分类有一个限制条件,就是特征属性必须有条件独立或基本独立(实际上在现实应用中几乎不可能做到完全独立).当这个条件成立时,朴素贝叶斯分类法的准确率是最高的,但不幸的是,现实中各个特征属性间往往并不条件独立,而是具有较强的相关性,这样就限制了朴素贝叶斯分类的能力.这一篇文章中,我们接着上一篇文章的例子,讨论贝叶斯分类中更高级.应用范围更广的一种算法--贝叶斯网络(又称贝叶斯信念网络或信念网络). 2.2.重新考虑上一篇的例子

贝叶斯网络

贝叶斯网络定了这样一个独立的结构:一个节点的概率仅依赖于它的父节点.贝叶斯网络更加适用于稀疏模型,即大部分节点之间不存在任何直接的依赖关系.       联合概率,即所有节点的概率,将所有条件概率相乘:     我们最终的目标是计算准确的边缘概率,比如计算Hangover的概率.在数学上,边缘概率被定义为各种状态下系统所有其他节点对本节点影响的概率的和.   边缘概率     优化     接下来就是要获得观测变量 xh  的估计,需要使 p(xh)的值最大, 即:       如果贝叶斯网络比

基于贝叶斯网络的云取证研究

基于贝叶斯网络的云取证研究 山东师范大学  刘栋 本文主要研究如下:(1)系统探讨了电子取证.云计算和云取证的基本概念,对电子取证技术.云环境面临的安全威胁以及云平台的实现机制进行了总结,深入分析了云取证的关键技术,最后给出了云取证的基本流程.(2)研究分析了云取证中的证据挖掘和证据处理过程,介绍了贝叶斯网络和MapReduce编程模型的基本理论.提出了基于MapReduce的序列模式挖掘算法,并对挖掘到的证据进行事件关联分析,运用贝叶斯网络构建了事件的贝叶斯结构模型,去除冗余数据,使取证结果能

大数据背后的神秘公式(下):“贝叶斯革命”

在上一篇文章<大数据背后的神秘公式(上):贝叶斯公式>中我们讲到贝叶斯公式在联邦党人文集作者公案和天蝎号核潜艇搜救中大显身手后,开始引起学术界的注意和重视,而其上世纪八十年代在自然语言处理领域的成功,向我们展示了一条全新的问题解决路径.计算能力的不断提高和大数据的出现使它的威力日益显现,一场轰轰烈烈的"贝叶斯革命"正在发生. 一. 真正的突破 自然语言处理就是让计算机代替人来翻译语言.识别语音.认识文字和进行海量文献的自动检索.但是人类的语言可以说是信息里最复杂最动态的一部

大数据背后的神秘公式(下):“贝叶斯革命”

贝叶斯公式在联邦党人文集作者公案和天蝎号核潜艇搜救中大显身手后(详见大数据背后的神秘公式(上):贝叶斯公式),开始引起学术界的注意和重视,而其上世纪八十年代在自然语言处理领域的成功,向我们展示了一条全新的问题解决路径.计算能力的不断提高和大数据的出现使它的威力日益显现,一场轰轰烈烈的"贝叶斯革命"正在发生. ◆ ◆ ◆ 真正的突破 自然语言处理就是让计算机代替人来翻译语言.识别语音.认识文字和进行海量文献的自动检索.但是人类的语言可以说是信息里最复杂最动态的一部分.人们最初想到的方法是

​【NIPS2017】深度学习真的不需要理论指导了?图灵奖得主讲座无人问津,贝叶斯之父Judea Pearl落寞身影背后引人深思

NIPS 2017 "Test of Time"论文大奖获得者Ali Rahimi 在长滩现场的演讲中抱怨当前机器学习尤其是深度学习使用的很多方法缺少(理论)理解.而Lecun则回怼说:仅仅因为理论没有追赶上实践的水平,就批评整个机器学习社区使用「炼金术」,这种言论是危险的. CMU大学教授,Petuum公司创始人Eric Xing则在看到这组图后表示:这是NIPS2017大会上一个让人难过的场景.成为一个单纯的"炼金术师"并不可耻,可耻的是并不努力从"炼

[置顶]白话贝叶斯理论及在足球比赛结果预测中的应用和C#实现

  离去年"马尔可夫链进行彩票预测"已经一年了,同时我也计划了一个彩票数据框架的搭建,分析和预测的框架,会在今年逐步发表,拟定了一个目录,大家有什么样的意见和和问题,可以看看,留言我会在后面的文章中逐步改善:彩票数据框架与分析预测总目录.同时这篇文章也是"[彩票]彩票预测算法(一):离散型马尔可夫链模型C#实现"的兄弟篇.所以这篇文章还有一个标题,应该是:[彩票]彩票预测算法(二):朴素贝叶斯分类器在足球胜平负预测中的应用及C#实现 . 以前了解比较多的是SVM,R

数学之美:平凡又神奇的贝叶斯方法

◆ ◆ ◆ 前言 这是一篇关于贝叶斯方法的科普文,我会尽量少用公式,多用平白的语言叙述,多举实际例子.更严格的公式和计算我会在相应的地方注明参考资料.贝叶斯方法被证明是非常 general 且强大的推理框架,文中你会看到很多有趣的应用. ◆ ◆ ◆ 1.历史 托马斯·贝叶斯(Thomas Bayes)同学的详细生平在这里.以下摘一段 wikipedia 上的简介: 所谓的贝叶斯方法源于他生前为解决一个"逆概"问题写的一篇文章,而这篇文章是在他死后才由他的一位朋友发表出来的.在贝叶斯写这