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
id::character(1)
Identifier of resulting object, default"targetmutate".param_vals:: namedlist
List of hyperparameter settings, overwriting the hyperparameter settings that would otherwise be set during construction. Defaultlist().new_task_type::character(1)|NULL
The task type to which the output is converted, must be one ofmlr_reflections$task_types$type. Defaults toNULL: 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::functiondata.table->data.frame|data.table|matrix
Transformation function for the target. Should only be a function of the target, i.e., taking a singledata.tableargument, typically with one column. The return value is used as the new target of the resultingTask. 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 handleNAvalues.
Initialized toidentity().inverter::functiondata.table->data.table| namedlist
Inversion of the transformation function for the target. Called on adata.tablecreated from aPredictionusingas.data.table(), without the$row_idsand$truthcolumns, and should return adata.tableor namedlistthat contains the new relevant slots of aPredictionsubclass (e.g.,$response,$prob,$se, ...). Initialized toidentity().
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_typeconstruction argument. Read-only.
Methods
Only methods inherited from PipeOpTargetTrafo/PipeOp.
See also
https://mlr-org.com/pipeops.html
Other PipeOps:
PipeOp,
PipeOpEncodePL,
PipeOpEnsemble,
PipeOpImpute,
PipeOpTargetTrafo,
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_decode,
mlr_pipeops_encode,
mlr_pipeops_encodeimpact,
mlr_pipeops_encodelmer,
mlr_pipeops_encodeplquantiles,
mlr_pipeops_encodepltree,
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_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
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> (506x18): 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: 0x556148458260>
#> <environment: 0x556148458c38>
#>
#> $output
#>
#> ── <TaskRegr> (506x18): 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)
