Weka: почему getMargin возвращает все нули?

Я использую 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, ...]
...

Кто-то видел это раньше или может дать мне несколько советов, почему это происходит?

Мои данные являются номинальными, и большинство столбцов имеют много классов/значений.


person Zhongjun 'Mark' Jin    schedule 27.11.2018    source источник


Ответы (1)


Кажется, я видел что-то подобное в графическом интерфейсе. Когда у меня было MaxnrofParents = 2, я мог видеть поля в байесовском редакторе, но если я использовал MaxnrofParents для чего-то большего, поля ничего не показывали.

person Oleg    schedule 05.03.2019