Modellerin birleştirilmesi (Ensemble Learning) – 1

Karmaşık bir soruyu binlerce insana soralım ve verdikleri cevapları birleştirelim. Çoğu durumda, bu birleştirilmiş cevap, tek bir uzmanın verdiği cevaptan çok daha iyi olacaktır. Bu “Wisdom of the crowd” olarak adlandırılır (Daha fazla bilgi için tıklayınız). Benzer olarak, birden fazla tahmin edicinin (predictor) tahminlerini bir araya getirirsek, tek bir tahmin ediciden daha iyi sonuç elde edebiliriz. Tahmin edicilerin grubu “Ensemble”, bu teknikte “Ensemble Learning”  olarak adlandırılır.

Bundan sonraki yazılarda en popüler ensemble yöntemlerini konuşacağız: bagging, boosting, stacking vb..

Oylama (Voting Classifiers)

Birkaç tane sınıflandırıcıyı eğittiğimizi düşünelim.

ensemble1.png

Daha iyi bir sınıflandırıcı oluşturmanın basit bir yolu, bu sınıflandırıcılara tahminlerini sormak ve en çok “oy alan” sınıfı bulmaktır. Bu tip bir sınıflandırıcı “hard voting classifier” olarak adlandırılır:

ensemble2.png

Şimdi Scikit-Learn ile bir örnek yapalım.

İlk olarak gerekli fonksiyon ve sınıfları içeri aktarıyoruz:

from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split
from sklearn.ensemble import VotingClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from sklearn.svm import SVC

Verimizi üretiyoruz, test ve eğitim verileri olarak ayırıyoruz:

X, y = make_moons(n_samples=100, noise=0.2)
X_train, X_test, y_train, y_test = train_test_split(X, y)

Sınıflandırıcıları oluşturuyoruz:

log_clf = LogisticRegression()
rnd_clf = RandomForestClassifier()
svm_clf = SVC()

Voting classifier oluşturuyoruz ve verilerimizi besliyoruz:

voting_clf = VotingClassifier(
        estimators=[('lr', log_clf),
                    ('rf', rnd_clf),
                    ('svc', svm_clf)],
        voting="hard")
voting_clf.fit(X_train, y_train)

En son olarak da her bir sınıflandırıcı için doğruluk değerine bakıyoruz:

for clf in (log_clf, rnd_clf, svm_clf, voting_clf):
    clf.fit(X_train, y_train)
    y_pred = clf.predict(X_test)
    print(clf.__class__.__name__, accuracy_score(y_test, y_pred))

Çıktımız:

LogisticRegression 0.864
RandomForestClassifier 0.872
SVC 0.888
VotingClassifier 0.896

Eğer sınıflandırıcılarımız bir sınıfa ait olma olasılıklarını da çıktı olarak verebiliyorsa, bu durumda sınıflandırıcıların verdikleri olasılıkların ortalamasını alıp tahminde bulunabiliriz. Bu da “soft voting classifier” olarak adlandırılır.

UYARI: Sınıflandırıcıların birbirlerinden farklı olmaları, ensemble yönteminde çok önemlidir. Sınıflandırıcıların aynı tip hata yapmaları önlenerek, ensemble sınıflandırıcının daha iyi sonuç vermesini sağlar.

Bir sonraki yazıda görüşmek üzere.

Kaynaklar

  1. Geron, A. (2017). Hands-On Machine Learning with Scikit-Learn and TensorFlow Concepts, Tools, and Techniques for Building Intelligent Systems. Sebastopol: OReilly UK Ltd.

Modellerin birleştirilmesi (Ensemble Learning) – 1” için 5 yorum

  1. merhaba
    sadece 2 algoritma kullanarak hangi ensemble metodu kullanılabilir? Herhalde iki algoritma olduğu için voting olmaz? bilgi verirseniz sevinirim. iyi günler

    Beğen

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s