Merge pull request 'shadaev_anton_lab_6' (#136) from shadaev_anton_lab_6 into main
Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/136
This commit is contained in:
commit
52431a867c
47
shadaev_anton_lab_6/README.md
Normal file
47
shadaev_anton_lab_6/README.md
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
# IIS_2023_1
|
||||||
|
### Задание
|
||||||
|
Использовать нейронную сеть (четные варианты –MLPRegressor, нечетные –MLPClassifier) для данных из таблицы 1 по варианту, самостоятельно сформулировав задачу. Интерпретировать результаты и оценить, насколько хорошо она подходит для решения сформулированной вами задачи.
|
||||||
|
|
||||||
|
29 Вариант. MLPClassifier.
|
||||||
|
|
||||||
|
### Способ запуска лабораторной работы
|
||||||
|
Выполнить скрипт `shadaev_anton_lab_6/main.py`, после которого результат будет выведен в консоль.
|
||||||
|
|
||||||
|
### Стек технологий
|
||||||
|
* `Python`: v. 3.11
|
||||||
|
* `Pandas` - библиотека, которая позволяет работать с двумерными и многомерными таблицами, строить сводные таблицы, выделять колонки, использовать фильтры по параметрам, выполнять группировку по параметрам, запускать функции (сложение, нахождение медианы, среднего, минимального, максимального значений), объединять таблицы и многое другое
|
||||||
|
* `Sklearn` - библиотека, которая предоставляет ряд инструментов для моделирования данных, включая классификацию, регрессию, кластеризацию и уменьшение размерности.
|
||||||
|
|
||||||
|
### Описание кода
|
||||||
|
|
||||||
|
1. Загрузка данных - Сначала загружаются данные из файла `'stroke_prediction_ds.csv'` с помощью функции `pd.read_csv()`.
|
||||||
|
|
||||||
|
1. Выделение признаков и целевой переменной - Затем выбираются признаки `'hypertension'`, `'heart_disease'` и `'avg_glucose_level'` в качестве входных данных, а `'age'` выбирается в качестве целевой переменной.
|
||||||
|
|
||||||
|
1. Определение категорий для целевой переменной - Целевая переменная `'age'` делится на категории с помощью функции `'pd.qcut()'`. Это делается для преобразования непрерывной переменной в категориальную.
|
||||||
|
|
||||||
|
1. Разделение данных на обучающий и тестовый наборы - Данные затем разделяются на обучающий и тестовый наборы с использованием функции `train_test_split()`.
|
||||||
|
|
||||||
|
1. Нормализация данных - Нормализация данных выполняется с помощью класса `MinMaxScaler` из библиотеки `sklearn`. Это делается для того, чтобы все признаки были в одном масштабе, что может улучшить производительность модели.
|
||||||
|
|
||||||
|
1. Обучение модели - Далее создается и обучается модель `MLPClassifier` (многослойный перцептрон), которая применяется для классификации данных.
|
||||||
|
|
||||||
|
1. Предсказание на тестовых данных - После обучения модели производятся предсказания на тестовых данных.
|
||||||
|
|
||||||
|
1. Оценка производительности модели - После предсказания модели оценивается с помощью метрик точности (`accuracy_score`) и отчета классификации (`classification_report`).
|
||||||
|
|
||||||
|
1. Вывод результатов - Наконец, результаты оценок модели выводятся на экран.
|
||||||
|
|
||||||
|
|
||||||
|
Результат:
|
||||||
|
|
||||||
|
![img.png](img.png)
|
||||||
|
|
||||||
|
### Вывод
|
||||||
|
* Точность (Accuracy) - это общая метрика, которая измеряет долю правильных прогнозов от общего количества прогнозов - в моем случае составляет ~0.48, что означает, что модель правильно предсказала 48% случаев
|
||||||
|
* Точность (Precision) - это доля правильных прогнозов среди всех прогнозов, сделанных моделью - в моем случае, например, точность для класса "18 лет" составляет 0.43, что означает, что из всех случаев, когда модель предсказывала "18 лет", на самом деле было "18 лет" в 43% случаев.
|
||||||
|
* Полнота (Recall) - это доля правильных прогнозов среди всех фактических положительных случаев - в моем случае, например, полнота для класса "18 лет" составляет 0.93, что означает, что из всех фактических случаев "18 лет", модель правильно предсказала в 93% случаях.
|
||||||
|
* F1-score - это среднее гармоническое точности и полноты, и оно дает общее представление о том, насколько хорошо модель работает на данном классе - в моем случае, например, F1-score для класса "18 лет" составляет 0.59.
|
||||||
|
* Поддержка (Support) - это количество наблюдений в каждом классе - в моем случае, например, поддержка для класса "18 лет" составляет 352.
|
||||||
|
|
||||||
|
Общая точность составляет 0.48, что указывает на то, что модель в целом работает не очень хорошо.
|
BIN
shadaev_anton_lab_6/img.png
Normal file
BIN
shadaev_anton_lab_6/img.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 54 KiB |
30
shadaev_anton_lab_6/main.py
Normal file
30
shadaev_anton_lab_6/main.py
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import pandas as pd
|
||||||
|
from sklearn.metrics import accuracy_score, classification_report
|
||||||
|
from sklearn.model_selection import train_test_split
|
||||||
|
from sklearn.neural_network import MLPClassifier
|
||||||
|
from sklearn.preprocessing import MinMaxScaler
|
||||||
|
|
||||||
|
# Загрузка данных, выделение признаков и целевой переменной
|
||||||
|
data = pd.read_csv('stroke_prediction_ds.csv')
|
||||||
|
X = data[['hypertension', 'heart_disease', 'avg_glucose_level']]
|
||||||
|
y = pd.qcut(data['age'], q=3, labels=['18 лет', '18-55 лет', '55+ лет'])
|
||||||
|
|
||||||
|
# Разделение данных на обучающий и тестовый наборы
|
||||||
|
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
|
||||||
|
|
||||||
|
# Нормализация данных
|
||||||
|
scaler = MinMaxScaler()
|
||||||
|
X_train, X_test = scaler.fit_transform(X_train), scaler.transform(X_test)
|
||||||
|
|
||||||
|
# Создание и обучение MLPClassifier
|
||||||
|
mlp_classifier = MLPClassifier(hidden_layer_sizes=(100, 50), max_iter=1000, random_state=42)
|
||||||
|
mlp_classifier.fit(X_train, y_train)
|
||||||
|
|
||||||
|
# Предсказание на тестовых данных, оценка производительности модели и вывод результатов
|
||||||
|
y_pred = mlp_classifier.predict(X_test)
|
||||||
|
accuracy = accuracy_score(y_test, y_pred)
|
||||||
|
class_report = classification_report(y_test, y_pred)
|
||||||
|
|
||||||
|
print(f'Accuracy: {accuracy}')
|
||||||
|
print('Classification Report:')
|
||||||
|
print(class_report)
|
5111
shadaev_anton_lab_6/stroke_prediction_ds.csv
Normal file
5111
shadaev_anton_lab_6/stroke_prediction_ds.csv
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user