Exporting a fitted Earth models as a sympy expressionΒΆ

A simple example returning a sympy expression describing the fit of a sine function computed by Earth.

Out:

  Earth Model
----------------------------------------------------
Basis Function                 Pruned  Coefficient
----------------------------------------------------
(Intercept)                    No      129.933
h(x6+36.8964)                  No      -159.119
h(-36.8964-x6)                 Yes     None
h(x6+33.7644)*h(x6+36.8964)    No      -31.2137
h(-33.7644-x6)*h(x6+36.8964)   No      55.2555
h(x6+38.8328)*h(-36.8964-x6)   No      -26.2926
h(-38.8328-x6)*h(-36.8964-x6)  No      37.8735
h(x6+32.7734)                  No      294.063
h(-32.7734-x6)                 No      -102.518
h(x6+30.8809)*h(x6+32.7734)    Yes     None
h(-30.8809-x6)*h(x6+32.7734)   No      -29.2847
h(x6+34.5078)*h(x6+36.8964)    No      21.394
h(-34.5078-x6)*h(x6+36.8964)   Yes     None
h(x6+37.4374)*h(-32.7734-x6)   No      -15.3682
h(-37.4374-x6)*h(-32.7734-x6)  Yes     None
----------------------------------------------------
MSE: 95.2350, GCV: 100.3872, RSQ: 0.9812, GRSQ: 0.9802
Resulting sympy expression:
37.8735010361507*Max(0, -x6 - 38.8328464302324)*Max(0, -x6 - 36.8964359919483) - 26.2925536811075*Max(0, -x6 - 36.8964359919483)*Max(0, x6 + 38.8328464302324) + 55.2555446285282*Max(0, -x6 - 33.7643681543787)*Max(0, x6 + 36.8964359919483) - 15.3681937683734*Max(0, -x6 - 32.7734309073815)*Max(0, x6 + 37.437361535298) - 102.518379033784*Max(0, -x6 - 32.7734309073815) - 29.2847044482295*Max(0, -x6 - 30.8809078363996)*Max(0, x6 + 32.7734309073815) + 294.063440865261*Max(0, x6 + 32.7734309073815) - 31.2137142245201*Max(0, x6 + 33.7643681543787)*Max(0, x6 + 36.8964359919483) + 21.3939946424227*Max(0, x6 + 34.5077812314211)*Max(0, x6 + 36.8964359919483) - 159.11865251946*Max(0, x6 + 36.8964359919483) + 129.932616947174

import numpy
from pyearth import Earth
from pyearth import export

# Create some fake data
numpy.random.seed(2)
m = 1000
n = 10
X = 10 * numpy.random.uniform(size=(m, n)) - 40
y = 100 * \
    (numpy.sin((X[:, 6])) - 4.0) + \
    10 * numpy.random.normal(size=m)

# Fit an Earth model
model = Earth(max_degree=2, minspan_alpha=.5, verbose=False)
model.fit(X, y)

print(model.summary())

#return sympy expression
print('Resulting sympy expression:')
print(export.export_sympy(model))

Total running time of the script: (0 minutes 1.310 seconds)

Download Python source code: return_sympy.py
Download IPython notebook: return_sympy.ipynb