Scikit-Learn Kütüphanesi ile Data Ölçeklendirme

İbrahim Halil Kaplan
Machine Learning Turkiye
6 min readJan 24, 2022
Aslan kadar aslan olmalı. Belki de kedi kadar olmalı :))

Datayı ölçeklendirme, verilerin standartlaştırılması için gerekli olan önemli ön işlemlerden biridir. Her sütundaki değer aralığı çok farklı olduğunda, bunları ortak bir düzeye indirgememiz yani ölçeklendirmemiz gerekir. Bu sebeple, makine öğrenmesi algoritmalarından önce bazı ön işlemler yapmamız algoritmamızın başarısı için çok önemli bir husustur. Bunlar eksik değerlerin ve aykırı değerlerin ele alınması ve veri temizliği gibi bazı temel veri analizi süreçleri olabileceği gibi esas inceleyeceğimiz konu ölçekleme yani veri dönüştürmedir.

Böyle bir kümeleme olmaz olsun !

Ölçekleme zorunlu değildir, yukarıdaki gibi ölçeklenmemiş bir data ile çok kötü bir sonuç alabiliriz. Ölçeklemenin temel amacı, daha büyük sayısal aralıkların etkilerinden kaçınmaktır ve bazı makine öğrenimi algoritmalarından önce verileri ölçeklendirmek daha iyi performans gösterecektir. Özellikle KNN (k-En Yakın Komşu), K-Means Clustering, SVM (Support Vector Machine), PCA (Principal Component Analysis) algoritmaları gibi mesafenin önemli olduğu makine öğrenmesi algoritmaları için çok önemlidir.

Aşağıdaki dağılım grafiklerinde, PCA sürecinde ölçekleme kullanılan ile ölçekleme olmayan arasındaki farkı kontrol edebilirsiniz. Gördüğünüz gibi veriler arasındaki mesafe ölçekleme olmadan çok geniştir, bu nedenle noktaları ayırmak zordur. Ölçekleme kullanıldığında ise sınıflandırma kolaylaştığından verimlilik artar ve modelimiz daha iyi bir performans sağlar.

Daha önce belirtildiği gibi, ölçeklemenin amacı, veri kümesindeki her bir veriyi birbirine yaklaştırmaktır. Diğer amaç, hesaplama sırasında bazı sayısal zorluklardan kaçınmaktır. Örneğin Gradient Descent tabanlı optimizasyon algoritması ölçeklemeyi sever ve ölçekleme ile daha iyi performans gösterir. Gradient Descent kullanan yaygın algoritmalar olan Lineer Regresyon ve Lojistik Regresyon da ölçeklenebilir. Diğer makine öğrenimi algoritmaları ve Sinir Ağları için de ölçekleme uygulayabiliriz. Daha iyi performans ve daha iyi sonuçlar elde edebiliriz. Sonuçları ölçekleme ile ve ölçekleme olmadan karşılaştırabiliriz. Karar Ağacı, Rastgele Orman, Adaboost gibi bazı algoritmaların ölçeklenmesine gerek yoktur.

Kaynak

Ölçekleme tiplerinden en çok kullanılanlar üzerinden devam edelim. StandardScaler, RobustScaler, MinMaxScaler ve MaxAbsScaler.

1- StandardScaler

StandardScaler, ortalamaya dayalı bir ölçekleme yöntemidir. StandardScaler formülü (Xi-Xmean)/Xstd’dir, bu nedenle ortalamayı 0 olarak ayarlar.

Kaynak

StandardScaler, aykırı değerlerden olumsuz etkilenir çünkü aykırı değerler ortalamayı etkiler. Normal bir dağılımınız varsa veya normale yakın verileriniz varsa, StandardScaler verilerinizi standart normal dağılıma yaklaştırır. Ancak, aykırı değerleriniz varsa StandardScaler iyi performans göstermez. StandardScaler’ı grafiklerde kontrol edelim:

from sklearn.preprocessing import StandardScaler
df_scale = StandardScaler().fit_transform(df)

Burada öncelikle şu hususu anlatmalıyım:

Kaynak

Yukarıda gördüğünüz normal dağılımdır ve sağa ya da sola bir eğilim, meyil ya da çarpıklık yoktur. Sola eğik bir dağılımın uzun bir uzantısı vardır. Sola çarpık dağılımlara negatif çarpık dağılımlar da denir. Bunun nedeni, sayı doğrusunda negatif yönde uzun bir kuyruk olmasıdır. Ortalama aynı zamanda zirvenin solundadır.

Sağa eğik bir dağılımın uzun bir sağ kuyruğu vardır. Sağa çarpık dağılımlara pozitif çarpık dağılımlar da denir. Bunun nedeni, sayı doğrusunda pozitif yönde uzun bir kuyruk olmasıdır. Ortalama da tepenin sağındadır. Sağa eğimli ve sola eğimli dağılımlara dair mod, meydan ve ortalama bilgileri de aşağıdaki görselde gösterilmektedir.

Kaynak

Yukarıdaki örneğimizde ise şekilden de anlaşılacağı üzere sağa eğimli verilerimiz bulunmaktadır. StandardScaler uygulamasından sonra verilerimiz 0 civarında kümelenir, ancak yine de sağa çarpıktır ve büyük bir ölçeğe sahiptir (-1 ve 3). Veriler kümelenmiş durumda ve büyük aykırı değerlere sahip değildir. Aykırı değer olarak daha büyük değerlerimiz varsa, StandardScaler ile iyi sonuçlar alamayız. Çünkü aykırı değerler bu örnekte olduğu gibi tüm ölçekleme verilerini etkileyecektir. Bu gibi durumlarda, öncelikle aykırı değerleri kaldırmak daha iyidir. Şimdilik log dönüşümünü kullanacağız. Aykırı değerlerle başa çıkma yöntemlerine dair detaylı bilgilere buradan ulaşabilirsiniz.

from sklearn.preprocessing import StandardScaler
import numpy as np
df_log = np.log(df)
df_scale = StandardScaler().fit_transform(df_log)

Log dönüşümü, veri dağılımını normal dağılıma dönüştürür. Dönüşümden sonra, StandardScaler uygulaması verilerimizi standart normal dağılıma yakınlaştırır. Bu yöntem daha iyi performans gösterir ve aykırı değerlerin etkilerini ortadan kaldırır. StandardScaler’ı aykırı olmayan verilere uygulamak daha iyidir.

2 - RobustScaler

from sklearn.preprocessing import RobustScaler

RobustScaler, medyan tabanlı bir ölçekleme yöntemidir. RobustScaler formülü (Xi-Xmedian) / Xiqr olduğundan aykırı değerlerden etkilenmez. Medyan kaldırarak veriler nicelik aralığına göre ölçeklenir (IQR: Interquartile Range). IQR, 1. çeyrek (25. nicelik) ile 3. çeyrek (75. nicelik) arasındaki aralıktır.

Kaynak

Çeyrekler arası aralığı kullandığından, ölçekleme sırasında aykırı değerlerin etkilerini minimum hale getirir. Çeyrekler arası aralık (Q3 — Q1), veri noktasının yarısına sahiptir. Modelini etkileyebilecek aykırı değerleriniz varsa ve bunları kaldırmak istemiyorsanız, RobustScaler en iyi seçimdir.

Yukarıda, orijinal veriler (ölçeksiz) 250000 ve 200000 noktalarında aykırı değerlere sahiptir, RobustScaler’dan sonra 150 ve 200 olarak değişirler, ancak StandardScaler onları 25 ve 35 yapar. Aykırı değerler StandardScaler’ı etkiler ve ortalama noktaya çok yaklaşır. RobustScaler, aykırı değerleri veri ortalamasından uzakta olmaları gereken yerde tutar.

3 - MinMaxScaler

from sklearn.preprocessing import MinMaxScaler

Datamızın özelliklerini/değişkenlerini normalleştirmenin bir başka yolu (özellikleri μ=0 ve σ=1 olacak şekilde ölçekleyen standardizasyon dışında) Min-Max ölçekleyicidir. Bunu yaparak, tüm özellikler [0,1] aralığına dönüştürülecektir, yani bir özelliğin/değişkenin minimum ve maksimum değeri sırasıyla 0 ve 1 olacaktır.

Kaynak

Ölçekleme minimum ve maksimum noktalarla hesaplanır, bu nedenle veriler aykırı değerlerden etkilenebilir. Aykırı değerler için uygun değildir. MinMaxScaler’ı uygulamadan önce aykırı değerlerle ilgili işlemler yapmak faydalı olacaktır.

4 - MaxAbsScaler

MaxAbsScaler, eğitim setindeki her bir özelliğin maksimum mutlak değeri 1.0 olacak şekilde her özelliği ayrı ayrı ölçekleyerek dönüştürür. Verileri kaydırmaz/ortalamaz ve bu nedenle herhangi bir seyrekliği yok etmez.

Kaynak

Veriler negatif değerlere sahipse, MaxAbsScaler verileri -1 ile 1 arasında ayarlar. Verileri mutlak maksimuma göre ölçeklendirir, bu nedenle aykırı değerler için uygun değildir. Aykırı değerlerle işleme gibi ön işlemeye ihtiyaç duyar.

Sonuç

Ölçeklendirmenin temel amacı, her bir değişkeni standart bir ölçekte yeniden ifade etmek ve optimizasyon algoritmalarını hızlandırmak için potansiyel olarak çok büyük sayıların neden olduğu sayısal kararsızlıklardan kaçınmaktır. Ölçeklemeyle ilgili en önemli sorun, hem eğitim hem de test verilerinin ölçeklendirmesini uyguladığınızdan emin olmaktır. Diğer türlü pek bir anlamı olmayabilir, yani esas olan tüm verileri aynı seviyeye ölçeklendirmektir.

Kaynak

StandartScaler

  • Aykırı değerlere sahip veriler için uygun değildir.
  • Ortalamayı 0'a ayarlar.

RobustScaler

  • Aykırı değerleri olan veriler için daha uygundur.

MinMaxScaler

  • Aykırı değerlere sahip veriler için uygun değildir.
  • 0 ile 1 arasındaki verileri ayarlar.

MaxAbsScaler

  • Aykırı değerlere sahip veriler için uygun değildir.
  • -1 ile 1 arasındaki verileri ayarlar.

Yazısı ve izni için Hasan Ersan YAĞCI ’ya çok teşekkür ederim.

Kaynak :

--

--