- •Линейная регрессия:
- •Загрузите набор данных соответствующей цифре вашего варианта. Убедитесь, что загрузка прошла корректно.
- •Проведите линейную регрессию используя LinearRegression. Получите коэффициенты регрессии и объясните полученные результаты.
- •Нелинейная регрессия:
- •Загрузите набор данных соответствующей букве вашего варианта. Убедитесь, что загрузка прошла корректно.
- •Используя train_test_split разбейте выборку на обучающую и тестовую. Проверьте, что тестовая выборка соответствует обучающей.
- •Проверьте работу стандартной линейной регрессии на загруженных данных. Постройте диаграмму рассеяния данных с выделенной полученной линией регрессии. Объясните полученный результат.
- •Для выбранной степени полинома, рассчитайте и проанализируйте полученные коэффициенты. Рассчитай значение метрик коэффициент детерминации, mape, mae.
- •Для выбранной степени полинома, постройте диаграмму рассеяния данных с линией, соответствующей полученному полиному. Сделайте выводы о качестве аппроксимации.
Для выбранной степени полинома, рассчитайте и проанализируйте полученные коэффициенты. Рассчитай значение метрик коэффициент детерминации, mape, mae.
Сначала задаются полиномиальные характеристики с 5 степенью. Обучающие данные преобразуются с помощью fit_transform, а тестовые данные обрабатываются через transform для обеспечения согласованности преобразований. После подготовки данных инициализируется и обучается модель линейной регрессии на преобразованных полиномиальных признаках. Затем модель используется для предсказания значений как на обучающей, так и на тестовой выборках. Затем в цикле выводятся коэффициенты полинома, а после рассчитываются и выводятся метрики для оценки качества модели. Реализация представлена в Листинге 2.5.1. Результат представлен в Листинге 2.5.2.
Листинг 2.5.1 – Расчет коэффициента детерминации, MAPE и MAE
poly = PolynomialFeatures(degree=5) X_train_poly = poly.fit_transform(X_train) X_test_poly = poly.transform(pd.DataFrame(X_test))
model = LinearRegression() model.fit(X_train_poly, y_train)
y_train_pred = model.predict(X_train_poly) y_test_pred = model.predict(X_test_poly)
print(f"β0 (свободный член): {model.intercept_}") for i, coef in enumerate(model.coef_[1:], start=1): print(f"β{i} (коэффициент при x^{i}): {coef}")
print() print(f"R² для train: {r2_score(y_train, y_train_pred)}") print(f"R² для test: {r2_score(y_test, y_test_pred)}") print(f"MAE для train: {mean_absolute_error(y_train, y_train_pred)}") print(f"MAE для test: {mean_absolute_error(y_test, y_test_pred)}") print(f"MAPE для train: {mean_absolute_percentage_error(y_train, y_train_pred)}") print(f"MAPE для test: {mean_absolute_percentage_error(y_test, y_test_pred)}") |
Листинг 2.5.2 – Полученные коэффициенты и метрики
β0 (свободный член): -0.07321765352322251 β1 (коэффициент при x^1): 3.799791152281545 β2 (коэффициент при x^2): 2.1573625305899737 β3 (коэффициент при x^3): -20.187401474200307 β4 (коэффициент при x^4): -0.05466661402971962 β5 (коэффициент при x^5): 6.021059645575535
R² для train: 0.9373908237264515 R² для test: 0.9284536300139977 MAE для train: 1.995908672933214 MAE для test: 2.0984194095739426 MAPE для train: 1.0384201669880722 MAPE для test: 0.6907529769021618 |
Данная модель показывает высокую точность аппроксимации данных: коэффициент детерминации составляет 0.9374 для обучающей и 0.9285 для тестовой выборки. Это говорит о хорошей способности модели объяснять вариацию и делать точные предсказания. Однако значения ошибок MAE 1.9959 для обучающей и 2.0984 для тестовой, MAPE 103.84% для обучающей и 69.08% для тестовой указывают на наличие небольших, но заметных отклонений, что может свидетельствовать о начальных признаках переобучения. У коэффициентов регрессии наибольший вклад в предсказания вносят признаки с более высокими абсолютными значениями. Важны 3 (-20.1874) и 5 (6.0211) степени. Свободный член (-0.0732) задает базовый уровень модели. Высокие значения коэффициентов при старших степенях могут быть признаком того, что модель начинает подстраиваться под обучающие данные слишком точно. Это усиливает риск переобучения, особенно при дальнейшем увеличении степени полинома.
