diff --git a/verina_daria_lab_1/laba1.py b/verina_daria_lab_1/laba1.py new file mode 100644 index 0000000..a8af632 --- /dev/null +++ b/verina_daria_lab_1/laba1.py @@ -0,0 +1,66 @@ +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 + +# ВАРИАНТ 7 +# 7.Данные: make_moons (noise=0.3, random_state=rs) Модели:-Персептрон · Многослойный персептрон с 10-ю нейронами в скрытом слое (alpha = 0.01) · Многослойный персептрон со 100-а нейронами в скрытом слое (alpha = 0.01) +# Задаем random_state для воспроизводимости результатов + +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.5, random_state=rs) + +# Модель 1: Персептрон +perceptron = Perceptron(random_state=rs) +perceptron.fit(X_train, y_train) +y_pred_perceptron = perceptron.predict(X_test) +accuracy_perceptron = accuracy_score(y_test, y_pred_perceptron) + +# Модель 2: Многослойный персептрон с 10 нейронами в скрытом слое +mlp_10_neurons = MLPClassifier(hidden_layer_sizes=(10,), alpha=0.01, random_state=rs, max_iter=10000) +mlp_10_neurons.fit(X_train, y_train) +y_pred_mlp_10_neurons = mlp_10_neurons.predict(X_test) +accuracy_mlp_10_neurons = accuracy_score(y_test, y_pred_mlp_10_neurons) + +# Модель 3: Многослойный персептрон с 100 нейронами в скрытом слое +mlp_100_neurons = MLPClassifier(hidden_layer_sizes=(100,), alpha=0.01, random_state=rs, max_iter=10000) +mlp_100_neurons.fit(X_train, y_train) +y_pred_mlp_100_neurons = mlp_100_neurons.predict(X_test) +accuracy_mlp_100_neurons = accuracy_score(y_test, y_pred_mlp_100_neurons) + +# принт результатов +print("Accuracy для Персептрона:", accuracy_perceptron) +print("Accuracy для MLP с 10 нейронами в скрытом слое:", accuracy_mlp_10_neurons) +print("Accuracy для MLP с 100 нейронами в скрытом слое:", accuracy_mlp_100_neurons) + +# графики +plt.figure(figsize=(12, 4)) + +# График для Персептрона +plt.subplot(1, 3, 1) +plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred_perceptron, cmap=plt.cm.Paired, s=10) +plt.title("Perceptron") + +# График для MLP с 10 нейронами в скрытом слое +plt.subplot(1, 3, 2) +plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred_mlp_10_neurons, cmap=plt.cm.Paired, s=10) +plt.title("MLP (10 neurons)") + +# График для MLP с 100 нейронами в скрытом слое +plt.subplot(1, 3, 3) +plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred_mlp_100_neurons, cmap=plt.cm.Paired, s=10) +plt.title("MLP (100 neurons)") + + +# Сохраняем графики в файл в папке result +result_folder = "result" +plt.savefig(f"{result_folder}/result.png") +plt.show() diff --git a/verina_daria_lab_1/readme.md b/verina_daria_lab_1/readme.md new file mode 100644 index 0000000..5acc8ef --- /dev/null +++ b/verina_daria_lab_1/readme.md @@ -0,0 +1,37 @@ +# Лабораторная работа 1. Работа с типовыми наборами данных и различными моделями +### Вариант № 7 +Лабораторная работа 1. Работа с типовыми наборами данных и различными моделямиИспользуя код из пункта «Регуляризация и сеть прямого распространения»из [1](стр. 228), сгенерируйте определенный тип данных и сравните на нем 3 модели (по варианту). Постройте графики, отобразите качество моделей, объясните полученные результаты. + +**Задание по варианту** +**Данные**: make_moons (noise=0.3, random_state=rs)
+**Модели**:-Персептрон · Многослойный персептрон с 10-ю нейронами в скрытом слое (alpha = 0.01) · Многослойный персептрон со 100-а нейронами в скрытом слое (alpha = 0.01) + + +*** +## *Как запустить лабораторную работу:* +Чтобы запустить программу, открываем файл laba1 в PyCharm и запускаем с помощью команды run +*** +## *Использованные технологии:* +**Scikit-learn** - один из наиболее широко используемых пакетов Python для Data Science и Machine Learning. Он позволяет выполнять множество операций и предоставляет множество алгоритмов. + +**Matplotlib** — это комплексная библиотека для создания статических, анимированных и интерактивных визуализаций на Python. + +**NumPy** — это фундаментальный пакет для научных вычислений на Python. +*** +## *Что делает программа:* +В данной работе генерируется определенный тип данных (при помощи генератора линейных задач make_moons). На данном типе данных проверяется работа трёх моделей. + +**Результатом работы программы** являются: вывод показателей качества моделей (в консоли) и 3 изображения с графиками, на которых показаны сами данные, разбитые на два класса (тренировочные и тестовые). +*** +## *Пример выходных данных:* +>Вывод в консоли: + + + +>Получившиеся графики + + + +*** +**Вывод**: Для сгенерированного типа данных лучшей моделью оказалась модель многослойного персептрона со 100 нейронами (с точностью 0.91), а худшей модель персептона без скрытого слоя. Чем больше нейронов в скрытом слое - тем точнее результат. + diff --git a/verina_daria_lab_1/result/console.png b/verina_daria_lab_1/result/console.png new file mode 100644 index 0000000..aa4428d Binary files /dev/null and b/verina_daria_lab_1/result/console.png differ diff --git a/verina_daria_lab_1/result/result.png b/verina_daria_lab_1/result/result.png new file mode 100644 index 0000000..1bd1d99 Binary files /dev/null and b/verina_daria_lab_1/result/result.png differ