Weka:为什么getMargin返回全零?

时间:2018-11-27 07:21:48

标签: java machine-learning weka bayesian bayesian-networks

我正在使用Weka Java API。我在实例对象(数据集)data上训练了贝叶斯网络。

/**
 * Initialization
 */
Instances data = ...;
BayesNet bn = new EditableBayesNet(data);
SearchAlgorithm learner = new TAN();
SimpleEstimator estimator = new SimpleEstimator();
/**
 * Training
 */
bn.initStructure();
learner.buildStructure(bn, data);
estimator.estimateCPTs(bn);

getMargin返回节点的边际分布。理想情况下,假设节点A具有3个可能的值,并且其节点索引为0。然后,bn.getMargin(0)应该返回类似[0.3, 0.4, 0.3]的内容。

但是,就我而言,当我使用以下代码打印所有节点的边际分布时。

for (int i = 0; i <bn.getNrOfNodes(); i++)
    System.out.println(Arrays.toString(bn.getMargin(i)));

返回

[0.0, 0.0, 0.0, ...]
[0.0, 0.0, 0.0, ...]
[0.0, 0.0, 0.0, ...]
...

有人曾经见过这种情况,或者可能给我一些提示为什么会发生这种情况?

我的数据是名义数据,大多数列具有许多类/值。

1 个答案:

答案 0 :(得分:0)

我想我在GUI中看到了类似的内容。当我使MaxnrofParents = 2时,我可以在贝叶斯编辑器中看到边距,但是如果我使用更大的MaxnrofParents,则边距不会显示任何东西。