diff --git a/volkov_rafael_lab_1/app.py b/volkov_rafael_lab_1/app.py new file mode 100644 index 0000000..d63193e --- /dev/null +++ b/volkov_rafael_lab_1/app.py @@ -0,0 +1,60 @@ +import numpy as np +from flask import Flask, request, render_template +from sklearn.datasets import make_circles +from sklearn.neural_network import MLPClassifier +from sklearn.model_selection import train_test_split +from sklearn.metrics import accuracy_score +import matplotlib.pyplot as plt +from mlxtend.plotting import plot_decision_regions + +app = Flask(__name__) + +@app.route('/') +def home(): + return render_template('index.html') + +@app.route('/compare_models', methods=['POST']) +def compare_models(): + # Генерация данных + rs = 0 + X, y = make_circles(noise=0.2, factor=0.5, random_state=rs) + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=rs) + + # Персептрон + perceptron = MLPClassifier(hidden_layer_sizes=(1,), max_iter=1000, alpha=0.01) + perceptron.fit(X_train, y_train) + perceptron_score = accuracy_score(y_test, perceptron.predict(X_test)) + + # Многослойный персептрон с 10-ю нейронами в скрытом слое + mlp_10 = MLPClassifier(hidden_layer_sizes=(10,), max_iter=1000, alpha=0.01) + mlp_10.fit(X_train, y_train) + mlp_10_score = accuracy_score(y_test, mlp_10.predict(X_test)) + + # Многослойный персептрон со 100-ю нейронами в скрытом слое + mlp_100 = MLPClassifier(hidden_layer_sizes=(100,), max_iter=1000, alpha=0.01) + mlp_100.fit(X_train, y_train) + mlp_100_score = accuracy_score(y_test, mlp_100.predict(X_test)) + + # Создание графиков + plt.figure(figsize=(12, 4)) + + plt.subplot(131) + plot_decision_regions(X_test, y_test, clf=perceptron, legend=2) + plt.title('Персептрон\n(Accuracy: {:.2f})'.format(perceptron_score)) + + plt.subplot(132) + plot_decision_regions(X_test, y_test, clf=mlp_10, legend=2) + plt.title('MLP (10 нейронов)\n(Accuracy: {:.2f})'.format(mlp_10_score)) + + plt.subplot(133) + plot_decision_regions(X_test, y_test, clf=mlp_100, legend=2) + plt.title('MLP (100 нейронов)\n(Accuracy: {:.2f})'.format(mlp_100_score)) + + plt.tight_layout() + + plt.savefig('static/models_comparison.png') + + return render_template('index.html', result=True) + +if __name__ == '__main__': + app.run(debug=True) diff --git a/volkov_rafael_lab_1/readme.md b/volkov_rafael_lab_1/readme.md new file mode 100644 index 0000000..21e0e5a --- /dev/null +++ b/volkov_rafael_lab_1/readme.md @@ -0,0 +1,39 @@ +Общее задание: +Используя код из пункта «Регуляризация и сеть прямого +распространения» из [1] (стр. 228), сгенерируйте определенный тип данных и +сравните на нем 3 модели (по варианту). Постройте графики, отобразите +качество моделей, объясните полученные результаты. + +8 вариант: +Данные: make_circles (noise=0.2, factor=0.5, random_state=rs) +Модели: +- Персептрон +· Многослойный персептрон с 10-ю нейронами в скрытом слое (alpha = +0.01) +· Многослойный персептрон со 100-а нейронами в скрытом слое (alpha += 0.01) + +Запуск осуществляется через файл app.py + + +Технологии: + +Flask: Веб-фреймворк для Python, используется для создания веб-приложения. +NumPy: Библиотека для работы с массивами и матрицами, используется для генерации данных. +scikit-learn: Библиотека для машинного обучения, используется для построения и обучения моделей. +Matplotlib: Библиотека для визуализации данных, используется для создания графиков. +mlxtend: Библиотека для визуализации решающих границ. +Описание работы программы: + +При запуске приложения через Flask создается веб-сервер. +Пользователь открывает веб-страницу, которая содержит кнопку "Compare Models". +При нажатии на кнопку генерируются данные (make_circles) и тренируются три модели: Perceptron, MLP с 10 нейронами и MLP с 100 нейронами. +Для каждой модели строятся графики с решающими границами и вычисляется точность модели на тестовых данных. +Результаты (графики и точности) отображаются на веб-странице. +Входные данные: + +Нет явных входных данных от пользователя. Данные генерируются программой (make_circles). +Выходные данные: + +Визуализация решающих границ для трех моделей (Perceptron, MLP с 10 нейронами, MLP с 100 нейронами). +Точность каждой модели на тестовых данных отображается на веб-странице. \ No newline at end of file diff --git a/volkov_rafael_lab_1/static/models_comparison.png b/volkov_rafael_lab_1/static/models_comparison.png new file mode 100644 index 0000000..479019d Binary files /dev/null and b/volkov_rafael_lab_1/static/models_comparison.png differ diff --git a/volkov_rafael_lab_1/templates/index.html b/volkov_rafael_lab_1/templates/index.html new file mode 100644 index 0000000..bb0ed78 --- /dev/null +++ b/volkov_rafael_lab_1/templates/index.html @@ -0,0 +1,38 @@ + + +
+ + +