Changelog
Source:NEWS.md
gbm 2.3.0
CRAN release: 2026-07-08
Bug fixes
Fixed predictions from models with categorical (factor) splits on platforms where plain
charis unsigned (notably Linux on ARM64/aarch64). The categorical split-direction codes were stored incharand the value-1became255, silently routing all left-branch observations to the missing branch inpredict()andplot(). Model training was unaffected; only predictions from the stored model object were wrong, and only on affected platforms.Fixed the multinomial deviance calculation, which was one iteration behind because it used cached class probabilities; also fixed the corresponding out-of-bag improvement calculation, which was double-counting updates.
Fixed
gbm.more()fordistribution = "multinomial": continuing training now correctly reconstructs the class ordering and data for bothkeep.data = TRUEandkeep.data = FALSE, passes along the prior fit safely, restores the fit as an n x K matrix, and treatsn.treesas boosting iterations rather than a raw class-tree count.Fixed two bugs in
gbm.more()fordistribution = "coxph": observation weights could be silently replaced with the predictor matrix in certain cases, andcRows/cColswere not available yet when first needed.Fixed the out-of-bag improvement estimate for
distribution = "coxph", which ignored the current model fit; this corruptedgbm.perf(method = "OOB")for Cox models.Fixed observation weights not being reordered along with the data in
gbmCrossVal()’s per-fold fitting, which corrupted weighted cross-validation.InitF()is now always called when fitting, including when extending an existing model viagbm.more(), so distributions can allocate any iteration-specific internal buffers they need.Fixed offset handling in several places: offsets are now correctly reordered alongside the data for
distribution = "pairwise";distribution = "huberized"now includes the offset in its terminal-node estimates;distribution = "poisson"now applies its prediction clamp when an offset is supplied; and supplying a real offset vector no longer errors ingbm.fit()andgbm.more()for Cox models.permutation.test.gbm()now works for all distributions, not just"pairwise".Fixed undefined behavior in
distribution = "pairwise"model fitting where internal buffers were reserved but not actually resized before being written to.Fixed a potential stack overflow in
plot.gbm()for very deep trees.Fixed
distribution = "quantile"to handle observation weights.Fixed Poisson terminal-node predictions when a node’s denominator is zero.
gbm()now raises an informative error when a suppliedweightsvector’s length doesn’t match the data, instead of failing obscurely later on.plot.gbm()no longer errors if theviridispackage isn’t installed; it now falls back to a built-in color palette.Added the missing y-axis label for
distribution = "huberized"plots.
Behavior changes
-
gbm(distribution = "multinomial")no longer emits the “ill-advised… currently broken” warning added in 2.1.6. Multinomial support has been fixed and is now tested. Note this removes a warning that some downstream packages’ tests may assert on (seepmml, below).
Other improvements
distribution = "adaboost"now uses the negative gradient as its working response, consistent with the other distributions; among other things this makesvar.monotoneconstraints act in the intended direction for AdaBoost models.Switched the test suite from tinytest to testthat.
Vignette corrections: Cox model formulas, the normalized discounted cumulative gain formula, and formulas added for the t-distribution, huberized hinge loss, and multinomial deviance; converted the vignette build from Sweave to R Markdown and added a pkgdown site.
gbm 2.1.8
CRAN release: 2020-07-15
- Removed experimental functions
shrink.gbm()andshrink.gbm.pred(); the latter seemed broken anyway. Happy to accept a PR if anyone wants to fix them.
gbm 2.1.6
Corrected the number of arguments for
gbm_shrink_gradient()ingbm-init.c(#50). (Thanks to CRAN for highlighting the issue.)Removed unnecessary dependency on gridExtra.
Switched to using
lapply()instead ofparallel::parLapply()whenevern.cores = 1.Calling
gbm()withdistribution = "bernoulli"will now throw an error whenever the response is non-numeric (e.g., 0/1 factors will throw an error instead of possibly crashing the session.) (#6). (Thanks to @mzoll.)Calling
gbm()withdistribution = "multinomial"now comes with a warning message; multinomial support has always been problematic and since this package is only being maintained for backwards compatibility, it likely will not be fixed unless someone makes a PR.Switched from RUnit to tinytest framework. The
test.gbm(),test.relative.influence(), andvalidate.gbm()functions will remain for backwards compatability. This is just the start, as more tests will be added in the future (#51).
Bug fixes
Fixed a long standing bug that could occur when using k-fold cross-validation with a response that’s been transformed in the model formula (#30).
Fixed a but that would crash the session when giving “bad” input for
n.treesin the call topredict.gbm()(#45). (Thanks to @ngreifer.)Fixed a bug where calling
predict()could throw an error in some cases whenn.treeswas not specified.
gbm 2.1.5
CRAN release: 2019-01-14
Fixed bug that occurred whenever
distributionwas a list (e.g., “pairwise” regression) (#27).Fixed a bug that occurred when making predictions on new data with different factor levels (#28).
Fixed a bug that caused
relative.influence()to give different values whenevern.treeswas/wasn’t given for multinomial distributions (#31).The
plot.itargument ofgbm.perf()is no longer ignored (#34).Fixed an error that occurred in
gbm.perf()wheneveroobag.curve = FALSEandoverlay = FALSE.
gbm 2.1.4
CRAN release: 2018-09-14
Switched from
CHANGEStoNEWSfile.Updated links and maintainer field in
DESCRIPTIONfile.Fixed bug with axis labels in the
plot()method for"gbm"objects (#17).The
plot()method for"gbm"objects is now more consistent and always returns a"trellis"object (#19). Consequently, setting graphical parameters viaparwill no longer have an effect on the output fromplot.gbm().The
plot()method for"gbm"objects gained five new arguments:level.plot,contour,number,overlap, andcol.regions; see?plot.gbmfor details.The default color palette for false color level plots in
plot.gbm()has changed to the Matplotlib ‘viridis’ color map.Fixed a number of references and URLs.