WEKA:如何获取 BayesNet 中每个节点的 CPT 值?
WEKA: How to get the CPT values for every node in BayesNet?
我正在以无监督方式使用 BayesNet 和 SimpleEstimator 并寻找网络的联合分布。
我知道通过使用以下内容:
BayesNet bn=new BayesNet();
...
SimpleEstimator sbne = new SimpleEstimator();
sbne.estimateCPTs(bn);
...
distributionForInstance(bn,testingsource.instance( i ))
我们将得到实例 i 的 class 索引的条件概率 Table(CPT)。但是我不知道如何为每个其他节点获取(CPT)(除了 class 索引)。
一种方法是递归地更改 class 索引并再次调用此函数,但这会非常低效。
如果你帮我检索每个其他节点的估计 CPT,我将非常感激。
在 BayesNet class 上尝试 getProbability 方法。这是我做的。
for(int i = 0; i < bnet.getCardinality(nodeIndex); i++)
{
System.out.print(bnet.getNodeValue(nodeIndex, i) + " = " + bnet.getProbability(nodeIndex, row, i) + " ");
}
其中 row 为 0 <= row < bnet.getParentCardinality() 并且 row 的每个值对应于 parent 的输出符号的单个组合。
因此,如果您的节点有 2 parents 并且每个 parent 输出 2 个符号,那么您将有 0 <= 行 < 4(2 parents x 2 个符号)
row = 0 对应于组合 0,0 // 索引 0 处的符号值 parent 处索引 0 和索引 0 处的符号值 parent 处索引 1
行=1对应组合0,1
row = 2 对应于组合 1,0 // parent 0 的索引 1 处的交易品种值,依此类推。
行=3对应组合1,1
这是示例输出
-----节点-------------
姓名:TuberculosisOrCancer parents: 2 : LungCancer Tuberculosis
一个节点可以取值的数量:2
[0] = yes // 索引和值
[1] = 无 // 索引和值
分布---
当肺癌 = 是,结核病 = 否
是=0.9990990990990991否=9.009009009009009E-4
当肺癌 = 是,结核病 = 是
是=0.9444444444444444否=0.05555555555555555
当肺癌 = 否,肺结核 = 否
是=5.3475935828877E-5否=0.9999465240641712
当肺癌 = 否,结核病 = 是
是=0.9944444444444445否=0.005555555555555556
我正在以无监督方式使用 BayesNet 和 SimpleEstimator 并寻找网络的联合分布。 我知道通过使用以下内容:
BayesNet bn=new BayesNet();
...
SimpleEstimator sbne = new SimpleEstimator();
sbne.estimateCPTs(bn);
...
distributionForInstance(bn,testingsource.instance( i ))
我们将得到实例 i 的 class 索引的条件概率 Table(CPT)。但是我不知道如何为每个其他节点获取(CPT)(除了 class 索引)。
一种方法是递归地更改 class 索引并再次调用此函数,但这会非常低效。
如果你帮我检索每个其他节点的估计 CPT,我将非常感激。
在 BayesNet class 上尝试 getProbability 方法。这是我做的。
for(int i = 0; i < bnet.getCardinality(nodeIndex); i++)
{
System.out.print(bnet.getNodeValue(nodeIndex, i) + " = " + bnet.getProbability(nodeIndex, row, i) + " ");
}
其中 row 为 0 <= row < bnet.getParentCardinality() 并且 row 的每个值对应于 parent 的输出符号的单个组合。
因此,如果您的节点有 2 parents 并且每个 parent 输出 2 个符号,那么您将有 0 <= 行 < 4(2 parents x 2 个符号)
row = 0 对应于组合 0,0 // 索引 0 处的符号值 parent 处索引 0 和索引 0 处的符号值 parent 处索引 1
行=1对应组合0,1
row = 2 对应于组合 1,0 // parent 0 的索引 1 处的交易品种值,依此类推。
行=3对应组合1,1
这是示例输出
-----节点-------------
姓名:TuberculosisOrCancer parents: 2 : LungCancer Tuberculosis
一个节点可以取值的数量:2
[0] = yes // 索引和值
[1] = 无 // 索引和值
分布---
当肺癌 = 是,结核病 = 否
是=0.9990990990990991否=9.009009009009009E-4
当肺癌 = 是,结核病 = 是
是=0.9444444444444444否=0.05555555555555555
当肺癌 = 否,肺结核 = 否
是=5.3475935828877E-5否=0.9999465240641712
当肺癌 = 否,结核病 = 是
是=0.9944444444444445否=0.005555555555555556