Ajustar una función de paso en Python

Fariba Laiq 15 febrero 2024
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:

Gráfico de función de paso de Python

Fariba Laiq avatar Fariba Laiq avatar

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

Artículo relacionado - Python Function