Makine Öğrenmesi
Meydan okuma 3
Regresyon modeli eğitir ve tahmin yaparsın.
Meydan okuma 3: sızıntıyı yakala
Bir ekip arkadaşın şu kodla %100'e yakın doğruluk bildiriyor. Sorun ölçeklemenin bölmeden önce tüm veride yapılması ve daha da kötüsü, etiketten türetilmiş bir özelliğin X'e eklenmesi:
X2 = np.column_stack([X, y + rng.normal(0, 0.1, len(y))]) # etiket sızıyor!
X2 = StandardScaler().fit_transform(X2) # tüm veride fit
X_tr, X_te, y_tr, y_te = train_test_split(X2, y, ...)
Gerçek hayatta sızıntı genellikle bu kadar açık değildir: "işlem iptal tarihi", "kontrol sonucu" gibi hedefi dolaylı bilen sütunlar.
Uygulama Sızıntıyı göster
Sızıntılı X2 ile ve özgün X ile aynı bölmede make_pipeline(StandardScaler(), LogisticRegression(max_iter=1000)) eğit. İki test doğruluğunu round(..., 3) ile alt alta yazdır (önce sızıntılı).
Örnek çözümü göster
import numpy as np
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
X, y = load_wine(return_X_y=True)
rng = np.random.default_rng(0)
X = X[:, :2]
X2 = np.column_stack([X, y + rng.normal(0, 0.1, len(y))])
for veri in [X2, X]:
X_tr, X_te, y_tr, y_te = train_test_split(veri, y, test_size=0.3, random_state=0, stratify=y)
m = make_pipeline(StandardScaler(), LogisticRegression(max_iter=1000)).fit(X_tr, y_tr)
print(round(m.score(X_te, y_te), 3))
Uygulama Şüpheli sütunu bul
X2'nin her sütununu tek başına kullanan bir DecisionTreeClassifier(max_depth=3, random_state=0) için 5 katlı CV ortalamasını hesapla. Skorları np.round(..., 2) ile, ardından en yüksek skorlu sütunun indeksini yazdır.
Örnek çözümü göster
import numpy as np
from sklearn.datasets import load_wine
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier
X, y = load_wine(return_X_y=True)
rng = np.random.default_rng(0)
X2 = np.column_stack([X[:, :2], y + rng.normal(0, 0.1, len(y))])
skor = [cross_val_score(DecisionTreeClassifier(max_depth=3, random_state=0), X2[:, [j]], y, cv=5).mean() for j in range(X2.shape[1])]
print(np.round(skor, 2))
print(int(np.argmax(skor)))
Kendini test et
-
Bir özelliğin sızıntı olduğundan şüphelenmenin en güçlü işareti nedir?
- Eksik değer içermesi
- Kategorik olması
- Ölçeklenmemiş olması
- Tek başına neredeyse kusursuz tahmin vermesi
Cevabı göster
Tek başına neredeyse kusursuz tahmin vermesi — Gerçek problemler nadiren tek bir özellikle çözülür; kusursuz sonuç genellikle hedefin sızdığını gösterir.
-
Ölçeklemeyi pipeline içine al.
model = make_pipeline(____, LogisticRegression())
Cevabı göster
model = make_pipeline(StandardScaler(), LogisticRegression())
-
Hataları çözümleriyle eşleştir.
- Tüm veride ölçekleme
- Pipeline kullan
- Etiketten türetilmiş sütun
- Sütunu çıkar
- Testte model seçme
- CV ile seç
- Zaman serisini karıştırma
- shuffle=False
Sıradaki ders: Meydan okuma 4