Я использую Weka Java API.Я обучил Bayesnet на объекте Instances (набор данных) 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, ...]
...
Кто-то видел это раньше или может подсказать, почему это происходит?
Мойданные являются номинальными, и большинство столбцов имеют много классов / значений.