Makine Öğrenmesi - I-Doğrusal İlişkiler (Linear Relationships)

Çok Değişkenli Doğrusal Regresyon - LinearRegression

Yayın tarihi :25-Ara-21
Bölüm kodlarını ve/veya veri setlerini indir.

Çok Değişkenli Doğrusal Regresyon(Multi-variable Linear Regression) Nedir?  

Çok değişkenli doğrusal regresyon, sadece bir tek ve süreklilik gösteren bağımlı değişkenler ile en az iki veya daha fazla bağımsız değişken arasındaki doğrusal ilişkilerin modellenmesi için oldukça yaygın kullanılan popüler regresyon algoritmaları olarak tanımlanabilir.

Bu regresyon algoritmaları genel olarak; veri kümesi içerisinde bulunan hedef değişkenlerinin, en az iki veya daha fazla tahmin (öngörücü, kestirici) değişkenlerden etkilenme gösterdiği durumlarda kullanılmaktadır. Bu durumdan dolayı ise basit doğrusal regresyon algoritmalarının daha gelişmiş ve kapsamlı formları olarak ifade edilebilir.

Veriler üzerinde regresyon çalışmalarında kullanılan bu algoritmaların en temel ve en önemli noktaları;

  • Kullanılan bağımlı değişkenlerin(hedef değişken("y")) gerçekliği(gerçek değerler) ve sürekliliği ifade etmesi gerekliliğidir. Ancak, kullanılan bağımsız değişkenler(tahmin değişken("x") ise süreklilik veya kategorik değerler baz alınarak analizlenebilir. 
  • Çalışmalarda kullanılmak istenilen her bağımsız değişken, çalışmanın ana faktörü olan bağımlı değişkenle başarılı bir şekilde modellenmesi gerekmektedir. 

Günümüzde çok değişkenli doğrusal regresyon algoritmaları, karmaşık bir yapıda bulunan veri kümeleri üzerinde yapılmak istenilen regresyon analizleme çalışmalarında oldukça basit ve başarılı bir şekilde kullanılmaktadırlar. Günümüzde bu algoritmalar en yaygın olarak;

  • Herhangi bir bağımlı değişken ile birden çok bağımsız değişkenin aralarındaki ilişkilerin modelleyerek, bağımsız değişkenlerin tahminsel süreçteki etkilerinin tespiti,
  • Değişenlerin etkisi ve meydana gelebilecek yeni gözlem sonuçlarının tahmin edilmesi,

gibi süreçlerde başarılı bir şekilde kullanım görmektedir.

Çok Değişkenli Doğrusal Regresyon Modeli Nasıl Oluşturulur?

Çok değişkenli doğrusal regresyon modelini oluşturmak için, evrensel olarak kabül edilen "Yi​ = β0​ + β1​Xi1​ + β2​Xi2​ + ... + βp​Xip​ + ϵ " denklemi kullanılmaktadır. Bu denklemin grafiksel ifadesi; 

Yi​ = β0​ + β1​Xi1​ + β2​Xi2​ + ... + βp​Xip​ + ϵ

  • Yi, bağımlı değişkenin tahmin edilen değeridir .
  • β0, y eksenini kesme noktasıdır, başlangıç değeri de denebilir.
  • β1 ve β2 , sırasıyla Xi1 ve Xi2'deki bir birimlik değişime göre Yi'deki değişimi temsil eden regresyon katsayılarıdır (eğim de denebilir.).
  • Xi , bağımsız değişkenleri temsil eder..
  • ϵ, tahminin hatası olarak isimlendirilir.

Çok Değişkenli Doğrusal Regresyon Kullanımı için Uygunluk 

Yukarıda bahsedildiği üzere çok değişkenli doğrusal regresyon; bağımlı değişkenin iki veya daha fazla bağımsız değişkenle doğrusal bir ilişki gösterdiği bir regresyon algoritmaları olarak tanımlanabilinir. Çalışmalarda bu algoritmaların uygunluğu için bazı varsayımlar;

  • Bağımlı(hedef değişken("y")) ve bağımsız(tahmin değişken("x") değişkenlerin arasında doğrusal bir ilişki,
  • Regresyon kalıntılarının oldukça normal bir dağılım göstermeleri,
  • Kullanılacak bağımsız değişkenler arasında oldukça küçük oranlarda olsa bile korelasyon gözlenmesi,

gibi durumlar olarak ifade edilebilir. Anlaşılacağı üzere bu durumlar, teorik düşüncenin ürünü olduğundan dolayı kesinlikleri deneysel sonuçlara bağlıdır.

Çok Değişkenli Doğrusal Regresyon Nasıl Kullanılır?

Çok değişkenli doğrusal regresyon algoritması kullanılarak veri kümesi içerisinde bulunan herhangi bir bağımlı değişken ile en az iki veya daha fazla bağımsız değişkenin aralarındaki ilişkileri analizleyebilmek için Python programlama dilinden faydalanılmaktadır.

Kullanabilmek için "LinearRegression" kütüphanesinin  içe aktarılması gerekmektedir.

from sklearn.linear_model import LinearRegression

Örnek-1: Adversting veri setine "Çok Değişkenli Doğrusal Regresyon" uygulayalım. (Veri seti: Bir şirkete ait satış oranlarını TV, Gazete ve Radyoya verdiği reklamlara göre nasıl değiştiğini gösteren bir veri setidir.)

#Kullanılacak kütüphaneler içe aktarıldı
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
df=pd.read_csv("advertising.csv")

EDA (Exploratory Data Analysis-Keşfedici veri analizi)

Not: Veri seti hakkında genel bir bilgi almak için EDA işlemi yapılır.

#İlk 5 satır listelendi
df.head()

Çıktı:

#Son 5 satır listelendi
df.tail()

Çıktı:

#rasgele 3 satır
df.sample(3)

Çıktı:

#Veri seti boyutu
df.shape

Çıktı:

(200, 4)
#Veri seti hakkında genel bilgi
df.info()

Çıktı:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 200 entries, 0 to 199
Data columns (total 4 columns):
 #   Column     Non-Null Count  Dtype  
---  ------     --------------  -----  
 0   TV         200 non-null    float64
 1   Radio      200 non-null    float64
 2   Newspaper  200 non-null    float64
 3   Sales      200 non-null    float64
dtypes: float64(4)
memory usage: 6.4 KB
#Veri seti içinde boş değerlerin toplamı
df.isnull().sum()

Çıktı:

TV           0
Radio        0
Newspaper    0
Sales        0
dtype: int64
#Veri seti sütunlarının(değişkenlerinin) istatistiksel değerleri
df.describe()

Çıktı:

#sütunların birbirleri ile korelasyonu
df.corr()

Çıktı:

#Korelasyon görüntülenmesi. Sütunların birbirleri ile bağlantıları arttıkça renk değeri de koyu renkten açık renke doğru gidecektir.
sns.heatmap(df.corr(),annot=True,linewidths=2)

Çıktı:

#aykırı değerler var mı?
fig, axs = plt.subplots(ncols=3,figsize=(15,5))
sns.boxplot(x='TV',data=df, ax=axs[0])
sns.boxplot(x='Radio', data=df, ax=axs[1])
sns.boxplot(x='Newspaper', data=df, ax=axs[2])

Çıktı:

sns.pairplot(df,markers="x")

Çıktı:


Model Oluşturma

#x bağımsız ve y bağımlı değişkenlerini tannımlayalım.
x,y=df.drop("Sales",axis=1),df[["Sales"]]
#Not: tanımlama işlemi için aşağıdaki gibi de yapılabilirdi ama bundan sonra yukarıdaki gibi kullanım yapacağız.
#x=df[["TV","Radio","Newspaper"]]
#y=df[["Sales"]]
x.head()

Çıktı:

y.head()

Çıktı:

#train ve test verileri ayrım işlemi
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=13)

x_train.shape,x_test.shape,y_train.shape,y_test.shape

Çıktı:

((160, 3), (40, 3), (160, 1), (40, 1))

Yukarıda bulunan çıktıda x_train ile y_train, x_test ile y_test satır sayılarının eşit olduğuna dikkat ediniz. Train ve test verileri ayrıldığı için artık LinearRegression makine öğrenmesi algoritması tanımlanabilir;

#LinearRegrasyon modülünü lr değişkenine eşitleyelim
#**İsmlendirme olarak istenilen değer verilebilir.
lr=LinearRegression()

fit ve predict komutlarını kullanarak makine öğrenmesi işlemi uygulayalım. 

#Makine x_train ve y_train verileri ile eğitildi
lr.fit(x_train,y_train)
#test için ayrılan x_test verilerinin hedef değerlerinin ne olabileceğini tahmin etti.
predict_lr=lr.predict(x_test)
#tahmin ettiği değerlerin İlk 5 satır listelendiı
predict_lr[0:5]

Çıktı:

array([[12.41367767],
       [ 5.32067348],
       [16.55144938],
       [12.36717245],
       [12.71077284]])
#gerçekte olan değerlerin İlk 5 satır listelendiı
y_test[0:5]

Çıktı:

LinnearRegression modülü ile x_test verilerine karşılık tahmin edilen değerler (predict_lr) ve gerçekte olması gereken değerler (y_test) yukardıda listelenmiş oldu. Makine öğrenmesi modelinin (LinnearRegression) performansını ölçmek için MSERMSEMAER2_Score değerlerine bakalım. 

#MSE
(mean_squared_error(y_test,predict_lr))

Çıktı:

2.0881207094289946
#RMSE
(mean_squared_error(y_test,predict_lr))**.5

Çıktı:

1.4450331170699842
#MAE
mean_absolute_error(y_test,predict_lr)

Çıktı:

1.180093122716239
#r2_score
r2_score(y_test,predict_lr)*100

Çıktı:

93.08589334107374

TV, Radio ve Newspaper sütunları ile Sales sütunu arasında Çok Değişkenli Doğrusal Regresyon ait LinearRegression algoritması kullanılarak %93 doğrulukla sonuç elde etmiş olduk. Bir önceki dersimizde Basit Doğrusal Regresyon kullandığımızda bu oran %63 seviyelerindeydi. %93 oranı güzel bir oran ama ilerleyen derslerimizde başka algoritmalar ile daha yüksek doğrulukta sonuçlar elde edeceğiz.

Modeli kaydetme ve tahmin işlemlerinde kullanma

import pickle

!! pickle, herhangi bir veri ile çalışırken bu verileri daha sonra kullanmak, başka bir program içerisinde kullanmak veya başka birine göndermek için kullanmamız gereken modüldür. 

  • Yazma (diske kaydetme) işlemi için:  pickle.dump(model, open(Kayıtİsmi.pkl, 'wb'))
    • model, yukarıda da oluşturduğumuz "lr" gibi modelleri ifade eder.
    • wb, w yazma (write) işleminin yapılacağını, b ise ikili modda (binary) olacağını ifade eder. 
  • Okuma işlemi için: pickle.load(open("Kayıtİsmi.pkl","rb"))
    • rb, r okuma (read) işleminin yapılacağını, b ise ikili modda (binary) olacağını ifade eder. 

#Yukarıda oluşturulan modeli kaydedelim. Çalışma yapılan sayfanın bulunduğu konumda Adversting.pkl dosyası oluşacaktır.
pickle.dump(lr,open("Adversting.pkl","wb"))
#Modeli diskten okuyalım.
loaded_model=pickle.load(open("Adversting.pkl","rb"))
#herhangi bir değer girerek sonucu tahmin edelim. Değer girme sıralamamız:[["TV","Radio","Newspaper"]]
loaded_model.predict([[13,10,7]])
#bu değer sonucunda %93 oranında doğru sonucu elde etmiş olacağız.

Çıktı:

array([[5.4294155]])
Paylaş:

Yorum Yap (*Yorumunuza kod eklemek isterseniz Kod Parçacığı Ekle butonuna tıklayarak ekleyebilirsiniz.)

Yorumlar

Henüz hiç yorum yapılmamış, ilk yorum yapan sen ol.