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…

Basit Regresyon: Python ile Uygulama” için bir yorum

  • 9 Mart 2018 tarihinde, saat 16:50
    Permalink

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

    Yanıtla

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Fazla kilolardan mı şikayetçisiniz? O halde neden mide küçültme ameliyatı nı denemiyorsunuz. mide küçültme ameliyatı, zayıflamak isteyenler için kesin bir çözüm sunuyor. Üstelik çok kısa bir süre içersinde hayal ettiğiniz kilolara kavuşabilirsiniz.
Caminin önünde ve iki yanında geniş cami halısı dış avlusu olup bunun çevresi pencereli duvarlarla çevrilidir. Bu avulya 3 ü cephede olmak üzere, 8 kapıdan girilir. Şadırvan avlusu, 26 adet granit mermer ve porfir sütuna oturtulmuş, 30 kubbeyle çevrili geniş alandır. Mermer döşemeli bu geniş sahanın ortasında 6 mermer sütunlu şadırvan, sahanın azametini gösterir. Şadırvanın kemerleri, kabartma olarak Rumi geçmelerle ve köşebentleri, kabartma, lale ve karanfil motifleriyle bezelidir. İç avluya, biri cepheden ikisi yandan olmak üzere herbiri merdivenli 3 kapıdan girilmektedir. Bu kapılarla dış avlunun cümle kapısı, ozamana kadar benzeri görülmemiş bronz kapılardır. Kubbeden aşağı doğru indikçe mekan yayılmaktadır. Bu piramidel yükselme ve yayılma sonucunda göz yanlara ve yukarıya doğru aynı mesafelere ulaşmaktadır. Bu özelliklerden dolayı, mekanın neresinde olursanız olun, bütün mekana hakim görüş sağlarsınız. Kubbe yaklaşık olarak 43 metre yükseklikte ve köşeleri pandantifle doldurulmuş 4 muazzam kemer üzerine oturtulmaktadır. Caminin su basmanı üzerinde olması ve kubbe yüksekliği nedeniyle pencereleri oldukça fazladır. Böylece caminin içini süsleyen binlerce çini ve kalem işleri tatlı ışık altında görülmektedir. Caminin içindeki en önemli unsur, ince işçilikle yontulmuş mermerden yapılma mihraptır. Bitişik duvarları, seramik çinilerle kaplanmıştır fakat çevresindeki çok sayıdaki pencere onu daha az ihtişamlı gösterir. Mihrabın sağında, Caminin en kalabalık halinde dahi olsa, herkesin imamı rahatça duyabileceği şekilde dekore edilmiş mimber bulunur. Caminin içi her katında alçak düzeyde olmak üzere 50 farklı lale deseninden üretilmiş 20binden fazla çini ile döşenmiştir. Alt seviyelerdeki çiniler, geleneksel galerideki çinilerin desenleri çiçekler meyveler ve servilerle gösterişli ve ihtişamlıdır.