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

Basit Doğrusal Regresyon - LinearRegression

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

Basit Doğrusal Regresyon (Simple Linear Regression) Nedir?

Basit doğrusal regresyon, herhangi bir bağımlı değişken ile sadece bir tek bağımsız değişken arasındaki ilişkinin modellenmesi için kullanılan en temel regresyon algoritması olarak tanımlanabilir. Bu algoritmalar kullanılarak oluşturulan değişkenler arasındaki ilişkiler doğrusal veya hafif eğrisel düz çizgiler kullanılarak ifade edilir. Bu ifadelerden dolayı bu algoritmalar basit doğrusal regresyon olarak tanımlanmaktadır. Ayrıca, modellerde oluşan çizgisel ifadelerin üstünde kalan değerler ile altında kalan değerlerin uzaklık farkları 0'dır.

Veriler üzerinde regresyon çalışmalarında kullanılan bu algoritmaların en temel ve en önemli noktası, kullanılan bağımlı değişkenlerin gerçekliği(gerçek değerler) ve sürekliliği ifade etmesi gerekliliğidir. Ancak, kullanılan bağımsız değişkenler ise süreklilik veya kategorik değerler baz alınarak analizlenebilir. 

Günümüzde basit doğrusal regresyon algoritmaları birçok farklı çalışmada oldukça basit ve başarılı bir şekilde kullanılmaktadırlar. Ancak, günümüzde bu algoritmalar en yaygın olarak;

  • Herhangi iki değişkenin aralarındaki ilişkinin modellenmesi,
  • Meydana gelebilecek yeni gözlem sonuçlarının tahmin edilmesi,

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

Basit Doğrusal Regresyon Modeli Nasıl Oluşturulur?

Basit doğrusal regresyon modelini oluşturmak için, evrensel olarak kabül edilen "y= b0+b1x+ ε " denklemi kullanılmaktadır. Bu denklemin grafiksel ifadesi;   

Yi​ = β0​ + βiXi​ + ϵ

  • Yi, Xi bağımsız değişkenin herhangi bir değeri için bağımlı değişkenin tahmin edilen değeridir .
  • B0, bağımsız değişkene karşılık bağımlı değişkenin 0 olduğu değerdir veya başlangıç değeri de denebilir.
  • B1, regresyon katsayısıdır (eğim de denebilir). Bağımsız Xi değeri arttıkça hedef değerin de artması beklenir.
  • Xi , bağımsız bir değişken.
  • ε, tahminin hatası olarak isimlendirilir.

Basit Doğrusal Regresyon Nasıl Kullanılır?

Genel olarak herhangi iki değişken arasındaki ilişkiyi basit doğrusal regresyon algoritmaları kullanarak modelleyebilmek 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 "Basit 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ı:

sns.lmplot(data=df,x="TV",y="Sales",ci=None)

Çıktı:

Model Oluşturma

x=df[["TV"]] #bağımsız değişken olarak TV sütununu seçelim
y=df[["Sales"]] #bağımlı değişken olarak Sales sütununu seçelim
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, 1), (40, 1), (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 edildi
predict_lr=lr.predict(x_test)
#tahmin ettiği değerlerin İlk 5 satır listelendiı
predict_lr[0:5]

Çıktı:

array([[14.90551819],
       [ 7.42035449],
       [17.81152292],
       [13.33432903],
       [16.3886466 ]])
#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 MSE, RMSE, MAE, R2_Score değerlerine bakalım. 

#MSE
(mean_squared_error(y_test,predict_lr))

Çıktı:

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

Çıktı:

3.294569183401592
#MAE
mean_absolute_error(y_test,predict_lr)

Çıktı:

2.7052115130907373 
#r2_score
r2_score(y_test,predict_lr)*100

Çıktı:

64.06002771701338

TV sütunu ile Sales sütunu arasında Basit Doğrusal Regresyon ait LinearRegression algoritması kullanılarak %64 doğrulukla sonuç elde etmiş olduk. Tabi bu oran ihtiyacımız olacak %100 sonucuna uzak bir değer, bunun için tek sütun veri yerine birkaç sütun veri daha eklersek bu oranı artırabiliriz. 

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.
loaded_model.predict([[13]])

Çıktı:

array([[7.83284958]])
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.