Skip to contents

Changes the target of a Task according to a function given as hyperparameter. An inverter-function that undoes the transformation during prediction must also be given.

Format

R6Class object inheriting from PipeOpTargetTrafo/PipeOp

Construction

PipeOpTargetMutate$new(id = "targetmutate", param_vals = list(), new_task_type = NULL)

  • id :: character(1)
    Identifier of resulting object, default "targetmutate".

  • param_vals :: named list
    List of hyperparameter settings, overwriting the hyperparameter settings that would otherwise be set during construction. Default list().

  • new_task_type :: character(1) | NULL
    The task type to which the output is converted, must be one of mlr_reflections$task_types$type. Defaults to NULL: no change in task type.

Input and Output Channels

Input and output channels are inherited from PipeOpTargetTrafo.

State

The $state is left empty (list()).

Parameters

The parameters are the parameters inherited from PipeOpTargetTrafo, as well as:

  • trafo :: function data.table -> data.table
    Transformation function for the target. Should only be a function of the target, i.e., taking a single data.table argument, typically with one column. The return value is used as the new target of the resulting Task. To change target names, change the column name of the data using e.g. setnames().
    Note that this function also gets called during prediction and should thus gracefully handle NA values.
    Initialized to identity().

  • inverter :: function data.table -> data.table | named list
    Inversion of the transformation function for the target. Called on a data.table created from a Prediction using as.data.table(), without the $row_ids and $truth columns, and should return a data.table or named list that contains the new relevant slots of a Prediction subclass (e.g., $response, $prob, $se, ...). Initialized to identity().

Internals

Overloads PipeOpTargetTrafo's .transform() and .invert() functions. Should be used in combination with PipeOpTargetInvert.

Fields

Fields inherited from PipeOp, as well as:

  • new_task_type :: character(1)
    new_task_type construction argument. Read-only.

Methods

Only methods inherited from PipeOpTargetTrafo/PipeOp.

See also

https://mlr-org.com/pipeops.html

Other PipeOps: PipeOpEnsemble, PipeOpImpute, PipeOpTargetTrafo, PipeOpTaskPreprocSimple, PipeOpTaskPreproc, PipeOp, 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_encodeimpact, mlr_pipeops_encodelmer, mlr_pipeops_encode, 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_missind, mlr_pipeops_modelmatrix, mlr_pipeops_multiplicityexply, mlr_pipeops_multiplicityimply, mlr_pipeops_mutate, 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_scalemaxabs, mlr_pipeops_scalerange, mlr_pipeops_scale, mlr_pipeops_select, mlr_pipeops_smote, mlr_pipeops_spatialsign, mlr_pipeops_subsample, mlr_pipeops_targetinvert, mlr_pipeops_targettrafoscalerange, mlr_pipeops_textvectorizer, mlr_pipeops_threshold, mlr_pipeops_tunethreshold, mlr_pipeops_unbranch, mlr_pipeops_updatetarget, mlr_pipeops_vtreat, mlr_pipeops_yeojohnson, mlr_pipeops

Examples

library(mlr3)
task = tsk("boston_housing")
po = PipeOpTargetMutate$new("logtrafo", param_vals = list(
  trafo = function(x) log(x, base = 2),
  inverter = function(x) list(response = 2 ^ x$response))
)
# Note that this example is ill-equipped to work with
# `predict_type == "se"` predictions.

po$train(list(task))
#> $fun
#> NULL
#> 
#> $output
#> <TaskRegr:boston_housing> (506 x 18): Boston Housing Prices
#> * Target: cmedv
#> * Properties: -
#> * Features (17):
#>   - dbl (12): age, b, crim, dis, indus, lat, lon, lstat, nox, ptratio,
#>     rm, zn
#>   - int (3): rad, tax, tract
#>   - fct (2): chas, town
#> 
po$predict(list(task))
#> $fun
#> function (inputs) 
#> {
#>     assert_list(inputs, len = 1L, types = "Prediction")
#>     list(private$.invert(inputs[[1L]], predict_phase_state))
#> }
#> <bytecode: 0x56056379fc30>
#> <environment: 0x5605637a31a0>
#> 
#> $output
#> <TaskRegr:boston_housing> (506 x 18): Boston Housing Prices
#> * Target: cmedv
#> * Properties: -
#> * Features (17):
#>   - dbl (12): age, b, crim, dis, indus, lat, lon, lstat, nox, ptratio,
#>     rm, zn
#>   - int (3): rad, tax, tract
#>   - fct (2): chas, town
#> 

g = Graph$new()
g$add_pipeop(po)
g$add_pipeop(LearnerRegrRpart$new())
g$add_pipeop(PipeOpTargetInvert$new())
g$add_edge(src_id = "logtrafo", dst_id = "targetinvert",
  src_channel = 1, dst_channel = 1)
g$add_edge(src_id = "logtrafo", dst_id = "regr.rpart",
  src_channel = 2, dst_channel = 1)
g$add_edge(src_id = "regr.rpart", dst_id = "targetinvert",
  src_channel = 1, dst_channel = 2)

g$train(task)
#> $targetinvert.output
#> NULL
#> 
g$predict(task)
#> $targetinvert.output
#> <PredictionRegr> for 506 observations:
#>     row_ids truth response
#>           1  24.0 22.97871
#>           2  21.6 22.97871
#>           3  34.7 33.42115
#> ---                       
#>         504  23.9 25.44298
#>         505  22.0 25.44298
#>         506  19.0 20.16845
#> 

#syntactic sugar using ppl():
tt = ppl("targettrafo", graph = PipeOpLearner$new(LearnerRegrRpart$new()))
tt$param_set$values$targetmutate.trafo = function(x) log(x, base = 2)
tt$param_set$values$targetmutate.inverter = function(x) list(response = 2 ^ x$response)