Persistent Transformer#
The Persistent Transformer decorator wraps a Stateful transformer with additional functionality for saving and loading its fitting. It uses Persister objects to interface with various storage backends such as the Filesystem. Pipelines are the most common use case, but any Persistable Stateful transformer may be decorated.
Interfaces: Transformer, Stateful, Elastic
Data Type Compatibility: Depends on base transformer
Parameters#
| # | Name | Default | Type | Description |
|---|---|---|---|---|
| 1 | base | Stateful | The persistable base transformer. | |
| 2 | persister | Persister | The persister used to interface with the storage system. | |
| 3 | serializer | RBX | Serializer | The object serializer. |
Examples#
use Rubix\ML\Transformers\Pipeline;
use Rubix\ML\Transformers\HotDeckImputer;
use Rubix\ML\Transformers\OneHotEncoder;
use Rubix\ML\Transformers\PersistentTransformer;
use Rubix\ML\Persisters\Filesystem;
$transformer = new PersistentTransformer(
new Pipeline([
new HotDeckImputer(5),
new OneHotEncoder(),
]),
new Filesystem('example.rbx')
);
Any Stateful transformer can be decorated as well.
use Rubix\ML\Transformers\PersistentTransformer;
use Rubix\ML\Transformers\ZScaleStandardizer;
use Rubix\ML\Persisters\Filesystem;
$transformer = new PersistentTransformer(
new ZScaleStandardizer(),
new Filesystem('standardizer.rbx')
);
Because the decorator delegates to the very same transformer instance it was constructed with, any fitting performed through it is captured by the next call to save(). The decorator behaves like the transformer it wraps everywhere else, so it can be passed directly to Dataset::apply().
$transformer->fit($dataset);
$transformer->save();
Additional Methods#
Load the transformer from storage.
public static load(Persister $persister, ?Serializer $serializer = null) : self
use Rubix\ML\Transformers\PersistentTransformer;
use Rubix\ML\Persisters\Filesystem;
$transformer = PersistentTransformer::load(new Filesystem('example.rbx'));
Save the transformer and the state of its fitting to storage.
public save() : void
$transformer->save();
Return the base transformer instance.
public base() : Stateful
$transformer = $transformer->base();
Caveats#
Calling update() on a base transformer that does not implement the Elastic interface will throw a RuntimeException, in which case it must be called on the base transformer directly instead.
$transformer->base()->update($dataset);
Unlike the transformer it decorates, the decorator is not Persistable. It cannot itself be serialized, and the storage coordinates it carries are never a part of the transformer's saved state.