import numpy as np
import matplotlib.pyplot as plt
# Positions of the towers
torres = [0, 2, 10]
# 1. Define the Total Inefficiency Function (Sum of squared distances)
def ineficiencia(x):
return (x - torres[0])**2 + (x - torres[1])**2 + (x - torres[2])**2
# Create an array of x values (from km -2 to km 12 to see the whole landscape)
x_vals = np.linspace(-2, 12, 500)
y_vals = ineficiencia(x_vals)
# 2. Optimal point calculated by our derivative (x = 4)
x_optimo = 4
y_optimo = ineficiencia(x_optimo)
# 3. Create the plot
plt.figure(figsize=(10, 6))
# Plot the U-shaped parabola (The Loss Function)
plt.plot(x_vals, y_vals, label='Ineficiencia Total (Error Cuadrático)', color='#1f77b4', linewidth=2.5)
# Plot the position of the 3 towers as vertical lines on the floor (y=0)
for i, t in enumerate(torres):
plt.axvline(x=t, color='gray', linestyle='--', alpha=0.6)
plt.scatter(t, 0, color='black', s=120, zorder=5)
plt.text(t, -5, f'Torre {i+1}\n(km {t})', ha='center', fontsize=9, fontweight='bold')
# Mark the optimal location of the Logistics Center (The Minimum)
plt.scatter(x_optimo, y_optimo, color='red', s=150, zorder=5, label=f'Centro de Logística Óptimo (km {x_optimo})')
# Draw the horizontal tangent line at the minimum (Slope = 0)
x_tangente = np.linspace(2, 6, 50)
y_tangente = np.full_like(x_tangente, y_optimo)
plt.plot(x_tangente, y_tangente, color='red', linestyle='-', linewidth=2, label='Línea Tangente (Pendiente = 0)')
# Graph customization
plt.title('Optimización de Cercanía usando Error Cuadrático', fontsize=14, fontweight='bold', pad=15)
plt.xlabel('Kilómetro de la Carretera (Eje X)', fontsize=11)
plt.ylabel('Ineficiencia Total (Pérdida / Coste)', fontsize=11)
plt.xlim(-2, 12)
plt.ylim(-15, max(y_vals) + 10)
plt.grid(True, linestyle=':', alpha=0.6)
plt.legend(loc='upper center', fontsize=10)
# Show the chart
plt.tight_layout()
plt.show()Funciones de error y optimización convexa
machine learning, aprendizaje automatico, Python, algebra lineal, optimizacion, regresion lineal, clasificacion, estadistica
1 Máximos, Mínimos y la Pendiente Cero
Para buscar el punto óptimo de cualquier función, una herramienta es la derivada. Si visualizamos una función en una gráfica, los puntos más altos (máximos) y los más bajos (mínimos) tienen una característica geométrica común: su línea tangente es perfectamente horizontal.Matemáticamente, esto significa que en esos puntos de inflexión, la derivada es igual a cero:
\[\frac{df}{x} = 0\]
Si en un punto exacto la derivada es cero, significa que un pequeño incremento en \(x\) no altera en absoluto la salida de la función.
- Máximos/Mínimos Locales: Son las cimas o fondos de valles de una región. Si miras alrededor del punto, eres el punto más alto o bajo, pero si caminas más allá, puede haber montañas más grandes.
- Máximos/Mínimos Globales: Es el punto más alto absoluto o el punto más bajo absoluto de toda la función.
Para optimizar en Machine Learning, hay que entender que operamos con dos funciones distintas que interactúan entre sí. Vamos a tener una parámetros de entrada que pasarán por la función del modelo que darán una salida, en función de la salida tendremos un error. Entonces los mismos parámetros de entrada que han generado un error pasan por una función de error.
- Función del modelo: Usa unos parámetros de entrada (\(x\), o los pesos \(w\) del modelo) y genera una salida, que es la predicción (\(\hat{y}\)).
- Función de error: No mide la predicción, sino qué tan mala fue esa predicción. Mediante los parámetros del modelo, evalúa la distancia entre la salida del modelo y los datos reales, y genera una única salida en forma de número, ese número es el error.
La optimización en machine learning consiste en encontrar los parámetros de entrada o modelo que conducen al error mínimo, para ello, el error debe acercarse al mínimo global de la función.
2 Error cuadrático
Es la función de error más popular en el Machine Learning. Lo que hace es calcular la diferencia entre la predicción del modelo y el valor real, y elevar ese resultado al cuadrado.
\[\text{Error} = (Y_{\text{real}} - Y_{\text{prediccion}})^2\]
Si graficamos esta función de error, obtenemos una parábola. Esto tiene dos consecuencias:
- Castiga los errores grandes (Outliers): Si el modelo se equivoca por \(2\), el error es \(4\). Pero si se equivoca por \(10\), el error es \(100\). La pendiente (derivada) se vuelve empinada cuando el error es grande, lo que obliga al algoritmo de optimización a dar pasos grandes para corregir ese fallo.
- Es suave en el mínimo: Cerca del fondo del valle, donde el error es casi cero porque hay poca pendiente, la curva es muy suave. Esto significa que la derivada se va haciendo más y más pequeña de forma gradual, permitiendo que el optimizador “frene” suavemente al acercarse al óptimo.
Imagina que eres el ingeniero a cargo de construir un Centro de Logística en una carretera recta (Eje X). En esa misma carretera ya existen tres Torres de Control de Tráfico ubicadas en los kilómetros \(x = 0\), \(x = 2\) y \(x = 10\).El objetivo es que el Centro de Logística esté lo más cerca posible de las tres torres a la vez para que los camiones pierdan el menor tiempo posible viajando entre ellas.
Para medir la “pérdida de cercanía” (el error), la empresa de logística utiliza el criterio cuadrático porque los costes de combustible y el desgaste de los camiones se disparan de forma cuadrática con la distancia. Queremos minimizar la ineficiencia de transporte total.
La penalización por no estar exactamente al lado de una torre es el cuadrado de la distancia que los separa. Si colocamos el centro en la posición \(x\), nuestra función de ineficiencia total será:
\[\text{Ineficiencia}(x) = \underbrace{(x - 0)^2}_{\text{Distancia a Torre 1}} + \underbrace{(x - 2)^2}_{\text{Distancia a Torre 2}} + \underbrace{(x - 10)^2}_{\text{Distancia a Torre 3}}\]
Si desarrollamos los cuadrados:
\[(a - b)^2 = a^2 - 2ab + b^2\]
\[(x - 0)^2 = \mathbf{x^2}\] \[(x - 2)^2 = \mathbf{x^2 - 4x + 4}\] \[(x - 10)^2 = \mathbf{x^2 - 20x + 100}\]
\[\text{Ineficiencia}(x) = (x^2) + (x^2 - 4x + 4) + (x^2 - 20x + 100)\]
\[\text{Ineficiencia}(x) = 3x^2 - 24x + 104\]
Teniendo la función así, calcular la derivada con la Power Rule y la regla de la constante es sencillo:
\[\text{Ineficiencia}'(x) = 6x - 24\]
Al igualar a cero para buscar el fondo del valle, el despeje nos da el kilómetro óptimo:
\[6x - 24 = 0 \implies 6x = 24 \implies x = \frac{24}{6} = \mathbf{4}\]
Si analizamos las distancias finales desde el kilómetro 4:
- El centro logístico queda a 4 km de la primera torre.
- Queda a solo 2 km de la segunda torre.
- Queda a 6 km de la tercera torre.