← 3.1 3.3 →
MODÜL 3.2

Standardizasyon & Min-Max: Sayıları Aynı Ölçeğe Getirme

Elmaları ve filleri aynı terazide tartmak! 🍎⚖️🐘
Farklı ölçekteki sayıları modelin anlayacağı ortak bir dile çevirin.

Neden Ölçeklendirme Gerekli?

⚖️ Problem: Büyük Sayılar Küçük Sayıları Ezer

Modeliniz metrekare (50-200) ve oda sayısı (1-6) gibi farklı ölçekteki sayıları aynı anda değerlendirirken, büyük sayılar küçük sayıların etkisini maskeler. Bu da modelin yanlış öğrenmesine yol açar.

🎮 Hemen Deneyin: Hangi Ölçeklendirme Yöntemi?

📊
Standardizasyon (Z-Skoru)

Ortalama: 0, Standart Sapma: 1

100 → -0.5, 200 → +1.2
🎯
Min-Max [0,1]

Minimum: 0, Maksimum: 1

100 → 0.33, 200 → 1.00

Standardizasyon Seçildi

Formül: (Değer - Ortalama) / Standart Sapma
En iyi kullanım: Lineer modeller, Lasso/Ridge, KNN, PCA

⚠️ Kritik Kural: Train/Test Ayrımı

Ölçeklendirme parametreleri sadece eğitim verisi üzerinden hesaplanır ve aynı parametreler test verisine uygulanır. Aksi takdirde "veri sızıntısı" olur ve model gerçek performansını göstermez!

✅ Hangisini Kullanmalıyım?

Standardizasyon (Z) kullan:
  • Lineer Regresyon, Lasso, Ridge
  • K-Nearest Neighbors (KNN)
  • Principal Component Analysis (PCA)
  • Aykırı değerler varsa
Min-Max kullan:
  • Yapay Sinir Ağları
  • Görüntü işleme (piksel değerleri)
  • Oranlar ve yüzdeler
  • Sabit aralık gerektiğinde

🔬 Gerçek Veri ile Deneyin

Standardizasyon (Z)
Min–Max [0,1]

📊 Sonuçları Karşılaştırın

Önce (Ham Veri)

Sonra (Ölçeklendirilmiş)

📈 İstatistikler (Önce)

📉 İstatistikler (Sonra)

Dağılım Grafiği (Önce)

Dağılım Grafiği (Sonra)

💻 Gerçek Kod Örneği

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler, MinMaxScaler
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LinearRegression

# Ölçeklendirilecek sayısal sütunlar
num_cols = ["metrekare", "oda_sayisi", "bina_yasi"]

# Standardizasyon seçeneği
scale = StandardScaler()  # veya MinMaxScaler()

# Tüm ön işlemleri birleştir
preprocess = ColumnTransformer(
    transformers=[("num", scale, num_cols)],
    remainder="drop"  # Diğer sütunları at (hedef Y'yi asla ölçekleme!)
)

# Model pipeline'ı oluştur
pipe = Pipeline([
    ("prep", preprocess),
    ("model", LinearRegression())
])

# ⚠️ ÖNEMLİ: Ölçeklendirmeyi sadece eğitim verisiyle fit et!
# X_train, X_test, y_train, y_test = train_test_split(X, y)
# pipe.fit(X_train, y_train)  # ← Sadece burada ölçek parametreleri hesaplanır
# y_pred = pipe.predict(X_test)  # ← Test verisi eğitim parametreleriyle ölçeklenir
← Geri: 3.1 İleri: 3.3 →