Skip to content

check_randomized_search_n_iter

yohou.testing.search.check_randomized_search_n_iter(search_cv, y, X_actual=None, forecasting_horizon=3, X_future=None, X_forecast=None)

Check n_iter controls number of parameter combinations evaluated.

Parameters

Name Type Description Default
search_cv RandomizedSearchCV

Unfitted RandomizedSearchCV instance

required
y DataFrame

Training target data

required
X_actual DataFrame

Training features

None
forecasting_horizon int

Number of steps ahead to forecast

3

Raises

Type Description
AssertionError

If number of combinations doesn't match n_iter

Source Code

Show/Hide source
def check_randomized_search_n_iter(
    search_cv,
    y: pl.DataFrame,
    X_actual: pl.DataFrame | None = None,
    forecasting_horizon: int = 3,
    X_future: pl.DataFrame | None = None,
    X_forecast: pl.DataFrame | None = None,
) -> None:
    """Check n_iter controls number of parameter combinations evaluated.

    Parameters
    ----------
    search_cv : RandomizedSearchCV
        Unfitted RandomizedSearchCV instance
    y : pl.DataFrame
        Training target data
    X_actual : pl.DataFrame, optional
        Training features
    forecasting_horizon : int, default=3
        Number of steps ahead to forecast

    Raises
    ------
    AssertionError
        If number of combinations doesn't match n_iter

    """
    if not isinstance(search_cv, RandomizedSearchCV):
        raise ValueError("This check requires RandomizedSearchCV instance")

    search_cv_clone = clone(search_cv)
    search_cv_clone.fit(y, X_actual, forecasting_horizon=forecasting_horizon, X_future=X_future, X_forecast=X_forecast)

    # Check actual combinations matches n_iter
    actual_combinations = len(search_cv_clone.cv_results_["params"])
    expected_combinations = search_cv_clone.n_iter

    assert actual_combinations == expected_combinations, (
        f"RandomizedSearchCV should evaluate {expected_combinations} combinations (n_iter), got {actual_combinations}"
    )