In version 10.2 there is a new experimental function: FindFormula[]
.
I suspect that a genetic programming algorithm (symbolic regression) is behind this new feature, but I can't find any references.
Question
- What is behind this new function?
Mathematica Stack Exchange is a question and answer site for users of Wolfram Mathematica. It only takes a minute to sign up.
Sign up to join this communityIn version 10.2 there is a new experimental function: FindFormula[]
.
I suspect that a genetic programming algorithm (symbolic regression) is behind this new feature, but I can't find any references.
Question
The Experimental function FindFormula[]
at the moment is using a combination of different methods: it combines non linear regression with Markov chain Monte Carlo methods (e.g. Metropolis–Hastings algorithm). In the future (possibly in V$10.3$) there will be an option allowing the user to choose which method to use.
I doubt that this is very robust. Consider a simple change in the DE example in the Documentation:
sol = y /. NDSolve[{y'[x] == y[x] Cos[x], y[0] == 2}, y, {x, -5, 300}][[1]];
times = N[Range[-5, 600]/9];
data = Transpose[{times, sol[times] + RandomReal[0.05, Length[times]]}];
lp = ListPlot[data, PlotRange -> All]
Now
FindFormula[data, x, 1, TargetFunctions -> {Exp, Sin, Cos}]
thinks the best solution is 2.27414 Sin[x] + 2.5479
. Whereas a much better solution, obviously compatible with the selected TargetFunctions, is 2 Exp[Sin[x]]
.
FindFormula[]
even smart enough to consider composing TargetFunctions
?
$\endgroup$
Jul 27, 2015 at 13:47
Table[..., {20}]
and very likely at least one of the results will be $2 e^{\sin x}$. (But requesting 20 functions within the FindFormula
doesn't work nearly as well.)
$\endgroup$
The following reveals definitions
<< GeneralUtilities`
PrintDefinitions@FindFormula
As usual one can click the symbols to find definitions of functions "further down". It should also be noted that FindFormula
is listed in the Machine Learning guide, which corresponds to symbol names like SymbolicMachineLearning`PackageScope`ImputArgumentsTestFindFormula
shown further down by PrintDefinitions
.