Побудова Поліноміальної Регресії
Завантаження файлу
Завантажуємо poly.csv та переглядаємо його:
1234import 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())
Далі візуалізуємо залежність:
12345import matplotlib.pyplot as plt X = df['Feature'] y = df['Target'] plt.scatter(X, y) plt.show()
Пряма лінія погано підходить, тому поліноміальна регресія є більш доречною.
Побудова матриці X̃
Щоб створити X̃, можна вручну додати квадратні ознаки:
df['Feature_squared'] = df['Feature'] ** 2
Але для вищих ступенів зручніше використовувати PolynomialFeatures. Для цього потрібна двовимірна структура:
from sklearn.preprocessing import PolynomialFeatures
X = df[['Feature']]
poly = PolynomialFeatures(n)
X_tilde = poly.fit_transform(X)
Вона також додає стовпець константи, тому sm.add_constant() не потрібен.
Якщо X є одномірним, перетворіть його:
X = X.reshape(-1, 1)
Побудова поліноміальної регресії
import statsmodels.api as sm
y = df['Target']
X = df[['Feature']]
X_tilde = PolynomialFeatures(n).fit_transform(X)
model = sm.OLS(y, X_tilde).fit()
Для прогнозування необхідно трансформувати нові дані таким самим чином:
X_new_tilde = PolynomialFeatures(n).fit_transform(X_new)
y_pred = model.predict(X_new_tilde)
Повний приклад
123456789101112131415161718import pandas as pd, numpy as np, matplotlib.pyplot as plt import statsmodels.api as sm from sklearn.preprocessing import PolynomialFeatures df = pd.read_csv(file_link) n = 2 X = df[['Feature']] y = df['Target'] X_tilde = PolynomialFeatures(n).fit_transform(X) model = sm.OLS(y, X_tilde).fit() X_new = np.linspace(-0.1, 1.5, 80).reshape(-1,1) X_new_tilde = PolynomialFeatures(n).fit_transform(X_new) y_pred = model.predict(X_new_tilde) plt.scatter(X, y) plt.plot(X_new, y_pred) plt.show()
Спробуйте різні значення n, щоб побачити, як змінюється крива та як поводяться передбачення поза початковим діапазоном ознаки — це підводить до наступного розділу.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
What does the `PolynomialFeatures` class do in this context?
How do I choose the best degree `n` for my polynomial regression?
Can you explain why a straight line fits poorly in this example?
Чудово!
Completion показник покращився до 5.26
Побудова Поліноміальної Регресії
Свайпніть щоб показати меню
Завантаження файлу
Завантажуємо poly.csv та переглядаємо його:
1234import 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())
Далі візуалізуємо залежність:
12345import matplotlib.pyplot as plt X = df['Feature'] y = df['Target'] plt.scatter(X, y) plt.show()
Пряма лінія погано підходить, тому поліноміальна регресія є більш доречною.
Побудова матриці X̃
Щоб створити X̃, можна вручну додати квадратні ознаки:
df['Feature_squared'] = df['Feature'] ** 2
Але для вищих ступенів зручніше використовувати PolynomialFeatures. Для цього потрібна двовимірна структура:
from sklearn.preprocessing import PolynomialFeatures
X = df[['Feature']]
poly = PolynomialFeatures(n)
X_tilde = poly.fit_transform(X)
Вона також додає стовпець константи, тому sm.add_constant() не потрібен.
Якщо X є одномірним, перетворіть його:
X = X.reshape(-1, 1)
Побудова поліноміальної регресії
import statsmodels.api as sm
y = df['Target']
X = df[['Feature']]
X_tilde = PolynomialFeatures(n).fit_transform(X)
model = sm.OLS(y, X_tilde).fit()
Для прогнозування необхідно трансформувати нові дані таким самим чином:
X_new_tilde = PolynomialFeatures(n).fit_transform(X_new)
y_pred = model.predict(X_new_tilde)
Повний приклад
123456789101112131415161718import pandas as pd, numpy as np, matplotlib.pyplot as plt import statsmodels.api as sm from sklearn.preprocessing import PolynomialFeatures df = pd.read_csv(file_link) n = 2 X = df[['Feature']] y = df['Target'] X_tilde = PolynomialFeatures(n).fit_transform(X) model = sm.OLS(y, X_tilde).fit() X_new = np.linspace(-0.1, 1.5, 80).reshape(-1,1) X_new_tilde = PolynomialFeatures(n).fit_transform(X_new) y_pred = model.predict(X_new_tilde) plt.scatter(X, y) plt.plot(X_new, y_pred) plt.show()
Спробуйте різні значення n, щоб побачити, як змінюється крива та як поводяться передбачення поза початковим діапазоном ознаки — це підводить до наступного розділу.
Дякуємо за ваш відгук!