ML: regresión
🎯 Meta: predecir un número (no una categoría). Vas a estimar valores continuos con regresión lineal.
Clasificar responde “¿qué tipo es?”. La regresión responde “¿cuánto?”: el precio de una casa, la temperatura de mañana, el CP de un Pokémon. La respuesta es un número.
📈 Regresión lineal
Busca la recta (o plano) que mejor pasa por los datos, para estimar valores nuevos.
from sklearn.linear_model import LinearRegression
# nivel -> CP (relación aproximada: CP sube con el nivel)
X = [[10], [20], [30], [40]]
y = [100, 200, 300, 400]
modelo = LinearRegression()
modelo.fit(X, y)
print(modelo.predict([[25]])) # [250.] -> estima el CP a nivel 25
print(modelo.predict([[50]])) # [500.]
💡 A diferencia del clasificador, acá predict devuelve un número con decimales, no una categoría.
P: ¿Cuál es la diferencia principal entre clasificación y regresión?
- La regresión usa más datos que la clasificación
+ La clasificación predice una categoría; la regresión predice un número continuo
- La regresión solo funciona con una feature de entrada
> Clasificar responde "¿qué tipo es?" (una categoría). Regresión responde "¿cuánto?" (un número como el CP o el precio de una casa).
🔢 La fórmula que aprendió
El modelo aprende una pendiente y una ordenada (y = pendiente·x + ordenada):
from sklearn.linear_model import LinearRegression
X = [[1], [2], [3], [4]]
y = [3, 5, 7, 9] # y = 2*x + 1
modelo = LinearRegression().fit(X, y)
print("pendiente:", round(modelo.coef_[0], 2)) # 2.0
print("ordenada:", round(modelo.intercept_, 2)) # 1.0
print("predice x=10:", modelo.predict([[10]])[0]) # 21.0
🧬 Con varias features
Igual que la clasificación, podés usar muchas columnas de entrada:
from sklearn.linear_model import LinearRegression
# [ataque, defensa] -> poder de combate
X = [[50, 50], [80, 40], [40, 80], [90, 90]]
y = [100, 120, 120, 180]
modelo = LinearRegression().fit(X, y)
print(modelo.predict([[70, 70]]).round(1))
P: Si el modelo aprendió `pendiente = 2` y `ordenada = 1`, ¿qué predice para `x = 5`?
- 7
+ 11
- 10
> La fórmula es `y = pendiente * x + ordenada` = `2 * 5 + 1 = 11`. El modelo guarda esos valores en `coef_[0]` e `intercept_`.
📝 Resumen
| Cosa | Para qué |
|---|---|
| regresión | predecir un número (continuo) |
LinearRegression() | el modelo de la recta |
.fit(X, y) / .predict(...) | entrenar / estimar |
.coef_ / .intercept_ | la fórmula aprendida |
➡️ ¿Y ahora qué?
Practicá con los ejercicios de este tema. 💪
⚡ “Clasificar dice ‘qué’. Regresión dice ‘cuánto’. Con las dos, predecís casi todo.”