Skip to content

Hunde los Barcos de la Incertidumbre: Regresión Lineal Explicada con el juego del Submarino

mayo 25, 2024
Portada sobre la regresión lineal simple

¿Alguna vez te has preguntado cómo se relaciona el clásico juego de mesa “Battle Ship” con la ciencia de datos? En esta entrada, vamos a desvelar los misterios de la regresión lineal por el método de descenso de gradiente utilizando analogías didácticas con este popular juego.

Imagina que cada tiro en “Battle Ship” es un intento de predecir una posición en el plano cartesiano. Aprenderás cómo el plano cartesiano, la ecuación de la recta y el error cuadrático medio son conceptos clave para hundir los barcos de la incertidumbre en tus datos. Al final de esta lectura, no solo entenderás estos conceptos fundamentales, sino que también podrás aplicarlos en tus propios análisis de datos de manera eficiente y divertida.

¡Acompáñanos en esta travesía donde combinamos estrategia y ciencia para dominar la regresión lineal!

La Regresión Lineal dentro del Aprendizaje Supervisado en IA

Infografía del aprendizaje supervisado

La regresión lineal simple es una técnica esencial en el ámbito del aprendizaje supervisado. Este tipo de aprendizaje se basa en el uso de datos etiquetados, donde cada observación incluye tanto las características como las etiquetas correspondientes.

Las características son los atributos o variables independientes que describen cada observación en un conjunto de datos. Por ejemplo, en un estudio de precios de casas, las características pueden incluir el tamaño de la casa, el número de habitaciones y la ubicación. Las etiquetas, por otro lado, son los valores de salida o variables dependientes que queremos predecir, como el precio de la casa. Estas etiquetas están asociadas a cada observación y se utilizan para entrenar el modelo predictivo en técnicas de aprendizaje supervisado.

La imagen ilustra este proceso: se utilizan características (como el tamaño de una casa) junto con datos etiquetados (como el precio de la casa) para entrenar un modelo predictivo.

Una vez entrenado, el modelo puede predecir valores continuos para nuevas observaciones basándose en las características introducidas. Esta técnica es altamente valorada por su simplicidad, eficiencia y facilidad de interpretación, lo que la convierte en una herramienta fundamental para quienes inician en el análisis predictivo.

Conceptos básicos de la regresión lineal

Durante los años 80s existía un popular juego de mesa llamado “El Submarino” (BattleShip en ingles). Este juego consistía en que cada jugador tenía un tablero, que el otro jugador no podía ver. Este tablero contenía coordenadas, y cada jugador debía tratar de adivinar las coordenadas en donde el jugador contrario había colocado un submarino. En caso de acertar, se decía que se undía ese submarino. El primero en dejar sin submarinos a su contrincante ganaba.

Este juego es muy interesante, debido a que es justo lo que buscamos hacer cuando intentamos ajustar una regresión lineal. Lo que buscamos es acertar a los puntos con datos. En la imagen anterior podemos considerar el cuadro cartesiano con los ejes X y Y como un sistema de coordenadas que nos permita hundir esos submarinos. En este sistema X representa la línea horizontal, y Y a la línea vertical, también llamada ordenada al origen. Para representar un punto (o en este caso submarino) en este sistema nos bastan dos puntos. Por ejemplo (1,2). El primer número corresponde al eje X y el segundo al eje Y. El lugar en donde se interceptan estas dos coordenadas, es en donde se encuentra el punto.

La ecuación de la línea recta

Hemos visto como es posible emplear el sistema de coordenadas del plano cartesiano para ubicar puntos en él y poder así atinar a los submarinos uno a uno. Pero es posible atinar a varios submarinos al mismo tiempo. Una estrategia más efectiva en este caso es emplear una recta, debido a que esta se extiende por el espacio y es capaz de intersectar varios puntos a la vez.

Para poder extender una línea en el plano carteciano nos basta con emplear dos parámetros. Los parámetros son valores que el modelo ajusta durante el proceso de entrenamiento para definir la relación entre las variables independientes y la variable dependiente.

En la ecuación de la regresión lineal simple ( y = C + B*X ), los parámetros son ( C ) (pendiente) y ( B ) (intercepto u ordenada al origen). El valor de C corresponde al valor de Y cuando X = 0, razón por la cual se le denomina ordenada al origen. En cambio, B representa el valor multiplicativo por el que se incrementará cada unidad de Y.

Por ejemplo si tomamos en cuenta los parámetros C = 1 y B = 2, entonces Y = 1 + 2 * X. Al ir cambiando los puntos de X en esta ecuación iremos trazando los distintos puntos por los que atraviesa la línea. Por ejemplo para X = 0 tendremos Y = 1 + 2 * 0 = 1.

El siguiente código muestra como implementar esta ecuación en Python:

import matplotlib.pyplot as plt

# Creamos los datos de x y y
# Establecemos un rango de valores del 0 al 11 para x
x = range(12)

# Calculamos los valores de y empleando los parámetros de la recta C = 1 y B = 2
y = [1 + 2 * i for i in x]

# Creamos la gráfica
plt.plot(x, y, 'o-')

# Mostramos la gráfica
plt.show()

Intersectando puntos con la línea recta

Ahora que ya conocemos la ecuación de la recta, nos es posible atinar a varios puntos (o submarinos) empleando dos parámetros para proyectar una línea y atinar a varios en lugar de emplear dos coordenadas e intersectar a solo uno.

En el ejemplo mostrado en la imagen vemos 5 puntos distribuidos en el plano: (1,1), (2,2), (3,5), (4,6) y (5,5). Tomando una línea recta con los parámetros C = 0 y B = 1 es posible intersectar a tres de esos puntos. De esta forma empleando solo dos parámetros hemos atinado exactamente a tres puntos.

Error cuadrático medio (MSE)

En el ejemplo anterior hemos atinado directamente a tres puntos en el plano cartesiano. Pero nuestro verdadero objetivo es acercar la línea recta lo más posible a todos los puntos. El objetivo de la regresión lineal es ser capaz de predecir en donde se ubicaran los puntos nuevos, es decir los aún no observados y para lograrlo es necesario que la línea se acerque lo más posible a los que si se conocen.

Una forma de medir que tan bien se aproxima la recta a todos los puntos es el error cuadrático medio (MSE por sus siglas en inglés).

El MSE es una métrica utilizada para evaluar la precisión de un modelo de regresión. Se calcula tomando el promedio de los cuadrados de las diferencias entre los valores predichos por el modelo y los valores reales observados. La fórmula del MSE es:

\text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2

En donde:

n es el número de observaciones.

y_i Son los valores reales

\hat{y}_i son los valores predichos

El MSE proporciona una medida cuantitativa de cuán bien se ajusta el modelo a los datos observados; un MSE más bajo indica un mejor ajuste del modelo. Al elevar las diferencias al cuadrado, el MSE penaliza los errores grandes más severamente, lo que ayuda a destacar las predicciones que se desvían significativamente de los valores reales.

El descenso del gradiente

Es posible ajustar un número infinito de rectas en el plano valiéndonos de los dos parámetros: La ordenada al origen C y el multiplicador B. La métrica del MSE nos permite evaluar cuál de las líneas tiene el mejor ajuste, es decir el MSE más pequeño.

El método del descenso del gradiente nos brinda un procedimiento iterativo por el cuál es posible encontrar la línea con el mejor ajuste a los puntos que estamos analizando.

Partimos inicializando los parámetros C y B, típicamente con valores aleatorios. Justamos una recta con estos parámetros y calculamos el MSE. Empleando la siguiente fórmula.

MSE = \frac{1}{n} \sum_{j=1}^{n} (y_j - (C + Bx_j))^2

Nótese que esta es la misma fórmula que ya habíamos analizado pero pusimos los valores predichos \hat{y}_i en términos de los parámetros C y B.

Posteriormente establecemos los gradientes. Partimos de la función de costo (MSE) y la derivamos parcialmente con respecto a los parámetros ( C ) y ( B ). Este gradiente indica la dirección en la cual los parámetros deben ajustarse para reducir el error:

Para el parámetro C:

\frac{\partial MSE}{\partial C} = \frac{-2}{n} \sum_{j=1}^{n} (y_j - (C + Bx_j))

Para el parámetro B:

\frac{\partial MSE}{\partial B} = \frac{-2}{n} \sum_{j=1}^{n} x_j(y_j - (C + Bx_j))

Estos gradientes se utilizan para actualizar los parámetros del modelo en cada iteración del descenso del gradiente:

C = C - \alpha \frac{\partial MSE}{\partial C}

B = B - \alpha \frac{\partial MSE}{\partial B}

En dónde donde $\alpha$ es la tasa de aprendizaje. La tasa de aprendizaje es un hiperparámetro que determina el tamaño del paso que se toma al ajustar los parámetros del modelo en cada iteración del descenso del gradiente. Una tasa de aprendizaje adecuada asegura que el modelo converge rápidamente hacia el mínimo del error cuadrático medio (MSE), evitando tanto la divergencia por pasos demasiado grandes como la lentitud excesiva por pasos demasiado pequeños.

Los pasos de cálculo del MSE, cálculo del gradiente y actualización de los parámetros se repiten iterativamente hasta que el MSE se minimice y los parámetros converjan a valores óptimos.

A continuación se adjunta el código para implementar el descenso del gradiente para el ejemplo analizado en python:

# Descenso del gradiente
import numpy as np

# Datos de ejemplo
X = np.array([1, 2, 3, 4, 5])
y = np.array([1, 2, 5, 6, 5])

# Parámetros iniciales
m = 0.0
b = 0.0
alpha = 0.01  # Tasa de aprendizaje
epochs = 1000  # Número de iteraciones

# Descenso del gradiente
for _ in range(epochs):
    y_pred = m * X + b
    error = y - y_pred
    m_gradient = -2 * np.dot(X, error) / len(X)
    b_gradient = -2 * np.sum(error) / len(X)
    m -= alpha * m_gradient
    b -= alpha * b_gradient

print(f"Pendiente (m): {m}, Intercepto (b): {b}")

De acuerdo a este procedimiento, los mejores parámetros para reducir el MSE son B = 1.19 y C = 0.20. El MSE de la recta con estos parámetros es de 0.88.

Si te ha gustado la explicación y quieres aprender más te recomiendo mi curso de Ciencia de Datos con Python en dónde aprenderás desde cero los fundamentos de esta interesante profesión.

¡No pierdas la oportunidad de aprender una habilidad valiosa en el mundo de hoy!

Antes de irte tal vez te interese consultar las siguientes entradas

Settings