diff --git a/.idea/discord.xml b/.idea/discord.xml new file mode 100644 index 0000000..30bab2a --- /dev/null +++ b/.idea/discord.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 3c29c38..b6db721 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,7 @@ + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 2dd87a1..21abd8a 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,7 +1,12 @@ + + - + + + + + { + "associatedIndex": 2 +} - { + "keyToString": { + "RunOnceActivity.OpenProjectViewOnStart": "true", + "RunOnceActivity.ShowReadmeOnStart": "true", + "last_opened_file_path": "D:/ulstukek/Course4/IIS/labs", + "settings.editor.selected.configurable": "reference.settings.ide.settings.new.ui" } -}]]> +} diff --git a/savenkov_alexander_lab_1/.idea/.gitignore b/savenkov_alexander_lab_1/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/savenkov_alexander_lab_1/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/savenkov_alexander_lab_1/.idea/.name b/savenkov_alexander_lab_1/.idea/.name new file mode 100644 index 0000000..11a5d8e --- /dev/null +++ b/savenkov_alexander_lab_1/.idea/.name @@ -0,0 +1 @@ +main.py \ No newline at end of file diff --git a/savenkov_alexander_lab_1/.idea/Lab_1_IIS.iml b/savenkov_alexander_lab_1/.idea/Lab_1_IIS.iml new file mode 100644 index 0000000..74d515a --- /dev/null +++ b/savenkov_alexander_lab_1/.idea/Lab_1_IIS.iml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/savenkov_alexander_lab_1/.idea/discord.xml b/savenkov_alexander_lab_1/.idea/discord.xml new file mode 100644 index 0000000..30bab2a --- /dev/null +++ b/savenkov_alexander_lab_1/.idea/discord.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/savenkov_alexander_lab_1/.idea/inspectionProfiles/profiles_settings.xml b/savenkov_alexander_lab_1/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/savenkov_alexander_lab_1/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/savenkov_alexander_lab_1/.idea/misc.xml b/savenkov_alexander_lab_1/.idea/misc.xml new file mode 100644 index 0000000..a377feb --- /dev/null +++ b/savenkov_alexander_lab_1/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/savenkov_alexander_lab_1/.idea/modules.xml b/savenkov_alexander_lab_1/.idea/modules.xml new file mode 100644 index 0000000..b990923 --- /dev/null +++ b/savenkov_alexander_lab_1/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/savenkov_alexander_lab_1/app.py b/savenkov_alexander_lab_1/app.py new file mode 100644 index 0000000..940664f --- /dev/null +++ b/savenkov_alexander_lab_1/app.py @@ -0,0 +1,62 @@ +import numpy as np +from flask import Flask, request, render_template +from sklearn.datasets import make_moons +from sklearn.linear_model import LinearRegression +from sklearn.preprocessing import PolynomialFeatures +from sklearn.linear_model import Ridge +from sklearn.model_selection import train_test_split +import matplotlib.pyplot as plt + +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_moons(noise=0.3, random_state=rs) + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=rs) + + # Линейная регрессия + lr = LinearRegression() + lr.fit(X_train, y_train) + lr_score = lr.score(X_test, y_test) + + # Полиномиальная регрессия (степень 3) + poly = PolynomialFeatures(degree=3) + X_poly = poly.fit_transform(X_train) + poly_reg = LinearRegression() + poly_reg.fit(X_poly, y_train) + poly_score = poly_reg.score(poly.transform(X_test), y_test) + + # Гребневая полиномиальная регрессия (степень 3, alpha=1.0) + ridge = Ridge(alpha=1.0) + ridge.fit(X_poly, y_train) + ridge_score = ridge.score(poly.transform(X_test), y_test) + + # Создание графиков + plt.figure(figsize=(12, 4)) + + plt.subplot(131) + plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=plt.cm.RdBu) + plt.title('Линейная регрессия\n(Score: {:.2f})'.format(lr_score)) + + plt.subplot(132) + plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=plt.cm.RdBu) + plt.title('Полиномиальная регрессия\n(Score: {:.2f})'.format(poly_score)) + + plt.subplot(133) + plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=plt.cm.RdBu) + plt.title('Гребневая полиномиальная регрессия\n(Score: {:.2f})'.format(ridge_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/savenkov_alexander_lab_1/readme.md b/savenkov_alexander_lab_1/readme.md new file mode 100644 index 0000000..4c54245 --- /dev/null +++ b/savenkov_alexander_lab_1/readme.md @@ -0,0 +1,63 @@ +Общее задание: +Используя код из пункта «Регуляризация и сеть прямого +распространения» из [1] (стр. 228), сгенерируйте определенный тип данных и +сравните на нем 3 модели (по варианту). Постройте графики, отобразите +качество моделей, объясните полученные результаты. + +Задание по вариантам 1 вариант (22), взял 1 т.к. всего 21 вариант задания: +1. Данные: make_moons (noise=0.3, random_state=rs) +Модели: +· Линейную регрессию +· Полиномиальную регрессию (со степенью 3) +· Гребневую полиномиальную регрессию (со степенью 3, alpha = 1.0) + +Запуск приложения осуществляется запуском файла app.py + +Использованные технологии: +Среда программирования Pycharm +Версия языка python: 3.11 +Flask: Flask - это микрофреймворк для создания веб-приложений на языке Python. Он используется для создания веб-сервера и определения маршрутов, таких как '/' и '/compare_models', для обработки запросов. + +HTML: Ваш шаблон index.html использует язык разметки HTML для создания веб-страницы и отображения содержимого на веб-сайте. + +Matplotlib: Matplotlib - это библиотека для создания графиков и визуализации данных. В этой программе она используется для создания трех графиков, представляющих результаты различных моделей. + +NumPy: NumPy - это библиотека для вычислительных операций с массивами и матрицами. В этой программе она используется для генерации данных (make_moons) и работы с данными. + +Scikit-Learn (sklearn): Scikit-Learn - это библиотека машинного обучения для Python. Она используется для обучения трех моделей машинного обучения: линейной регрессии, полиномиальной регрессии и гребневой полиномиальной регрессии. + +Jinja2: Flask использует шаблонизатор Jinja2 для вставки динамических данных (например, параметра result) в HTML-шаблоны. + +Файловая система и статические файлы: В программе используется файловая система для сохранения изображений графиков (static/models_comparison.png). Эти изображения затем отображаются на веб-странице как статические файлы. + +Краткое описание работы программы: +В разделе HTML (index.html) определен шаблон для главной страницы. Этот шаблон содержит заголовок, форму для отправки POST-запроса на /compare_models и, если result истинно, отображает изображение графиков моделей. + +В Python-скрипте (app.py) создается Flask-приложение, которое имеет два маршрута: + +'/' отвечает за главную страницу и отображает шаблон index.html. +'/compare_models' обрабатывает POST-запрос, обучает различные модели и создает графики. После этого он возвращает результат в виде изображений и обновляет страницу с параметром result=True, чтобы отобразить изображения. +Для генерации данных используется make_moons, а затем данные разбиваются на обучающий и тестовый наборы. + +Тренируются три модели: линейная регрессия, полиномиальная регрессия (степень 3) и гребневая полиномиальная регрессия (степень 3, alpha=1.0). + +После обучения моделей создаются три графика, каждый из которых представляет собой точечное облако с цветной разметкой, а также заголовок, содержащий оценку (score) модели. + +Графики сохраняются в файл static/models_comparison.png. + +Наконец, приложение запускается с debug=True в режиме отладки. + +Пример входных данных: +X = [[-0.5, 0.5], + [0.2, 1.2], + [1.5, -0.3], + ... + ] # Матрица признаков + +y = [0, 1, 0, 1, 1, 0, 0, 1, ...] # Вектор меток классов + +Пример выходных данных: +Графики моделей: Это изображения, на которых отображены точки данных с цветной разметкой в соответствии с предсказанными значениями моделей. +Оценки моделей: В заголовках графиков отображаются оценки моделей (например, Score: 0.85), которые показывают качество каждой модели на тестовых данных. + +Обновленная главная страница: После генерации графиков, главная страница (index.html) обновляется, и на ней отображаются созданные графики моделей. \ No newline at end of file diff --git a/savenkov_alexander_lab_1/static/models_comparison.png b/savenkov_alexander_lab_1/static/models_comparison.png new file mode 100644 index 0000000..c0715a6 Binary files /dev/null and b/savenkov_alexander_lab_1/static/models_comparison.png differ diff --git a/savenkov_alexander_lab_1/templates/index.html b/savenkov_alexander_lab_1/templates/index.html new file mode 100644 index 0000000..9354153 --- /dev/null +++ b/savenkov_alexander_lab_1/templates/index.html @@ -0,0 +1,17 @@ + + + + Сравнение моделей + + +

Сравнение моделей

+
+ +
+
+ {% if result %} +

Графики моделей

+ Графики моделей + {% endif %} + +