The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
n_cores and engine threads are now
separate: n_cores previously sized both the
parallel worker pool and the thread count passed to engines
that accept one, so a request for k cores could demand up
to k^2 threads and contend with itself on engines that
thread aggressively. n_cores now controls the worker pool
only, and a new engine_threads argument (default
1) controls the per-engine thread count for
num.threads (ranger), num_threads (LightGBM),
and nthread (xgboost). Total CPU demand is therefore the
product the user specifies. Behaviour at the defaults
(n_cores = 1, engine_threads = 1) is
unchanged; a previous n_cores = k run is now written
n_cores = k, engine_threads = k if the old thread
allocation is wanted. Determinism warnings for multithreaded engines are
keyed to engine_threads rather than
n_cores.process_model(), a failure to apply a
native survival model’s stored recipe to the evaluation data silently
returned the raw, unbaked data, so the model predicted on features it
was not trained on and reported plausible but meaningless metrics. The
failure is now fatal, with an error naming the model and the underlying
cause.parsnip::set_engine()
replaces the engine arguments already attached to a specification rather
than adding to them, so the second application in
train_models() silently dropped every default the spec
builder had set — LightGBM’s counts,
bagging_freq and verbose, an xgboost
early-stopping configuration (early_stop,
validation), and sparsediscrim’s
regularization_method. Arguments are now merged through the
new internal fastml_merge_engine_args(), with pipeline
values winning only on the keys they define. Case Study B’s reported
metrics are unchanged, since the dropped LightGBM arguments were inert
for that configuration; the defect is live wherever mtry or
sample_size are tuned for LightGBM, xgboost early stopping
is requested, or sparsediscrim is used.fastml_setup_parallel() called
doFuture::registerDoFuture(flavor = "%dofuture%"), but
registerDoFuture() accepts no arguments, so any call with
n_cores > 1 failed with “unused argument”. The argument
has been dropped. Parallel execution was unusable in 0.7.8 with current
doFuture.fastml() call,
the previous backend’s data/info hooks are
NULL, and passing them back to
foreach::setDoPar() on exit left
foreach::getDoParName() erroring for the rest of the
session. The sequential default is now registered instead.predict_risk() and predict_survival() for
native survival fits) it is now fatal via the shared helper
fastml_bake_or_abort(). Where aborting would discard an
otherwise complete result — assembling processed_test_data
in fastml(), and the explanation utilities
(explain_ale(), explain_stability(),
interaction_strength(), plot_ice(),
surrogate_tree()) — the fallback remains but now warns and
states that the output describes raw rather than preprocessed
features.fastml_detect_leaky_recipe_steps() tests for
data.frame/tbl_df components before the
generic list branch. Data frames are themselves lists, so the previous
ordering recursed into their columns and the check was unreachable; a
custom recipe step carrying an external lookup table was silently
accepted. Such steps are now flagged and training is aborted.fastml_validate_user_recipe() determined trained state from
recipe$trained, a field prepped recipes do not carry, so
the check never fired. Trained state is now read via
recipes::fully_trained(), with the tr_info
training-set record as a fallback for prepped recipes without
steps.tests/testthat/test-parallel-setup.R covers
fastml_setup_parallel() directly — backend registration,
plan and future.seed restoration, recovery of a
caller-registered backend, and the
n_cores/engine_threads separation — and runs
in an ordinary CRAN check, costing roughly four seconds because it
exercises the helper rather than fitting models. Reintroducing each
defect was confirmed to make these tests fail. The end-to-end multicore
run stays behind skip_on_cran(), since it spends about
twenty seconds on multisession worker startup to reach the same
defects.verbose = TRUE, train_models() now reports
whether each algorithm is fitted through a parsnip workflow (the guarded
resampling path) or through its native engine, so users can tell which
path a given method took rather than inferring it.process_model() that selected the best configuration from a
tune_results object (with metric fallback) and refit the
finalized workflow is now the internal helper
finalize_tuned_model(). Behaviour is unchanged, including
the NULL-with-warning return when no configuration can be
selected.tests/testthat/test-process-model.R covering the
recipe-application abort contract, its diagnostic message,
finalize_tuned_model()’s graceful NULL return,
and a clean end-to-end native survival evaluation.tests/testthat/test-security-guards.R with behavioural
tests for the recipe scanner, covering safe-listed and non-safe-listed
standard steps (false-positive checks), embedded data frames and
tibbles, global-environment and parent-frame references,
abort-on-rejection behaviour, and pretrained/non-recipe input.resampling_method = "validation_split" to
fastml() and train_models(). The holdout
proportion is derived from folds as
1 - 1 / folds, with stratification support where
applicable.save_fastml() as the primary helper for persisting fitted
fastml objects.start_col,
time_col, status_col) through the evaluation
path.predict.fastml() now treats native survival and
Royston-Parmar model objects as valid prediction targets when flattening
and selecting fitted models.fastml(),
train_models(), and bootstrap confidence interval
computations now restore the caller’s .Random.seed after
execution.folds, flatten_and_rename_models(), and
get_best_model_idx() for clearer usage and cleaner package
checks.event_class validation in both
fastml() and train_models() so invalid values
are rejected consistently.logistic_reg is converted
to multinom_reg before the training loop, avoiding
per-iteration mutation and preserving engine parameter transfer.parsnip::discrim_linear() and
parsnip::discrim_quad(), resolving dependency warnings
caused by referencing unexported discrim objects.survreg and
royston_parmar..GlobalEnv inside sandboxed preprocessing guards, resolving
the corresponding R CMD check NOTE about global environment
assignments.save.fastml() in favour of
save_fastml() to avoid confusion with a non-generic
S3-style naming pattern.flatten_and_rename_models() and
get_best_model_idx(), resolving R CMD check
\usage warnings.explain_stability() function to analyze feature importance
stability across cross-validation folds. This helps identify features
that are consistently important vs. those whose importance varies across
different data subsets.store_fold_models parameter to fastml() to
optionally store models trained on each CV fold, enabling stability
analysis with explain_stability().print.fastml_stability() and
plot.fastml_stability() methods for convenient display of
stability analysis results.fastml_prepare_explainer_inputs() helper function providing
consistent data preparation across all explainer methods
(explain_dalex(), explain_ale(),
plot_ice(), interaction_strength(),
surrogate_tree()).resolve_positive_class() helper for consistent positive
class handling across explainer functions, respecting
event_class settings.explain_dalex(): Major
refactoring with robust preprocessing (“baking”) helper that handles
three scenarios: no preprocessor, successful baking, and fallback
validation for already-processed data.plot_ice(): Added
target_class parameter for classification, improved feature
validation with informative error messages, and added warnings for
multiclass problems.valid_model() helper to properly validate workflow and
native survival model types during prediction.predict.fastml() to
correctly resolve base algorithm names to their full “algorithm
(engine)” format.Rplots.pdf files from being created during
test execution by adding graphics device suppression to plotting
tests.Rplots.pdf to .gitignore to prevent
accidental tracking.engine_params argument to allow passing engine-specific
options in a consistent way.fastml generics.multiclass_auc to use macro_weighted
class-prevalence weighting.survival_metric_convention to align survival
evaluation defaults with tidymodels conventions when desired.NA survival predictions and
early exits during survival time computation.These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.