Menu
CoddyTech

¿Qué tan bueno es el ajuste?

Parte de la sección Estadística para ML del Journey de Machine Learning de Coddy. Lección 39 de 64.

Cualquier nube de puntos tiene una recta, así que los ajustes necesitan una medida. Un marinero registró la velocidad del viento y la del barco: compara los errores al cuadrado de la recta con los de la media, la predicción más perezosa:

Dos paneles con seis puntos, velocidad del barco frente a la del viento. Izquierda: una recta horizontal en la media con largos intervalos rojos hasta los puntos, errores al cuadrado 16.23. Derecha: la recta ajustada con pequeños intervalos rojos, errores al cuadrado 0.35

R al cuadrado es la proporción de esa dispersión que explica la recta:

wind = np.array([6, 8, 10, 12, 15, 18])
boat = np.array([3.1, 4.4, 4.9, 6.2, 6.8, 8.1])
slope, intercept = np.polyfit(wind, boat, 1)
predicted = slope * wind + intercept
ss_res = ((boat - predicted) ** 2).sum()  # el ajuste: 0.35
ss_tot = ((boat - boat.mean()) ** 2).sum()  # la media: 16.23
print(np.round(1 - ss_res / ss_tot, 3))

Esto imprime 0.979: la línea explica el 98% de la variación de la velocidad. 1 es una línea perfecta; 0 no es mejor que la media.

Es la calificación estándar de un modelo que predice números. Para una recta ajustada, es igual a r cuadrado.

challenge icon

Desafío

Intermedio

Una granja de setas registró 16 camas de cultivo en mushrooms.csv. El programa lee el nombre de una columna y el código inicial ajusta la recta que predice harvest_kg a partir de ella. En el informe se necesita r_squared, que todavía está vacío.

  1. Completa r_squared(y, predicted) para que devuelva el R cuadrado.
  2. Al final, imprime la comprobación: la correlación de x e y, elevada al cuadrado, multiplicada por 100 y redondeada a 1 decimal.

Para otra granja y la entrada humidity:

humidity explains 27.0% of the harvest variation
Check with r squared: 27.0%

Pruébalo tú mismo

import numpy as np
import pandas as pd


# Devuelve el R cuadrado de las predicciones para y
def r_squared(y, predicted):
    # Escribe tu código aquí
    return 0


beds = pd.read_csv("mushrooms.csv")
column = input()
# No cambies las líneas de abajo
x = beds[column]
y = beds["harvest_kg"]
slope, intercept = np.polyfit(x, y, 1)
predicted = slope * x + intercept
r2 = r_squared(y, predicted)
print(f"{column} explains {np.round(r2 * 100, 1)}% of the harvest variation")

# Escribe tu código abajo
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Estadística para ML

Practica por tu cuenta: Compilador de Python online