# Лабораторная работа №1. Вариант 4.

## Задание

Сгенерируйте определенный тип данных и
сравните на нем 3 модели (по варианту). Постройте графики, отобразите качество моделей, объясните полученные результаты.

## Содержание
- [Лабораторная работа №1. Вариант 4.](#лабораторная-работа-1-вариант-4)
  - [Задание](#задание)
  - [Содержание](#содержание)
  - [Введение](#введение)
  - [Зависимости](#зависимости)
  - [Запуск приложения](#запуск-приложения)
  - [Описание кода](#описание-кода)
    - [Создание данных](#создание-данных)
    - [Создание моделей](#создание-моделей)
    - [Обучение и оценка моделей](#обучение-и-оценка-моделей)
    - [Веб-приложение](#веб-приложение)
  - [Использование](#использование)
  - [Модели](#модели)
    - [Линейная регрессия](#линейная-регрессия)
    - [Полиномиальная регрессия](#полиномиальная-регрессия)
    - [Гребневая полиномиальная регрессия](#гребневая-полиномиальная-регрессия)
  - [Заключение](#заключение)

## Введение

Это Flask-приложение создано для демонстрации работы различных моделей машинного обучения на сгенерированном наборе данных "Лунные данные". Приложение включает в себя веб-страницу, на которой можно посмотреть визуализацию результатов трех моделей (линейная регрессия, полиномиальная регрессия и гребневая полиномиальная регрессия).

## Зависимости

Для работы этого приложения необходимы следующие библиотеки Python:

- Flask
- Matplotlib
- scikit-learn
- NumPy
- io

Вы можете установить их с помощью pip:

```bash
pip install flask matplotlib scikit-learn numpy
```

## Запуск приложения

Чтобы запустить это Flask-приложение, выполните следующую команду:

```bash
python lab1-web.py
```

Приложение будет доступно по адресу `http://localhost:5000` в вашем веб-браузере.

## Описание кода

### Создание данных

Для создания набора данных используется функция `make_moons` из scikit-learn. Данные представляют собой два класса, сгруппированных в форме лун, с добавлением шума. Затем данные нормализуются с использованием `StandardScaler`, и разделяются на обучающий и тестовый наборы данных.

### Создание моделей

В коде определены три модели машинного обучения:

1. Линейная регрессия.
2. Полиномиальная регрессия четвертой степени. Она создается с использованием `PolynomialFeatures` и логистической регрессии.
3. Гребневая полиномиальная регрессия четвертой степени. Она также создается с использованием `PolynomialFeatures`, но с добавлением регуляризации (гребня) в логистической регрессии.

### Обучение и оценка моделей

Модели обучаются на обучающем наборе данных, и их точность оценивается на тестовом наборе данных с использованием метрики `accuracy_score`, показывающей точность моделей. Результаты оценки сохраняются в словаре `model_results`, который содержит информацию о точности модели и тестовых данных.

### Веб-приложение

Приложение реализовано с использованием Flask:

- маршрут: `/` - главная страница, на которой отображаются результаты работы моделей.

## Использование

1. Запустите приложение, как описано выше.

2. Перейдите по адресу `http://localhost:5000` в вашем веб-браузере.

3. На главной странице вы увидите результаты работы всех трех моделей, включая их точность.

## Модели

### Линейная регрессия

Модель создается следующим образом:
```python
"Линейная регрессия": LogisticRegression()
```
Результат в виде графика:

![](/result/result_1.png)

Точность полученной модели получилась равной 0.875

### Полиномиальная регрессия

Код создания модели:
```python
"Полиномиальная регрессия": make_pipeline(PolynomialFeatures(degree=4), LogisticRegression())
```
Результат в виде графика:

![](/result/result_2.png)

Точность полученной модели получилась равной 0.85

### Гребневая полиномиальная регрессия

Код создания модели:
```python
"Гребневая полиномиальная регрессия": make_pipeline(PolynomialFeatures(degree=4), LogisticRegression(penalty='l2', C=1.0))
```
Результат в виде графика:

![](/result/result_3.png)

Точность полученной модели получилась равной 0.85


## Заключение
Все полученные модели:

![](/result/result_4.png)

1. "Линейная регрессия" продемонстрировала самую высокую точность среди всех трех моделей (0.875). 
- Это означает, что линейная модель достаточно хорошо справляется с задачей классификации данных.
- Это может быть следствием хорошо структурированных данных.

2. "Полиномиальная регрессия" и "Гребневая полиномиальная регрессия" имеют одинаковую точность (0.85). 
- Обе эти модели показали одинаково хорошие результаты и считаются весьма точными для данной задачи.
- Это может свидетельствовать о наличии нелинейных зависимостей в данных, которые успешно извлечены благодаря использованию полиномиальных признаков и гребневой регуляризации.
- В данном контексте различие между "Полиномиальной регрессией" и "Гребневой полиномиальной регрессией" может быть незначительным, так как точность одинакова.
   
3. Модели смогли достичь высокой точности, что может указывать на наличие явных зависимостей между признаками и целевой переменной.