CodeBlanks Logo Icon CodeBlanks

Model eğitimi

SVM modelini eğitirsin.

Hat ve arama

Model hattı: medyanla doldurma → ölçekleme → SVM. Dengesizliğe karşı class_weight="balanced", azınlık sınıfının hatalarını sınıf oranının tersiyle ağırlıklandırır. Ayarlar F1'e göre aranır:

pipe = make_pipeline(SimpleImputer(strategy="median"), StandardScaler(),
                     SVC(class_weight="balanced"))
izgara = {"svc__C": [0.1, 1, 10], "svc__gamma": ["scale", 0.1]}
gs = GridSearchCV(pipe, izgara, cv=5, scoring="f1").fit(X_train, y_train)

Medyan, eksik değer doldurmada aykırı değerlere ortalamadan daha dayanıklıdır.

Temel çizgi

Arama sonucunu yorumlamak için önce ayarsız bir temel çizgi kurarız: aynı hat, class_weight olmadan ve varsayılan ayarlarla. Projenin her adımı bu temele göre ne kazandırdığıyla değerlendirilir:

temel = make_pipeline(SimpleImputer(strategy="median"), StandardScaler(), SVC())
print(cross_val_score(temel, X_train, y_train, cv=5, scoring="f1").mean())
print(gs.best_score_)

Karşılaştırma eğitim kümesindeki CV ile yapılır; test kümesine hâlâ dokunulmaz.

Uygulama Temel ve arama

Ayarsız temel hattın eğitim kümesinde 5 katlı F1 ortalamasını hesapla. Ardından class_weight="balanced" hattını {"svc__C": [0.1, 1, 10], "svc__gamma": ["scale", 0.1]} ızgarasıyla scoring="f1" kullanarak ara. Temel skoru, best_score_'u (ikisi de round(..., 3)) ve best_params_'ı alt alta yazdır.

Başlangıç kodu

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

X, y = make_classification(n_samples=600, n_features=8, n_informative=4, weights=[0.8, 0.2], random_state=7)
rng = np.random.default_rng(7)
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)
from sklearn.pipeline import make_pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV, cross_val_score

# buraya yaz

Örnek çözüm

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

X, y = make_classification(n_samples=600, n_features=8, n_informative=4, weights=[0.8, 0.2], random_state=7)
rng = np.random.default_rng(7)
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)
from sklearn.pipeline import make_pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV, cross_val_score

temel = make_pipeline(SimpleImputer(strategy="median"), StandardScaler(), SVC())
print(round(cross_val_score(temel, X_train, y_train, cv=5, scoring="f1").mean(), 3))
pipe = make_pipeline(SimpleImputer(strategy="median"), StandardScaler(), SVC(class_weight="balanced"))
gs = GridSearchCV(pipe, {"svc__C": [0.1, 1, 10], "svc__gamma": ["scale", 0.1]}, cv=5, scoring="f1").fit(X_train, y_train)
print(round(gs.best_score_, 3))
print(gs.best_params_)

Beklenen çıktı

0.753
0.772
{'svc__C': 1, 'svc__gamma': 'scale'}

Soru ve cevaplar

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

1 <code>class_weight="balanced"</code> %20 azınlık sınıfı için ağırlığı yaklaşık kaç yapar (çoğunluğa göre)?

  • Eşit
  • 0.25 kat
  • 20 kat
  • 4 kat Doğru cevap

Açıklama: Ağırlık sınıf oranının tersiyle orantılıdır: 0.8 / 0.2 = 4.

2 Sınıf ağırlıklarını otomatik dengele.

Soru
SVC(class_weight=____)
Cevap
SVC(class_weight="balanced")

Açıklama: "balanced" ağırlıkları n / (k · sınıf_sayımı) ile hesaplar.

3 Hat adımlarını eşleştir.

Kavram Anlamı
SimpleImputer(median) Eksikleri doldurur
StandardScaler Ölçekler
SVC(class_weight) Dengeli sınıflandırır
scoring="f1" Seçim ölçütü

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