Bayesian networks have been used as a fundamental tool for the representation and manipulation of beliefs in Artificial Intelligence. There have been implementations of Bayesian networks in a variety of formats and languages.
JavaBayes is a system that handles Bayesian networks: it calculates marginal probabilities and expectations, produces explanations, performs robustness analysis, and allows the user to import, create, modify and export networks.
JavaBayes is the first full implementation of Bayesian networks in Java. A Java implementation has several advantages. First, Java is the best bet yet on a truly portable language; a package written in Java can be exported and run in Unix, Macintosh and Windows platforms without too much hair-splitting. Second, Java has been adopted by browsers in the Internet; a program or package written in Java can be intimately coupled with World Wide Web pages and can reach a gigantic audience. Third, and perhaps most important, a Java package can work as a tool for people that are interested in using reasoning in network-based applications. Suppose you had to put together a web page and you wanted to use some simple tool to reason about uncertainty in the domain of interest. A compact implementation of Bayesian networks in Java would be handy for such a task. Finally, Java is a good object-oriented language; Java has a set of widgets that allow researchers to quickly prototype interfaces, and Java has functionality for multi-threaded processing, something that can be very useful for future parallelization of inference algorithms.
I hope this JavaBayes project is useful to others. It is far from a fully tested product; there are many possible improvements. I hope others will be interested in helping me test, modify and improve this. JavaBayes is distributed under the GNU License; I have had fun coding it and hope others will have fun interacting with it.
Many people have contributed decisively to JavaBayes.
First, thanks to my former advisor, Eric Krotkov, for the encouragement, the suggestions, and for giving me time to think about new ideas.
JavaBayes uses the inference algorithm presented by Rina Dechter in the Twelfth Annual Conference on Uncertainty in Artificial Intelligence [6]. I thank Prof. Dechter for pointing me to a Scheme implementation of this algorithm, which was nicely coded by Nicolas Thiéry. It has been brought to my attention that this algorithm, which is very similar to the so-called peeling algorithm, has also been published by Zhang and Poole under the name variable elimination. The original algorithm has been enhanced to obtain calculation of all marginal probabilities in a network simultaneously (similar to the commonly used joint tree algorithm [9]).
The graphical user interface is based on the original work by Sreekanth Nagarajan and Bruce D'Ambrosio at Oregon State University. Even though the current interface does not contain their code, the appearance of the network editor is based on their system (their system used the front-end interface to make calls to a server-based inference engine). Thanks much to Sreekanth Nagarajan and Bruce D'Ambrosio for making their interface available.
I also appreciate the encouraging comments and suggestions about this project sent by a number of people in the Internet. Thanks in particular to Chao-Lin Liu and Michael Wellman by proposing the name JavaBayes and for crucial help with the first version of the user interface; Chao-Lin Liu gave several other suggestions and wrote the code that detects cycles in a network. Hadar Ziv suggested a zipped version for PC-based users. Nir Friedman gave important suggestions concerning the Interchange Format. Akihiro Shinmori detected and corrected problems with the XML-based format. Wei Zhou detected and provided fixes for several problems with the generalized variable elimination algorithm. Alex Bronstein and his group at HP labs offered several suggestions and words of support.
Robert E. Bruce corrected a crucial problem with the code and Alexander Churbanov found some bugs in the system. I'm also grateful for various suggestions and bug fixes/warnings by Alan Mehlenbacher, Bozhena Bidyuk, Robert Wilensky, Simon Keizer, Michael Becke, Jason Townsend.
Good luck with the system; I hope it works well and provides useful assistance and guidance.
Cheers,
Fabio Cozman