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)