CodeBlanks Logo Icon CodeBlanks

Sayısal özellikler

Sayısal özellikler ölçeklendirilerek model performansı artırılır.

Sayısal dönüşümler

Sayısal özellikler de dönüştürülerek daha kullanışlı hale getirilebilir. Gelir gibi sağa çarpık dağılımlarda logaritma uç değerleri sıkıştırır:

gelir = np.array([20, 25, 30, 40, 500])
print(np.log1p(gelir).round(2))   # [3.04 3.26 3.43 3.71 6.22]

np.log1p(x), log(1 + x) demektir ve 0 değerinde de güvenle çalışır.

Gruplama ve polinom

Sürekli bir değer aralıklara bölünebilir (KBinsDiscretizer, np.digitize). Doğrusal modele eğri ilişki öğretmek için PolynomialFeatures kareler ve çarpımlar ekler:

yas = np.array([15, 25, 45, 70])
print(np.digitize(yas, [18, 40, 65]))   # [0 1 2 3]  genç, yetişkin, orta, yaşlı

from sklearn.preprocessing import PolynomialFeatures
print(PolynomialFeatures(2, include_bias=False).fit_transform([[2, 3]]))
# [[2. 3. 4. 6. 9.]]  x1, x2, x1², x1·x2, x2²

Polinom özellik sayısı hızla büyür; derece 2 ya da 3 genellikle yeterlidir.

Uygulama Eğriyi doğrusal modele öğret

y = x² ilişkisinde düz LinearRegression ve PolynomialFeatures(2) ile genişletilmiş bir LinearRegression eğit. İkisinin R² skorunu (score) round(..., 3) ile alt alta yazdır.

Başlangıç kodu

model.py
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

X = np.arange(-5, 6).reshape(-1, 1)
y = X.ravel() ** 2

# buraya yaz

Örnek çözüm

model.py
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

X = np.arange(-5, 6).reshape(-1, 1)
y = X.ravel() ** 2

duz = LinearRegression().fit(X, y)
Xp = PolynomialFeatures(2).fit_transform(X)
egri = LinearRegression().fit(Xp, y)
print(round(duz.score(X, y), 3))
print(round(egri.score(Xp, y), 3))

Beklenen çıktı

0.0
1.0

Soru ve cevaplar

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

1 Logaritma dönüşümü hangi tür dağılımda en çok işe yarar?

  • Sağa çarpık, uzun kuyruklu Doğru cevap
  • Simetrik
  • Kategorik
  • Negatif değerli

Açıklama: Büyük değerleri sıkıştırıp dağılımı daha simetrik yapar.

2 Değerleri sınırlara göre gruplara ayır.

Soru
grup = np.____(yas, [18, 40, 65])
Cevap
grup = np.digitize(yas, [18, 40, 65])

Açıklama: digitize her değerin hangi aralığa düştüğünün indeksini verir.

3 Dönüşümleri amaçlarıyla eşleştir.

Kavram Anlamı
np.log1p Çarpıklığı azaltır
np.digitize Aralıklara böler
PolynomialFeatures Eğri ilişki ekler
x1·x2 Etkileşim özelliği

Başlangıç bölümündeki tüm dersler