Ruby interface to LIBSVM (using SWIG)
Only supports i368 on Mac OS 10.5 (Leopard), which we did to meet our immediate development needs. As you might expect, the “ext/Makefile” explicitly specifies both the architecture (e.g. “-arch i368”) and the path to the Ruby headers.
Snow Leopard (10.6) has not been tested, but we'll test and support it when we move our development stack to Snow Leopard. If you really want build for Snow Leopard, try setting “-arch x86_64” in the “ext/Makefile” if you want a 64-bit build for Snow Leopard, and setting the RUBY_INCLUDEDIR in your env (or manually changing the default value in the “ext/Makefile”).
In tomz's fork, the Makefile is generated via the extconf.rb. We were unable to get a usable Makefile using extconf.rb on Mac OS X Leopard, so we're using our own, non-generated Makefile. Someone with better mkmf skills could get it working and support most/all targets in the process.
Mac OS 10.5 and i386 only Ruby port of the LIBSVM Python SWIG (Simplified Wrapper and Interface Generator) interface.
A slightly modified version of LIBSVM 2.89 is included, it allows turning on/off the debug log. You don't need your own copy of SWIG to use this library - all needed files are generated using SWIG already.
Look for the README file in the ruby subdirectory for instructions. The binaries included were built under Ubuntu Linux 2.6.24-23-generic, you should run make under the libsvm-2.89 and libsvm-2.89/ruby directories to regenerate the executables for your environment.
LIBSVM is in use at tweetsentiments.com - A Twitter / Tweet sentiment analysis application
sudo gem sources -a http://gems.github.com (you only have to do this once) sudo gem install plastictrophy-libsvm-ruby-swig
See github.com/tomz/libsvm-ruby-swig for Linux support.
Quick Interactive Tutorial using irb (adopted from the python code from Toby Segaran's “Programming Collective Intelligence” book):
irb(main):001:0> require 'svm' => true irb(main):002:0> prob = Problem.new([1,-1],[[1,0,1],[-1,0,-1]]) irb(main):003:0> param = Parameter.new(:kernel_type => LINEAR, :C => 10) irb(main):004:0> m = Model.new(prob,param) irb(main):005:0> m.predict([1,1,1]) => 1.0 irb(main):006:0> m.predict([0,0,1]) => 1.0 irb(main):007:0> m.predict([0,0,-1]) => -1.0 irb(main):008:0> m.save("test.model") irb(main):009:0> m2 = Model.new("test.model") irb(main):010:0> m2.predict([0,0,-1]) => -1.0
Mariano Lizarraga and Galen O'Hanlon