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