Suggested Project: Probabilistic Programming With Rainier and Scala
This is one in a series of posts, where we suggest some personal projects, that you may take on during the course. Preferably, we will do the projects in small teams of 2-3 people.
For an overview of the various projects - please look here.
Background
Probabilistic programming is one of the promising and refreshing approaches to probabilistic modelling and to artificial intelligence nowadays. It will be one of the main themes in this course.
Rainier is a new probabilistic programming library written by Stripe. It is written in Scala - a language that runs on the JVM, and thus it is conveniently accessible from Clojure.
However, Rainier is based on some ideas which are not so commonly used in Clojure. One of them is the so-called Probability Monad. It would be an interesting question, how to make such ideas accessible in clojure, in a way that woulb be both simple and useful.
The project
The purpose of this project is to experiment with accessing Rainier from Clojure, and possibly create a certain grammer for doing it comfortably.
Suggested tentative plan
- Read a little bit about Rainier.
- Learn how to access Scala in Clojure using the from-scala library.
- Translate some small Rainier examples to Clojure.
- Consider possible ways to make the access more comfortable and idiomatic.
- Prepare a talk about it.
- Write a blog post.
- Discuss with the community.
Recommended resources
- A Tour of Rainier's Core
- A recent technical talk by one of the authors, Avi Bryant
- A couple of blog posts by Darren Wilkinson
- An explanation of the Probability Monad by Chris Stucchio
- Monads in Clojure
- Using the cats library
- Using the Fluokitten library (should be read together with this illustrated Haskell-based introduction to category theory notions)