Merge pull request 'tsyppo_anton_lab_1 is ready' (#269) from tsyppo_anton_lab_1 into main
Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/269
This commit is contained in:
commit
ab23daa848
63
tsyppo_anton_lab_1/README.md
Normal file
63
tsyppo_anton_lab_1/README.md
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
# Лабораторная работа №1: Работа с типовыми наборами данных и различными моделями
|
||||||
|
## Задание. Вариант 7
|
||||||
|
Всего вариантов 21, мой вариант 28, поэтому взял 7 вариант
|
||||||
|
|
||||||
|
Задание:
|
||||||
|
Используя код из пункта «Регуляризация и сеть прямого распространения»из [1](стр. 228), сгенерируйте определенный тип
|
||||||
|
данных и сравните на нем 3 модели (по варианту). Постройте графики, отобразите качество моделей, объясните полученные
|
||||||
|
результаты.
|
||||||
|
|
||||||
|
7. Данные: make_moons (noise=0.3, random_state=rs) Модели:
|
||||||
|
· Персептрон
|
||||||
|
· Многослойный персептрон с 10-ю нейронами в скрытом слое (alpha = 0.01)
|
||||||
|
· Многослойный персептрон со 100-а нейронами в скрытом слое (alpha = 0.01)
|
||||||
|
|
||||||
|
## Описание программы
|
||||||
|
|
||||||
|
Программа создает и сравнивает три модели машинного обучения на основе датасета make_moons с использованием библиотеки
|
||||||
|
scikit-learn. Сравниваются следующие модели:
|
||||||
|
|
||||||
|
1. Персептрон
|
||||||
|
2. Многослойный персептрон с 10 нейронами в скрытом слое (alpha = 0.01)
|
||||||
|
3. Многослойный персептрон с 100 нейронами в скрытом слое (alpha = 0.01)
|
||||||
|
|
||||||
|
## Как запустить лабораторную работу
|
||||||
|
|
||||||
|
1. Установите необходимые библиотеки:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install numpy matplotlib scikit-learn
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Запустите скрипт:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python main.py
|
||||||
|
```
|
||||||
|
|
||||||
|
3. После выполнения программы будет создан файл "models.png" с тремя графиками, представляющими результаты каждой модели.
|
||||||
|
|
||||||
|
## Использованные технологии
|
||||||
|
|
||||||
|
- Python
|
||||||
|
- scikit-learn
|
||||||
|
- Matplotlib
|
||||||
|
|
||||||
|
## Что программа делает
|
||||||
|
|
||||||
|
Программа генерирует датасет make_moons, разделяет его на обучающий и тестовый наборы, затем обучает и сравнивает
|
||||||
|
три модели машинного обучения. Результаты представлены в виде точности каждой модели и трех графиков.
|
||||||
|
|
||||||
|
## Тесты
|
||||||
|
|
||||||
|
![Графики моделей](models.png)
|
||||||
|
|
||||||
|
## Вывод
|
||||||
|
|
||||||
|
_Полученные результаты показывают, что многослойный персептрон с 100 нейронами в скрытом слое демонстрирует наивысшую
|
||||||
|
точность среди рассмотренных моделей. В то время как простой персептрон и многослойный персептрон с 10 нейронами в
|
||||||
|
скрытом слое показывают приемлемую, но более низкую точность. Таким образом, увеличение числа нейронов в скрытом
|
||||||
|
слое существенно повысило производительность модели._
|
||||||
|
|
||||||
|
---
|
||||||
|
|
46
tsyppo_anton_lab_1/main.py
Normal file
46
tsyppo_anton_lab_1/main.py
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
import numpy as np
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
from sklearn.datasets import make_moons
|
||||||
|
from sklearn.model_selection import train_test_split
|
||||||
|
from sklearn.linear_model import Perceptron
|
||||||
|
from sklearn.neural_network import MLPClassifier
|
||||||
|
from sklearn.metrics import accuracy_score
|
||||||
|
|
||||||
|
# Генерируем данные
|
||||||
|
rs = 42
|
||||||
|
X, y = make_moons(n_samples=1000, noise=0.3, random_state=rs)
|
||||||
|
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=rs)
|
||||||
|
def train_and_evaluate_model(model, X_train, y_train, X_test, y_test):
|
||||||
|
model.fit(X_train, y_train)
|
||||||
|
y_pred = model.predict(X_test)
|
||||||
|
accuracy = accuracy_score(y_test, y_pred)
|
||||||
|
return accuracy
|
||||||
|
|
||||||
|
# Построение моделей
|
||||||
|
perceptron_model = Perceptron(random_state=rs)
|
||||||
|
perceptron_accuracy = train_and_evaluate_model(perceptron_model, X_train, y_train, X_test, y_test)
|
||||||
|
|
||||||
|
mlp_model_10_neurons = MLPClassifier(hidden_layer_sizes=(10,), alpha=0.01, random_state=rs)
|
||||||
|
mlp_10_neurons_accuracy = train_and_evaluate_model(mlp_model_10_neurons, X_train, y_train, X_test, y_test)
|
||||||
|
|
||||||
|
mlp_model_100_neurons = MLPClassifier(hidden_layer_sizes=(100,), alpha=0.01, random_state=rs)
|
||||||
|
mlp_100_neurons_accuracy = train_and_evaluate_model(mlp_model_100_neurons, X_train, y_train, X_test, y_test)
|
||||||
|
|
||||||
|
# Построение графиков
|
||||||
|
plt.figure(figsize=(12, 4))
|
||||||
|
|
||||||
|
plt.subplot(131)
|
||||||
|
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap='viridis', marker='.')
|
||||||
|
plt.title("Персептрон\nТочность: {:.2f}%".format(perceptron_accuracy * 100))
|
||||||
|
|
||||||
|
plt.subplot(132)
|
||||||
|
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap='viridis', marker='.')
|
||||||
|
plt.title("Многослойный персептрон\nс 10-ю нейронами в скрытом слое\nТочность: {:.2f}%".format(mlp_10_neurons_accuracy * 100))
|
||||||
|
|
||||||
|
plt.subplot(133)
|
||||||
|
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap='viridis', marker='.')
|
||||||
|
plt.title("Многослойный персептрон\nс 100-а нейронами в скрытом слое\nТочность: {:.2f}%".format(mlp_100_neurons_accuracy * 100))
|
||||||
|
|
||||||
|
plt.tight_layout()
|
||||||
|
plt.savefig('models.png')
|
||||||
|
plt.show()
|
BIN
tsyppo_anton_lab_1/models.png
Normal file
BIN
tsyppo_anton_lab_1/models.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 52 KiB |
Loading…
Reference in New Issue
Block a user