Comments (4)
I have done something like that in the past.
You have a good catch of mutating a single tree at the time: as the search space is larger with multi-trees, of course less likely to get multiple lucky simultaneous mutations.
Makes sense to assume all solutions have same number of trees if you know this a priori, but that needs not always need to be the case. E.g., you might want to do SR for interpretable dimensionality reduction from R^d (d original features) to R^k (k latent features), where you want k to be small to have fewer trees to interpret, but large enough to get good reconstruction accuracy.
from symbolicregression.jl.
This could also be a nice way to get vector expressions:
SymbolicRegression.@form F = [f1(x1, x2, x3), f2(x1, x2, x3), f3(x1, x2, x3)]
from symbolicregression.jl.
I have been thinking more about how this could work. Programmatically I think the easiest way forward is as follows.
- Create a way to "freeze" a set of nodes in a tree. Those nodes cannot be mutated or used in crossovers.
- Option 1: a new custom tree type
FrozenNode <: AbstractNode
(SymbolicML/DynamicExpressions.jl#53) - Option 2: maybe just storing custom metadata in
Node{T,schema}
?
- Option 1: a new custom tree type
- You would use a regular
Node
type to store all expression information. For two subexpressionsf
andg
, you would haveroot.l
storingf
, androot.r
storingg
. Sinceroot
would be labeled as frozen, it would not be reduced.- However, you could still crossover the contents of
f
with the contents ofg
. Just you couldn't crossoverroot
itself.
- However, you could still crossover the contents of
- Rewrite functions like
eval_tree_array
,string_tree
,node_to_symbolic
to work with a custom functional form.
It will still take a bit of work to get this to work. But I think this is the easiest way to embed it in SymbolicRegression.jl without breaking anything for existing functionality.
from symbolicregression.jl.
Found this issue after submitting a quite similar feature request for composite PySR regressor in MilesCranmer/PySR#514
For the evolution: at each mutation, perhaps one random tree of the multi-tree would be mutated or crossed-over. There would be an assumption that all individuals have the same multi-tree structure.
I wonder when different trees are degenerate, would correlated changes (mutating all sub-trees together) actually help to optimize faster, even though with a larger search space?
- Create a way to "freeze" a set of nodes in a tree.
Very interesting approach. If I understand correctly, would it be easy for this to enforce, say the final sub-tree is at most a bivariate function (i.e.,
from symbolicregression.jl.
Related Issues (20)
- [Feature]: Faster optimization of constants HOT 1
- SymbolicRegression.jl paper is out!
- [Feature]: can I design a custom operator for sequence data? HOT 1
- [Bug]: Threading always seems slower than multiprocessing
- [BUG]: method error when used in the debugger HOT 20
- Should use `errormonitor` on tasks for distributed mode
- [Feature]: MLJ integration HOT 3
- [Feature]: ternary operators HOT 3
- Should use scale of data when mutating or creating constants
- [BUG]: `Options` not updated in `MLJ.fit`
- Garbage collection too passive on worker processes HOT 3
- [Feature]: Including Units Evaluating Model Performance and Controlling Iterative Models Example :MLJ HOT 10
- Whether SR.jl can Implement this ARZ algorithm ? HOT 1
- Silence warnings for Optim.jl HOT 1
- Multidimensional equations HOT 4
- How do I set up a basis function consisting of three different inputs x, y, z? HOT 2
- Unique solution of Regression HOT 1
- How can I set the maximum number of nests? HOT 4
- [Feature]: Proper caching
- [Feature]: Training on high dimensions X HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from symbolicregression.jl.