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

Ekstra Ağaçlar (Extra Trees)

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

Ekstra Ağaçlar (Extra Trees), bir önceki dersimizde gördüğümüz Random Forest Regresyonuna benzer özellikler taşır. Büyük boyutlu (çok gürültülü) veri setlerinde Random Forest'e göre daha kötü sonuçlar verebilir.

Kullanabilmek için "ExtraTreesRegressor" kütüphanesinin içe aktarılması gerekmektedir.

from sklearn.ensemble import ExtraTreesRegressor

Söz dizimi: ExtraTreesRegressor(n_estimators=100, *, criterion='squared_error', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='auto', max_leaf_nodes=None, min_impurity_decrease=0.0, bootstrap=False, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, ccp_alpha=0.0, max_samples=None)

  • n_estimators, ormandaki ağaç sayınını temsil eder, varsayılan olarak 100'dür.
  • criterion, bölünmenin kalitesini belirleme işlemidir. 2 farklı değer alabilir, "squared_error", "absolute_error". Varsayılan olarak squared_error değerini kullanır. squared_error: varyans azaltımı için, absolute_error: ortalama mutlak hata için kullanılırlar.
  • max_depth, maksimum ağaç derinliğini temsil eder. Sayısal değerler alır.
  • max_features, en iyi bölünmeyi ararken göz önünde bulundurulması gereken özelliklerin sayısını temsil eder. 3 farklı değer alabilir, “auto”, “sqrt”, “log2”. Varsayılan olarak auto'dur. auto ise max_features=n_features, sqrt ise max_features=sqrt(n_features) ve log2 ise de max_features=log2(n_features).

Örnek-1: Regresyon işlemi için veri seti oluşturalım ve "Extra 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 ExtraTreesRegressor
from sklearn.datasets import make_regression
#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)
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.35231299 -0.95667718 -1.19478076 -1.35308947 -0.83172601]]
1. satır y değeri [-170.8480569]
#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,))
ET=ExtraTreesRegressor()
#Öğrenme işlemi
ET.fit(x_train,y_train)
#Karar ağaçları listesi(n_estimators=100) toplamda 100 olarak(varsayılan değer) seçilmişti, ilk 4 satır listelendi.
ET.estimators_[0:4]

Çıktı:

[ExtraTreeRegressor(random_state=471007133),
 ExtraTreeRegressor(random_state=473619684),
 ExtraTreeRegressor(random_state=1619838144),
 ExtraTreeRegressor(random_state=1462736380)]
#Tahminleme işlemi
predict_ET=ET.predict(x_test)
#Doğruluk yüzdesi
r2_score(y_test,predict_ET)*100

Çıktı:

72.95311164307851

En optimum değerleri nelerdir?

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
parameters={"max_depth":["None",1,2,3,4,5,6,7,8],
            "max_features":["auto", "sqrt", "log2"]}
gsc=GridSearchCV(estimator=ET,param_grid=parameters)
gsc.fit(x_train,y_train)

Çıktı:

GridSearchCV(estimator=ExtraTreesRegressor(max_depth=9, max_features='sqrt'),
             param_grid={'max_depth': ['None', 1, 2, 3, 4, 5, 6, 7, 8],
                         'max_features': ['auto', 'sqrt', 'log2']})
#En iyi parametreler listesi
gsc.best_params_

Çıktı:

{'max_depth': 8, 'max_features': 'sqrt'}
#En iyi parametrelerle tekrar test edelim
ET=ExtraTreesRegressor(
    max_depth=8,
    max_features="sqrt")
#Öğrenme işlemi
ET.fit(x_train,y_train)
#Tahminleme işlemi
predict_ET=ET.predict(x_test)
#Doğruluk Yüzdesi
r2_score(y_test,predict_ET)*100

Çıktı:

72.89674103152639
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.