Skip to content

expand_param_grid

Expands a grid of parameters.

This method can be used to generate a list of model parametrizations from a dictionary where each parameter is associated with a list of possible parameters. In other words, it expands a grid of parameters.

Typically, this method can be used to create copies of a given model with different parameter choices. The models can then be used as part of a model selection process, such as a selection.SuccessiveHalvingClassifier or a selection.EWARegressor.

The syntax for the parameter grid is quite flexible. It allows nesting parameters and can therefore be used to generate parameters for a pipeline.

Parameters

  • model

    Typebase.Estimator

  • grid

    Typedict

    The grid of parameters to expand. The provided dictionary can be nested. The only requirement is that the values at the leaves need to be lists.

Examples

As an initial example, we can expand a grid of parameters for a single model.

from river import linear_model
from river import optim
from river import utils

model = linear_model.LinearRegression()

grid = {'optimizer': [optim.SGD(.1), optim.SGD(.01), optim.SGD(.001)]}
models = utils.expand_param_grid(model, grid)
len(models)
3

models[0]
LinearRegression (
  optimizer=SGD (
    lr=Constant (
      learning_rate=0.1
    )
  )
  loss=Squared ()
  l2=0.
  l1=0.
  intercept_init=0.
  intercept_lr=Constant (
    learning_rate=0.01
  )
  clip_gradient=1e+12
  initializer=Zeros ()
)

You can expand parameters for multiple choices like so:

grid = {
    'optimizer': [
        (optim.SGD, {'lr': [.1, .01, .001]}),
        (optim.Adam, {'lr': [.1, .01, .01]})
    ]
}
models = utils.expand_param_grid(model, grid)
len(models)
6

You may specify a grid of parameters for a pipeline via nesting:

from river import feature_extraction

model = (
    feature_extraction.BagOfWords() |
    linear_model.LinearRegression()
)

grid = {
    'BagOfWords': {
        'strip_accents': [False, True]
    },
    'LinearRegression': {
        'optimizer': [
            (optim.SGD, {'lr': [.1, .01]}),
            (optim.Adam, {'lr': [.1, .01]})
        ]
    }
}

models = utils.expand_param_grid(model, grid)
len(models)
8