Merge pull request 'mashkova_margarita_lab_1 ready' (#182) from mashkova_margarita_lab_1 into main
Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/182
This commit is contained in:
commit
5fa2de6b57
59
mashkova_margarita_lab_1/README.md
Normal file
59
mashkova_margarita_lab_1/README.md
Normal file
@ -0,0 +1,59 @@
|
||||
# Лабораторная работа №1
|
||||
## ПИбд-42 Машкова Маргарита (Вариант 19)
|
||||
## Задание
|
||||
Cгенерировать определенный тип данных и сравнить на нем 3 модели по варианту.
|
||||
Построить графики, отобразить качество моделей, объяснить полученные результаты.
|
||||
|
||||
### Данные:
|
||||
> make_moons (noise=0.3, random_state=rs)
|
||||
|
||||
### Модели:
|
||||
|
||||
> - Линейная регрессия
|
||||
> - Полиномиальная регрессия (со степенью 5)
|
||||
> - Гребневая полиномиальная регрессия (со степенью 5, alpha= 1.0)
|
||||
|
||||
## Запуск программы
|
||||
Для запуска программы необходимо запустить файл main.py
|
||||
|
||||
## Используемые технологии
|
||||
> **Язык программирования:** python
|
||||
>
|
||||
> **Библиотеки:**
|
||||
> - `matplotlib` - пакет для визуализации данных.
|
||||
> - `sklearn` - предоставляет широкий спектр инструментов для машинного обучения, статистики и анализа данных.
|
||||
## Описание работы программы
|
||||
|
||||
Изначально генерируются синтетические данные Х и у для проведения экспериментов при помощи функции `make_moons` с заданными параметрами.
|
||||
Функция `train_test_split` делит данные так, что тестовая выборка составляет 40% от исходного набора данных.
|
||||
Разделение происходит случайным образом (т.е. элементы берутся из исходной выборки не последовательно).
|
||||
После чего для каждой из заданных по варианту моделей выполняются следующие действия:
|
||||
1. Создание модели с заданными параметрами.
|
||||
2. Обучение модели на исходных данных.
|
||||
3. Предсказание модели на тестовых данных.
|
||||
4. Оценка качества модели по 3 метрикам:
|
||||
|
||||
* **Коэффициент детерминации**: метрика, которая измеряет, насколько хорошо модель соответствует данным.
|
||||
Принимает значения от 0 до 1, где 1 означает идеальное соответствие модели данным, а значения ближе к 0 указывают на то,
|
||||
что модель плохо объясняет вариацию в данных. Для вычисления коэффициента детерминации модели используется метод `score` библиотеки scikit-learn.
|
||||
|
||||
* **Средняя абсолютная ошибка (MAE):** Для вычисления данной метрики используется метод `mean_absolute_error` библиотеки scikit-learn.
|
||||
* **Средняя квадратичная ошибка (MSE):** Для вычисления данной метрики используется метод `mean_squared_error` библиотеки scikit-learn.
|
||||
|
||||
Последние 2 метрики измеряют разницу между предсказанными значениями модели и фактическими значениями.
|
||||
Меньшие значения MAE и MSE указывают на лучшую производительность модели.
|
||||
|
||||
Вычисленные значения метрик выводятся в консоль.
|
||||
|
||||
После чего строятся графики, отображающие работу моделей. На первом графике отображаются ожидаемые результаты предсказания,
|
||||
на остальных - предсказания моделей. Чем меньше прозрачных точек - тем лучше отработала модель.
|
||||
|
||||
## Тесты
|
||||
|
||||
![Вывод в консоли](console.png)
|
||||
|
||||
![Графики](plots.png)
|
||||
|
||||
**Вывод:** исходя из полученных результатов, схожую хорошую производительность имеют
|
||||
линейная регрессия и гребневая полиномиальная регрессия.
|
||||
Самую низкую производительность имеет полиномиальная регрессия.
|
BIN
mashkova_margarita_lab_1/console.png
Normal file
BIN
mashkova_margarita_lab_1/console.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 30 KiB |
85
mashkova_margarita_lab_1/main.py
Normal file
85
mashkova_margarita_lab_1/main.py
Normal file
@ -0,0 +1,85 @@
|
||||
from random import randrange
|
||||
from sklearn.datasets import make_moons
|
||||
from sklearn.model_selection import train_test_split
|
||||
from sklearn.linear_model import LinearRegression
|
||||
from sklearn.preprocessing import PolynomialFeatures
|
||||
from sklearn.pipeline import make_pipeline
|
||||
from sklearn.linear_model import Ridge
|
||||
from sklearn.metrics import mean_absolute_error, mean_squared_error
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
rs = randrange(42)
|
||||
|
||||
# Генерация данных
|
||||
X, y = make_moons(noise=0.3, random_state=rs)
|
||||
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.4, random_state=rs)
|
||||
|
||||
# Линейная регрессия
|
||||
linear = LinearRegression()
|
||||
# Обучение модели
|
||||
linear.fit(X_train, y_train)
|
||||
# Предсказание на тестовых данных
|
||||
y_pred_linear = linear.predict(X_test)
|
||||
# Оценка модели на тестовых данных (коэффициент детерминации)
|
||||
linear_score = linear.score(X_test, y_test)
|
||||
# Оценка модели на тестовых данных (cредняя абсолютная ошибка)
|
||||
linear_mae = mean_absolute_error(y_test, y_pred_linear)
|
||||
# Оценка модели на тестовых данных (cредняя квадратичная ошибка)
|
||||
linear_mse = mean_squared_error(y_test, y_pred_linear)
|
||||
|
||||
# Полиномиальная регрессия
|
||||
poly = make_pipeline(PolynomialFeatures(degree=5), LinearRegression())
|
||||
# Обучение модели
|
||||
poly.fit(X_train, y_train)
|
||||
# Предсказание на тестовых данных
|
||||
y_pred_poly = poly.predict(X_test)
|
||||
# Оценка модели на тестовых данных (коэффициент детерминации)
|
||||
poly_score = poly.score(X_test, y_test)
|
||||
# Оценка модели на тестовых данных (cредняя абсолютная ошибка)
|
||||
poly_mae = mean_absolute_error(y_test, y_pred_poly)
|
||||
# Оценка модели на тестовых данных (cредняя квадратичная ошибка)
|
||||
poly_mse = mean_squared_error(y_test, y_pred_poly)
|
||||
|
||||
# Гребневая полиномиальная регрессия
|
||||
ridge = make_pipeline(PolynomialFeatures(degree=5), Ridge(alpha=1.0))
|
||||
# Обучение модели
|
||||
ridge.fit(X_train, y_train)
|
||||
# Предсказание на тестовых данных
|
||||
y_pred_ridge = ridge.predict(X_test)
|
||||
# Оценка модели на тестовых данных (коэффициент детерминации)
|
||||
ridge_score = ridge.score(X_test, y_test)
|
||||
# Оценка модели на тестовых данных (cредняя абсолютная ошибка)
|
||||
ridge_mae = mean_absolute_error(y_test, y_pred_ridge)
|
||||
# Оценка модели на тестовых данных (cредняя квадратичная ошибка)
|
||||
ridge_mse = mean_squared_error(y_test, y_pred_ridge)
|
||||
|
||||
# Вывод оценки качества моделей в консоль
|
||||
print("Оценка качества предсказания моделей на тестовых данных:\n")
|
||||
|
||||
print("Линейная регрессия:")
|
||||
print("Коэффициент детерминации: %f" % linear_score)
|
||||
print("Средняя абсолютная ошибка: %f" % linear_mae)
|
||||
print("Средняя квадратичная ошибка: %f\n" % linear_mse)
|
||||
|
||||
print("Полиномиальная регрессия:")
|
||||
print("Коэффициент детерминации: %f" % poly_score)
|
||||
print("Средняя абсолютная ошибка: %f" % poly_mae)
|
||||
print("Средняя квадратичная ошибка: %f\n" % poly_mse)
|
||||
|
||||
print("Гребневая полиномиальная регрессия:")
|
||||
print("Коэффициент детерминации: %f" % ridge_score)
|
||||
print("Средняя абсолютная ошибка: %f" % ridge_mae)
|
||||
print("Средняя квадратичная ошибка: %f\n" % ridge_mse)
|
||||
|
||||
# Отображение графиков
|
||||
fig, axs = plt.subplots(1, 4, figsize=(15, 5))
|
||||
axs[0].set_title("Исходные тестовые данные")
|
||||
axs[0].scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap="bwr")
|
||||
axs[1].set_title("Линейная регрессия")
|
||||
axs[1].scatter(X_test[:, 0], X_test[:, 1], c=y_pred_linear, cmap="bwr")
|
||||
axs[2].set_title("Полиномиальная регрессия")
|
||||
axs[2].scatter(X_test[:, 0], X_test[:, 1], c=y_pred_poly, cmap="bwr")
|
||||
axs[3].set_title("Гребневая полиномиальная регрессия")
|
||||
axs[3].scatter(X_test[:, 0], X_test[:, 1], c=y_pred_ridge, cmap="bwr")
|
||||
plt.savefig('plots.png')
|
||||
plt.show()
|
BIN
mashkova_margarita_lab_1/plots.png
Normal file
BIN
mashkova_margarita_lab_1/plots.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 48 KiB |
Loading…
Reference in New Issue
Block a user