libsvm clib AI

libsvm Support Vector Machines. Classification, regression, SVM/SVR, kernels, cross-validation.

ppm install libsvm

Overview

libsvm is the reference SVM implementation by Chih-Jen Lin (NTU). Supports C-SVC, nu-SVC, one-class SVM, epsilon-SVR, and nu-SVR. Kernels: linear, polynomial, RBF, sigmoid. Works well on small-to-medium datasets (<100k samples), especially with high-dimensional sparse data.

CLib package

Ubuntu/Debian: sudo apt install libsvm-dev

Classification

uses libsvm;

{ training data in LIBSVM format: "label feat:val feat:val ..." }
var data :=
  '1 1:2.1 2:1.5 3:0.3' + #10 +
  '1 1:1.9 2:1.8 3:0.4' + #10 +
  '-1 1:5.2 2:4.1 3:1.8' + #10 +
  '-1 1:4.9 2:3.9 3:1.7' + #10;

{ train with default RBF kernel }
var model := TrainDefault(data, svmCSVC);

{ predict a new sample }
var label := Predict(model, '1:2.0 2:1.6 3:0.3');
WriteLn('Predicted: ', label);   { 1 }

FreeModel(model);

Custom Parameters

uses libsvm;

var params := DefaultParams(svmCSVC, kernelRBF);
params.C     := 10.0;    { higher C = less regularization }
params.Gamma := 0.01;    { RBF kernel width }
params.Probability := True;   { enable probability outputs }

var model := Train(data, params);

{ predict with probabilities }
var res := PredictProb(model, '1:2.0 2:1.6 3:0.3');
WriteLn('Label: ', res.Label);
WriteLn('P(+1): ', res.Probabilities[0]:0:3);
WriteLn('P(-1): ', res.Probabilities[1]:0:3);

FreeModel(model);

Regression (SVR)

uses libsvm;

{ regression data: real-valued labels }
var data :=
  '1.5 1:1.0 2:2.0' + #10 +
  '2.3 1:1.5 2:2.5' + #10 +
  '3.7 1:2.5 2:3.5' + #10 +
  '4.2 1:3.0 2:4.0' + #10;

var params := DefaultParams(svmEpsilonSVR, kernelRBF);
params.C       := 1.0;
params.Epsilon := 0.1;   { SVR tube width }

var model := Train(data, params);
var pred  := Predict(model, '1:2.0 2:3.0');
WriteLn('Predicted value: ', pred:0:3);

Cross-Validation & Evaluation

uses libsvm;

{ 5-fold cross-validation to estimate accuracy before final training }
var params := DefaultParams(svmCSVC, kernelRBF);
var cvAcc  := CrossValidate(data, params, 5);
WriteLn('5-fold CV accuracy: ', cvAcc*100:0:1, '%');

{ train final model and evaluate on test set }
var model   := Train(trainData, params);
var testAcc := Evaluate(model, testData);
WriteLn('Test accuracy: ', testAcc*100:0:1, '%');

Save & Load

uses libsvm;

var model := Train(data, params);
SaveModel(model, '/models/classifier.svm');
FreeModel(model);

{ later ... }
var loaded := LoadModel('/models/classifier.svm');
var pred   := Predict(loaded, '1:2.0 2:1.6');
FreeModel(loaded);

CSV to LibSVM Format

uses libsvm;

{ convert CSV (with header) to LIBSVM format — label in column 0 }
var csv := 'label,f1,f2,f3' + #10 +
           '1,2.1,1.5,0.3' + #10 +
           '-1,5.2,4.1,1.8' + #10;

var libsvmData := CSVToLibSVM(csv, 0);
{ result: "1 1:2.1 2:1.5 3:0.3\n-1 1:5.2 2:4.1 3:1.8\n" }

{ scale features to [0,1] for better RBF performance }
var scaled := ScaleData(libsvmData);

Package Info

Version1.0.0
Typeclib
CategoryAI
Authorgustavo
Native liblibpai_libsvm.so

API

  • Train(data,params)
  • TrainDefault(data,type)
  • Predict(model,sample)
  • PredictProb(model,sample)
  • PredictBatch(model,samples)
  • CrossValidate(data,params,k)
  • Evaluate(model,testdata)
  • SaveModel(model,path)
  • LoadModel(path)
  • SerializeModel(model)
  • DeserializeModel(data)
  • FreeModel(model)
  • GetModelInfo(model)
  • CSVToLibSVM(csv,col)
  • ScaleData(data)
  • DefaultParams(type,kernel)
When to use SVM

Best for: small datasets, high-dimensional text/image features, binary classification. For large tabular datasets prefer xgboost or lightgbm.