Paper · 2020-07-08 · cs.LG, stat.ML
Auto-Sklearn 2.0: Hands-free AutoML via Meta-Learning
Auto-Sklearn 2.0 chains three ideas: a precomputed greedy portfolio warm-starts Bayesian optimization, successive halving allocates budgets, and a random-forest selector picks one of eight policies per dataset from two meta-features. Author-reported on 39 datasets: normalized balanced error 3.58 at 10 min and 2.47 at 60 min, vs 16.21 and 7.17 for Auto-sklearn 1.0.
Automated machine learningAlgorithm selectionSuccessive halvingMeta-learningautomlmeta-learningportfoliosuccessive-halvingalgorithm-selection
arXivPDFCodeMarkdown22 min read
AI-compiled by claude-haiku-5-5 on 2026-10-31, not yet reviewed by a human. Every claim cites its source; check it when a detail matters.
In plain words
An AutoML tool searches for a good machine-learning pipeline on your data within a time limit. Each candidate is a model with its settings, and each one costs time to train and score. The tool has to choose how to run that search, and the best choice depends on the dataset and on how much time there is.
This paper's system automates most of those choices. It starts from a fixed list of pipelines that worked well on many other datasets, so it does not have to measure the new data first. It runs the search in rounds: weak candidates are dropped early and strong ones get more training time. A small learned model then looks at two basic facts about the dataset, its size and its number of columns, and picks one of the search settings to use. On the authors' benchmark, the result beats the previous version of the system under the same time limit.
TL;DR
Auto-Sklearn 2.0 combines three changes to Auto-sklearn: a precomputed portfolio of starting pipelines, successive halving to stop weak candidates early, and a per-dataset policy selector trained on meta-data from many datasets. The selector uses only two meta-features and falls back to a simple policy when no meta-training dataset is at least as large on both. Results are author-reported on 39 AutoML benchmark datasets at 10 and 60 minutes, with a comparison to other AutoML systems. The experiment code is public but has no license file.
Problem
Auto-sklearn-style systems search for a pipeline under a time budget T: the chosen pipeline must come from evaluations whose times sum to less than T §2.1 eq. 5. Two design decisions matter a lot and depend on the dataset and the budget: how to estimate generalization error (holdout or k-fold cross-validation) and how to allocate budget across pipelines (full budget per pipeline, or successive halving) §1 §3.2. The authors show that no single choice wins on every dataset or horizon §4 fig. 4. The earlier system warm-started its search with a k-nearest-dataset method that needs meta-features and can run pipelines that time out on large datasets §3.1 §3.5.1. The authors aim to automate these choices and to make the search start faster §1.
Method
The system has two parts. Part I (PoSH Auto-sklearn) changes how the search starts and how budget is spent. Part II adds a learned selector that chooses the search policy for each new dataset §1.
Notation and objective
The generalization error of a pipeline is the expected loss on new data, which is estimated from a finite training set with holdout or K-fold cross-validation §2 eq. 1–4. An AutoML system is treated as a function from a dataset to a trained pipeline, and its quality is averaged over a set of meta-training datasets §2.2 eq. 6–7.
\mathrm{GE}(\mathcal{M}_\lambda) = \mathbb{E}_{(x,y)\sim P_d}\left[\mathcal{L}(\mathcal{M}_\lambda(x), y)\right] eq. 1
\widehat{\mathrm{GE}}(\mathcal{M}_\lambda, \mathcal{D}_d) = \frac{1}{n}\sum_{i=1}^{n}\mathcal{L}(\mathcal{M}_\lambda(x_i), y_i) eq. 2
\mathcal{M}_{\lambda^*} \in \arg\min_{\lambda\in\Lambda} \widehat{\mathrm{GE}}(\mathcal{M}_\lambda, \mathcal{D}_{\text{train}}) eq. 3
\widehat{\mathrm{GE}}_{\text{CV}}(\mathcal{M}_\lambda, \mathcal{D}_{\text{train}}) = \frac{1}{K}\sum_{k=1}^{K}\widehat{\mathrm{GE}}\left(\mathcal{M}_\lambda^{\mathcal{D}^{(\text{train},k)}_{\text{train}}}, \mathcal{D}^{(\text{val},k)}_{\text{train}}\right) eq. 4
The time-bounded goal is to find the best pipeline among those whose evaluation times sum to less than the horizon T:
\mathcal{M}_{\lambda^*} \in \arg\min_{\lambda\in\Lambda} \widehat{\mathrm{GE}}(\mathcal{M}_\lambda, \mathcal{D}_{\text{train}}) \quad \text{s.t.} \quad \sum_i t_{\lambda_i} < T eq. 5
The meta-level goal averages over datasets eq. 6–7:
\mathrm{GE}(\mathcal{A}) = \mathbb{E}_{\mathcal{D}_d\sim P(\mathcal{D})}\left[\widehat{\mathrm{GE}}(\mathcal{A}(\mathcal{D}_d), \mathcal{D}_d)\right] eq. 6
\widehat{\mathrm{GE}}(\mathcal{A}, \mathbf{D}_{\text{meta}}) = \frac{1}{|\mathbf{D}_{\text{meta}}|}\sum_{d=1}^{|\mathbf{D}_{\text{meta}}|}\widehat{\mathrm{GE}}(\mathcal{A}(\mathcal{D}_d), \mathcal{D}_d) eq. 7
Here an optimization policy π bundles the system's hyperparameters and components, so that A_π is a configured system §2.2. The selector is a function Ξ from a dataset to a policy, and it is scored with the same average eq. 10 §4.1.
Part I: portfolio and successive halving
Step 1, candidate pipelines (offline). For each meta-dataset, run Auto-sklearn without meta-learning and without ensembling. Keep one candidate per dataset. Evaluate every candidate on every meta-dataset to build a performance matrix of candidates by datasets §3.1.1 §3.4.2. For meta-data generation, the authors run the system three times per dataset, keep the best pipeline on the dataset's test split, and give each run ten times the horizon §3.4.2.
Step 2, greedy portfolio (offline) alg. 1. Start with an empty portfolio. Repeatedly add the candidate that most reduces the estimated error summed over all meta-datasets, and remove it from the candidate set, until the portfolio has the target size alg. 1 §3.1.1. Each dataset's error is the error of its best member, chosen by the model selection rule eq. 8, and the summed error is eq. 9. The portfolio size used in the experiments is 32 §3.5.1. Errors are first converted per dataset to a distance to the best observed value, scaled to [0, 1] and computed separately for each (model selection, budget allocation) pair. The average of this distance is called ADTM §3.1.1.
\mathcal{M}^{\mathcal{D}}_{\lambda^*} = S(\widehat{\mathrm{GE}}, \mathcal{P}, \mathcal{D}) \in \arg\min_{\mathcal{M}^{\mathcal{D}}\in\mathcal{P}}\widehat{\mathrm{GE}}(\mathcal{M}^{\mathcal{D}}, \mathcal{D}) eq. 8
\widehat{\mathrm{GE}}_S(\mathcal{P}, \mathbf{D}_{\text{meta}}) = \sum_{d=1}^{|\mathbf{D}_{\text{meta}}|}\widehat{\mathrm{GE}}\left(S(\widehat{\mathrm{GE}}, \mathcal{P}, \mathcal{D}_d), \mathcal{D}^{\text{val}}_d\right) eq. 9
The paper's Equation 9 uses holdout validation. The greedy construction in alg. 1 and the guarantees in §3.1.2 use the test split of the meta-datasets instead. The text notes that this is allowed as long as the new datasets are kept separate §3.1.1 §3.1.2.
Step 3, online warm start. For a new dataset, evaluate the portfolio members one after another first, ordered from the ones that do well on average to the more specialized ones §3.1. While portfolio members are left, they are suggested instead of asking the optimizer for a new point §3.2.1. Afterwards Bayesian optimization (SMAC, random-forest surrogate) continues from the evaluated pipelines §3.2.1.
Step 4, budget allocation with successive halving. Successive halving (SH) starts a fixed number of pipelines at the smallest budget. It then keeps the best 1/η of them, multiplies their budget by η, and repeats until one pipeline is left or the largest budget is spent. Full budget (FB) gives every pipeline the largest budget §3.2.1. In this paper SH replaces holdout with full budget §3.2.1.
# Successive halving over pipelines [§3.2.1]
# Input: pipelines, smallest budget b_min, largest budget b_max, factor eta
# Output: survivors, one or more pipelines
def successive_halving(pipelines, b_min, b_max, eta):
# Start every pipeline at the smallest budget [§3.2.1]
budget = b_min
survivors = pipelines
while True:
# Train and score each survivor at the current budget [§3.2.1]
errors = [train_and_score(p, budget) for p in survivors]
# Stop at one pipeline or at the largest budget [§3.2.1]
if len(survivors) == 1 or budget >= b_max:
return survivors
# Keep the best 1/eta of them; rounding is not stated [§3.2.1]
survivors = keep_best(survivors, errors, len(survivors) / eta)
# Multiply the budget for the survivors by eta [§3.2.1]
budget = budget * etaStep 5, BO with SH. Following the BO-with-SH method the paper cites as Falkner et al. §3.2.1, Bayesian optimization proposes pipelines that are evaluated at the lowest budget until a fixed number of them have been evaluated; then SH runs as above. The surrogate is fitted on the highest budget that has enough data points. The paper sets "enough" to n/2, where n is the number of hyperparameters. The original requirement was n+1 finished pipelines §3.2.1. The paper uses only SH and not Hyperband, because SH cuts the budget per pipeline more aggressively at very small time limits §3.2.1 (footnote).
Step 6, practical restrictions (PoSH). The search space is restricted to iterative algorithms, with no feature preprocessing. This leaves extremely randomized trees, random forests, histogram gradient boosting, a passive-aggressive linear model, SGD and an MLP §3.3 app. D.2. Because the algorithms are iterative, partial models are stored at 2, 4, 8, ... iterations, so that a prediction exists if a run times out or runs out of memory §3.3 app. B.1.
Part II: automated policy selection
Step 7, policies. Each policy combines a model selection strategy (3-fold, 5-fold, 10-fold cross-validation or holdout) with a budget allocation (SH or FB), and a portfolio built for that combination. There are eight policies §4 §4.1.
Step 8, offline training of the selector. For every meta-dataset, run every policy to obtain a realistic performance estimate §4.1. Compute meta-features §4.1.1. Train the selector on these estimates. To avoid optimistic estimates, an inner 5-fold cross-validation over the meta-datasets is used: each policy is built on four fifths of the meta-datasets and evaluated on the held-out fifth. The final system uses a portfolio built on all meta-datasets §4.1.
Step 9, selector. The main selector is pairwise. For each pair of policies (π_A, π_B), a random forest predicts whether π_A beats π_B from the meta-features §4.1.1. Each meta-observation is weighted by the loss difference between the two policies, after a per-dataset scaling so that errors are comparable across datasets §4.1.1. At prediction time, the pairwise models vote, and the resulting win counts are normalized to a distribution over the policies §4.1.1 policy_selectors.py. Ties are broken by a fixed order and then at random [code: experiment_scripts/autoauto/policy_selectors.py#L354-L371].
# Per-dataset policy selector, pairwise voting [§4.1.1] [tab. 4]
# Input: meta_features (2,) = (number of datapoints, number of features)
# Output: one score per policy, summing to 1
def select_policy(meta_features, pairwise_models):
# Backup first: no meta-dataset dominates this dataset [§4.1.1]
if not dominated_by_some_meta_dataset(meta_features):
return backup_scores # paper: holdout with SH; see Paper vs code
wins = zeros(num_policies)
# One random forest per pair of policies: does policy a beat b? [§4.1.1]
for a, b in policy_pairs:
# Soft voting adds the probability of a winning [tab. 4]
prob_a_wins = pairwise_models[a][b].predict_proba(meta_features)
wins[a] += prob_a_wins
wins[b] += 1 - prob_a_wins
# Normalize the win counts into a distribution [§4.1.1]
return wins / sum(wins)Step 10, backup. If no meta-dataset has at least as many datapoints and at least as many features as the new dataset, the selector is not trusted and the system falls back to holdout with SH, described as the most aggressive and cheapest policy §4.1.1.
Step 11, hyperparameters of the selector. Seven hyperparameters are tuned with Bayesian optimization, minimizing the cross-validation error on the meta-data §4.1.1 tab. 4. Five belong to the random forest, one sets the pairwise voting rule, and one sets how errors are scaled to weight datasets §4.1.1 tab. 4. A tree depth of 0 is described as a single leaf that equals the single-best policy §4.1.1. The same hyperparameters are shared across all pairwise models §4.1.1.
Step 12, runtime. For a new dataset, compute the two meta-features §4.1.1, pick a policy with the selector, run the AutoML system with that policy on the training split, and return the best pipeline. The test split is used only at the end §4.1.
Single-best baseline. Instead of a selector, one policy is chosen as the best on average over the meta-datasets (per-set algorithm selection). This is the automated version of picking SH and holdout by hand §4.1.1.
Implementation facts used by the experiments
The experiments use the Auto-sklearn package version 0.12.6 for the baseline and version 0.12.7 for Auto-sklearn 2.0, with SMAC3 extended for asynchronous parallel runs §5.1 §D.1 tab. 17. Each pipeline evaluation has a time limit of one tenth of the horizon and a memory limit of 4 GB §3.4. The experiments use ensembles of size 50 with replacement §3.4.3. Balanced error rate (one minus balanced accuracy) is the metric §3.4.
Hyperparameters
The table lists the values the paper states, with their source. Values that the paper does not state are marked "not stated" in the notes, and any code value is cited separately.
| Name | Value | Where | Notes |
|---|---|---|---|
| Time horizons | 10 min and 60 min | §3.4 | Two horizons, both reported |
| Per-pipeline time limit | 1/10 of the horizon | §3.4 | Code: 60 s per run for the 600 s horizon master_calls.py |
| Memory per pipeline | 4 GB | §3.4 | Code: 4000 MB master_calls.py |
| Repetitions | 10 seeds | §3.4.3 | Mean and std reported |
| Significance test | Wilcoxon signed-rank, α = 0.05 | §3.4.3 | |
| Ensemble | size 50, with replacement | §3.4.3 | Code ensemble size 50 run_autosklearn.py |
| Portfolio size |P| | 32 | §3.5.1 | Chosen to allow two full SH iterations §3.5.1 |
| SH factor η | 4 | app. D.3 | Used for all experiments |
| SH budgets, tree models | 32 to 512 iterations | app. D.3 | Code: 6.25% to 100% of the full budget build_portfolio.py |
| SH budgets, SGD and PA | 64 to 1024 iterations | app. D.3 | Same 16× range as the tree models |
| Meta-train datasets | 208 | §3.4.1 | From OpenML; list in tab. 19 |
| Test datasets | 39 | §3.4.1 | AutoML benchmark; list in tab. 20 |
| Holdout test split | 33.33% per OpenML task | §3.4.1 | Remaining 66.66% is training data |
| Meta-features | number of datapoints, number of features | §4.1.1 | Only these two |
| Selector hyperparameters | see table below | tab. 4 | Seven, tuned by BO |
| Selector random forest trees | not stated | §4.1.1 | Code: 500 run_autoauto.py |
| Selector BO iterations | not stated | §4.1.1 | Code: 200 run_autoauto.py |
| Benchmark setting | 1 hour, 8 cores, 10 folds, 5 repeats, 32 GB | §5.1 |
Selector search space tab. 4:
| Hyperparameter | Type | Values |
|---|---|---|
| Min. number of samples to create a further split | int | [3, 20] |
| Min. number of samples to create a new leaf | int | [2, 20] |
| Max. depth of a tree | int | [0, 20] |
| Max. number of features to be used for a split | int | [1, 2] |
| Bootstrapping in the random forest | cat | {yes, no} |
| Soft or hard voting when combining models | cat | {soft, hard} |
| Error value scaling to compute dataset weights | cat | see text |
The code's seven scaling options are all, all1, binary, binary1, y, rank and None policy_selectors.py. The paper describes raw errors, min-max scaling over a pair or over all policies, and rank differences §4.1.1. The code's "1" variants fix the upper bound at 1 policy_selectors.py.
Configuration space of Auto-sklearn 2.0, for iterative models and preprocessing only tab. 18. The final column says whether the search is on log10 scale.
| Name | Domain | Default | Log |
|---|---|---|---|
| Classifier | (Extra Trees, Gradient Boosting, MLP, Passive Aggressive, Random Forest, SGD) | Random Forest | - |
| Extra Trees: Bootstrap | (True, False) | False | - |
| Extra Trees: Criterion | (gini, entropy) | gini | - |
| Extra Trees: Max Features | [0.0, 1.0] | 0.5 | No |
| Extra Trees: Min Samples Leaf | [1, 20] | 1 | No |
| Extra Trees: Min Samples Split | [2, 20] | 2 | No |
| Gradient Boosting: Early Stopping | (off, valid, train) | off | - |
| Gradient Boosting: L2 Regularization | [1e-10, 1.0] | 0.0 | Yes |
| Gradient Boosting: Learning Rate | [0.01, 1.0] | 0.1 | Yes |
| Gradient Boosting: Max Leaf Nodes | [3, 2047] | 31 | Yes |
| Gradient Boosting: Min Samples Leaf | [1, 200] | 20 | Yes |
| Gradient Boosting: N Iter No Change | [1, 20] | 10 | No |
| Gradient Boosting: Validation Fraction | [0.01, 0.4] | 0.1 | No |
| MLP: Activation | (tanh, relu) | relu | - |
| MLP: Alpha | [1e-07, 0.1] | 0.0001 | Yes |
| MLP: Early Stopping | (valid, train) | valid | - |
| MLP: Hidden Layer Depth | [1, 3] | 1 | No |
| MLP: Learning Rate Init | [0.0001, 0.5] | 0.001 | Yes |
| MLP: Num Nodes Per Layer | [16, 264] | 32 | Yes |
| Passive Aggressive: C | [1e-05, 10.0] | 1.0 | Yes |
| Passive Aggressive: Average | (False, True) | False | - |
| Passive Aggressive: Loss | (hinge, squared_hinge) | hinge | - |
| Passive Aggressive: Tol | [1e-05, 0.1] | 0.0001 | Yes |
| Random Forest: Bootstrap | (True, False) | True | - |
| Random Forest: Criterion | (gini, entropy) | gini | - |
| Random Forest: Max Features | [0.0, 1.0] | 0.5 | No |
| Random Forest: Min Samples Leaf | [1, 20] | 1 | No |
| Random Forest: Min Samples Split | [2, 20] | 2 | No |
| Sgd: Alpha | [1e-07, 0.1] | 0.0001 | Yes |
| Sgd: Average | (False, True) | False | - |
| Sgd: Epsilon | [1e-05, 0.1] | 0.0001 | Yes |
| Sgd: Eta0 | [1e-07, 0.1] | 0.01 | Yes |
| Sgd: L1 Ratio | [1e-09, 1.0] | 0.15 | Yes |
| Sgd: Learning Rate | (optimal, invscaling, constant) | invscaling | - |
| Sgd: Loss | (hinge, log, modified Huber, squared hinge, perceptron) | log | - |
| Sgd: Penalty | (l1, l2, elasticnet) | l2 | - |
| Sgd: Power T | [1e-05, 1.0] | 0.5 | No |
| Sgd: Tol | [1e-05, 0.1] | 0.0001 | Yes |
| Balancing: Strategy | (none, weighting) | none | - |
| Categorical Encoding: Choice | (no encoding, one hot encoding) | one hot encoding | - |
| Category Coalescence: Choice | (minority coalescer, no coalescense) | minority coalescer | - |
| Category Coalescence: Minimum Fraction | [0.0001, 0.5] | 0.01 | Yes |
| Imputation of missing values | (mean, median, most frequent) | mean | - |
| Rescaling: Choice | (Min/Max, none, normalize, Power, Quantile, Robust, standardize) | standardize | - |
| Quantile Transformer: N Quantiles | [10, 2000] | 1000 | No |
| Quantile Transformer: Output Distribution | (uniform, normal) | uniform | - |
| Robust Scaler: Q Max | [0.7, 0.999] | 0.75 | No |
| Robust Scaler: Q Min | [0.001, 0.3] | 0.25 | No |
The paper states the Table 18 values as the search space of Auto-sklearn 2.0. The code's ranges are in the same file as the selector and are not reproduced here.
Results
Author-reported. Setup: 39 AutoML benchmark datasets (balanced error rate, normalized per dataset to a 0–1 regret scale, averaged over 10 repetitions), the two horizons, and a comparison with the earlier Auto-sklearn 1.0 and with the intermediate PoSH system §3.4 §3.5 §4.2.
Main result tab. 5. Mean normalized balanced error, lower is better. The values are ADTM averages with standard deviations.
| System | 10 min | 60 min | Source |
|---|---|---|---|
| Auto-sklearn 2.0 (selector + PoSH) | 3.58 ± 0.23 | 2.47 ± 0.18 | tab. 5 |
| PoSH Auto-sklearn | 4.11 ± 0.09 | 3.19 ± 0.12 | tab. 5 tab. 3 |
| Auto-sklearn 1.0 | 16.21 ± 0.27 | 7.17 ± 0.30 | tab. 5 tab. 3 |
The authors report a relative error reduction against Auto-sklearn 1.0 of 78% at 10 minutes, which they describe as a factor of 4.5, and 65% at 60 minutes §4.2. Several large datasets drive much of the gap, because Auto-sklearn 1.0 times out or hits its memory limit on them §4.2. Removing those datasets still leaves Auto-sklearn 2.0 ahead §4.2.
PoSH vs Auto-sklearn 1.0 tab. 3: PoSH 4.11 ± 0.09 and 3.19 ± 0.12, against Auto-sklearn 1.0 at 16.21 ± 0.27 and 7.17 ± 0.30 §3.5.2.
Portfolio results tab. 2. Normalized balanced error, with bold for the best per row. Italics mark values the paper underlines as not significantly different from the best (Wilcoxon, α = 0.05).
| Setting | 10 min BO | 10 min KND | 10 min Portfolio | 60 min BO | 60 min KND | 60 min Portfolio |
|---|---|---|---|---|---|---|
| FB; holdout | 5.98 | 5.29 | 3.70 | 3.84 | 3.98 | 3.08 |
| SH; holdout | 5.15 | 4.82 | 4.11 | 3.77 | 3.55 | 3.19 |
| FB; 3CV | 8.52 | 7.76 | 6.90 | 6.42 | 6.31 | 4.96 |
| SH; 3CV | 7.82 | 7.67 | 6.16 | 6.08 | 5.91 | 5.17 |
| FB; 5CV | 9.48 | 9.45 | 7.93 | 6.64 | 6.47 | 5.05 |
| SH; 5CV | 9.48 | 8.85 | 7.05 | 6.19 | 5.83 | 5.40 |
| FB; 10CV | 16.10 | 15.11 | 12.42 | 10.82 | 10.44 | 9.68 |
| SH; 10CV | 16.14 | 15.10 | 12.61 | 10.54 | 10.33 | 9.23 |
Selector ablation tab. 6. Normalized balanced error for the selector and its variants, trained on different meta-data (P = portfolio performance table, BO = Bayesian optimization, E = ensembles). The oracle is the best policy per dataset on the test set. Random chooses a policy at random §4.3.1. Italics mark values the paper underlines as not significantly different from the best.
| Variant | 10 min P | 10 min P+BO | 10 min P+BO+E | 60 min P | 60 min P+BO | 60 min P+BO+E |
|---|---|---|---|---|---|---|
| Selector | 3.58 | 3.56 | 3.58 | 2.53 | 2.32 | 2.47 |
| Selector w/o fallback | 5.43 | 5.68 | 4.79 | 4.98 | 5.36 | 5.43 |
| Single best | 3.88 | 3.67 | 3.69 | 2.49 | 2.38 | 2.44 |
| Single best w/o fallback | 5.18 | 6.38 | 6.40 | 5.10 | 5.01 | 5.07 |
| Oracle | 2.33 | 1.22 | ||||
| Random | 8.32 | 6.18 |
Which model selection strategies to offer tab. 7. Selector, random and oracle, on subsets of the eight policies:
| Subset | 10 min Selector | 10 min Random | 10 min Oracle | 60 min Selector | 60 min Random | 60 min Oracle |
|---|---|---|---|---|---|---|
| All | 3.58 (0.23) | 7.46 (2.02) | 2.33 (0.06) | 2.47 (0.18) | 5.64 (1.95) | 1.22 (0.08) |
| Only Holdout | 4.03 (0.14) | 3.78 (0.23) | 3.23 (0.10) | 3.18 (0.15) | 3.13 (0.12) | 2.62 (0.07) |
| Only CV | 6.11 (0.11) | 8.66 (0.70) | 5.28 (0.06) | 5.09 (0.19) | 6.85 (0.86) | 3.94 (0.10) |
| Only FB | 3.50 (0.20) | 7.64 (2.00) | 2.59 (0.09) | 2.39 (0.18) | 5.46 (1.52) | 1.51 (0.06) |
| Only SH | 3.63 (0.19) | 6.95 (1.98) | 2.75 (0.07) | 2.44 (0.24) | 5.13 (1.72) | 1.68 (0.12) |
Warm starting with a portfolio tab. 8:
| Setting | 10 min mean (std) | 60 min mean (std) |
|---|---|---|
| With portfolio: policy selector | 3.58 (0.23) | 2.47 (0.18) |
| With portfolio: single best | 3.69 (0.14) | 2.44 (0.12) |
| Without portfolio: policy selector | 5.63 (0.89) | 3.42 (0.32) |
| Without portfolio: single best | 5.37 (0.58) | 3.61 (0.61) |
Comparison with other AutoML systems tab. 9. Running on 39 datasets with 1 hour, 8 cores, five repetitions. The metric is log loss on multiclass tasks and one minus AUC on binary tasks, and smaller is better. Bold marks the lowest error per dataset. The aggregate rows are the mean rank, best count, wins/losses against Auto-sklearn 2.0, and p-values of a binomial sign test against it. Columns: AS 2.0 = Auto-sklearn 2.0, AS 1.0 = Auto-sklearn 1.0, AW = Auto-WEKA, TPOT, H2O = H2O AutoML, TunedRF = tuned random forest.
| Dataset | AS 2.0 | AS 1.0 | AW | TPOT | H2O | TunedRF |
|---|---|---|---|---|---|---|
| adult | 0.0692 | 0.0701 | 0.0920 | 0.0750 | 0.0690 | 0.0902 |
| airlines | 0.2724 | 0.2726 | 0.3241 | 0.2758 | 0.2682 | - |
| albert | 0.2413 | 0.2381 | - | 0.2681 | 0.2530 | 0.2616 |
| amazon | 0.1233 | 0.1412 | 0.1836 | 0.1345 | 0.1218 | 0.1377 |
| apsfailure | 0.0085 | 0.0081 | 0.0365 | 0.0099 | 0.0081 | 0.0087 |
| australian | 0.0594 | 0.0702 | 0.0709 | 0.0670 | 0.0607 | 0.0610 |
| bank-marketing | 0.0607 | 0.0616 | 0.1441 | 0.0664 | 0.0610 | 0.0692 |
| blood-transfusion | 0.2428 | 0.2474 | 0.2619 | 0.2761 | 0.2430 | 0.3122 |
| car | 0.0012 | 0.0046 | 0.1910 | 2.7843 | 0.0032 | 0.0421 |
| christine | 0.1821 | 0.1703 | 0.2026 | 0.1821 | 0.1763 | 0.1908 |
| cnae-9 | 0.1424 | 0.1779 | 0.7045 | 0.1483 | 0.1807 | 0.3119 |
| connect-4 | 0.3387 | 0.3535 | 1.7083 | 0.3856 | 0.3127 | 0.4777 |
| covertype | 0.1103 | 0.1435 | 3.3515 | 0.5332 | 0.1281 | - |
| credit-g | 0.2031 | 0.2159 | 0.2505 | 0.2144 | 0.2078 | 0.1985 |
| dilbert | 0.0399 | 0.0332 | 2.0791 | 0.1153 | 0.0359 | 0.3283 |
| dionis | 0.5620 | 0.7171 | - | - | 4.7758 | - |
| fabert | 0.7386 | 0.7466 | 5.4784 | 0.8431 | 0.7274 | 0.8060 |
| fashion-mnist | 0.2511 | 0.2524 | 0.9505 | 0.4314 | 0.2762 | 0.3613 |
| guillermo | 0.0945 | 0.0871 | 0.1251 | 0.1680 | 0.0911 | 0.0973 |
| helena | 2.4974 | 2.5432 | 14.3523 | 2.8738 | 2.7578 | - |
| higgs | 0.1824 | 0.1846 | 0.3379 | 0.1969 | 0.1846 | 0.1966 |
| jannis | 0.6709 | 0.6637 | 2.9576 | 0.7244 | 0.6695 | 0.7288 |
| jasmine | 0.1141 | 0.1196 | 0.1356 | 0.1123 | 0.1141 | 0.1118 |
| jungle_chess | 0.2104 | 0.1956 | 1.6969 | 0.9557 | 0.1479 | 0.4020 |
| kc1 | 0.1611 | 0.1594 | 0.1780 | 0.1530 | 0.1745 | 0.1590 |
| kddcup09 | 0.1580 | 0.1632 | - | 0.1696 | 0.1636 | 0.2058 |
| kr-vs-kp | 0.0001 | 0.0003 | 0.0217 | 0.0003 | 0.0002 | 0.0004 |
| mfeat-factors | 0.0726 | 0.0901 | 0.5678 | 0.1049 | 0.1009 | 0.2091 |
| miniboone | 0.0121 | 0.0128 | 0.0352 | 0.0177 | 0.0129 | 0.0183 |
| nomao | 0.0035 | 0.0039 | 0.0157 | 0.0047 | 0.0036 | 0.0049 |
| numerai28.6 | 0.4696 | 0.4705 | 0.4729 | 0.4741 | 0.4695 | 0.4792 |
| phoneme | 0.0299 | 0.0366 | 0.0416 | 0.0307 | 0.0325 | 0.0347 |
| riccardo | 0.0002 | 0.0002 | 0.0020 | 0.0021 | 0.0003 | 0.0002 |
| robert | 1.4302 | 1.3800 | - | 1.8600 | 1.4927 | 1.6877 |
| segment | 0.1482 | 0.1749 | 1.2497 | 0.1660 | 0.1580 | 0.1718 |
| shuttle | 0.0002 | 0.0004 | 0.0100 | 0.0008 | 0.0004 | 0.0006 |
| sylvine | 0.0105 | 0.0091 | 0.0290 | 0.0075 | 0.0106 | 0.0159 |
| vehicle | 0.3341 | 0.3754 | 2.0662 | 0.4402 | 0.3067 | 0.4839 |
| volkert | 0.7477 | 0.7862 | 3.4235 | 0.9852 | 0.8121 | 0.9792 |
| Mean rank | 1.79 | 2.64 | 5.72 | 4.08 | 2.38 | 4.38 |
| Best performance (datasets) | 19 | 8 | 0 | 2 | 8 | 2 |
| Wins/Losses/Ties of AS 2.0 | - | 28/11/0 | 39/0/0 | 35/4/0 | 26/13/0 | 36/3/0 |
| p-value vs AS 2.0 (binomial sign) | - | .009 | <.000 | <.000 | .053 | <.000 |
Setup for the comparison §5.1: the AutoML benchmark's 1h8c setting, 10 folds, five repetitions, 32 GB of RAM per run, and Singularity images instead of Docker. Package versions are in tab. 17. The paper states that Auto-sklearn 2.0 has the lowest average rank and the most best-performance counts, and that both Auto-sklearn versions give results on all datasets, including the largest §5.2. The H2O p-value is .053 tab. 9, so that comparison is not significant at 0.05.
Auto-sklearn 2.0 without ensembles tab. 12 (appendix B.2): 10 min 5.01 ± 0.18 and 60 min 3.18 ± 0.31, against PoSH 5.76 and 3.97 and Auto-sklearn 1.0 23.24 and 8.68.
Iterative search space and results retrieval tab. 10 (appendix B.1): Auto-sklearn 1.0 at 16.21 and 7.17; with the iterative search space only, 18.10 and 9.57; with iterative space and intermittent results, 5.29 and 3.98; with the portfolio added, 3.70 and 3.08.
Per-dataset raw numbers are in tab. 13–tab. 16, and the meta-train dataset list is in tab. 19. They are not reproduced here. The without-ensembles portfolio table is tab. 11.
Paper vs code
Code: https://github.com/automl/ASKL2.0_experiments at commit
7373041248711052f7af853e946ce48692669800. Its readme says it is provided as-is
and that the scripts will be ported to the main Auto-sklearn repository [code:
readme.md]. It has no LICENSE file, so the code is cited by path and line only,
with no quoted text. Its readme cites arXiv v2, and the paper text compiled
here is v3 (JMLR 2022 format), so differences may partly reflect the version.
The final Auto-sklearn 2.0 implementation is in the Auto-sklearn package
(version 0.12.7 per §D.1). That package is not in this repository, and I did
not check it. The behaviour below is taken from the experiment scripts.
- Greedy tie-breaking. The paper says ties go to the model trained first alg. 1. The code shuffles the candidates with the random generator and takes the first minimum in the shuffled order greedy_portfolio.py greedy_portfolio.py. The tie break is random, not by training order.
- Early stop in the greedy loop. The code stops adding members when the best score is at most 0 greedy_portfolio.py. The paper runs until the target size is reached alg. 1 §3.1.1. A portfolio built this way can be shorter than 32.
- Selection on test data. Portfolio construction uses the test loss when
consider_validationis not set, which is the default greedy_portfolio.py greedy_portfolio.py. The build script does not set it build_portfolio.py. This matches the paper's choice §3.1.1. - Successive-halving budgets. The budgets are fractions of the full budget, 6.25% to 100% with η = 4 build_portfolio.py. The bracket code works out to N_i = [16, 4, 1] and R_i = [6.25, 25, 100] in percent fidelity_strategies.py. This is the same 16× range as the paper's 32 to 512 and 64 to 1024 iterations app. D.3: 32/512 and 64/1024 are both 6.25%.
- Backup policy. The paper says the fallback is holdout with SH §4.1.1. The
code returns a weight vector over all eight policies, not a single choice. The
weights are proportional to (7, 6, ..., 0) for the eight policies in the order
holdout+SH, holdout+FB, 3CV+SH, and so on [code:
experiment_scripts/autoauto/policy_selectors.py#L480-L484]
run_autoauto.py. Holdout+SH gets
the largest share, 7/28 = 25%, but not all of it. The script scores outputs
as a weighted regret run_autoauto.py,
so whether the runtime picks an argmax is in the
autoauto_experimentspackage, which is not in this repository. - Depth-0 selector. The paper says depth 0 gives a single leaf with all data §4.1.1. The code instead fits a constant predictor for the pair, chosen from the summed weights, rather than a random forest with one leaf policy_selectors.py. Pairs where all labels are equal also get a constant predictor policy_selectors.py.
- Random forest size and selector search. The paper does not state the number of trees or the number of selector search iterations. The code uses 500 trees, or 10 in test mode run_autoauto.py run_autoauto.py, and 200 SMAC iterations, or 10 in test mode run_autoauto.py.
- Ensemble size. The paper says ensembles of size 50 §3.4.3. The ensemble
step uses
ensemble_size=50run_autosklearn.py run_autosklearn.py. The main AutoML call passesensemble_size=1when post-hoc ensembles are on run_autosklearn.py run_autosklearn.py. How these two interact is inside the Auto-sklearn package, which I did not check. - Selector hyperparameter ranges. The paper's Table 4 gives
max featuresas [1, 2]. The code uses [1, n_features], where n_features is the number of meta-features, which is 2 policy_selectors.py run_autoauto.py. This matches. The code also searches min samples split and min samples leaf on a log scale policy_selectors.py, which Table 4 does not say. - Time and memory limits. The code uses 60 s per pipeline for the 10-minute horizon and 4000 MB master_calls.py, which matches the one-tenth rule and 4 GB §3.4 within rounding.
- Portfolio size. The code builds portfolios of size 32 [code: experiment_scripts/master_calls.py#L748], consistent with §3.5.1.
No discrepancies found for the SH bracket beyond the units noted above.
Pitfalls
- Test-set selection is what makes the guarantees hold. The submodularity argument, and the 1 − 1/e and 99% bounds, apply when the portfolio is chosen on meta-dataset test losses §3.1.2 app. C.2. Choosing on the validation split breaks submodularity and monotonicity, shown with a counterexample for holdout app. C.3, and also for SH app. C.4. Eq. 9 is written with validation loss eq. 9, so implementing it literally changes the guarantees.
- Bounds from the greedy algorithm. The 63% and 99% statements are inherited from cited work §3.1.2. They describe the portfolio's loss on the meta-data, not on new datasets.
- Rounding in successive halving. The paper says "1/η of the pipelines" and does not say how to round or how many pipelines start §3.2.1. The code's bracket fixes n = 16 and N_i = floor(n η^{-i}) [code: experiment_scripts/portfolio/fidelity_strategies.py#L173-L186].
- BO and SH together have no guarantee. The authors say so §7 and ask for approaches that raise SH's smallest budget over time §7.
- Number of BO pipelines before SH. The paper says "a fixed number" without giving it §3.2.1.
- Surrogate data threshold. The paper uses n/2 points for the BO surrogate, instead of the n+1 the original model needs §3.2.1. Check this before you copy the rule into another system.
- Only two meta-features. The authors say the two-feature selector can be seen as learning the manual fallbacks from Part I §4.1.1. Other meta-features may do better, and the authors leave that open §7.
- Backup changes the result. Without the backup, the selector is worse on huge datasets it cannot extrapolate to, and on the 60-minute horizon the single best policy is better than the selector without backup §4.3.1. The backup is part of the reported result.
- Meta-data with ensembles is not always better. P+BO slightly beats P+BO+E for the selector. The authors trace this to one dataset where the selector picks a worse policy than the single best, and they suggest ensembles lower meta-data quality §4.3.1. The main results use P+BO+E tab. 5.
- Oracle is not zero. Normalization uses the single-best test loss, so the oracle can be above zero §4.3.1 (footnote).
- Meta-data cost. Building the selector's training data is expensive. The portfolio table is the cheap option, but it gives the worst selector §4.3.1.
- Tie-breaking in the selector. Ties are broken by a fixed order first, then at random policy_selectors.py. The paper does not describe the tie rule.
- Large datasets dominate the average. Several large datasets drive much of the gap to Auto-sklearn 1.0, because its KND warm start proposes pipelines that time out §4.2. Read the averages together with the per-dataset results.
- Ensembles. The paper uses ensemble selection with 50 members and reports results without ensembles in the appendix §3.4.3 app. B.2. It says the ensemble improves the error in every case app. B.2, so compare like with like.
- Benchmark significance. The H2O comparison has p = .053 tab. 9, which is not significant at 0.05.
Lineage
- Builds on: Auto-sklearn 1.0, with k-nearest-dataset warm starting and post-hoc ensembles §1 §3.1. The intermediate system, PoSH Auto-sklearn, is the authors' winning entry to the second AutoML challenge §3.3. Successive halving is from the works the paper cites in §3.2.
- Uses: SMAC for Bayesian optimization §3.2.1; HydraMIP's pairwise selector design §4.1.1; per-set algorithm selection §4.1.1.
- Compared against: Auto-WEKA, TPOT, H2O AutoML, a tuned random forest, and Auto-sklearn 1.0 §5 tab. 9.
- Superseded by: not stated in the paper, and not checked.
Source and license
Adapted from “Auto-Sklearn 2.0: Hands-free AutoML via Meta-Learning” by Matthias Feurer, Katharina Eggensperger, Stefan Falkner, Marius Lindauer, Frank Hutter (arXiv:2007.04074), used under CC BY 4.0. Changes: condensed and restructured for implementation, with tables, equations and algorithms taken from the paper and its code, each cited to its source. Not affiliated with or endorsed by the authors. Code citations refer to https://github.com/automl/ASKL2.0_experiments at commit 737304124871 (none (no LICENSE file in repository)). Any quoted code is shown under that license.