Makine Öğrenmesi
Değerlendirme
SVM doğruluğunu hesaplarsın.
Değerlendirme
Son ölçüm test kümesinde bir kez yapılır: F1, kesinlik, duyarlılık ve karmaşıklık matrisi. Sonuç temel çizgiyle karşılaştırılarak raporlanır:
p = gs.predict(X_test)
print(classification_report(y_test, p, digits=3))
print(confusion_matrix(y_test, p))
Raporda şunlar yer almalı: hangi metrik neden seçildi, temel çizgiye göre kazanç, hangi hatanın ne kadar yapıldığı.
Sonucu anlatmak
Sayılar iş diline çevrilmelidir: "Test kümesindeki 31 ayrılan müşterinin X tanesini yakaladık; alarm verdiğimiz her 10 müşteriden Y'si gerçekten ayrılıyordu." Bu cümleler duyarlılık ve kesinliğin kendisidir:
tn, fp, fn, tp = confusion_matrix(y_test, p).ravel()
print(f"{tp + fn} ayrılandan {tp} yakalandı")
print(f"{tp + fp} alarmın {tp} tanesi doğru")
Sınırlamalar da yazılmalı: veri yapay, örnek sayısı küçük, sonuçlar gerçek bir müşteri kitlesinde yeniden doğrulanmalı.
Uygulama Final raporu
Hazır gs ile test tahminlerini al. F1'i round(..., 3) ile yazdır. Ardından karmaşıklık matrisini ravel() ile açıp f"{tp + fn} ayrılandan {tp} yakalandı" ve f"{tp + fp} alarmın {tp} tanesi doğru" satırlarını 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
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)
from sklearn.metrics import f1_score, confusion_matrix
p = gs.predict(X_test)
print(round(f1_score(y_test, p), 3))
tn, fp, fn, tp = confusion_matrix(y_test, p).ravel()
print(f"{tp + fn} ayrılandan {tp} yakalandı")
print(f"{tp + fp} alarmın {tp} tanesi doğru")
Kendini test et
-
Test F1 değeri, CV'deki <code>best_score_</code>'tan biraz düşük çıktı. Bu ne anlama gelir?
- Model işe yaramaz
- Beklenen bir durumdur; best_score_ iyimserdir
- Kesin bir hata vardır
- Test kümesi bozuktur
Cevabı göster
Beklenen bir durumdur; best_score_ iyimserdir — Seçim sürecindeki şans payı yüzünden küçük bir düşüş normaldir.
-
Sınıf başına raporu üç basamakla al.
print(____(y_test, p, digits=3))
Cevabı göster
print(classification_report(y_test, p, digits=3))
-
Cümleleri metriklerle eşleştir.
- Ayrılanların kaçını yakaladık?
- Duyarlılık
- Alarmların kaçı doğru?
- Kesinlik
- İkisinin dengesi
- F1
- Hata dökümü
- Karmaşıklık matrisi
Sıradaki ders: Random forest nedir?