我以无人监督的方式使用BayesNet和SimpleEstimator并寻找网络的联合分布。 我知道通过使用以下内容:
BayesNet bn=new BayesNet();
...
SimpleEstimator sbne = new SimpleEstimator();
sbne.estimateCPTs(bn);
...
distributionForInstance(bn,testingsource.instance( i ))
我们将得到例如i的类索引的条件概率表(CPT)。但是,我不知道如何获得每个其他节点的(CPT)(除了类索引)。
一种方法是递归更改类索引并再次调用此函数,但这样效率非常低。
如果您帮我检索每个其他节点的估计CPT,我将非常感激。
答案 0 :(得分:0)
在BayesNet类上尝试getProbability方法。这就是我的工作。
for(int i = 0; i < bnet.getCardinality(nodeIndex); i++)
{
System.out.print(bnet.getNodeValue(nodeIndex, i) + " = " + bnet.getProbability(nodeIndex, row, i) + " ");
}
其中row为0&lt; = row&lt; bnet.getParentCardinality()和行的每个值对应父父输出符号的单个组合。
因此,如果您的节点有2个父节点,并且每个父节点输出2个符号,那么您将得到0&lt; = row&lt; 4(2个父母x 2个符号)
row = 0对应于索引0处的组合0,0 //符号值(对于索引为0的父项,符号值为0处,对于索引为1的父项)
row = 1对应于组合0,1
row = 2对应于父0的索引1处的组合1,0 //符号值,依此类推。
row = 3对应于组合1,1
以下是示例输出
-----节点--------------
姓名:TuberculosisOrCancer父母:2:LungCancer Tuberculosis
节点可以采用的值的数量:2
[0] =是//索引和值
[1] = no //索引和值
发行---
当LungCancer =是,结核病=否
是= 0.9990990990990991否= 9.009009009009009E-4
当LungCancer =是,结核病=是
是= 0.9444444444444444否= 0.05555555555555555
当LungCancer = no时,结核病=否
是= 5.3475935828877E-5否= 0.9999465240641712
当LungCancer = no时,结核=是
是= 0.9944444444444445否= 0.005555555555555556