| Title: | Beyond Pareto: Bi-Objective and Multi-Objective Regression Trees’ |
|---|---|
| Description: | Implements the Bi-objective Regression Tree (BORT) for efficiently learning vector-valued functions. Unlike traditional methods that rely on constructing multiple models or static scalarisation, BORT integrates the exploration of the Pareto front directly into a single tree's growth process. It provides high-efficiency, single-model approaches that can Pareto-dominate entire Pareto-consistent families of trees, supported by a C backend for fast computation. For more details see Paz (2026) <doi:10.1007/978-3-032-28393-1_2> and Paz (2025) <doi:10.1007/978-3-031-78401-9_2>. |
| Authors: | Erick G.G. de Paz [aut, cre] (ORCID: <https://orcid.org/0000-0001-7878-8238>), Arturo Hernández-Aguirre [aut] (ORCID: <https://orcid.org/0000-0002-3744-9827>), Iván Cruz-Aceves [aut] (ORCID: <https://orcid.org/0000-0002-5197-2059>) |
| Maintainer: | Erick G.G. de Paz <[email protected]> |
| License: | GPL-2 |
| Version: | 0.1.0 |
| Built: | 2026-07-07 17:16:05 UTC |
| Source: | https://github.com/cran/BORT |
Constructs a multiobjective regression tree or a Pareto-consistent family of trees based on a top-down generalisation. The partitioning process selects the hyper-rectangle with the maximum Lebesgue measure. The split thresholds are chosen to minimise the sum of the Weighted Mean Squared Error across dimensions.
bort(X, Y, k = 1, type = c("PARETO", "BORT"), minSample = NULL)bort(X, Y, k = 1, type = c("PARETO", "BORT"), minSample = NULL)
X |
A numeric matrix of size |
Y |
A numeric matrix of size |
k |
An integer scalar specifying the number of trees to generate. Default is 1. |
type |
A character string indicating the modelling strategy. |
minSample |
An integer indicating the minimum number of samples a node must contain to be eligible for further splitting. If |
This implementation maps continuous multiobjective functions . It partitions the Cartesian space bounded by , where .
For type = "PARETO", scalarisation of errors uses a constant weight vector across the tree depth. For type = "BORT", a novel weighting approach selects random weights at every partition, achieving efficient single-model dominance over entirely consistent families. Both approaches are explained in de Paz (2025).
A list of length k containing R functions. Each function accepts a numeric vector x of length and returns a predicted numeric vector y of length .
de Paz, E.G.G., Hernández-Aguirre, A., Cruz-Aceves, I. (2026). Beyond Pareto: A High-Efficiency Approach to Bi-objective Regression Trees. In Pattern Recognition. Springer Nature Switzerland. doi:10.1007/978-3-032-28393-1_2
de Paz, E.G.G., Vaquera Huerta, H., Albores Velasco, F.J., Bauer Mengelberg, J.R., Romero Padilla, J.M. (2025). A Splitting Criterion for CART Models Based on Bayesian Optimisation. In Statistics, Society and Environment. Springer Nature Switzerland. doi:10.1007/978-3-031-78401-9_2
# Ensure the C shared library is loaded before running # dyn.load(paste0("multiobjective_tree", .Platform$dynlib.ext)) # Prepare the iris dataset data(iris) X <- as.matrix(iris[, 1:2]) # Sepal.Length, Sepal.Width Y <- as.matrix(iris[, 3:4]) # Petal.Length, Petal.Width # Generate a single BORT model bort_models <- bort(X, Y, k = 1, type = "BORT") # Predict for the first instance test_point <- X[1, ] prediction <- bort_models[[1]](test_point) print(prediction) # Generate a Pareto-consistent family of 5 trees pareto_models <- bort(X, Y, k = 5, type = "PARETO") pred_pareto <- pareto_models[[1]](test_point) print(pred_pareto)# Ensure the C shared library is loaded before running # dyn.load(paste0("multiobjective_tree", .Platform$dynlib.ext)) # Prepare the iris dataset data(iris) X <- as.matrix(iris[, 1:2]) # Sepal.Length, Sepal.Width Y <- as.matrix(iris[, 3:4]) # Petal.Length, Petal.Width # Generate a single BORT model bort_models <- bort(X, Y, k = 1, type = "BORT") # Predict for the first instance test_point <- X[1, ] prediction <- bort_models[[1]](test_point) print(prediction) # Generate a Pareto-consistent family of 5 trees pareto_models <- bort(X, Y, k = 5, type = "PARETO") pred_pareto <- pareto_models[[1]](test_point) print(pred_pareto)