tepechin_kirill_lab_6 #229
84
tepechin_kirill_lab_6/README.md
Normal file
84
tepechin_kirill_lab_6/README.md
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
## Лабораторная работа №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), как и модель полиномиальной регрессии демонстрируют некоторую способность предсказывать степень курения на основе данных из датасета.
|
46
tepechin_kirill_lab_6/lab6.py
Normal file
46
tepechin_kirill_lab_6/lab6.py
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
import pandas as pd
|
||||||
|
from sklearn.metrics import mean_squared_error, r2_score
|
||||||
|
from sklearn.model_selection import train_test_split, GridSearchCV
|
||||||
|
from sklearn.neural_network import MLPRegressor
|
||||||
|
|
||||||
|
# Загрузка данных
|
||||||
|
data = pd.read_csv("smoking_drinking_dataset.csv")
|
||||||
|
data = data.sample(frac=0.3, random_state=42)
|
||||||
|
# # Подготовка данных
|
||||||
|
data = pd.get_dummies(data, columns=['sex', 'DRK_YN'], drop_first=True)
|
||||||
|
|
||||||
|
# Разделение данных на признаки (X) и целевую переменную (y)
|
||||||
|
X = data.drop(columns=['SMK_stat_type_cd'])
|
||||||
|
y = data['SMK_stat_type_cd']
|
||||||
|
|
||||||
|
# Разделение данных
|
||||||
|
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
|
||||||
|
|
||||||
|
# Создание и обучение модели
|
||||||
|
|
||||||
|
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')
|
||||||
|
#model = MLPRegressor(random_state=42)
|
||||||
|
model.fit(X_train, y_train)
|
||||||
|
|
||||||
|
# Предсказание на тестовом наборе
|
||||||
|
predictions = model.predict(X_test)
|
||||||
|
|
||||||
|
# Оценка модели
|
||||||
|
mse = mean_squared_error(y_test, predictions)
|
||||||
|
r2 = r2_score(y_test, predictions)
|
||||||
|
|
||||||
|
print(f'Mean Squared Error: {mse}')
|
||||||
|
print(f'R-squared: {r2}')
|
||||||
|
|
||||||
|
# Выбор оптимальных параметров c помощью GridSearchCV
|
||||||
|
# param_grid = {'hidden_layer_sizes': [(50,50,50), (50,100,50), (100,1), (200,100)],
|
||||||
|
# 'activation': ['relu','tanh','logistic'],
|
||||||
|
# 'alpha': [0.0001, 0.05],
|
||||||
|
# 'max_iter': [50, 100, 500, 1000],
|
||||||
|
# 'learning_rate': ['constant','adaptive'],
|
||||||
|
# 'solver': ['adam', 'sgd']}
|
||||||
|
# estimator=MLPRegressor(max_iter=10000, random_state=42)
|
||||||
|
# grid = GridSearchCV(estimator, param_grid, n_jobs= -1, cv=5)
|
||||||
|
# grid.fit(X_train, y_train)
|
||||||
|
#
|
||||||
|
# print(grid.best_params_)
|
991347
tepechin_kirill_lab_6/smoking_drinking_dataset.csv
Normal file
991347
tepechin_kirill_lab_6/smoking_drinking_dataset.csv
Normal file
File diff suppressed because it is too large
Load Diff
BIN
tepechin_kirill_lab_6/test1.png
Normal file
BIN
tepechin_kirill_lab_6/test1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.2 KiB |
BIN
tepechin_kirill_lab_6/test2.png
Normal file
BIN
tepechin_kirill_lab_6/test2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.6 KiB |
BIN
tepechin_kirill_lab_6/test3.png
Normal file
BIN
tepechin_kirill_lab_6/test3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.5 KiB |
BIN
tepechin_kirill_lab_6/test4.png
Normal file
BIN
tepechin_kirill_lab_6/test4.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.3 KiB |
Loading…
Reference in New Issue
Block a user