## Задание
Данные: make_moons (noise = 0.3, random_state = 0)

Модели:
* Персептрон
* Многослойный персептрон с 10-ю нейронами в скрытом поле (alpha = 0.01)
* Многослойный персептрон с 100-а нейронами в скрытом поле (alpha = 0.01)

## В чем различие каждой модели

Персептрон:
* самая простая форма искусственной нейронной сети
* состоит из одного или нескольких нейронов
* только один слой нейронов
* разделяет данные линейно

Многослойный персептрон с 10-ю/100-а нейронами в скрытом поле (alpha = 0.01)
* более сложная форма искусственной нейронной сети
* состоит из нескольких слоев, причем имеет один или несколько скрытых слоев
* способен решать задачи классификации, регрессии, обработки изображений, текста и т.д

Общий вывод таков, что многослойный персептрон способен решать более сложные задачи, требующие нелинейных решений.


## Библиотеки
Streamlit. Предоставляет простой способ создания веб-приложений для визуализации данных.

Numpy. Предоставляет возможность работать с массивами и матрицами.

Matplotlib. Используется для создания графиков.

Sklearn. Предоставляет инструменты и алгоритмы, которые упрощают задачи, связанные с машинным обучением.

## Функционал
Предоставляет создание объекта для каждой модели персептрона.

Создание данных с помощью функции make_moon c последующим
делением данных на обучающую и тестовую выборку. 

Метод print_perceptron, в котором происходит обучение модели, определение точности и отрисовка графика.

## Запуск
Перед запуском необходимо запустить виртуальную среду venv. Так как я использую streamlit, то для запуска необходимо в терминал прописать следующую строку:
```
streamlit run lab1.py
```
Приложение развернется на локальном сервере и автоматически откроется в браузере.

## Скриншоты работы программы
При запуске выглядит так:
![Alt text](win_start.jpg "Optional Title")

Построенные графики

![Alt text](1graf.jpg "Optional Title")

![Alt text](2graf.jpg "Optional Title")

![Alt text](3graf.jpg "Optional Title")

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