Project

thundersvm

0.01
Low commit activity in last 3 years
No release in over a year
High performance parallel SVMs for Ruby
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies
 Project Readme

ThunderSVM Ruby

ThunderSVM - high performance parallel SVMs - for Ruby

🔥 Uses GPUs and multi-core CPUs for blazing performance

For a great intro on support vector machines, check out this video.

Build Status

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:

To get started with development:

git clone https://github.com/ankane/thundersvm-ruby.git
cd thundersvm-ruby
bundle install
bundle exec rake test