Makine Öğrenmesi
Model eğitimi
Seçilen özelliklerle model eğitirsin.
Model eğitimi
Seçimi ve modeli tek pipeline'da birleştirip k'yı MAE'ye göre arıyoruz. Karşılaştırma için türetilmiş özellikler olmadan aynı hattı da eğitiriz:
gs = GridSearchCV(pipe, {"selectkbest__k": [3, 5, 7, 9, 12]}, cv=5,
scoring="neg_mean_absolute_error").fit(X_train, y_train)
Proje boyunca test kümesine dokunulmaz; tüm kararlar eğitim verisindeki CV ile verilir.
Seçilen sütunları okumak
En iyi modelin hangi sütunları kullandığını görmek, seçimin mantıklı olup olmadığını denetler:
sec = gs.best_estimator_["selectkbest"]
print(sec.get_support(indices=True))
Bu veride CV tüm 12 sütunu seçer: Ridge'in cezası gürültü sütunlarının katsayılarını zaten küçük tuttuğu için onları atmak skoru iyileştirmez, gerçek ama zayıf görünen sütunları atmak ise kötüleştirir. Seçimin değeri çok sayıda gürültü sütununda ya da KNN gibi gürültüye duyarlı modellerde ortaya çıkar. Bu projede asıl kazanç türetilmiş özelliklerden gelecek.
Uygulama Ara ve incele
make_pipeline(StandardScaler(), SelectKBest(f_regression), Ridge(alpha=1.0)) için selectkbest__k değerlerini [3, 5, 7, 9, 12] arasında GridSearchCV(..., cv=5, scoring="neg_mean_absolute_error") ile ara. best_params_, CV MAE'si (round(-gs.best_score_, 1)) ve seçilen sütun indekslerini alt alta yazdır.
Örnek çözümü göster
import numpy as np
rng = np.random.default_rng(11)
n = 500
m2 = rng.uniform(40, 200, n)
oda = np.clip(np.round(m2 / 35 + rng.normal(0, 0.7, n)), 1, 6)
yas = rng.uniform(0, 40, n)
kat = rng.integers(0, 15, n)
merkez_km = rng.uniform(0.5, 25, n)
gurultu = rng.normal(size=(n, 5))
fiyat = 20 * m2 + 150 * m2 / oda - 2500 * np.log1p(merkez_km) - 40 * yas + 60 * kat + rng.normal(0, 300, n)
X = np.column_stack([m2, oda, yas, kat, merkez_km, gurultu])
X2 = np.column_stack([X, m2 / oda, np.log1p(merkez_km)])
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X2, fiyat, test_size=0.25, random_state=0)
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import SelectKBest, f_regression
from sklearn.linear_model import Ridge
from sklearn.model_selection import GridSearchCV
pipe = make_pipeline(StandardScaler(), SelectKBest(f_regression), Ridge(alpha=1.0))
gs = GridSearchCV(pipe, {"selectkbest__k": [3, 5, 7, 9, 12]}, cv=5, scoring="neg_mean_absolute_error").fit(X_train, y_train)
print(gs.best_params_)
print(round(-gs.best_score_, 1))
print(gs.best_estimator_["selectkbest"].get_support(indices=True))
Kendini test et
-
Neden <code>scoring="neg_mean_absolute_error"</code> yazılır, "mean_absolute_error" değil?
- scikit-learn büyük skoru iyi sayar; hata eksiyle çevrilir
- MAE hesaplanamaz
- Daha hızlıdır
- Fark yoktur
Cevabı göster
scikit-learn büyük skoru iyi sayar; hata eksiyle çevrilir — best_score_ negatif MAE'dir; raporlarken işaret çevrilir.
-
En iyi modeldeki seçici adımı al.
sec = gs.best_estimator_[____]
Cevabı göster
sec = gs.best_estimator_["selectkbest"]
-
Kararları eşleştir.
- k
- CV ile seçilir
- MAE
- Seçim ölçütü
- test kümesi
- En sona kadar dokunulmaz
- seçilen sütunlar
- Mantık denetimi
Sıradaki ders: Değerlendirme