Veri bilimi projelerinde, makine öğrenmesi algoritmaları kullanılmadan önce elimizdeki veriyi kullanacağımız algoritmaya hazır hale getirmek için veri ön işleme (Data Preprocessing) adı verilen bir sürece başlarız. Algoritmanın yüksek performanslı bir şekilde çalışabilmesi için eksik ve aykırı değerlerde, gözlemlerde, değişkenlerde bazı ayarlamalar yapmamız gerekebilir. Bu içeriğimizde Python ile veri standardizasyonu konusundan bahsedeceğiz. Gerçek hayat projelerinde en çok vakit alan, bir veri bilimcisinin en çok üzerinde durduğu ve projenin en çetrefilli kısımlarından birisidir veri ön işleme.
Veri ön işlemenin kendi içinde birçok adımı ve tekniği vardır. Bunlardan bazıları, aykırı gözlem analizi, eksik değer analizi, baskılama, doldurma yöntemleri, KNN algoritmasının kullanıldığı tahmine dayalı değer atama yöntemi, veri standardizasyonu olarak sıralanabilir. Bu yazıda en kritik ve en çok hata yapılan, algoritmanın hassaslığıyla ilgili konulardan biri olan veri standardizasyonu konusunu değişkenler üzerinden ele alacağız.
Değişken Standardizasyonu Nedir?
Değişkenin kendi içindeki bilgi ve varyans yapısını bozmadan, değerleri değiştirip belli bir formata sokup bu formatta işlenmesine olanak sağlamak için veriyi standart hale getirme işlemine standardizasyon adını veriyoruz. Değişken (veri) standardizasyonunda taşınan bilginin dağılımı yayılımı değişmez. Bu kısmı biraz daha açmak gerekirse istatiksel değerler korunur, mesela 10. Sırada olan bir veri yeni formatta tekrar 10. Sırada yer alır.
Numpy ve Pandas ile Veri Standardizasyonu
Konunun basitçe anlaşılıp temel mantığının gösterilmesi için kendi oluşturduğumuz veri yapıları üzerinden ilerleyeceğiz. Değişken standardizasyonu işlemi için veri bilimi klasiklerinden olan Numpy ve Pandas kütüphanelerini yüklüyoruz. Bunun için öncelikle array ve sözlük yapıları üzerinden küçük bir dataframe oluşturup verileri float olarak işlemek üzere kodlarımızı aşağıdaki gibi yazıyoruz.
import numpy as np
import pandas as pd
V1 = np.array([1,3,6,5,7])
V2 = np.array([7,7,5,8,12])
V3 = np.array([6,12,5,6,14])
df = pd.DataFrame(
{"V1" : V1,
"V2" : V2,
"V3" : V3})
df = df.astype(float)
df
Yazmış olduğumuz koddan sonra editörümüzde aşağıdaki çıktıyı elde ederiz.
V1 V2 V3
0 1.0 7.0 6.0
1 3.0 7.0 12.0
2 6.0 5.0 5.0
3 5.0 8.0 6.0
4 7.0 12.0 14.0
Bu işlemlere başlamak için makine öğrenmesinin en popüler kütüphanesi olan scikit-learn adlı kütüphaneyi yükleyip içerisinden preprocessing adlı fonksiyonu çağırmamız gerekiyor.
from sklearn import preprocessing
Kütüphanenin güncel sürümüne göre yükleme işlemini gerçekleştirdikten sonra preprocessing içerisinden scale (dönüştür) fonksiyonunu df ifadesi olarak kısalttığımız veri seti üzerinde uyguluyoruz.
preprocessing.scale(df)
Ve aşağıdaki gibi dönüştürülmüş veri yapısını elde ediyoruz.
array([[-1.57841037, -0.34554737, -0.70920814],
[-0.64993368, -0.34554737, 0.92742603],
[ 0.74278135, -1.2094158 , -0.98198051],
[ 0.27854301, 0.08638684, -0.70920814],
[ 1.2070197 , 1.81412369, 1.47297076]])
Bu kısımda standardizasyonu ele aldık. Şimdi başka bir format değişikliği tekniği olan normalizasyona bakalım. Normalize fonksiyonu ile orijinal veri setimizdeki değerleri 0-1 arasındaki değerlere dönüştürüyoruz. Temsil edilen her bir değer özündeki bilgiyi ve yayılımı korumaya devam etmektedir.
preprocessing.normalize(df)
Yukarıdaki koddan sonra aşağıdaki gibi bir çıktı elde ederiz.
array([[0.10783277, 0.75482941, 0.64699664],
[0.21107926, 0.49251828, 0.84431705],
[0.64699664, 0.53916387, 0.53916387],
[0.4472136 , 0.71554175, 0.53665631],
[0.35491409, 0.60842415, 0.70982818]])
Peki ya standartlaştırma işleminde değer aralığını kendimiz belirlemek istiyorsak? Bu noktada MinMaxScaler
adlı fonksiyon yardımımıza koşuyor. Aşağıdaki kodu geliştirici ortamımızda yazalım.
scaler = preprocessing.MinMaxScaler(feature_range = (100,200))
Burada scaler adını verdiğimiz ifade ile fonksiyon için bir dönüştürücü oluşturduk. Bu dönüştürücüyü bir sonraki kod bloğunda tekrar çalıştıracağız. Parantez içindeki feature_range argümanı bizden, belirlemek istediğimiz değer aralığını girmemizi ister.
Şimdi fonksiyonu çalıştıracağımız kodu yazalım.
scaler.fit_transform(df)
fit_transform
ifadesi standardizasyon işlemlerinde kullandığımız bir fonksiyondur ve az önce nesne haline getirdiğimiz scaler
adlı ifade üzerinde bu fonksiyonu çalıştırmış olduk. Ve aşağıdaki kod çıktısını alıyoruz.
array([[100. , 128.57142857, 111.11111111],
[133.33333333, 128.57142857, 177.77777778],
[183.33333333, 100. , 100. ],
[166.66666667, 142.85714286, 111.11111111],
[200. , 200. , 200. ]])
Ana hatlarıyla Python ile veri standardizasyonu konusunu ele aldık. Görüş ve sorularınızı aşağıda yer alan yorumlar kısmında bize iletebilirsiniz.