Ajustar una recta es buscar la más cercana
Ajustar una recta a unos puntos es buscar la recta que queda más cerca de todos ellos. El método de mínimos cuadrados mide esa cercanía sumando el cuadrado de cada error.
Es el modelo de aprendizaje automático más sencillo, y se resuelve con el descenso del gradiente de la lección anterior.
Al final de esta lección
Nota
Puedo ajustar una recta a unos puntos minimizando el error cuadrático medio.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Recta de ajuste | la recta w * x + b que mejor sigue a los puntos | |
| Error | lo que predice la recta menos el dato real | |
| Error cuadrático medio | la media de los errores al cuadrado | |
| Mínimos cuadrados | buscar la recta de menor error cuadrático medio | |
| Parámetro | un número que el modelo ajusta | w, b |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
El error cuadrático medio mide el mal ajuste
Para cada punto, el error es lo que predice la recta menos el dato real. Se eleva al cuadrado para que ningún error negativo anule a uno positivo, y para que los errores grandes pesen más.
La media de esos cuadrados es el error cuadrático medio. Cuanto menor, mejor ajusta la recta.
Ejemplo resuelto: el error de una recta
| Semana x | Pedidos y | Recta 0,6 * x + 2,2 | Error | Error al cuadrado |
|---|---|---|---|---|
| 1 | 2 | 2,8 | 0,8 | 0,64 |
| 2 | 4 | 3,4 | -0,6 | 0,36 |
| 3 | 5 | 4,0 | -1,0 | 1,00 |
| 4 | 4 | 4,6 | 0,6 | 0,36 |
| 5 | 5 | 5,2 | 0,2 | 0,04 |
| Media | 0,48 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
El descenso ajusta dos números a la vez
Los números que se mueven son dos: la pendiente w y la ordenada b. El error es una función de los dos, así que usas el gradiente de la lección 3.
Cada paso corrige w y b a la vez, en contra de su derivada parcial. La de w es 2 por la media de error por x. La de b es 2 por la media del error.
Ajusta la recta con el descenso
# Pedidos semanales, en decenas, de las cinco primeras semanas.
semanas = [1, 2, 3, 4, 5]
pedidos = [2, 4, 5, 4, 5]
w = 0.0
b = 0.0
tasa = 0.02
n = len(semanas)
for paso in range(5000):
grad_w = 0
grad_b = 0
for i in range(n):
error = w * semanas[i] + b - pedidos[i]
grad_w = grad_w + 2 * error * semanas[i] / n
grad_b = grad_b + 2 * error / n
w = w - tasa * grad_w
b = b - tasa * grad_b
print("w:", round(w, 2), "b:", round(b, 2))
# Cambia 5000 por 50 y ejecuta otra vez.
# ¿Qué pasa con w y con b?
Ejemplo resuelto: cuántos pasos hacen falta
| Pasos | w | b | Qué ves |
|---|---|---|---|
| 1 | 0,53 | 0,16 | Apenas ha empezado |
| 50 | 0,97 | 0,85 | Va en camino, pero w pasa de 0,6 |
| 500 | 0,62 | 2,14 | Casi ha llegado |
| 5000 | 0,6 | 2,2 | Ya no cambia |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un error muy común
Advertencia
Mucha gente cree que el descenso da una recta distinta a la fórmula exacta. Con una tasa adecuada y pasos de sobra llega al mismo resultado. Si no coinciden, hay pocos pasos o la tasa es mala.
Para una recta existe una respuesta exacta
Para cada punto, mide cuánto se aleja x de su media y cuánto se aleja y de la suya. La pendiente es la suma de esos dos alejamientos multiplicados, dividida entre la suma de los de x al cuadrado.
La ordenada es la media de y menos la pendiente por la media de x. Con los pedidos, la suma de productos es 6 y la de cuadrados, 10. Entonces w es 0,6 y b es 4 - 0,6 * 3 = 2,2.
La recta exacta de los cinco puntos
docker exec jupyter python3 -c "import numpy as np; print(np.polyfit([1,2,3,4,5],[2,4,5,4,5],1).round(3))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Una recta con los días de lluvia
docker exec jupyter python3 -c "import numpy as np,csv; d=[r for r in csv.DictReader(open('hires.csv')) if r['weather']=='rainy']; x=[float(r['rain_mm']) for r in d]; y=[float(r['hires']) for r in d]; print(len(d), np.polyfit(x,y,1).round(1))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Para ir más lejos: cambia la tasa
En el código del ajuste, prueba la tasa 0.1 con 5000 pasos. Antes de ejecutar, escribe qué esperas: llegar, ir más lento o divergir.
Después busca la tasa más alta con la que todavía llegas a w = 0,6 y b = 2,2.