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 Tree Splitter NominalReg

From Leeroopedia


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

Overview

Splitter for nominal (categorical) features in regression tasks that maintains target statistics for each feature value.

Description

NominalSplitterReg monitors categorical features in regression by keeping variance statistics (Var or VectorDict of Var for multi-target) for each observed feature value. It supports both binary splits (one value vs. others) and multiway splits (one branch per category). The estimator update strategy is dynamically selected based on whether the task is univariate or multivariate regression.

Usage

Use NominalSplitterReg when monitoring categorical features in regression trees. It automatically handles univariate and multi-target regression scenarios.

Code Reference

Source Location

  • Repository: Online_ml_River
  • File: river/tree/splitter/nominal_splitter_reg.py

Signature

class NominalSplitterReg(Splitter):
    def __init__(self):
        ...

    @property
    def is_numeric(self):
        return False

    def update(self, att_val, target_val, w):
        ...

    def cond_proba(self, att_val, target_val):
        raise NotImplementedError

    def best_evaluated_split_suggestion(self, criterion, pre_split_dist, att_idx, binary_only):
        ...

Import

from river.tree.splitter import NominalSplitterReg

I/O Contract

Input Type Description
att_val any Categorical feature value
target_val float/dict Target value (supports multi-target)
w float Sample weight
binary_only bool If True, only binary splits; else include multiway
Output Type Description
split_suggestion BranchFactory Best split with variance statistics

Usage Examples

from river.tree.splitter.nominal_splitter_reg import NominalSplitterReg
from river.tree.split_criterion import VarianceRatioSplitCriterion
from river.stats import Var

splitter = NominalSplitterReg()

# Update with categorical observations
splitter.update('red', 25.5, 1.0)
splitter.update('blue', 30.2, 1.0)
splitter.update('red', 26.1, 1.0)
splitter.update('green', 28.5, 1.0)

# Get best binary split
criterion = VarianceRatioSplitCriterion()
pre_split = Var()
pre_split.update(25.5, 1.0)
pre_split.update(30.2, 1.0)
pre_split.update(26.1, 1.0)
pre_split.update(28.5, 1.0)

binary_split = splitter.best_evaluated_split_suggestion(
    criterion=criterion,
    pre_split_dist=pre_split,
    att_idx='color',
    binary_only=True
)

print(f"Split value: {binary_split.split_info}")
print(f"Merit: {binary_split.merit}")

# Multiway split
multiway_split = splitter.best_evaluated_split_suggestion(
    criterion=criterion,
    pre_split_dist=pre_split,
    att_idx='color',
    binary_only=False
)

Related Pages

Page Connections

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