Menu
CoddyTech

Jak dobre jest dopasowanie?

Część sekcji Statystyka w uczeniu maszynowym ścieżki Machine Learning w Coddy. Lekcja 39 z 64.

Każda chmura ma przypisaną prostą, więc dopasowania wymagają oceny. Żeglarz zapisywał prędkość wiatru i łodzi: porównaj sumę kwadratów odchyleń dla prostej z sumą dla średniej, czyli najprostszego przewidywania:

Dwa wykresy z sześcioma punktami, prędkość łodzi w zależności od prędkości wiatru. Po lewej: pozioma prosta na poziomie średniej, z długimi czerwonymi odcinkami do punktów, suma kwadratów odchyleń 16.23. Po prawej: dopasowana prosta z krótkimi czerwonymi odcinkami, suma kwadratów odchyleń 0.35

R kwadrat to część tego rozrzutu, którą wyjaśnia prosta:

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

To wypisuje 0.979: linia wyjaśnia 98% rozrzutu prędkości. 1 oznacza idealną linię, 0 — wynik nie lepszy niż średnia.

To standardowa ocena modelu przewidującego liczby. W przypadku dopasowanej prostej jest równa r squared.

challenge icon

Wyzwanie

Średni

Na farmie grzybów zapisano dane z 16 grządek uprawowych w pliku mushrooms.csv. Program odczytuje nazwę kolumny, a kod początkowy dopasowuje prostą przewidującą harvest_kg na jej podstawie. W raporcie potrzebna jest wartość r_squared, która jest jeszcze pusta.

  1. Uzupełnij r_squared(y, predicted), aby zwracała współczynnik determinacji R².
  2. Na końcu wypisz wynik kontrolny: korelację między x i y, podniesioną do kwadratu, pomnożoną przez 100 i zaokrągloną do 1 miejsca po przecinku.

Dla innej farmy i danych wejściowych humidity:

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

Spróbuj swoich sił

import numpy as np
import pandas as pd


# Zwraca współczynnik R kwadrat dla przewidywań y
def r_squared(y, predicted):
    # Wpisz tutaj swój kod
    return 0


beds = pd.read_csv("mushrooms.csv")
column = input()
# Nie zmieniaj poniższych wierszy
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")

# Wpisz poniżej swój kod
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Statystyka w uczeniu maszynowym

Poćwicz samodzielnie: Kompilator Python online