diff --git a/DESCRIPTION b/DESCRIPTION index 5e7334d1e..3a3ec0644 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -109,6 +109,8 @@ Collate: 'LearnerAvg.R' 'NO_OP.R' 'PipeOpTaskPreproc.R' + 'PipeOpADAS.R' + 'PipeOpBLSmote.R' 'PipeOpBoxCox.R' 'PipeOpBranch.R' 'PipeOpChunk.R' diff --git a/NAMESPACE b/NAMESPACE index cb51b28d2..2190416a7 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -42,6 +42,8 @@ export(LearnerRegrAvg) export(Multiplicity) export(NO_OP) export(PipeOp) +export(PipeOpADAS) +export(PipeOpBLSmote) export(PipeOpBoxCox) export(PipeOpBranch) export(PipeOpChunk) diff --git a/NEWS.md b/NEWS.md index efc125074..d714800bc 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,6 +1,7 @@ # mlr3pipelines 0.6.0-9000 * New PipeOp: `PipeOpRowApply` / `po("rowapply")` +* New PipeOps for handling inbalanced data: `PipeOpADAS` / `po("adas")` and `PipeOpBLSmote` / `po("blsmote")` * New PipeOp for handling inbalanced data: `PipeOpSmoteNC` / `po("smotenc")` # mlr3pipelines 0.6.0 diff --git a/R/PipeOpADAS.R b/R/PipeOpADAS.R new file mode 100644 index 000000000..0d51d4aa7 --- /dev/null +++ b/R/PipeOpADAS.R @@ -0,0 +1,116 @@ +#' @title ADAS Balancing +#' +#' @usage NULL +#' @name mlr_pipeops_adas +#' @format [`R6Class`][R6::R6Class] object inheriting from [`PipeOpTaskPreproc`]/[`PipeOp`]. +#' +#' @description +#' Generates a more balanced data set by creating synthetic instances of the minority class using the ADASYN algorithm. +#' +#' The algorithm generates for each minority instance new data points based on its `K` nearest neighbors and the difficulty of learning for that data point. +#' It can only be applied to tasks with numeric features that have no missing values. +#' +#' See [`smotefamily::ADAS`] for details. +#' +#' @section Construction: +#' ``` +#' PipeOpADAS$new(id = "adas", param_vals = list()) +#' ``` +#' +#' * `id` :: `character(1)`\cr +#' Identifier of resulting object, default `"smote"`. +#' * `param_vals` :: named `list`\cr +#' List of hyperparameter settings, overwriting the hyperparameter settings that would otherwise be set during construction. Default `list()`. +#' +#' @section Input and Output Channels: +#' Input and output channels are inherited from [`PipeOpTaskPreproc`]. +#' +#' The output during training is the input [`Task`][mlr3::Task] with added synthetic rows for the minority class. +#' The output during prediction is the unchanged input. +#' +#' @section State: +#' The `$state` is a named `list` with the `$state` elements inherited from [`PipeOpTaskPreproc`]. +#' +#' @section Parameters: +#' The parameters are the parameters inherited from [`PipeOpTaskPreproc`], as well as: +#' * `K` :: `numeric(1)` \cr +#' The number of nearest neighbors used for sampling new values. Default is `5`. +#' See [`ADAS()`][`smotefamily::ADAS`]. +#' +#' @section Fields: +#' Only fields inherited from [`PipeOpTaskPreproc`]/[`PipeOp`]. +#' +#' @section Methods: +#' Only methods inherited from [`PipeOpTaskPreproc`]/[`PipeOp`]. +#' +#' @references +#' `r format_bib("he_2008")` +#' +#' @family PipeOps +#' @template seealso_pipeopslist +#' @include PipeOpTaskPreproc.R +#' @export +#' @examples +#' \dontshow{ if (requireNamespace("smotefamily")) \{ } +#' library("mlr3") +#' +#' # Create example task +#' data = data.frame( +#' target = factor(sample(c("c1", "c2"), size = 300, replace = TRUE, prob = c(0.1, 0.9))), +#' x1 = rnorm(300), +#' x2 = rnorm(300) +#' ) +#' task = TaskClassif$new(id = "example", backend = data, target = "target") +#' task$head() +#' table(task$data(cols = "target")) +#' +#' # Generate synthetic data for minority class +#' pop = po("adas") +#' adas_result = pop$train(list(task))[[1]]$data() +#' nrow(adas_result) +#' table(adas_result$target) +#' \dontshow{ \} } +PipeOpADAS = R6Class("PipeOpADAS", + inherit = PipeOpTaskPreproc, + public = list( + initialize = function(id = "adas", param_vals = list()) { + ps = ps( + K = p_int(lower = 1, default = 5, tags = c("train", "adas")) + ) + super$initialize(id, param_set = ps, param_vals = param_vals, can_subset_cols = FALSE, + packages = "smotefamily", task_type = "TaskClassif", tags = "imbalanced data") + } + ), + private = list( + + .train_task = function(task) { + cols = task$feature_names + unsupported_cols = setdiff(unlist(task$col_roles), union(cols, task$target_names)) + if (length(unsupported_cols)) { + stopf("ADAS cannot generate synthetic data for the following columns since they are neither features nor targets: %s.", + str_collapse(unsupported_cols, quote = '"')) + } + if (!length(cols)) { + return(task) + } + if (!all(task$feature_types$type %in% c("numeric"))) { + stop("ADAS does only accept numeric features. Use PipeOpSelect to select the appropriate features.") + } + + # Calculate synthetic data + dt = task$data(cols = cols) + st = setDT(invoke(smotefamily::ADAS, X = dt, target = task$truth(), + .args = self$param_set$get_values(tags = "adas"), + .opts = list(warnPartialMatchArgs = FALSE))$syn_data) # ADAS uses partial arg matching internally + + # Rename target column and fix character conversion + # We index by position (target should be last column) instead of indexing by name, which would lead to problems if a feature were called "class" + st[[ncol(st)]] = as_factor(st[[ncol(st)]], levels = task$class_names) + setnames(st, ncol(st), task$target_names) + + task$rbind(st) + } + ) +) + +mlr_pipeops$add("adas", PipeOpADAS) diff --git a/R/PipeOpBLSmote.R b/R/PipeOpBLSmote.R new file mode 100644 index 000000000..c0d7df039 --- /dev/null +++ b/R/PipeOpBLSmote.R @@ -0,0 +1,136 @@ +#' @title BLSMOTE Balancing +#' +#' @usage NULL +#' @name mlr_pipeops_blsmote +#' @format [`R6Class`][R6::R6Class] object inheriting from [`PipeOpTaskPreproc`]/[`PipeOp`]. +#' +#' @description +#' Adds new data points by generating synthetic instances for the minority class using the Borderline-SMOTE algorithm. +#' This can only be applied to [classification tasks][mlr3::TaskClassif] with numeric features that have no missing values. +#' See [`smotefamily::BLSMOTE`] for details. +#' +#' @section Construction: +#' ``` +#' PipeOpBLSmote$new(id = "blsmote", param_vals = list()) +#' ``` +#' +#' * `id` :: `character(1)`\cr +#' Identifier of resulting object, default `"smote"`. +#' * `param_vals` :: named `list`\cr +#' List of hyperparameter settings, overwriting the hyperparameter settings that would otherwise be set during construction. Default `list()`. +#' +#' @section Input and Output Channels: +#' Input and output channels are inherited from [`PipeOpTaskPreproc`]. +#' +#' The output during training is the input [`Task`][mlr3::Task] with added synthetic rows for the minority class. +#' The output during prediction is the unchanged input. +#' +#' @section State: +#' The `$state` is a named `list` with the `$state` elements inherited from [`PipeOpTaskPreproc`]. +#' +#' @section Parameters: +#' The parameters are the parameters inherited from [`PipeOpTaskPreproc`], as well as: +#' * `K` :: `numeric(1)` \cr +#' The number of nearest neighbors used for sampling from the minority class. Default is `5`. +#' See [`BLSMOTE()`][`smotefamily::BLSMOTE`]. +#' * `C` :: `numeric(1)` \cr +#' The number of nearest neighbors used for classifying sample points as SAFE/DANGER/NOISE. Default is `5`. +#' See [`BLSMOTE()`][`smotefamily::BLSMOTE`]. +#' * `dup_size` :: `numeric` \cr +#' Desired times of synthetic minority instances over the original number of majority instances. `0` leads to balancing minority and majority class. +#' Default is `0`. See [`BLSMOTE()`][`smotefamily::BLSMOTE`]. +#' * `method` :: `character(1)` \cr +#' The type of Borderline-SMOTE algorithm to use. Default is `"type1"`. +#' See [`BLSMOTE()`][`smotefamily::BLSMOTE`]. +#' * `quiet` :: `logical(1)` \cr +#' Whether to suppress printing status during training. Initialized to `TRUE`. +#' +#' @section Fields: +#' Only fields inherited from [`PipeOpTaskPreproc`]/[`PipeOp`]. +#' +#' @section Methods: +#' Only methods inherited from [`PipeOpTaskPreproc`]/[`PipeOp`]. +#' +#' @references +#' `r format_bib("han_2005")` +#' +#' @family PipeOps +#' @template seealso_pipeopslist +#' @include PipeOpTaskPreproc.R +#' @export +#' @examples +#' \dontshow{ if (requireNamespace("smotefamily")) \{ } +#' library("mlr3") +#' +#' # Create example task +#' data = smotefamily::sample_generator(500, 0.8) +#' data$result = factor(data$result) +#' task = TaskClassif$new(id = "example", backend = data, target = "result") +#' task$head() +#' table(task$data(cols = "result")) +#' +#' # Generate synthetic data for minority class +#' pop = po("blsmote") +#' bls_result = pop$train(list(task))[[1]]$data() +#' nrow(bls_result) +#' table(bls_result$result) +#' \dontshow{ \} } +PipeOpBLSmote = R6Class("PipeOpBLSmote", + inherit = PipeOpTaskPreproc, + public = list( + initialize = function(id = "blsmote", param_vals = list()) { + ps = ps( + K = p_int(lower = 1, default = 5, tags = c("train", "blsmote")), + C = p_int(lower = 1, default = 5, tags = c("train", "blsmote")), + # dup_size = 0 leads to behaviour different from 1, 2, 3, ..., because it means "duplicating until balanced", so it is a "special_vals". + dupSize = p_int(lower = 1, default = 0, special_vals = list(0), tags = c("train", "blsmote")), + # Default of `method` is derived from the source code of smotefamily::BLSMOTE(), not documented there. + method = p_fct(levels = c("type1", "type2"), default = "type1", tags = c("train", "blsmote")), + quiet = p_lgl(tags = c("train", "required")) + ) + ps$values = list(quiet = TRUE) + super$initialize(id, param_set = ps, param_vals = param_vals, can_subset_cols = FALSE, + packages = "smotefamily", task_type = "TaskClassif", tags = "imbalanced data") + } + ), + private = list( + + .train_task = function(task) { + cols = task$feature_names + unsupported_cols = setdiff(unlist(task$col_roles), union(cols, task$target_names)) + if (length(unsupported_cols)) { + stopf("BLSMOTE cannot generate synthetic data for the following columns since they are neither features nor targets: %s.", + str_collapse(unsupported_cols, quote = '"')) + } + if (!length(cols)) { + return(task) + } + if (!all(task$feature_types$type %in% c("numeric"))) { + stop("BLSmote does only accept numeric features. Use PipeOpSelect to select the appropriate features.") + } + + # Calculate synthetic data + dt = task$data(cols = cols) + if (self$param_set$get_values()$quiet) { + utils::capture.output({ + st = setDT(invoke(smotefamily::BLSMOTE, X = dt, target = task$truth(), + .args = self$param_set$get_values(tags = "blsmote"), + .opts = list(warnPartialMatchArgs = FALSE))$syn_data) # BLSMOTE uses partial arg matching internally + }) + } else { + st = setDT(invoke(smotefamily::BLSMOTE, X = dt, target = task$truth(), + .args = self$param_set$get_values(tags = "blsmote"), + .opts = list(warnPartialMatchArgs = FALSE))$syn_data) + } + + # Rename target column and fix character conversion + # We index by position (target should be last column) instead of indexing by name, which would lead to problems if a feature were called "class" + st[[ncol(st)]] = as_factor(st[[ncol(st)]], levels = task$class_names) + setnames(st, ncol(st), task$target_names) + + task$rbind(st) + } + ) +) + +mlr_pipeops$add("blsmote", PipeOpBLSmote) diff --git a/R/bibentries.R b/R/bibentries.R index de55741d5..ecd2f09d9 100644 --- a/R/bibentries.R +++ b/R/bibentries.R @@ -52,5 +52,27 @@ bibentries = c( author = "Yujun Wu and Dennis D Boos and Leonard A Stefanski", title = "Controlling Variable Selection by the Addition of Pseudovariables", journal = "Journal of the American Statistical Association" + ), + + he_2008 = bibentry("InProceedings", + author = "Haibo He and Yang Bai and Garcia, Edwardo A. and Shutao Li", + booktitle = "2008 IEEE International Joint Conference on Neural Networks (IEEE World Congress on Computational Intelligence)", + title = "ADASYN: Adaptive synthetic sampling approach for imbalanced learning", + year = "2008", + pages = "1322-1328", + doi = "10.1109/IJCNN.2008.4633969" + ), + + han_2005 = bibentry("InProceedings", + doi = "10.1007/11538059_91", + author = "Han, Hui and Wang, Wen-Yuan and Mao, Bing-Huan", + editor = "Huang, De-Shuang and Zhang, Xiao-Ping and Huang, Guang-Bin", + title = "Borderline-SMOTE: A New Over-Sampling Method in Imbalanced Data Sets Learning", + booktitle = "Advances in Intelligent Computing", + year = "2005", + publisher = "Springer Berlin Heidelberg", + address = "Berlin, Heidelberg", + pages = "878--887", + isbn = "978-3-540-31902-3" ) ) diff --git a/man/PipeOp.Rd b/man/PipeOp.Rd index 4b5b40241..272f42272 100644 --- a/man/PipeOp.Rd +++ b/man/PipeOp.Rd @@ -273,6 +273,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/PipeOpEnsemble.Rd b/man/PipeOpEnsemble.Rd index eefa73e9b..afdb26f49 100644 --- a/man/PipeOpEnsemble.Rd +++ b/man/PipeOpEnsemble.Rd @@ -105,6 +105,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/PipeOpImpute.Rd b/man/PipeOpImpute.Rd index cb10056f2..1f4849561 100644 --- a/man/PipeOpImpute.Rd +++ b/man/PipeOpImpute.Rd @@ -138,6 +138,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/PipeOpTargetTrafo.Rd b/man/PipeOpTargetTrafo.Rd index bfaeeb69b..54743c3f2 100644 --- a/man/PipeOpTargetTrafo.Rd +++ b/man/PipeOpTargetTrafo.Rd @@ -146,6 +146,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/PipeOpTaskPreproc.Rd b/man/PipeOpTaskPreproc.Rd index ebede04cf..6fdb0b27f 100644 --- a/man/PipeOpTaskPreproc.Rd +++ b/man/PipeOpTaskPreproc.Rd @@ -201,6 +201,8 @@ Other PipeOps: \code{\link{PipeOpTargetTrafo}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/PipeOpTaskPreprocSimple.Rd b/man/PipeOpTaskPreprocSimple.Rd index 8fc621a6f..718910f16 100644 --- a/man/PipeOpTaskPreprocSimple.Rd +++ b/man/PipeOpTaskPreprocSimple.Rd @@ -138,6 +138,8 @@ Other PipeOps: \code{\link{PipeOpTargetTrafo}}, \code{\link{PipeOpTaskPreproc}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops.Rd b/man/mlr_pipeops.Rd index adcf6f502..51304c44e 100644 --- a/man/mlr_pipeops.Rd +++ b/man/mlr_pipeops.Rd @@ -75,6 +75,8 @@ Other PipeOps: \code{\link{PipeOpTargetTrafo}}, \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_adas.Rd b/man/mlr_pipeops_adas.Rd new file mode 100644 index 000000000..e5ccdee96 --- /dev/null +++ b/man/mlr_pipeops_adas.Rd @@ -0,0 +1,169 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/PipeOpADAS.R +\name{mlr_pipeops_adas} +\alias{mlr_pipeops_adas} +\alias{PipeOpADAS} +\title{ADAS Balancing} +\format{ +\code{\link[R6:R6Class]{R6Class}} object inheriting from \code{\link{PipeOpTaskPreproc}}/\code{\link{PipeOp}}. +} +\description{ +Generates a more balanced data set by creating synthetic instances of the minority class using the ADASYN algorithm. + +The algorithm generates for each minority instance new data points based on its \code{K} nearest neighbors and the difficulty of learning for that data point. +It can only be applied to tasks with numeric features that have no missing values. + +See \code{\link[smotefamily:adas]{smotefamily::ADAS}} for details. +} +\section{Construction}{ + + +\if{html}{\out{
}}\preformatted{PipeOpADAS$new(id = "adas", param_vals = list()) +}\if{html}{\out{
}} +\itemize{ +\item \code{id} :: \code{character(1)}\cr +Identifier of resulting object, default \code{"smote"}. +\item \code{param_vals} :: named \code{list}\cr +List of hyperparameter settings, overwriting the hyperparameter settings that would otherwise be set during construction. Default \code{list()}. +} +} + +\section{Input and Output Channels}{ + +Input and output channels are inherited from \code{\link{PipeOpTaskPreproc}}. + +The output during training is the input \code{\link[mlr3:Task]{Task}} with added synthetic rows for the minority class. +The output during prediction is the unchanged input. +} + +\section{State}{ + +The \verb{$state} is a named \code{list} with the \verb{$state} elements inherited from \code{\link{PipeOpTaskPreproc}}. +} + +\section{Parameters}{ + +The parameters are the parameters inherited from \code{\link{PipeOpTaskPreproc}}, as well as: +\itemize{ +\item \code{K} :: \code{numeric(1)} \cr +The number of nearest neighbors used for sampling new values. Default is \code{5}. +See \code{\link[smotefamily:adas]{ADAS()}}. +} +} + +\section{Fields}{ + +Only fields inherited from \code{\link{PipeOpTaskPreproc}}/\code{\link{PipeOp}}. +} + +\section{Methods}{ + +Only methods inherited from \code{\link{PipeOpTaskPreproc}}/\code{\link{PipeOp}}. +} + +\examples{ +\dontshow{ if (requireNamespace("smotefamily")) \{ } +library("mlr3") + +# Create example task +data = data.frame( + target = factor(sample(c("c1", "c2"), size = 300, replace = TRUE, prob = c(0.1, 0.9))), + x1 = rnorm(300), + x2 = rnorm(300) +) +task = TaskClassif$new(id = "example", backend = data, target = "target") +task$head() +table(task$data(cols = "target")) + +# Generate synthetic data for minority class +pop = po("adas") +adas_result = pop$train(list(task))[[1]]$data() +nrow(adas_result) +table(adas_result$target) +\dontshow{ \} } +} +\references{ +He H, Bai Y, Garcia, A. E, Li S (2008). +\dQuote{ADASYN: Adaptive synthetic sampling approach for imbalanced learning.} +In \emph{2008 IEEE International Joint Conference on Neural Networks (IEEE World Congress on Computational Intelligence)}, 1322-1328. +\doi{10.1109/IJCNN.2008.4633969}. +} +\seealso{ +https://mlr-org.com/pipeops.html + +Other PipeOps: +\code{\link{PipeOp}}, +\code{\link{PipeOpEnsemble}}, +\code{\link{PipeOpImpute}}, +\code{\link{PipeOpTargetTrafo}}, +\code{\link{PipeOpTaskPreproc}}, +\code{\link{PipeOpTaskPreprocSimple}}, +\code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_blsmote}}, +\code{\link{mlr_pipeops_boxcox}}, +\code{\link{mlr_pipeops_branch}}, +\code{\link{mlr_pipeops_chunk}}, +\code{\link{mlr_pipeops_classbalancing}}, +\code{\link{mlr_pipeops_classifavg}}, +\code{\link{mlr_pipeops_classweights}}, +\code{\link{mlr_pipeops_colapply}}, +\code{\link{mlr_pipeops_collapsefactors}}, +\code{\link{mlr_pipeops_colroles}}, +\code{\link{mlr_pipeops_copy}}, +\code{\link{mlr_pipeops_datefeatures}}, +\code{\link{mlr_pipeops_encode}}, +\code{\link{mlr_pipeops_encodeimpact}}, +\code{\link{mlr_pipeops_encodelmer}}, +\code{\link{mlr_pipeops_featureunion}}, +\code{\link{mlr_pipeops_filter}}, +\code{\link{mlr_pipeops_fixfactors}}, +\code{\link{mlr_pipeops_histbin}}, +\code{\link{mlr_pipeops_ica}}, +\code{\link{mlr_pipeops_imputeconstant}}, +\code{\link{mlr_pipeops_imputehist}}, +\code{\link{mlr_pipeops_imputelearner}}, +\code{\link{mlr_pipeops_imputemean}}, +\code{\link{mlr_pipeops_imputemedian}}, +\code{\link{mlr_pipeops_imputemode}}, +\code{\link{mlr_pipeops_imputeoor}}, +\code{\link{mlr_pipeops_imputesample}}, +\code{\link{mlr_pipeops_kernelpca}}, +\code{\link{mlr_pipeops_learner}}, +\code{\link{mlr_pipeops_missind}}, +\code{\link{mlr_pipeops_modelmatrix}}, +\code{\link{mlr_pipeops_multiplicityexply}}, +\code{\link{mlr_pipeops_multiplicityimply}}, +\code{\link{mlr_pipeops_mutate}}, +\code{\link{mlr_pipeops_nmf}}, +\code{\link{mlr_pipeops_nop}}, +\code{\link{mlr_pipeops_ovrsplit}}, +\code{\link{mlr_pipeops_ovrunite}}, +\code{\link{mlr_pipeops_pca}}, +\code{\link{mlr_pipeops_proxy}}, +\code{\link{mlr_pipeops_quantilebin}}, +\code{\link{mlr_pipeops_randomprojection}}, +\code{\link{mlr_pipeops_randomresponse}}, +\code{\link{mlr_pipeops_regravg}}, +\code{\link{mlr_pipeops_removeconstants}}, +\code{\link{mlr_pipeops_renamecolumns}}, +\code{\link{mlr_pipeops_replicate}}, +\code{\link{mlr_pipeops_rowapply}}, +\code{\link{mlr_pipeops_scale}}, +\code{\link{mlr_pipeops_scalemaxabs}}, +\code{\link{mlr_pipeops_scalerange}}, +\code{\link{mlr_pipeops_select}}, +\code{\link{mlr_pipeops_smote}}, +\code{\link{mlr_pipeops_spatialsign}}, +\code{\link{mlr_pipeops_subsample}}, +\code{\link{mlr_pipeops_targetinvert}}, +\code{\link{mlr_pipeops_targetmutate}}, +\code{\link{mlr_pipeops_targettrafoscalerange}}, +\code{\link{mlr_pipeops_textvectorizer}}, +\code{\link{mlr_pipeops_threshold}}, +\code{\link{mlr_pipeops_tunethreshold}}, +\code{\link{mlr_pipeops_unbranch}}, +\code{\link{mlr_pipeops_updatetarget}}, +\code{\link{mlr_pipeops_vtreat}}, +\code{\link{mlr_pipeops_yeojohnson}} +} +\concept{PipeOps} diff --git a/man/mlr_pipeops_blsmote.Rd b/man/mlr_pipeops_blsmote.Rd new file mode 100644 index 000000000..34046abab --- /dev/null +++ b/man/mlr_pipeops_blsmote.Rd @@ -0,0 +1,172 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/PipeOpBLSmote.R +\name{mlr_pipeops_blsmote} +\alias{mlr_pipeops_blsmote} +\alias{PipeOpBLSmote} +\title{BLSMOTE Balancing} +\format{ +\code{\link[R6:R6Class]{R6Class}} object inheriting from \code{\link{PipeOpTaskPreproc}}/\code{\link{PipeOp}}. +} +\description{ +Adds new data points by generating synthetic instances for the minority class using the Borderline-SMOTE algorithm. +This can only be applied to \link[mlr3:TaskClassif]{classification tasks} with numeric features that have no missing values. +See \code{\link[smotefamily:BLSMOTE]{smotefamily::BLSMOTE}} for details. +} +\section{Construction}{ + + +\if{html}{\out{
}}\preformatted{PipeOpBLSmote$new(id = "blsmote", param_vals = list()) +}\if{html}{\out{
}} +\itemize{ +\item \code{id} :: \code{character(1)}\cr +Identifier of resulting object, default \code{"smote"}. +\item \code{param_vals} :: named \code{list}\cr +List of hyperparameter settings, overwriting the hyperparameter settings that would otherwise be set during construction. Default \code{list()}. +} +} + +\section{Input and Output Channels}{ + +Input and output channels are inherited from \code{\link{PipeOpTaskPreproc}}. + +The output during training is the input \code{\link[mlr3:Task]{Task}} with added synthetic rows for the minority class. +The output during prediction is the unchanged input. +} + +\section{State}{ + +The \verb{$state} is a named \code{list} with the \verb{$state} elements inherited from \code{\link{PipeOpTaskPreproc}}. +} + +\section{Parameters}{ + +The parameters are the parameters inherited from \code{\link{PipeOpTaskPreproc}}, as well as: +\itemize{ +\item \code{K} :: \code{numeric(1)} \cr +The number of nearest neighbors used for sampling from the minority class. Default is \code{5}. +See \code{\link[smotefamily:BLSMOTE]{BLSMOTE()}}. +\item \code{C} :: \code{numeric(1)} \cr +The number of nearest neighbors used for classifying sample points as SAFE/DANGER/NOISE. Default is \code{5}. +See \code{\link[smotefamily:BLSMOTE]{BLSMOTE()}}. +\item \code{dup_size} :: \code{numeric} \cr +Desired times of synthetic minority instances over the original number of majority instances. \code{0} leads to balancing minority and majority class. +Default is \code{0}. See \code{\link[smotefamily:BLSMOTE]{BLSMOTE()}}. +\item \code{method} :: \code{character(1)} \cr +The type of Borderline-SMOTE algorithm to use. Default is \code{"type1"}. +See \code{\link[smotefamily:BLSMOTE]{BLSMOTE()}}. +} +} + +\section{Fields}{ + +Only fields inherited from \code{\link{PipeOpTaskPreproc}}/\code{\link{PipeOp}}. +} + +\section{Methods}{ + +Only methods inherited from \code{\link{PipeOpTaskPreproc}}/\code{\link{PipeOp}}. +} + +\examples{ +\dontshow{ if (requireNamespace("smotefamily")) \{ } +library("mlr3") + +# Create example task +data = smotefamily::sample_generator(500, 0.8) +data$result = factor(data$result) +task = TaskClassif$new(id = "example", backend = data, target = "result") +task$head() +table(task$data(cols = "result")) + +# Generate synthetic data for minority class +pop = po("blsmote") +bls_result = pop$train(list(task))[[1]]$data() +nrow(bls_result) +table(bls_result$result) +\dontshow{ \} } +} +\references{ +Han, Hui, Wang, Wen-Yuan, Mao, Bing-Huan (2005). +\dQuote{Borderline-SMOTE: A New Over-Sampling Method in Imbalanced Data Sets Learning.} +In Huang, De-Shuang, Zhang, Xiao-Ping, Huang, Guang-Bin (eds.), \emph{Advances in Intelligent Computing}, 878--887. +ISBN 978-3-540-31902-3, \doi{10.1007/11538059_91}. +} +\seealso{ +https://mlr-org.com/pipeops.html + +Other PipeOps: +\code{\link{PipeOp}}, +\code{\link{PipeOpEnsemble}}, +\code{\link{PipeOpImpute}}, +\code{\link{PipeOpTargetTrafo}}, +\code{\link{PipeOpTaskPreproc}}, +\code{\link{PipeOpTaskPreprocSimple}}, +\code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_boxcox}}, +\code{\link{mlr_pipeops_branch}}, +\code{\link{mlr_pipeops_chunk}}, +\code{\link{mlr_pipeops_classbalancing}}, +\code{\link{mlr_pipeops_classifavg}}, +\code{\link{mlr_pipeops_classweights}}, +\code{\link{mlr_pipeops_colapply}}, +\code{\link{mlr_pipeops_collapsefactors}}, +\code{\link{mlr_pipeops_colroles}}, +\code{\link{mlr_pipeops_copy}}, +\code{\link{mlr_pipeops_datefeatures}}, +\code{\link{mlr_pipeops_encode}}, +\code{\link{mlr_pipeops_encodeimpact}}, +\code{\link{mlr_pipeops_encodelmer}}, +\code{\link{mlr_pipeops_featureunion}}, +\code{\link{mlr_pipeops_filter}}, +\code{\link{mlr_pipeops_fixfactors}}, +\code{\link{mlr_pipeops_histbin}}, +\code{\link{mlr_pipeops_ica}}, +\code{\link{mlr_pipeops_imputeconstant}}, +\code{\link{mlr_pipeops_imputehist}}, +\code{\link{mlr_pipeops_imputelearner}}, +\code{\link{mlr_pipeops_imputemean}}, +\code{\link{mlr_pipeops_imputemedian}}, +\code{\link{mlr_pipeops_imputemode}}, +\code{\link{mlr_pipeops_imputeoor}}, +\code{\link{mlr_pipeops_imputesample}}, +\code{\link{mlr_pipeops_kernelpca}}, +\code{\link{mlr_pipeops_learner}}, +\code{\link{mlr_pipeops_missind}}, +\code{\link{mlr_pipeops_modelmatrix}}, +\code{\link{mlr_pipeops_multiplicityexply}}, +\code{\link{mlr_pipeops_multiplicityimply}}, +\code{\link{mlr_pipeops_mutate}}, +\code{\link{mlr_pipeops_nmf}}, +\code{\link{mlr_pipeops_nop}}, +\code{\link{mlr_pipeops_ovrsplit}}, +\code{\link{mlr_pipeops_ovrunite}}, +\code{\link{mlr_pipeops_pca}}, +\code{\link{mlr_pipeops_proxy}}, +\code{\link{mlr_pipeops_quantilebin}}, +\code{\link{mlr_pipeops_randomprojection}}, +\code{\link{mlr_pipeops_randomresponse}}, +\code{\link{mlr_pipeops_regravg}}, +\code{\link{mlr_pipeops_removeconstants}}, +\code{\link{mlr_pipeops_renamecolumns}}, +\code{\link{mlr_pipeops_replicate}}, +\code{\link{mlr_pipeops_rowapply}}, +\code{\link{mlr_pipeops_scale}}, +\code{\link{mlr_pipeops_scalemaxabs}}, +\code{\link{mlr_pipeops_scalerange}}, +\code{\link{mlr_pipeops_select}}, +\code{\link{mlr_pipeops_smote}}, +\code{\link{mlr_pipeops_spatialsign}}, +\code{\link{mlr_pipeops_subsample}}, +\code{\link{mlr_pipeops_targetinvert}}, +\code{\link{mlr_pipeops_targetmutate}}, +\code{\link{mlr_pipeops_targettrafoscalerange}}, +\code{\link{mlr_pipeops_textvectorizer}}, +\code{\link{mlr_pipeops_threshold}}, +\code{\link{mlr_pipeops_tunethreshold}}, +\code{\link{mlr_pipeops_unbranch}}, +\code{\link{mlr_pipeops_updatetarget}}, +\code{\link{mlr_pipeops_vtreat}}, +\code{\link{mlr_pipeops_yeojohnson}} +} +\concept{PipeOps} diff --git a/man/mlr_pipeops_boxcox.Rd b/man/mlr_pipeops_boxcox.Rd index 33b0bda44..c52a389d0 100644 --- a/man/mlr_pipeops_boxcox.Rd +++ b/man/mlr_pipeops_boxcox.Rd @@ -90,6 +90,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, \code{\link{mlr_pipeops_classbalancing}}, diff --git a/man/mlr_pipeops_branch.Rd b/man/mlr_pipeops_branch.Rd index d405b46b2..9efd50e39 100644 --- a/man/mlr_pipeops_branch.Rd +++ b/man/mlr_pipeops_branch.Rd @@ -108,6 +108,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_chunk}}, \code{\link{mlr_pipeops_classbalancing}}, diff --git a/man/mlr_pipeops_chunk.Rd b/man/mlr_pipeops_chunk.Rd index 8c0702df4..3b1cead00 100644 --- a/man/mlr_pipeops_chunk.Rd +++ b/man/mlr_pipeops_chunk.Rd @@ -87,6 +87,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_classbalancing}}, diff --git a/man/mlr_pipeops_classbalancing.Rd b/man/mlr_pipeops_classbalancing.Rd index 6e2fe5372..7f2b78431 100644 --- a/man/mlr_pipeops_classbalancing.Rd +++ b/man/mlr_pipeops_classbalancing.Rd @@ -128,6 +128,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_classifavg.Rd b/man/mlr_pipeops_classifavg.Rd index 754d9a8ef..43a0f4b1a 100644 --- a/man/mlr_pipeops_classifavg.Rd +++ b/man/mlr_pipeops_classifavg.Rd @@ -104,6 +104,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_classweights.Rd b/man/mlr_pipeops_classweights.Rd index aaf62ab5b..5b38abe05 100644 --- a/man/mlr_pipeops_classweights.Rd +++ b/man/mlr_pipeops_classweights.Rd @@ -107,6 +107,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_colapply.Rd b/man/mlr_pipeops_colapply.Rd index 355d71bf6..3237fb817 100644 --- a/man/mlr_pipeops_colapply.Rd +++ b/man/mlr_pipeops_colapply.Rd @@ -117,6 +117,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_collapsefactors.Rd b/man/mlr_pipeops_collapsefactors.Rd index 0c3d491c1..4b54e5cec 100644 --- a/man/mlr_pipeops_collapsefactors.Rd +++ b/man/mlr_pipeops_collapsefactors.Rd @@ -84,6 +84,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_colroles.Rd b/man/mlr_pipeops_colroles.Rd index c7954837f..fd92f10d8 100644 --- a/man/mlr_pipeops_colroles.Rd +++ b/man/mlr_pipeops_colroles.Rd @@ -76,6 +76,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_copy.Rd b/man/mlr_pipeops_copy.Rd index 856d978c9..e00027bf7 100644 --- a/man/mlr_pipeops_copy.Rd +++ b/man/mlr_pipeops_copy.Rd @@ -106,6 +106,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_datefeatures.Rd b/man/mlr_pipeops_datefeatures.Rd index c102b0df7..f0e8983f0 100644 --- a/man/mlr_pipeops_datefeatures.Rd +++ b/man/mlr_pipeops_datefeatures.Rd @@ -123,6 +123,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_encode.Rd b/man/mlr_pipeops_encode.Rd index ed187bdb9..9ae76623f 100644 --- a/man/mlr_pipeops_encode.Rd +++ b/man/mlr_pipeops_encode.Rd @@ -119,6 +119,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_encodeimpact.Rd b/man/mlr_pipeops_encodeimpact.Rd index 9def43f29..34794b534 100644 --- a/man/mlr_pipeops_encodeimpact.Rd +++ b/man/mlr_pipeops_encodeimpact.Rd @@ -101,6 +101,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_encodelmer.Rd b/man/mlr_pipeops_encodelmer.Rd index 8e5b3214c..09c5ecfd2 100644 --- a/man/mlr_pipeops_encodelmer.Rd +++ b/man/mlr_pipeops_encodelmer.Rd @@ -116,6 +116,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_featureunion.Rd b/man/mlr_pipeops_featureunion.Rd index a1076a2fa..51221b36f 100644 --- a/man/mlr_pipeops_featureunion.Rd +++ b/man/mlr_pipeops_featureunion.Rd @@ -121,6 +121,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_filter.Rd b/man/mlr_pipeops_filter.Rd index 022fa1309..c12bf557d 100644 --- a/man/mlr_pipeops_filter.Rd +++ b/man/mlr_pipeops_filter.Rd @@ -152,6 +152,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_fixfactors.Rd b/man/mlr_pipeops_fixfactors.Rd index 90ced18a4..d8883be9d 100644 --- a/man/mlr_pipeops_fixfactors.Rd +++ b/man/mlr_pipeops_fixfactors.Rd @@ -76,6 +76,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_histbin.Rd b/man/mlr_pipeops_histbin.Rd index f55539d0a..424cc0b27 100644 --- a/man/mlr_pipeops_histbin.Rd +++ b/man/mlr_pipeops_histbin.Rd @@ -88,6 +88,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_ica.Rd b/man/mlr_pipeops_ica.Rd index 82784a299..386243308 100644 --- a/man/mlr_pipeops_ica.Rd +++ b/man/mlr_pipeops_ica.Rd @@ -116,6 +116,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_imputeconstant.Rd b/man/mlr_pipeops_imputeconstant.Rd index 96c909b27..f8a83821a 100644 --- a/man/mlr_pipeops_imputeconstant.Rd +++ b/man/mlr_pipeops_imputeconstant.Rd @@ -90,6 +90,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_imputehist.Rd b/man/mlr_pipeops_imputehist.Rd index 9ab0dc64e..e9db73184 100644 --- a/man/mlr_pipeops_imputehist.Rd +++ b/man/mlr_pipeops_imputehist.Rd @@ -82,6 +82,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_imputelearner.Rd b/man/mlr_pipeops_imputelearner.Rd index 3c23fe51b..2ea98c891 100644 --- a/man/mlr_pipeops_imputelearner.Rd +++ b/man/mlr_pipeops_imputelearner.Rd @@ -127,6 +127,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_imputemean.Rd b/man/mlr_pipeops_imputemean.Rd index faed6ab89..8bb852bd1 100644 --- a/man/mlr_pipeops_imputemean.Rd +++ b/man/mlr_pipeops_imputemean.Rd @@ -75,6 +75,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_imputemedian.Rd b/man/mlr_pipeops_imputemedian.Rd index 45525f827..96000e310 100644 --- a/man/mlr_pipeops_imputemedian.Rd +++ b/man/mlr_pipeops_imputemedian.Rd @@ -75,6 +75,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_imputemode.Rd b/man/mlr_pipeops_imputemode.Rd index 3d171d8df..4f6301738 100644 --- a/man/mlr_pipeops_imputemode.Rd +++ b/man/mlr_pipeops_imputemode.Rd @@ -82,6 +82,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_imputeoor.Rd b/man/mlr_pipeops_imputeoor.Rd index ca96bdb4f..20bbc212f 100644 --- a/man/mlr_pipeops_imputeoor.Rd +++ b/man/mlr_pipeops_imputeoor.Rd @@ -123,6 +123,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_imputesample.Rd b/man/mlr_pipeops_imputesample.Rd index 8ad1e2204..f170906b4 100644 --- a/man/mlr_pipeops_imputesample.Rd +++ b/man/mlr_pipeops_imputesample.Rd @@ -77,6 +77,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_kernelpca.Rd b/man/mlr_pipeops_kernelpca.Rd index 741644950..02dd7b833 100644 --- a/man/mlr_pipeops_kernelpca.Rd +++ b/man/mlr_pipeops_kernelpca.Rd @@ -91,6 +91,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_learner.Rd b/man/mlr_pipeops_learner.Rd index c1e5cc707..e9ff48dac 100644 --- a/man/mlr_pipeops_learner.Rd +++ b/man/mlr_pipeops_learner.Rd @@ -122,6 +122,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_missind.Rd b/man/mlr_pipeops_missind.Rd index acbc0fe32..6767e406c 100644 --- a/man/mlr_pipeops_missind.Rd +++ b/man/mlr_pipeops_missind.Rd @@ -105,6 +105,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_modelmatrix.Rd b/man/mlr_pipeops_modelmatrix.Rd index 5ed4fd542..c6e8f210d 100644 --- a/man/mlr_pipeops_modelmatrix.Rd +++ b/man/mlr_pipeops_modelmatrix.Rd @@ -81,6 +81,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_multiplicityexply.Rd b/man/mlr_pipeops_multiplicityexply.Rd index 005bd6bf8..12b97ef31 100644 --- a/man/mlr_pipeops_multiplicityexply.Rd +++ b/man/mlr_pipeops_multiplicityexply.Rd @@ -87,6 +87,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_multiplicityimply.Rd b/man/mlr_pipeops_multiplicityimply.Rd index eb9f67c77..f6ad1dece 100644 --- a/man/mlr_pipeops_multiplicityimply.Rd +++ b/man/mlr_pipeops_multiplicityimply.Rd @@ -93,6 +93,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_mutate.Rd b/man/mlr_pipeops_mutate.Rd index bb46ddbbe..9a44c8f71 100644 --- a/man/mlr_pipeops_mutate.Rd +++ b/man/mlr_pipeops_mutate.Rd @@ -98,6 +98,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_nmf.Rd b/man/mlr_pipeops_nmf.Rd index 3eff5f64b..4c6e01e68 100644 --- a/man/mlr_pipeops_nmf.Rd +++ b/man/mlr_pipeops_nmf.Rd @@ -134,6 +134,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_nop.Rd b/man/mlr_pipeops_nop.Rd index 8455fd8f9..e03b6b128 100644 --- a/man/mlr_pipeops_nop.Rd +++ b/man/mlr_pipeops_nop.Rd @@ -83,6 +83,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_ovrsplit.Rd b/man/mlr_pipeops_ovrsplit.Rd index 206a756b1..3ced7de26 100644 --- a/man/mlr_pipeops_ovrsplit.Rd +++ b/man/mlr_pipeops_ovrsplit.Rd @@ -100,6 +100,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_ovrunite.Rd b/man/mlr_pipeops_ovrunite.Rd index b5c87a481..a44f8e084 100644 --- a/man/mlr_pipeops_ovrunite.Rd +++ b/man/mlr_pipeops_ovrunite.Rd @@ -95,6 +95,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_pca.Rd b/man/mlr_pipeops_pca.Rd index 924fd48f1..7b418a298 100644 --- a/man/mlr_pipeops_pca.Rd +++ b/man/mlr_pipeops_pca.Rd @@ -92,6 +92,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_proxy.Rd b/man/mlr_pipeops_proxy.Rd index fb54534d2..2a4f5a2a0 100644 --- a/man/mlr_pipeops_proxy.Rd +++ b/man/mlr_pipeops_proxy.Rd @@ -106,6 +106,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_quantilebin.Rd b/man/mlr_pipeops_quantilebin.Rd index 5c6b49665..cdd3a2f04 100644 --- a/man/mlr_pipeops_quantilebin.Rd +++ b/man/mlr_pipeops_quantilebin.Rd @@ -80,6 +80,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_randomprojection.Rd b/man/mlr_pipeops_randomprojection.Rd index 84d21d5e7..9fdb7b48c 100644 --- a/man/mlr_pipeops_randomprojection.Rd +++ b/man/mlr_pipeops_randomprojection.Rd @@ -92,6 +92,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_randomresponse.Rd b/man/mlr_pipeops_randomresponse.Rd index 7ed67800f..1043926f5 100644 --- a/man/mlr_pipeops_randomresponse.Rd +++ b/man/mlr_pipeops_randomresponse.Rd @@ -109,6 +109,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_regravg.Rd b/man/mlr_pipeops_regravg.Rd index bf175ae65..dd345cfb6 100644 --- a/man/mlr_pipeops_regravg.Rd +++ b/man/mlr_pipeops_regravg.Rd @@ -95,6 +95,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_removeconstants.Rd b/man/mlr_pipeops_removeconstants.Rd index 636afd222..0865b6ba2 100644 --- a/man/mlr_pipeops_removeconstants.Rd +++ b/man/mlr_pipeops_removeconstants.Rd @@ -85,6 +85,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_renamecolumns.Rd b/man/mlr_pipeops_renamecolumns.Rd index 7fb8d21f0..dd927fc4a 100644 --- a/man/mlr_pipeops_renamecolumns.Rd +++ b/man/mlr_pipeops_renamecolumns.Rd @@ -84,6 +84,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_replicate.Rd b/man/mlr_pipeops_replicate.Rd index 7fc69fe44..520633538 100644 --- a/man/mlr_pipeops_replicate.Rd +++ b/man/mlr_pipeops_replicate.Rd @@ -77,6 +77,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_rowapply.Rd b/man/mlr_pipeops_rowapply.Rd index d688df341..1332ad796 100644 --- a/man/mlr_pipeops_rowapply.Rd +++ b/man/mlr_pipeops_rowapply.Rd @@ -83,6 +83,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_scale.Rd b/man/mlr_pipeops_scale.Rd index 7045c123b..cff5f8b79 100644 --- a/man/mlr_pipeops_scale.Rd +++ b/man/mlr_pipeops_scale.Rd @@ -99,6 +99,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_scalemaxabs.Rd b/man/mlr_pipeops_scalemaxabs.Rd index 7abfd27b5..b5b2a2981 100644 --- a/man/mlr_pipeops_scalemaxabs.Rd +++ b/man/mlr_pipeops_scalemaxabs.Rd @@ -74,6 +74,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_scalerange.Rd b/man/mlr_pipeops_scalerange.Rd index 572c47115..227107f7b 100644 --- a/man/mlr_pipeops_scalerange.Rd +++ b/man/mlr_pipeops_scalerange.Rd @@ -79,6 +79,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_select.Rd b/man/mlr_pipeops_select.Rd index 909f5b1c2..30f6c1f64 100644 --- a/man/mlr_pipeops_select.Rd +++ b/man/mlr_pipeops_select.Rd @@ -95,6 +95,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_smote.Rd b/man/mlr_pipeops_smote.Rd index 988977f9b..c8b71b23a 100644 --- a/man/mlr_pipeops_smote.Rd +++ b/man/mlr_pipeops_smote.Rd @@ -98,6 +98,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_spatialsign.Rd b/man/mlr_pipeops_spatialsign.Rd index e56a7a6b8..e330ab4b1 100644 --- a/man/mlr_pipeops_spatialsign.Rd +++ b/man/mlr_pipeops_spatialsign.Rd @@ -74,6 +74,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_subsample.Rd b/man/mlr_pipeops_subsample.Rd index 51692dc78..9706a3b9b 100644 --- a/man/mlr_pipeops_subsample.Rd +++ b/man/mlr_pipeops_subsample.Rd @@ -89,6 +89,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_targetinvert.Rd b/man/mlr_pipeops_targetinvert.Rd index dceb884ec..53c4ad72b 100644 --- a/man/mlr_pipeops_targetinvert.Rd +++ b/man/mlr_pipeops_targetinvert.Rd @@ -74,6 +74,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_targetmutate.Rd b/man/mlr_pipeops_targetmutate.Rd index 6216c15c0..a6cf7d887 100644 --- a/man/mlr_pipeops_targetmutate.Rd +++ b/man/mlr_pipeops_targetmutate.Rd @@ -122,6 +122,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_targettrafoscalerange.Rd b/man/mlr_pipeops_targettrafoscalerange.Rd index 954994285..023d2ab88 100644 --- a/man/mlr_pipeops_targettrafoscalerange.Rd +++ b/man/mlr_pipeops_targettrafoscalerange.Rd @@ -88,6 +88,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_textvectorizer.Rd b/man/mlr_pipeops_textvectorizer.Rd index 20b06c84c..38adc20ee 100644 --- a/man/mlr_pipeops_textvectorizer.Rd +++ b/man/mlr_pipeops_textvectorizer.Rd @@ -188,6 +188,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_threshold.Rd b/man/mlr_pipeops_threshold.Rd index 9e018d4d4..ee593e6b8 100644 --- a/man/mlr_pipeops_threshold.Rd +++ b/man/mlr_pipeops_threshold.Rd @@ -87,6 +87,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_tunethreshold.Rd b/man/mlr_pipeops_tunethreshold.Rd index c81f716e4..d802a2043 100644 --- a/man/mlr_pipeops_tunethreshold.Rd +++ b/man/mlr_pipeops_tunethreshold.Rd @@ -117,6 +117,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_unbranch.Rd b/man/mlr_pipeops_unbranch.Rd index be54d851e..2fc7b2d5e 100644 --- a/man/mlr_pipeops_unbranch.Rd +++ b/man/mlr_pipeops_unbranch.Rd @@ -86,6 +86,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_updatetarget.Rd b/man/mlr_pipeops_updatetarget.Rd index d4ee02f68..6a73e727e 100644 --- a/man/mlr_pipeops_updatetarget.Rd +++ b/man/mlr_pipeops_updatetarget.Rd @@ -101,6 +101,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_vtreat.Rd b/man/mlr_pipeops_vtreat.Rd index 9501f2aa7..600504acd 100644 --- a/man/mlr_pipeops_vtreat.Rd +++ b/man/mlr_pipeops_vtreat.Rd @@ -154,6 +154,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/man/mlr_pipeops_yeojohnson.Rd b/man/mlr_pipeops_yeojohnson.Rd index ce503cf65..10d1cdd13 100644 --- a/man/mlr_pipeops_yeojohnson.Rd +++ b/man/mlr_pipeops_yeojohnson.Rd @@ -91,6 +91,8 @@ Other PipeOps: \code{\link{PipeOpTaskPreproc}}, \code{\link{PipeOpTaskPreprocSimple}}, \code{\link{mlr_pipeops}}, +\code{\link{mlr_pipeops_adas}}, +\code{\link{mlr_pipeops_blsmote}}, \code{\link{mlr_pipeops_boxcox}}, \code{\link{mlr_pipeops_branch}}, \code{\link{mlr_pipeops_chunk}}, diff --git a/tests/testthat/test_pipeop_adas.R b/tests/testthat/test_pipeop_adas.R new file mode 100644 index 000000000..9c8786565 --- /dev/null +++ b/tests/testthat/test_pipeop_adas.R @@ -0,0 +1,81 @@ +context("PipeOpADAS") + +test_that("PipeOpADAS - basic properties", { + skip_if_not_installed("smotefamily") + + task = mlr_tasks$get("spam") + + expect_datapreproc_pipeop_class(PipeOpADAS, task = task, predict_like_train = FALSE, deterministic_train = FALSE) +}) + +test_that("PipeOpADAS - train works as intended", { + skip_if_not_installed("smotefamily") + + op = PipeOpADAS$new() + + df = data.frame( + target = factor(sample(c("c1", "c2"), size = 200, replace = TRUE, prob = c(0.1, 0.9))), + x1 = rnorm(200), + x2 = rnorm(200) + ) + task = TaskClassif$new(id = "test", backend = df, target = "target") + + # Compare to smotefamily::ADAS with default params + set.seed(1234L) + train_out = op$train(list(task))[[1]]$data() + set.seed(1234L) + df_out = invoke(smotefamily::ADAS, X = task$data(cols = task$feature_names), target = task$truth(), + .opts = list(warnPartialMatchArgs = FALSE))$syn_data + # Rename class column to target and rbind for same row and col order + # Rename by name (not position) to notice should the order of columns outputed by smotefamily::ADAS be changed in the future + setnames(df_out, "class", "target") + adas_out = setDT(rbind(df, df_out)) + + expect_equal(train_out, adas_out) + + # Compare to smotefamily::ADAS with changed params + op$param_set$set_values(K = 10) + + set.seed(1234L) + train_out = op$train(list(task))[[1]]$data() + set.seed(1234L) + df_out = invoke(smotefamily::ADAS, X = task$data(cols = task$feature_names), target = task$truth(), K = 10, + .opts = list(warnPartialMatchArgs = FALSE))$syn_data + setnames(df_out, "class", "target") + adas_out = setDT(rbind(df, df_out)) + + expect_equal(train_out, adas_out) + + # Empty task is returned unchanged + task$select(character(0)) + expect_equal( + op$train(list(task))[[1L]], + task + ) + +}) + +test_that("PipeOpADAS - handling of feature named 'class'", { + skip_if_not_installed("smotefamily") + + op = PipeOpADAS$new() + + df = data.frame( + target = factor(sample(c("c1", "c2"), size = 200, replace = TRUE, prob = c(0.1, 0.9))), + class = rnorm(200), + x = rnorm(200) + ) + task = TaskClassif$new(id = "test", backend = df, target = "target") + + set.seed(1234L) + train_out = op$train(list(task))[[1]]$data() + set.seed(1234L) + df_out = invoke(smotefamily::ADAS, X = task$data(cols = task$feature_names), target = task$truth(), + .opts = list(warnPartialMatchArgs = FALSE))$syn_data + # Renaming by position + setnames(df_out, 3, "target") + adas_out = setDT(rbind(df, df_out)) + + expect_equal(train_out, adas_out) + +}) diff --git a/tests/testthat/test_pipeop_blsmote.R b/tests/testthat/test_pipeop_blsmote.R new file mode 100644 index 000000000..2c75b952d --- /dev/null +++ b/tests/testthat/test_pipeop_blsmote.R @@ -0,0 +1,96 @@ +context("PipeOpBLSmote") + +test_that("PipeOpBLSmote - basic properties", { + skip_if_not_installed("smotefamily") + + task = mlr_tasks$get("spam") + + expect_datapreproc_pipeop_class(PipeOpBLSmote, task = task, predict_like_train = FALSE, deterministic_train = FALSE) +}) + +test_that("PipeOpBLSmote - train works as intended", { + skip_if_not_installed("smotefamily") + + op = PipeOpBLSmote$new() + + df = smotefamily::sample_generator(500, 0.8) + df$result = factor(df$result) + df = df[, c(3L, 1L, 2L)] # we do this to avoid reordering later + task = TaskClassif$new(id = "test", backend = df, target = "result") + + # Compare to smotefamily::BLSMOTE with default params + set.seed(1234L) + train_out = op$train(list(task))[[1L]]$data() + set.seed(1234L) + df_out = invoke(smotefamily::BLSMOTE, X = task$data(cols = task$feature_names), target = task$truth(), + .opts = list(warnPartialMatchArgs = FALSE))$syn_data + # Rename target column and rbind for same row and col order + # Rename by name (not position) to notice should the order of columns outputted by smotefamily::BLSMOTE be changed in the future + setnames(df_out, "class", "result") + blsmote_out = setDT(rbind(df, df_out)) + + expect_equal(train_out, blsmote_out) + + # Compare to smotefamily::BLSMOTE with changed params + # method = "type1" + pv = list(K = 4L, C = 8L, dupSize = 0, method = "type1") + op$param_set$set_values(.values = pv) + + set.seed(1234L) + train_out = op$train(list(task))[[1L]]$data() + set.seed(1234L) + df_out = invoke(smotefamily::BLSMOTE, X = task$data(cols = task$feature_names), target = task$truth(), + .args = pv, .opts = list(warnPartialMatchArgs = FALSE))$syn_data + setnames(df_out, "class", "result") + blsmote_out = setDT(rbind(df, df_out)) + + expect_equal(train_out, blsmote_out) + + # method = "type1" + pv = list(K = 4L, C = 8L, dupSize = 0, method = "type2") + op$param_set$set_values(.values = pv) + + set.seed(1234L) + train_out = op$train(list(task))[[1L]]$data() + set.seed(1234L) + df_out = invoke(smotefamily::BLSMOTE, X = task$data(cols = task$feature_names), target = task$truth(), + .args = pv, .opts = list(warnPartialMatchArgs = FALSE))$syn_data + setnames(df_out, "class", "result") + blsmote_out = setDT(rbind(df, df_out)) + + expect_equal(train_out, blsmote_out) + + # Empty task is returned unchanged + task$select(character(0L)) + expect_equal( + op$train(list(task))[[1L]], + task + ) + +}) + + +test_that("PipeOpBLSmote - handling of feature named 'class'", { + skip_if_not_installed("smotefamily") + + op = PipeOpBLSmote$new() + + df = smotefamily::sample_generator(500, 0.8) + df$result = factor(df$result) + # Rename a column into "class" + setnames(df, "X2", "class") + df = df[, c(3L, 1L, 2L)] + task = TaskClassif$new(id = "test", backend = df, target = "result") + + set.seed(1234L) + train_out = op$train(list(task))[[1]]$data() + set.seed(1234L) + df_out = invoke(smotefamily::BLSMOTE, X = task$data(cols = task$feature_names), target = task$truth(), + .opts = list(warnPartialMatchArgs = FALSE))$syn_data + # Renaming by position + setnames(df_out, 3, "result") + blsmote_out = setDT(rbind(df, df_out)) + + expect_equal(train_out, blsmote_out) + +})