v0.18.1
Maintenance release: audit-driven robustness fixes plus an early-stopping correctness fix. No default or accuracy changes on the benchmark suites — all fits stay benchmark-identical.
Fixed
- Early stopping truncates to the best iteration when
n_estimatorsruns out before patience fires. Previously every tree built past the best validation round was kept, contradicting the documentedbest_iteration_contract (~5% validation RMSE cost on budget-exhausted fits in an adversarial repro). Patience stops, early-stopping-off, and callback stops are unchanged. - Thread hygiene:
thread_countnow applies to predict as well as fit, and the process-global numba thread setting is restored afterwards. - Pickles no longer carry the packed-forest predict cache (~2x smaller payloads); it rebuilds lazily on first predict. Loaded models predict bit-identically.
- Loud failures replace silent misbehavior for unseen
eval_setlabels, class-stranding early-stopping splits,fit(X, y, w)positional misuse, and inertordered_boosting/leaf_estimation_iterationssettings. cat_featuresaccepts a numpy integer array; classifierdepth=Noneresolves to the default 6; bagged members retain the parent's feature names.
Full details in the CHANGELOG.