Python Forum

Full Version: how to fit an exponential function to multiple data
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I would like to fit an exponential function based on data points of more than one trend. Is this possible?
The code below creates a fit for every column in the table but if I want to group these columns according to a certain criteria so say the points in column A, B and C needs to learn the same exponential fit, i am not very sure how to do incorporate that requirement here. Thanks.

# Initial parameter guess, just to kick off the optimization
init = (0.1, 0.1)

# Place to store function parameters for each column
col_params = {}

def func(x, a, b):
    return a*np.exp(-b*x)

# Curve fit each column
for col in df.columns:
    # Get x & y
    x = df.index.astype(float).values
    y = df[col].values
    
    # Curve fit column and get curve parameters
    params = curve_fit(func, x, y, init)
      
    # Store optimized parameters
     col_params[col] = params[0]
        

# Extrapolate each column
for col in df.columns:
    # Get the index values for NaNsY in the column
    x = df[pd.isnull(df[col])].index.astype(float).values 
    y = df[col].values

    # Extrapolate those points with the fitted function
    df[col][x] = func(x, *col_params[col])
    plt.plot(x1,y,func(x, *col_params[col]),'g--')
            
Not sure about what you are trying to get, but take a look at RANSAC algorithm. It allows to find the best fit, as if A, B and C in your case were undistinguished. There is a Python implementation of RANSAC. However, it uses a while loop when finding the best combination, so, it would be probably better (more efficient) to rewrite all code using Cython (or C).