Adım Adım Makine Öğrenmesi Bölüm 5: Regresyon ve Python ile Uygulamalı Regresyon Örneği

Hatice Candan
Machine Learning Turkiye
4 min readFeb 5, 2022

Machine Learning Step-by-Step Part 1 : What is Regression and Applied Regression Sample with Python

Photo on Unsplash by
Ruthson Zimmerman

Herkese yeniden merhabalar. Uzun bir aradan sonra blog yazılarıma kaldığım yerden devam etmem gerektiği aydınlanmasıyla bu yazıyı hazırladım. Son yazımda Denetimli öğrenme ve denetimsiz öğrenme arasındaki farkı öğrenmiştik, şimdi ise regresyon konusuna daha derin bir bakış atacağız. Python uygulaması ile de bu bakışımızı daha da derinleştireceğiz. Şimdiden hepinize keyifli ve verimli okumalar…

Regresyon Nedir ?

Aslında burayı biliyoruz ama yeniden hatırlamakta fayda var. “Bir regresyon probleminde, sürekli değerli (continuous) bir çıktıyı tahmin etmek hedeflenmektedir. Genellikle bağımlı ve bağımsız değişkenler arasındaki neden sonuç ilişkisini tahmin etmek ve bulmak için kullanılır.”

Şekil 1 Lineer Regresyon Modeli

Lineer regresyon bize incelediğimiz verilerin dağılıma göre bir lineer doğru çiziyor ve tahmin edilmesi gereken değeri bu doğru üzerinden tahmin etmemizi sağlıyor. Örneğin ev fiyatı tahmini, araba fiyatı tahmini gibi.

Kafamızda oturması açısından doğrunun denklemi formülünü yazalım.

Denklem 5.1

Burada ;

  • Ŷ bu formül üzerinden bizim tahmin edeceğimiz değişkeni ,
  • β0 intercept yani x değişkeni sıfırken y’nin değerini,
  • β1 çizilen doğrunun eğimini,
  • x ise tahmin için kullandığımız girdiyi temsil etmektedir.

Düşünüldüğünde gerçek y değeri ile tahmin edeceğimiz değişkeni arasındaki fark ne kadar azsa tahminimiz de o derece gerçeğe yakın olacaktır. Şekil 1’e bakıldığında çizilen kırmızı doğru mavi noktalardan ne kadar uzaklaşırsa gerçekten de o kadar uzaklaşacak demektir. Olabildiğince yakın olması için aradaki farkı hesaplamak için Mean Squared Error (Ortalama Hatalar Karesi) kullanılmaktadır.

Denklem 5.2

Denklem 5.2’de ;

  • n veri setinin büyüklüğünü,
  • yi gerçek y değerini,
  • Ŷi tahmin edilen y değerini temsil etmektedir.

Artık teorik bilgilerden sonra uygulamaya geçmeliyiz.

Python Regresyon Uygulaması Örneği

İlk olarak Python’da lineer regresyon kütüphanesi olan LinearRegression’u import ediyoruz.

#lineer regresyon kütüphanesini import ediyoruz.
from sklearn.linear_model import LinearRegression

Ardından diğer kütüphaneleri de import ediyoruz.

#diğer kullanılacak kütüphaneler de import edilir. 
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error

Şimdi veri setimizi okuyacağız. Ben burada kaggleda yer alan “Advertising.csv” veri setini kullandım. Veri setinin linki için tıklayabilirsiniz.

ad=pd.read_csv('Advertising.csv',usecols=[1,2,3,4])
df=ad.copy()
df.head()

Veri seti ile ilgili bilgi edinmek için bilgilere bakalım.

#veri setiyle ilgili bilgilere bakalım 
df.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 200 entries, 0 to 199
Data columns (total 4 columns):
TV 200 non-null float64
Radio 200 non-null float64
Newspaper 200 non-null float64
Sales 200 non-null float64
dtypes: float64(4)
memory usage: 6.3 KB

Veri seti içinde null değer (boş değer) olup olmadığına bakalım.

#veri seti içerisinde boş değer olup olmadığını kontrol edelim
df.isnull().values.any()
False

Veri seti içerisinde herhangi bir null değer yok, eğer olsaydı null değerleri ortalama değer ile dolduracaktık.

#Veri seti hakkında tanımlayıcı istatistik bilgilere bakalım.
df.describe()

Şimdi burada görüldüğü üzere 4 farklı column var. Burada tahmin edilecek değişken “Sales” kolonudur. Peki diğer değişkenlerden hangisini lineer regresyon için seçeceğim? Bunun için tüm verilerin birbiriyle ilişkisinin grafiğine bakalım.

sns.pairplot(df,kind="reg")

Ben grafiğe bakarak TV ile Sales arasındaki ilişkiye regresyon ile bakmaya karar veriyorum. Ve modelimi TV verileri ile Sales verilerini tahmin etmeye çalışacak şekilde kuruyorum.

plt.scatter(df["TV"],df["Sales"],color="red")
plt.xlabel('TV')
plt.ylabel('Sales')
plt.title("TV ile Sales arasındaki ilişki")
lineer_regresyon = LinearRegression()
lineer_regresyon.fit(df["TV"].values.reshape(-1,1),df["Sales"].values.reshape(-1,1))

TV ile Sales arasındaki ilişkiyi görmek için scatter plot çizimi yaptık ve regresyon modelimizi kurduk.

Şimdi ise B0 ve B1 değerleri olan interceptlerin değerini bulup regresyon denklemimizi yazdıralım.

print("BO =",lineer_regresyon.intercept_)
print("B1 =",lineer_regresyon.coef_)
print("Elde edilen regresyon modeli: Y={}+{}X".format(lineer_regresyon.intercept_,lineer_regresyon.coef_[0]))

ÇIKTI :

BO = [7.03259355]
B1 = [[0.04753664]]
Elde edilen regresyon modeli: Y=[7.03259355]+[0.04753664]X

B0 ve B1 değerlerimiz bulunup regresyon modeli doğrumuz yukarıdaki gibi hesaplamış oldu.

Peki modelimizin verimi nedir? yani % kaç oranında anlamlıdır? Hemen ona bakalım.

y_predicted = lineer_regresyon.predict(df["TV"].values.reshape(-1,1))
r2_score(df["Sales"],y_predicted)
ÇIKTI :
0.611875050850071

Modelimiz %61 oranında anlamlı çıktı.

Şimdi de MSE yani Ortalama Hatalar Karesine bakalım.

#MSE yani ortalama hatalar karesine de bakalım.
print("Ortalama Mutlak Hata: {} \nOrtalama Hatalar Karesi: {}".format(
mean_absolute_error(df["Sales"], y_predicted), mean_squared_error(df["Sales"], y_predicted)))
Ortalama Mutlak Hata: 2.549806038927486
Ortalama Hatalar Karesi: 10.512652915656757

Son olarak ise regresyon grafiğini çizelim .

g = sns.regplot(df["TV"],df["Sales"],ci=None, scatter_kws={'color':'r', 's':9})
g.set_title("Model denklemi: Sales = 7.03 + TV*0.05")
g.set_xlabel("TV harcamaları")
g.set_ylabel("Satış Sayısı")

Böylece regresyon analizini yapmış olduk.

Son Söz ve Kapanış

Bu yazımızda regresyona daha detaylı baktıktan sonra Python’da lineer regresyon uygulaması yapmayı öğrenmiş olduk. Lineer regresyonda yer alan B0 ve B1 katsayılarını bulmayı, denklemi yazdırmayı ve denklemin % kaç anlamlı olduğunu bulmayı öğrenip regresyon eğrisini çizdirmeyi öğrendik. Umarım faydalı olmuştur. Bir sonraki yazımda sınıflandırma uygulaması yapıyor olacağım. Okuduğunuz için teşekkür ederim.

Kendinize cici bakın :)

Photo on Unsplash by @kellysikkema

--

--

Hatice Candan
Machine Learning Turkiye

AI Engineer Intern at Mia Teknoloji || ex - Core Team Lead at Google Developer Student Clups ML and AI Team