Ajustar una función de paso en Python
Las funciones escalonadas son métodos con gráficos que parecen una serie de pasos. Consisten en una serie de segmentos de línea horizontales con intervalos entre ellos y también pueden denominarse funciones de escalera.
En cualquier intervalo dado, las funciones escalonadas tienen un valor constante, creando una línea horizontal en el gráfico. Los intervalos hacen los saltos entre cada segmento de línea.
Las funciones de paso son útiles cuando se generan gráficos discretos y se usan ampliamente en gráficos vectorizados en Python. Se pueden implementar en Python usando numpy
.
En este artículo se da una demostración simple de las funciones escalonadas.
Ajustar una función de paso en Python
Para este ejemplo se utilizará la versión 3.10.6 de Python. Además, necesitamos instalar las bibliotecas requeridas, lo cual, en nuestro caso, es numpy.
Numpy se puede instalar ejecutando el siguiente comando.
pip install numpy
Ahora necesitamos scipy
para optimizar y ajustar los datos a los gráficos. Se puede instalar usando el siguiente comando.
pip install scipy
Generaremos una función de paso simple usando un conjunto de datos para este ejemplo. Comenzando, importe numpy
y scipy
al entorno usando las siguientes declaraciones:
import numpy as np
import scipy
Usaremos el método numpy linspace
para este ejemplo para generar un pequeño conjunto de datos. El siguiente fragmento de código puede generar este conjunto de datos:
x = np.linspace(0, 10, 101)
Necesitamos generar una función heaviside
para mostrar el trazado de la escalera. Según el requisito del caso de uso, se puede generar utilizando numpy o un método personalizado.
Para crear la función, usaremos el método numpy heaviside
para este ejemplo.
y = np.heaviside((x - 5), 0.0)
Este método genera el valor heaviside
de acuerdo con el siguiente gráfico.
0 if x1 < 0
heaviside(x1, x2) = x2 if x1 == 0
1 if x1 > 0
Usaremos curve_fit
de la biblioteca scipy para generar los args
con puntos de datos óptimos.
curve_fit(sigmoid, x, y)
Ahora que hemos aclarado y entendido el flujo, el guión final se verá así:
import numpy as np
from scipy.special import expit
from scipy.optimize import curve_fit
x = np.linspace(0, 10, 101)
y = np.heaviside((x - 5), 0.0)
def sigmoid(x, x0, b):
return expit((x - x0) * b)
args, cov = curve_fit(sigmoid, x, y)
print(args)
Podemos monitorear los resultados de este trazado usando matplotlib
. Agregar el fragmento de trazado y el código final será como se muestra a continuación.
import matplotlib.pyplot as plt
import numpy as np
from scipy.special import expit
from scipy.optimize import curve_fit
x = np.linspace(0, 10, 101)
y = np.heaviside((x - 5), 0.0)
def sigmoid(x, x0, b):
return expit((x - x0) * b)
args, cov = curve_fit(sigmoid, x, y)
plt.scatter(x, y)
plt.plot(x, sigmoid(x, *args))
plt.show()
print(args)
Producción:
I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.
LinkedIn