"Enter"a basıp içeriğe geçin

Veri Ölçeklendirme ve Normalizasyon

Feature Scaling and Normalization

Sıklıkla eş anlamlı olarak kullanılsalar da normalizasyon (normalization) bir veri öz niteliğinin (feature) dağılımına müdahale ederek normal dağılıma çevirmek iken ölçeklendirme (scaling) veri aralığını güncellemek anlamına gelmektedir.

Bir çok makine öğrenmesi yöntemi, kümeleme analizi ya da veri ön işleme adımları veri ölçeklerine yüksek bağımlılık gösterirken kimi yöntemler ise dağılıma karşı da hassasiyet gösterebilmektedir. Bu nedenle daha iyi sonuçlar elde edebilmek adına her bir öz niteliği eşit aralıklara indirgemek ve/veya dağılımlarını normal dağılıma çevirerek standart hale getirmek gerekebilir. Örneğin kıyafet bedenini tahminlemek üzere bir model eğitilmeden önce, farklı dağılımlar, birimler ve aralıklarla ifade edilen boy ve kilo değişkenlerini eş önem seviyesine çekmek üzere normalizasyon ya da ölçeklendirme yapılabilir.

Normalizasyon ve Veri Ölçeklendirme

Veri ölçeklendirme için en sık kullanılan yöntem olan min-max scaler ile dizideki herhangi bir X değerini dönüştürmek için aşağıdaki formül uygulanır.

X’_i = \frac{X_i – min(X)}{max(X)-min(X)}

Tüm değerler için uygulandığında dağılım bozulmadan tüm değerler 0 ile 1 arasına ölçeklendirilmiş olur.

Ölçeklendirme işlemi için veriden öğrenen ve ileride dönüşüm işlemini eğitim verisi ile aynı koşullar altında yeni verilere de uygulayabilecek bir metot gereklidir. Bu açıdan sklearn.preprocessing.MinMaxScaler() .fit() ve .transform() metotları ile ihtiyaca cevap veren bir yöntemdir:

from sklearn.preprocessing import MinMaxScaler

scaler   = MinMaxScaler()
scaler.fit(data)
scaled_sample_array = scaler.transform(data)

scaler nesnesi .fit ile eğitildikten sonra (pickle vb. serileştirme kütüphaneleri yardımı ile) serileştirilerek saklanır ise ürünleştirilme aşaması ile birlikte yeni gelen verilere de aynı veri ön işleme yöntemi uygulanmış olur. Bu açıdan serileştirme işleminin tüm veri ön işleme ve modelleme aşamalarının kaydı açısından önemli olduğunu da belirtmek gerekir.

Normalizasyon yöntemi olarak ise Z-score normalization öne çıkmaktadır. Z-score dönüşümü ile seri dağılımı başlangıçta ne şekilde olursa olsun 0 ortalamalı (zero mean) ve standart sapması 1 olan bir dağılıma dönüştürülmüş olur:

X’_i = \frac{X_i – \mu}{\sigma}

μ dizinin ortalamasını belirtirken σ ise standart sapmayı belirtmektedir.

sklearn.preprocessing.StandartScaler() ile bu dönüşümü sklearn.datasets.load_wine() üzerinde uygulamak için:

from sklearn.datasets import load_wine
from sklearn.preprocessing import StandardScaler

data = load_wine()
features = pd.DataFrame(data.data, columns=data.feature_names)

normalizer = StandardScaler()
normalizer.fit(features)
features_z_scored = normalizer.transform(features)
features_z_scored = pd.DataFrame(features_z_scored, columns = features.keys())

pd.Series.hist() metodu ile Z score dönüşümü öncesi ve sonrası dağılımları görüntülenebilir:

features.alcohol.hist()
Z score normalizasyonu öncesi
features_z_scored.alcohol.hist()
Z score normalizasyonu sonrası

Log Dönüşümü ve Temel Bileşenler Analizi gibi veri ön işleme adımlarının ölçeklendirme ve normalizasyon işlemlerinin ardından yapılmasının daha sağlıklı sonuçlar alınmasına yardımcı olacağını da belirterek yazıyı noktalayalım.

Github repo için tıklayın.

Keyifli öğrenmeler 🙂

İlk Yorumu Siz Yapın

Bir Cevap Yazın

Translate »
%d blogcu bunu beğendi: