A context manager for training pipelines during a warm-up phase.
You don't have to worry about anything when you call
learn_one with a pipeline during in a training loop. The methods at each step of the pipeline will be called in the correct order.
However, during a warm-up phase, you might just be calling
learn_one because you don't need the out-of-sample predictions. In this case the unsupervised estimators in the pipeline won't be updated, because they are usually updated when
predict_one is called.
This context manager allows you to override that behavior and make it so that unsupervised estimators are updated when
learn_one is called.
Let's first see what methods are called if we just call
import io import logging from river import anomaly from river import compose from river import datasets from river import preprocessing from river import utils model = compose.Pipeline( preprocessing.MinMaxScaler(), anomaly.HalfSpaceTrees() ) class_condition = lambda x: x.__class__.__name__ in ('MinMaxScaler', 'HalfSpaceTrees') logger = logging.getLogger() logger.setLevel(logging.DEBUG) logs = io.StringIO() sh = logging.StreamHandler(logs) sh.setLevel(logging.DEBUG) logger.addHandler(sh) with utils.log_method_calls(class_condition): for x, y in datasets.CreditCard().take(1): model = model.learn_one(x) print(logs.getvalue())
Now let's use the context manager and see what methods get called.
logs = io.StringIO() sh = logging.StreamHandler(logs) sh.setLevel(logging.DEBUG) logger.addHandler(sh) with utils.log_method_calls(class_condition), compose.warm_up_mode(): for x, y in datasets.CreditCard().take(1): model = model.learn_one(x) print(logs.getvalue())
MinMaxScaler.learn_one MinMaxScaler.transform_one HalfSpaceTrees.learn_one
We can see that the scaler got updated before transforming the data.