volkov_rafael_lab_1 is done

This commit is contained in:
Rafael Volkov 2023-12-05 12:27:16 +04:00
parent a8c58683dd
commit 5b27113150
4 changed files with 137 additions and 0 deletions

View File

@ -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)

View File

@ -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 нейронами).
Точность каждой модели на тестовых данных отображается на веб-странице.

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

View File

@ -0,0 +1,38 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Model Comparison</title>
<style>
body {
font-family: Arial, sans-serif;
}
h1 {
text-align: center;
}
.container {
display: flex;
}
</style>
</head>
<body>
<h1>Model Comparison</h1>
{% if result %}
<div class="container">
<div class="model-container">
<img src="{{ url_for('static', filename='models_comparison.png') }}" alt="Perceptron">
</div>
<div class="model-container">
</div>
<div class="model-container">
</div>
</div>
{% endif %}
<form action="/compare_models" method="post">
<button type="submit">Compare Models</button>
</form>
</body>
</html>