Skip to content

Releases: tidymodels/stacks

stacks 1.0.5

23 Jul 12:39
ad3d276
Compare
Choose a tag to compare
  • Addressed inflation of butchered model stack object size after saving and
    reloading (#214).

  • Fixed type-checking bug for add_candidates(name).

stacks 1.0.4

21 Mar 18:26
9b71ffd
Compare
Choose a tag to compare
  • Introduced support for parallel processing using the future framework. The stacks package previously supported parallelism with foreach, and users can use either framework for now. In a future release, stacks will begin the deprecation cycle for parallelism with foreach, so we encourage users to begin migrating their code now. See the Parallel Processing section in the tune package's "Optimizations" article to learn more (#866).

  • Improved error message for unsupported model modes (#152).

stacks 1.0.3

06 Nov 18:53
e8daadc
Compare
Choose a tag to compare
  • Refine package alt text (#202).

  • Update example objects, resolving deprecation warnings from recipes (#203).

  • Fix bug in type checking for blend_predictions(mixture) (#204).

  • Resolve package-level documentation aliasing notice from CRAN.

stacks 1.0.2

21 Apr 01:10
62dd7fe
Compare
Choose a tag to compare
  • Added an augment() method for model_stack objects for compatibility with vetiver (#173).

  • Converted all character variables in the tree_frogs example data to factor and updated downstream example objects (#177).

  • Fixed bug that resulted in errors when using model formulas with the "mgcv" engine (#193).

  • Made several optimizations to reduce evaluation time and memory allocation when stacking.

  • Various bug fixes and improvements to documentation.

stacks 1.0.1

14 Dec 16:19
ef178ab
Compare
Choose a tag to compare
  • Tightened integration with the workflowsets package (#161, #165).

    • Refined logic with adding candidates via workflowsets to allow for partially trained workflow sets. In the case that a workflow set contains some failed tuning results, stacks will inform the user that they will be excluded from the data stack and only add the results that trained successfully.
    • Extended documentation related to the packages' interactions, including a new article on the package website.
  • Revamped errors, warnings, and messages. Prompts now provide more thorough context about where they arose, include more extensive references to documentation, and are correctly pluralized (#150, #167).

  • blend_predictions() doesn't error anymore if the control argument isn't a control_grid object. As long as the list passed to control include the same elements as control_grid() output, parsnip::condense_control() will handle input (#149).

  • Removes an unneeded data import attribute from the tree_frogs example data and its associated objects (#148).

  • Various bug fixes and improvements to documentation.

stacks 1.0.0

06 Jul 20:09
672ec3f
Compare
Choose a tag to compare

stacks 1.0.0 is the first production release of the package. While this release
includes only a few minor bug fixes, it's accompanied by a white paper
recently published in the Journal of Open Source software. You can read
that paper here!

This release:

  • Addresses re-introduction of a bug arising from outcome levels that are not
    valid column names in the multinomial classification setting (#133).
  • Fixes bug where stacks will return incorrect predictions if an elastic net
    meta-learner is used, the type argument to predict is set to "class",
    and the outcome levels differ from alphabetical order.
  • Transitions package internals from functions deprecated from the recipes package.

stacks 0.2.4

05 Jul 19:40
Compare
Choose a tag to compare

This is a GitHub-only release and does not reflect CRAN source code. This update includes a data-raw/paper subdirectory containing source for a contributed paper to the Journal of Open Source Software.

stacks 0.2.3

13 May 13:27
03ccbf4
Compare
Choose a tag to compare

While stacks 0.2.3 is a minor release, it includes a number of significant user experience improvements. This release adds an option to significantly reduce runtime for prediction blending, makes errors and warnings more informative, and greatly reduces the size of reloaded model objects in memory.

Regarding that first point, take a look at how adjusting the times argument in blend_predictions drastically affects its runtime:

library(tidymodels)
library(modeldata)
  
# using a version of the package where `times` is a param
library(stacks)

data("lending_club")

set.seed(1)
lending_club <- sample_n(lending_club, 1000)

folds <- vfold_cv(lending_club, v = 5)

lr_mod <- 
  linear_reg(penalty = tune(), mixture = tune()) %>%
  set_engine("glmnet") %>%
  workflow(
    preprocessor = funded_amnt ~ int_rate + total_bal_il,
    spec = .
  ) %>%
  tune_grid(
    resamples = folds,
    control = control_stack_grid(),
    grid = 10
  )

system.time(
  stacks() %>%
    add_candidates(lr_mod) %>%
    blend_predictions(times = 25)
)
#>    user  system elapsed 
#>  10.280   0.112  10.550

system.time(
  stacks() %>%
    add_candidates(lr_mod) %>%
    blend_predictions(times = 10)
)
#>    user  system elapsed 
#>   4.424   0.050   4.554

system.time(
  stacks() %>%
    add_candidates(lr_mod) %>%
    blend_predictions(times = 4)
)
#>    user  system elapsed 
#>   2.158   0.018   2.194

Related to the second point, there are several different degrees and varieties of tuning "failure" that result in stacks tripping up during model stacking. The package now inspects its inputs more closely and may give you a heads up when you might run into issues later on. Look out for warnings like:

#> Warning message:
#> The inputted `candidates` argument `my_tuning_results` generated notes during tuning/resampling. 
#> Model stacking may fail due to these issues; see `?collect_notes` if so. 

And, finally, related to model stack object size, check out the the results of butcher::weigh on the results like the above reprex (after saving and reloading) before and after this release:

weigh(lr_stack_before)
#> # A tibble: 374 × 2
#>    object                                                              size
#>    <chr>                                                              <dbl>
#>  1 coefs.preproc.terms                                               2.64  
#>  2 coefs.fit.call                                                    2.64  
#>  3 coefs.spec.eng_args.lower.limits                                  2.64  
#>  4 coefs.spec.method.fit.args.lower.limits                           2.64  
#>  5 coefs.spec.method.pred.numeric.post                               1.76  
#>  6 member_fits.lr_mod_1_3.fit.fit.spec.method.pred.numeric.post      1.76  
#>  7 member_fits.lr_mod_1_1.fit.fit.spec.method.pred.numeric.post      1.76  
#>  8 member_fits.lr_mod_1_3.pre.actions.formula.blueprint.mold.process 0.0172
#>  9 member_fits.lr_mod_1_3.pre.mold.blueprint.mold.process            0.0172
#> 10 member_fits.lr_mod_1_1.pre.actions.formula.blueprint.mold.process 0.0172
#> # … with 364 more rows
weigh(lr_stack_after)
#> # A tibble: 374 × 2
#>    object                                                               size
#>    <chr>                                                               <dbl>
#>  1 coefs.preproc.terms                                               24.7   
#>  2 coefs.fit.call                                                    24.7   
#>  3 coefs.spec.eng_args.lower.limits                                  24.7   
#>  4 coefs.spec.method.fit.args.lower.limits                           24.7   
#>  5 coefs.spec.method.pred.numeric.post                                1.79  
#>  6 member_fits.lr_mod_1_3.fit.fit.spec.method.pred.numeric.post       1.79  
#>  7 member_fits.lr_mod_1_1.fit.fit.spec.method.pred.numeric.post       1.79  
#>  8 member_fits.lr_mod_1_3.pre.actions.formula.blueprint.mold.process  0.0172
#>  9 member_fits.lr_mod_1_3.pre.mold.blueprint.mold.process             0.0172
#> 10 member_fits.lr_mod_1_1.pre.actions.formula.blueprint.mold.process  0.0172
#> # … with 364 more rows

Read more about these changes and their implementations at the issues linked below.🐧

Changelog

  • Addressed deprecation warning in add_candidates (#99).
  • Improved clarity of warnings/errors related to failed hyperparameter tuning and resample fitting (#110).
  • Reduced model stack object size and fixed bug where object size of model stack inflated drastically after saving to file (#116). Also, regenerated example objects with this change--saved model objects may need to be regenerated in order to interface with newer versions of the package.
  • Introduced a times argument to blend_predictions that is passed on to rsample::bootstraps when fitting stacking coefficients. Reducing this argument from its default (25) greatly reduces the run time of blend_predictions (#94).
  • The package will now load packages necessary for model fitting at fit_members(), if available, and fail informatively if not (#118).
  • Fixed bug where meta-learner tuning would fail with outcome names and levels including the string "class" (#125).
  • The package will now warn when unused dots are passed to any of the core functions (#127).

stacks 0.2.2

06 Jan 01:25
adcafad
Compare
Choose a tag to compare
  • Fixed errors arising from outcome levels that are not valid column
    names in the multinomial classification setting.
  • Fixed collect_parameters failing to return stacking coefficients
    in the two-class classification setting.
  • Regenerated example objects with updated {rsample} fingerprinting--saved
    model objects may need to be regenerated in order to build stacks combining
    models generated before and after this update.
  • Various other bug fixes and improvements to documentation.

stacks 0.2.1

23 Jul 17:09
0b6306d
Compare
Choose a tag to compare
  • Updates for importing workflow sets that use the add_variables() preprocessor.
  • Plot fixes for cases where coefficients are negative.
  • Performance and member plots now show the effect of multiple mixture values.
  • Package diagrams now have alt text.
  • Various bug fixes and improvements to documentation.