Probabilistic programming language

From Wikipedia, the free encyclopedia
Jump to: navigation, search

A probabilistic programming language (PPL) is a programming language specially designed to describe and infer with probabilistic models. PPLs are closely related to graphical models and Bayesian networks, but are more expressive and flexible. Probabilistic programming represents an attempt to "[unify] general purpose programming with probabilistic modeling." [1]

Probabilistic reasoning is one of the foundational technologies of machine learning. It is used by companies such as Google, Amazon.com, and Microsoft to make sense of the data available to them. Probabilistic reasoning has been used for applications as diverse as predicting stock prices, recommending movies, diagnosing computers, and detecting cyber intrusions. Many of these applications use techniques you will learn in this book.[2]

PPLs often extend from a basic language. The inventors' choices of underlying basic language depend on the similarity of their models to the basic language's ontology, as well as commercial considerations and personal preference. For instance, Dimple[3] and Chimple[4] are based on Java, Infer.NET is based on .NET framework,[5] while PRISM extends from Prolog.[6] However, some PPLs such as WinBUGS and Stan (software) define a self-contained language for their users to use, which is not obviously derived from a predecessor language.[7][8]

Currently there are several PPLs in active development, some of them have advanced to the beta stage. However because PRMs are new, up to year 2010 there have been no well-known software projects utilizing those languages.

Probabilistic relational programming language[edit]

A probabilistic relational programming language (PRPL) is a PPL specially designed to describe and infer with probabilistic relational models (PRMs).

A PRM is usually developed with a set of algorithms for reducing, inference about and discovery of concerned distributions, which are embedded into the corresponding PRPL.

Probabilistic programming[edit]

Probabilistic programming is a way to create systems that help make decisions in the face of uncertainty. Probabilistic reasoning combines knowledge of a situation with the laws of probability to determine those unobserved factors that are critical to the decision. Until recently, probabilistic reasoning systems have been limited in scope, and have been hard to apply to many real world situations. Probabilistic programming is a new approach that makes probabilistic reasoning systems easier to build and more widely applicable.[2]

List of probabilistic programming languages[edit]

Name Extends from Host language
Venture[9] Scheme C++
Anglican[10] Scheme Clojure
IBAL[11] OCaml
PRISM[6] B-Prolog
Infer.NET[5] .NET Framework .NET Framework
dimple [3] MATLAB, Java
chimple [4] MATLAB, Java
BLOG[12]  ?
PSQL[13] SQL
BUGS[7] n/a
FACTORIE[14] Scala
PMTK[15] MATLAB MATLAB
Alchemy[16] C++
Dyna[17] Prolog
Figaro[18] Scala
Church[19] Scheme Various: Javascript, Scheme
ProbLog[20] Prolog
ProBT[21] C++, Python
Stan (software)[8] n/a C++
Hakaru[22] Haskell Haskell
BAli-Phy (software) [23] Haskell C++
ProbCog[24] Java, Python
Tuffy[25] Java

See also[edit]

Notes[edit]

External links[edit]