El asombroso mundo de las curvas de nivel y Python
Una curva de nivel es un concepto que resulta de la intersección de una superficie:
Z = f(x,y) con un plano Z = k donde k es una constante.
Cuando me tope en análisis II con este concepto me preguntaba: ¿Para qué? ¿Por qué es útil comprender esto? ¿Dónde se aplica? Las respuestas a estas preguntas no llegaron de forma inmediata pero hoy en día encuentro varios campos de aplicación y sin duda es una herramienta teórica que es útil comprender. Recuerden que la teoría permite expandir tu conocimiento y te va a dar herramientas para abstraer conceptos y comprender mejor problemáticas futuras.
Algunos campos de aplicación:
Pero también resulta útil comprenderlas en el contexto de Machine Learning. Por ejemplo, en la visualización de superficies de costo en problemas de optimización o bien para analizar el comportamiento de modelos en espacios de características bidimensionales. Estas curvas de nivel pueden representar la frontera de decisión de un modelo.
Creo que es más fácil visualizar el concepto con un ejemplo así que voy a acudir al hermoso paraboloide en el espacio:
z = x^2 + y^2
En definitiva, la intersección entre un plano constante (z = k) y una superficie, será una curva de nivel f: R^2 -> R, es decir, esta curva será plana y a cualquier punto en el que nos paremos de ese plano, nos devolverá un valor Real.
Recomendado por LinkedIn
Es interesante ver como podemos resolver este problema utilizando 🐍.
Para esto, tomaremos nuestra función de arriba y la llamaremos g(x,y)
Y la tomaremos en el intervalo D = [-2;2] x [-2;2]
g(x,y) = x^2 + y^2
import numpy as np
import matplotlib.pyplot as plt
xx = np.linspace(-2, 2)
yy = np.linespace(-2,2)
X, Y = np.meshgrid(xx, yy)
Z = X**2 + Y**2
plt.contour(X, Y, Z)
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Representación de f(x,y)')
plt.show()
Ahora tomemos otra función más divertida y ver como podemos dibujar los contornos.
f(x,y) = cos(-xy) + sinh(x+ y + 1) + log((3+ x^2) / (1+y^2)
Y la tomaremos el mismo intervalo D = [-2;2] x [-2;2]
(esta función la tome prestada de nuestra querida internet)
Elegimos este intervalo porque por fuera la función se comporta de forma medio extraña, podes dibujarla en geogebra y ver como es el gráfico
Al igual que arriba, vamos trabajar con numpy para crear el mesh y tener una representación de las funciones.
import numpy as np
import matplotlib.pyplot as plt
from numpy import cos, sinh, log
xx = np.linspace(-2, 2)
yy = np.linespace(-2,2)
X, Y = np.meshgrid(xx, yy)
Z = cos(-10 * X * Y) + sinh(X + Y) - log((3 + X ** 2) / (1 + Y ** 2))
plt.contour(X, Y, Z)
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Representación de f(x,y)')
plt.show()
plt.contourf(X, Y, Z, 15)
plt.show()
Y también podemos trazar contornos