Implementation:Online ml River Optim Nadam
| Knowledge Sources | |
|---|---|
| Domains | Online_Learning, Optimization |
| Last Updated | 2026-02-08 16:00 GMT |
Overview
Nadam (Nesterov-accelerated Adaptive Moment Estimation) combines Adam with Nesterov momentum for potentially faster convergence.
Description
Nadam is a variant of Adam that incorporates Nesterov accelerated gradient (NAG) into the momentum component. While Adam uses standard momentum, Nadam applies Nesterov momentum which looks ahead by computing the gradient at the anticipated future position rather than the current position. This look-ahead property can lead to faster convergence and better performance on some tasks. The algorithm maintains exponentially decaying averages of past gradients (first moment) and squared gradients (second moment) like Adam, but modifies the first moment update to include Nesterov acceleration. The bias correction is applied to both moments before computing the parameter update.
Usage
Import from river.optim and use as an optimizer in any River model. Consider Nadam when Adam performs well but you want potentially faster convergence.
Code Reference
Source Location
- Repository: Online_ml_River
- File: river/optim/nadam.py
Signature
class Nadam(optim.base.Optimizer):
def __init__(self, lr=0.1, beta_1=0.9, beta_2=0.999, eps=1e-8):
...
Import
from river import optim
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| lr | float | No (default=0.1) | Learning rate |
| beta_1 | float | No (default=0.9) | Exponential decay rate for first moment estimates |
| beta_2 | float | No (default=0.999) | Exponential decay rate for second moment estimates |
| eps | float | No (default=1e-8) | Small constant for numerical stability |
Outputs
| Name | Type | Description |
|---|---|---|
| optimizer | Nadam | Configured optimizer instance ready for model training |
Usage Examples
from river import datasets
from river import evaluate
from river import linear_model
from river import metrics
from river import optim
from river import preprocessing
# Create Nadam optimizer
optimizer = optim.Nadam()
# Use with a linear model
dataset = datasets.Phishing()
model = (
preprocessing.StandardScaler() |
linear_model.LogisticRegression(optimizer)
)
metric = metrics.F1()
# Evaluate
score = evaluate.progressive_val_score(dataset, model, metric)
print(score) # F1: 86.60%
# Custom parameters
optimizer = optim.Nadam(
lr=0.01,
beta_1=0.95,
beta_2=0.999,
eps=1e-7
)
model = linear_model.LogisticRegression(optimizer)
# Good alternative to Adam for faster convergence
model_adam = linear_model.LogisticRegression(optim.Adam())
model_nadam = linear_model.LogisticRegression(optim.Nadam())