Як виконати поліноміальну регресію в python


Регресійний аналіз використовується для кількісного визначення зв’язку між однією або декількома пояснювальними змінними та змінною відповіді.

Найпоширенішим типом регресійного аналізу є проста лінійна регресія , яка використовується, коли прогностична змінна та змінна відповіді мають лінійний зв’язок.

Однак інколи зв’язок між змінною-прогнозом і змінною відповіді є нелінійним.

Наприклад, справжня залежність може бути квадратичною:

Або він може бути кубічним:

У цих випадках має сенс використовувати поліноміальну регресію , яка може врахувати нелінійний зв’язок між змінними.

Цей посібник пояснює, як виконувати поліноміальну регресію в Python.

Приклад: поліноміальна регресія в Python

Припустімо, що ми маємо наступну змінну предиктора (x) і змінну відповіді (y) у Python:

 x = [2, 3, 4, 5, 6, 7, 7, 8, 9, 11, 12]
y = [18, 16, 15, 17, 20, 23, 25, 28, 31, 30, 29]

Якщо ми створимо просту діаграму розсіювання цих даних, ми побачимо, що зв’язок між x і y явно не лінійний:

 import matplotlib.pyplot as plt

#create scatterplot 
plt.scatter(x, y)

Тому не має сенсу пристосовувати модель лінійної регресії до цих даних. Замість цього ми можемо спробувати підібрати модель поліноміальної регресії зі ступенем 3 за допомогою функції numpy.polyfit() :

 import numpy as np

#polynomial fit with degree = 3
model = np.poly1d(np.polyfit(x, y, 3))

#add fitted polynomial line to scatterplot
polyline = np.linspace(1, 12, 50)
plt.scatter(x, y)
plt.plot(polyline, model(polyline))
plt.show() 

Лінія поліноміальної регресії в Python

Ми можемо отримати підігнане поліноміальне рівняння регресії, надрукувавши коефіцієнти моделі:

 print(model)

poly1d([ -0.10889554, 2.25592957, -11.83877127, 33.62640038])

Підігнане рівняння поліноміальної регресії має вигляд:

y = -0,109x 3 + 2,256x 2 – 11,839x + 33,626

Це рівняння можна використовувати для знаходження очікуваного значення змінної відповіді за даного значення пояснювальної змінної.

Наприклад, припустимо, що x = 4. Очікуване значення для змінної відповіді, y, буде:

y = -0,109(4) 3 + 2,256(4) 2 – 11,839(4) + 33,626= 15,39 .

Ми також можемо написати коротку функцію, щоб отримати R-квадрат моделі, який є часткою дисперсії у змінній відповіді, яку можна пояснити змінними предиктора.

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

    return results

#find r-squared of polynomial model with degree = 3
polyfit(x, y, 3)

{'r_squared': 0.9841113454245183}

У цьому прикладі R-квадрат моделі становить 0,9841 .

Це означає, що 98,41% варіації змінної відповіді можна пояснити змінними предикторами.

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *