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