Scipy optimizar curve_fit

Scipy optimizar curve_fit
La función de mapeo curve_fit () permite flexibilidad y ofrece el control para definir el tipo de curva donde se lleva a cabo el proceso de optimización para encontrar los ciertos parámetros de la función optimizada. El método curva ajuste () suministrado por Scipy se cubrirá en este artículo. Luego, con la ayuda de ejemplos, veremos cómo usar la función curva ajuste ().

Al final de este tutorial, descubriremos cómo realizar el ajuste de la curva en Python y cómo el ajuste de la curva utiliza los parámetros optimizados en una función que mapea los ejemplos de entrada a la salida. Pero primero, nos familiaricemos con los conceptos básicos de Curve_Fit ().

Función de ajuste de la curva de Python Scipy Optimize utilizada para?

La función de ajuste de la curva de Python Scipy Optimize se usa ampliamente para obtener los parámetros de mejor ajuste. La función curve_fit () es una función de optimización que se utiliza para encontrar el conjunto de parámetros optimizados para una función establecida que se ajusta perfectamente al conjunto de datos proporcionado.

La función curva ajuste () en scipy es una biblioteca de código abierto, que se usa para ajustar curvas con mínimos cuadrados no lineales. Como argumento, el curve_fit () toma los mismos datos de entrada, datos de salida y el nombre de la función de mapeo que se empleará. La función de mapeo debe aceptar muestras de datos de entrada, así como un conjunto de parámetros.

A diferencia del aprendizaje supervisado, la función de ajuste de curva necesita que defina las funciones que asignan perfectamente las entradas en las salidas. La función de mapeo puede ser simplemente una línea recta como la regresión lineal o una línea curva como una regresión polinomial, o podría ser cualquier otra cosa.

Sintaxis de Python Scipy.optimizar.curva de ajuste()

La sintaxis Scipy Curve Fit () se proporciona a continuación.

# Scipy.optimizar.curve_fit (f, x-data, data y, sigma = ninguno, p0 = ninguno)

Curve_fit () toma algunos parámetros requeridos y algunos parámetros opcionales. La 'F' es una función de modelo, F (A, ...). El primer argumento que se necesita debe ser la variable independiente, y los argumentos restantes deben ser los parámetros para adaptarse.

El parámetro 'X-Data' es un parámetro similar a la matriz, que es una variable independiente donde se miden los datos. El 'Data Y' es otro parámetro similar a la matriz, que es una variable dependiente también conocida como salida de la función.

El 'Sigma' es un parámetro opcional que determina la incertidumbre en 'Y-Data'. El valor de 'Sigma' podría ser simple 'Ninguno', 'secuencia M-longitud o' MXM Array '. El parámetro 'P0' es una suposición inicial de n longitud para los parámetros. Es un parámetro opcional y, por lo tanto, si no se proporciona, entonces el valor inicial será 1.

La función curve_fit () devolverá los dos valores; Popt y PCov. El 'Popt' es una matriz que representa los valores óptimos para los parámetros para minimizar la suma de los residuos al cuadrado. Al mismo tiempo, el 'PCOV' es la matriz 2D que representa la covarianza estimada de 'Popt'.

Además, plantea las tres excepciones; error de valor, error de tiempo de ejecución y advertencia de optimización. El 'error de valor' se arroja cuando se utiliza los datos X o los datos Y, o si se utiliza algún método incompatible.

El 'error de tiempo de ejecución' se arroja cuando falla la minimización de mínimo cuadrado. Y la 'advertencia de optimización' se plantea cuando la covarianza del parámetro no se puede estimar.

Ejemplo 1:

En el primer ejemplo, dibujaremos una línea recta que se ajuste a nuestros datos proporcionados para representar la expresión del modelo lineal. Después de importar las bibliotecas de Python requeridas, hemos usado Res2 = One*Res1+Dos ecuación para crear un conjunto de datos de 30 puntos.

Para que el conjunto de datos sea más realista, hemos agregado algo de ruido gaussiano a los valores de res2. Entonces, usamos el Scipy.optimizar.Técnica Curve Fit () para estimar los valores de los parámetros 'uno' y 'dos'. Aquí está el código de programación completo del modelo que puede seguir.

importar numpy como p
Importar matplotlib.Pyplot como MTB
importación
de scipy import optimizar
Def func (res1, uno, dos):
devolver uno*res1 + dos
res1 = P.linspace (inicio = -40, parada = 12, num = 30)
res2 = func (res1, 4, 2)
pag.aleatorio.semilla (4)
ruido = 10*p.aleatorio.Normal (tamaño = res2.tamaño)
res2 = res2 + ruido
Popt, Cov = Scipy.optimizar.curve_fit (func, res1, res2)
uno, dos = Popt
x_new_value = P.Arange (min (res1), 20, 5)
y_new_value = func (x_new_value, uno, dos)
mtb.dispersión (res1, res2, color = "rojo")
mtb.tram (x_new_value, y_new_value, color = "púrpura")
mtb.xlabel ('x')
mtb.Ylabel ('Y')
Imprimir ("Valor estimado de uno:"+ Str (uno))
Imprimir ("Valor estimado de dos:" + Str (dos))
mtb.espectáculo()

A continuación, puede encontrar el resultado del código adjunto anteriormente. Los puntos rojos en la pantalla resultante representan los puntos de datos reales del conjunto de datos.

Por otro lado, la línea púrpura es la curva que se ajusta al conjunto de datos utilizando el SciPy.optimizar.Método Curve Fit (). Además, también proporciona el valor estimado de ambos parámetros 'uno' y 'dos', que también es calculado por SciPy.optimizar.Técnica Curve Fit ().

Ejemplo 2:

En el segundo ejemplo, explicaremos el uso de los Scipy.optimizar.método curve_fit () para trazar la curva exponencial que se ajusta a nuestros datos.

Aquí, hemos usado Res2 = One*Res2+One Ecation para crear un conjunto de datos de diferentes puntos. El código restante del programa es el mismo que el ejemplo anterior. Aquí está el código para trazar la curva exponencial con la función curve_fit ().

Importar numpy como p
Importar matplotlib.Pyplot como MTB
importación
de scipy import optimizar
Def func (res1, uno, dos):
devolver uno*P.exp (dos*res1)
res1 = P.Linspace (12, 20, 30)
res2 = func (res1, 0.4, 0.3)
Imprimir (Res2)
ruido = 100*p.aleatorio.Normal (tamaño = res2.tamaño)
res2 = res2 + ruido
Imprimir (Res2)
Popt, Cov = Scipy.optimizar.curve_fit (func, res1, res2)
uno, dos = Popt
x_new_value = P.Arange (Min (Res1), Max (Res1), 1)
y_new_value = func (x_new_value, uno, dos)
mtb.dispersión (res1, res2, color = "verde")
mtb.tram (x_new_value, y_new_value, color = "azul")
mtb.xlabel ('x')
mtb.Ylabel ('Y')
Imprimir ("Valor estimado de uno:"+ Str (uno))
Imprimir ("Valor estimado de dos:" + STR (dos))
mtb.espectáculo()

Veamos la salida.

Aquí puede ver la representación gráfica.

Ejemplo 3:

En el tercer ejemplo, trazamos las dos curvas simultáneamente alrededor de la línea real para ver la diferencia entre ambos valores. Vea el código a continuación.

En el código, hemos importado los módulos y definimos la función (indicada como func_one). Después de eso, hemos establecido los valores y llamado la función Curve_Fit para trazar esos valores en el gráfico.

Importar matplotlib.Pyplot como MTB
importar numpy como p
De Scipy.Optimizar la importación curve_fit
Def func_one (res1, uno, dos, tres):
devolver uno * P.exp (-two * res1) + tres
res1_data = P.Linspace (0, 2, 40)
res2 = func_one (res1_data, 1.5, 1.2, 0.6)
RNG = P.aleatorio.default_rng ()
res2_noise = 0.2 * rng.Normal (tamaño = res1_data.tamaño)
res2_data = res2 + res2_noise
mtb.Plot (res1_data, res2_data, 'b-', etiqueta = 'data')
Popt, pCov = curve_fit (func_one, res1_data, res2_data)
popt
mtb.tram (res1_data, func_one (res1_data, *popt), 'r-',
etiqueta = 'Fit: One =%5.3f, dos =%5.3f, tres =%5.3f ' % Tuple (Popt))
Popt, pCov = curve_fit (func_one, res1_data, res2_data, bounds = (0, [3., 1., 0.5])
popt
mtb.tram (res1_data, func_one (res1_data, *popt), 'g--',
etiqueta = 'Fit: One =%5.3f, dos =%5.3f, tres =%5.3f ' % Tuple (Popt))
mtb.xlabel ('x')
mtb.Ylabel ('Y')
mtb.leyenda()
mtb.espectáculo()

La salida está debajo de donde puede ver las curvas resultantes.

Conclusión

En este artículo, le hemos dado todos los detalles sobre el uso de la función cuver_fit () proporcionada por Scipy. Hemos comenzado con la introducción de la función curve_fit () y luego hemos aprendido la sintaxis de la función curve_fit (). Después de eso, hemos visto algunos ejemplos útiles de cómo se usa la función curve_fit () para trazar las líneas y curvas en Python. Puede ejecutar estos ejemplos por su cuenta para ver la salida usted mismo y una mejor comprensión general de todo el concepto.