lightgbm clib AI

LightGBM gradient boosting. Fast training, predict, feature importance, categorical features.

ppm install lightgbm

Overview

LightGBM is Microsoft's gradient boosting framework. 2–10x faster than XGBoost on large datasets thanks to leaf-wise tree growth, histogram-based splitting, and native categorical feature support (no encoding required). Industry standard for high-performance tabular ML.

CLib package

Ubuntu/Debian: sudo apt install liblightgbm-dev

Binary Classification

uses lightgbm;

{ load from CSV — label in column 0 }
var train := DatasetFromCSV(ReadFile('train.csv'), 0);
var valid := DatasetFromCSV(ReadFile('valid.csv'), 0);

{ quick start }
var model := TrainDefault(train, lgbmBinary);

{ predict probabilities }
var preds := Predict(model, valid);
var i: Integer;
for i := 0 to Length(preds) - 1 do
  WriteLn('P(+1) = ', preds[i]:0:4);

FreeBooster(model);
FreeDataset(train);
FreeDataset(valid);

Custom Parameters

uses lightgbm;

var params := DefaultParams(lgbmBinary);
params.NumRounds       := 300;
params.NumLeaves       := 63;     { more leaves = more complex model }
params.LearningRate    := 0.05;
params.FeatureFraction := 0.8;
params.BaggingFraction := 0.8;
params.BaggingFreq     := 5;
params.EarlyStopRounds := 20;     { stop if no improvement for 20 rounds }
params.EvalMetric      := 'auc';
params.Verbose         := -1;     { silent }

var result: TLGBMTrainResult;
var model := TrainWithHistory(train, valid, params, result);
WriteLn('Best iteration: ', result.BestIteration);
WriteLn('AUC: ', result.EvalMetric:0:4);

Categorical Features

uses lightgbm;

{ LightGBM handles categoricals natively — no one-hot encoding needed }
var train := DatasetFromCSV(ReadFile('customers.csv'), 0);

{ mark columns 1 (country), 3 (plan), 5 (device) as categorical }
SetCategoricalFeatures(train, '1,3,5');
SetFeatureNames(train, 'churned,country,age,plan,income,device,tenure');

var model := TrainDefault(train, lgbmBinary);
WriteLn('Trees: ', GetNumTrees(model));

Regression

uses lightgbm;

var params := DefaultParams(lgbmRegression);
params.NumRounds    := 200;
params.NumLeaves    := 31;
params.LearningRate := 0.1;
params.EvalMetric   := 'rmse';

var train := DatasetFromFile('housing.csv', '');
var model := Train(train, params, 0);

{ predict a single sample }
var features: array of Double;
SetLength(features, 10);
features[0] := 3.5;   { rooms }
features[1] := 120.0; { sqm }
{ ... }

var price := PredictOne(model, features);
WriteLn('Estimated price: $', price:0:0);

Feature Importance

uses lightgbm;

var model := Train(train, params, 0);

{ "split" = number of times feature used in splits }
{ "gain"  = total gain from splits using this feature }
var imp := GetFeatureImportance(model, 'gain');
WriteLn(imp);
{ tenure     0.312
  income     0.241
  age        0.187
  ... }

WriteLn('Features: ', GetNumFeatures(model));
WriteLn('Trees:    ', GetNumTrees(model));

Save, Load & Cross-Validation

uses lightgbm;

{ cross-validation }
var cv := CrossValidate(train, params, 5);
WriteLn('5-fold CV: ', cv:0:4);

{ save model }
SaveModel(model, '/models/churn.txt');

{ load and predict later }
var loaded := LoadModel('/models/churn.txt');
var preds  := Predict(loaded, testDataset);
FreeBooster(loaded);

Partial Prediction (Early Trees)

uses lightgbm;

{ predict using only first 50 trees — useful for speed/accuracy tradeoff }
var fast := PredictNumTrees(model, testDataset, 50);

{ raw scores before sigmoid/softmax }
var raw := PredictRaw(model, testDataset);

Package Info

Version1.0.0
Typeclib
CategoryAI
Authorgustavo
Native liblibpai_lightgbm.so

API

  • DatasetFromFile(path,params)
  • DatasetFromCSV(csv,col)
  • DatasetFromArray(data,r,c,labels)
  • SetCategoricalFeatures(ds,cols)
  • SetFeatureNames(ds,names)
  • FreeDataset(ds)
  • Train(train,params,eval)
  • TrainDefault(train,obj)
  • TrainWithHistory(...)
  • Predict(model,ds)
  • PredictOne(model,features)
  • PredictRaw(model,ds)
  • PredictNumTrees(m,ds,n)
  • Evaluate(model,ds,metric)
  • CrossValidate(ds,params,k)
  • GetFeatureImportance(m,type)
  • GetNumFeatures(m)
  • GetNumTrees(m)
  • SaveModel(m,path)
  • LoadModel(path)
  • FreeBooster(m)
Key advantage

Native categorical support means no preprocessing for string columns. Just call SetCategoricalFeatures and pass raw integer-encoded categories.