optimize fit error curve_fit python numpy scipy curve-fitting

python - fit - ajuste de curva de nudo/scipy de pitón



numpy fit (2)

Tengo algunos puntos y estoy tratando de ajustar la curva para estos puntos. Sé que existe la función scipy.optimize.curve_fit , pero no entiendo la documentación, es decir, cómo usar esta función.

Mis puntos: np.array([(1, 1), (2, 4), (3, 1), (9, 3)])

¿Alguien puede explicar cómo hacer eso?


Le sugiero que comience con un ajuste polinomial simple, scipy.optimize.curve_fit intenta ajustar una función f que debe conocer a un conjunto de puntos.

Este es un simple ajuste polinómico de 3 grados usando numpy.polyfit y poly1d , el primero realiza un ajuste polinomial de mínimos cuadrados y el segundo calcula los nuevos puntos:

import numpy as np import matplotlib.pyplot as plt points = np.array([(1, 1), (2, 4), (3, 1), (9, 3)]) # get x and y vectors x = points[:,0] y = points[:,1] # calculate polynomial z = np.polyfit(x, y, 3) f = np.poly1d(z) # calculate new x''s and y''s x_new = np.linspace(x[0], x[-1], 50) y_new = f(x_new) plt.plot(x,y,''o'', x_new, y_new) plt.xlim([x[0]-1, x[-1] + 1 ]) plt.show()


Primero tendrá que separar su matriz numpy en dos matrices separadas que contienen valores xey.

x = [1, 2, 3, 9] y = [1, 4, 1, 3]

curve_fit también requiere una función que proporcione el tipo de ajuste que le gustaría. Por ejemplo, un ajuste lineal usaría una función como

def func(x, a, b): return a*x + b

scipy.optimize.curve_fit(func, x, y) devolverá una matriz numpy que contiene dos arrays: la primera contendrá los valores de b que mejor se ajusten a sus datos, y la segunda será la covarianza de los parámetros de ajuste óptimos.

Aquí hay un ejemplo para un ajuste lineal con los datos que proporcionó.

import numpy as np from scipy.optimize import curve_fit x = np.array([1, 2, 3, 9]) y = np.array([1, 4, 1, 3]) def fit_func(x, a, b): return a*x + b params = curve_fit(fit_func, x, y) [a, b] = params[0]

Este código devolverá a = 0.135483870968 y b = 1.74193548387

Aquí hay un diagrama con sus puntos y el ajuste lineal ... que claramente es malo, pero puede cambiar la función de ajuste para obtener el tipo de ajuste que desee.