Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Побудова Поліноміальної Регресії | Секція
Practice
Projects
Quizzes & Challenges
Вікторини
Challenges
/
Основи Контрольованого Навчання

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

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

Завантажуємо poly.csv та переглядаємо його:

1234
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())
copy

Далі візуалізуємо залежність:

12345
import matplotlib.pyplot as plt X = df['Feature'] y = df['Target'] plt.scatter(X, y) plt.show()
copy

Пряма лінія погано підходить, тому поліноміальна регресія є більш доречною.

Ось переписаний розділ, адаптований для 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)

Повний приклад

123456789101112131415161718192021222324252627282930
import 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()
copy

Спробуйте змінити значення degree (n), щоб побачити, як змінюється крива. Ви помітите, що більші ступені краще підлаштовуються під навчальні дані, але можуть поводитися непередбачувано поза їх межами — це підводить до наступного розділу про перенавчання.

question mark

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

Select the correct answer

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

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

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

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

Запитати АІ

expand

Запитати АІ

ChatGPT

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

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

Свайпніть щоб показати меню

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

Завантажуємо poly.csv та переглядаємо його:

1234
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())
copy

Далі візуалізуємо залежність:

12345
import matplotlib.pyplot as plt X = df['Feature'] y = df['Target'] plt.scatter(X, y) plt.show()
copy

Пряма лінія погано підходить, тому поліноміальна регресія є більш доречною.

Ось переписаний розділ, адаптований для 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)

Повний приклад

123456789101112131415161718192021222324252627282930
import 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()
copy

Спробуйте змінити значення degree (n), щоб побачити, як змінюється крива. Ви помітите, що більші ступені краще підлаштовуються під навчальні дані, але можуть поводитися непередбачувано поза їх межами — це підводить до наступного розділу про перенавчання.

question mark

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

Select the correct answer

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

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

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

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