Merge pull request 'shadaev_anton_lab_4' (#130) from shadaev_anton_lab_4 into main

Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/130
This commit is contained in:
Alexey 2023-11-06 21:22:24 +04:00
commit 388c9e64cf
4 changed files with 5175 additions and 0 deletions

View File

@ -0,0 +1,33 @@
# IIS_2023_1
### Задание
Использовать метод кластеризации по варианту для данных из таблицы 1 по варианту(таблица 9),самостоятельно сформулировав задачу. Интерпретировать результаты и оценить, насколько хорошо он подходит для решения сформулированной вами задачи.
4. DBSCAN
### Способ запуска лабораторной работы
Выполнить скрипт `shadaev_anton_lab_4/main.py`
### Стек технологий
* `Python`: v. 3.11
* `Pandas` - библиотека, которая позволяет работать с двумерными и многомерными таблицами, строить сводные таблицы, выделять колонки, использовать фильтры по параметрам, выполнять группировку по параметрам, запускать функции (сложение, нахождение медианы, среднего, минимального, максимального значений), объединять таблицы и многое другое
* `Sklearn` - предоставляет ряд инструментов для моделирования данных, включая классификацию, регрессию, кластеризацию и уменьшение размерности.
* `Matplotlib` - это библиотека для визуализации данных в Python, предоставляющая инструменты для создания статических, анимированных и интерактивных графиков и диаграмм.
### Описание кода
1. Загрузка данных из .csv-файла.
2. Предварительная обработка данных от null-значений.
3. Отбор признаков.
4. Нормализация признаков.
5. Применение алгоритма DBScan.
6. Визуализация данных.
График:
![myplot.png](myplot.png)
### Вывод
Каждый цвет представляет собой отдельный кластер, и точки с одинаковым цветом принадлежат одному и тому же кластеру.
* Средний уровень сахара в крови варьируется (примерно) от 140 до 250.
Возраст варьируется (примерно) от 30 до 80.
* На графике видно очень много фиолетовых точек, что говорит о том, что на нашем графике очень много шума. Но по другим точкам (более светлым) уже можем отобрать какие-то данные.
В целом, применение алгоритма DBScan к признакам (age, avg_glucose_level) из данного датасета не очень эффективно. Визуально можно оценить эффективность алгоритма на 5-10%. В моем случае этот алгоритм неэффективен, т.к. алгоритм лучше работает с данными с высокой плотностью, а разделить на группы среди признаков возраст и средний уровень сахара в крови может быть проблематично, т.к. получится выделить не так много характеристик среди групп с разным возрастом. По-сути все, что мы имеем, это низкий, средний, высокий уровень сахара в крови среди разных возрастных групп.

View File

@ -0,0 +1,31 @@
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler
# Загрузка данных из .csv-файла
data = pd.read_csv('stroke_prediction_ds.csv')
# В датасете встречаются null-значения, поэтому предварительно очистим датасет от них
data = data.dropna()
# Выбор признаков (гипертензия и сердечные заболевания)
features = data[['age', 'avg_glucose_level']]
# Нормализация признаков перед применением алгоритма DBScan, что позволит алгоритму работать быстрее и давать лучшие
# результаты, так как данные будут приведены к одному виду на единой шкале
scaler = StandardScaler()
features = scaler.fit_transform(features)
# Создание экземпляра DBScan
dbscan = DBSCAN(eps=0.1, min_samples=5)
# Применение алгорита DBScan к данным
data['cluster'] = dbscan.fit_predict(features)
# Визуализация данных
plt.scatter(data['age'], data['avg_glucose_level'], c=data['cluster'])
plt.xlabel('Возраст')
plt.ylabel('Средний уровень сахара в крови')
plt.title('Кластеризация данных по возрасту и среднему уровню сахара в крови')
plt.show()

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

File diff suppressed because it is too large Load Diff