Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [recommenders-dev] Jayes implementation

Hi,
The mistake is that when initializing dyspnoe, you actually do everything on the tuberkuloseOderLungenkrebs node a second time. In the end, that node has four parents(including itself...), hence the 32.

Regards, Michael

Am 29.09.2015 10:26 schrieb "Robert Füß" <robert.fuess@xxxxxx>:

Hello Michael,

 

I just took an look an Jayes and it is realy great to use, but i think the implementation doesn't work correctly at some point.

 

For a test i tried to implement this bayesian network from the paper (http://www.ra.cs.uni-tuebingen.de/lehre/ss06/pro_learning/Bayesnetze_SteffenOtto.pdf)

 

cid:image001.png@01D0FA30.5DA4A5B0

 

All works fine till the last Node "Dyspnoe". if i configure this node, i have to set 8 Probabilitys after my understanding of bayesian Networks (like the Tub. Od L. Node), but Jayes expects 32 regarding this exception.

 

Exception in thread "main" java.lang.IllegalArgumentException: Probability table does not have expected size. Expected: 32but got: 8

               at bayesian.BayesNode.setProbabilities(BayesNode.java:53)

               at bayesian.Test.main(Test.java:70)

 

This is my whole implementation of the network:

 

public class Test {

 

    public static void main(String[] args) {

        BayesNet net = new BayesNet();

 

        BayesNode asienbesuch = net.createNode("Asienbesuch");

        asienbesuch.addOutcomes("yes", "no");

        asienbesuch.setProbabilities(0.01, 0.99);

 

        BayesNode raucher = net.createNode("Raucher");

        raucher.addOutcomes("yes", "no");

        raucher.setProbabilities(0.5, 0.5);

 

        BayesNode tuberkulose = net.createNode("Tuberkulose");

        tuberkulose.addOutcomes("yes", "no");

        tuberkulose.setParents(Arrays.asList(asienbesuch));

        tuberkulose.setProbabilities(//

                0.05, 0.95, // asienbesuch = yes

                0.01, 0.99 // asienbesuch = no

                );

 

        BayesNode lungenkrebs = net.createNode("Lungenkrebs");

        lungenkrebs.addOutcomes("yes", "no");

        lungenkrebs.setParents(Arrays.asList(raucher));

        lungenkrebs.setProbabilities(//

                0.1, 0.9, // raucher = yes

                0.01, 0.99 // raucher = no

                );

 

        BayesNode bronchitis = net.createNode("Bronchitis");

        bronchitis.addOutcomes("yes", "no");

        bronchitis.setParents(Arrays.asList(raucher));

        bronchitis.setProbabilities(//

                0.6, 0.4, // raucher = yes

                0.3, 0.7 // raucher = no

                );

 

        BayesNode tuberkuloseOderLungenkrebs = net.createNode("TuberkuloseOderLungenkrebs");

        tuberkuloseOderLungenkrebs.addOutcomes("true", "false");

        tuberkuloseOderLungenkrebs.setParents(Arrays.asList(tuberkulose, lungenkrebs));

        tuberkuloseOderLungenkrebs.setProbabilities(//

                // tuberkulose = yes

                1.0, 0.0, // lungenkrebs = yes

                1.0, 0.0, // lungenkrebs = no

                // tuberkulose = no

                1.0, 0.0, // lungenkrebs = yes

                0.0, 1.0 // lungenkrebs = no

                );

 

        BayesNode roentgenbefund = net.createNode("Roentgenbefund");

        roentgenbefund.addOutcomes("abnormal", "normal");

        roentgenbefund.setParents(Arrays.asList(tuberkuloseOderLungenkrebs));

        roentgenbefund.setProbabilities(//

                0.98, 0.02, // tuberkuloseOderLungenkrebs = yes

                0.05, 0.95 // tuberkuloseOderLungenkrebs = no

                );

 

        BayesNode dyspnoe = net.createNode("Dyspnoe");

        tuberkuloseOderLungenkrebs.addOutcomes("yes", "no");

        tuberkuloseOderLungenkrebs.setParents(Arrays.asList(tuberkuloseOderLungenkrebs, bronchitis));

        tuberkuloseOderLungenkrebs.setProbabilities(//

                // tuberkuloseOderLungenkrebs = yes

                0.9, 0.1, // bronchitis = yes

                0.7, 0.3, // bronchitis = no

                // tuberkuloseOderLungenkrebs = no

                0.8, 0.2, // bronchitis = yes

                0.1, 0.9 // bronchitis = no

                );

 

        IBayesInferer inferer = new JunctionTreeAlgorithm();

        inferer.setNetwork(net);

 

        double[] belief = inferer.getBeliefs(dyspnoe);

        System.out.println(belief[0] + " " + belief[1]);

    }

}

 

kind Regards

Robert Füß

 


_______________________________________________
recommenders-dev mailing list
recommenders-dev@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/recommenders-dev

Back to the top