Машинное обучение зарекомендовало себя как чрезвычайно полезный инструмент в мире науки, медицины, бизнеса и буквально во всех других приложениях, связанных с данными и желанием узнать, что может произойти в будущем. Здесь, в качестве кульминации методов, которые я изучил за последние несколько месяцев в своем курсе ML, ITP 449, я создаю коллекцию моделей для одного из самых классических применений ML — здоровья человека. В частности, я изучаю набор данных об сердечных приступах и ищу наиболее эффективную модель. Данные можно взять здесь:



Вот как выглядят необработанные данные в кадре данных. Каждое имя столбца является определенным медицинским атрибутом:

  • Возраст : Возраст пациента
  • Пол : Пол пациента
  • exang: стенокардия, вызванная физической нагрузкой (1 = да; 0 = нет)
  • ca: количество крупных сосудов (0–3)
  • cp : Тип боли в груди Тип боли в груди (Значение 1: типичная стенокардия, Значение 2: атипичная стенокардия, Значение 3: неангинозная боль, Значение 4: бессимптомная)
  • trtbps: артериальное давление в покое (в мм рт. ст.)
  • chol : холестораль в мг/дл, полученный с помощью датчика ИМТ
  • fbs: (уровень сахара в крови натощак > 120 мг/дл) (1 = верно; 0 = неверно)
  • rest_ecg : результаты электрокардиографии в покое (значение 0: нормальное значение, значение 1: наличие аномалии ST-T (инверсия зубца T и/или подъем или депрессия сегмента ST > 0,05 мВ), значение 2: указание на возможную или определенную гипертрофию левого желудочка по Эстесу критерии)
  • Талах: достигнута максимальная частота сердечных сокращений
  • Результат: Вероятность сердечного приступа: 0 = меньше вероятность сердечного приступа 1 = больше вероятность сердечного приступа

Поскольку я пытаюсь предсказать сердечные приступы, моей целевой переменной будет последний столбец: выход или вероятность сердечных приступов. Это двоичный тип данных — есть только две возможности, 1 или 0, поэтому я предпочту такие модели, как деревья решений, логистическая регрессия и ансамбли, а не что-то вроде линейной регрессии.

Прежде чем я начну строить модели, я хочу немного больше узнать о своих данных. В частности, я хочу знать, как выглядит разброс атрибутов и насколько сбалансирована моя цель (ранее я пытался построить модель, используя данные о пациентах, перенесших инсульт, которые были слишком несбалансированными, и обнаружил, что мои модели будут работать не лучше, чем базовый уровень). Для этого я использовал графы matplotlib.

Я также хотел знать, какие признаки больше всего коррелируют с вероятностью сердечного приступа. Чтобы найти это, я нашел парную корреляцию, используя df.corr(), а также построил парный график, используя модуль seaborn.

Затем я построил оценщик точности базовой модели, чтобы сравнить с ним мои модели. Я создал разделение тест/поезд 70/30 со случайным состоянием 2020.

ЛогРег:

Моей первой построенной моделью была логистическая регрессия. По сравнению с моим базовым уровнем он работал прилично — с точностью около 0,81. Я оценил модель, используя metrics.confusion_matrix и metrics.classification _report.

Древо решений:

Дерево решений работало немного хуже, чем логистическая регрессия, с точностью около 0,8.

Случайные леса, бустинг и классификатор голосования:

Перед запуском модели типа ансамблевого метода я нормализовал данные, чтобы каждая точка данных представляла значение от 0 до 1 (что необходимо для этих моделей). Затем я провел еще одну базовую оценку:

Показатели точности для случайных лесов, бустинга и голосования:

Из трех ансамблевых методов наиболее эффективной моделью был классификатор голосования случайных лесов, логарифмическая регрессия, SVC и деревья решений. С показателем точности 0,835 он также превзошел логистическую регрессию и является наиболее идеальной моделью для этого приложения.