For the purpose of building prediction models in tennis markets, I've developed a Bayesian inference engine in Scala. One of tutorials I wrote on this tool is dedicated to predicting outcomes of tennis matches with Dynamic Bayesian Networks and Expectation Maximization techniques.
Bayes-Scala Project Home Page
Getting Started - Learning parameters with Expectation Maximisation in Unrolled Dynamic Bayesian Networks from incomplete data
Currently I'm evaluating this prediction model on a real data set of tennis matches for last 5 years and I will publish prediction results later on.