Основная цель этого проекта — предсказать, есть ли у пациента заболевание сердца или нет, при наличии некоторых клинических параметров.

В этой статье мы рассмотрим проблему классификации сердечных заболеваний в отношении различных клинических параметров, которые являются различными характеристиками, и попробуем предсказать, с большей вероятностью у пациента будет сердечная недостаточность или нет, используя алгоритмы машинного обучения. Я разделил работу на 2 части, где часть 1 включает в себя исследовательский анализ данных, очистку данных и некоторую визуализацию данных. Во второй части я продолжу масштабирование данных и использование классификаторов машинного обучения, таких как классификатор случайного леса, классификатор AdaBoost, классификатор дерева решений, классификатор K-ближайших соседей, классификатор опорных векторов и классификатор логистической регрессии, что, наконец, приведет к приемлемому результату.

Подробности и объяснения характеристик, а именно клинические параметры

Возраст (в годах),

пол — (1 = мужчина; 0 = женщина),

cp — тип боли в груди

0: Типичная стенокардия: боль в груди, связанная с уменьшением кровоснабжения сердца,

1: Атипичная стенокардия: боль в груди, не связанная с сердцем,

2: Неангинозная боль: обычно спазмы пищевода (не связанные с сердцем),

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

trestbps: артериальное давление в покое (в мм рт. ст. при поступлении в больницу) выше 130–140, как правило, вызывает беспокойство,

холестерол:› сывороточный холестерин в мг/дл сыворотка = ЛПНП + ЛПВП + 0,2 * триглицериды выше 200 вызывают беспокойство

fbs:› (уровень сахара в крови натощак › 120 мг/дл) (1 = верно; 0 = неверно) «>126» мг/дл свидетельствует о диабете

restecg:› результаты электрокардиографии в покое 0: Ничего не следует примечать 1: Аномалии ST-T могут варьироваться от легких симптомов до серьезных проблем, сигнализирующих о ненормальном сердцебиении 2: Возможная или определенная гипертрофия левого желудочка Увеличенная главная насосная камера сердца

Талах: › достигнута максимальная частота сердечных сокращений

exang :› стенокардия, вызванная физической нагрузкой (1 = да; 0 = нет)

oldpeak :› Депрессия ST, вызванная физическими упражнениями, по сравнению с состоянием покоя смотрит на стресс сердца во время физических упражнений. Нездоровое сердце будет больше подвергаться стрессу

наклон : наклон сегмента ST на пике нагрузки 0: восходящий: более высокая частота сердечных сокращений при нагрузке (редко) 1: плоский наклон: минимальное изменение (типичное здоровое сердце) 2: наклонный наклон: признаки нездорового сердца

ca — количество крупных сосудов:› (0–3) окрашенный при рентгеноскопии окрашенный сосуд означает, что врач может видеть кровь, проходящую через него, чем больше движение крови, тем лучше (нет сгустков)

thal — результат стресса с таллием: › 1,3: нормальный, 6: фиксированный дефект: раньше был дефект, но теперь все в порядке, 7: обратимый дефект: отсутствие правильного движения крови при физических нагрузках

цель — иметь заболевание сердца или нет (1=да, 0=нет) (= прогнозируемый признак)

Существуют категориальные переменные, такие как эксанг, наклон, пол, cp и т. д., которые являются категориальными. Целевая переменная — это та, в которой мы должны предсказать категорию каждого пациента.

Импортированные библиотеки

Соответствующие импортированные библиотеки:

  1. numpy: операции линейной алгебры
  2. pandas: обработка данных, фреймы данных, файлы .csv и т. д.
  3. matplotlib: для создания соответствующих графиков и графиков с помощью pyplot.
  4. seaborn: в основном используется для создания графиков подсчета, чтобы понять распределение пациентов по отношению к непациентам, и тепловых карт для корреляции между переменными.
  5. sklearn: библиотека машинного обучения для использования различных алгоритмов классификатора, упомянутых выше, и других подбиблиотек, таких как train_test_split, для разделения набора данных на обучающую и тестовую версии.
  6. StandardScaler: чтобы привести все функции к одному масштабу, чтобы их можно было правильно обучить для модели машинного обучения.
  7. sklearn.metrics: чтобы проверить работоспособность каждой модели с точки зрения точности, воспроизводимости и т. д., чтобы сравнить, какая модель лучше всех справляется с проблемой.
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import matplotlib.pyplot as plt
import seaborn as sns
#Machine learning libraries
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.metrics import recall_score, confusion_matrix, precision_score, f1_score, classification_report
from sklearn.preprocessing import StandardScaler
from sklearn import preprocessing

ИССЛЕДОВАТЕЛЬСКИЙ АНАЛИЗ ДАННЫХ (EDA)

Набор данных .csv импортируется с помощью pandas, а затем методы .describe() и .info() используются для проверки типов данных атрибутов, размера и описательной статистики фрейма данных. Фрейм данных не содержит пропущенных значений и имеет 303 строки и 14 столбцов.

165 пациентов с заболеваниями сердца и 138 пациентов без заболеваний сердца. Я переименовал некоторые столбцы для удобства, так как они были непонятны.

data['target'].value_counts()

Я использовал метод crosstab() из pandas, чтобы найти распределение по полу и распределение по возрасту среди пациентов. Возраст был предварительно преобразован в когортные группы (например, 20–40, 40–50, 50–60 и т. д.), чтобы идентифицировать группы.

pd.crosstab(index=data_eda['age_group'],columns=data_eda['target'], normalize = 'index')

Точно так же у меня есть метод .crosstab() для понимания распределения данных для таких функций, как «груди_боль_тип», «пост_кровь_сахар» и «упражнения_индуцированная_стенокардия» и т. д., чтобы назвать некоторые из них. Например, атипичная и неангинозная боль являются основными причинами заболеваний сердца, бессимптомная боль оказывает незначительное влияние, а типичная стенокардия оказывает минимальное влияние на пациента, и из приведенного выше графика также видно, что типичная стенокардия оказывает меньшее влияние на сердечно-сосудистую систему. чем другие.

Кроме того, у людей, которые занимаются спортом, больше шансов не заболеть сердечно-сосудистыми заболеваниями (23% людей, которые занимаются спортом, страдают от сердечно-сосудистых заболеваний, а 77% - нет), и наоборот, у тех, кто не занимается спортом, есть 69%-й шанс заболеть сердечно-сосудистыми заболеваниями. сердечное заболевание. Эти детали дает нам функция стенокардии, вызванной физической нагрузкой.

Подробная информация обо всех атрибутах приведена выше в разделе «Подробности и объяснение функций».

Матрица корреляции

f, ax = plt.subplots(figsize = (12,10))
sns.heatmap(data_eda.corr(),
            annot = True,
            linecolor = 'r',
            linewidths = .5,
            fmt = '.1f',
            ax = ax);

На приведенной выше тепловой карте четко указано, что нет переменных с высокой положительной корреляцией (по крайней мере, коэффициент корреляции ≥0,7 между любой переменной и «целевой» переменной), поэтому она не дает нам много информации для продолжения. Хотя есть отрицательные значения корреляции, они не очень значительны.

Я закончу первую часть здесь и продолжу часть о масштабировании и моделировании машинного обучения в следующей статье. Хотя полный код присутствует по этой ссылке https://github.com/abhigyan631/Exploratory-Data-Analysis-Projects/tree/main/Heart%20Disease%20Prediction%20using%20Machine%20Learning. Пожалуйста, также ознакомьтесь с другими репозиториями в профиле и подпишитесь на меня, если хотите. Пожалуйста, также проверьте мой Linkedin и подпишитесь на меня для получения дополнительной информации.

Подпишитесь на DDIntel Здесь.

Посетите наш сайт здесь: https://www.datadriveninvestor.com

Примените код: DDI2022, чтобы получить СКИДКУ 30% на РАСПРОДАЖУ в Черную пятницу.