Makine Öğrenmesi
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.
Örnek çözümü göster
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_)
Kendini test et
-
<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)?
Cevabı göster
4 kat — Ağırlık sınıf oranının tersiyle orantılıdır: 0.8 / 0.2 = 4.
-
Sınıf ağırlıklarını otomatik dengele.
SVC(class_weight=____)
Cevabı göster
SVC(class_weight="balanced")
-
Hat adımlarını eşleştir.
- SimpleImputer(median)
- Eksikleri doldurur
- StandardScaler
- Ölçekler
- SVC(class_weight)
- Dengeli sınıflandırır
- scoring="f1"
- Seçim ölçütü
Sıradaki ders: Tahmin