Resources for working with Machine Learning in F#
.NetF#Functional ProgrammingMachine Learning.Net Problem Overview
I have learned a Machine Learning course using Matlab as a prototyping tool. Since I got addicted to F#, I would like to continue my Machine Learning study in F#.
I may want to use F# for both prototyping and production, so a Machine Learning framework would be a great start. Otherwise, I can start with a collection of libraries:
- Highly-optimized linear algebra library
- Statistics package
- Visualization library (which allows to draw and interact with charts, diagrams...)
- Parallel computing toolbox (similar to Matlab parallel computing toolbox)
And the most important resources (to me) are books, blog posts and online courses regarding Machine Learning in a functional programming language (F#/OCaml/Haskell...).
Can anyone suggest these kinds of resource? Thanks.
EDIT:
This is a summary based on the answers below:
Machine Learning frameworks:
- Infer.NET: an .NET framework for Bayesian inference in graphical models with good F# support.
- WekaSharper: a F# wrapper around the popular data mining framework Weka.
- Microsoft Sho: a continuous environment development for data analysis (including matrix operations, optimization and visualization) on .NET platform.
Related libraries:
-
Math.NET Numerics: internally using Intel MKL and AMD ACML for matrix operations and supporting statistics functions too.
-
Microsoft Solver Foundation: a good framework for linear programming and optimization tasks.
-
FSharpChart: a nice data visualization library in F#.
Reading list:
- Numerical Computing: It is great for starting with Machine Learning in F# and introduces various tools and tips/tricks for working with these Math libraries in F#.
- F# and Data Mining blog: It is also from Yin Zhu, the author of Numerical Computing chapter, highly recommended.
- F# as a Octave/Matlab replacement for Machine Learning: Gustavo has just started a series of blog posts using F# as the development tool. It's great to see many libraries are plugged in together.
- "Machine Learning in Action" 's samples in F#: Mathias has translated some samples from Python to F#. They are available in Github.
- Hal Daume's homepage: Hal has written a number of Machine Learning libraries in OCaml. You would feel relieved if you were in doubt that functional programming was not suitable for Machine Learning.
Any other pointers or suggestions are also welcome.
.Net Solutions
Solution 1 - .Net
There isn't a single place to look for resources on F# and machine learning, but here are a couple of links that may be quite useful:
-
Numerical Computing section on MSDN is a good resource on using various numerical libraries from F#. The most advanced library that implements linear algebra and other algorithsm useful in machine learning is Math.NET Numerics.
-
Visualizing Data section on MSDN has some resources on charting in F#. The FSharpChart library is now maintained by Carl Nolan who regularly posts updates to his blog.
There are also a few personal pages of people who are working on relevant topics:
-
Jurgen van Gael (who did PhD in machine learning) contributed to the Math.NET library and you can read about his experience here.
-
Yin Zhu who wrote the Numerical Computing chapter on MSDN (and is a PhD student interested in machine learning) has quite a few excellent articles on his blog.
Solution 2 - .Net
In addition to what Tomas mentioned, I spent some time with Infer.NET about a year ago and found it was pretty good for continuous graphical models. I know it's improved quite a lot over the last year in both the scope of the library and F# support. I suggest checking it out and seeing if it has what you need.
Solution 3 - .Net
Hal Daume has implemented a lot of machine learning algorithms in OCaml and Haskell. Details see my answer in https://stackoverflow.com/questions/2268885/machine-learning-in-ocaml-or-haskell
As side from the Numerical Computing in F# book chapter on MSDN, I'd also like to recommend my Wrapper for Weka, WekaSharper. It allows you to call machine learning algorithms in Weka using an F#-friendly interface.
I wrote an article, Why F# is the language for data mining, which reflects my thinking when I finished writing a alpha/prototype-like data mining package in F#. libml is available online. But the code was written about two years ago when I started to use F#, and I didn't have time to maintain it since then.
Solution 4 - .Net
APress has a book in "Alpha" slated for release soon: Machine Learning Projects for .NET Developers. http://www.apress.com/9781430267676
The currently existing content seems to be introductory, but quite good to learn from, and its code samples are primarily F#.