Awesome
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