CodeBlanks Logo Icon CodeBlanks

Skor karşılaştırma

Modeller, validation skoru ile karşılaştırılır.

Skorları karşılaştırmak

İki modelin CV ortalamaları arasındaki küçük fark anlamlı olmayabilir. Ortalamanın yanında standart sapmaya da bakılır; aralıklar örtüşüyorsa "biri kesin daha iyi" denemez:

for ad, m in adaylar.items():
    s = cross_val_score(m, X, y, cv=10)
    print(f"{ad}: {s.mean():.3f} ± {s.std():.3f}")

Skorlar yakınsa daha basit, daha hızlı ya da daha yorumlanabilir model tercih edilir.

Eğitim süresi de bir ölçüttür

cross_validate, skorların yanında eğitim ve tahmin sürelerini de döndürür; birden çok metriği aynı anda hesaplayabilir:

from sklearn.model_selection import cross_validate
r = cross_validate(m, X, y, cv=5, scoring=["accuracy", "f1_macro"])
print(r["test_accuracy"].mean(), r["test_f1_macro"].mean())
print(r["fit_time"].mean())

Canlı sistemde her tahmin milisaniye sayıyorsa küçük bir doğruluk farkı için çok yavaş bir model seçilmez.

Uygulama Ortalama ± sapma

Meme kanseri verisinde ölçekli KNN ve ölçekli lojistik regresyonu 5 katla karşılaştır. Her satırı f"{ad}: {ort:.3f} ± {std:.3f}" biçiminde yazdır.

Başlangıç kodu

model.py
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

X, y = load_breast_cancer(return_X_y=True)
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression

adaylar = {"knn": make_pipeline(StandardScaler(), KNeighborsClassifier()), "lojistik": make_pipeline(StandardScaler(), LogisticRegression())}

# buraya yaz

Örnek çözüm

model.py
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

X, y = load_breast_cancer(return_X_y=True)
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression

adaylar = {"knn": make_pipeline(StandardScaler(), KNeighborsClassifier()), "lojistik": make_pipeline(StandardScaler(), LogisticRegression())}

for ad, m in adaylar.items():
    s = cross_val_score(m, X, y, cv=5)
    print(f"{ad}: {s.mean():.3f} ± {s.std():.3f}")

Beklenen çıktı

knn: 0.965 ± 0.010
lojistik: 0.981 ± 0.007

Soru ve cevaplar

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

1 A: 0.912 ± 0.040, B: 0.918 ± 0.045 ise hangi yorum doğrudur?

  • B açıkça daha iyidir
  • A açıkça daha iyidir
  • İkisi de kötüdür
  • Fark belirsizlik içinde; ikisi pratikte eşit Doğru cevap

Açıklama: 0.006'lık fark, standart sapmaların (~0.04) yanında çok küçüktür.

2 Birden çok metrikle doğrula.

Soru
r = ____(m, X, y, cv=5, scoring=["accuracy", "f1_macro"])
Cevap
r = cross_validate(m, X, y, cv=5, scoring=["accuracy", "f1_macro"])

Açıklama: cross_validate sözlük döndürür: test_*, fit_time, score_time.

3 Çıktıları eşleştir.

Kavram Anlamı
s.mean() Beklenen başarı
s.std() Belirsizlik
fit_time Eğitim süresi
test_f1_macro Makro F1 skorları

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