Побудова Поліноміальної Регресії
Завантаження файлу
Завантажуємо 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, щоб побачити, як змінюється крива та як поводяться передбачення поза початковим діапазоном ознаки — це підводить до наступного розділу.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 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, щоб побачити, як змінюється крива та як поводяться передбачення поза початковим діапазоном ознаки — це підводить до наступного розділу.
Дякуємо за ваш відгук!