Menu
CoddyTech

Pomiar błędów

Część sekcji Uczenie nadzorowane ścieżki Machine Learning w Coddy. Lekcja 13 z 58.

Jak duży jest błąd modelu w dolarach? Oto model cen domów przetestowany na pięciu domach, których wcześniej nie widział:

Pięć słupków, po jednym dla każdego domu testowego, pokazujących wielkość błędu modelu cen: 20, 40, 10, 90 i 30 tysięcy dolarów. Linia przerywana oznacza MAE równy 38, a linia kropkowana RMSE równy 47.1, wyższy z powodu jednego dużego błędu wynoszącego 90

sklearn.metrics mierzy dla Ciebie błędy:

from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score

y_test = np.array([290, 410, 235, 520, 330])  # tysiące dolarów
pred = np.array([270, 450, 245, 430, 360])
print(mean_absolute_error(y_test, pred))
print(np.round(np.sqrt(mean_squared_error(y_test, pred)), 1))
print(np.round(r2_score(y_test, pred), 3))

To wyświetla:

38.0
47.1
0.776

MAE, średni błąd bezwzględny, to typowa pomyłka: 38 tysięcy. RMSE podnosi błędy do kwadratu, oblicza ich średnią, a następnie wyciąga pierwiastek: jedna duża pomyłka podnosi wynik do 47.

Oba podają wynik w jednostkach zmiennej docelowej. r2_score to Twój współczynnik R kwadrat: wyjaśnia 78% rozrzutu cen.

challenge icon

Wyzwanie

Średni

Sklep wycenia używane aparaty za pomocą modelu. Czy dodatkowa cecha pomaga? Program odczytuje shutter_k (tysiące wykonanych zdjęć) lub megapixels. Kod początkowy dopasowuje dwa modele: jeden tylko do age_years, a drugi do age_years i dodatkowej cechy, zapisując ich prognozy dla danych testowych w preds.

  1. Dla każdego modelu wypisz jego MAE, RMSE (1 miejsce po przecinku) i R squared (3 miejsca po przecinku).
  2. Wypisz model z mniejszym MAE.

Dla innego sklepu i shutter_k:

age_years: MAE 212.4, RMSE 268.1, R squared 0.853
age_years + shutter_k: MAE 98.7, RMSE 121.0, R squared 0.97
Better: age_years + shutter_k, off by 98.7 dollars on a typical camera

Spróbuj swoich sił

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# Jeden wiersz na każdy sprzedany aparat: wiek, liczba wyzwoleń migawki w tysiącach, liczba megapikseli, cena w dolarach
cameras = pd.read_csv("cameras.csv")
extra = input()
names = ["age_years", "age_years + " + extra]
columns = [["age_years"], ["age_years", extra]]
# Podziel całe wiersze; każdy z poniższych modeli wybiera własne kolumny
X_train, X_test, y_train, y_test = train_test_split(cameras, cameras["price"], test_size=0.25, random_state=0)
# Jeden model dla każdej listy kolumn oraz jego prognozy dla aparatów testowych
preds = []
for cols in columns:
    model = LinearRegression()
    model.fit(X_train[cols], y_train)
    preds.append(model.predict(X_test[cols]))

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

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

Wszystkie lekcje w sekcji Uczenie nadzorowane

Poćwicz samodzielnie: Kompilator Python online