IIS_2023_1/tepechin_kirill_lab_6/README.md

83 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Лабораторная работа №6, ПИбд-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 | Пьющий или нет |
### Как запустить лабораторную работу:
Для запуска лабораторной работы необходимо запустить файл lab6.py
### Используемые технологии:
* Python 3.12
* pandas
* scikit-learn
### Что делает лабораторная работа:
Эта лабораторная работа применяет нейронную сеть (MLPRegressor) к данным из файла для предсказания степени курения и оценивает ее эффективность используя среднеквадратичную ошибку и коэффициент детерминации (R-squared)
### Предварительная обработка данных:
Изначально датасет имеет несколько категориальных признаков : *sex* , *DRK_YN*
Преобразуем их в фиктивные переменные используя
````python
data = pd.get_dummies(data, columns=['sex', 'DRK_YN'], drop_first=True)
````
Т.к датасет содержит слишком большое количество данных следует уменшить их размер до 10%
````python
data = data.sample(frac=0.1, random_state=42)
````
### Тесты:
Изначально нейронная сеть с дефолтными параметрами показывает ужасный результат
![тест1](test1.png)
Поэтому применим GridSearchCV для оптимизации производительности модели
Выбранные параметры:
````python
model = MLPRegressor(hidden_layer_sizes=(100,1), max_iter=500, learning_rate_init=0.001, random_state=42, alpha=0.0001, activation='tanh', solver='adam')
````
Теперь протестируем сеть с новыми параметрами
![тест2](test2.png)
Сеть стала работать значительно лучше
Также стоит отметить что при уменьшении количества данных до 0.1% результат немного ухудшается
![тест3](test3.png)
Однако при увеличении до 30% остается практически неизменным
![тест4](test4.png)
### Вывод:
Результаты указывают на то, что модель нейронной сети (MLPRegressor), как и модель полиномиальной регрессии демонстрируют некоторую способность предсказывать степень курения на основе данных из датасета.