Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Побудова Поліноміальної Регресії | Поліноміальна Регресія
Лінійна Регресія з Python

bookПобудова Поліноміальної Регресії

Завантаження файлу

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

123456
import pandas as pd file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/poly.csv' df = pd.read_csv(file_link) print(df.head(5))
copy

Отже, тут маємо одну ознаку та цільову змінну. Далі побудуємо діаграму розсіювання, щоб зрозуміти взаємозв'язок між ознакою та ціллю:

123456789
import pandas as pd import matplotlib.pyplot as plt file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/poly.csv' df = pd.read_csv(file_link) X = df['Feature'] y = df['Target'] plt.scatter(X,y) plt.show()
copy

Важко уявити, що пряма лінія добре апроксимує ці дані, тому поліноміальна регресія буде значно кращим вибором.

Побудова матриці X̃

Ми знову використаємо клас OLS. Однак нам потрібно створити матрицю . Це робиться вручну шляхом додавання стовпця квадрату 'Feature' до DataFrame наступним чином:

df['Feature_squared'] = df['Feature'] ** 2

Але якщо потрібно побудувати поліноміальну регресію високого ступеня, доведеться додавати багато подібних стовпців. На щастя, Scikit-Learn надає спосіб зробити це простіше за допомогою класу PolynomialFeatures.

fit_transform(X) очікує, що X буде або двовимірним масивом, або pandas DataFrame. Якщо ваш X — це одномірний numpy масив, метод reshape(-1,1) перетворить його на двовимірний масив із тим самим вмістом:

X = X.reshape(-1,1)

Якщо ваш X — це стовпець із DataFrame, ви можете використати X = df[['col1']], щоб отримати DataFrame замість pandas Series, яка не підходить для fit_transform():

X = df['Feature']   # X is a pandas Series
X = df[['Feature']]  # X is a pandas DataFrame

Щоб побудувати для поліноміальної регресії ступеня n, використовується:

from sklearn.preprocessing import PolynomialFeatures # Import the class
poly = PolynomialFeatures(n)  # Initialize a PolynomialFeatures object
X_tilde = poly.fit_transform(X)
Note
Примітка

Клас PolynomialFeatures також додає стовпець з 1, тому немає потреби використовувати sm.add_constant().

Побудова поліноміальної регресії та здійснення прогнозів

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

y = df['Target']
# Prepare X_tilde
X = df[['Feature']]
X_tilde = PolynomialFeatures(n).fit_transform(X)
# Initialize the OLS object and train it
regression_model = sm.OLS(y, X_tilde).fit()

Для прогнозування нових значень також потрібно трансформувати X_new за допомогою PolynomialFeatures.

X_new_tilde = PolynomialFeatures(n).fit_transform(X_new)
y_pred = regression_model.predict(X_new_tilde)

Наступний виконуваний приклад демонструє повний процес побудови поліноміальної регресії. X_new тут — це одновимірний масив точок у діапазоні від -0.1 до 1.5. Вони потрібні для візуалізації. Оскільки це одновимірний масив, перед використанням у класі PolynomialFeatures слід застосувати метод reshape(-1,1).

12345678910111213141516171819
import pandas as pd import numpy as np import matplotlib.pyplot as plt import statsmodels.api as sm from sklearn.preprocessing import PolynomialFeatures # Import PolynomialFeatures class file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/poly.csv' df = pd.read_csv(file_link) n = 2 # A degree of the polynomial regression X = df[['Feature']] # Assign X as a DataFrame y = df['Target'] # Assign y X_tilde = PolynomialFeatures(n).fit_transform(X) # Get X_tilde regression_model = sm.OLS(y, X_tilde).fit() # Initialize and train the model X_new = np.linspace(-0.1, 1.5, 80).reshape(-1,1) # 2-d array of new feature values X_new_tilde = PolynomialFeatures(n).fit_transform(X_new) # Transform X_new for predict() method y_pred = regression_model.predict(X_new_tilde) plt.scatter(X, y) # Build a scatterplot plt.plot(X_new, y_pred) # Build a Polynomial Regression graph plt.show()
copy

Можна змінювати значення n у восьмому рядку. Ви побачите, як змінюється графік залежно від ступеня поліноміальної регресії. Якщо звернути увагу, можна помітити, наскільки відрізняються передбачення для значень ознаки менших за 0 або більших за 1.4. Це буде розглянуто у наступному розділі.

question mark

Розгляньте наступний код. У якому випадку цей код виконається без помилок?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 3

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

bookПобудова Поліноміальної Регресії

Завантаження файлу

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

123456
import pandas as pd file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/poly.csv' df = pd.read_csv(file_link) print(df.head(5))
copy

Отже, тут маємо одну ознаку та цільову змінну. Далі побудуємо діаграму розсіювання, щоб зрозуміти взаємозв'язок між ознакою та ціллю:

123456789
import pandas as pd import matplotlib.pyplot as plt file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/poly.csv' df = pd.read_csv(file_link) X = df['Feature'] y = df['Target'] plt.scatter(X,y) plt.show()
copy

Важко уявити, що пряма лінія добре апроксимує ці дані, тому поліноміальна регресія буде значно кращим вибором.

Побудова матриці X̃

Ми знову використаємо клас OLS. Однак нам потрібно створити матрицю . Це робиться вручну шляхом додавання стовпця квадрату 'Feature' до DataFrame наступним чином:

df['Feature_squared'] = df['Feature'] ** 2

Але якщо потрібно побудувати поліноміальну регресію високого ступеня, доведеться додавати багато подібних стовпців. На щастя, Scikit-Learn надає спосіб зробити це простіше за допомогою класу PolynomialFeatures.

fit_transform(X) очікує, що X буде або двовимірним масивом, або pandas DataFrame. Якщо ваш X — це одномірний numpy масив, метод reshape(-1,1) перетворить його на двовимірний масив із тим самим вмістом:

X = X.reshape(-1,1)

Якщо ваш X — це стовпець із DataFrame, ви можете використати X = df[['col1']], щоб отримати DataFrame замість pandas Series, яка не підходить для fit_transform():

X = df['Feature']   # X is a pandas Series
X = df[['Feature']]  # X is a pandas DataFrame

Щоб побудувати для поліноміальної регресії ступеня n, використовується:

from sklearn.preprocessing import PolynomialFeatures # Import the class
poly = PolynomialFeatures(n)  # Initialize a PolynomialFeatures object
X_tilde = poly.fit_transform(X)
Note
Примітка

Клас PolynomialFeatures також додає стовпець з 1, тому немає потреби використовувати sm.add_constant().

Побудова поліноміальної регресії та здійснення прогнозів

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

y = df['Target']
# Prepare X_tilde
X = df[['Feature']]
X_tilde = PolynomialFeatures(n).fit_transform(X)
# Initialize the OLS object and train it
regression_model = sm.OLS(y, X_tilde).fit()

Для прогнозування нових значень також потрібно трансформувати X_new за допомогою PolynomialFeatures.

X_new_tilde = PolynomialFeatures(n).fit_transform(X_new)
y_pred = regression_model.predict(X_new_tilde)

Наступний виконуваний приклад демонструє повний процес побудови поліноміальної регресії. X_new тут — це одновимірний масив точок у діапазоні від -0.1 до 1.5. Вони потрібні для візуалізації. Оскільки це одновимірний масив, перед використанням у класі PolynomialFeatures слід застосувати метод reshape(-1,1).

12345678910111213141516171819
import pandas as pd import numpy as np import matplotlib.pyplot as plt import statsmodels.api as sm from sklearn.preprocessing import PolynomialFeatures # Import PolynomialFeatures class file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/poly.csv' df = pd.read_csv(file_link) n = 2 # A degree of the polynomial regression X = df[['Feature']] # Assign X as a DataFrame y = df['Target'] # Assign y X_tilde = PolynomialFeatures(n).fit_transform(X) # Get X_tilde regression_model = sm.OLS(y, X_tilde).fit() # Initialize and train the model X_new = np.linspace(-0.1, 1.5, 80).reshape(-1,1) # 2-d array of new feature values X_new_tilde = PolynomialFeatures(n).fit_transform(X_new) # Transform X_new for predict() method y_pred = regression_model.predict(X_new_tilde) plt.scatter(X, y) # Build a scatterplot plt.plot(X_new, y_pred) # Build a Polynomial Regression graph plt.show()
copy

Можна змінювати значення n у восьмому рядку. Ви побачите, як змінюється графік залежно від ступеня поліноміальної регресії. Якщо звернути увагу, можна помітити, наскільки відрізняються передбачення для значень ознаки менших за 0 або більших за 1.4. Це буде розглянуто у наступному розділі.

question mark

Розгляньте наступний код. У якому випадку цей код виконається без помилок?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 3
some-alt