93 lines
7.3 KiB
Markdown
93 lines
7.3 KiB
Markdown
|
||
## Лабораторная работа 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 "")
|
||
|
||
### Вывод
|
||
Наиболее низкое среднеквадратичное отклонение и наиболее высокий коэфициент детерминации показала модель линейной регрессии, а это значит что она наилучшем образом подходит для работы со сгенерированным данными. В этом случае мы можем предположить что данные выборки находятся на небольшом расстоянии друг от друга и располагаются линейно. |