Menu
CoddyTech

Quanto è buono l’adattamento?

Fa parte della sezione Statistica per il machine learning del percorso Machine Learning di Coddy. Lezione 39 di 64.

Ogni nuvola di punti ha una retta, quindi gli adattamenti vanno valutati. Un marinaio ha registrato la velocità del vento e quella della barca: confronta gli scarti quadratici della retta con quelli della media, la previsione più semplicistica:

Due pannelli con sei punti, velocità della barca rispetto al vento. A sinistra: una retta orizzontale sulla media con lunghi segmenti rossi fino ai punti, scarti quadratici 16.23. A destra: la retta adattata con segmenti rossi minuscoli, scarti quadratici 0.35

R quadrato è la quota di quella dispersione spiegata dalla retta:

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

Questo stampa 0.979: la retta spiega il 98% della dispersione della velocità. 1 indica una retta perfetta, 0 non è meglio della media.

È la misura standard di un modello che predice numeri. Per una retta adattata, è uguale a r_squared.

challenge icon

Sfida

Medio

Una coltivazione di funghi ha registrato 16 letti di coltivazione in mushrooms.csv. Il programma legge il nome di una colonna e il codice iniziale adatta la retta che predice harvest_kg a partire da essa. Nel report serve r_squared, ancora vuota.

  1. Completa r_squared(y, predicted) in modo che restituisca il valore R quadrato.
  2. Alla fine, stampa la verifica: la correlazione tra x e y, elevata al quadrato, moltiplicata per 100 e arrotondata a 1 cifra decimale.

Per un’altra coltivazione e con l’input humidity:

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

Provalo tu

import numpy as np
import pandas as pd


# Restituisce il coefficiente R quadrato delle previsioni per y
def r_squared(y, predicted):
    # Scrivi qui il tuo codice
    return 0


beds = pd.read_csv("mushrooms.csv")
column = input()
# Non modificare le righe qui sotto
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")

# Scrivi il tuo codice qui sotto
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Statistica per il machine learning

Esercitati da solo: Compilatore Python online