diff --git a/tsyppo_anton_lab_1/README.md b/tsyppo_anton_lab_1/README.md new file mode 100644 index 0000000..dfa2a5d --- /dev/null +++ b/tsyppo_anton_lab_1/README.md @@ -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 нейронами в +скрытом слое показывают приемлемую, но более низкую точность. Таким образом, увеличение числа нейронов в скрытом +слое существенно повысило производительность модели._ + +--- + diff --git a/tsyppo_anton_lab_1/main.py b/tsyppo_anton_lab_1/main.py new file mode 100644 index 0000000..39400f7 --- /dev/null +++ b/tsyppo_anton_lab_1/main.py @@ -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() \ No newline at end of file diff --git a/tsyppo_anton_lab_1/models.png b/tsyppo_anton_lab_1/models.png new file mode 100644 index 0000000..80f7219 Binary files /dev/null and b/tsyppo_anton_lab_1/models.png differ