ThunderSVM Ruby
ThunderSVM - high performance parallel SVMs - for Ruby
:fire: Uses GPUs and multi-core CPUs for blazing performance
For a great intro on support vector machines, check out this video.
Installation
Add this line to your application’s Gemfile:
gem "thundersvm"
On Mac, also install OpenMP:
brew install libomp
Getting Started
Prep your data
x = [[1, 2], [3, 4], [5, 6], [7, 8]]
y = [1, 2, 3, 4]
Train a model
model = ThunderSVM::Regressor.new
model.fit(x, y)
Use ThunderSVM::Classifier for classification and ThunderSVM::Model for other models
Make predictions
model.predict(x)
Save the model to a file
model.save_model("model.txt")
Load the model from a file
model = ThunderSVM.load_model("model.txt")
Get support vectors
model.support_vectors
Cross-Validation
Perform cross-validation
model.cv(x, y)
Specify the number of folds
model.cv(x, y, folds: 5)
Parameters
Defaults shown below
ThunderSVM::Model.new(
  svm_type: :c_svc,    # type of SVM (c_svc, nu_svc, one_class, epsilon_svr, nu_svr)
  kernel: :rbf,        # type of kernel function (linear, polynomial, rbf, sigmoid)
  degree: 3,           # degree in kernel function
  gamma: nil,          # gamma in kernel function
  coef0: 0,            # coef0 in kernel function
  c: 1,                # parameter C of C-SVC, epsilon-SVR, and nu-SVR
  nu: 0.5,             # parameter nu of nu-SVC, one-class SVM, and nu-SVR
  epsilon: 0.1,        # epsilon in loss function of epsilon-SVR
  max_memory: 8192,    # constrain the maximum memory size (MB) that thundersvm uses
  tolerance: 0.001,    # tolerance of termination criterion
  probability: false,  # whether to train a SVC or SVR model for probability estimates
  gpu: 0,              # specify which gpu to use
  cores: nil,          # number of cpu cores to use (defaults to all)
  verbose: false       # verbose mode
)
Data
Data can be a Ruby array
[[1, 2], [3, 4], [5, 6], [7, 8]]
Or a Numo array
Numo::DFloat.cast([[1, 2], [3, 4], [5, 6], [7, 8]])
Or the path a file in libsvm format (better for sparse data)
model.fit("train.txt")
model.predict("test.txt")
GPUs
To run ThunderSVM on GPUs, you’ll need to build the library from source.
Linux
git clone --recursive --branch v0.3.4 https://github.com/Xtra-Computing/thundersvm
cd thundersvm
mkdir build
cd build
cmake ..
make
Specify the path to the shared library with:
ThunderSVM.ffi_lib = "path/to/build/lib/libthundersvm.so"
Windows
Follow the official instructions. Specify the path to the shared library with:
ThunderSVM.ffi_lib = "path/to/build/lib/libthundersvm.dll"
Resources
History
View the changelog
Contributing
Everyone is encouraged to help improve this project. Here are a few ways you can help:
- Report bugs
- Fix bugs and submit pull requests
- Write, clarify, or fix documentation
- Suggest or add new features
To get started with development:
git clone https://github.com/ankane/thundersvm-ruby.git
cd thundersvm-ruby
bundle install
bundle exec rake test