Temel Topluluk Öğrenimi ve Random Forest, Gradient Boosting Algoritmaları
Merhabalar bu yazımda fikir vererek doğru kararlar aldıran tüm gönül dostlarımıza saygılarımla geldim🤸 En iyi 2 ağaç tabanlı toplu öğrenme algoritmasının adım adım açıklamasını teorik ve pratik detaylarla naçizane ileteceğim.🦾 İyi okumalar dilerim!
BAŞLIYORUZ!👽
🤔Ensemble Learning Nedir?
Hepimiz hayatta birtakım kararlar alıyoruz. Büyük kararlar vermeden önce mantıksız olmamızı önlemek için arkadaşlarımıza, aile üyelerimize hatta internete ve fikir edineceğimiz her alana fikirlerini sorarız.
Her farklı bakış açısı ve fikir de daha doğru karar vermemizde ve objektif bakış geliştirmemizde yardımcı olur.
Toplu Öğrenme ( Ensemble Öğrenme) tam olarak bu şekilde çalışır. Bir öğrenici ile modeli eğitmek yerine, birden fazla öğrenici ile modeli oluşturmayı sağlayan öğrenmedir. Modellerin beraber daha doğru karar vereceğini amaçlamaktadır.
“Birden çok makine öğrenimi modelini birleştirme tekniğine toplu öğrenme denir.”
Neden Ensemble Learning hakkında bilgi sahibi olalım?
Topluluk öğrenimi, verimli bir makine öğrenimi modeli oluşturmanın en etkili yollarından biri. Öğrenmedeki hatanın genellikle ana nedenleri gürültü, önyargı ve varyanstan kaynaklanır. Ensemble de bize bu faktörleri en aza indirmekte yardımcı oluyor.
Topluluk öğrenme yöntemlerinden Bagging ve Boosting’i inceleyelim.
- Bagging -Torbalama: Bir grup modeli paralel bir şekilde eğitiyoruz. Her model, verilerin rastgele bir alt kümesiyle eğitilir.
Rastgele orman (Random Forest) bagging yöntemine örnek bir algoritmadır.
- Boosting -Güçlendirme: Bir grup bağımsız modeli sıralı bir şekilde eğitiyoruz. Her bir model, önceki modelin yaptığı hatalardan öğrenir.
Gradient Boosting boosting yöntemine örnek bir algoritmadır.
-Hangisi en iyisi, Torbalama mı Artırma mı?-
Kesin bir kazanan yok; verilere, simülasyona ve koşullara bağlıdır.
Torbalama ve Yükseltme, farklı modellerden birkaç tahmini birleştirdiklerinden tek tahmininizin varyansını azaltır. Dolayısıyla sonuç, daha yüksek kararlılığa sahip bir model olabilir.
→Sorun, tek modelin çok düşük performans alması ise, Torbalama nadiren daha iyi bir önyargı alır. Bununla birlikte, Artırma, tek modelin avantajlarını optimize ettiği ve tuzaklarını azalttığı için daha düşük hatalara sahip birleşik bir model oluşturabilir.
→Aksine, tek modelin zorluğu over-fitting(Aşırı uyma) ise, Torbalama en iyi seçenektir. Artırma kendi adına over-fitting’i önlemeye yardımcı olmaz; aslında, bu teknik bu problemin kendisi ile karşı karşıyadır. Bu nedenle Torbalama, Artırmaya göre daha etkilidir.
Ana fikir oluşturduğumuza göre daha derinlerine inebiliriz!
🤔Rastgele Orman nedir?
Rastgele orman, en popüler ağaç tabanlı denetimli öğrenme algoritmalarından biridir. Aynı zamanda en esnek ve kullanımı kolaydır.
Algoritma hem sınıflandırma hem de regresyon problemlerini çözmek için kullanılabilir. Rastgele orman, yüzlerce karar ağacını birleştirme eğilimindedir ve ardından her bir karar ağacını farklı bir gözlem örneği üzerinde eğitir.
Rastgele ormanların faydaları çoktur. Bireysel karar ağaçları eğitim verilerine over-fitting etme eğilimindedir, ancak rastgele orman, farklı ağaçlardan tahmin sonuçlarının ortalamasını alarak bu sorunu hafifletebilir. Bu, rastgele ormanlara tek bir karar ağacından daha yüksek bir tahmin doğruluğu verir.
Rastgele orman, e-ticarette müşterilere farklı ürünlerin tavsiyelerini sağlamak için veya tıpta, hastanın tıbbi kaydını analiz ederek hastanın hastalığını tanımlamak için algoritması kullanılabilir.
Peki Rastgele Orman algoritması nasıl çalışır?
Adım adım inceleyelim;
Adım 1: Algoritma, sağlanan veri kümesinden rastgele örnekler seçer.
Adım 2: Algoritma, seçilen her örnek için bir karar ağacı oluşturacaktır ve karar ağacını eğitecektir. Ardından oluşturulan her karar ağacından bir tahmin sonucu alacaktır.
- Bir karar ağacını eğitmek için rastgele bir alt küme kullanılır
- Her karar ağacı için en uygun bölmeler, rastgele bir özellik alt kümesine dayanır (örneğin, toplamda 10 özellik, bölünecek 10 özellikten rastgele 5'ini seçin)
3. Adım: Her bir ağaç , test setindeki kayıtları / adayları bağımsız olarak tahmin eder. Daha sonra tahmin edilen her sonuç için oylama yapılacaktır.
Adım 4: Ve son olarak, algoritma son tahmin olarak en çok oylanan tahmin sonucunu seçecektir.
Tamam bunu anladık . Peki ya arttırmalar?
🤔Gradient Boosting Nedir?
Gradyan artırma, bir yükseltme modelidir.
Artırma Modellerinin önemli noktası önceki hatalardan ders almaktır.
Gradyan artırıcı karar ağaçlarında, güçlü bir öğrenci bulmak için birçok zayıf öğrenciyi birleştiriyoruz. Buradaki zayıf öğrenciler, bireysel karar ağaçlarıdır.
Tüm ağaçlar seri olarak bağlanır ve her ağaç bir önceki ağacın hatasını en aza indirmeye çalışır.
Bu sıralı bağlantı nedeniyle, yükseltme algoritmalarının öğrenilmesi genellikle yavaştır (öğrenme hızı parametresi kullanılarak geliştirici tarafından kontrol edilebilir), ancak aynı zamanda oldukça doğrudur. İstatistiksel öğrenmede, yavaş öğrenen modeller daha iyi performans gösterir.
Peki Gradient Boost algoritması nasıl çalışır?
Adım adım inceleyelim;
Adım 1: Karar ağacını eğitin
Adım 2: Tahmin etmek için yeni eğitilmiş karar ağacını uygulayın
Adım 3: Bu karar ağacının artıklarını hesaplayın, Kalan hataları yeni y olarak kaydedin
Adım 4: Adım 1’i tekrarlayın (eğitmek için belirlediğimiz ağaç sayısına ulaşılana kadar)
5. Adım: Son tahmini yapın
Gradyan Artırma, (tüm ağaçların) tahminleri toplayarak yeni bir tahmin yapar.
Kullanılacak Hiperparametreleri Anlayalım: Öğrenme hızı ve n_estimators
Hiperparametreler, bir modelin performansını ve doğruluğunu etkileyen öğrenme algoritmalarının temel parçalarıdır. Öğrenme oranı ve n_estimators, gradyan artıran karar ağaçları için iki kritik hiperparametredir.
α olarak gösterilen öğrenme hızı, modelin ne kadar hızlı öğrendiğini kontrol eder. Bu, önceki modeldeki hatayı öğrenme oranıyla çarpıp ve bunu sonraki ağaçlarda kullanarak yapar.
Dolayısıyla, öğrenme hızı ne kadar düşükse, model o kadar yavaş öğrenir.
Teoride anladığımıza ve ağacın önemini her alanda kavradığımıza göre uygulamaya geçelim;
🤟Python Sklearn’da Uygulayalım🤟
Veri kümesini yüklemek ve rastgele bir orman / gradient artırma sınıflandırıcısı oluşturmak için kullanacağımız önemli paketleri içe aktararak başlayacağız. Algoritmaları yüklemek ve kullanmak için scikit-learn kütüphanesini kullanacağız.
## import library ##
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
np.random.seed(0)
## Classification Algorithms ##
from sklearn.ensemble import RandomForestClassifier
## For building models ##
from sklearn.model_selection import train_test_split
from sklearn.utils import resample
## For measuring performance ##
from sklearn import metrics
from sklearn.model_selection import cross_val_score
from sklearn import svm
from sklearn.preprocessing import StandardScaler, MinMaxScaler
from sklearn.metrics import accuracy_score
## Ignore warnings ##
import warnings
warnings.filterwarnings('ignore')
Veri kümesi
Pima Indians Diabetes veri setini kullanarak rastgele bir orman sınıflandırıcı oluşturacağız.
Pima Indians Diyabet Veri Seti, sağlanan tıbbi ayrıntılara dayanarak 5 yıl içinde diyabet başlangıcını tahmin etmeyi içerir. Bu ikili bir sınıflandırma problemidir.
Görevimiz, diğer bağımsız faktörler göz önüne alındığında, belirli bir hastanın diyabet geliştirme riski altında olup olmadığını tahmin etmek için Pima Indian Diabetes veri setinde bir model oluşturmak ve analiz etmektir.
Veri kümesini veri dizininden yükleyelim.
# Load dataset
data = pd.read_csv(r"../data/diabetes.csv")
Daha sonra veri setini bağımsız özelliklere ve hedef özelliğe ayırıyoruz. Bu veri kümesi için hedef özelliğimiz Outcome olarak adlandırılır.
Bu veri setinde sahip olduğumuz özelliklerin listesini anlamak için data.columns komutu ile görebilirsiniz.
# split data into input and taget variable(s)
X = data.drop("Outcome", axis=1)
y = data["Outcome"]
Veri Kümesini Ön İşleme
Bir model oluşturmadan önce standardScaler
, scikit-learn yöntemini kullanarak bağımsız özelliklerimizi standartlaştırmamız gerekiyor .
# standardize the dataset
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
Verilerinizi nasıl ve neden standart hale getireceğiniz konusunda buraya tıklayarak bu makaleden daha fazla bilgi edinebilirsiniz.
Veri kümesini Eğitim ve Test verilerine bölme
Şimdi işlenmiş veri setimizi eğitim ve test verilerine böldük. Test verileri, işlenen tüm veri kümesinin% 10'u olacaktır. (0.33'de çok severek kullandığımız bir değerdir:))
# split into train and test set
X_train, X_test, y_train, y_test = train_test_split(
X_scaled, y, stratify=y, test_size=0.10, random_state=42
)
Rastgele Orman Sınıflandırıcısını Oluşturalım
Şimdi rastgele orman sınıflandırıcımızı oluşturma ve ardından onu train setinde eğitme zamanı.
Ayrıca kullanmak istediğimiz ormandaki ağaç sayısını (100) n_estimators adlı parametre üzerinden de geçireceğiz.
# create the classifier
classifier = RandomForestClassifier(n_estimators=100)# Train the model using the training sets
classifier.fit(X_train, y_train)
Eğitimden sonra test verileri üzerinde tahmin yapabiliriz.
# predictin on the test set
y_pred = classifier.predict(X_test)
Ardından, test verilerinden gerçek ve tahmin edilen değerleri kullanarak doğruluğu kontrol ederiz.
# Calculate Model Accuracy
accuracy_score(y_test, y_pred)
Doğruluk;
0.7922077922077922
Aynı işlemleri Gradient Boosting üzerinde de hızlıca yapalım ;
# Fit a Gradient Boosting model
classifier = GradientBoostingClassifier(n_estimators=100)
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)
accuracy_score(y_test, y_pred)
Doğruluk;
0.8441558441558441
Not; Önemli özellikleri feature_importances_ kontrol edebilirsiniz. bu komut özelliklerin göreceli önemini ve modele katkılarını göstermektedir. Seaborn ve matplotlib kitaplıklarını kullanarak bu özellikleri ve puanlarını da görselleştirebiliriz.
Bu sayede önemli özellikleri kontrol etmenin ve modelinizin performansını artırmak için en az önemli özellikleri kaldırıp kaldıramayacağınızı anlayabilirsiniz.
DipNot: Burada sadece accuracy metriğini gördük ama siz mutlaka
Sensivity and Specifity değerlerine de bakın.
Random Forest ve Gradient Boosting algoritmalarını, her veri bilimcisinin öğrenmesinin gerekli olduğu söylenir :). Bu yazıda, toplu öğrenmenin temellerini ve rastgele orman ve gradient boosting algoritmasını kullanarak bir sınıflandırma modelinin nasıl oluşturulacağını okudunuz. Güzel günlerde kullanınız.
Yeni bir şey öğrendiyseniz veya bu yazıyı okumaktan zevk aldıysanız, lütfen başkalarının görebilmesi için paylaşın. O zamana kadar, bir sonraki yazıda görüşmek üzere!
Beni Linkedin ve Twitter hesaplarımdan da takip edebilirsiniz!🐞
Kaynaklar
- https://towardsdatascience.com/machine-learning-part-18-boosting-algorithms-gradient-boosting-in-python-ef5ae6965be4
- https://towardsdatascience.com/basic-ensemble-learning-random-forest-adaboost-gradient-boosting-step-by-step-explained-95d49d1e2725
- https://www.freecodecamp.org/news/how-to-use-the-tree-based-algorithm-for-machine-learning/
- https://www.analyticsvidhya.com/blog/2016/02/complete-guide-parameter-tuning-gradient-boosting-gbm-python/?utm_source=blog&utm_medium=4-boosting-algorithms-machine-learning
- http://www.ccs.neu.edu/home/vip/teach/MLcourse/4_boosting/slides/gradient_boosting.pdf
- https://www.kaggle.com/uciml/pima-indians-diabetes-database