- •Линейная регрессия:
- •Загрузите набор данных соответствующей цифре вашего варианта. Убедитесь, что загрузка прошла корректно.
- •Проведите линейную регрессию используя LinearRegression. Получите коэффициенты регрессии и объясните полученные результаты.
- •Нелинейная регрессия:
- •Загрузите набор данных соответствующей букве вашего варианта. Убедитесь, что загрузка прошла корректно.
- •Используя train_test_split разбейте выборку на обучающую и тестовую. Проверьте, что тестовая выборка соответствует обучающей.
- •Проверьте работу стандартной линейной регрессии на загруженных данных. Постройте диаграмму рассеяния данных с выделенной полученной линией регрессии. Объясните полученный результат.
- •Для выбранной степени полинома, рассчитайте и проанализируйте полученные коэффициенты. Рассчитай значение метрик коэффициент детерминации, mape, mae.
- •Для выбранной степени полинома, постройте диаграмму рассеяния данных с линией, соответствующей полученному полиному. Сделайте выводы о качестве аппроксимации.
МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В. И. Ульянова (Ленина)
Кафедра МО ЭВМ
отчет
по лабораторной работе №3
по дисциплине «Основы машинного обучения»
Тема: Регрессия
Студентка гр. 2383 |
|
Бараева Е. Н. |
Преподаватель |
|
Жангиров Т. Р. |
Санкт-Петербург
2025
Цель работы.
Изучить методы линейной и полиномиальной регрессии, их применение для аппроксимации данных, анализа качества моделей с помощью метрик и визуализации. Развить навыки оценки качества моделей, выявления переобучения и выбора оптимальных параметров.
Задание.
Вариант 1B
Линейная регрессия
Загрузите набор данных соответствующей цифре вашего варианта. Убедитесь, что загрузка прошла корректно.
Используя train_test_split разбейте выборку на обучающую и тестовую. Проверьте, что тестовая выборка соответствует обучающей. Можно использовать диаграммы рассеяния/нормированные гистограммы/boxplot/violin plot.
Проведите линейную регрессию используя LinearRegression. Получите коэффициенты регрессии и объясните полученные результаты.
Для обучающей и тестовой выборки рассчитайте коэффициент детерминации, MAPE, MAE. Объясните полученные значений метрик. Сравните метрики для обучающей и тестовой выборки, сделайте выводы о качестве обобщения полученной модели.
Для модели, которая дала лучшие результаты, постройте диаграмму рассеяния между предикторами и откликом. На диаграмме изобразите какое значение должно быть, и какое предсказывается. Визуально оцените качестве построенного регрессора.
Нелинейная регрессия.
Загрузите набор данных соответствующей букве вашего варианта. Убедитесь, что загрузка прошла корректно.
Используя train_test_split разбейте выборку на обучающую и тестовую. Проверьте, что тестовая выборка соответствует обучающей.
Проверьте работу стандартной линейной регрессии на загруженных данных. Постройте диаграмму рассеяния данных с выделенной полученной линией регрессии. Объясните полученный результат.
Конструируя полиномиальный признаки для разных степеней полинома найдите степень полинома наилучшим образом, аппроксимирующая данные. Постройте график зависимости коэффициента детерминации от степени полинома (на одном графике изобразите линии для обучающей и тестовой выборки отдельно). Сделайте вывод о том, при какой степени полинома модель начинает переобучаться.
Для выбранной степени полинома, рассчитайте и проанализируйте полученные коэффициенты. Рассчитай значение метрик коэффициент детерминации, MAPE, MAE.
Для выбранной степени полинома, постройте диаграмму рассеяния данных с линией, соответствующей полученному полиному. Сделайте выводы о качестве аппроксимации.
Выполнение работы.
Линейная регрессия:
Загрузите набор данных соответствующей цифре вашего варианта. Убедитесь, что загрузка прошла корректно.
Для загрузки наборов необходимо использовать метод read_csv из библиотеки Pandas. В метод передаем название файла. Вызвав метод head, можно проверить корректность загруженных данных (по умолчанию он возвращает 5 первых строк). Для этого выведем их. Реализация приведена в Листинге 1.1.1. Результат представлен в Таблице 1.1.2.
Листинг 1.1.1 – Загрузка данных из файла и вызов метода head
import pandas as pd lin_df = pd.read_csv("lab3_lin1.csv") print(lin_df.head()) |
Таблица 1.1.2 – Результат вывода первых пяти записей датафрейма lin_df
|
x1 |
x2 |
y |
0 |
-1.0286 |
0.5390 |
-27.4030 |
1 |
0.2604 |
-0.7965 |
-10.3875 |
2 |
0.4837 |
0.0785 |
20.4515 |
3 |
0.1300 |
1.1893 |
46.2490 |
4 |
-1.1136 |
0.7405 |
-25.3452 |
Используя train_test_split разбейте выборку на обучающую и тестовую. Проверьте, что тестовая выборка соответствует обучающей. Можно испльзовать диаграммы рассеяния/нормированные гистограммы/boxplot/violin plot.
Сначала импортируем необходимые библиотеки: train_test_split из sklearn.model_selection для разделения данных на обучающую и тестовую выборки, matplotlib.pyplot для базовой визуализации и seaborn также для визуализации графиков. Далее датафрейм разделяется на признаки X и целевую переменную y. Разделение данных на тестовую и обучающую выборки осуществляется с помощью функции train_test_split, где параметр test_size=0.3 указывает на то, что 30% данных будут выделены для тестовой выборки, а shuffle=True обеспечивает случайное перемешивание данных перед разделением. Затем для того, чтобы проверить, что тестовая выборка соответствует обучающей, будем использовать распределения признаков с использованием ядерной оценки плотности. Для двух признаков строится график KDE с помощью sns.kdeplot для обучающей и тестовой выборки, добавляется заголовок графика и легенда, после чего график отображается. Реализация приведена в Листинге 1.2.1. Графики изображены на Рисунке 1.2.2 и Рисунке 1.2.3.
Листинг 1.2.1 – Реализация разбиения выборки и построения KDE графиков
from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt import seaborn as sns
X = lin_df[['x1', 'x2']] y = lin_df['y'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, shuffle=True)
sns.kdeplot(X_train['x1'], label='train x1', fill=True) sns.kdeplot(X_test['x1'], label='test x1', fill=True) plt.title('Распределение x1') plt.legend() plt.show()
sns.kdeplot(X_train['x2'], label='train x2', fill=True) sns.kdeplot(X_test['x2'], label='test x2', fill=True) plt.title('Распределение x2') plt.legend() plt.show() |
Рисунок 1.2.2 – График распределения признака x1
Рисунок 1.2.3 – График распределения признака x2
