Makine Öğrenmesi — Regresyon Algoritmaları -(4) Decision Tree Regression ?

Rafet KANDAR
4 min readMar 5, 2021

--

Makine öğrenmesi regresyon algoritmaları serimize Decision Tree Regression ile devam ediyoruz.

Bu başlık altında Decision Tree Regression Nedir ? Basit bir şekilde bunun çalışma mantığını anlamaya çalışacağız. Daha sonra bu mantığı kullanarak basit bir örnek yapacağız. Son olarak da Python üzerinde Decision Tree Regression örneği yaparak yazımızı bitireceğiz.

Pozisyona Göre Maaş Veri Seti

Kullanılacak Veri Seti ?

→ Bu yazım içerisinde yan tarafta görmüş olduğunuz polinom regresyonda da kullandığımız veri setinden yararlanarak konu anlatımı gerçekleştireceğim. Tamamen örnek olması amaçlı rastgele değerlerden oluşturulmuştur.

Decision Tree(Karar Ağacı) Regression Nedir ?

Decision Tree, hem sınıflandırma hem de regresyon da kullanılır. Biz bu yazımızda regresyon kısmını inceleyeceğiz. Peki, Decision Tree ne iş yapıyor ? Bağımsız değişkenleri(x’ leri) split’ler yardımıyla gruplara ayırıyor. Tahminleme aşamasına gelindiğinde, tahmin edilmesi gereken değere(y değeri) bakıyor, bu y değerinin hangi gruba ait olduğunu buluyor ve bulduğunu bu grubun ortalamasını alarak bizlere sonuç olarak veriyor.

Burası biraz karışık gelmiş olabilir. Gelin biz bu tanımı daha açarak mantığına göz atalım ve aslında ne kadar basit olduğunu görelim.

Decision Tree Çalışma Mantığı

Not : Grafiğimizi ilk split1'e göre bölüyoruz. Bu split1 bize x1'in 20 den küçük veya büyük olma durumunu veriyor. Daha sonra bu küçük veya büyük olma durumlarına göre tekrar split’lere ayırıyoruz. Bölümleme işlemi bittikten sonra yan taraftaki modelimizi oluşturuyoruz.

→ Mantığını daha iyi anlayabilmek için yukarıdaki resmi inceleyelim(grafik üzerindeki değerler tamamen rastgele değerlerdir). Yukarda sizlere x değişkenlerimizi gruplara ayırıyoruz demiştim. Bu ayırma işlemini split’ler yardımıyla gerçekleştiriyoruz.

→ Biz burada split’leri kafamıza göre belirledik. Peki, makine öğrenmesi neye göre belirliyor ? Makine öğrenmesi split işlemini gerçekleştirirken information entropy adı verilen matematiksel bir formülü kullanıyor. Split’ler sayesinde ayırdığımız her bir bölmeye ise terminal leaf denir. Yani bu grafiği bütün olarak bir ağaç olarak düşünürseniz terminal leaf bu ağacın bir yaprağı oluyor.

→ Evet, verimizi split’lere ayırdık daha sonra ne yapacağız ? Ayırdığımız bu split’lere göre modelimizi oluşturuyoruz. Oluşturduğumuz modeli resim üzerinden inceleyebilirsiniz.

Artık modelimiz de hazır olduğuna göre tahminleme işlemine geçebiliriz.

x1 = 46, x2 = 18 değerlerimiz olsun bu değerlere göre y değerini tahmin edelim.

Evet, yukarıdaki yaptığımız işlemler doğrultusunda sonucumuzu 0.9 olarak bulduk. Buradaki bulduğumuz değer o bölmenin ortalama y değeridir. Burada gördüğünüz gibi decision tree belirli aralıklar için hep aynı sonuçları üretecektir. Bu yüzden ne kadar çok bölüm(leaf) olursa modelimizin hassasiyeti o kadar çok artar.

Peki Bu Öğrendiklerimizi Python ’da Nasıl Uygulayacağız ?

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

İlk adım olarak projemiz içerisinde kullanacağımız kütüphanelerimizi import ederek başlıyoruz.

dataset = pd.read_csv('pozisyonMaas.csv', encoding = 'iso-8859-9')

Kütüphanelerimizi import ettikten sonra verilerimiz olduğu dosyanın okunması işlemini gerçekleştiriyoruz ve verimizin dağılımına göz atıyoruz.

X = dataset.iloc[:,0].values.reshape(-1,1)
y = dataset.iloc[:, 1].values.reshape(-1,1)

Daha sonra x ve y değişkenlerimizi ayırıyoruz. Buradaki X olarak oluşturduğumuz aslında verimizdeki pozisyon y olarak oluşturduğumuzda maaş verimiz. Aşağıdan göz atabilirsiniz.

Evet, datamıza da göz attık artık verimizi train ve test olarak ayırmamız gerekir fakat bizim verimiz çok küçük bir veri olduğu için böyle bir ayrım yapmaya gerek yok.

#modelin eğitilmesi
from sklearn.tree import DecisionTreeRegressor
tree_reg = DecisionTreeRegressor()
tree_reg.fit(X,y)

Verimiz hazır olduğuna göre artık modelimizi oluşturabiliriz. Bunun için diğer regresyonlarda yaptığımız gibi sklearn kütüphanesini kullanarak DecisionTreeRegressor sınıfını indiriyoruz. İkinci satırda nesnemizi oluşturuyoruz ve oluşturduğumuz bu nesneyi kullanarak modelimizi eğitiyoruz(eğitmek için x ve y değişkenlerimizi veriyoruz).

tree_reg.predict([[6]])
--> 15000
y_head = tree_reg.predict(X)

Artık modelimiz hazır olduğuna göre tahminlerde bulunabiliriz. Burada gördüğününüz gibi .predict metodunu kullanarak 6 değerini yolladığımızda 15000 tahmininde bulunuyor. Burada sizde farklı değerler göndererek denemeler yapabilirsiniz.

Yukarıda sizlere Decision Tree belirli aralıklarda hep aynı sonuçları üretir demiştim. Grafik üzerinden de bunu gözlemleyebilirsin.

Evet, yazımızın sonuna geldik. Umarım sizleri sıkmamışımdır ve bu konuda bilgi sahibi olmak isteyenlere ufakta olsa faydam dokunmuştur. Başka bir yazıda görüşmek üzere …

Teşekkür Ederim

--

--