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)