CodeBlanks Logo Icon CodeBlanks

Özellik seçimi

En iyi özellikleri seçersin.

Özellik seçimi

12 sütundan hangilerinin gerekli olduğunu f_regression puanlarıyla inceleyeceğiz. Puanlar her sütunun hedefle tek başına doğrusal ilişkisini ölçer:

from sklearn.feature_selection import f_regression
F, p = f_regression(X_train, y_train)
print(np.argsort(-F))   # en güçlüden en zayıfa

Gürültü sütunlarının puanları genellikle düşük, p-değerleri büyük çıkar. Ama tek başına zayıf görünen gerçek bir özellik (etkisi küçük kat ya da etkisi oran üzerinden gelen oda gibi) de alt sıralara düşebilir; tek değişkenli puanlar kesin bir karar değil, bir ipucudur.

Pipeline içinde k araması

Kaç sütun tutulacağını CV belirler. Ridge, seçilen sütunlarla hafif düzenlileştirilmiş doğrusal model kurar:

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_, -gs.best_score_)

Seçilen sütunlar gs.best_estimator_["selectkbest"].get_support(indices=True) ile okunur.

Uygulama Gürültüyü bul

Eğitim verisinde f_regression çalıştır. F puanına göre en zayıf 5 sütunun indekslerini küçükten büyüğe sıralı yazdır (np.sort(np.argsort(F)[:5])). Ardından bu sütunların en küçük p-değerini round(..., 2) ile yazdır.

Başlangıç kodu

model.py
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.feature_selection import f_regression

# buraya yaz

Örnek çözüm

model.py
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.feature_selection import f_regression

F, p = f_regression(X_train, y_train)
zayif = np.sort(np.argsort(F)[:5])
print(zayif)
print(round(p[zayif].min(), 2))

Beklenen çıktı

[3 5 6 7 9]
0.19

Soru ve cevaplar

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

1 p-değeri 0.6 olan bir sütun için ne söylenebilir?

  • Hatalı hesaplanmıştır
  • Hedefle doğrusal ilişkisine dair kanıt zayıftır Doğru cevap
  • Çok güçlü bir özelliktir
  • Mutlaka tutulmalıdır

Açıklama: Büyük p-değeri, gözlenen ilişkinin şansla açıklanabileceğini gösterir.

2 Regresyon için F puanlarını hesapla.

Soru
F, p = ____(X_train, y_train)
Cevap
F, p = f_regression(X_train, y_train)

Açıklama: f_regression her sütunun hedefle korelasyonundan F istatistiği üretir.

3 Parçaları eşleştir.

Kavram Anlamı
F puanı İlişki gücü
p-değeri Şans olasılığı
selectkbest__k Tutulacak sütun sayısı
get_support Seçilen sütunlar

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