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 [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en