Doğrusal Regresyon: Teori ve Python ile Uygulanması

Makine öğrenimi eğitimlerine başlayan herkes ilk olarak doğrusal regresyon ile tanışır. Makine öğrenimi algoritmalarının temel mantığını sağlam bir şekilde kavrama konusunda doğrusal regresyon önemli bir yere sahiptir. Makine öğrenimine giriş yapmak için doğrusal regresyonun teorik ve uygulama kısımlarını anlaşılır bir şekilde ele alacağız.

Teori

Doğrusal Regresyonun temel amacı modeldeki bağımlı ve bağımsız değişken arasındaki ilişkiyi açıklayan doğrusal fonksiyonu bulmaktır.

Doğrusal Regresyon Formülü

Formülde görmüş olduğunuz Yİ ifadesi bize bağımlı değişkeni ifade eder. Bazı kaynaklarda hedef değişken olarak da görebileceğiniz bu ifadede X ile temsil edilen bağımsız değişkenlerin katsayılarla çarpılması sonucu bir değere ulaşmaya çalışırız.

B0 ifadesi bize sabit katsayıyı verir. Basit Doğrusal Regresyonda tek bir bağımsız değişken üzerinden hesaplama yaptığımız için B1 elimizdeki bağımsız değişkenin önündeki katsayıyı temsil eder.

ε ifadesi ise gerçek veri ile tahmin edilen verinin arasındaki farkın temsilcisidir.

Peki, makine öğrenimi modeli kurulurken üzerinde çok durulan bu fark ne anlama geliyor?

Hata İfadesini Açıklayan Bir Regresyon Modeli

Görmüş olduğunuz modelde birbirine yakın şekilde dağılmış mavi noktalar gerçek değerleri göstermektedir. Doğrusal çizilmiş kırmızı çizgi ise tahminci fonksiyonumuzdur. Gerçek değeri gösteren mavi nokta ile tahmin çizgisinin arasında kalan mesafeyi modeldeki fark veya hata olarak değerlendiriyoruz ve makine öğrenimi algoritmalarında bu değeri mümkün olduğunca minimize etmeye çalışıyoruz.

Python ile Doğrusal Regresyon

Temel teorik kavramları tanıttıktan sonra Python dilinde scikit-learn kütüphanesini kullanarak bir basit doğrusal regresyon algoritmasını uygulayacağız.

Öncelikle şu adrese gidip Advertising adlı veri setini çalışmak istediğimiz dizine indirmemiz gerekiyor. Bu veri setinde tv, radyo ve gazetelere verilen reklamların satışlara olan etkisini inceleyeceğiz. Temel veri manipülasyonları için pandas kütüphanesini yüklüyoruz.

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

pd.read_csv koduyla veri setimizi içeri aktardık ve usecols argümanı ile sütun isimlendirmesi yaptık. df.head fonksiyonu ile ilk değerlere bir bakış atıyoruz. Çıktımız aşağıdaki gibidir.

TVradionewspapersales
0230.137.869.222.1
144.539.345.110.4
217.245.969.39.3
3151.541.358.518.5
4180.810.858.412.9
Veri Setinin İlk Değerleri

df.info() ile veri seti hakkında biraz bilgi edinelim. Bu kodu çalıştırınca veri setinde 200 gözlem 4 değişken olduğunu ve veri tipinin float64 olduğunu görebilirsiniz.

df.describe().T fonksiyonu ile transpozu alınmış bir şekilde istatistik tablosunu elde edip standart sapma, çeyreklikler, minimum ve maksimum değerler gibi betimlemelere aşağıdaki gibi göz atabiliriz.

İstatiksel Bilgiler İçeren Tablo

df.isnull().values.any() fonksiyonu ile veri setinde eksik değer olup olmadığını sorguluyoruz ve False ifadesi ile hiçbir değerin eksik olmadığına ulaşıyoruz.

df.corr() fonksiyonu ile değişkenlerin kendi içlerindeki korelasyonları inceleyebiliyoruz.

TVradionewspapersales
TV1.0000000.0548090.0566480.782224
radio0.0548091.0000000.3541040.576223
newspaper0.0566480.3541041.0000000.228299
sales0.7822240.5762230.2282991.000000
Korelasyon Tablosu

TV ile sales değişkenleri arasındaki yüksek korelasyona bakınca tv için yapılan reklam harcamalarındaki bir birimlik artışın satışlarda 0.78 birimlik bir yükselişe denk geldiğini görebiliyoruz.

Eğer bu korelasyonları görsel olarak incelemek istiyorsak bunun için seaborn kütüphanesindeki pairplot fonksiyonu yardımımıza koşuyor. Aşağıdaki kodu çalıştırdığımızda detaylı bir görsel incelemesi yapabiliriz.

import seaborn as sns

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

Korelasyon Verilerinin Görselleştirilmesi

Model Kurma

Veri setine hızlıca bir göz attıktan sonra şimdi scikit-learn ile modeli kuracağız.

from sklearn.linear_model import LinearRegression kodu ile scikit-learn kütüphanesinden doğrusal regresyon fonksiyonunu çağırıyoruz.

Paket yüklendikten sonra aşağıdaki kodları yazıyoruz.

X = df[["TV"]]
y = df["sales"]
reg = LinearRegression()
model = reg.fit(X, y)
model.intercept_
model.coef_

Yukarıda X değişkenine TV değerlerini, Y değişkenine satış değerlerini atadık. reg ifadesine fonksiyonu atayıp bir nesne oluşturduk ve bu nesne üzerinden fit() fonkiyonu ile modeli kurduk. Intercept ve coef fonksiyonları ile formüldeki B0 ve B1 katsayılarını çağırıyoruz. Ayrı ayrı çalıştırınca Intercept değerinin 7.032, coef değerinin ise 0.047 olduğunu gözlemlemekteyiz.

Predict adlı fonksiyon ile tahmin çalışmalarımızı gerçekleştiriyoruz. Bunun bir örneğini görmek için aşağıdaki kodu editörümüze yazalım.

model.predict(X)[0:10]
array([17.97077451,  9.14797405,  7.85022376, 14.23439457, 15.62721814,
        7.44616232,  9.76595037, 12.74649773,  7.44140866, 16.53041431])

Yukarıda, algoritmadan veri setinin ilk 10 değerini tahmin etmesini istedik ve bir dizi halinde bize satış değerlerini yazdırdı.

Intercept ve coef fonksiyonlarını çalıştırıp elde ettiğimiz çıktılara göre modelin denklemini

Sales = 7.03 + TV*0.04

şeklinde yazabiliriz.

İncelemenin sonlarına doğru model üzerinden bir örnek gerçekleştirelim. TV için reklam harcamalarına 50 birim para miktarı ayrılıyor ve bu sonuçlara göre bizden satışlardaki artışın kaç birim olacağı soruluyor. Bunun için model.predict([[50]]) adlı kodu yazıyoruz ve çıktı olarak array([9.40942557]) ifadesini elde ediyoruz. Yani 50 birimlik bir tv harcamasına karşılık satışlarda elde edeceğimiz değer 9.41 birim oluyor.

Bu yazıda temel hatlarıyla Python dilinde doğrusal regresyonun nasıl çalışacağı üzerinde durduk. Sorularınızı ve görüşlerinizi yorumlarda belirtebilirsiniz.

Teknoloji'den geri kalmamak için e-posta listemize abone olun!

Veriyle çalışmayı seven bir endüstri mühendisi.

“Doğrusal Regresyon: Teori ve Python ile Uygulanması” üzerine bir yorum

  1. Sevgili Hocam,
    sizin gibi aynen uyguluyorum,spyder ide varable explorer da göremiyorum,Lütfen bana yardım edermisiniz,hata ne,ne yapmam gerekiyor,makine öğrenmeye yeni başladım,içtenlikle yardımınızı bekliyorum.
    Spyder geliştirme ortamı Variable Explorer penceresinden veri setimizin yakışıklı haline bir göz atalım,
    import pandas as pd
    ad = pd.read_csv(“Advertising.csv”, usecols = [1,2,3,4])
    df = ad.copy()
    df.head()
    import numpy as np
    import matplotlib.pyplot as plt
    x=np..array([[6000],[8200],[9000],[14200],[16200]]).reshape(-1,1)
    y=[86000,82000,78000,75000,70000]
    plt.figure()
    plt.title(‘Otomobil Fiyat-KM Dağılım Grafiği’)
    Saygılarımla,
    Recep Sivri
    inşaat mühendisi

Yorumlar kapalı.