Latest release | Documentation | Build status | Coverage |
---|---|---|---|
Distributed High-Performance symbolic regression in Julia.
Check out PySR fora Python frontend.
Install in Julia with:
using Pkg
Pkg.add("SymbolicRegression")
The heart of this package is theEquationSearch
function, which takesa 2D array (shape [features, rows]) and attemptsto model a 1D array (shape [rows])using analytic functional forms.
Run distributed on four processes with:
using SymbolicRegression
X = randn(Float32, 5, 100)
y = 2 * cos.(X[4, :]) + X[1, :] .^ 2 .- 2
options = SymbolicRegression.Options(
binary_operators=(+, *, /, -),
unary_operators=(cos, exp),
npopulations=20
)
hallOfFame = EquationSearch(X, y, niterations=5, options=options, numprocs=4)
We can view the equations in the dominatingPareto frontier with:
dominating = calculateParetoFrontier(X, y, hallOfFame, options)
We can convert the best equationto SymbolicUtils.jlwith the following function:
eqn = node_to_symbolic(dominating[end].tree, options)
println(simplify(eqn*5 + 3))
We can also print out the full pareto frontier like so:
println("Complexity\tMSE\tEquation")
for member in dominating
size = countNodes(member.tree)
score = member.score
string = stringTree(member.tree, options)
println("$(size)\t$(score)\t$(string)")
end
See https://astroautomata.com/SymbolicRegression.jl/stable/api/#Options