CodeBlanks Logo Icon CodeBlanks

Özellik çıkarımı

Yeni özellikler türetirsin.

Proje: konut fiyatı

Bu projede 500 konutun fiyatını tahmin edeceğiz. Özellikler: metrekare, oda sayısı, bina yaşı, kat, merkeze uzaklık ve beş anlamsız gürültü sütunu. Projenin odağı özellik mühendisliği ve seçimidir.

X = np.column_stack([m2, oda, yas, kat, merkez_km, gurultu])
print(X.shape)   # (500, 10)

Gerçek projelerde hangi sütunun gürültü olduğu bilinmez; burada bilerek ekledik ki seçim yöntemlerinin onları bulup bulmadığını görebilelim.

Özellik çıkarımı

Alan bilgisinden iki yeni özellik türetiyoruz: oda başına metrekare ve merkeze uzaklığın logaritması (ilk kilometreler son kilometrelerden daha çok fark yaratır):

m2_oda = m2 / oda
log_merkez = np.log1p(merkez_km)
X2 = np.column_stack([X, m2_oda, log_merkez])
print(X2.shape)   # (500, 12)

Türetilmiş özelliklerin işe yarayıp yaramadığı yine doğrulamayla ölçülür; sezgi bir hipotezdir, sonuç değil.

Uygulama Özellikleri türet

m2 / oda ve np.log1p(merkez_km) sütunlarını X'e ekleyerek X2'yi oluştur. X2.shape değerini, ardından iki yeni sütunun ortalamalarını np.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])

# 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)])
print(X2.shape)
print(np.round(X2[:, -2:].mean(axis=0), 2))

Beklenen çıktı

(500, 12)
[37.7   2.43]

Soru ve cevaplar

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

1 Oda başına metrekare neden yararlı bir türetilmiş özellik olabilir?

  • Satır sayısını artırır
  • Zorunludur
  • Evin ferahlığını tek sayıda anlatır Doğru cevap
  • Gürültüyü azaltır

Açıklama: Aynı metrekarede az oda daha geniş odalar demektir; ham iki sütun bunu doğrudan söylemez.

2 Yeni sütunları özellik matrisine ekle.

Soru
X2 = np.____([X, m2_oda, log_merkez])
Cevap
X2 = np.column_stack([X, m2_oda, log_merkez])

Açıklama: column_stack tek boyutlu dizileri sütun olarak ekler.

3 Özellikleri eşleştir.

Kavram Anlamı
m2 Ham alan
m2 / oda Ferahlık
log1p(merkez_km) Azalan etkili uzaklık
gurultu Anlamsız sütunlar

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