CodeBlanks Logo Icon CodeBlanks

Hata ölçümü

MSE ile hata ölçersin.

Hata ölçümü

Son adım, seçilen modeli test kümesinde bir kez ölçmek ve temel çizgiyle karşılaştırmaktır:

from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
p = model.predict(X_test)
print(mean_absolute_error(y_test, p))
print(mean_squared_error(y_test, p) ** 0.5)   # RMSE
print(r2_score(y_test, p))

RMSE MAE'den belirgin büyükse, birkaç büyük hata toplam hatayı domine ediyor demektir.

Sonucu yorumlamak

Rapor, sayıları anlamlandırmalıdır: modelin temel çizgiye göre hatayı yüzde kaç azalttığı, hedef aralığına göre hatanın büyüklüğü ve sınırlamalar.

iyilesme = 1 - mae_model / mae_temel
print(f"Model, ortalama tahminine göre hatayı %{100 * iyilesme:.0f} azaltıyor.")

Diyabet verisinde R² yaklaşık 0.3-0.4 civarıdır: model yararlıdır ama ilerlemenin çoğunu bu 10 ölçüm açıklayamaz. Bunu açıkça yazmak dürüst bir sonuçtur.

Uygulama Final raporu

Test kümesinde modelin MAE'sini ve DummyRegressor temelinin MAE'sini hesapla. İkisini round(..., 1) ile aynı satırda, ardından iyileşme yüzdesini f"%{100 * iyilesme:.0f}" biçiminde yazdır.

Başlangıç kodu

model.py
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split

X, y = load_diabetes(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
from sklearn.linear_model import LinearRegression
model = LinearRegression().fit(X_train, y_train)
from sklearn.dummy import DummyRegressor
from sklearn.metrics import mean_absolute_error

# buraya yaz

Örnek çözüm

model.py
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split

X, y = load_diabetes(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
from sklearn.linear_model import LinearRegression
model = LinearRegression().fit(X_train, y_train)
from sklearn.dummy import DummyRegressor
from sklearn.metrics import mean_absolute_error

temel = DummyRegressor().fit(X_train, y_train)
mae_model = mean_absolute_error(y_test, model.predict(X_test))
mae_temel = mean_absolute_error(y_test, temel.predict(X_test))
print(round(mae_model, 1), round(mae_temel, 1))
iyilesme = 1 - mae_model / mae_temel
print(f"%{100 * iyilesme:.0f}")

Beklenen çıktı

46.2 59.2
%22

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 MAE = 45, RMSE = 70 ise ne söylenebilir?

  • Birkaç büyük hata var Doğru cevap
  • Tüm hatalar eşit
  • Model kusursuz
  • RMSE her zaman MAE'dir

Açıklama: Kare alma büyük hataları büyüttüğü için RMSE onlara daha duyarlıdır.

2 RMSE'yi MSE'nin karekökünden hesapla.

Soru
rmse = mean_squared_error(y_test, p) ____
Cevap
rmse = mean_squared_error(y_test, p) ** 0.5

Açıklama: Karekök, 0.5 kuvvetidir.

3 Sonuçları eşleştir.

Kavram Anlamı
MAE Ortalama yanılma
RMSE Büyük hatalara duyarlı
R² Açıklanan oran
1 - mae / mae_temel Temele göre iyileşme

Başlangıç bölümündeki tüm dersler