Base class for handling target transformation operations. Target transformations are different
from feature transformation because they have to be "inverted" after prediction. The
target is transformed during the training phase and information to invert this transformation
is sent along to PipeOpTargetInvert
which then inverts this transformation during the
prediction phase. This inversion may need info about both the training and the prediction data.
Users can overload up to four private$
-functions: .get_state()
(optional), .transform()
(mandatory),
.train_invert()
(optional), and .invert()
(mandatory).
Construction
PipeOpTargetTrafo$new(id, param_set = ps(), param_vals = list() packages = character(0), task_type_in = "Task", task_type_out = task_type_in, tags = NULL)
id
::character(1)
Identifier of resulting object. See$id
slot ofPipeOp
.param_set
::ParamSet
Parameter space description. This should be created by the subclass and given tosuper$initialize()
.param_vals
:: namedlist
List of hyperparameter settings, overwriting the hyperparameter settings given inparam_set
. The subclass should have its ownparam_vals
parameter and pass it on tosuper$initialize()
. Defaultlist()
.task_type_in
::character(1)
The class ofTask
that should be accepted as input. This should generally be acharacter(1)
identifying a type ofTask
, e.g."Task"
,"TaskClassif"
or"TaskRegr"
(or another subclass introduced by other packages). Default is"Task"
.task_type_out
::character(1)
The class ofTask
that is produced as output. This should generally be acharacter(1)
identifying a type ofTask
, e.g."Task"
,"TaskClassif"
or"TaskRegr"
(or another subclass introduced by other packages). Default is the value oftask_type_in
.packages ::
character
Set of all required packages for thePipeOp
's methods. See$packages
slot. Default ischaracter(0)
.tags ::
character
|NULL
Tags of the resultingPipeOp
. This is added to the tag"target transform"
. DefaultNULL
.
Input and Output Channels
PipeOpTargetTrafo
has one input channels named "input"
taking a Task
(or whatever class
was specified by the task_type
during construction) both during training and prediction.
PipeOpTargetTrafo
has two output channels named "fun"
and "output"
. During training,
"fun"
returns NULL
and during prediction, "fun"
returns a function that can later be used
to invert the transformation done during training according to the overloaded .train_invert()
and .invert()
functions. "output"
returns the modified input Task
(or task_type
)
according to the overloaded transform()
function both during training and prediction.
State
The $state
is a named list
and should be returned explicitly by the user in the overloaded
.get_state()
function.
Internals
PipeOpTargetTrafo
is an abstract class inheriting from PipeOp
. It implements the
private$.train()
and private$.predict()
functions. These functions perform checks and go on
to call .get_state()
, .transform()
, .train_invert()
. .invert()
is packaged and sent along
the "fun"
output to be applied to a Prediction
by PipeOpTargetInvert
.
A subclass of PipeOpTargetTrafo
should implement these functions and be used in combination
with PipeOpTargetInvert
.
Fields
Fields inherited from PipeOp
.
Methods
Methods inherited from PipeOp
, as well as:
.get_state(task)
(Task
) ->list
Called byPipeOpTargetTrafo
's implementation ofprivate$.train()
. Takes a singleTask
as input and returns alist
to set the$state
..get_state()
will be called a single time during training right before.transform()
is called. The return value (i.e. the$state
) should contain info needed in.transform()
as well as in.invert()
.
The base implementation returnslist()
and should be overloaded if setting the state is desired..transform(task, phase)
(Task
,character(1)
) ->Task
Called byPipeOpTargetTrafo
's implementation ofprivate$.train()
andprivate$.predict()
. Takes a singleTask
as input and modifies it. This should typically consist of calculating a new target and modifying theTask
by using theconvert_task
function..transform()
will be called during training and prediction because the target (and if needed also type) of the inputTask
must be transformed both times. Note that unlike$.train()
, the argument is not a list but a singularTask
, and the return object is also not a list but a singularTask
. Thephase
argument is"train"
during training phase and"predict"
during prediction phase and can be used to enable different behaviour during training and prediction. Whenphase
is"train"
, the$state
slot (as previously set by.get_state()
) may also be modified, alternatively or in addition to overloading.get_state()
.
The input should not be cloned and if possible should be changed in-place.
This function is abstract and should be overloaded by inheriting classes..train_invert(task)
(Task
) ->any
Called byPipeOpTargetTrafo
's implementation ofprivate$.predict()
. Takes a singleTask
as input and returns an arbitrary value that will be given aspredict_phase_state
to.invert()
. This should not modify the inputTask
.
The base implementation returns a list with a single element, the$truth
column of theTask
, and should be overloaded if a more training-phase-dependent state is desired..invert(prediction, predict_phase_state)
(Prediction
,any
) ->Prediction
Takes aPrediction
and apredict_phase_state
object as input and inverts the prediction. This function is sent as"fun"
toPipeOpTargetInvert
.
This function is abstract and should be overloaded by inheriting classes. Care should be taken that thepredict_type
of thePrediction
being inverted is handled well..invert_help(predict_phase_state)
(predict_phase_state
object) ->function
Helper function that packages.invert()
that can later be used for the inversion.
See also
https://mlr-org.com/pipeops.html
Other mlr3pipelines backend related:
Graph
,
PipeOp
,
PipeOpTaskPreproc
,
PipeOpTaskPreprocSimple
,
mlr_graphs
,
mlr_pipeops
,
mlr_pipeops_updatetarget
Other PipeOps:
PipeOp
,
PipeOpEnsemble
,
PipeOpImpute
,
PipeOpTaskPreproc
,
PipeOpTaskPreprocSimple
,
mlr_pipeops
,
mlr_pipeops_adas
,
mlr_pipeops_blsmote
,
mlr_pipeops_boxcox
,
mlr_pipeops_branch
,
mlr_pipeops_chunk
,
mlr_pipeops_classbalancing
,
mlr_pipeops_classifavg
,
mlr_pipeops_classweights
,
mlr_pipeops_colapply
,
mlr_pipeops_collapsefactors
,
mlr_pipeops_colroles
,
mlr_pipeops_copy
,
mlr_pipeops_datefeatures
,
mlr_pipeops_encode
,
mlr_pipeops_encodeimpact
,
mlr_pipeops_encodelmer
,
mlr_pipeops_featureunion
,
mlr_pipeops_filter
,
mlr_pipeops_fixfactors
,
mlr_pipeops_histbin
,
mlr_pipeops_ica
,
mlr_pipeops_imputeconstant
,
mlr_pipeops_imputehist
,
mlr_pipeops_imputelearner
,
mlr_pipeops_imputemean
,
mlr_pipeops_imputemedian
,
mlr_pipeops_imputemode
,
mlr_pipeops_imputeoor
,
mlr_pipeops_imputesample
,
mlr_pipeops_kernelpca
,
mlr_pipeops_learner
,
mlr_pipeops_learner_pi_cvplus
,
mlr_pipeops_learner_quantiles
,
mlr_pipeops_missind
,
mlr_pipeops_modelmatrix
,
mlr_pipeops_multiplicityexply
,
mlr_pipeops_multiplicityimply
,
mlr_pipeops_mutate
,
mlr_pipeops_nearmiss
,
mlr_pipeops_nmf
,
mlr_pipeops_nop
,
mlr_pipeops_ovrsplit
,
mlr_pipeops_ovrunite
,
mlr_pipeops_pca
,
mlr_pipeops_proxy
,
mlr_pipeops_quantilebin
,
mlr_pipeops_randomprojection
,
mlr_pipeops_randomresponse
,
mlr_pipeops_regravg
,
mlr_pipeops_removeconstants
,
mlr_pipeops_renamecolumns
,
mlr_pipeops_replicate
,
mlr_pipeops_rowapply
,
mlr_pipeops_scale
,
mlr_pipeops_scalemaxabs
,
mlr_pipeops_scalerange
,
mlr_pipeops_select
,
mlr_pipeops_smote
,
mlr_pipeops_smotenc
,
mlr_pipeops_spatialsign
,
mlr_pipeops_subsample
,
mlr_pipeops_targetinvert
,
mlr_pipeops_targetmutate
,
mlr_pipeops_targettrafoscalerange
,
mlr_pipeops_textvectorizer
,
mlr_pipeops_threshold
,
mlr_pipeops_tomek
,
mlr_pipeops_tunethreshold
,
mlr_pipeops_unbranch
,
mlr_pipeops_updatetarget
,
mlr_pipeops_vtreat
,
mlr_pipeops_yeojohnson