JProGraM is an open-source Java library which can be used for learning a number of statistical models from data, such as Bayesian networks, Markov random fields, hybrid random fields, probabilistic decision trees, dependency networks, Gaussian mixture models, Parzen windows, and Nadaraya-Watson conditional density estimators. Along with learning algorithms, some simple inference methods are implemented by JProGraM. Principal components analysis, independent component analysis (through the FastICA library), and (to some extent) data clustering are also supported. JProGraM is released under the GNU General Public License. It is not yet as polished as I would like it to be, and there is no proper documentation, but it should be especially useful for research purposes. In particular, one strong point of the library is the extended support for graphical models with continuous random variables, covering not only standard Gaussian models, but also more recent cutting-edge techniques such as nonparanormal estimation of undirected graphs, scalable dual-tree recursion methods for kernel bandwidth selection (as described e.g. here), or kernel-based hybrid random fields. The JProGraM project is also hosted at SourceForge.net. If you would like to contribute to the development, please contact me. Some ideas for extending the project are listed below.
The latest release of JProGraM can be downloaded from here (as a gzipped tar archive). For convenience, the tarball also includes some other open-source libraries that are called within JProGraM, either as source-code or as jar archives to be included in your classpath. In particular, along with JProGraM you're going to download WEKA, JGraphT, JAMA, the L-BFGS implementation provided by the RISO project, FastICA, and SSJ. The L-BFGS method is called by JProGraM using a wrapper written by Jacob Eisenstein. Note that using the Gaussian and nonparanormal Markov random fields relying on the graphical lasso technique requires a working R distribution to be installed on your system, including in particular the glasso package. Provided that R and the glasso package are correctly installed, the relevant JProGraM routines are able to exploit the R installation without any manual intervention. This means that users of the JProGraM library can simply call the routines executing the graphical lasso within their Java code without the need to manipulate any R code. (This has been tested successfully on several Linux distributions, but not on Windows or Mac OS X).
For more information concerning the models and algorithms implemented by JProGraM, you can have a look at some of my publications. If you want to refer to JProGraM in a publication, please link to this website (or cite one of my papers).