Web sitemizde size en iyi deneyimi sunmak için çerezleri kullanıyoruz. Hangi çerezleri kullandığımız hakkında daha fazla şey öğrenmek için Gizlilik
Onayla
Türker UZUNTürker UZUN
  • VERİ ANALİZİ
    • Veri Analiz Aşamaları
    • Pandas
    • CRM Analitiği
    • Makine Öğrenmesi
    • Ölçümleme Problemleri
    • Özellik Mühendisliği
    • Tavsiye Sistemleri
    • BI Araçları
  • LLM – AI
  • METODOLOJİ
  • PROGRAMLAMA
  • BLOG
  • DİZİ & FİLM
  • İLETİŞİM
Reading: Veri Analizi Aşamaları 08 – Dengesiz Veri Kümeleri
Paylaş
Aa
Türker UZUNTürker UZUN
Aa
  • VERİ ANALİZİ
  • LLM – AI
  • METODOLOJİ
  • PROGRAMLAMA
  • BLOG
  • DİZİ & FİLM
  • İLETİŞİM
Ara...
  • VERİ ANALİZİ
    • Veri Analiz Aşamaları
    • Pandas
    • CRM Analitiği
    • Makine Öğrenmesi
    • Ölçümleme Problemleri
    • Özellik Mühendisliği
    • Tavsiye Sistemleri
    • BI Araçları
  • LLM – AI
  • METODOLOJİ
  • PROGRAMLAMA
  • BLOG
  • DİZİ & FİLM
  • İLETİŞİM
Follow US
Türker UZUN > Blog > Veri Analizi > Python Veri Analizi > Veri Analizi Aşamaları 08 – Dengesiz Veri Kümeleri
Python Veri Analizi

Veri Analizi Aşamaları 08 – Dengesiz Veri Kümeleri

8 Min Read
Paylaş
8 Min Read
Python Blog, Python Soruları, Python Dersleri, Python Veri Analizi, Python İlginç Sorular

Dengesiz Veri Kümesi Nedir?

Bir veri kümesinde, bir sınıfın örneklerinin diğer sınıflara göre çok daha az sayıda olması durumuna dengesiz veri kümesi denir. Bu durum, birçok gerçek dünya probleminde sıklıkla karşılaşılan bir sorundur. Dengesiz veri kümeleri, sınıflandırma modellerinin performansını olumsuz etkileyebilir.

Contents
Dengesiz Veri Kümesi Nedir?Örnekleme:Azınlık Sınıfın Üst Örneklemesi (Over-sampling):Çoğunluk Sınıfın Alt Örneklemesi (Under-sampling):Maliyet Duyarlı Öğrenme:Algoritma Seçimi:SMOTE Tekniği:Python’da SMOTE Tekniği:ADASYN, RUSBoost, CO-SE, NearMiss, Tomek Links vb. Yöntemler:

Örnekleme:

Azınlık Sınıfın Üst Örneklemesi (Over-sampling):

Azınlık sınıftaki örnekleri çoğaltarak veri kümesini dengelemek mümkündür. Bu, azınlık sınıfındaki örnek sayısını artırarak sınıf dengesizliğini azaltır.

Çoğunluk Sınıfın Alt Örneklemesi (Under-sampling):

Çoğunluk sınıftaki örnekleri azaltarak veri kümesini dengelemek mümkündür. Bu, özellikle çoğunluk sınıfındaki örneklerin sayısı çok fazlaysa ve bu durum modelin yanıltılmasına neden oluyorsa kullanılabilir.

Maliyet Duyarlı Öğrenme:

Sınıflandırma hatalarının her bir sınıf için farklı maliyetlere sahip olduğunu varsayan bir öğrenme algoritması kullanmak mümkündür. Bu, modelin azınlık sınıfındaki örnekleri daha iyi öğrenmesini sağlayabilir.

Algoritma Seçimi:

Dengesiz veri kümeleri için özel olarak tasarlanmış sınıflandırma algoritmaları mevcuttur. K-Nearest Neighbors (KNN) ve Random Forest gibi algoritmalar, dengesiz veri kümeleri ile daha iyi performans gösterebilir.

SMOTE Tekniği:

SMOTE (Synthetic Minority Over-sampling Technique): SMOTE, azınlık sınıftaki örneklerden yeni sentetik örnekler oluşturarak veri kümesini dengelemek için kullanılan bir tekniktir. Bu yöntem, her azınlık sınıf örneği için komşu örneklerden birini seçer ve bu iki örnek arasında yeni bir sentetik örnek oluşturur.

  • Avantajlar:
    • Azınlık sınıftaki örneklerin sayısını artırır.
    • Sınıflandırma modellerinin azınlık sınıfını daha iyi öğrenmesini sağlar.
    • Veri kümesindeki gürültü miktarını azaltabilir.
  • Dezavantajlar:
    • Sentetik örnekler, gerçek veri örneklerini tam olarak temsil etmeyebilir.
    • Veri kümesinin boyutunu artırabilir.

Python’da SMOTE Tekniği:

Python’da SMOTE tekniğini uygulamak için “imbalanced-learn” kütüphanesi kullanılabilir. Bu kütüphane, dengesiz veri kümeleri ile başa çıkmak için çeşitli örnekleme tekniklerini içerir. Aşağıda, Python kodu ile SMOTE tekniğinin kullanımına örnek verilmiştir:

from imblearn.over_sampling import SMOTE
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification

# Dengesiz bir veri kümesi oluştur
X, y = make_classification(n_classes=2, class_sep=2, weights=[0.1, 0.9],
                           n_informative=3, n_redundant=1, flip_y=0,
                           n_features=20, n_clusters_per_class=1,
                           n_samples=1000, random_state=42)

# Veriyi eğitim ve test setlerine ayır
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# SMOTE tekniğini uygula
smote = SMOTE(random_state=42)
X_resampled, y_resampled = smote.fit_resample(X_train, y_train)

Bu örnek, “imbalanced-learn” kütüphanesinde bulunan SMOTE sınıfını kullanarak azınlık sınıftaki örnekleri artırmak için bir örnek sağlar.

ADASYN, RUSBoost, CO-SE, NearMiss, Tomek Links vb. Yöntemler:

  1. ADASYN (Adaptive Synthetic Sampling):
    • Açıklama: SMOTE’a benzer bir yaklaşımı benimser, ancak örnek üretirken sınıflar arasındaki yoğunluğu dengelemeye çalışır.
    • Avantajlar: Daha az gürültü oluşturabilir ve daha dengeli örnekler üretebilir.
    • Dezavantajlar: Hesaplama maliyeti biraz daha yüksektir.
  2. Random Under-sampling and Over-sampling for Imbalanced Learning (RUSBoost):
    • Açıklama: Çoğunluk ve azınlık sınıflarında rastgele örneklerin seçilerek denge sağlanır. Bu örnekleri kullanarak bir zayıf öğrenici eğitilir ve ardından bu öğreniciyi güçlendirmek için yeni örnekler eklenir.
    • Avantajlar: Dengeli bir örneklem sağlamaya çalışır ve enseble yöntemlerini kullanarak performansı artırabilir.
    • Dezavantajlar: Rastgele seçimden dolayı bilgi kaybına neden olabilir.
  3. NearMiss:
    • Açıklama: Çoğunluk sınıfındaki örnekleri azınlık sınıfına yakın olanlardan seçer.
    • Avantajlar: Azınlık sınıfındaki örneklerin seçiminde daha bilinçli bir yaklaşım sunar.
    • Dezavantajlar: Eğitim süresini artırabilir ve örnek seçiminde belirli durumları göz ardı edebilir.
  4. Cluster-based Over-sampling (CO-SE):
    • Açıklama: K-Means veya Hierarchical clustering gibi kümeleme algoritmalarını kullanarak çoğunluk sınıfındaki örnekleri gruplara ayırır. Ardından, azınlık sınıfındaki örnekleri her bir kümeyle ilişkilendirerek çoğunluk sınıfını üst örneklerle doldurur.
    • Avantajlar: Kümeleme algoritmalarının örnek seçimindeki avantajlarından yararlanabilir.
    • Dezavantajlar: Hesaplama maliyeti yüksek olabilir ve bazı durumlarda etkisiz olabilir.
  5. Tomek Links:
    • Açıklama: Çoğunluk ve azınlık sınıfındaki örnekler arasında Tomek links adı verilen çiftleri tespit eder. Bu çiftler içindeki çoğunluk sınıfı örnekleri çıkartılır.
    • Avantajlar: Bilgi kaybını minimumda tutar ve örnek seçiminde belirli durumları ele alabilir.
    • Dezavantajlar: Azınlık sınıfındaki örnek sayısını yeterince artırmayabilir.
  6. Edited Nearest Neighbors (ENN):
    • Açıklama: K-NN algoritması kullanılarak azınlık sınıfındaki örneklerin çoğunluk sınıfındaki komşuları kontrol edilir. Azınlık sınıfındaki örnekler, çoğunluk sınıfı komşularından belirli bir kriterle uzaksa çıkartılır.
    • Avantajlar: Gürültüyü azaltabilir ve bilinçli örnek seçimi yapabilir.
    • Dezavantajlar: Hesaplama maliyeti biraz daha yüksektir.

Senior seviyedeki veri bilimcileri genellikle problem bağlamına ve veri setinin özelliklerine bağlı olarak çeşitli yöntemleri bir araya getirebilir. Tercih edilen yöntem, genellikle deneyim, uzmanlık alanları ve problemle ilgili bilgiye dayanır.

Bununla birlikte, genelde bir veri bilimcisi veya veri mühendisi dengesiz veri kümeleriyle başa çıkarken şu stratejileri kullanabilir:

  • SMOTE ve Benzeri Teknikler: Azınlık sınıfındaki örnekleri artırmak için SMOTE gibi over-sampling teknikleri.
  • Azınlık Sınıfın Alt Örneklemesi: Çoğunluk sınıfındaki örnekleri azaltarak denge sağlamak.
  • Maliyet Duyarlı Öğrenme: Sınıflandırma hatasının maliyetini dengeleyen algoritmalar kullanmak.
  • Özel Algoritmalar: Dengesiz veri kümeleri için tasarlanmış özel sınıflandırma algoritmalarını (örneğin, XGBoost, LightGBM) kullanmak.
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier
from imblearn.over_sampling import SMOTE
from imblearn.pipeline import Pipeline

# Örnek bir veri seti oluşturalım (dengesiz)
data = pd.DataFrame({
    'feature1': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20],
    'feature2': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 150, 200],
    'label': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1]  # Dengesiz etiketler
})

# Bağımsız değişkenler (X) ve bağımlı değişken (y) ayırma
X = data.drop('label', axis=1)
y = data['label']

# Eğitim ve test setlerini oluşturma
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# SMOTE ile XGBoost kullanarak bir pipeline oluşturma
model_xgb = XGBClassifier(random_state=42)
pipeline_xgb = Pipeline([('smote', SMOTE(random_state=42)), ('xgb', model_xgb)])

# Modeli eğitme
pipeline_xgb.fit(X_train, y_train)

# Tahminler
y_pred_xgb = pipeline_xgb.predict(X_test)

# Sınıflandırma raporu
print("XGBoost Sınıflandırma Raporu:")
print(classification_report(y_test, y_pred_xgb))

# SMOTE ile LightGBM kullanarak bir pipeline oluşturma
model_lgbm = LGBMClassifier(random_state=42)
pipeline_lgbm = Pipeline([('smote', SMOTE(random_state=42)), ('lgbm', model_lgbm)])

# Modeli eğitme
pipeline_lgbm.fit(X_train, y_train)

# Tahminler
y_pred_lgbm = pipeline_lgbm.predict(X_test)

# Sınıflandırma raporu
print("\nLightGBM Sınıflandırma Raporu:")
print(classification_report(y_test, y_pred_lgbm))
  • Cluster-based Over-sampling (CO-SE) ve Diğer Karmaşık Teknikler: Kümeleme algoritmalarını içeren daha karmaşık over-sampling teknikleri.
import pandas as pd
from sklearn.datasets import make_classification
from imblearn.over_sampling import SMOTE
from imblearn.over_sampling import KMeansSMOTE
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report

# Örnek bir veri seti oluşturalım (dengesiz)
X, y = make_classification(n_classes=2, class_sep=2, weights=[0.1, 0.9],
                           n_informative=3, n_redundant=1, flip_y=0,
                           n_features=20, n_clusters_per_class=1,
                           n_samples=1000, random_state=42)

# Bağımsız değişkenler (X) ve bağımlı değişken (y) ayırma
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Önce SMOTE'u uygulayarak dengesiz veri kümesini dengeleme
smote = SMOTE(random_state=42)
X_resampled_smote, y_resampled_smote = smote.fit_resample(X_train, y_train)

# Ardından KMeansSMOTE'u uygulayarak dengesiz veri kümesini dengeleme
kmeans_smote = KMeansSMOTE(cluster_balance_threshold=0.1, random_state=42)
X_resampled_cose, y_resampled_cose = kmeans_smote.fit_resample(X_train, y_train)

# Random Forest sınıflandırıcıları oluşturma
rf_smote = RandomForestClassifier(random_state=42)
rf_cose = RandomForestClassifier(random_state=42)

# SMOTE ile eğitim
rf_smote.fit(X_resampled_smote, y_resampled_smote)

# CO-SE ile eğitim
rf_cose.fit(X_resampled_cose, y_resampled_cose)

# SMOTE ile test
y_pred_smote = rf_smote.predict(X_test)

# CO-SE ile test
y_pred_cose = rf_cose.predict(X_test)

# Sınıflandırma raporları
print("SMOTE ile Sınıflandırma Raporu:")
print(classification_report(y_test, y_pred_smote))

print("\nCO-SE ile Sınıflandırma Raporu:")
print(classification_report(y_test, y_pred_cose))

Hangi stratejinin tercih edileceği, veri setinin büyüklüğü, sınıflar arasındaki oran, özelliklerin doğası ve problem bağlamına bağlıdır. Ayrıca, deneme yanılma yoluyla hangi stratejinin en iyi performansı sağladığını belirlemek de önemlidir.

ETİKETLER: ADASYN, CO-SE, Dengesiz Veri Kümeleri, ENN, NearMiss, Python, RUSBoost, SMOTE, Tomek Links, Veri Analizi Aşamaları, Veri Analizi Dersleri
Editor Şubat 25, 2024
Paylaş
Whatsapp Whatsapp LinkedIn Email Copy Link

Son Yazılar

  • LangChain Tool Tanıtımı (Kategorik)
  • Flowise Tool Node Tanıtımı
  • Flowise – Hazır Chatflow Akışları
  • Flowise – Hangi Node Ne Zaman Kullanılır?
  • Flowise Eğitimi – Node’ları Tanıyalım

Takip Et

Sponsor Linkler

İlginizi Çekebilir

Büyük Dil Modelleri (LLM)LLM - AI AJANLAR

Büyük Dil Modellerinde Yanıt Süresi Optimizasyonu: Ollama ve Langchain

Doğal Dil İşleme (NLP)LLM - AI AJANLARPython Veri AnaliziVeri Analizi

Türkiye’deki Mobil Bankacılık Deneyiminde Neler Gizli: “Part1 – IOS”

Makine ÖğrenmesiPython Veri AnaliziVeri Analizi

Sorun: CatBoost ve NumPy 2.x Anlaşamıyorlar

BLOGPython Veri AnaliziVeri Analizi

Yemek Yapmayı Kolaylaştıran Gizli Güç: Yapay Zeka ile Tarif Önerisi ve Zorluk Tahmini

Türker UZUNTürker UZUN
Takip Et

Veri Analizi, ETL Süreçleri, Makine Öğrenimi, Doğal Dil İşleme Projeleri, Python Dersleri, Python Blog, Teknoloji Yazarı, AI Agents

Removed from reading list

Undo