Побудова Поліноміальної Регресії
Свайпніть щоб показати меню
Завантаження файлу
Завантажуємо 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()
Пряма лінія погано підходить, тому поліноміальна регресія є більш доречною.
Ось переписаний розділ, адаптований для Scikit-learn.
Побудова трансформованої матриці
Щоб створити поліноміальні ознаки, можна додати квадрат ознаки вручну:
df['Feature_squared'] = df['Feature'] ** 2
Але для вищих ступенів клас PolynomialFeatures з sklearn.preprocessing значно простіший та ефективніший. Він вимагає 2-вимірної структури (DataFrame або 2-D масив):
from sklearn.preprocessing import PolynomialFeatures
X = df[['Feature']]
# Create the transformer
poly = PolynomialFeatures(degree=2, include_bias=False)
# Transform the data
X_poly = poly.fit_transform(X)
Параметри
Клас PolynomialFeatures має кілька важливих параметрів:
degree(за замовчуванням=2): ступінь поліноміальних ознак. Наприклад, якщоdegree=3, генерує .interaction_only(за замовчуванням=False): якщоTrue, створюються лише взаємодіючі ознаки (наприклад, ), уникаючи таких членів, як .include_bias(за замовчуванням=True): якщоTrue, додається стовпець одиниць (стовпець зсуву).
Важливо: оскільки LinearRegression автоматично обчислює вільний член, зазвичай встановлюємо include_bias=False, щоб уникнути надмірності.
Побудова поліноміальної регресії
Після отримання трансформованих ознак (X_poly) можна використовувати стандартну модель LinearRegression.
from sklearn.linear_model import LinearRegression
y = df['Target']
# Initialize and train the model
model = LinearRegression()
model.fit(X_poly, y)
Для прогнозування необхідно трансформувати нові дані за допомогою того ж самого екземпляра трансформатора перед передачею їх у модель:
# Transform new data
X_new_poly = poly.transform(X_new)
# Predict
y_pred = model.predict(X_new_poly)
Повний приклад
123456789101112131415161718192021222324252627282930import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures # Load data df = pd.read_csv(file_link) X = df[['Feature']] y = df['Target'] # 1. Create Polynomial Features n = 2 poly = PolynomialFeatures(degree=n, include_bias=False) X_poly = poly.fit_transform(X) # 2. Train Linear Regression model = LinearRegression() model.fit(X_poly, y) # 3. Predict on new data X_new = np.linspace(-0.1, 1.5, 80).reshape(-1, 1) X_new_poly = poly.transform(X_new) y_pred = model.predict(X_new_poly) # Visualization plt.scatter(X, y, label='Data') plt.plot(X_new, y_pred, color='red', label=f'Degree {n}') plt.legend() plt.show()
Спробуйте змінити значення degree (n), щоб побачити, як змінюється крива. Ви помітите, що більші ступені краще підлаштовуються під навчальні дані, але можуть поводитися непередбачувано поза їх межами — це підводить до наступного розділу про перенавчання.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат