Побудова Поліноміальної Регресії
Завантаження файлу
У цьому розділі використовується файл з назвою poly.csv
, який спочатку завантажимо та переглянемо його вміст:
123456import 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))
Отже, тут маємо одну ознаку та цільову змінну. Далі побудуємо діаграму розсіювання, щоб зрозуміти взаємозв'язок між ознакою та ціллю:
123456789import 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()
Важко уявити, що пряма лінія добре апроксимує ці дані, тому поліноміальна регресія буде значно кращим вибором.
Побудова матриці X̃
Ми знову використаємо клас OLS
. Однак нам потрібно створити матрицю X̃. Це робиться вручну шляхом додавання стовпця квадрату '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
Щоб побудувати X̃ для поліноміальної регресії ступеня n
, використовуйте:
from sklearn.preprocessing import PolynomialFeatures # Import the class
poly = PolynomialFeatures(n) # Initialize a PolynomialFeatures object
X_tilde = poly.fit_transform(X)
Клас PolynomialFeatures
також додає стовпець із одиницями, тому немає потреби використовувати sm.add_constant()
.
Побудова поліноміальної регресії та здійснення прогнозів
Знаючи, як отримати X̃, ми готові побудувати поліноміальну регресію так само, як і попередні моделі:
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)
.
12345678910111213141516171819import 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()
Спробуйте змінити значення n
у восьмому рядку. Ви побачите, як змінюється графік залежно від ступеня поліноміальної регресії. Якщо звернете увагу, помітите, наскільки відрізняються передбачення для значень ознаки менших за 0 або більших за 1.4. Це буде темою наступного розділу.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Can you explain what the X̃ matrix represents in polynomial regression?
How does the PolynomialFeatures class work in practice?
What happens if I increase the degree n in the polynomial regression?
Awesome!
Completion rate improved to 5.26
Побудова Поліноміальної Регресії
Свайпніть щоб показати меню
Завантаження файлу
У цьому розділі використовується файл з назвою poly.csv
, який спочатку завантажимо та переглянемо його вміст:
123456import 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))
Отже, тут маємо одну ознаку та цільову змінну. Далі побудуємо діаграму розсіювання, щоб зрозуміти взаємозв'язок між ознакою та ціллю:
123456789import 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()
Важко уявити, що пряма лінія добре апроксимує ці дані, тому поліноміальна регресія буде значно кращим вибором.
Побудова матриці X̃
Ми знову використаємо клас OLS
. Однак нам потрібно створити матрицю X̃. Це робиться вручну шляхом додавання стовпця квадрату '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
Щоб побудувати X̃ для поліноміальної регресії ступеня n
, використовуйте:
from sklearn.preprocessing import PolynomialFeatures # Import the class
poly = PolynomialFeatures(n) # Initialize a PolynomialFeatures object
X_tilde = poly.fit_transform(X)
Клас PolynomialFeatures
також додає стовпець із одиницями, тому немає потреби використовувати sm.add_constant()
.
Побудова поліноміальної регресії та здійснення прогнозів
Знаючи, як отримати X̃, ми готові побудувати поліноміальну регресію так само, як і попередні моделі:
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)
.
12345678910111213141516171819import 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()
Спробуйте змінити значення n
у восьмому рядку. Ви побачите, як змінюється графік залежно від ступеня поліноміальної регресії. Якщо звернете увагу, помітите, наскільки відрізняються передбачення для значень ознаки менших за 0 або більших за 1.4. Це буде темою наступного розділу.
Дякуємо за ваш відгук!