Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Прогноз по регрессии — процесс предсказания непрерывного числового значения на основе входных признаков. Это фундаментальная задача в машинном обучении, с множеством практических применений.
Общий процесс
Прогнозирование регрессии состоит из нескольких этапов:
- Подготовка данных: нормализация, обработка пропусков
- Обучение модели: подбор параметров на тренировочном наборе
- Валидация: оценка качества на тестовом наборе
- Получение предсказаний: применение обученной модели к новым данным
Типы регрессии
Линейная регрессия
Предполагает линейную зависимость между признаками и целевой переменной:
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler
# Нормализация данных
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# Обучение
model = LinearRegression()
model.fit(X_train_scaled, y_train)
# Предсказание
y_pred = model.predict(X_test_scaled)
# Интерпретация коэффициентов
for i, coef in enumerate(model.coef_):
print(f"Признак {i}: {coef:.4f}")
Полиномиальная регрессия
Когда связь нелинейная, используются полиномиальные признаки:
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(X_train)
model = LinearRegression()
model.fit(X_poly, y_train)
X_test_poly = poly.transform(X_test)
y_pred = model.predict(X_test_poly)
Регуляризованные методы
Для предотвращения переобучения часто используются Ridge и Lasso:
from sklearn.linear_model import Ridge, Lasso
# Ridge (L2-регуляризация)
ridge = Ridge(alpha=1.0)
ridge.fit(X_train_scaled, y_train)
y_pred_ridge = ridge.predict(X_test_scaled)
# Lasso (L1-регуляризация)
lasso = Lasso(alpha=0.1)
lasso.fit(X_train_scaled, y_train)
y_pred_lasso = lasso.predict(X_test_scaled)
Продвинутые методы
Gradient Boosting для регрессии
Особенно эффективен для сложных нелинейных зависимостей:
from sklearn.ensemble import GradientBoostingRegressor
from xgboost import XGBRegressor
# XGBoost часто показывает лучшие результаты
model = XGBRegressor(
n_estimators=100,
learning_rate=0.1,
max_depth=5,
random_state=42,
eval_metric="rmse"
)
model.fit(X_train, y_train, eval_set=[(X_test, y_test)], verbose=10)
y_pred = model.predict(X_test)
Метрики оценки
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
import numpy as np
# MSE / RMSE
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
# MAE (более робустна к выбросам)
mae = mean_absolute_error(y_test, y_pred)
# R² (доля объясненной дисперсии)
r2 = r2_score(y_test, y_pred)
print(f"RMSE: {rmse:.4f}")
print(f"MAE: {mae:.4f}")
print(f"R²: {r2:.4f}")
Предсказание с доверительными интервалами
Для практических приложений важны интервалы неопределённости:
from sklearn.ensemble import GradientBoostingRegressor
# Используем квантильную регрессию
model_lower = GradientBoostingRegressor(loss="quantile", alpha=0.05)
model_mean = GradientBoostingRegressor(loss="squared_error")
model_upper = GradientBoostingRegressor(loss="quantile", alpha=0.95)
model_lower.fit(X_train, y_train)
model_mean.fit(X_train, y_train)
model_upper.fit(X_train, y_train)
y_pred_lower = model_lower.predict(X_test)
y_pred_mean = model_mean.predict(X_test)
y_pred_upper = model_upper.predict(X_test)
print(f"Прогноз: {y_pred_mean[0]:.2f}")
print(f"Интервал: [{y_pred_lower[0]:.2f}, {y_pred_upper[0]:.2f}]")
Практические советы
- Нормализуйте признаки перед использованием линейных моделей
- Выбирайте метрику в зависимости от задачи (MAE для интерпретируемости, RMSE чувствительна к выбросам)
- Кросс-валидация необходима для надёжной оценки
- Анализируйте остатки (residuals) для диагностики проблем
- Feature engineering часто более эффективен, чем усложнение модели
Выбор метода прогнозирования зависит от характера данных, требований к точности и интерпретируемости, а также наличия времени на обучение и инференс.