Ведущий проект по прогнозированию сердечно-сосудистых заболеваний в 2022 г.
Опубликовано: 2021-05-26Добро пожаловать в это пошаговое руководство нашего проекта по прогнозированию сердечных заболеваний. Здесь вы создадите модель машинного обучения, которая предсказывает, может ли пациент быть диагностирован с болезнью сердца или нет.
Для работы над этим проектом вы должны быть знакомы с основами машинного обучения и анализа данных. Этот проект требует, чтобы вы были знакомы с несколькими алгоритмами ML, включая Random Forest, K-NN (K-ближайший сосед) и многими другими.
Мы будем обрабатывать данные, фильтровать и тестировать шесть различных алгоритмов машинного обучения, чтобы определить, какой из них предлагает оптимальные результаты для нашего набора данных. Давай начнем:
Оглавление
Цель проекта по прогнозированию сердечных заболеваний
Цель нашего проекта по прогнозированию сердечных заболеваний — определить, следует ли диагностировать у пациента сердечные заболевания или нет, что является бинарным результатом, поэтому:
Положительный результат = 1, у пациента будет диагностировано заболевание сердца.
Отрицательный результат = 0, у пациента не будет диагностировано заболевание сердца.
Мы должны найти, какая модель классификации имеет наибольшую точность, и выявить корреляции в наших данных. Наконец, мы также должны определить, какие признаки оказывают наибольшее влияние на диагностику сердечно-сосудистых заболеваний.
Функции
Мы используем следующие 13 функций (X), чтобы определить наш предиктор (Y):
- Возраст.
- Пол: 1 = мужской, 0 = женский.
- (cp) тип боли в груди (4 значения – порядковый номер), 1-е значение: типичная стенокардия, 2-е значение: атипичная стенокардия, 3-е значение: неангинозная боль, 4-е значение: бессимптомная.
- (trestbps) артериальное давление в покое.
- (хол) сывороточный холестерин.
- (Fbs) – уровень сахара в крови натощак > 120 мг/дл.
- (restecg) – результаты электрокардиографии в покое.
- (талах) – максимальная достигнутая частота сердечных сокращений.
- (exang) – стенокардия, вызванная физической нагрузкой.
- (старый пик) – депрессия ST, вызванная физической нагрузкой, по сравнению с состоянием покоя.
- (slope) – наклон пикового сегмента ST при нагрузке.
- (ca) – количество крупных сосудов, окрашенных при рентгеноскопии.
- (thal) – максимальная достигнутая частота сердечных сокращений (порядковый номер), 3 = нормальная, 6 = фиксированный дефект, 7 = обратимый дефект.
Шаг № 1: Обработка данных
Сначала мы рассмотрим набор данных, с которым мы работаем, преобразовав его в более простой и понятный формат. Это помогло бы нам более правильно использовать данные.
импортировать numpy как np
импортировать панд как pd
импортировать matplotlib как plt
импортировать Seaborn как sns
импортировать matplotlib.pyplot как plt
filePath = '/Пользователи/обновление/Загрузки/наборы данных-33180-43520-heart.csv'
данные = pd.read_csv (путь к файлу)
данные.голова(5)
возраст | секс | ср | trestbps | хол | ФБС | восстановить | талах | эксанг | старый пик | склон | ок | Тал | цель | |
0 | 63 | 1 | 3 | 145 | 233 | 1 | 0 | 150 | 0 | 2.3 | 0 | 0 | 1 | 1 |
1 | 37 | 1 | 2 | 130 | 250 | 0 | 1 | 187 | 0 | 3,5 | 0 | 0 | 2 | 1 |
2 | 41 | 0 | 1 | 130 | 204 | 0 | 0 | 172 | 0 | 1,4 | 2 | 0 | 2 | 1 |
3 | 56 | 1 | 1 | 120 | 236 | 0 | 1 | 178 | 0 | 0,8 | 2 | 0 | 2 | 1 |
4 | 57 | 0 | 0 | 120 | 354 | 0 | 1 | 163 | 1 | 0,6 | 2 | 0 | 2 | 1 |
Так же, как вышеприведенный код помог нам отобразить наши данные в табличной форме, мы будем использовать следующий код для дальнейшей обработки данных:
print("(Строки, столбцы): " + str(data.shape))
столбцы данных
Приведенный выше код покажет общее количество строк и столбцов, а также имена столбцов в нашем наборе данных. Общее количество строк и столбцов в наших данных составляет 303 и 14 соответственно. Теперь мы найдем количество уникальных значений для каждой переменной, используя следующую функцию:
data.nunique (ось = 0
Точно так же следующая функция суммирует среднее значение, количество, стандартное отклонение, минимум и максимум для числовых переменных:
данные.описать()
Шаг № 2: Проведение EDA
Теперь, когда мы завершили обработку данных, мы можем выполнить исследовательский анализ данных. Вот основные задачи, которые мы будем выполнять на этом этапе нашего проекта прогнозирования сердечно-сосудистых заболеваний:
Поиск корреляций
Мы создадим матрицу корреляции, которая поможет нам увидеть корреляции между различными переменными:
корр = данные.корр()
plt.subplots (figsize = (15,10))
sns.heatmap(corr, xticklabels=corr.columns, yticklabels=corr.columns, annot=True, cmap=sns.diverging_palette(220, 20, as_cmap=True))
sns.heatmap(corr, xticklabels=corr.columns,
yticklabels=corr.columns,
аннот = Верно,
cmap=sns.diverging_palette(220, 20, as_cmap=True))
Чтобы найти немедленную корреляцию между функциями, мы также можем создать парные графики. Мы будем использовать небольшие парные графики только с непрерывными переменными, чтобы глубже изучить отношения:
subData = data[['age','trestbps','chol','thalach','oldpeak']]
sns.pairplot(подданные)
Использование скрипичных и коробочных диаграмм
С графиками Violin и Box мы можем видеть основную статистику и распределение наших данных. Вы можете использовать его для сравнения распределения конкретной переменной по разным категориям. Это также поможет нам выявить выбросы в данных. Используйте следующий код:
plt.figure(figsize=(12,8))
sns.violinplot (x = «цель», y = «старый пик», оттенок = «пол», внутренний = «квартиль», данные = данные)
plt.title("Уровень Талаха против сердечных заболеваний",fontsize=20)
plt.xlabel («Цель по сердечным заболеваниям», размер шрифта = 16)
plt.ylabel («Уровень Талаха», размер шрифта = 16)
На первом графике Violin and Box мы обнаруживаем, что положительные пациенты имеют более низкую медиану депрессии ST, чем отрицательные пациенты. Итак, мы будем использовать график для сравнения уровня депрессии ST и болезни сердца.
plt.figure(figsize=(12,8))
sns.boxplot (x = «цель», y = «талах», оттенок = «пол», данные = данные)
plt.title("Уровень депрессии ST по сравнению с болезнью сердца", fontsize=20)
plt.xlabel («Цель по сердечным заболеваниям», fontsize = 16)
plt.ylabel («Депрессия ST, вызванная физическими упражнениями, по сравнению с состоянием покоя», fontsize = 16)
Здесь у положительных пациентов медиана уровня депрессии ST была выше по сравнению с отрицательными пациентами.
Фильтрация данных
Теперь мы отфильтруем данные по положительным и отрицательным пациентам с сердечными заболеваниями. Мы начнем с фильтрации данных по пациентам с положительными заболеваниями сердца:
pos_data = данные[данные['цель']==1]
pos_data.describe()
Точно так же мы будем фильтровать данные по пациентам с отрицательным заболеванием сердца:
pos_data = данные[данные['цель']==0]
pos_data.describe()
Шаг № 3: Использование алгоритмов машинного обучения
Подготовка
Здесь мы подготовим данные для обучения, назначив функции X, а последний столбец — предиктору Y:
X = data.iloc[:, :-1].значения
Y = data.iloc[:, -1}.значения
Затем мы разделим данные на два набора: обучающий набор и тестовый набор:
из sklearn.model_selection импорта train_test_split
x_train, x_test, y_train, y_test = train_test_split (X, y, test_size = 0,2, random_state = 1)
Наконец, мы нормализуем данные, чтобы их распределение имело среднее значение 0:
из sklearn.preprocessing импортировать StandardScaler
sc = Стандартный масштаб()
x_train = sc.fit_transform (x_train)
x_test = sc.transform (x_test)
Обучение модели
В этом разделе мы будем использовать несколько алгоритмов машинного обучения и найдем тот, который обеспечивает наивысшую точность:
1-я модель: логистическая регрессия
из sklearn.metrics импортаclassification_report
из sklearn.linear_model импортировать LogisticRegression
model1 = LogisticRegression(random_state=1) # получить экземпляр модели
model1.fit(x_train, y_train) # Модель обучения/подгонки
y_pred1 = model1.predict(x_test) # получить прогнозы y
print(classification_report(y_test, y_pred1)) # точность вывода
Точность этой модели составила 74%.
2-я модель: K-NN (K-ближайшие соседи)
из sklearn.metrics импортаclassification_report
из sklearn.neighbours импортировать KNeighboursClassifier
model2 = KNeighboursClassifier() # получить экземпляр модели
model2.fit(x_train, y_train) # Модель обучения/подгонки
y_pred2 = model2.predict(x_test) # получить прогнозы y
print(classification_report(y_test, y_pred2)) # точность вывода
Точность этой модели составила 75%.
3-я модель: машина опорных векторов (SVM)
из sklearn.metrics импортаclassification_report
из sklearn.svm импортировать SVC
model3 = SVC(random_state=1) # получить экземпляр модели
model3.fit(x_train, y_train) # Модель обучения/подгонки
y_pred3 = model3.predict(x_test) # получить прогнозы y
print(classification_report(y_test, y_pred3)) # точность вывода
Точность этой модели составила 75%.
4-я модель: наивный байесовский классификатор
из sklearn.metrics импортаclassification_report
из sklearn.naive_bayes импортировать GaussianNB
model4 = GaussianNB() # получить экземпляр модели
model4.fit(x_train, y_train) # Модель обучения/подгонки
y_pred4 = model4.predict(x_test) # получить прогнозы y
print(classification_report(y_test, y_pred4)) # точность вывода
Точность этой модели составила 77%.
5-я модель: случайный лес
из sklearn.metrics импортаclassification_report
из sklearn.ensemble импортировать RandomForestClassifier
model6 = RandomForestClassifier(random_state=1)# получить экземпляр модели
model6.fit(x_train, y_train) # Модель обучения/подгонки
y_pred6 = model6.predict(x_test) # получить прогнозы y
print(classification_report(y_test, y_pred6)) # точность вывода
Эта модель имела самую высокую точность 80%.
6-я модель: XGBoost
из xgboost импортировать XGBClassifier
model7 = XGBClassifier (random_state = 1)
model7.fit(x_train, y_train)
y_pred7 = model7.predict(x_test)
печать (классификационный_отчет (y_test, y_pred7))
Точность этой модели составила 69%.
После тестирования различных алгоритмов машинного обучения мы обнаружили, что лучшим является случайный лес, поскольку он обеспечивает оптимальную точность 80%.
Имейте в виду, что любой процент точности выше 80% слишком хорош, чтобы быть правдой, и это может быть связано с переоснащением. Вот почему 80% — оптимальное число для достижения.
Шаг № 4: нахождение оценки характеристик
Здесь мы найдем оценку функции, которая поможет нам принять важные решения, сообщая нам, какая функция была наиболее полезной для нашей модели:
# получить важность
важность = model6.feature_importances_
# обобщить важность функции
для i, v в перечислении (важность):
print('Особенность: %0d, Оценка: %.5f' % (i,v))
Мы обнаружили, что основными четырьмя признаками были тип боли в груди (cp), максимально достигнутая частота сердечных сокращений (thalach), количество крупных сосудов (ca) и депрессия ST, вызванная физической нагрузкой по сравнению с состоянием покоя (oldpeak).
Заключение
Поздравляем, вы успешно завершили проект по прогнозированию сердечно-сосудистых заболеваний. У нас было 13 характеристик, из которых мы обнаружили, что наиболее важными являются тип боли в груди и достигнутая максимальная частота сердечных сокращений.
Мы протестировали шесть различных алгоритмов машинного обучения и обнаружили, что наиболее точным алгоритмом является случайный лес. Вы должны протестировать эту модель с помощью тестового набора и посмотреть, насколько хорошо эта модель работает.
С другой стороны, если вы хотите узнать больше о машинном обучении и искусственном интеллекте, мы рекомендуем посетить наши курсы по искусственному интеллекту . Вы будете учиться непосредственно у отраслевых экспертов и работать над отраслевыми проектами, которые позволят вам проверить свои знания. Обязательно ознакомьтесь с ними, если вы заинтересованы в карьере в области машинного обучения и искусственного интеллекта.
Если вам интересно узнать больше о машинном обучении, ознакомьтесь с программой Executive PG IIIT-B и upGrad по машинному обучению и искусственному интеллекту, которая предназначена для работающих профессионалов и предлагает более 450 часов интенсивного обучения, более 30 тематических исследований и заданий, IIIT -B статус выпускника, 5+ практических практических проектов и помощь в трудоустройстве в ведущих фирмах.
Как машинное обучение помогает сектору здравоохранения?
Сегодня в сфере здравоохранения есть много интересных применений машинного обучения. Одним из основных его применений является обнаружение и диагностика заболеваний. Начиная с обнаружения редких генетических заболеваний и заканчивая ранними стадиями рака, машинное обучение оказалось очень полезным в этом отношении. Есть много других применений, таких как обнаружение лекарств, визуальная диагностика, ведение интеллектуальных медицинских записей, профилактическая медицина, такая как изменение поведения, прогнозирование вспышек и рецидивов заболеваний, улучшение лучевой терапии, эффективные клинические исследования и испытания пациентов и многое другое.
Как я могу стать специалистом по данным в области здравоохранения?
Учитывая, что отрасль здравоохранения является одним из самых крупных источников данных в мире, ожидается, что спрос на специалистов по данным в области здравоохранения будет расти. Объединение здравоохранения и науки о данных — многообещающий и плодотворный путь, и начинающие специалисты по данным в области здравоохранения могут воспользоваться этой ситуацией. Наука о данных в здравоохранении — относительно новая область; это смесь статистики, математики, биоинформатики, информатики и эпидемиологии. Основа и набор навыков для того, чтобы стать специалистом по данным, одинаковы, но вы будете сосредоточены исключительно на медицинских данных и приложениях. Знание компьютерного программирования с использованием Python, R и SAS будет полезно. Лучшие мировые университеты предлагают специализированные программы последипломного образования в области науки о данных в здравоохранении.
Нужно ли врачам знать науку о данных?
Поскольку искусственный интеллект и наука о данных быстро становятся популярными, это больше, чем просто модные словечки в секторе здравоохранения. Огромное значение этих технологий для извлечения клинически полезной информации из массивных массивов данных побуждает врачей и терапевтов проявлять новый интерес к этим областям. Знание науки о данных дает врачам дополнительное преимущество, поскольку они могут быстро и точно диагностировать редкие заболевания, используя многопараметрическую информацию и огромные наборы данных, полученные в результате непрерывного мониторинга. ИИ помогает ставить диагноз с помощью эффективных методов визуализации данных и помогает оценить статистическую значимость клинических исследований.