Jump to content

Connect SuperML | Leeroopedia MCP: Equip your AI agents with best practices, code verification, and debugging knowledge. Powered by Leeroo — building Organizational Superintelligence. Contact us at founders@leeroo.com.

Implementation:Online ml River Optim Losses

From Leeroopedia


Knowledge Sources
Domains Online_Learning, Optimization
Last Updated 2026-02-08 16:00 GMT

Overview

A comprehensive collection of loss functions for online learning, supporting binary classification, multi-class classification, and regression tasks.

Description

The losses module provides a complete set of differentiable loss functions designed for online machine learning. Each loss function implements both the loss calculation and its gradient, supporting both scalar and numpy vector operations. The module includes specialized losses for binary classification (Log, Hinge, BinaryFocalLoss), multi-class classification (CrossEntropy), and regression (Squared, Absolute, Huber, Quantile, Poisson, Cauchy, EpsilonInsensitiveHinge). All losses inherit from base Loss classes (BinaryLoss, MultiClassLoss, RegressionLoss) that provide appropriate mean functions for their respective tasks.

Usage

Import loss functions from river.optim.losses to use as objective functions in optimizers and linear models. Each loss provides __call__ for computing loss values and gradient methods for optimization.

Code Reference

Source Location

Signature

# Base Classes
class BinaryLoss(Loss):
    def mean_func(self, y_pred): ...

class MultiClassLoss(Loss):
    def mean_func(self, y_pred): ...

class RegressionLoss(Loss):
    def mean_func(self, y_pred): ...

# Regression Losses
class Absolute(RegressionLoss):
    def __call__(self, y_true, y_pred): ...
    def gradient(self, y_true, y_pred): ...

class Squared(RegressionLoss):
    def __call__(self, y_true, y_pred): ...
    def gradient(self, y_true, y_pred): ...

class Huber(RegressionLoss):
    def __init__(self, epsilon=0.1): ...
    def __call__(self, y_true, y_pred): ...
    def gradient(self, y_true, y_pred): ...

class Quantile(RegressionLoss):
    def __init__(self, alpha=0.5): ...
    def __call__(self, y_true, y_pred): ...
    def gradient(self, y_true, y_pred): ...

class Cauchy(RegressionLoss):
    def __init__(self, C=80): ...
    def __call__(self, y_true, y_pred): ...
    def gradient(self, y_true, y_pred): ...

class Poisson(RegressionLoss):
    def __call__(self, y_true, y_pred): ...
    def gradient(self, y_true, y_pred): ...

class EpsilonInsensitiveHinge(RegressionLoss):
    def __init__(self, eps=0.1): ...
    def __call__(self, y_true, y_pred): ...
    def gradient(self, y_true, y_pred): ...

# Binary Classification Losses
class Log(BinaryLoss):
    def __init__(self, weight_pos=1.0, weight_neg=1.0): ...
    def __call__(self, y_true, y_pred): ...
    def gradient(self, y_true, y_pred): ...

class Hinge(BinaryLoss):
    def __init__(self, threshold=1.0): ...
    def __call__(self, y_true, y_pred): ...
    def gradient(self, y_true, y_pred): ...

class BinaryFocalLoss(BinaryLoss):
    def __init__(self, gamma=2, beta=1): ...
    def __call__(self, y_true, y_pred): ...
    def gradient(self, y_true, y_pred): ...

# Multi-Class Classification Loss
class CrossEntropy(MultiClassLoss):
    def __init__(self, class_weight: dict | None = None): ...
    def __call__(self, y_true, y_pred): ...
    def gradient(self, y_true, y_pred): ...

Import

from river import optim

# Access specific losses
loss = optim.losses.Squared()
loss = optim.losses.Log()
loss = optim.losses.CrossEntropy()

I/O Contract

Inputs

Name Type Required Description
y_true float or dict Yes True target value (scalar for regression/binary, dict for multi-class)
y_pred float or dict Yes Predicted value (scalar for regression/binary, dict for multi-class)

Outputs

Name Type Description
loss_value float Computed loss value from __call__ method
gradient float, int, or dict Gradient with respect to prediction from gradient method

Usage Examples

from river import optim

# Squared Loss (L2)
loss = optim.losses.Squared()
print(loss(-4, 5))  # 81
print(loss.gradient(-4, 5))  # 18

# Absolute Loss (L1)
loss = optim.losses.Absolute()
print(loss(-42, 42))  # 84
print(loss.gradient(1, 2))  # 1

# Log Loss for Binary Classification
loss = optim.losses.Log()
# Expects logit (raw) predictions
y_true = 1
y_pred = 2.5  # logit
print(loss(y_true, y_pred))
print(loss.gradient(y_true, y_pred))

# Cross Entropy for Multi-Class
loss = optim.losses.CrossEntropy()
y_true = 2
y_pred = {0: 0.2, 1: 0.3, 2: 0.5}
print(loss(y_true, y_pred))  # -log(0.5)
print(loss.gradient(y_true, y_pred))  # dict with gradients

# Quantile Loss
loss = optim.losses.Quantile(alpha=0.5)  # Median
print(loss(1, 3))  # 1.0
print(loss.gradient(1, 3))  # 0.5

# Huber Loss (robust to outliers)
loss = optim.losses.Huber(epsilon=0.1)
print(loss(0, 0.05))  # Small error: quadratic
print(loss(0, 2.0))   # Large error: linear

Related Pages

Page Connections

Double-click a node to navigate. Hold to expand connections.
Principle
Implementation
Heuristic
Environment