Skip to content

Releases: MilesCranmer/PySR

v1.0.0

01 Dec 00:07
66ea60c
Compare
Choose a tag to compare

PySR v1.0.0 Release Notes

PySR 1.0.0 introduces new features for imposing specific functional forms and finding parametric expressions. It also includes TensorBoard support, along with significant updates to the core algorithm, including some important bug fixes. The default hyperparameters have also been updated based on extensive tuning, with a maxsize of 30 rather than 20.

Major New Features

Expression Specifications

PySR 1.0.0 introduces new ways to specify the structure of equations through "Expression Specifications", that expose the new backend feature of AbstractExpression:

Template Expressions

TemplateExpressionSpec allows you to define a specific structure for your equations. For example:

expression_spec = TemplateExpressionSpec(["f", "g"], "((; f, g), (x1, x2, x3)) -> sin(f(x1, x2)) + g(x3)")

Parametric Expressions

ParametricExpressionSpec enables fitting expressions that can adapt to different categories of data with per-category parameters:

expression_spec = ParametricExpressionSpec(max_parameters=2)
model = PySRRegressor(
    expression_spec=expression_spec
    binary_operators=["+", "*", "-", "/"],
)
model.fit(X, y, category=category)  # Pass category labels

Improved Logging with TensorBoard

The new TensorBoardLoggerSpec enables logging of the search process, as well as hyperparameter recording, which exposes the AbstractSRLogger feature of the backend:

logger_spec = TensorBoardLoggerSpec(
    log_dir="logs/run",
    log_interval=10,  # Log every 10 iterations
)
model = PySRRegressor(logger_spec=logger_spec)

Features logged include:

  • Loss curves over time at each complexity level
  • Population statistics
  • Pareto "volume" logging (measures performance over all complexities with a single scalar)
  • The min loss over time

Algorithm Improvements

Updated Default Parameters

The default hyperparameters have been significantly revised based on testing:

  • Increased default maxsize from 20 to 30, as I noticed that many people use the defaults, and this maxsize would allow for more accurate expressions.
  • New mutation operator weights optimized for better performance, along the new mutation "rotate tree."
  • Improved search parameters tuned using Pareto front volume calculations.
  • Default niterations increased from 40 to 100, also to support better accuracy (at the expense of slightly longer default search times).

Core Changes

  • New output organization: Results are now stored in outputs/<run_id>/ rather than in the directory of execution.
  • Improved performance with better parallelism handling
  • Support for Python 3.10+
  • Updated Julia backend to version 1.10+
  • Fix for aliasing issues in crossover operations

Breaking Changes

  • Minimum Python version is now 3.10, and minimum Julia version is 1.10
  • Output file structure has changed to use directories
  • Parameter name updates:
    • equation_fileoutput_directory + run_id
    • Added clearer naming for parallelism options, such as parallelism="serial" rather than the old multithreading=False, procs=0 which was unclear

Documentation

The documentation has a new home at https://ai.damtp.cam.ac.uk/pysr/

v0.19.4

23 Aug 03:07
339cc0a
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v0.19.3...v0.19.4

v0.19.3

29 Jul 02:37
3aee19e
Compare
Choose a tag to compare

What's Changed

Full Changelog: v0.19.2...v0.19.3

v0.19.2

15 Jul 22:45
6db7edc
Compare
Choose a tag to compare

What's Changed

Full Changelog: v0.19.1...v0.19.2

v0.19.1

15 Jul 14:41
ca00a36
Compare
Choose a tag to compare

What's Changed

Full Changelog: v0.19.0...v0.19.1

v0.19.0

22 Jun 02:19
1327c58
Compare
Choose a tag to compare

What's Changed

Full Changelog: v0.18.5...v0.19.0

v0.18.5

16 Jun 16:43
c2ab38b
Compare
Choose a tag to compare

What's Changed

New features

  • Per-variable custom complexities by @MilesCranmer in #649

    model.fit(X, y, complexity_of_variables=[1, 3])
    # run a search with feature 1 having complexity 1 and feature 2 with complexity 3
  • Automatically suggest similar parameters by @MilesCranmer in #620

Other

Full Changelog: v0.18.4...v0.18.5

Backend changes

New features

Other

Full Changelog: MilesCranmer/SymbolicRegression.jl@v0.24.4...v0.24.5

New Contributors

v0.18.4

04 May 22:33
6dfed1b
Compare
Choose a tag to compare

Frontend changes

  • Add dimensionless constants mode; update Python version constraints; upgrade juliacall to 0.9.20 (#608) (@MilesCranmer)
  • Fix sign typo in example docs (#611) (@hvaara)

Full Changelog: v0.18.3...v0.18.4

Backend changes

Full Changelog: MilesCranmer/SymbolicRegression.jl@v0.24.2...v0.24.4

New Contributors

v0.18.3

26 Apr 09:16
df788e5
Compare
Choose a tag to compare

Frontend changes

  • Automated update to backend: v0.24.3 by @github-actions in #605

Full Changelog: v0.18.2...v0.18.3

Backend changes

Full Changelog: MilesCranmer/SymbolicRegression.jl@v0.24.1...v0.24.2

v0.18.2

15 Apr 04:38
6ed46e1
Compare
Choose a tag to compare

Frontend changes

Full Changelog: v0.18.1...v0.18.2

Backend changes

Merged pull requests:

Closed issues:

Full Changelog: MilesCranmer/SymbolicRegression.jl@v0.24.1...v0.24.2