Karar Ağacı (Decision Tree) Regresyonu -Makine Öğrenmesi (2020)

ibrahimcanerdogan
3 min readDec 20, 2020

--

Makine Öğrenmesinde tahmin algoritmalarından Karar Ağacı Regresyonu ile karşınızdayım :)

Yazının Konu Anlatım Videosu

Yazının Github Reposu

Yazının Konu Anlatım Oynatma Listesi

1- Veri Setini Getirme/İnceleme

# VERİ SETİNİ GETİRME
import seaborn as sns
import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer

data = sns.load_dataset("tips")
df = pd.DataFrame(data)

# Eksik Verileri Ortalama ile Doldurma
imputer = SimpleImputer(missing_values=np.nan, strategy="mean")
imputer = imputer.fit(df[["total_bill"]])
df[["total_bill"]] = imputer.transform(df[["total_bill"]])

# Kategorik Olmayan Değişkenler
total_bill = df[["total_bill"]]
tip = df[["tip"]]
size = df[["size"]]

# Kategorik Değişkenler İçin 0-1 Dönüşümü
smoker = pd.get_dummies(df[["smoker"]])
time = pd.get_dummies(df[["day"]])

# Kukla Değişkeni Silme
smoker = smoker.drop("smoker_Yes", axis=1)

# Verileri Birleştirme
new_data = pd.concat([total_bill, size, smoker, time, tip], axis=1)

# Train ve Test Belirleme
training = new_data.iloc[:, 0:7]
testing = new_data.iloc[:, 7:8]

# Train Test Ayırma
from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(training, testing, test_size=0.30, random_state=42)

2- Model Eğitme

from sklearn.tree import DecisionTreeRegressor

dtr = DecisionTreeRegressor(random_state = 0)

dtr.fit(x_train, y_train)

3- Tahmin

y_pred = dtr.predict(x_test)

4- Gerçek v Tahmin Değerlerini Karşılaştırma

y_tahmin = pd.DataFrame(data = y_pred)
y_tahmin.index = y_test.index

result = pd.concat([y_tahmin, y_test],axis=1)
result.columns = [["Tahmin","Gerçek"]]

print(result)

5- Stats Model (Normal)

Decision Tree algoritmamızda default değerlerle eğittiğimizde “statsmodels” ile R2 değerimiz yani regresyon model uyumunun 0.494 olduğunu buluyıruz. İleriki aşamada Tune işlemi ile bu uyumluluk değerinin arttırılmasını sağlayacağız.

!! Modelimizin tahmininde, stats model tablomuzda bulunan P > |t| sütununda 0.05 ‘den büyük değerlere sahip değişkenler tahminlerde sapmalar ortaya çıkarmaktadır. Bu değişkenleri çıkarak x_train, y_train değerlerin yeniden belirlenmelidir.

import statsmodels.api as sm
from sklearn.tree import DecisionTreeRegressor

dtr = DecisionTreeRegressor(random_state = 0)
dtr.fit(x_train, y_train)

decision_tree = sm.OLS(dtr.predict(x_train), x_train)
model = decision_tree.fit()
model.summary()

6- Mean Squared Error -MSE (Normal)

Burada da modelimizde oluşacan hataların bir skor olarak değerini görmek için y_train ve y_test değerlerini x_train ve x_test’ler kullanılarak elde edilen tahmin değerleriyle karşılaştırıyoruz.

from sklearn.metrics import mean_squared_error 

mse = np.sqrt(mean_squared_error(y_train, model.predict(x_train)))
print("Train RMSE: ", mse)
mse = np.sqrt(mean_squared_error(y_test, model.predict(x_test)))
print("Test RMSE: ", mse)

7- Model Tuning

Yukarıda 0..5'den büyük değere sahip olan değişkenleri çıkartık ve bunun için yeniden train_test_split ile ayırma işlemi gerçekleştirdik.

# Train ve Test Belirleme
training = new_data.iloc[:, 0:2]
testing = new_data.iloc[:, 7:8]

# Train Test Ayırma
from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(training, testing, test_size=0.30, random_state=42)

8- Stats Model (Tuned)

Yeniden hazırladığımız verisetimizi kullanarak eğitim işleminden geçiriyoruz. Burdan eğitiğimiz modeli “statsmodel” içine gönderiyoruz. Tablodaki değerleri incelediğimizde;

R2 değerimizde mükemmel bir artış ortaya çıkarak, modeldeki 2 değişkenin tahmin algoritmasından kaldırılmasının sonucu görmüş oluyoruz.

P > |t| sütununa bakarasak 0.05'den büyük değerler olmadığından verisetimizi yeniden düzenlemek zorunda kalmıyoruz :)

import statsmodels.api as sm
from sklearn.tree import DecisionTreeRegressor

dtr = DecisionTreeRegressor(random_state = 0)
dtr.fit(x_train, y_train)

decision_tree = sm.OLS(dtr.predict(x_train), x_train)
model = decision_tree.fit()
model.summary()

9- Mean Squared Error -MSE (Tuned)

Normal modeldeki gibi bir hata hesaplama yaptığımızda değerlerin çok çok az arttığını görüyoruz, buradan modelimizin uyumluluk skoru (R2) artsada yine de hata skorunun artmayacağı anlamına gelmeyeceğini anlamış oluruz.

from sklearn.metrics import mean_squared_error mse = np.sqrt(mean_squared_error(y_train, model.predict(x_train))) print(“Train RMSE: “, mse) mse = np.sqrt(mean_squared_error(y_test, model.predict(x_test))) print(“Test RMSE: “, mse)

Umarım faydalı olmuştur. Diğer algoritmalarda görüşmek üzere :)

Önceki Yazı (Destek Vektör Regresyonu)/ Sonraki Yazı (Random Forest)

MY GITHUB PROFILE

MY YOUTUBE CHANNEL

MY LINKEDIN PROFILE

--

--

ibrahimcanerdogan
ibrahimcanerdogan

Written by ibrahimcanerdogan

Hi, My name is Ibrahim, I am developing ebebek android app within Ebebek. I publish various articles in the field of programming and self-improvement.

No responses yet