Makine Öğrenmesi - II. Doğrusal Olmayan İlişkiler (Non-Linear Relationships)
Ekstra Ağaçlar (Extra Trees)
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