Regresión lineal y logística en Python
La regresión es el tipo más sencillo de aprendizaje automático. La regresión lineal predice un número con una recta; la regresión logística pasa esa recta por una sigmoid para predecir la probabilidad de una respuesta sí/no.
El concepto en palabras sencillas
La regresión es el tipo más sencillo de aprendizaje automático. La regresión lineal predice un número con una recta; la regresión logística pasa esa recta por una sigmoid para predecir la probabilidad de una respuesta sí/no.
Ajusta una recta por mínimos cuadrados y luego convierte una puntuación en probabilidad con regresión logística.
Ideas clave
- La regresión lineal predice valores continuos como precios o temperaturas.
- La regresión logística predice una probabilidad para dos clases.
- Ambas pueden entrenarse con descenso de gradiente en lugar de con una fórmula cerrada.
- El perceptrón es un clasificador parecido que solo actualiza sus pesos cuando se equivoca.
¿Cuándo se utiliza?
- Entender qué pasa dentro de las redes neuronales y las bibliotecas de IA.
- Aprender la idea antes de implementarla en los retos correspondientes.
- Prepararte para cursos de aprendizaje automático, entrevistas y proyectos.
Pruébalo en acción
Haz clic en el gráfico de la izquierda para añadir puntos y ver cómo se actualiza la mejor recta. A la derecha, cambia w y b para mover la frontera de decisión.
Código de ejemplo
import math
# Linear regression: find the line that best fits the points (least squares).
xs = [1, 2, 3, 4, 5]
ys = [2.1, 3.9, 6.2, 8.1, 9.8]
mean_x, mean_y = sum(xs) / len(xs), sum(ys) / len(ys)
slope = sum((x - mean_x) * (y - mean_y) for x, y in zip(xs, ys)) / sum((x - mean_x) ** 2 for x in xs)
intercept = mean_y - slope * mean_x
print(f"line: y = {slope:.2f}x + {intercept:.2f}")
print("predict x=6:", round(slope * 6 + intercept, 2))
# Logistic regression turns a score into a probability with the sigmoid.
def predict_pass(hours_studied, weight=1.5, bias=-4.0):
return 1 / (1 + math.exp(-(weight * hours_studied + bias)))
for hours in (1, 3, 5):
p = predict_pass(hours)
print(f"{hours} hours -> pass probability {p:.2f} -> {'pass' if p >= 0.5 else 'fail'}")
Resultado esperado
line: y = 1.96x + 0.14
predict x=6: 11.9
1 hours -> pass probability 0.08 -> fail
3 hours -> pass probability 0.62 -> pass
5 hours -> pass probability 0.97 -> pass
Cómo funciona
La fórmula de mínimos cuadrados encuentra la pendiente y la ordenada en el origen que hacen mínima la distancia al cuadrado a los puntos, y da y = 1.96x + 0.14. predict_pass() calcula una puntuación a partir de las horas de estudio y la sigmoid la convierte en probabilidad; 0.5 es el corte entre suspender y aprobar.
Cambia los valores y ejecuta el programa en el compilador Python online de CodeUtility sin instalar Python.
Ejercicios prácticos
Modifica las entradas y prueba casos límite antes de usar conjuntos de datos mayores.
- Cambia las entradas o los pesos y predice la salida antes de ejecutar.
- Imprime los valores intermedios para seguir cada paso del cálculo.
- Resuelve los retos enlazados abajo para implementar la idea por tu cuenta.
Practica con un reto
Usa lo que cubre esta lección para resolver un problema real. Cada reto se ejecuta en el navegador, con pruebas al instante y una revisión de IA.
- Regresión lineal simple (mínimos cuadrados) Encuentra la recta que mejor se ajusta a los datos con las fórmulas de mínimos cuadrados. Intermedio
- Regresión lineal con descenso de gradiente Aprende la pendiente y la ordenada al origen de una recta bajando paso a paso por el error cuadrático medio. Intermedio
- Predicción con regresión logística Clasifica ejemplos como 0 o 1 pasando una suma ponderada por la sigmoide y comparándola con un umbral. Fácil
- Algoritmo de aprendizaje del perceptrón Entrena el perceptrón original, que solo actualiza sus pesos cuando se equivoca. Intermedio