Random Forest Regresyonu -Makine Öğrenmesi (2020)

ibrahimcanerdogan
3 min readDec 21, 2020

--

Makine Öğrenmesinde tahmin algoritmalarından Rassal Orman (Random Forest) 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)

Uyarıları kaldırmak istiyorsanız;

from warnings import filterwarnings
filterwarnings('ignore')

2- Model Eğitme

from sklearn.ensemble import RandomForestRegressor randomforest_regressor = RandomForestRegressor() randomforest_regressor.fit(x_train, y_train)

3- Stats Model (Normal)

Random Forest algoritmamızda default değerlerle eğittiğimizde “statsmodels” ile R2 değerimiz yani regresyon model uyumunun 0.669 olduğunu buluyoruz. İ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

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

4- Model Tuning

P > |t| sütunu 0.05'den küçük olan üç değerimizi belirleyip bu değerleri girdi olarak kabul eden x_train, y_train değerlerini yeniden belirliyoruz.

training = new_data.iloc[:, 0:3]
testing = new_data.iloc[:, 7:8]

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)

5- GridSearchCV

GridSearchCV işleminde kullanmak için algoritmamızın alabileceği, değişkenlerini belirleyip bunların alabileceği aralıkları ve değerleri “randomforest_params” değişkeni içinde tutuyoruz.

randomforest_params = {"n_estimators": [1,10,20,30,40,50,100],
"criterion": ["mse", "mae"],
"max_features": ["sqrt", "auto"],
"min_samples_split":np.arange(1,10,1)}

Aşağıdaki GridSearchCV işlemine belirlediğimiz parametreleri ve öncesinde default değerlerle eğittiğimiz modelimizi gönderiyoruz. Burada GridSearchCV belirlediğimiz parametreleri ayrı ayrı kombinasyonlarla modelimize gönderiyor ve skor değerlerlerini karşılaştırıyor.


from
sklearn.model_selection import GridSearchCV
randomforest_model = GridSearchCV(randomforest_regressor, randomforest_params, cv=10)

Burada “randomforest_model” değişkenimizi StatsModel’den yola çıkarak belirlediğimiz yeni “x_train” ve “y_train” eğerini yolluyarak, eğitiyoruz.

randomforest_model.fit(x_train, y_train)

Yukarıda eğitilen modelde, önceki modelimizin gönderdiğimiz parametrelerden en iyi skorları veren değişkenleri “best_params_” şile ekrana yazdırıyoruz.


print(“Best Parameter: “, randomforest_model.best_params_)

6- Model Tuning Eğitme

Modelimizde en iyi değerleri veren parametreleri bulmuştuk, şimdi bunları aşağıdaki şekilde “RandomForestRegressor” içine parametrenin adını ve alacağı değeri şeklinde yolluyoruz.

“randomforest_tuned” değerini eğitiyoruz ve bu değişken artık bizim skorlarını görmek için eğittiğimiz yeni değişkenimiz oluyor.

from sklearn.ensemble import RandomForestRegressor

randomforest_tuned = RandomForestRegressor(criterion="mae", max_features="sqrt", min_samples_split = 9, n_estimators=50)
randomforest_tuned.fit(x_train, y_train)

8- Stats Model (Tuned)

StatsModel içine “x_train” ile oluşan tahmini ve “x_train” değerini sırasıyla gönderiyoruz.

Tablomuzda R2 (regresyon uyumluluk) değerinin çok iyi bir skora yükseldiğini görüyoruz. Tahminlerimizin doğruluğunu arttdığımızı rahatlıkla söyleyebiliriz.

P > |t| sütunumuzda 0.05' den küçük değerlerin olması modelimizde tahmine etkisi olumlu değişkenlerin olduğunu da görüyoruz.

import statsmodels.api as sm 
model = sm.OLS(randomforest_tuned.predict(x_train), x_train)
model = model.fit()
model.summary()

Regresyon algoritmalarının sonuncusuyla karşınızdaydım. Umarım faydalı olmuştur. Diğer algoritmalarda görüşmek üzere :)

Önceki Yazı (Destek Vektör Regresyonu)

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