Makine Öğrenmesi - II. Doğrusal Olmayan İlişkiler (Non-Linear Relationships)

Torbalama ağaçları (Bagged Trees)

Yayın tarihi :10-Oca-22
Bölüm kodlarını ve/veya veri setlerini indir.

Torbalama ağaçları (Bagged Trees), birkaç karar ağacından gelen tahminleri birleştiren makine öğrenmesi algoritmasıdır. 

Bir karar ağacının en büyük sorunu yüksek varyansa sahip olmasıdır. Yani veri setindeki herhangi küçük bir değişik modelde veya yapılacak tahminlerde büyük değişikliklere neden olabilir. Bu durumu önlemek için (varyansı en aza indirmek için) Bagged Trees algoritmaları kullanılabilir. 

Kullanımı için "BaggingRegressor" kütüphanesinin içe aktarılması gerekmektedir.

from sklearn.ensemble import BaggingRegressor

Söz dizimi: BaggingRegressor(base_estimator=None, n_estimators=10, *, max_samples=1.0, max_features=1.0, bootstrap=True, bootstrap_features=False, oob_score=False, warm_start=False, n_jobs=None, random_state=None, verbose=0)

  • base_estimator, veri setinde kullanılacak regresyon algoritmasını temsil etmektedir. Varsayılan olarak DecisionTreeRegressor'dür.
  • n_estimators, uygulanacak tahminleme yönteminin sayısını temsil eder. Varsayılan olarak 10 değerini alır.
  • bootstrap_features, özelliklerin değiştirilerek çizilip çizilmediği temsil eder.

Örnek-1: Regresyon işlemi için veri seti oluşturalım ve "Bagged Trees" regresyon modeli kullanalarak tahminleme işlemi yapalım.

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
import warnings
warnings.filterwarnings("ignore")

from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error,r2_score,mean_absolute_error

from sklearn.ensemble import BaggingRegressor
from sklearn.datasets import make_regression

!! Rasgele verilerden oluşan bir veri seti yapmak için make_regression yöntemini kullanabiliriz.

Söz dizimi: x,y=make_regression(n_samples=100, n_features=100,  *,  n_informative=10,  n_targets=1,  bias=0.0,  effective_rank=None,  tail_strength=0.5,  noise=0.0,  shuffle=True, coef=False,  random_state=None)

  • n_samples, satır sayısını temsil eder, varsayılan olarak 100 satır veri üretir.
  • n_features, sütun sayısını temsil eder, varsayılan olarak 100 sütun veri üretir.
  • n_targets, y değerinin (hedef değerinin) kaç sütundan oluşacağını temsil eder, varsayılan olarak değeri 1 dir.

#100 satırlık 5 sütunluk x değeri ve 1 sütunluk y (hedef) değeri.
x,y=make_regression(n_samples=100,n_features=5,n_targets=1)
# make_regression tarafından oluşturulan x ve y değerleri
print("1. satır x değerleri: {}".format(x[0:1]))
print("1. satır y değeri {}".format(y[0:1]))

Çıktı:

1. satır x değerleri: [[ 0.29083131  0.3038218   0.25898265 -0.34436267 -1.09047721]]
1. satır y değeri [-75.74804922]
#Train ve test işlemlerinde kullanılacak değerleri ayıralım
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=13,test_size=.2)
x_train.shape,x_test.shape,y_train.shape,y_test.shape

Çıktı:

((80, 5), (20, 5), (80,), (20,))
#BaggingRegressor regresyon işlemi olarak varsayılan DecisionTreeRegressor kullanıldı.
#n_estimators=10 karar ağacı sayısı 10 tane olarak belirtildi.
breg=BaggingRegressor(n_estimators=10)
#Öğrenme işlemi
breg.fit(x_train,y_train)
#Karar ağaçları listesi
breg.estimators_

Çıktı:

[DecisionTreeRegressor(random_state=286561216),
 DecisionTreeRegressor(random_state=975160818),
 DecisionTreeRegressor(random_state=28736403),
 DecisionTreeRegressor(random_state=451263668),
 DecisionTreeRegressor(random_state=668619704),
 DecisionTreeRegressor(random_state=2096476956),
 DecisionTreeRegressor(random_state=722830679),
 DecisionTreeRegressor(random_state=1294073245),
 DecisionTreeRegressor(random_state=962160303),
 DecisionTreeRegressor(random_state=1693086377)]
#Tahminleme işlemi
predict_breg=breg.predict(x_test)
#Doğruluk yüzdesi
r2_score(y_test,predict_breg)*100

Çıktı:

51.211170613260926
#kendi değerlerimizi tahmin ettirelim
breg.predict([[2,3,5,6,7]])

Çıktı:

array([290.32421748])

Örnek-2: Yukarda oluşturduğumuz x ve y değerleri için "Bagged Trees" regresyon modeli regresyon algoritmasını "En Yakın Komşu Regresyon Modeli" olarak değiştirerek" tahminleme işlemi uygulayalım.

#En yakın komşu regresyonu
from sklearn.neighbors import KNeighborsRegressor
KNN=KNeighborsRegressor()
breg_knn=BaggingRegressor(base_estimator=KNN)
#Öğrenme işlemi
breg_knn.fit(x_train,y_train)
#Uygulanan KNN regresyon yöntemi sayısı 
len(breg_knn.estimators_)

Çıktı:

50
#Tahminleme işlemi
predict_breg_knn=breg_knn.predict(x_test)
#Doğruluk yüzdesi
r2_score(y_test,predict_breg_knn)*100

Çıktı:

69.41506674318731
#Kendi değerlerimizi yahmin ettirelim
breg_knn.predict([[2,3,5,6,7]])

Çıktı:

array([260.62713061])

En uygun n_estimators değeri nedir?

Optimum değerleri bulmak için daha önce kullanmış olduğumuz GridSearchCV kütüphanesini kullanarak bulalım.

#GridSearchCV kütüphanesi import işlemi
from sklearn.model_selection import GridSearchCV
#1-100 aralığında değerleri karşılaştıralım
parameters={"n_estimators":np.arange(1,100)}
gsc=GridSearchCV(
    estimator=breg_knn,
    param_grid=parameters,
    cv=5)
#Tahminleme işlemi
gsc.fit(x_train,y_train)
#En iyi parametre değeri
gsc.best_params_

Çıktı:

{'n_estimators': 17}
#n_estimators:17 değeri için tekrar BaggingRegressor işlemi yapalım.
KNN=KNeighborsRegressor()
breg_knn=BaggingRegressor(base_estimator=KNN,n_estimators=17)
#Model eğitimi
breg_knn.fit(x_train,y_train)
#Tahminleme işlemi
predict_breg_knn=breg_knn.predict(x_test)
#Doğruluk yüzdesi
r2_score(y_test,predict_breg_knn)*100

Çıktı:

69.75159223386517

Bu model için en uygun olan n_estimators 17 değeri için doğruluk yüzdesi 69.41'den 69.75 değerine çıkmış oldu. 

Sonuç olarak, Bagged Trees algoritmasının ne anlama geldiği ve kullanımının nasıl olduğunu örnekler vererek açıklamaya çalışıldı. 

Paylaş:

Yorum Yap (*Yorumunuza kod eklemek isterseniz Kod Parçacığı Ekle butonuna tıklayarak ekleyebilirsiniz.)

Yorumlar

Henüz hiç yorum yapılmamış, ilk yorum yapan sen ol.