Ana içeriğe geç

Makine Öğreniminde Bagging Nedir? Örneklerle Rehber

Bu eğitim, makine öğreniminde bagging topluluk yöntemine genel bir bakış sundu: nasıl çalıştığı, Python ile uygulama, boosting ile karşılaştırma, avantajlar ve en iyi uygulamalar.
· 10 dk. oku

Yapay Zeka ile Keşfedin

Topluluk (ensemble) yöntemleri, birden çok modeli bir araya getirerek genel tahmin doğruluğunu ve model kararlılığını artıran güçlü makine öğrenimi teknikleridir. Bootstrap Aggregating, daha çok bilinen adıyla Bagging, popüler ve yaygın olarak uygulanan bir topluluk yöntemidir.

Bu eğitimde bagging'i, nasıl çalıştığını ve nerede parladığını daha derinlemesine inceleyeceğiz. Başka bir topluluk yöntemi olan Boosting ile karşılaştıracak ve Python'da bir bagging örneğine bakacağız. Sonunda, en iyi uygulamalar dahil bagging hakkında sağlam bir anlayışa sahip olacaksınız.

Topluluk Öğrenmeyi Anlama

Topluluk Modellemesi, birden çok makine öğrenimi modelini birleştirerek genel öngörü performansını iyileştiren bir tekniktir. Temel fikir, bir grup zayıf öğrenicinin bir araya gelerek güçlü bir öğrenici oluşturabileceğidir.

Tipik bir topluluk modeli iki adımdan oluşur:

  1. Birden çok makine öğrenimi modeli birbirinden bağımsız olarak eğitilir.
  2. Tahminleri oylama, ortalama alma veya ağırlıklandırma gibi yollarla birleştirilir. Bu topluluk daha sonra genel tahmini yapmak için kullanılır.

Yazarın görseli

Topluluklar genellikle daha iyi sonuç verir çünkü farklı modeller birbirini tamamlar ve bireysel zayıflıklarını telafi eder. Ayrıca varyansı azaltır ve aşırı uyumu (overfitting) önler.

Popüler topluluk yöntemleri arasında bagging, boosting ve stacking bulunur. Topluluk öğrenme; sınıflandırma, regresyon ve kümeleme gibi makine öğrenimi görevlerinde doğruluğu ve sağlamlığı artırmak için yaygın olarak kullanılır.

Bagging Nedir?

Bagging (bootstrap aggregating), verinin rastgele alt kümeleri üzerinde birden çok modeli birbirinden bağımsız olarak eğitmeyi ve tahminlerini oylama ya da ortalama alma yoluyla birleştirmeyi içeren bir topluluk yöntemidir.

Yazarın görseli

Ayrıntıya inersek, her model, yerine koyarak örnekleme ile seçilmiş verinin rastgele bir alt kümesi üzerinde eğitilir; bu, tek tek veri noktalarının birden fazla kez seçilebileceği anlamına gelir. Bu rastgele alt kümeye bootstrap örneklemi denir. Modelleri farklı bootstrap'ler üzerinde eğitmek, bireysel modellerin varyansını azaltır. Ayrıca, alt modelleri veri setinin farklı kısımlarıyla karşılaştırarak aşırı uyumu önler.

Tüm örneklenmiş modellerin tahminleri daha sonra basit bir ortalama yoluyla birleştirilerek genel tahmin üretilir. Bu şekilde, birleştirilmiş model, bireysel modellerin güçlü yönlerini içerir ve hatalarını dengeler.

Bagging özellikle varyansı ve aşırı uyumu azaltmada etkilidir; modeli daha sağlam ve daha doğru hale getirir; özellikle de bireysel modellerin yüksek değişkenliğe yatkın olduğu durumlarda.

Bagging ve Boosting

Boosting, sıklıkla Bagging ile karşılaştırılan bir diğer popüler topluluk yöntemidir. Temel fark, alt modellerin nasıl eğitildiğinde yatar.

Bagging'de modeller, verinin farklı rastgele alt kümeleri üzerinde paralel ve bağımsız olarak eğitilir. Boosting'de ise modeller sıralı olarak eğitilir; her model, bir öncekinin hatalarından öğrenir. Ayrıca, bagging genellikle basit ortalama almayı içerirken, boosting doğruluğa göre ağırlık atar.

Yazarın görseli

Bagging varyansı azaltırken boosting yanlılığı (bias) azaltır. Bagging, karar ağaçları gibi kararsız (unstable) modellerle kullanılabilirken, boosting doğrusal regresyon gibi daha stabil modellerde daha iyi çalışır.

Her iki yöntemin de güçlü ve zayıf yönleri vardır. Bagging paralelde çalıştırması daha basitken, boosting daha güçlü ve daha doğru olabilir. Pratikte, hangisinin daha iyi performans gösterdiğini görmek için yeni bir problemde ikisini de denemek faydalıdır.

Bagging'in Avantajları

Bagging'in bazı temel avantajları şunlardır:

  1. Aşırı uyumu azaltır: Aşırı uyum riskini düşürerek, görülmemiş verilerde model doğruluğunu artırabilir.
  2. Model varyansını düşürür: Farklı veri alt kümelerinde eğitilen çoklu modellerin tahminleri ortalandığında, tek bir modele kıyasla daha düşük varyans elde edilir.
  3. Kararlılığı artırır: Eğitim veri setindeki değişiklikler bagged modellere daha az etki eder; bu da genel modeli daha kararlı kılar.
  4. Yüksek değişkenliği yönetir: Varyansı yüksek olma eğilimindeki karar ağaçları gibi algoritmalar için özellikle etkilidir.
  5. Paralelleştirilebilir hesaplama: Topluluktaki her model bağımsız olarak eğitilebilir; bu da paralel işlemeyi ve hesaplama kaynaklarının verimli kullanımını sağlar.
  6. Anlaşılması ve uygulanması kolay: Bagging'in ardındaki kavram basittir ve öğrenme algoritmasına karmaşık değişiklikler yapmadan uygulanabilir.
  7. Gürültülü verilerle iyi başa çıkar: Ortalama alma süreci, nihai tahminde gürültünün azaltılmasına yardımcı olur.
  8. Dengesiz verileri yönetir: Veri setinin dengesiz olduğu senaryolarda bagging, modelin performansını iyileştirmeye yardımcı olabilir.

Python'da Bagging: Kısa Bir Eğitim

Bu Python eğitiminde, bir telekom müşterisi terk (churn) veri seti üzerinde bir karar ağacı sınıflandırma modeli eğitecek ve performansı artırmak için bagging topluluk yöntemini kullanacağız. Veri setini almak ve kodumuzu çalıştırmak için DataLab'i kullanacağız. Kod ayrıca bu DataLab çalışma kitabında da mevcut; hiçbir şey yüklemeden tarayıcınızda çalıştırmak için kopyalayabilirsiniz.

Veri seti

Telekom müşteri terk veri seti İranlı bir telekom şirketinden gelmektedir. Veri setindeki her satır, bir yıl boyunca bir müşterinin etkinliğine karşılık gelir; arama hataları, abonelik süresi ve müşterinin hizmetten ayrılıp ayrılmadığını gösteren bir terk etiketi gibi bilgileri içerir.

İlk olarak, veri setini yükleyip ilk 5 satırı görüntüleyeceğiz.

import pandas as pd

customer = pd.read_csv("data/customer_churn.csv")
customer.head()

Veri setini görüntüleme

Bunun ardından, bağımsız (X) ve bağımlı (y) değişkenleri oluşturacağız. Daha sonra veri setini eğitim ve test alt kümelerine böleceğiz.

X = customer.drop("Churn", axis=1)
y = customer.Churn

# Split into train and test 
from sklearn.model_selection import train_test_split, cross_val_score
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)

Bir makine öğrenimi modeli eğitin

Basit bir makine öğrenimi ardışık düzeni (pipeline) oluşturacak ve buna bir eğitim veri setiyle uyumlayacağız. Ardışık düzen, girdileri karar ağacı sınıflandırıcısına vermeden önce veriyi normalize edecek.

from sklearn.tree import DecisionTreeClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline

pipeline = Pipeline([
    ('scaler', StandardScaler()),
    ('classifier', DecisionTreeClassifier(random_state=42))
])

pipeline.fit(X_train, y_train)

Ardışık düzen diyagramı 1

Ağaç Tabanlı Modellerle Makine Öğrenimi kursunu alarak scikit-learn ile regresyon ve sınıflandırma için ağaç tabanlı modelleri ve toplulukları nasıl kullanacağınızı öğrenin.

Model değerlendirme

Topluluk modeliyle karşılaştırabilmek için bir karar ağacı modelini değerlendireceğiz.

Bir test veri sayfasında tahminler yaparak sınıflandırma raporları oluşturacağız.

from sklearn.metrics import classification_report

# Make prediction on the testing data
y_pred = pipeline.predict(X_test)

# Classification Report
print(classification_report(y_pred, y_test))

Modelimiz, çoğunluk sınıfı “0” için %%96 kesinlik ve %%97 duyarlılık elde etti, ancak azınlık sınıfı “1” üzerinde zayıf performans gösterdi.

Model performans sonuçları

Modelin performansını daha iyi anlamak için çapraz doğrulama yapacak ve karşılık gelen skorları hesaplayacağız.

# Evaluate the classifier using cross-validation
cv_scores = cross_val_score(pipeline, X, y, cv=5)

print(f"Cross-validation scores: {cv_scores}")
print(f"Mean CV accuracy: {np.mean(cv_scores):.2f}")

Skorlarda yüksek değişkenlik var; en yüksek %%95, en düşük %%92.

Cross-validation scores: [0.95079365 0.94126984 0.93492063 0.94285714 0.92222222]
Mean CV accuracy: 0.94

Bagging sınıflandırıcı

Şimdi, temel tahminleyici olarak ardışık düzenimizi (ölçekleyici + karar ağacı sınıflandırıcısı) kullanarak bir bagging sınıflandırıcı oluşturalım ve bunu bir eğitim veri seti üzerinde eğitelim.

Model performansını n_estimators değerini artırarak geliştirebiliriz, ancak 50 başlangıç sonuçları için yeterlidir.

from sklearn.ensemble import BaggingClassifier

# Create a bagging classifier with the decision tree pipeline
bagging_classifier = BaggingClassifier(base_estimator=pipeline, n_estimators=50, random_state=42)

# Train the bagging classifier on the training data
bagging_classifier.fit(X_train, y_train)

BaggingClassifier ardışık düzen diyagramı

Topluluk modelini değerlendirme

Topluluk modelinin sonuçlarını değerlendirelim ve tek model performansıyla karşılaştıralım. Bunun için bir test veri seti üzerinde sınıflandırma raporları üreteceğiz.

# Make prediction on the testing data
y_pred = bagging_classifier.predict(X_test)

# Classification Report
print(classification_report(y_pred, y_test))

Görüldüğü gibi, model performansını göreli olarak iyileştirdik. Azınlık sınıfı için kesinlik %%79'dan %%80'e, duyarlılık ise %%77'den %%82'ye yükseldi. Bu, kayda değer bir iyileşmedir.

Model performans sonuçları

Şimdi de çapraz doğrulama skorunu hesaplayalım.

# Evaluate the classifier using cross-validation
cv_scores = cross_val_score(bagging_classifier, X, y, cv=5)

print(f"Cross-validation scores: {cv_scores}")
print(f"Mean CV accuracy: {np.mean(cv_scores):.2f}")

Çapraz doğrulama skorlarımızın varyansı düşük; %%94 ile %%96 arasında değişiyor. Modelin genel doğruluğu da %%94'ten %%95'e yükseldi.

Cross-validation scores: [0.95396825 0.95714286 0.94126984 0.96190476 0.95714286]
Mean CV accuracy: 0.95

Bagging tekniği, makine öğrenimi uygulamalarında model doğruluğunu ve kararlılığını artırmak için yararlı bir araçtır.

Python'da bagging, boosting ve stacking gibi topluluk tekniklerini öğrenerek gelişmiş ve etkili makine öğrenimi modelleri oluşturmak için Ensemble Methods in Python kursuna göz atın.

En İyi Uygulamalar ve İpuçları

Makine öğreniminde bagging kullanırken aşağıdaki en iyi uygulamalar ve ipuçlarını izlemek etkinliğini en üst düzeye çıkarabilir:

  1. Varyansı yüksek modelleriniz olduğunda (ör. karar ağaçları) kararlılığı artırmak için bagging kullanın.
  2. Daha güvenilir bir değerlendirme için bagging'i çapraz doğrulama ile birleştirin.
  3. Rastgele ormanları (bagging uygulanmış karar ağaçları) güçlü, kullanıma hazır bir bagging tekniği olarak kullanın.
  4. Daha yüksek bir n_estimators değeri (ör. 100-200) belirleyerek bagging'den azami faydayı sağlayın.
  5. Bagging kolayca paralelleştirilebilir; n_jobs kullanarak eğitimleri birden çok CPU/makineye dağıtın.
  6. Bagging bootstrap örneklemeye dayandığından, her modelin yeterince çeşitli bir veri alt kümesi üzerinde eğitildiğinden emin olun.
  7. Birleştirmeden önce, her bir modelin performansını GridSearchCV ile optimize edin. Bireysel modellerin iyi performansı genellikle topluluğun daha iyi performans göstermesine dönüşür.

Makine öğrenimi sistemlerinin güvenilir ve ölçeklenebilir şekilde dağıtımı için başarılı uygulamaları öğrenmek üzere MLOps (Makine Öğrenimi Operasyonları) En İyi Uygulamaları yazısını okuyun.

Sonuç

Bu eğitimde, güçlü bir topluluk makine öğrenimi tekniği olan bagging'i inceledik. Bagging, genel öngörü performansını artırmak için birden çok modeli bir araya getirir. Boosting ile karşılaştırdık ve tek bir model kullanmaya kıyasla avantajlarını öğrendik.

Son olarak, Python'da bir telekom terk veri seti üzerinde bir bagging sınıflandırıcı uyguladık. Karar ağaçlarının bagged topluluğu, tek bir karar ağacına göre doğruluğu ve azınlık sınıfı performansını iyileştirdi. Ayrıca, makine öğreniminde bagging'in etkinliğini en üst düzeye çıkarmak için değerli ipuçları ve püf noktaları edindik.

Profesyonel bir makine öğrenimi mühendisi olarak kariyer yapmak istiyorsanız, Machine Learning Scientist with Python kariyer yoluna kaydolarak başlayın. Python programlama diliyle denetimli, denetimsiz ve derin öğrenme modelleri eğitmeyi öğreneceksiniz.

Abid Ali Awan

Yazar

Abid Ali Awan

Sertifikalı bir veri bilimcisi olarak, yenilikçi makine öğrenimi uygulamaları oluşturmak için en son teknolojileri kullanmaya büyük ilgi duyuyorum. Konuşma tanıma, veri analizi ve raporlama, MLOps, konuşma yapay zekası ve NLP alanlarında güçlü bir geçmişe sahip olarak, gerçek bir etki yaratabilecek akıllı sistemler geliştirme becerilerimi geliştirdim. Teknik uzmanlığımın yanı sıra, karmaşık kavramları açık ve özlü bir dille ifade etme yeteneğine sahip, becerikli bir iletişimciyim. Sonuç olarak, veri bilimi konusunda aranan bir blog yazarı oldum ve giderek büyüyen veri profesyonelleri topluluğuyla görüşlerimi ve deneyimlerimi paylaşıyorum. Şu anda, içerik oluşturma ve düzenlemeye odaklanıyorum. Büyük dil modelleriyle çalışarak, hem işletmelerin hem de bireylerin verilerinden en iyi şekilde yararlanmalarına yardımcı olabilecek güçlü ve ilgi çekici içerikler geliştiriyorum.

Konular

İlgili