Skip to content

boost: reconcile nns_boost with R 13.2 NNS.boost; version 2.0.0#137

Merged
OVVO-Financial merged 1 commit into
mainfrom
claude/boost-reconcile-13.2
Jul 18, 2026
Merged

boost: reconcile nns_boost with R 13.2 NNS.boost; version 2.0.0#137
OVVO-Financial merged 1 commit into
mainfrom
claude/boost-reconcile-13.2

Conversation

@OVVO-Financial

Copy link
Copy Markdown
Owner

Summary

Port of the reconciled R NNS.boost (OVVO-Financial/NNS PR #58, commit bb878ad), regenerated parity cache, restored automation fixes, and the 2.0.0 major bump.

nns_boost reconciliation

  • threshold is a probability supplied to lpm_var over the learner-trial objective distribution (defaults 0.80 max / 0.20 min; extreme selects 1/0) — never a literal score cutoff. Survivors and every epoch re-test use the distinct LPM.VaR objective cutoff.
  • Learner trials fit genuine multivariate nns_reg (dim_red_method=None) and draw a fresh validation holdout per cross-sectional trial; time-series trials keep the chronological terminal block.
  • Epochs always run (exhaustive enumeration no longer disables them), re-testing only surviving combinations with R's survivor-permutation scheduling and fresh holdouts (chronological expanding windows for ts).
  • Final estimate replicates the original keeper predictors by relative epoch frequencies into one multivariate nns_stack(method=1, stack=False, folds=5, balance=False) call; the synthetic X* path is removed. New public folds argument (default 5).
  • Result gains class.levels (None for regression), matching R.

Every draw replicates R's Mersenne-Twister stream via RRNG — all seeded paths are bit-for-bit identical to R, including balance=True, which closes the formerly xfail-characterized balanced-boost sampling gap (the iris classification vignette now matches installed R exactly; its gap test pins the closure).

Cache

The three NNS.boost.* shards are regenerated from installed R NNS 13.2 at bb878ad (the automation run lost them — see below); sync/nns_source.json records that commit. All 37 boost parity tests pass bit-for-bit.

Restored workflow fixes (needs workflow-change-approved)

The #136 workflow improvements (sharded add-paths, shard-aware validation, manifest provenance stamping, per-function cache-diff table in the PR body, CI matrix dedupe) were silently reverted by the workflow-baseline protection, which caused the post-#58 cache regeneration to commit nothing and delete its own branch. They are restored here — this PR needs the workflow-change-approved label before merge or the baseline will strip them again.

Version 2.0.0

The threshold argument's meaning changed on an unchanged signature (probability, not score cutoff) and the output gains a key — semver major.

Validation

  • 2098 passed cache-only across parity + invariants + tools; ruff and mypy clean; version consistency green.
  • Known pre-existing, local-only failures (unchanged by this PR, skipped in CI): two Boston-housing live-R NNS.stack practical examples diverge ~0.7% from installed R 13.2.

🤖 Generated with Claude Code

https://claude.ai/code/session_01AxBV5HmXHY5nCUvW9SwDvb


Generated by Claude Code

Port of the reconciled R/Boost.R (OVVO-Financial/NNS PR #58, commit bb878ad):

* threshold is a probability supplied to LPM.VaR over the learner-trial
  objective distribution (defaults 0.80 max / 0.20 min; extreme selects 1/0),
  never a literal score cutoff; survivor selection and every epoch re-test
  use the distinct LPM.VaR objective cutoff.
* learner trials fit genuine multivariate NNS.reg (dim_red_method=None) and
  draw a fresh validation holdout per cross-sectional trial; time-series
  trials keep the chronological terminal block.
* epochs always run (exhaustive enumeration no longer disables them),
  re-testing only surviving combinations with R's survivor-permutation
  scheduling, fresh holdouts (chronological expanding windows for ts).
* final estimate replicates the original keeper predictors by relative
  epoch frequencies into one multivariate nns_stack(method=1, stack=False,
  folds=5, balance=False) call; the synthetic X* path is removed. New public
  folds argument (default 5).
* result gains class.levels (None for regression), matching R.

All draws replicate R's Mersenne-Twister stream via RRNG, making every
seeded path bit-for-bit identical to R - including balance=TRUE, closing the
formerly xfail-characterized balanced-boost sampling gap (the iris
classification vignette now matches installed R exactly and its gap test
pins the closure).

The three NNS.boost cache shards are regenerated from installed R NNS 13.2
at bb878ad (the automation run lost them to the reverted workflow); the
sync manifest records that commit. The workflow fixes from #136 (sharded
add-paths, shard-aware validation, manifest provenance, per-function cache
diff in the PR body, CI dedupe) are restored - they were reverted by the
workflow-baseline protection and need the workflow-change-approved label
this time.

Version bumps to 2.0.0: the threshold argument's meaning changed on an
unchanged signature (probability, not score cutoff), and nns_boost output
adds class.levels.

Known pre-existing local-only failures (unchanged by this PR, skipped in
CI): the two Boston-housing live-R NNS.stack practical examples diverge
~0.7 percent from installed R 13.2.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AxBV5HmXHY5nCUvW9SwDvb
@OVVO-Financial
OVVO-Financial merged commit 4dc3d84 into main Jul 18, 2026
5 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants