Сердечный приступ — это серьезное событие, которое возникает, когда сердце не может получать достаточное количество кислорода и питательных веществ в результате внезапной окклюзии коронарных артерий. Это состояние связано с разрывом отложений бляшек в коронарных артериях, что называется атеросклерозом, и образованием тромбов [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-е изд.). Джон Уайли и сыновья.