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)
+
+})