Add lab4
This commit is contained in:
parent
a9af6c3c37
commit
d5cd684a98
33
shadaev_anton_lab_4/README.md
Normal file
33
shadaev_anton_lab_4/README.md
Normal 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%. В моем случае этот алгоритм неэффективен, т.к. алгоритм лучше работает с данными с высокой плотностью, а разделить на группы среди признаков возраст и средний уровень сахара в крови может быть проблематично, т.к. получится выделить не так много характеристик среди групп с разным возрастом. По-сути все, что мы имеем, это низкий, средний, высокий уровень сахара в крови среди разных возрастных групп.
|
@ -1 +1,31 @@
|
|||||||
print('test')
|
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()
|
||||||
|
BIN
shadaev_anton_lab_4/myplot.png
Normal file
BIN
shadaev_anton_lab_4/myplot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 81 KiB |
5111
shadaev_anton_lab_4/stroke_prediction_ds.csv
Normal file
5111
shadaev_anton_lab_4/stroke_prediction_ds.csv
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user