Callbacks¶
Control training with callbacks for early stopping, logging, checkpointing, and more.
NaturalBoost, FormulaBoost, WeibullAFT, and the mean-regression models
all accept callbacks= and eval_set= on fit().
FormulaBoost eval tuples are (X, y, model_input); WeibullAFT tuples
are (X, y[, event]).
Available Callbacks¶
| Callback | Purpose |
|---|---|
EarlyStopping |
Stop when validation metric stops improving |
Logger |
Print training progress |
ModelCheckpoint |
Save best models during training |
LearningRateScheduler |
Dynamic learning rate |
Early Stopping¶
import openboost as ob
from openboost import EarlyStopping
model = ob.GradientBoosting(n_trees=500)
model.fit(
X_train, y_train,
eval_set=[(X_val, y_val)],
callbacks=[EarlyStopping(patience=10, min_delta=0.001)],
)
print(f"Stopped at {len(model.trees_)} trees")
Parameters¶
| Parameter | Type | Default | Description |
|---|---|---|---|
patience |
int | 10 | Rounds without improvement before stopping |
min_delta |
float | 0.0 | Minimum change to qualify as improvement |
restore_best |
bool | True | Restore weights from best iteration |
Logger¶
from openboost import Logger
model.fit(
X_train, y_train,
callbacks=[Logger(period=10)], # Print every 10 trees
)
Output:
Model Checkpoint¶
from openboost import ModelCheckpoint
model.fit(
X_train, y_train,
eval_set=[(X_val, y_val)],
callbacks=[
ModelCheckpoint(
filepath='best_model.joblib',
save_best_only=True,
)
],
)
Learning Rate Scheduler¶
from openboost import LearningRateScheduler
def lr_schedule(round_num, current_lr):
"""Reduce LR by 10% every 100 rounds."""
if round_num > 0 and round_num % 100 == 0:
return current_lr * 0.9
return current_lr
model.fit(
X_train, y_train,
callbacks=[LearningRateScheduler(lr_schedule)],
)
Combining Callbacks¶
from openboost import EarlyStopping, Logger, ModelCheckpoint
callbacks = [
EarlyStopping(patience=20),
Logger(period=10),
ModelCheckpoint('checkpoints/model_{round}.joblib'),
]
model.fit(
X_train, y_train,
eval_set=[(X_val, y_val)],
callbacks=callbacks,
)
Custom Callbacks¶
from openboost import Callback
class MyCallback(Callback):
def on_train_begin(self, state):
print("Training started!")
def on_round_end(self, state):
if state.round % 50 == 0:
print(f"Round {state.round}: loss = {state.train_loss:.4f}")
def on_train_end(self, state):
print(f"Training finished after {state.round} rounds")
model.fit(X_train, y_train, callbacks=[MyCallback()])
Callback Methods¶
| Method | When Called |
|---|---|
on_train_begin(state) |
Before training starts |
on_round_begin(state) |
Before each boosting round |
on_round_end(state) |
After each boosting round |
on_train_end(state) |
After training completes |