Özellik çıkarımı
- Makine Öğrenmesi kursu
- Orta seviye
- Ders 93/112
- 7 dk
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
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
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.
X2 = np.____([X, m2_oda, log_merkez])
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 |