On 7/20/12 10:34 AM, Joshua Bowles wrote:
Check this out for weka: https://github.com/antoniogarrote/clj-ml

FYI, that fork isn't maintained anymore. I've updated it quite a bit and fixed a lot of reflection issues that were making it unusable in production:

https://github.com/bmabey/clj-ml

If I had enough time I would probably rewrite the library since there are a number of things that bug me about the API. Ideally, we could have the majority of the wrappers generated from java-docs since manually wrapping every single option is quite tedious. It gets the job done though and we have been using it in production for two years now. In addition to using weka libraries we have wrapped encog and have written some of our own algorithms including an ensemble algorithm (based mostly on Rich Caruana's work[1]) which composes all these algorithms.

As far as general ML in clojure goes... We've liked using clojure for our ML work but it does suffer from the split language problem. Meaning, code you write for performant ML algorithms is not the same type of code you regularly write in Clojure (same as writing numpy is different than regular python). The trick is to wrap all the interop in nice clojure abstractions so you don't have to think about it all the time. You have to realize that using lazy-seqs and clojure collections in general are non-starters since they don't yet support primitives yet and will never be as optimized as existing Fortran (read BLAS/LAPACK) and Java code. Here is a SO answer of mine explaining the same thing in more detail:
http://stackoverflow.com/a/8902524/233964

I started releasing some nice (IMO) wrappers for parallel colt that allow you to get a little closer to the library than Incanter allows you to. I never got too far but what I did release is useful (I use them at work) and could be a good starting point for someone else:
https://github.com/bmabey/claw/blob/master/src/claw/core.clj

(Note, the reason why I needed this was because the abstractions in Incanter, while beautiful, were too costly for my needs.)

Lastly, at ClojureWest Bradford Cross mentioned in his keynote[2] that they were eventually going to release some of their libraries that they use at Prismatic. Although he didn't say this exactly it sounded liked they had written some convex-optimization algorithms using pure java arrays with their wrapper library called Flop. It doesn't look like they have released anything yet (https://github.com/prismatic).

-Ben



1. http://www.cs.cornell.edu/~caruana/
2. http://www.infoq.com/presentations/Why-Prismatic-Goes-Faster-With-Clojure

--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to