【问题标题】:WEKA: How to get the CPT values for every node in BayesNet?WEKA:如何获取 BayesNet 中每个节点的 CPT 值?
【发布时间】:2015-03-20 04:57:09
【问题描述】:

我正在以无监督的方式使用 BayesNet 和 SimpleEstimator,并寻找网络的联合分布。 我知道通过使用以下内容:

BayesNet bn=new BayesNet();
...
SimpleEstimator sbne = new SimpleEstimator();
sbne.estimateCPTs(bn);
...
distributionForInstance(bn,testingsource.instance( i ))

我们将得到实例 i 的类索引的条件概率表(CPT)。但是我不知道如何获取每个其他节点的(CPT)(除了类索引)。

一种方法是递归更改类索引并再次调用此函数,但这会非常低效。

如果您能帮我检索每个其他节点的估计 CPT,我将不胜感激。

【问题讨论】:

    标签: weka bayesian-networks


    【解决方案1】:

    在 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

    因此,如果您的节点有 2 个父节点并且每个父节点输出 2 个符号,那么您将有 0

    row = 0 对应于组合 0,0 // 索引 0 处父级索引 0 处的符号值和索引 1 处父级索引 0 处的符号值

    row = 1 对应组合 0,1

    row = 2 对应组合 1,0 // 父 0 的索引 1 处的符号值,依此类推。

    row = 3 对应组合 1,1


    这是示例输出

    ----- 节点 --------------

    姓名:结核病或癌症父母:2:肺癌结核病

    一个节点可以取值的个数:2

    [0] = yes // 索引和值

    [1] = no // 索引和值

    分布---

    当肺癌 = 是时,肺结核 = 否

    是 = 0.9990990990990991 否 = 9.009009009009009E-4

    当肺癌 = 是时,肺结核 = 是

    是 = 0.9444444444444444 否 = 0.05555555555555555

    当肺癌 = 否时,肺结核 = 否

    是 = 5.3475935828877E-5 否 = 0.9999465240641712

    当肺癌 = 否,肺结核 = 是

    是 = 0.9944444444444445 否 = 0.005555555555555556

    【讨论】:

    • 很抱歉,输出后半部分的代码在哪里?
    • @Zhongjun'Mark'Jin .抱歉,很久才登录。
    猜你喜欢
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 2022-10-06
    相关资源
    最近更新 更多