Veri analizi ve makine öğrenmesi modellerinde, farklı değişkenlerin farklı ölçeklerde olması yaygın bir durumdur. Bu durum, modellerin performansını olumsuz etkileyebilir. Normalizasyon ve standartlaştırma, bu sorunu çözmek için kullanılan iki temel tekniktir.
Normalizasyon:
Normalizasyon, veri setindeki tüm değerleri 0 ve 1 arasında bir aralığa sığdırma işlemidir. Bu işlem, farklı değişkenlerin ölçeklerini eşitlemek ve karşılaştırılabilir hale getirmek için kullanılır.
Standartlaştırma:
Standartlaştırma, veri setindeki tüm değerleri ortalamadan 1 standart sapma uzaklığa sığdırma işlemidir. Bu işlem, farklı değişkenlerin ortalamalarını ve standart sapmalarını sıfırlamak ve eşitlemek için kullanılır.
Normalizasyon ve Standartlaştırma Arasındaki Farklar:
- Normalizasyon, veri setindeki tüm değerleri 0 ve 1 arasında bir aralığa sığdırırken, standartlaştırma ortalamadan 1 standart sapma uzaklığa sığdırır.
- Normalizasyon, veri setinin minimum ve maksimum değerlerine bağlıdır; standartlaştırma ise ortalama ve standart sapmaya bağlıdır.
- Normalizasyon, bazı durumlarda veri setindeki aşırı değerlerin (outlier) etkisini artırabilir. Standartlaştırma ise outlierların etkisini azaltır.
Normalizasyon ve Standartlaştırma Teknikleri:
- Min-Max Normalizasyonu
- Z-Skoru Standartlaştırma
- Max-Abs Skoru Standartlaştırma
- Robust Scaler
Normalizasyon ve Standartlaştırma Kullanmanın Avantajları:
- Farklı değişkenlerin ölçeklerini eşitler.
- Modellerin performansını ve doğruluğunu artırır.
- Modellerin daha hızlı eğitilmesini sağlar.
Normalizasyon ve Standartlaştırma Kullanmanın Dezavantajları:
- Veri setindeki aşırı değerlerin etkisini artırabilir.
- Veri setinin doğal dağılımını bozabilir.
Normalizasyon ve Standartlaştırma Seçimi:
Hangi tekniğin kullanılacağı, veri setinin özelliklerine ve modelin türüne bağlıdır. Genel olarak, standartlaştırma tekniği, normalizasyon tekniğine göre daha yaygın olarak kullanılır.
Normalizasyon ve Standartlaştırma Örneği:
import pandas as pd
from sklearn.preprocessing import MinMaxScaler, StandardScaler, RobustScaler
def scale_data(data, method='standard'):
"""
Verilen veri setini normalleştirme (normalize), standartlaştırma (standard) veya robust bir şekilde ölçekleme işlemi uygular.
Parameters:
- data (pd.DataFrame): İşlenecek veri seti.
- method (str): Kullanılacak ölçekleme yöntemi. 'normalize', 'standard' veya 'robust' olarak belirlenebilir.
Returns:
- pd.DataFrame: İşlenmiş veri seti.
"""
if method == 'normalize':
scaler = MinMaxScaler()
elif method == 'standard':
scaler = StandardScaler()
elif method == 'robust':
scaler = RobustScaler()
else:
raise ValueError("Geçersiz method. 'normalize', 'standard' veya 'robust' seçiniz.")
scaled_data = scaler.fit_transform(data)
processed_data = pd.DataFrame(scaled_data, columns=data.columns)
return processed_data
# Örnek kullanım:
# df: İlk veri seti
# df_normalized: Normalleştirilmiş veri seti
# df_standardized: Standartlaştırılmış veri seti
# df_robust_scaled: Robust bir şekilde ölçeklenmiş veri seti
df_normalized = scale_data(df, method='normalize')
df_standardized = scale_data(df, method='standard')
df_robust_scaled = scale_data(df, method='robust')
Bu kod, veri setindeki sayısal özellikleri eksiksiz bir şekilde doldurarak ve kategorik özellikleri One-Hot Encoding kullanarak işleyerek modüler ve esnek bir ön işleme pipeline oluşturuyor. Ayrıca, sayısal özelliklere uygulanan Z-Skoru Standartlaştırma, veri setini modellemeye hazır hale getiriyor.
Bu gelişmiş veri ön işleme yöntemi, veri analisti veya makine öğrenmesi mühendisi için kullanım kolaylığı sağlarken, kodun modüler yapısı sayesinde yeni özelliklerin eklenmesini veya mevcut işlemlerin değiştirilmesini de mümkün kılıyor. Bu nedenle, bu kod örneği, veri bilimi projelerinde veri ön işleme aşamasında karşılaşılan zorlukları aşmak isteyenler için değerli bir kaynak olabilir.
import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler, MinMaxScaler, RobustScaler, OneHotEncoder
from sklearn.impute import SimpleImputer
def advanced_preprocessing(data, numerical_features, categorical_features):
"""
Veri setini gelişmiş bir şekilde ön işleyen bir işlem akışı uygular.
Parameters:
- data (pd.DataFrame): İşlenecek veri seti.
- numerical_features (list): Sayısal özelliklerin adlarını içeren liste.
- categorical_features (list): Kategorik özelliklerin adlarını içeren liste.
Returns:
- pd.DataFrame: İşlenmiş veri seti.
"""
# Sayısal özellikleri işlemek için kullanılacak transformer
numerical_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='mean')), # Eksik değerleri doldur
('scaler', StandardScaler()) # Z-Skoru Standartlaştırma
])
# Kategorik özellikleri işlemek için kullanılacak transformer
categorical_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='most_frequent')), # Eksik değerleri en sık kullanılan değerle doldur
('onehot', OneHotEncoder(handle_unknown='ignore')) # One-Hot Encoding
])
# Sayısal ve kategorik özellikleri işlemek için birleştirilmiş transformer
preprocessor = ColumnTransformer(
transformers=[
('num', numerical_transformer, numerical_features),
('cat', categorical_transformer, categorical_features)
])
# İşlem akışını oluştur
model = Pipeline(steps=[('preprocessor', preprocessor)])
# Veriyi işle
processed_data = model.fit_transform(data)
return processed_data
# Örnek kullanım:
# df: İlk veri seti
# processed_data: Gelişmiş bir şekilde ön işlenmiş veri seti
processed_data = advanced_preprocessing(df, numerical_features=['değer1', 'değer2'], categorical_features=['kategori'])