Polinom Regresyonu (Polynomial Regression)

Peki elimizdeki verilerin arasında lineer bir ilişki yoksa? Öncelikle kodumuzu verelim:

# Import Required Libs
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import r2_score

# Generate some fake data
np.random.seed(655)
n = 100
X = 6 * np.random.rand(n, 1) - 3
y = 0.5 * X ** 2 + 2 + np.random.randn(n, 1)

# Plot the data
plt.scatter(X, y)
plt.xlabel('$x_{1}$')
plt.ylabel('y')
plt.show()

# Poly fit with numpy and score
X = X.flatten() # np.polyfit wants 1D vector((100, )) for x and y, our X and y is (100, 1).
y = y.flatten()
p2 = np.poly1d(np.polyfit(X, y, 2))
print("Our polynomial is:\n {0}.".format(p2))

# Visualize our polynomial
xp = np.linspace(-3, 3, 100) # our X values in range (-3, 3)
plt.scatter(X, y)
plt.plot(xp, p2(xp), c='r')
plt.xlabel('$x_{1}$')
plt.ylabel('y')
plt.show()

# measure the r-squared error
r2 = r2_score(y, p2(X))
print("Our r-squared score is: {0}.".format(r2))

Şimdi adım adım kodumuzu inceleyelim:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import r2_score

İlk olarak gerekli kütüphaneleri içeri aktardık. NumPy polinom regresyonu için, matplotlib görselleştirme için ve r2_score fonksiyonunu da eğrimizin verilerimizi ne kadar iyi “genelleştirdiğini” belirlemek için kullanacağız.

np.random.seed(655)
n = 100
X = 6 * np.random.rand(n, 1) - 3
y = 0.5 * X ** 2 + 2 + np.random.randn(n, 1)

np.random.seed ile rasgele sayı üreticimizin(Random number generator-RNG) “seed”ini belirledik – böylece bu kodları siz de kendi bilgisayarınızda çalıştırdığınızda aynı sonuçları elde edeceksiniz. n, nokta sayısını belirtiyor. X değerlerini rastgele, y değerlerini de X’e bağlı olarak ancak bir miktar gürültü(noise) ekleyerek ürettik.

plt.scatter(X, y)
plt.xlabel('$x_{1}$')
plt.ylabel('y')
plt.show()

Verimizi görselleştiriyoruz ve aşağıdaki grafiği elde ediyoruz:

indir (4)

X = X.flatten() # np.polyfit wants 1D vector((100, )) for x and y, our X and y is (100, 1).
y = y.flatten()
p2 = np.poly1d(np.polyfit(X, y, 2))
print("Our polynomial is:\n {0}.".format(p2))

np.polyfit ile X ve y verilerimize bir 2.dereceden polinom regresyonu uyguluyoruz(Neden 2.derece?). print ifadesi ile de polinomu görüntülüyoruz:

Our polynomial is:
         2
0.4263 x - 0.04647 x + 2.149.

Bir sonraki plt.scatter ve plt.plot komutları ile de verimizi ve polinomumuzu çizdiriyoruz:

indir (5).png

r2 = r2_score(y, p2(X))
print("Our r-squared score is: {0}.".format(r2))

Artık regresyonumuzu değerlendirme vakti. Yukarıdaki komutları çalıştırıp elde ettiğimiz sonuç:

Our r-squared score is: 0.5843426309206796.

Bu da, regresyon sonucunda elde ettiğimiz eğri, y değerlerindeki değişimin yaklaşık %60’ını açıklıyor diyebiliriz. Çok iyi bir sonuç değil ama kabul edilebilir. Bir sonraki yazımızda görüşmek üzere.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s