Basit Regresyon: Python ile Uygulama

 

Regresyon ile ilgili ikinci yazımıza devam ediyoruz. Bu yazıda teorik açıklamayı bitireceğiz ve Python ile basit bir lineer regresyon uygulaması yapacağız. Bir önceki yazımızda çoklu regresyon denklemimiz; Otomobil satış miktarı = β1TV Reklamı + β2Medya Reklamı + β3Radyo Reklamı + β0 şeklindeydi. Şimdi bu denkleme bir eleman daha ekliyoruz: hata terimi. Hata terimi bu modelde kaçırdığımız her ne varsa torba gibi içine dolduracağımız bir elemandır. Kaçırdığımız şeylerden kastım şudur: ilişki doğrusal olmayabilir, teoride kaçırdığımız ve modelde olmayan ancak gerçekte bağımlı değişkene (y) etki eden başka bağımsız değişkenler (x) olabilir veya ölçüm hatası olabilir.

Çoklu regresyon Şekli

Doğrusal regresyonda geçecek doğru her bir noktaya olan uzaklık en az olsun ve böylelikle regresyon modelimizde yeni bağımsız değişken katsayıları girdiğimizde bağımlı değişkenin değerini daha doğru tahmin edebilelim. Örneğimizden gidecek olursak; otomobil firmasıyız ve elimizde pazarlama için kullanabileceğimiz bir bütçe var bu bütçeyi üç pazarlama elamanına ne şekilde dağıtır isek en yüksek satış gerçekleştirebiliriz? Geçmiş verilerle eğitilen modelimizde bunu gerçekleştirmemiz kolay olacaktır. Bize düşen sadece hedef değişkenimizi azami yapacak katsayıları (reklam bütçelerini) belirlemek olacaktır.

Şimdi Python ile farklı bir veri üzerinden basit bir örnek yapalım:

Kütüphaneleri indirelim ve çalışma diznimizi ayarlayalım:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import os
os.chdir('Calisma_Dizniniz')

Pandas kütüphanesinin read sınıfı read_csv() metodunu kullanarak veri setimizi indirelim: Veri setine buradan ulaşabilirsiniz.

dataset = pd.read_csv('Kidem_ve_Maas_VeriSeti.csv')

Spyder geliştirme ortamı Variable Explorer penceresinden veri setimizin yakışıklı haline bir göz atalım: Tablonun alt kısmı fazla uzun olmasın diye buraya koymadım ancak toplam 30 kayıt var. İki sütunumuz var. İlki Kıdem, ikincisi maaş. Burada kıdemin maaşa etkisini inceleyen basit doğrusal regresyon örneği yapacağız.

Değişkenlerimizi tanıyalım: Kıdem bağımsız değişken(x), Maaş ise bağımlı değişkendir(y). Başka bir deyişle; çalışanın iş tecrübesi alacağı maaşı genellikle etkiler, gerçek hayattan da az çok bildiğimiz gibi bu etki pozitif yöndedir. Kuracağımız basit regresyon modelinde kıdem arttıkça maaş artar demeye getircez, onun yolunu hazırlıyoruz  🙂

Veri Setinden Bağımlı ve Bağımsız Değişkenleri Oluşturmak

Şimdi x nitelikler matrisini ve y bağımsız değişken vektörünü oluşturalım.

X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 1].values

Yukarıdaki kodda küçük bir detay var onu açıklamak istiyorum. x ve y birbirinden farklı veri yapısını barındırıyor. Birisi matris, diğeri vektör. Her ne kadar x nitelikler matrisi tek sütundan oluşsa ve vektör olarak kabul edilebilse bile veri yapısı olarak bir matristir. Başka bir deyişle satır ve sütun olarak koordinatlanabilir. Şayet X = dataset.iloc[:,0] deseydik yine de X’e ilk sütun olan Kidem sütununu atamış olurduk ancak veri yapısı vektör olurdu. Bu sebeple biz y = dataset.iloc[:,:-1] dedik. Yani datasetin hepsini al ama -1 indeksli sütunu (Maas) hariç tut dedik. y için ise dataset’ten 1 numaralı indekse(Maas) sahip sütunu tut getir dedik. Yani 1 ve -1 indeksi aslında aynı sütuna işaret ediyor.

Değişkenlerimizi Eğitim ve Test Olmak Üzere İkiye Bölmek

Burada çok açıklama yapmadan hemen kodlara yer vereceğim. Bu kısımla ilgili daha detaylı açıklamayı veri ön işleme yazımda bulabilirsiniz. Veri setinden eğitim için 2/3, test için 1/3 oranında veri ayırıyorum.

from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 1/3, random_state = 0)

Yukarıdaki kodlar bize dört tane yakışıklı değişken verecektir. Spyder geliştirme ortamı Variable Explorer penceresinden bunları bir görelim.

Formatı ayarlamadığım için Kıdem bilgileri ondalıklı olarak farklı görünüyor olabilir, sıkıntı yok.

Modeli Eğitme

X_train ve buna karşılık gelen y_train verisiyle modelimizi eğiteceğiz. Bunun için scikit-learn kütüphanesinden LinearRegression sınıfına ihtiyacımız olacak. Kütüphaneyi indirip sınıf nesnemizi oluşturalım:

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()

regressor nesnemizi yarattık. Şimdi fit() metodunu kullanarak modelimizi eğitiyoruz. Parametre olarak yukarıda oluşturduğumuz X_train, y_train eğitim setlerimizi kullanacağız.

regressor.fit(X_train, y_train)

Böylelikle basit lineer nesnemizi oluşturmuş ve modelimizi eğitmiş oluyoruz. Alın işte size makine (regressor) öğrenmesi (fit) :). Burada arkadaşımız, verdiğimiz eğitim verilerinden hesaplamalar yapıyor ve lineer regresyon denklemini oluşturuyor.

Model Üzerinde Tahminler Yapma

Modeli oluşturduk. Şimdi sıra eğittiğimiz modele girdiler verelim bakalım bize nasıl sonuçlar üretecek. Bunun için nitelikler matrisinden ayırdığımız X_test verilerini kullanacağız. Daha önce oluşturduğumuz makineyi (regressor) yine kullanıyoruz ancak bu sefer fit() metodu değil de predict() mtodu. yani bir bakıma tahmin et Co diyoruz yaratığa 🙂

y_pred = regressor.predict(X_test)

Variable Explorer penceresinden bakalım model kendisine verdiğimiz kıdem bilgileri (X_test) ışığında hangi maaşları (y_pred) tahmin etmiş? y_pred penceresinde gördüğümüz veriler model bize öneriyor. Ben aynı zamanda y_test verilerini de yanına koydum ki model ne tahmin etmiş ancak gerçekte ne olmuş kıyas etme imkanımız olsun. Çünkü birazdan model ne kadar doğru çalışıyor ona geleceğiz.

 Regresyon Grafiği Çizmek ve Yorumlamak

matplotlib.pyplot kütüphanesini gullanarakdan kurduğumuz modeli, tahminleri, regresyon doğrusunu ve veri noktalarını (data points) görelim. Önce eğitim veri setinin (gerçek veriler) saçılma diyagramını çizelim: 

plt.scatter(X_train, y_train, color = 'red')
plt.title('Kıdeme Göre Maaş Tahmini Regresyon Modeli')
plt.xlabel('Kıdem')
plt.ylabel('Maaş')
plt.show()

Yukarıdaki grafikte eğitim için ayırdığımız verilerin saçılma diyagramını görüyoruz. İlk bakışta zaten doğrusal pozitif bir ilişki göze çarpıyor. Şimdi Aynı gerçek eğitim verisini modelimize verelim ve bize maaş değerlerini tahmin etsin ve bunun grafiğini çizelim. Sanırım bunun saçılma diyagramı değil de doğrusal bir çizgi olacağını söylememe gerek yok. Aynı kodları sadece kırmızı satırları araya sokarak çalıştırıyorum.

plt.scatter(X_train, y_train, color = 'red')
modelin_tahmin_ettigi_y = regressor.predict(X_train)
plt.scatter(X_train, modelin_tahmin_ettigi_y, color = 'blue')
plt.title('Kıdeme Göre Maaş Tahmini Regresyon Modeli')
plt.xlabel('Kıdem')
plt.ylabel('Maaş')
plt.show()

Gördüğümüz gibi eğittiğimiz modele tekrar aynı girdileri (X_train) verdiğimizde bize mavi noktaları söylüyor. Regresyon doğrusu olarak da sadece geriye mavi noktaları birleştirmek kalıyor.

plt.scatter(X_train, y_train, color = 'red')
modelin_tahmin_ettigi_y = regressor.predict(X_train)
plt.plot(X_train, modelin_tahmin_ettigi_y, color = 'blue')
plt.title('Kıdeme Göre Maaş Tahmini Regresyon Modeli')
plt.xlabel('Kıdem')
plt.ylabel('Maaş')
plt.show()

Burada keseyim ve seriye bir yazı daha ekleyeyim. Veriyle kalın…

Yazar Hakkında
Toplam 174 yazı
Erkan ŞİRİN
Erkan ŞİRİN
10 yılı aşkın süredir yurtiçi ve yurtdışında sektörde büyük veri mühendisliği, platform yönetimi ve makine öğrenmesi ile ilgili çalışmalar yürütmekte ve aynı zamanda birçok kurum ve şirkete danışmanlık ve eğitimler vermektedir. Çalışma alanları: Data ve MLOps platformları, gerçek zamanlı veri işleme, değişen veriyi yakalama (CDC) ve Lakehouse.
Yorumlar (5 yorum)
Ahmet Öz
Ahmet Öz Yanıtla
- 16:50

Çok güzel bir anlatım teşekkür ederim

Recep Sivri
Recep Sivri Yanıtla
- 11:03

Sevgili Hocam,
Aynisini yapıyorum,Spyder İde Variable Explorer göstermiyor,Makine öğrenmeye yeni başladım,benim hatam ne,ne yapmam gerekiyor,Spyder İde Variable Explorer göremiyorum herşeyi denedim,başaramadım yardımınızı bekliyorum.
Yukarıdaki kodlar bize dört tane yakışıklı değişken verecektir. Spyder geliştirme ortamı Variable Explorer penceresinden bunları bir görelim.import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import os
os.chdir(‘Calisma_Dizniniz
dataset = pd.read_csv(‘Kidem_ve_Maas_VeriSeti.csv’)
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

    Erkan ŞİRİN
    Erkan ŞİRİN Yanıtla
    - 05:18

    Selam. Benzer sorunla diğer insanlarda karşılaşmış. https://www.youtube.com/results?search_query=spyder+variable+explorer+not+showing belki buradaki videolar yardımcı olabilir.

Serkan TOKGÖZ
Serkan TOKGÖZ Yanıtla
- 10:13

Merhaba Hocam,

2D Array istediği için daha kolay anlaşılacağını düşündüğüm bir kod paylaşmak istedim:

X = dataset.iloc[ : , : -1].values

yerine

X = dataset[[‘Kidem’]].values

kullanabiliriz.

Can Sancar
Can Sancar Yanıtla
- 04:50

Teşşekurler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara