lab1
This commit is contained in:
parent
bbd6aea496
commit
d8ea68139d
70
simonov_nikita_lab_1/lab1-web.py
Normal file
70
simonov_nikita_lab_1/lab1-web.py
Normal file
@ -0,0 +1,70 @@
|
||||
from flask import Flask, render_template
|
||||
import numpy as np
|
||||
from matplotlib import pyplot as plt
|
||||
from matplotlib.colors import ListedColormap
|
||||
from sklearn.model_selection import train_test_split
|
||||
from sklearn.preprocessing import StandardScaler
|
||||
from sklearn.datasets import make_moons
|
||||
from sklearn.linear_model import LogisticRegression
|
||||
from sklearn.preprocessing import PolynomialFeatures
|
||||
from sklearn.pipeline import make_pipeline
|
||||
from sklearn.metrics import accuracy_score
|
||||
import io
|
||||
from flask import Response
|
||||
import matplotlib
|
||||
import base64
|
||||
|
||||
app = Flask(__name__)
|
||||
matplotlib.use('Agg')
|
||||
matplotlib.rcParams['figure.max_open_warning'] = 0
|
||||
|
||||
# Создаем данные
|
||||
moon_dataset = make_moons(noise=0.3, random_state=None)
|
||||
X, y = moon_dataset
|
||||
X = StandardScaler().fit_transform(X)
|
||||
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=42)
|
||||
|
||||
# Создаем модели
|
||||
models = {
|
||||
"Линейная регрессия": LogisticRegression(),
|
||||
"Полиномиальная регрессия": make_pipeline(PolynomialFeatures(degree=4), LogisticRegression()),
|
||||
"Гребневая полиномиальная регрессия": make_pipeline(PolynomialFeatures(degree=4), LogisticRegression(penalty='l2', C=1.0))
|
||||
}
|
||||
|
||||
background_color1 = '#CE5A57'
|
||||
background_color2 = '#78A5A3'
|
||||
data_color1 = 'red'
|
||||
data_color2 = 'green'
|
||||
|
||||
# Обучаем и оцениваем модели
|
||||
model_results = {}
|
||||
for name, model in models.items():
|
||||
model.fit(X_train, y_train)
|
||||
y_pred = model.predict(X_test)
|
||||
accuracy = accuracy_score(y_test, y_pred)
|
||||
model_results[name] = {
|
||||
'accuracy': accuracy,
|
||||
'X_test': X_test,
|
||||
'y_test': y_test,
|
||||
'model': model
|
||||
}
|
||||
|
||||
@app.route('/')
|
||||
def index():
|
||||
plot_images = {}
|
||||
for model_name, results in model_results.items():
|
||||
fig, ax = plt.subplots(figsize=(8, 6))
|
||||
cm_data = ListedColormap([data_color1, data_color2])
|
||||
scatter = ax.scatter(results['X_test'][:, 0], results['X_test'][:, 1], c=results['model'].predict(results['X_test']), cmap=cm_data, alpha=0.6)
|
||||
ax.set_xticks(())
|
||||
ax.set_yticks(())
|
||||
ax.set_title(model_name)
|
||||
buf = io.BytesIO()
|
||||
plt.savefig(buf, format='png')
|
||||
buf.seek(0)
|
||||
plot_images[model_name] = base64.b64encode(buf.read()).decode('utf-8')
|
||||
|
||||
return render_template('index.html', model_results=model_results, plot_images=plot_images)
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(threaded=True)
|
143
simonov_nikita_lab_1/readme.md
Normal file
143
simonov_nikita_lab_1/readme.md
Normal file
@ -0,0 +1,143 @@
|
||||
# Лабораторная работа №1. Вариант 4.
|
||||
|
||||
## Задание
|
||||
|
||||
Сгенерируйте определенный тип данных и
|
||||
сравните на нем 3 модели (по варианту). Постройте графики, отобразите качество моделей, объясните полученные результаты.
|
||||
|
||||
## Содержание
|
||||
- [Лабораторная работа №1. Вариант 4.](#лабораторная-работа-1-вариант-4)
|
||||
- [Задание](#задание)
|
||||
- [Содержание](#содержание)
|
||||
- [Введение](#введение)
|
||||
- [Зависимости](#зависимости)
|
||||
- [Запуск приложения](#запуск-приложения)
|
||||
- [Описание кода](#описание-кода)
|
||||
- [Создание данных](#создание-данных)
|
||||
- [Создание моделей](#создание-моделей)
|
||||
- [Обучение и оценка моделей](#обучение-и-оценка-моделей)
|
||||
- [Веб-приложение](#веб-приложение)
|
||||
- [Использование](#использование)
|
||||
- [Модели](#модели)
|
||||
- [Линейная регрессия](#линейная-регрессия)
|
||||
- [Полиномиальная регрессия](#полиномиальная-регрессия)
|
||||
- [Гребневая полиномиальная регрессия](#гребневая-полиномиальная-регрессия)
|
||||
- [Заключение](#заключение)
|
||||
|
||||
## Введение
|
||||
|
||||
Это Flask-приложение создано для демонстрации работы различных моделей машинного обучения на сгенерированном наборе данных "Лунные данные". Приложение включает в себя веб-страницу, на которой можно посмотреть визуализацию результатов трех моделей (линейная регрессия, полиномиальная регрессия и гребневая полиномиальная регрессия).
|
||||
|
||||
## Зависимости
|
||||
|
||||
Для работы этого приложения необходимы следующие библиотеки Python:
|
||||
|
||||
- Flask
|
||||
- Matplotlib
|
||||
- scikit-learn
|
||||
- NumPy
|
||||
- io
|
||||
|
||||
Вы можете установить их с помощью pip:
|
||||
|
||||
```bash
|
||||
pip install flask matplotlib scikit-learn numpy
|
||||
```
|
||||
|
||||
## Запуск приложения
|
||||
|
||||
Чтобы запустить это Flask-приложение, выполните следующую команду:
|
||||
|
||||
```bash
|
||||
python lab1-web.py
|
||||
```
|
||||
|
||||
Приложение будет доступно по адресу `http://localhost:5000` в вашем веб-браузере.
|
||||
|
||||
## Описание кода
|
||||
|
||||
### Создание данных
|
||||
|
||||
Для создания набора данных используется функция `make_moons` из scikit-learn. Данные представляют собой два класса, сгруппированных в форме лун, с добавлением шума. Затем данные нормализуются с использованием `StandardScaler`, и разделяются на обучающий и тестовый наборы данных.
|
||||
|
||||
### Создание моделей
|
||||
|
||||
В коде определены три модели машинного обучения:
|
||||
|
||||
1. Линейная регрессия.
|
||||
2. Полиномиальная регрессия четвертой степени. Она создается с использованием `PolynomialFeatures` и логистической регрессии.
|
||||
3. Гребневая полиномиальная регрессия четвертой степени. Она также создается с использованием `PolynomialFeatures`, но с добавлением регуляризации (гребня) в логистической регрессии.
|
||||
|
||||
### Обучение и оценка моделей
|
||||
|
||||
Модели обучаются на обучающем наборе данных, и их точность оценивается на тестовом наборе данных с использованием метрики `accuracy_score`, показывающей точность моделей. Результаты оценки сохраняются в словаре `model_results`, который содержит информацию о точности модели и тестовых данных.
|
||||
|
||||
### Веб-приложение
|
||||
|
||||
Приложение реализовано с использованием Flask:
|
||||
|
||||
- маршрут: `/` - главная страница, на которой отображаются результаты работы моделей.
|
||||
|
||||
## Использование
|
||||
|
||||
1. Запустите приложение, как описано выше.
|
||||
|
||||
2. Перейдите по адресу `http://localhost:5000` в вашем веб-браузере.
|
||||
|
||||
3. На главной странице вы увидите результаты работы всех трех моделей, включая их точность.
|
||||
|
||||
## Модели
|
||||
|
||||
### Линейная регрессия
|
||||
|
||||
Модель создается следующим образом:
|
||||
```python
|
||||
"Линейная регрессия": LogisticRegression()
|
||||
```
|
||||
Результат в виде графика:
|
||||
|
||||
![](/result/result_1.png)
|
||||
|
||||
Точность полученной модели получилась равной 0.875
|
||||
|
||||
### Полиномиальная регрессия
|
||||
|
||||
Код создания модели:
|
||||
```python
|
||||
"Полиномиальная регрессия": make_pipeline(PolynomialFeatures(degree=4), LogisticRegression())
|
||||
```
|
||||
Результат в виде графика:
|
||||
|
||||
![](/result/result_2.png)
|
||||
|
||||
Точность полученной модели получилась равной 0.85
|
||||
|
||||
### Гребневая полиномиальная регрессия
|
||||
|
||||
Код создания модели:
|
||||
```python
|
||||
"Гребневая полиномиальная регрессия": make_pipeline(PolynomialFeatures(degree=4), LogisticRegression(penalty='l2', C=1.0))
|
||||
```
|
||||
Результат в виде графика:
|
||||
|
||||
![](/result/result_3.png)
|
||||
|
||||
Точность полученной модели получилась равной 0.85
|
||||
|
||||
|
||||
## Заключение
|
||||
Все полученные модели:
|
||||
|
||||
![](/result/result_4.png)
|
||||
|
||||
1. "Линейная регрессия" продемонстрировала самую высокую точность среди всех трех моделей (0.875).
|
||||
- Это означает, что линейная модель достаточно хорошо справляется с задачей классификации данных.
|
||||
- Это может быть следствием хорошо структурированных данных.
|
||||
|
||||
2. "Полиномиальная регрессия" и "Гребневая полиномиальная регрессия" имеют одинаковую точность (0.85).
|
||||
- Обе эти модели показали одинаково хорошие результаты и считаются весьма точными для данной задачи.
|
||||
- Это может свидетельствовать о наличии нелинейных зависимостей в данных, которые успешно извлечены благодаря использованию полиномиальных признаков и гребневой регуляризации.
|
||||
- В данном контексте различие между "Полиномиальной регрессией" и "Гребневой полиномиальной регрессией" может быть незначительным, так как точность одинакова.
|
||||
|
||||
3. Модели смогли достичь высокой точности, что может указывать на наличие явных зависимостей между признаками и целевой переменной.
|
||||
|
BIN
simonov_nikita_lab_1/result/result_1.png
Normal file
BIN
simonov_nikita_lab_1/result/result_1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 20 KiB |
BIN
simonov_nikita_lab_1/result/result_2.png
Normal file
BIN
simonov_nikita_lab_1/result/result_2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 22 KiB |
BIN
simonov_nikita_lab_1/result/result_3.png
Normal file
BIN
simonov_nikita_lab_1/result/result_3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 24 KiB |
BIN
simonov_nikita_lab_1/result/result_4.png
Normal file
BIN
simonov_nikita_lab_1/result/result_4.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 154 KiB |
43
simonov_nikita_lab_1/templates/index.html
Normal file
43
simonov_nikita_lab_1/templates/index.html
Normal file
@ -0,0 +1,43 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Модели классификации</title>
|
||||
<style>
|
||||
body {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
color: rgb(241, 228, 228);
|
||||
background-color: rgb(35, 35, 48);
|
||||
}
|
||||
h1 {
|
||||
text-align: center;
|
||||
}
|
||||
table {
|
||||
width: 60%;
|
||||
}
|
||||
td {
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Результаты моделей классификации</h1>
|
||||
<table>
|
||||
<tr>
|
||||
<th style="width: 15%;">Модель</th>
|
||||
<th style="width: 15%;">Точность</th>
|
||||
<th>График</th>
|
||||
</tr>
|
||||
{% for model_name, results in model_results.items() %}
|
||||
<tr>
|
||||
<td>{{ model_name }}</td>
|
||||
<td>{{ results['accuracy'] }}</td>
|
||||
<td>
|
||||
<img src="data:image/png;base64,{{ plot_images[model_name] }}" width="400" height="300">
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user