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?
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
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?
– J. M.'s missing motivation
Jul 27 '15 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.)
– Szabolcs
Jul 28 '15 at 07:12
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.