IIS_2023_1/arutunyan_dmitry_lab_1/README.md

93 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Лабораторная работа 1. Вариант 4.
### Задание
Построить графики, отобразить
качество моделей, объяснить полученные результаты.
Данные: `make_moons (noise=0.3, random_state=rs)`
Модели:
- Линейная регресся
- Полиномиальная регрессия (со степенью 4)
- Гребневая полиномиальная регресся (со степенью 4, alpha = 1.0)
### Как запустить
Для запуска программы необходимо с помощью командной строки в корневой директории файлов прокета прописать:
```
python main.py
```
После этого в папке static сгенерируются 4 графика, по которым оценивается результат выполнения программы.
### Используемые технологии
- Библиотека `pyplot`, используемая для построения графиков.
- Библиотека `sklearn` - большой набор функционала для анализа данных. Из неё были использованы инструменты:
- `make_moons` - генератор случайных структурированных данных
- `train_test_split` - разделитель данных на обучающиую и тестовую выборки
- `LinearRegression` - инструмент работы с моделью "Линейная регрессия"
- `Ridge` - инструмент работы с моделью "Гребневая регрессия"
- `PolynomialFeatures` - инструмент работы с моделью "Полиномиальная регрессия"
- `metrics` - набор инструменов для оценки моделей
- Библиотека `numpy`, используемая для обработки массивов данных и вычислений
### Описание работы
Программа генерирует данные для обучения и тестирования моделей, стандартизирует данные и разделяет их на обучающую и тестовую выборки.
```python
X, y = make_moons(noise=0.3, random_state=None)
X = StandardScaler().fit_transform(X)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.4, random_state=42)
```
После чего, на данных `X_train` и `y_train` производится обучение моделей, а на данных `X_test` и `y_test` - оценка их качества.
Поскольку все модели в задании регрессионные, результаты работы будем оценивать через решение задачи предсказания. Это позволит нам использовать для оценки только `y` данные, что облегчит построение графиков.
Оценка качества моделей будет производиться по двум критериям - среднеквадратическому отклонению `mid_square` от истинного результата и коэфициенту детерминации `det_kp`. Чем среднеквадратическая ошибка меньше и чем коэфициент детерминации больше, тем лучше модель показала себя на данной выборке.
```python
mid_square = np.round(np.sqrt(metrics.mean_squared_error(y_test, y_predict)), 3)
det_kp = np.round(metrics.r2_score(y_test, y_predict), 2)
```
Где `y_predict` - решение задачи предсказания. Для наглядности, оценочные параметры округлим с помощью функции `round` до 3х и 2х знаков после запятой.
#### Линейная регрессия
Для создания модели линейной регрессии воспользуемся объектом `LinearRegression()`, обучим модель и заставим её предсказать значения `y` на тестовой выборке `x_text`.
```python
linear = LinearRegression()
linear.fit(X_train, y_train)
y_predict = linear.predict(X_test)
```
Построим график для оценки результатов:
![](1.png "")
#### Полиномиальная регрессия
Линейная регрессия является разновидностью полиномиальной регрессии со степенью ведущего члена равной 1. Чтобы построить модель полиномиальной регрессии со степенью 4 необходимо к данным модели линейной регрессии добавить 3 недостающих члена, возведённых в соответствующие степени 2, 3 и 4.
```python
poly = PolynomialFeatures(degree=4, include_bias=False)
x_poly_train = poly.fit_transform(X_train)
x_poly_test = poly.fit_transform(X_test)
```
Где `degree` - старшая степень полинома, `include_bias` - приведение свободного члена полинома к 0.
Обучение и прогнозирование модели далее производится также, как с моделью линейной регрессии, но уде на данных `x_poly_train` и `x_poly_test`
Построим график для оценки результатов:
![](2.png "")
#### Полиномиальная гребневая регрессия
Полиномиальная гребневая регрессия - это та же самая полиномиальная регрессия, но построенная с использованием усредняющего коэфициента. Для этого воспользуемся объёктом `Ridge()` и построим модель аналогично первым.
```python
ridge = Ridge(alpha=1.0)
ridge.fit(x_poly_train, y_train)
y_predict = ridge.predict(x_poly_test)
```
Построим график для оценки результатов:
![](3.png "")
Теперь построим график для сравнения работы всех моделей и выберем наилучшую:
![](result.png "")
### Вывод
Наиболее низкое среднеквадратичное отклонение и наиболее высокий коэфициент детерминации показала модель линейной регрессии, а это значит что она наилучшем образом подходит для работы со сгенерированным данными. В этом случае мы можем предположить что данные выборки находятся на небольшом расстоянии друг от друга и располагаются линейно.