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
::function
data.table
->data.table
Transformation function for the target. Should only be a function of the target, i.e., taking a singledata.table
argument, 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 handleNA
values.
Initialized toidentity()
.inverter
::function
data.table
->data.table
| namedlist
Inversion of the transformation function for the target. Called on adata.table
created from aPrediction
usingas.data.table()
, without the$row_ids
and$truth
columns, and should return adata.table
or namedlist
that contains the new relevant slots of aPrediction
subclass (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_type
construction argument. Read-only.
Methods
Only methods inherited from PipeOpTargetTrafo
/PipeOp
.
See also
https://mlr-org.com/pipeops.html
Other PipeOps:
PipeOp
,
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_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_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: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: 0x5647eb81c008>
#> <environment: 0x5647eb81b748>
#>
#> $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)