Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature]: Add priori of equation form #494

Open
zhuyi-bjut opened this issue Dec 25, 2023 · 5 comments
Open

[Feature]: Add priori of equation form #494

zhuyi-bjut opened this issue Dec 25, 2023 · 5 comments
Labels
enhancement New feature or request

Comments

@zhuyi-bjut
Copy link

Feature Request

Hi!When I want to find some expressions from my data, I want his form to be specific. For example, I hope that the equation form obtained by pysr is C1 * x1 + ( C2 * x2 / F ), where F is the term to be found, C1 and C2 are constants to be found. This is equivalent to the form of a constrained expression tree, that is, adding a priori. Is it possible for today 's pysr to implement this function ?
Thanks!

@zhuyi-bjut zhuyi-bjut added the enhancement New feature or request label Dec 25, 2023
@zhuyi-bjut zhuyi-bjut changed the title Add priori of equation form[Feature]: [Feature]: Add priori of equation form Dec 25, 2023
@MilesCranmer
Copy link
Owner

Hi @prozhuyi,

The current method for doing this is exemplified here: https://astroautomata.com/PySR/examples/#9-custom-objectives. An easier way to do this is being discussed here: MilesCranmer/SymbolicRegression.jl#193. (Help is always appreciated!)

Cheers,
Miles

@zhuyi-bjut
Copy link
Author

@MilesCranmer Can SymbolicRegression.jl/issues/193 be used in pysr ? Is there this module in PySRRegressor ?
Since I want to add constraints like F = f ( x1, x2, x3 ) + g ( x4, x5 ) / f ( x1, x2, x6 ), examples/ # 9-custom-objectives does not seem to work.
Thanks!

@MilesCranmer
Copy link
Owner

MilesCranmer commented Jun 12, 2024

@zhuyi-bjut this is something in development at the moment. It likely won’t be ready for at the very least a few months. In the meantime I would try the custom objectives and post on the discussions page with any issues you are running into.

@zhuyi-bjut
Copy link
Author

Hi Miles @MilesCranmer , When I implement constraints such as F = f ( x1, x2, x3 ) / g ( x4, x5 ), the regularization term is constructed to constrain the child nodes. However, when I deal with symbolic nodes, I construct constraints according to PySR/examples/#9-custom-objectives : it actually forces prediction to be equal to f1 / g1, but does not pass ' / ' to loss. Therefore, in subsequent processing, it may be necessary to manually replace other symbols with ' / '. I wonder whether it is possible to constrain the symbol node to be equal to a certain symbol, such as tree.l = = ' / ', just like using the regularization term to constrain the child node. Can similar functions be implemented in the loss item ?
looking forward to your reply.
Thanks!

@MilesCranmer
Copy link
Owner

Assuming that / is the 4th operator you pass, you can add a constraint that tree.degree == 2 && tree.op == 4, otherwise return some large number.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants