CodeBlanks Logo Icon CodeBlanks

Meydan okuma 1

scikit-learn ile sınıflandırma yaparsın.

Meydan okuma 1: tam hat

Orta seviyenin araçlarını birleştiren ilk meydan okuma: rakam verisinde ölçekleme + PCA + SVM hattı kurup üç hiperparametreyi birlikte aramak. Izgara hem ön işleme hem model ayarlarını içerir:

pipe = make_pipeline(StandardScaler(), PCA(), SVC())
izgara = {"pca__n_components": [20, 40],
          "svc__C": [1, 10],
          "svc__gamma": ["scale", 0.01]}
gs = GridSearchCV(pipe, izgara, cv=5, n_jobs=-1).fit(X_train, y_train)

2 × 2 × 2 = 8 kombinasyon, 5 katla 40 eğitim; test kümesi yalnızca en sonda kullanılır.

Uygulama Hattı ara

Yukarıdaki ızgarayla GridSearchCV(make_pipeline(StandardScaler(), PCA(), SVC()), izgara, cv=5) çalıştır. best_params_'ı ve test doğruluğunu round(..., 3) ile alt alta yazdır.

Başlangıç kodu

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

X, y = load_digits(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.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV

# buraya yaz

Örnek çözüm

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

X, y = load_digits(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.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV

izgara = {"pca__n_components": [20, 40], "svc__C": [1, 10], "svc__gamma": ["scale", 0.01]}
gs = GridSearchCV(make_pipeline(StandardScaler(), PCA(), SVC()), izgara, cv=5).fit(X_train, y_train)
print(gs.best_params_)
print(round(gs.score(X_test, y_test), 3))

Beklenen çıktı

{'pca__n_components': 40, 'svc__C': 10, 'svc__gamma': 0.01}
0.976

Uygulama Hata analizi

En iyi modelin test tahminleriyle karmaşıklık matrisini hesapla. Köşegeni sıfırlayıp (np.fill_diagonal(cm, 0)) en çok karıştırılan (gerçek, tahmin) çiftini np.unravel_index ile bulup tam sayı demeti olarak yazdır.

Başlangıç kodu

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

X, y = load_digits(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.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.svm import SVC
from sklearn.metrics import confusion_matrix

model = make_pipeline(StandardScaler(), PCA(n_components=40), SVC(C=10, gamma=0.01)).fit(X_train, y_train)

# buraya yaz

Örnek çözüm

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

X, y = load_digits(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.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.svm import SVC
from sklearn.metrics import confusion_matrix

model = make_pipeline(StandardScaler(), PCA(n_components=40), SVC(C=10, gamma=0.01)).fit(X_train, y_train)

cm = confusion_matrix(y_test, model.predict(X_test))
np.fill_diagonal(cm, 0)
print(tuple(int(v) for v in np.unravel_index(cm.argmax(), cm.shape)))

Beklenen çıktı

(6, 4)

Soru ve cevaplar

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

1 Bu ızgaranın en iyi sonucu test kümesinde neden yine de biraz düşebilir?

  • SVC rastgeledir
  • Düşmez
  • best_score_ seçim yüzünden iyimserdir Doğru cevap
  • PCA test verisini bozar

Açıklama: Birçok kombinasyonun en iyisini seçmek yukarı yanlılık üretir.

2 PCA bileşen sayısını ızgaraya ekle.

Soru
izgara = {"____": [20, 40], "svc__C": [1, 10]}
Cevap
izgara = {"pca__n_components": [20, 40], "svc__C": [1, 10]}

Açıklama: make_pipeline'da PCA adımının adı "pca"dır.

3 Hat parçalarını eşleştir.

Kavram Anlamı
StandardScaler Ölçekleme
PCA Boyut indirgeme
SVC Sınıflandırıcı
GridSearchCV Ortak arama

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