Merge pull request 'tepechin_kirill_lab_4' (#227) from tepechin_kirill_lab_4 into main
Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/227
This commit is contained in:
commit
1dca1eb91b
62
tepechin_kirill_lab_4/README.md
Normal file
62
tepechin_kirill_lab_4/README.md
Normal file
@ -0,0 +1,62 @@
|
||||
## Лабораторная работа №4, ПИбд-42 Тепечин Кирилл
|
||||
|
||||
### Датасет:
|
||||
#### Ссылка:
|
||||
[Smoking and Drinking Dataset with body signal](https://www.kaggle.com/datasets/sooyoungher/smoking-drinking-dataset/data)
|
||||
#### Подробности датасета
|
||||
| Столбец | Пояснение |
|
||||
|------------------|:-----------------------------------------------------------------:|
|
||||
| sex | Пол(мужской, женский) |
|
||||
| age | Возраст(округлён) |
|
||||
| height | Рост(округлён) [см] |
|
||||
| weight | [кг] |
|
||||
| sight_left | зрение (левый) |
|
||||
| sight_left | зрение (правый) |
|
||||
| hear_left | слух (левое): 1 (нормальное), 2 (ненормальное) |
|
||||
| hear_right | слух (правое): 1 (нормальное), 2 (ненормальное) |
|
||||
| SBP | Систолическое артериальное давление [мм рт. ст.] |
|
||||
| DBP | Диастолическое артериальное давление [мм рт. ст.] |
|
||||
| BLDS | глюкоза в крови натощак [мг/дл] |
|
||||
| tot_chole | общий холестерин [мг/дл] |
|
||||
| HDL_chole | Холестерин ЛПВП [мг/дл] |
|
||||
| LDL_chole | Холестерин ЛПНП [мг/дл] |
|
||||
| triglyceride | триглицерид [мг/дл] |
|
||||
| hemoglobin | гемоглобин [г/дл] |
|
||||
| urine_protein | белок в моче, 1(-), 2(+/-), 3(+1), 4(+2), 5(+3), 6(+4) |
|
||||
| serum_creatinine | креатинин сыворотки (крови) [мг/дл] |
|
||||
| SGOT_AST | глутамат-оксалоацетат-трансаминаза / аспартат-трансаминаза [МЕ/л] |
|
||||
| SGOT_ALT | аланиновая трансаминаза [МЕ/л] |
|
||||
| gamma_GTP | γ-глутамилтранспептидаза [МЕ/л] |
|
||||
| SMK_stat_type_cd | Степень курения: 1 (никогда), 2 (бросил), 3 (курю) |
|
||||
| DRK_YN | Пьющий или нет |
|
||||
|
||||
|
||||
### Как запустить лабораторную работу:
|
||||
|
||||
Для запуска лабораторной работы необходимо запустить файл lab4.py
|
||||
|
||||
### Используемые технологии:
|
||||
|
||||
* Python 3.12
|
||||
* pandas
|
||||
* scikit-learn
|
||||
* matplotlib
|
||||
|
||||
### Что делает лабораторная работа:
|
||||
|
||||
Эта лабораторная программа загружает данные из csv файла, выбирает признаки, нормализует данные, строит дендрограмму и оценивает качество кластеризации с помощью silhouette score.
|
||||
|
||||
### Предварительная обработка данных:
|
||||
Т.к датасет содержит слишком большое количество данных следует уменшить их размер
|
||||
````python
|
||||
data = data.sample(frac=0.01, random_state=42)
|
||||
````
|
||||
### Результат:
|
||||
![Результат](dendr.png)
|
||||
На основании этой дендрограмы можно выбрать количество кластеров, на которое разумно поделить данные (4)
|
||||
|
||||
Теперь используем метод иерархической кластеризации (AgglomerativeClustering) с 4 кластерами. Метки кластеров присваиваются данным, а затем вычисляется показатель silhouette score, который оценивает качество кластеризации.
|
||||
|
||||
![Оценка](sil.png)
|
||||
### Вывод:
|
||||
Значение в районе 0.094 может быть интерпретировано как относительно низкое, что может указывать на то, что данные не разделены очень четко в кластеры, поэтому можно сделать вывод, что метод плохо подходит для решения задачи.
|
BIN
tepechin_kirill_lab_4/dendr.png
Normal file
BIN
tepechin_kirill_lab_4/dendr.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 42 KiB |
39
tepechin_kirill_lab_4/lab4.py
Normal file
39
tepechin_kirill_lab_4/lab4.py
Normal file
@ -0,0 +1,39 @@
|
||||
import pandas as pd
|
||||
import matplotlib.pyplot as plt
|
||||
from scipy.cluster.hierarchy import dendrogram, linkage
|
||||
from sklearn.cluster import AgglomerativeClustering
|
||||
from sklearn.metrics import silhouette_score
|
||||
|
||||
# Загрузка данных
|
||||
data = pd.read_csv("smoking_drinking_dataset.csv")
|
||||
|
||||
# Уменьшаем размер данных
|
||||
data = data.sample(frac=0.01, random_state=42)
|
||||
|
||||
# Выбор подмножества признаков для кластеризации
|
||||
features = ['age', 'height', 'weight', 'waistline', 'sight_left', 'sight_right', 'hear_left', 'hear_right', 'SBP', 'DBP', 'BLDS', 'tot_chole', 'HDL_chole', 'LDL_chole', 'triglyceride', 'hemoglobin', 'urine_protein', 'serum_creatinine', 'SGOT_AST', 'SGOT_ALT', 'gamma_GTP']
|
||||
|
||||
# Выбор данных для кластеризации
|
||||
cluster_data = data[features]
|
||||
|
||||
# Нормализация данных
|
||||
normalized_data = (cluster_data - cluster_data.mean()) / cluster_data.std()
|
||||
|
||||
# Расчет матрицы связи
|
||||
linkage_matrix = linkage(normalized_data, method='ward')
|
||||
|
||||
# Построение dendrogram
|
||||
plt.figure(figsize=(16, 8))
|
||||
dendrogram(linkage_matrix, orientation='top', labels=data.index, distance_sort='descending', show_leaf_counts=True)
|
||||
plt.title('Дендрограма')
|
||||
plt.ylabel('Дистанция')
|
||||
#plt.show()
|
||||
plt.savefig("dendr.png")
|
||||
|
||||
# Оценка метода
|
||||
n_clusters = 4
|
||||
cluster_model = AgglomerativeClustering(n_clusters=n_clusters, metric='euclidean', linkage='ward')
|
||||
labels = cluster_model.fit_predict(normalized_data)
|
||||
data['cluster'] = labels
|
||||
silhouette_avg = silhouette_score(normalized_data, labels)
|
||||
print(f"Silhouette Score: {silhouette_avg}")
|
BIN
tepechin_kirill_lab_4/sil.png
Normal file
BIN
tepechin_kirill_lab_4/sil.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.7 KiB |
991347
tepechin_kirill_lab_4/smoking_drinking_dataset.csv
Normal file
991347
tepechin_kirill_lab_4/smoking_drinking_dataset.csv
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user