Random Forest Regresyonu -Makine Öğrenmesi (2020)
Makine Öğrenmesinde tahmin algoritmalarından Rassal Orman (Random Forest) Regresyonu ile karşınızdayım :)
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 SimpleImputerdata = 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_splitx_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)