Сердечный приступ — это серьезное событие, которое возникает, когда сердце не может получать достаточное количество кислорода и питательных веществ в результате внезапной окклюзии коронарных артерий. Это состояние связано с разрывом отложений бляшек в коронарных артериях, что называется атеросклерозом, и образованием тромбов [1]. Варианты лечения могут включать немедленную медицинскую помощь, растворение тромбов или шунтирование[2]. Факторы риска сердечного приступа включают возраст, пол, генетическую предрасположенность, курение, ожирение, высокое кровяное давление и диабет [3]. Отказ от курения и употребления алкоголя, здоровое питание и регулярные физические упражнения являются одними из факторов, снижающих риск сердечного приступа.

Машинное обучение также является важной дисциплиной в здравоохранении, обеспечивая множество инновационных приложений и открытий, которые имеют большое значение во многих областях. Это технология, которая помогает анализировать существующие данные и выявлять сложные закономерности во многих областях, таких как диагностика заболеваний, поиск лекарств и уход за пациентами. Машинное обучение все чаще используется в качестве потенциального инструмента для прогнозирования и раннего выявления риска сердечного приступа. Алгоритмы машинного обучения могут анализировать большие объемы клинических и демографических данных для создания моделей для определения риска сердечного приступа. Эти модели могут помочь предоставить пациентам более эффективные и персонализированные подходы к лечению при оценке их состояния здоровья и факторов риска.

В этом исследовании процесс классификации осуществлялся путем применения метода логистической регрессии к набору данных[4] с использованием языка программирования Python. Созданные модели представляют собой статистические и вычислительные методы, используемые для распознавания закономерностей в наборе данных и для прогнозирования того, к какому классу принадлежат новые выборки.

Логистическая регрессия

Логистическая регрессия — это метод статистического анализа. Он используется для моделирования связи зависимой переменной (обычно категориальной) с одной или несколькими независимыми переменными. Этот метод оценивает вероятности с помощью логистической функции и ограничивает результаты от 0 до 1 [5]. Основная цель логистической регрессии — смоделировать влияние независимых переменных на вероятность события. Формула логистической регрессии обычно выражается как:

Где p представляет вероятность того, что зависимая переменная принадлежит классу 1, значение 1-p представляет вероятность того, что зависимая переменная принадлежит классу 0.

В этом исследовании объясняется, как создать пошаговый проект приложения с помощью языка программирования Python. Прежде всего, были тщательно рассмотрены требования проекта и даны определения в соответствии с целью проекта. Такие элементы, как определения, функции, переменные и классы, закодированы в соответствии с языком Python. Используются библиотеки Pandas, NumPy, Matplotlib, Seaborn и Scikit-Learn. На этом этапе, при обнаружении каких-либо багов или некорректной работы функционала, в коды вносились исправления и доработки.

Библиотеки, которые помогут анализировать данные, включаются в проект в первую очередь.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
from sklearn.preprocessing import StandardScaler

Существующий набор данных включается в проект.

df = pd.read_csv('heart.csv')

Он начинается с изучения данных и понимания их структуры, значений и потенциальных проблем или потенциальных проблем (например, отсутствующих данных).

df.info()

Результат должен быть следующим.

Data columns (total 14 columns):
 #   Column    Non-Null Count  Dtype  
---  ------    --------------  -----  
 0   age       303 non-null    int64  
 1   sex       303 non-null    int64  
 2   cp        303 non-null    int64  
 3   trestbps  303 non-null    int64  
 4   chol      303 non-null    int64  
 5   fbs       303 non-null    int64  
 6   restecg   303 non-null    int64  
 7   thalach   303 non-null    int64  
 8   exang     303 non-null    int64  
 9   oldpeak   303 non-null    float64
 10  slope     303 non-null    int64  
 11  ca        303 non-null    int64  
 12  thal      303 non-null    int64  
 13  target    303 non-null    int64  
dtypes: float64(1), int64(13)

Как видно, в наборе данных нет пропущенных значений данных. Чтобы увидеть такие значения, как средние значения и стандартные отклонения столбцов в наборе данных, анализ данных продолжается следующим образом.

df.describe()

Если требуется отобразить данные, принадлежащие одному столбцу, это делается следующим образом.

df['age'].describe()

Эта сгенерированная строка кода предоставляет информацию о столбце «возраст» в наборе данных, и вывод должен быть таким:

count    303.000000
mean      54.366337
std        9.082101
min       29.000000
25%       47.500000
50%       55.000000
75%       61.000000
max       77.000000
Name: age, dtype: float64

При анализе данных проверялись значения столбцов (такие как среднее значение, стандартное отклонение) и наличие отсутствующих данных. Следующий этап — визуализация данных.

Во-первых, в визуализации данных показано распределение «целевых» значений в наборе данных по «возрасту».

age_counts = df.groupby('age')['target'].value_counts().unstack()

age_counts.plot(kind='bar', stacked=True)

plt.title('Distribution of Target Values by Age')
plt.xlabel('Age')
plt.ylabel('Count')

plt.show()

Полученный результат показан на рисунке 1.

Данные могут быть визуализированы любым желаемым способом. Для визуализации данных достаточно быть читаемым и понятным. Для этого вы можете изучить библиотеки matplotlib и seaborn, которые мы используем в этом исследовании.

В визуализации данных распределение «целевых» значений в наборе данных по «холестерину» показано как вторая визуализация.

plt.scatter(df['chol'], df['target'],c=df['target'], cmap='coolwarm')
plt.xlabel('Cholesterol')
plt.ylabel('Target')
plt.title('Cholesterol vs Target Scatter Plot')
plt.colorbar(label='Target')
plt.show()

Полученный результат показан на рисунке 2.

Эти созданные графики предназначены только для иллюстративных целей. Графики можно создавать в разных вариантах.

После визуализации данных начинается моделирование существующего набора данных. Во-первых, вводятся зависимые и независимые переменные.

x = df.iloc[:,:-1].values
y = df.iloc[:,-1].values

В этой строке кода мы представили, что переменная x имеет значения всех других столбцов, кроме столбца «цель». Мы ввели переменную y в качестве значений целевого столбца.

Давайте разделим набор данных на обучающие и тестовые наборы.

X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)

Функция train_test_split – это функция, используемая для разделения набора данных на обучающий и тестовый наборы. Его функция состоит в том, чтобы разделить набор данных на обучающие и тестовые наборы данных в заданном соотношении.

Стандартизация данных важна для логистической регрессии. Таким образом можно получить более сопоставимые результаты, точно интерпретировать переменные эффекты и сделать расчеты модели более эффективными. Авторы справочного ресурса Elements of Statistical Learning подчеркивают важность стандартизации переменных в логистическом регрессионном анализе.

scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

Он обучается путем создания модели логистической регрессии.

model = LogisticRegression()
model.fit(X_train_scaled, y_train)

Оценка производится с использованием набора тестовых данных.

y_pred = model.predict(X_test_scaled)

И, наконец, оценивается производительность модели. Существует несколько методов оценки модели, таких как точность, полнота, точность, оценка f1. В этом исследовании точность использовалась для оценки производительности модели.

accuracy = accuracy_score(y_test, y_pred)

Когда мы просматриваем результат, он должен быть близок к следующему результату.

0.8524590163934426

Получение значения точности 0,85,2 означает, что правильная скорость классификации соответствующей модели составляет 85,2%. Это означает, что модель может правильно классифицировать 85,2% наблюдений в наборе данных. Высокое значение точности указывает на то, что модель в целом работает хорошо и имеет тенденцию точно предсказывать наблюдения в наборе данных. Однако важно учитывать и другие показатели производительности, поскольку дисбаланс классов в наборе данных или другие факторы могут повлиять на производительность модели.

ЗАКЛЮЧЕНИЕ

В этом исследовании были изучены результаты, полученные с использованием метода логистической регрессии. Производительность модели достигла высокого значения точности за счет правильной классификации 85% наблюдений в наборе данных. Это показывает, что модель логистической регрессии способна успешно прогнозировать зависимую переменную в нашем наборе данных. Тем не менее, дальнейшие исследования и анализ будут определять работу, которую необходимо проделать для увеличения мощности модели и получения более точных прогнозов.

ССЫЛКИ

[1] Либби, П., Беринг, Дж. Э., Бадимон, Л., Ханссон, Г. К., Динфилд, Дж., Биттенкур, М. С., … и Смит-младший, С. К. (2019). Атеросклероз. Nature Reviews: учебники по болезням, 5(1), 1–18.

[2] Национальный институт сердца, легких и крови. (2021). Острое сердечно-сосудистое заболевание. Получено с https://www.nhlbi.nih.gov/health-topics/heart-attack

[3] Бенджамин, Э. Дж., Мантнер, П., Алонсо, А., Биттенкур, М. С., Каллауэй, К. В., Карсон, А. П., … и Хан, С. С. (2019). Статистика сердечных заболеваний и инсультов — обновление 2019 г.: отчет Американской кардиологической ассоциации. Тираж, 139(10), e56-e528.

[4] Янози, Андрас, Стейнбрунн, Уильям, Пфистерер, Маттиас и Детрано, Роберт. (1988). Сердечное заболевание. Репозиторий машинного обучения UCI. https://doi.org/10.24432/C52P4X.

[5] Агрести, А. (2015). Введение в категориальный анализ данных (3-е изд.). Джон Уайли и сыновья.