Skor karşılaştırma
- Makine Öğrenmesi kursu
- Başlangıç
- Ders 90/112
- 5 dk
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
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
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.
r = ____(m, X, y, cv=5, scoring=["accuracy", "f1_macro"])
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ı |