Repository navigation
Conversation
- algorithms/pir/install.sh: install tag v3.6.0 (was v3.5). - experiment/methods/pir/regressor.py: pass gates="all" to the engine; gates is an explicit constructor argument so get_params() records it. The vanilla engine configuration is unchanged. - algorithms/pir/metadata.yml: describe the gates; add the software DOI; drop the outdated Tier A figure from the description. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019mo31AVugYdfXietM73iWZ
|
I've updated this PR from 3.6.0 to pir-engine 3.7.0 (released today, DOI 10.5281/zenodo.23631107), so that the next benchmark run uses the current version. One new commit:
What 3.7.0 adds. After the engine and the gates, an optional safeguard compares the final formula with a ridge-regression linear model and the mean. A formula with training R² ≥ 0.999 is always kept. Otherwise the linear model replaces it only if its 5-fold cross-validated R² is higher by more than 0.05, and the mean is returned if both are below 0. The rules were fixed before any benchmark run. Also: a memory cap in the exponential gate (it ran out of memory on wide datasets), and safe symbol names for column names that aren't valid identifiers (e.g. Checks.
No dataset solved by an earlier version is lost at any noise level. On the 120 black-box datasets I could download (one seed, no tuning), median test R² goes from −0.02 (3.6.0) to 0.44 (3.7.0), with no out-of-memory failures and no dataset worse. No rush. Happy to adjust anything. |
This updates the
pirmethod to pir-engine 3.6.0, which adds optional fallback "gates" that run after the classical engine. The engine itself and its configuration are unchanged.Changes
algorithms/pir/install.sh: install tagv3.6.0(wasv3.5).experiment/methods/pir/regressor.py: passgates="all"to the engine.gatesis an explicit constructor argument, so it is recorded byget_params().algorithms/pir/metadata.yml: describe the gates, add the software DOI, and remove an outdated benchmark figure from the description.What the gates do (tried in this order, only when the engine's model is not already exact)
P(x)/Q(x): accepted only if it reproduces the data exactly (max relative error < 1e-6) and beats the engineC*exp(sum of monomials): same exactness ruleC*prod x_j**(p/q): exponents snapped to simple fractions; accepted only if its training MSE is no worse than the engine'sAny error inside a gate keeps the engine's model. All thresholds are fixed in the engine.
Checks
ruff check,ruff format --checkandscripts/typecheck.pypass locally.evaluate_model.py, scored withassess_symbolic_model.pyfrom current master 2aabbb6, seeds 23654 and 78901). These are my own runs, not official results:(symbolic solution counts out of 119; no dataset solved by v3.5 was lost at any level)
Happy to adjust anything.
🤖 Generated with Claude Code
https://claude.ai/code/session_019mo31AVugYdfXietM73iWZ