Python'da eğri uydurma (örneklerle)


Çoğu zaman Python’da bir veri kümesine bir eğri sığdırmak isteyebilirsiniz.

Aşağıdaki adım adım örnek, numpy.polyfit() işlevini kullanarak eğrilerin Python’daki verilere nasıl sığdırılacağını ve verilere en iyi uyan eğrinin nasıl belirleneceğini açıklamaktadır.

1. Adım: Verileri oluşturun ve görselleştirin

Sahte bir veri kümesi oluşturarak başlayalım, ardından verileri görselleştirmek için bir dağılım grafiği oluşturalım:

 import pandas as pd
import matplotlib. pyplot as plt

#createDataFrame
df = pd. DataFrame ({' x ': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
                   ' y ': [3, 14, 23, 25, 23, 15, 9, 5, 9, 13, 17, 24, 32, 36, 46]})

#create scatterplot of x vs. y
plt. scatter (df. x , df. y ) 

Adım 2: Birden Fazla Eğriyi Ayarlayın

Daha sonra verilere birkaç polinom regresyon modeli yerleştirelim ve her modelin eğrisini aynı çizimde görselleştirelim:

 import numpy as np

#fit polynomial models up to degree 5
model1 = np. poly1d (np. polyfit (df. x , df. y , 1))
model2 = np. poly1d (np. polyfit (df. x , df. y , 2))
model3 = np. poly1d (np. polyfit (df. x , df. y , 3))
model4 = np. poly1d (np. polyfit (df. x , df. y , 4))
model5 = np. poly1d (np. polyfit (df. x , df. y , 5))

#create scatterplot
polyline = np. linspace (1, 15, 50)
plt. scatter (df. x , df. y )

#add fitted polynomial lines to scatterplot 
plt. plot (polyline, model1(polyline), color=' green ')
plt. plot (polyline, model2(polyline), color=' red ')
plt. plot (polyline, model3(polyline), color=' purple ')
plt. plot (polyline, model4(polyline), color=' blue ')
plt. plot (polyline, model5(polyline), color=' orange ')
plt. show ()

Hangi eğrinin verilere en iyi şekilde uyduğunu belirlemek için her modelin düzeltilmiş R karesine bakabiliriz.

Bu değer bize, yordayıcı değişken sayısına göre ayarlanan, modeldeki yordayıcı değişken(ler) tarafından açıklanabilecek yanıt değişkenindeki varyasyonun yüzdesini belirtir.

 #define function to calculate adjusted r-squared
def adjR(x, y, degree):
    results = {}
    coeffs = np. polyfit (x, y, degree)
    p = np. poly1d (coeffs)
    yhat = p(x)
    ybar = np. sum (y)/len(y)
    ssreg = np. sum ((yhat-ybar)**2)
    sstot = np. sum ((y - ybar)**2)
    results[' r_squared '] = 1- (((1-(ssreg/sstot))*(len(y)-1))/(len(y)-degree-1))

    return results

#calculated adjusted R-squared of each model
adjR(df. x , df. y , 1)
adjR(df. x , df. y , 2)
adjR(df. x , df. y , 3)
adjR(df. x , df. y , 4)
adjR(df. x , df. y , 5)

{'r_squared': 0.3144819}
{'r_squared': 0.5186706}
{'r_squared': 0.7842864}
{'r_squared': 0.9590276}
{'r_squared': 0.9549709}

Sonuçtan, en yüksek düzeltilmiş R-kare değerine sahip modelin, düzeltilmiş R-kare değeri 0,959 olan dördüncü derece polinom olduğunu görebiliriz.

3. Adım: Son eğriyi görselleştirin

Son olarak dördüncü derece polinom modelinin eğrisiyle bir dağılım grafiği oluşturabiliriz:

 #fit fourth-degree polynomial
model4 = np. poly1d (np. polyfit (df. x , df. y , 4))

#define scatterplot
polyline = np. linspace (1, 15, 50)
plt. scatter (df. x , df. y )

#add fitted polynomial curve to scatterplot
plt. plot (polyline, model4(polyline), ' -- ', color=' red ')
plt. show ()

Bu satırın denklemini print() fonksiyonunu kullanarak da elde edebiliriz:

 print (model4)

          4 3 2
-0.01924x + 0.7081x - 8.365x + 35.82x - 26.52

Eğrinin denklemi aşağıdaki gibidir:

y = -0,01924x 4 + 0,7081x 3 – 8,365x 2 + 35,82x – 26,52

Bu denklemi, modeldeki yordayıcı değişkenlere dayalı olarak yanıt değişkeninin değerini tahmin etmek için kullanabiliriz. Örneğin, eğer x = 4 ise y = 23,32 olacağını tahmin ederiz:

y = -0,0192(4) 4 + 0,7081(4) 3 – 8,365(4) 2 + 35,82(4) – 26,52 = 23,32

Ek kaynaklar

Polinom Regresyona Giriş
Python’da polinom regresyonu nasıl gerçekleştirilir

Yorum ekle

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