【问题标题】:How to learn a Bayesian Network (structure+parameters) with the WEKA API?如何使用 WEKA API 学习贝叶斯网络(结构+参数)?
【发布时间】:2011-05-27 04:50:19
【问题描述】:

有人知道使用 WEKA API 从数据中学习贝叶斯网络的“正确”程序吗?我在 WEKA 文档中找不到好的说明。

根据文档和每个功能“应该”做什么,我认为这会起作用:

Instances ins = DataSource.read( filename );
ins.setClassIndex(0);

K2 learner = new K2();

MultiNomialBMAEstimator estimator = new MultiNomialBMAEstimator();
estimator.setUseK2Prior(true);

EditableBayesNet bn = new EditableBayesNet( ins );
bn.initStructure();

learner.buildStructure(bn, ins);
estimator.estimateCPTs(bn);

但事实并非如此。我已经尝试过这个和其他变体,并且在 WEKA 代码中的某处不断收到 ArrayIndexOutOfBoundsExceptionNullPointerException,那么我错过了什么?

【问题讨论】:

  • 我正在寻找开始使用贝叶斯网络的资源。看看你提到的 WEKA API。
  • WEKA GUI 本身是否使用 API?如果是这样,您可以以此为例。您还可以查看源代码,看看是否有任何意义。

标签: java api weka bayesian-networks


【解决方案1】:

它对我有用。我尝试了以下一组数据:

@relation test

@attribute x {0,1}
@attribute y {0,1,2}
@attribute z {0,1}

@data
0,1,0
1,0,1
1,1,1
1,2,1
0,0,0

让我提一下,当您的目标属性不是名义上的(例如数字)时,会出现异常。当您的所有属性都是标称时,贝叶斯网络会更好地工作。如果您将目标属性更改为数字,您将获得NullPointerExceptionArrayIndexOutOfBoundsException。特别是,在这一行抛出了这个异常:

EditableBayesNet bn = new EditableBayesNet(ins);

你应该首先离散化你的目标类。

【讨论】:

  • 我不知道以前出了什么问题,但现在它也对我有用。
猜你喜欢
  • 2020-04-15
  • 2015-06-07
  • 2015-04-10
  • 2013-06-24
  • 2012-04-28
  • 2017-06-11
  • 2013-04-08
  • 2016-05-01
相关资源
最近更新 更多