Liblinear-Ruby is Ruby interface of LIBLINEAR using SWIG. Now, this interface is supporting LIBLINEAR 2.30.
Add this line to your application's Gemfile:
gem 'liblinear-ruby' And then execute:
$ bundle Or install it yourself as:
$ gem install liblinear-ruby This sample code execute classification with L2-regularized logistic regression.
require 'liblinear' # train model = Liblinear.train( { solver_type: Liblinear::L2R_LR }, # parameter [-1, -1, 1, 1], # labels (classes) of training data [[-2, -2], [-1, -1], [1, 1], [2, 2]], # training data ) # predict puts Liblinear.predict(model, [0.5, 0.5]) # predicted class will be 1There are some parameters you can specify:
solver_typecostsensitive_lossepsilonweight_labelsandweights
This parameter specifies a type of solver (default: Liblinear::L2R_L2LOSS_SVC_DUAL).
This corresponds to -s option on command line.
Solver types you can set are shown below:
# for multi-class classification Liblinear::L2R_LR # L2-regularized logistic regression (primal) Liblinear::L2R_L2LOSS_SVC_DUAL # L2-regularized L2-loss support vector classification (dual) Liblinear::L2R_L2LOSS_SVC # L2-regularized L2-loss support vector classification (primal) Liblinear::L2R_L1LOSS_SVC_DUAL # L2-regularized L1-loss support vector classification (dual) Liblinear::MCSVM_CS # support vector classification by Crammer and Singer Liblinear::L1R_L2LOSS_SVC # L1-regularized L2-loss support vector classification Liblinear::L1R_LR # L1-regularized logistic regression Liblinear::L2R_LR_DUAL # L2-regularized logistic regression (dual) # for regression Liblinear::L2R_L2LOSS_SVR # L2-regularized L2-loss support vector regression (primal) Liblinear::L2R_L2LOSS_SVR_DUAL # L2-regularized L2-loss support vector regression (dual) Liblinear::L2R_L1LOSS_SVR_DUAL # L2-regularized L1-loss support vector regression (dual)This parameter specifies the cost of constraints violation (default 1.0).
This corresponds to -c option on command line.
This parameter specifies an epsilon in loss function of epsilon-SVR (default 0.1).
This corresponds to -p option on command line.
This parameter specifies a tolerance of termination criterion.
This corresponds to -e option on command line.
The default value depends on a type of solver. See LIBLINEAR's README or Liblinear::Parameter.default_epsion for more details.
These parameters are used to change the penalty for some classes (default []).
Each weights[i] corresponds to weight_labels[i], meaning that the penalty of class weight_labels[i] is scaled by a factor of weights[i].
First, prepare training data.
# Define class of each training data: labels = [1, -1, ...] # Training data is Array of Array: examples = [ [1, 0, 0, 1, 0], [0, 0, 0, 1, 1], ... ] # You can also use Array of Hash instead: examples = [ { 1 => 1, 4 => 1 }, { 4 => 1, 5 => 1 }, ... ]Next, set the bias (this corresponds to -B option on command line):
bias = 0.5 # default -1Then, specify parameters and execute Liblinear.train to get the instance of Liblinear::Model.
model = Liblinear.train(parameter, labels, examples, bias)In this phase, you can save model as:
model.save(file_name)If you have already had a model file, you can load it as:
model = Liblinear::Model.load(file_name)To get the feature weights of the model.
model.feature_weightsPrepare the data you want to predict its class and call Liblinear.predict.
examples = [0, 0, 0, 1, 1] Liblinear.predict(model, example)To get classes predicted by k-fold cross validation, use Liblinear.cross_validation.
For example, results[0] is a class predicted by examples excepts part including examples[0].
results = Liblinear.cross_validation(fold, parameter, labels, examples)You can supress output while executing Liblinear::Model.train.
# Output is supressed by: Liblinear.quiet_mode # You can undo by: Liblinear.verbose_mode