Lineer Regresyon ve Polinomal Regresyon ile Dolar Tahminleme

JooCyp

Yeni üye
1 Nis 2020
12
0
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 b1’i 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 pandas’I 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.
Kod:
x=x.ravel().reshape(len(veri),1)
y=y.ravel().reshape(len(veri),1)

Bu kısımda ilk etapta zorlandım.Çünkü tanımlama yapmama rağmen numpy sürekli reshape’i 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 :mutlu

Neyse yukarıdaki fonksiyonda len () ile değişkeninin uzantısını çektim.Çünkü csv’den 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. :gülenyüz
Mesela ;
2019csvdolaralis.csv olan klasörden tüm verileri pandas ile çekip gönderilerimin sayısını öğrenmiş oldum.Şu şekilde 2019csvdolaralis.csv’de 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.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.