Meydan okuma 4
- Makine Öğrenmesi kursu
- Orta seviye
- Ders 112/112
- 8 dk
PCA ile boyut indirgersin.
Meydan okuma 4: dengesiz uçtan uca
Son meydan okuma orta seviyenin en zor senaryosudur: %3 azınlıklı, eksik değerli bir veride F1'i en yükseğe çıkarmak. Kullanacağın araçlar:
HistGradientBoostingClassifier(NaN destekli) veclass_weight.StratifiedKFoldile F1'e göre arama.- Doğrulama kümesinde eşik ayarı.
- Test kümesinde tek bir son ölçüm.
Uygulama Model ve ağırlık
Verilen veride class_weight None ve "balanced" için HistGradientBoostingClassifier(random_state=0)'ı eğitim kısmında 5 katlı CV F1 ortalamasıyla karşılaştır. İki skoru round(..., 3) ile aynı satırda yazdır.
Başlangıç kodu
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.ensemble import HistGradientBoostingClassifier
X, y = make_classification(n_samples=3000, n_features=15, n_informative=6, weights=[0.97, 0.03], random_state=3)
rng = np.random.default_rng(3)
X[rng.random(X.shape) < 0.05] = np.nan
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0, stratify=y)
# buraya yazÖrnek çözüm
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.ensemble import HistGradientBoostingClassifier
X, y = make_classification(n_samples=3000, n_features=15, n_informative=6, weights=[0.97, 0.03], random_state=3)
rng = np.random.default_rng(3)
X[rng.random(X.shape) < 0.05] = np.nan
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0, stratify=y)
sonuc = []
for cw in [None, "balanced"]:
m = HistGradientBoostingClassifier(class_weight=cw, random_state=0)
sonuc.append(round(cross_val_score(m, X_train, y_train, cv=5, scoring="f1").mean(), 3))
print(*sonuc)Beklenen çıktı
0.365 0.481
Uygulama Eşik ve son ölçüm
Eğitim kısmını test_size=0.3, random_state=1, stratify=y_train ile yeniden böl. class_weight="balanced" modelini eğitimde eğit, doğrulamada F1'i en yükselten eşiği bul. Test kümesinde 0.5 eşiğindeki ve bulunan eşikteki F1'i round(..., 3) ile aynı satırda yazdır.
Başlangıç kodu
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import HistGradientBoostingClassifier
from sklearn.metrics import f1_score, precision_recall_curve
X, y = make_classification(n_samples=3000, n_features=15, n_informative=6, weights=[0.97, 0.03], random_state=3)
rng = np.random.default_rng(3)
X[rng.random(X.shape) < 0.05] = np.nan
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0, stratify=y)
# buraya yazÖrnek çözüm
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import HistGradientBoostingClassifier
from sklearn.metrics import f1_score, precision_recall_curve
X, y = make_classification(n_samples=3000, n_features=15, n_informative=6, weights=[0.97, 0.03], random_state=3)
rng = np.random.default_rng(3)
X[rng.random(X.shape) < 0.05] = np.nan
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0, stratify=y)
X_tr, X_val, y_tr, y_val = train_test_split(X_train, y_train, test_size=0.3, random_state=1, stratify=y_train)
m = HistGradientBoostingClassifier(class_weight="balanced", random_state=0).fit(X_tr, y_tr)
pr, re, esik = precision_recall_curve(y_val, m.predict_proba(X_val)[:, 1])
f1 = 2 * pr * re / (pr + re + 1e-12)
en_iyi = esik[f1[:-1].argmax()]
p = m.predict_proba(X_test)[:, 1]
print(round(f1_score(y_test, p >= 0.5), 3), round(f1_score(y_test, p >= en_iyi), 3))Beklenen çıktı
0.537 0.638
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Eşik ayarı neden test kümesinde değil doğrulama kümesinde yapılır?
- Test kümesi çok küçüktür
- Kural değildir
- Doğrulamada daha hızlıdır
- Testte ayarlanan eşik test skorunu iyimser yapar Doğru cevap
Açıklama: Eşik de bir hiperparametredir; seçimine test verisi karışmamalıdır.
2 Sınıf ağırlıklarını dengele.
m = HistGradientBoostingClassifier(class_weight=____, random_state=0)
m = HistGradientBoostingClassifier(class_weight="balanced", random_state=0)
Açıklama: HistGradientBoosting de class_weight parametresini destekler.
3 Araçları görevlerle eşleştir.
| Kavram | Anlamı |
|---|---|
HistGradientBoosting |
NaN'lı veriyle model |
class_weight |
Azınlığa ağırlık |
eşik ayarı |
F1'i yükseltir |
test kümesi |
Tek son ölçüm |