CodeBlanks Logo Icon CodeBlanks

Avantajlar

Boosting, yüksek doğruluk sağlar ama aşırı öğrenmeye yatkındır.

Boosting'in güçlü yanları

Gradient boosting tablo verisinde çoğu zaman en yüksek skoru verir. Öne çıkan özellikleri:

  • Sapmayı da varyansı da düşürebilir (doğru ayarla).
  • Ölçekleme gerektirmez; HistGradientBoosting eksik değer ve kategorik özellikleri doğrudan destekler.
  • Farklı kayıp fonksiyonları: loss="absolute_error" aykırılara dayanıklı regresyon, "quantile" tahmin aralığı.

Kategorik özellikler ve NaN

HistGradientBoosting, tam sayı kodlu kategorik sütunları one-hot'a gerek kalmadan doğrudan bölebilir ve eksik değerler için ayrı bir dal öğrenir:

m = HistGradientBoostingClassifier(categorical_features=[0, 3], random_state=0)
m.fit(X_with_nan, y)   # SimpleImputer gerekmez

Bu, ön işleme hattını kısaltır ve yüksek kardinaliteli kategorilerde one-hot'un ürettiği geniş matrisleri önler.

Uygulama Eksik değerle boosting

Meme kanseri verisinin %10'unu np.nan yap (hazır). HistGradientBoostingClassifier(random_state=0)'ı doğrudan eğit ve test doğruluğunu round(..., 3) ile yazdır. Ardından eğitim verisindeki NaN sayısını yazdır.

Başlangıç kodu

model.py
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0, stratify=y)
from sklearn.ensemble import HistGradientBoostingClassifier

rng = np.random.default_rng(0)
X_train = X_train.copy()
X_train[rng.random(X_train.shape) < 0.1] = np.nan

# buraya yaz

Örnek çözüm

model.py
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0, stratify=y)
from sklearn.ensemble import HistGradientBoostingClassifier

rng = np.random.default_rng(0)
X_train = X_train.copy()
X_train[rng.random(X_train.shape) < 0.1] = np.nan

m = HistGradientBoostingClassifier(random_state=0).fit(X_train, y_train)
print(round(m.score(X_test, y_test), 3))
print(np.isnan(X_train).sum())

Beklenen çıktı

0.93
1311

Soru ve cevaplar

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

1 Boosting'in random forest'e göre dezavantajı hangisidir?

  • Hep daha kötüdür
  • Daha çok ayar ister ve aşırı öğrenebilir Doğru cevap
  • Ölçekleme şarttır
  • Sınıflandırma yapamaz

Açıklama: Öğrenme oranı, ağaç sayısı ve derinlik birlikte ayarlanmalıdır.

2 Aykırılara dayanıklı regresyon kaybı seç.

Soru
m = HistGradientBoostingRegressor(loss=____)
Cevap
m = HistGradientBoostingRegressor(loss="absolute_error")

Açıklama: Mutlak hata, büyük kalıntıları karesel hatadan daha az cezalandırır.

3 Özellikleri eşleştir.

Kavram Anlamı
categorical_features Kategorileri doğrudan böler
NaN desteği İmputer gerekmez
loss="quantile" Tahmin aralığı
loss="absolute_error" Aykırılara dayanıklı

Orta seviye bölümündeki tüm dersler