Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы по ОМО 2025 / Baraeva_Elizaveta_lb3.doc
Скачиваний:
0
Добавлен:
09.09.2026
Размер:
571 Кб
Скачать
☆
    1. Проведите линейную регрессию используя LinearRegression. Получите коэффициенты регрессии и объясните полученные результаты.

Для начала импортируем из библиотеки sklearn.linear_model LinearRegression. Далее обучим тренировочную выборку на данной модели с помощью метода fit, а затем выведем коэффициенты регрессии. Реализация представлена в Листинге 1.3.1. Результат представлен в Листинге 1.3.2.

Листинг 1.3.1 – Реализация получения коэффициентов линейной регрессии

from sklearn.linear_model import LinearRegression

lin_reg = LinearRegression()

lin_reg.fit(X_train, y_train)

coef = pd.Series(lin_reg.coef_, index=X.columns)

print(coef, lin_reg.intercept_)

Листинг 1.3.2 – Коэффициенты линейной регрессии

x1 42.657299

x2 27.311807

dtype: float64 0.2733245285895227

Оба предиката усиляют значения отклика. Сильнее всего влияет на отклик x1, он почти в 1,5 раза больше, чем x2. Свободный член близок к нулю что говорит о том, что при нулевых значениях предикатов модель предсказывает значение близкое к нулю. Таким образом, при увеличении значений предикатов значение отклика будет увеличиваться.

    1. Для обучающей и тестовой выборки рассчитайте коэффициент детерминации, MAPE, MAE. Объясните полученные значений метрик. Сравните метрики для обучающей и тестовой выборки, сделайте выводы о качестве обобщения полученной модели.

Для начала импортируем необходимые функции из библиотеки sklearn.metrics: r2_score для расчета коэффициента детерминации, mean_absolute_error для расчета MAE и mean_absolute_percentage_error для расчета MAPE. Далее предскажем модель на обучающей и тестовой выборках. Затем рассчитаем и выведем значения коэффициентов для каждой выборки. Реализация представлена в Листинге 1.4.1. Результат представлен в Листинге 1.4.2.

Листинг 1.4.1 – Расчет коэффициента детерминации, MAPE и MAE

from sklearn.metrics import r2_score

from sklearn.metrics import mean_absolute_error

from sklearn.metrics import mean_absolute_percentage_error

y_train_pred = lin_reg.predict(X_train)

y_test_pred = lin_reg.predict(X_test)

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)}")

Листинг 1.4.2 – Полученные коэффициенты

R² для train: 0.9949415205492481

R² для test: 0.9944824991438895

MAE для train: 2.8862867442022617

MAE для test: 3.1335466444942948

MAPE для train: 0.3060835607107315

MAPE для test: 0.198247082364209

Полученные результаты показывают, что модель линейной регрессии точна на обеих выборках. Коэффициент детерминации для обучающей выборки составляет 0.9949, а для тестовой выборки – 0.9945. Это говорит о высоком качестве обобщения и сохранении точности модели на новых данных. MAE на обучающей выборке равна 2.8863, а на тестовой – 3.1335, что указывает на небольшую ошибку в предсказаниях и их почти одинаковый уровень на обеих выборках. MAPE для обучающей выборки составляет 30.61%, а на тестовой выборке – 19.82%. Ошибка на тестовой выборке существенно ниже обучающей. Возможно, в тестовой выборке преобладают более крупные значения y. В итоге, можно сказать, что модель не переобучена и хорошо обобщается.

  1. Для модели, которая дала лучшие результаты, постройте диаграмму рассеяния между предикторами и откликом. На диаграмме изобразите какое значение должно быть, и какое предсказывается. Визуально оцените качестве построенного регрессора.

Для каждого признака диаграммы строились одинаково. Сначала с помощью plt.scatter синим цветом отображалась обучающая выборка, красным цветом – тестовая, черными крестами – предсказанная. Далее добавлялся заголовок, подписи осей, легенда и сетка. В конце диаграмма выводилась. Реализация представлена в Листинге 1.7.1. Диаграммы изображены на Рисунке 1.7.2 и Рисунке 1.7.3.

Листинг 1.7.1 – Реализация построения диаграмм рассеяния

plt.figure(figsize=(10,6))

plt.scatter(X_train['x1'], y_train, c = 'b', marker = '.', s=100, label='train')

plt.scatter(X_test['x1'], y_test, c = 'r', marker = '.', s=100, label='test')

plt.scatter(X_test['x1'], y_test_pred, c = 'black', marker = 'x', s=50, label='test_pred')

plt.tight_layout()

plt.title("Диаграмма рассеяния для x1")

plt.xlabel("x1")

plt.ylabel("y")

plt.legend()

plt.grid()

plt.show()

plt.figure(figsize=(10,6))

plt.scatter(X_train['x2'], y_train, c = 'b', marker = '.', s=100, label='train')

plt.scatter(X_test['x2'], y_test, c = 'r', marker = '.', s=100, label='test')

plt.scatter(X_test['x2'], y_test_pred, c = 'black', marker = 'x', s=50, label='test_pred')

plt.tight_layout()

plt.title("Диаграмма рассеяния для x2")

plt.xlabel("x2")

plt.ylabel("y")

plt.legend()

plt.grid()

plt.show()

Рисунок 1.7.2 – Диаграмма рассеяния признака x1

Рисунок 1.7.3 – Диаграмма рассеяния признака x2

Анализ диаграмм показывает хорошее качество модели, так как предсказанные значения близки с реальными.

Соседние файлы в папке Лабы по ОМО 2025