Lineer Regresyon ve Polinomal Regresyon ile Dolar Tahminleme
Bu yazımda elimden geldiğince sizlere regresyon modeli ile tahminlemeyi anlatmaya çalışacağım.Yaptığım araştırmalar doğrultusunda ve oluşturduğum örnek proje hakkında bilgi vereceğim.
Öncelikle Polinom regresyon ve Lineer regresyonla ilgileneceğimizi söylemeliyim.Bu iki modelden hangisinin bizim için önemli olduğunu deneme yanılma yoluyla yani projemizde deneyerek kendimiz göreceğiz.
Gelin sizlere lineer regresyondan bahsedeyim.
Lineer Regresyon yöntemi iki skaler değişken arasındaki istatiksel ilişkiyi incelememizi sağlayan bir analiz yöntemidir.Tahmini (istatiksel) ilişkilerde elimizde ki bir kısım verilere bakarak aralarında bir varsayıma dayanan bir ilişki çıkarılır.
Lineer regresyonda tahminleme yapabilmek için bir model oluşturmamız gerekiyor.
Bu model şu şekilde;
y= b0+b1.x1
b0 değeri bizim sabit değerimiz.
b1 değeri ise modelimizin eğimini temsil ediyor.
x1 değeri ise tahminleme yapılacak noktayı temsil ediyor.
Bizim pythonda yapacağımız işlem b0 ve b1i bulmakla ilgili olacak.
Lineer regresyonun amacı parametreler arasındaki ilişki fonksiyonunu elde etmektir.En basit makine öğrenme modelidir.Temel amaç neden ve sonuç arasında lineer ilişki olup olmadığını belirlemektir.
Lineer Regresyonun Avantajları
Lineer modelinde sınıflandırma probleminde doğrusal bir sınıf sınırı oluşturulur.
Teorisi çok iyi geliştirilmiştir,özellikleri ve davranışları iyi bilinir.
Parametrelerin tahmini ve problemlere göre geliştirilmesi kolaydır.
Çok geniş ve çeşitli ilişkiler ifade edilebilir.
Verilerde bazen doğrusal olmayabilir.Bu durumlarda da Polinomsal Regresyon kullanılır.
Kısaca polinom ve lineer regresyondan bahsettiğimize göre artık örnek proje üzerinden adım adım birlikte gidebiliriz.Açıklayıcı olması için elimden geleni yapacağım.
Gerekli olacak kütüphanelerin projeye eklenmesi.
Kod:
#! /usr/bin/env python
# -*- coding: UTF-8 -*-
# ilk kısımda UTF tanımlamasını yaptık.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression #lineer regresyon kütüphanesi
from sklearn.preprocessing import PolynomialFeatures #polinom regresyon kütüphanesi
Yapacağımız tüm işlemlerimizi matris üzerinde yapacağımız için numpy kütüphanesini kullanacağız.
Gelen veriler büyük ihtimalle pandas kütüphanesinin veri tutma objesi olan DataFrame halinde geleceğinden o durum için de gerekli kodlamaları yapmak için pandasI import ettik.
Pyplot kütüphanesini ise bitişte kullanacağımız görselleştirme işlemleri için tanıtıyoruz.
Kod:
veri = pd.read_csv(input("dosya adı giriniz -->"))
x = veri["Gun"]
y = veri["Fiyat"]
veri isimli değişken içerisine kullanıcıdan alacağımız .csv dosyasının içerisindeki değerleri veriyoruz.
Bu kısımda ilk etapta zorlandım.Çünkü tanımlama yapmama rağmen numpy sürekli reshapei yenilemem konusunda zorladı hatta.Böyle bir değişken yada fonksiyon mevcut değil şeklinde hata aldım.Sonra dedim ki hep böyle hata mı alıp duracağız
Neyse yukarıdaki fonksiyonda len () ile değişkeninin uzantısını çektim.Çünkü csvden okuduğu veri sayısı kadar işlem uygulacağız.Bu arada burda yaptığı işlem veriye yeni bir düzene getirip matrisi oluşturmak.
Mesela ;
2019csvdolaralis.csv olan klasörden tüm verileri pandas ile çekip gönderilerimin sayısını öğrenmiş oldum.Şu şekilde 2019csvdolaralis.csvde 97 veri var
O halde 97x1 şeklinde yapabilirsiniz o halde yeni matrisimizi.
Kod:
plt.title("Lineer ve POlinom REgresyon")
plt.xlabel("Gun")
plt.ylabel("Fiyat")
plt.grid()
plt.scatter(x,y)
Burda verilerimizin işlenmemiş halini grafiğe döktüm ve labellara isimlerini tanımladım.Verilerimizi grafiğe dökmemin sebebi ise regresyonların ne kadar hata oranı olduğunu rahat bir şekilde gözle görebilmemiz içindi.
Bir grafik elde ediyoruz.Ardından lineer regresyon olayına geçiyoruz.
Kod:
#Lineer Regresyon
tahminlineer=LinearRegression()
tahminlineer.fit(x,y) #x ve y eksenine oturtmak için.
tahminlineer.predict(x) #günlere göre fiyatları arıyoruz.Predict tahmin etmesi için.
plt.plot(x,tahminlineer.predict(x),c="red") #çizdirmek için
#print(tahminlineer.predict(x)) #tahminleri yazdırmak için...
plt.show()
Bu kısımda ilk önce tahminlineer isimli bir değişken oluşturduk.Bu değişkene
LinearRegression() dediğimiz sabit methodumuzu eşitledik.Ardından fit(x,y) fonksiyonu ile x,y değerlermizi eksenlerine oturttuk.predict(x)şeklinde fonksiyonumuza günlere göre fiyatları arıyoruz sende tahmin et diye söyledik.Ama fiyata göre günleri ara deseydik aşırı saçma bir örnek olurdu ama tam tersini yani predict(y)şeklinde oturtmamız gerekirdi.
Matplotlib kütüphanesi ile şimdi de geldi sıra lineer regresyondan çıkan tahminlemeyi görmeye
Bunun için de plt.plot şeklinde çağırıp c diye belirttiğimiz yerde grafik çizgisinin istediğimiz renk olmasını söyledik.Ben kırmızı olsun da bi göriyim onu neymiş dedim.Kırmızı ile çağırdım.Ayrıca bunu istersem ayrı ayrı grafikte yapardım istersem de tek grafikte.Ben tek grafikte çağırdım ki gözle görüp karşılaştırmakta zorlanmayalım diye 😊
Bu ara lineer sayesinde tahmin edilen verileri de isterseniz yazdırabilirsiniz.
Hemen parmaklarınızın ucunda
Her zaman ki gibi "print" ile değişkeni çağırınnn!!!Size hemen konsolda saydırmaya başlasın 😊
Kod:
print(tahminlineer.predict(x))
Şimdi geldi sıra polinom regresyonumuzu yapmaya.Polinom regresyonda
Derecelendirme olduğu için hangi derecede tahminlemenin iyi olduğunu görmek için for döngüsü döndürmeyi düşündüm.
Kod:
#Hangi derecenin daha iyi olduğunu bulmak için.
a=0
hatakaresipolinom=0
for a in range(50):
tahminpolinom = PolynomialFeatures(degree=a+1)
Xyeni = tahminpolinom.fit_transform(x)
polinommodel = LinearRegression()
polinommodel.fit(Xyeni,y)
polinommodel.predict(Xyeni)
for i in range(len(Xyeni)):
hatakaresipolinom = hatakaresipolinom + (float(y[i])-float(polinommodel.predict(Xyeni)[i]))**2
print("----------")
print(a+1,"inci dereceden fonksiyonda hata,", hatakaresipolinom)
print("----------")
hatakaresipolinom = 0
Burdan da kaçıncı derecenin hata oranını tespit edip ona göre polinom regresyonda hangisinin iyi olacağını görmüş olduk.
Kod:
"""
#Hataları görmek için
verilerimizin tahmin ettiğimiz değerle gerçek değer arasında ki verinin
karesini alıp toplayıp,tüm değerler için yani bunu yapıp toplayıp,
Hangi modelde daha az hata var yada çok hata var GÖrebiliriz.
"""
hatakaresilineer=0
hatakaresipolinom=0
#Polinom regresyonun hatasını görmek için....
for i in range(len(Xyeni)): #(Gerçek değerim - tahmini değerim)**2
hatakaresipolinom=hatakaresipolinom+(float(y[i]-float(polinommodel.predict(Xyeni)[i])))**2
for i in range(len(y)):
hatakaresilineer = hatakaresilineer + (float(y[i])-float(tahminlineer.predict(x)[i]))**2
Sonrasında ;
Kod:
#Polinom Regresyon
a=[2,3,9]
b=["black","green","gray"]
i=0
for i in range(len(a)):
tahminpolinom = PolynomialFeatures(degree=a[i])#kaçıncı dereceden polinom olacağını tanımladık.
Xyeni = tahminpolinom.fit_transform(x)#x in yeni matrisini oluşturuyor.
polinommodel = LinearRegression()
polinommodel.fit(Xyeni,y) #Yeni matrisle y değerini eksene oturttuk.
polinommodel.predict(Xyeni) #Yeni matrise göre tahmin ettiriyoruz.
plt.plot(x,polinommodel.predict(Xyeni),c=b[i]) #
i=i+1
plt.show()
İlk bi array tanımladım.Merak ettiğimiz dereceden nasıl görünüyorsa onu anlamak için tabii ki.Sonrasında dedim ki bu grafik aynı renk olursa biz hiçbirşey anlamayız ki.Dedim c yazan yere biz en iyisi array içinden yine renkleri çekelim başka renkler gözüksün.Yani ;
2.dereceden olanlar siyah ,
3.dereceden olanlar yeşil,
9.dereceden olanlar gri
Şeklinde gösterelim dedim.Neden 9? Çünkü siz de göreceksiniz ki anlayacaksınız beni o zaman,Hata oranı en az olan 9.derece çıktı ve bizde onu uyguladık
Bu şekilde tahminlememiz ortaya çıkarmış olduk.