Menu
CoddyTech

Qualité de l’ajustement

Fait partie de la section Statistiques pour le ML du Journey Machine Learning de Coddy. Leçon 39 sur 64.

Chaque nuage de points a une droite, il faut donc évaluer les ajustements. Un marin a relevé les vitesses du vent et du bateau : comparons la somme des carrés des écarts de la droite à celle de la moyenne, la prédiction la plus paresseuse :

Deux panneaux de six points, vitesse du bateau en fonction du vent. À gauche : une droite horizontale à la moyenne, avec de longs écarts rouges jusqu’aux points, somme des carrés des écarts 16.23. À droite : la droite ajustée, avec de minuscules écarts rouges, somme des carrés des écarts 0.35

R au carré est la part de cette dispersion que la droite explique :

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()  # l’ajustement : 0.35
ss_tot = ((boat - boat.mean()) ** 2).sum()  # la moyenne : 16.23
print(np.round(1 - ss_res / ss_tot, 3))

Cela affiche 0.979 : la droite explique 98 % de la dispersion des vitesses. 1 correspond à une droite parfaite, 0 ne vaut pas mieux que la moyenne.

C’est la note standard d’un modèle qui prédit des nombres. Pour une droite ajustée, elle est égale au carré de r.

challenge icon

Défi

Moyen

Une ferme de champignons a enregistré 16 lits de culture dans mushrooms.csv. Le programme lit un nom de colonne, et le code de départ ajuste la droite qui prédit harvest_kg à partir de celle-ci. Son rapport a besoin de r_squared, qui est encore vide.

  1. Complète r_squared(y, predicted) pour qu’elle renvoie le R².
  2. À la fin, affiche la vérification : la corrélation de x et y, au carré, multipliée par 100 et arrondie à 1 décimale.

Pour une autre ferme et l’entrée humidity :

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

Essayez vous-même

import numpy as np
import pandas as pd


# Renvoie le R carré des prédictions pour y
def r_squared(y, predicted):
    # Écrivez votre code ici
    return 0


beds = pd.read_csv("mushrooms.csv")
column = input()
# Ne modifiez pas les lignes ci-dessous
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")

# Écrivez votre code ci-dessous
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Statistiques pour le ML

Entraînez-vous par vous-même : Compilateur Python en ligne