machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Прогнозирование госпитализации пациентов с диабетом с помощью Scikit-Learn

Дата публикации Oct 21, 2018

Давайте использовать машинное обучение, чтобы идентифицировать пациентов с риском реадмиссии!

Введение

По мере того, как система здравоохранения движется к ценностному уходу, CMS разработала множество программ для улучшения качества обслуживания пациентов. Одна из этих программ называется программой снижения госпитализации (HRRP), что уменьшает возмещение расходов больницам с реадмиссией выше среднего. Для тех больниц, которые в настоящее время наказываются в соответствии с этой программой, одним из решений является создание вмешательств для оказания дополнительной помощи пациентам с повышенным риском реадмиссии. Но как мы идентифицируем этих пациентов? Мы можем использовать прогнозное моделирование из науки о данных для определения приоритетов пациентов.

Одна группа пациентов с повышенным риском госпитализации и реадмиссии - это диабет. Диабет - это заболевание, которым страдают приблизительно 1 из 10 пациентов в Соединенных Штатах. По словам Остлинга и др., У пациентов с диабетом вероятность госпитализации почти вдвое выше, чем у населения в целом (Остлинг и др. 2017). Поэтому в этой статье я остановлюсь на прогнозировании госпитализации пациентов с диабетом.

В этом проекте я покажу, как построить модель, предсказывающую повторный доступ в Python, используя следующие шаги

  • исследование данных
  • особенность техники
  • учебное здание / валидация / тестовые образцы
  • выбор модели
  • оценка модели

Вы можете подписаться на блокнот Jupyter на моем github (https://github.com/andrewwlong/diabetes_readmission).

Определение проекта

Предскажите, будет ли пациент с диабетом вновь госпитализирован в течение 30 дней.

Исследование данных

Данные, которые используются в этом проекте, изначально поступают из хранилища машинного обучения UCI (ссылка). Данные состоят из более чем 100000 случаев госпитализации пациентов с диабетом из 130 больниц США в период с 1999 по 2008 год.

В этом проекте мы будем использовать Python для построения прогнозирующей модели. Давайте начнем с загрузки данных и изучения некоторых столбцов.

Кратко, просматривая столбцы данных, мы можем видеть, что есть некоторые столбцы идентификации, некоторые числовые столбцы и некоторые категориальные (свободные текстовые) столбцы. Эти столбцы будут описаны более подробно ниже.

Есть некоторые пропущенные данные, которые обозначены знаком вопроса (?). Об этом мы поговорим в разделе «Разработка функций»

Самый важный столбец здесьreadmitted, который сообщает нам, был ли пациент госпитализирован в течение 30 дней, более 30 дней или не поступил повторно.

Еще один важный столбецdischarge_disposition_id, который говорит нам, куда пациент отправился после госпитализации. Если мы посмотрим на IDs_mapping.csv, предоставленный UCI, то увидим, что 11,13,14,19,20,21 связаны со смертью или хосписом. Мы должны удалить эти образцы из прогнозирующей модели, так как они не могут быть повторно приняты.

Теперь давайте определим выходную переменную для нашей двоичной классификации. Здесь мы попытаемся предсказать вероятность повторного госпитализации пациента в течение 30 дней после выписки.

Давайте определим функцию для расчета распространенности населения, которая ремиттируется с 30 днями.

Около 11% населения повторно госпитализировано. Это представляет собой несбалансированную проблему классификации, поэтому мы рассмотрим ее ниже.

Из дальнейшего анализа столбцов мы видим, что есть сочетание категориальных (не числовых) и числовых данных. Несколько вещей, на которые стоит обратить внимание,

  • встреча_идентификатор и пациент_nbr: это просто идентификаторы, а не полезные переменные
  • возраст и вес: категоричны в этом наборе данных
  • admission_type_id, dump_disposition_id, admission_source_id: здесь числовые значения, но являются идентификаторами (см. IDs_mapping). Их следует считать категоричными.
  • examide и citoglipton имеют только 1 значение, поэтому мы не будем использовать эти переменные
  • diag1, diag2, diag3 - категоричны и имеют много значений. Мы не будем использовать их как часть этого проекта, но вы можете сгруппировать эти коды ICD, чтобы уменьшить размерность. Мы будем использовать number_diagnoses, чтобы получить часть этой информации.
  • medical_speciality - имеет много категориальных переменных, поэтому мы должны учитывать это при создании функций.

Характеристика

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

В этом наборе данных пропущенные цифры были заполнены знаком вопроса. Давайте заменим его представлением nan.

Числовые характеристики

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

Давайте проверим, есть ли какие-либо пропущенные значения в числовых данных.

Категориальные Особенности

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

Первый набор категориальных данных, с которыми мы будем иметь дело, это следующие столбцы:

Из наших категорических особенностей,race,payer_code, а такжеmedical_specialtyесть недостающие данные. Поскольку это категориальные данные, лучше всего просто добавить еще один категориальный тип для неизвестного с помощью функции fillna. ,

Обратите внимание, чтоmedical_specialty не содержится в нашем списке выше, потому что нам нужно сделать еще один шаг обработки. Давайте исследуем медицинскую специальность, прежде чем мы начнем с однократного кодирования.

Мы можем видеть, что большинство из них неизвестны, и что количество уменьшается довольно быстро. Мы не хотим добавлять 73 новые переменные, поскольку некоторые из них имеют только несколько выборок. В качестве альтернативы, мы можем создать новую переменную, которая имеет только 11 опций (10 лучших специальностей и затем другую категорию). Очевидно, что есть и другие варианты группирования, но это один из самых простых способов уменьшения количества возможных категорий.

Чтобы преобразовать наши категориальные функции в числа, мы будем использовать метод, называемый «горячим кодированием». В одноразовом кодировании вы создаете новый столбец для каждого уникального значения в этом столбце. Тогда значение столбца равно 1, если образец имеет это уникальное значение, или 0 в противном случае. Например, для гонки по столбцам мы создадим новые столбцы («race_Caucean», «race_AfricanAmerican» и т. Д.). Если раса пациента - кавказская, пациент получает 1 под «race_Cauansk» и 0 под остальными колонками расы. Чтобы создать эти столбцы с горячим кодированием, мы можем использоватьget_dummiesфункция, предоставляемая пандами.

Теперь проблема в том, что если мы создаем столбец для каждого уникального значения, мы коррелируем столбцы. Другими словами, значение в одном столбце можно определить, посмотрев на остальные столбцы. Например, если образец не является африканским, американским, азиатским, каузийским, Hispance или другим, это должен быть UNK. Чтобы справиться с этим, мы можем использоватьdrop_firstопция, которая будет отбрасывать первое категориальное значение для каждого столбца.

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

Теперь мы готовы сделать все наши категориальные функции

Чтобы добавить столбцы горячего кодирования в фрейм данных, мы можем использоватьconcat функция. Обязательно используйте axis = 1 для указания добавления столбцов.

Давайте сохраним имена столбцов категориальных данных, чтобы отслеживать их.

Дополнительные особенности

Последние два столбца, которые мы хотим сделатьageа такжеweight, Как правило, вы думаете о них как о числовых данных, но они категоричны в этом наборе данных, как показано ниже.

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

Давайте сопоставим их с 0 до 90 на 10 с для числовых данных.

Теперь давайте посмотрим на вес. Обратите внимание, что эта функция заполняется не очень часто.

Вместо того, чтобы создавать порядковый элемент, который мы сделали выше, давайте просто создадим переменную, чтобы сказать, был ли заполнен вес или нет. Наличие переменной может быть прогнозирующим независимо от значения.

Давайте также отслеживать эти дополнительные столбцы.

Характеристика: Резюме

Благодаря этому процессу мы создали 143 функции для модели машинного обучения. Разбивка функций

  • 8 числовых функций
  • 133 категориальных черты
  • 2 дополнительные функции

Давайте создадим новый фрейм данных, который имеет только функции иOUTPUT_LABEL,

Обучение здания / валидация / тестовые образцы

До сих пор мы исследовали наши данные и создали функции из категориальных данных. Настало время разделить наши данные. Идея разделения данных состоит в том, чтобы вы могли измерить, насколько хорошо ваша модель будет работать с невидимыми данными. Мы разделены на три части:
- Учебные образцы: эти образцы используются для обучения модели
- Проверочные образцы: эти образцы хранятся на основе данных обучения и используются для принятия решений о том, как улучшить модель.
- Тестовые образцы: эти образцы не учитываются при принятии всех решений и используются для измерения обобщенных характеристик модели.

В этом проекте мы разделим поезд на 70%, проверку на 15% и проверку на 15%.

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

Мы можем использоватьsampleснова извлечь 30% (используяfrac) данных, которые будут использоваться для проверки / разделения тестов. Важно, чтобы валидация и тестирование происходили из аналогичных дистрибутивов, и этот метод является одним из способов сделать это.

А теперь разделить на тестирование и проверку с использованием 50% доли.

Обратите внимание, что.dropпросто роняет строки изdf_testчтобы получить строки, которые не были частью образца. Мы можем использовать эту же идею, чтобы получить данные обучения.

На этом этапе давайте проверим, какой процент наших групп госпитализирован в течение 30 дней. Это известно как распространенность. В идеале все три группы имели бы одинаковую превалирование.

Распространенность примерно одинакова для каждой группы.

В этот момент, вы можете сказать, поместите данные обучения в прогностическую модель и посмотрите на результат. Однако, если мы сделаем это, вполне возможно, что мы получим модель с точностью на 89%. Большой! Отличная работа! Но подождите, мы никогда не поймаем ни одного из реадмиссий (отзыв = 0%). Как это может случиться?

Происходит то, что у нас есть несбалансированный набор данных, в котором негативов гораздо больше, чем позитивов, поэтому модель может просто назначить все выборки как негативные.

Как правило, лучше сбалансировать данные каким-либо образом, чтобы придать позитивам больший вес. Есть 3 стратегии, которые обычно используются

  • Подвыборка более доминирующего класса: используйте случайное подмножество негативов
  • перевыбор несбалансированного класса: используйте одни и те же положительные выборки несколько раз
  • создать синтетические положительные данные

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

Большинству пакетов машинного обучения нравится использовать входную матрицу X и выходной вектор y, поэтому давайте создадим их:

У некоторых моделей машинного обучения возникают проблемы, когда переменные имеют разный размер (0–100 против 0–1000000). Чтобы справиться с этим, мы можем масштабировать данные. Здесь мы будем использовать Standard Scaler от scikit-learn, который удаляет среднее значение и масштабирует до единицы. Здесь я создам скейлер, используя все тренировочные данные, но вы можете использовать сбалансированный, если хотите.

Нам понадобится этот скейлер для тестовых данных, поэтому давайте сохраним его, используя пакетpickle,

Теперь мы можем преобразовать наши матрицы данных

Мы пока не будем трансформировать тестовую матрицу, поэтому у нас нет соблазна посмотреть на производительность, пока мы не закончили с выбором модели.

Выбор модели

Вот Это Да! так много работы, чтобы подготовиться к модели. Это всегда верно в науке о данных. Вы тратите 80–90% на очистку и подготовку данных.

В этом разделе мы обучаем несколько моделей машинного обучения и используем несколько методов для их оптимизации. Затем мы выберем лучшую модель на основе производительности на наборе проверки.

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

Поскольку мы уравновешивали наши данные обучения, давайте установим наш порог в 0,5, чтобы обозначить прогнозируемую выборку как положительную.

Выбор модели: базовые модели

В этом разделе мы сначала сравним производительность следующих 7 моделей машинного обучения с использованием гиперпараметров по умолчанию:

  • K-ближайшие соседи
  • Логистическая регрессия
  • Стохастический градиентный спуск
  • Наивный байесовский
  • Древо решений
  • Случайный лес
  • Классификатор повышения градиента

K ближайших соседей (KNN)

KNN - одна из самых простых моделей машинного обучения. Для данной точки выборки модель смотрит на k ближайших точек данных и определяет вероятность, подсчитывая количество положительных меток, деленное на K. Эта модель проста в реализации и понимании, но имеет недостаток чувствительности к K и требует долго оценивать, является ли количество обученных образцов большим. Мы можем приспособить KNN, используя следующий код из scikit-learn.

Мы можем оценить производительность с помощью следующего кода

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

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

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

Стохастический градиентный спуск

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

Наивный байесовский

Наивный Байес - еще одна модель, иногда используемая в машинном обучении. В Наивном Байесе мы используемБайесовское правилорассчитать вероятности. «Наивной» частью этой модели является то, что она предполагает, что все функции являются независимыми (что, как правило, не так). Это хорошо работает для моделей обработки естественного языка, но давайте все равно попробуем здесь. Мы можем подобрать Naive Bayes с помощью следующего кода.

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

Другой класс популярных моделей машинного обучения - древовидные методы. Самый простой основанный на дереве метод известен как дерево решений. По сути, в древовидных методах вы используете методологию, лежащую в основе 20 вопросов игры, чтобы продолжить разделять ваши выборки. В каждом вопросе вы спрашиваете, имеет ли выборка конкретную переменную, превышающую некоторый порог, а затем разделяете выборки. Окончательный прогноз - это доля положительных выборок в конечном листе (окончательное разбиение) дерева. Машинное обучение за этим методом состоит в том, чтобы определить, какую переменную и какой порог использовать при каждом разделении. Одно из преимуществ древовидных методов состоит в том, что они не имеют никаких предположений о структуре данных и способны улавливать нелинейные эффекты при наличии достаточной глубины дерева. Мы можем подобрать деревья решений, используя следующий код.

Случайный лес

Одним из недостатков деревьев решений является то, что они очень легко перезаписываются путем запоминания данных обучения. В результате были созданы случайные леса, чтобы уменьшить переоснащение. В моделях случайных лесов создается несколько деревьев и результаты агрегируются. Деревья в лесу декоррелируются с помощью случайного набора выборок и случайного числа объектов в каждом дереве. В большинстве случаев случайные леса работают лучше, чем деревья решений, потому что они могут легче обобщать. Чтобы соответствовать случайным лесам, мы можем использовать следующий код.

Классификатор повышения градиента

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

Анализ базовых моделей

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

Как мы видим, большинство моделей (кроме Наивного Байеса) имеют аналогичную производительность на валидационном наборе. Существует некоторое переоснащение, отмеченное разрывом между обучением и валидацией. Давайте посмотрим, сможем ли мы улучшить эту производительность, используя еще несколько методов.

Выбор модели: кривая обучения

Мы можем диагностировать, как работают наши модели, построив график обучения. В этом разделе мы будем использовать код кривой обучения из scikit-learn'sВеб-сайтс небольшим изменением графика AUC вместо точности.

В случае случайного леса мы видим, что результаты обучения и валидации одинаковы, но у них обоих низкие показатели AUC. Это называется высоким уклоном и является признаком недостаточного соответствия.

В зависимости от кривой обучения, есть несколько стратегий, которые мы можем использовать для улучшения моделей

Высокий уклон:
- Добавить новые функции
- Увеличьте сложность модели
- Уменьшить регуляризацию
- Изменить архитектуру модели

Высокая дисперсия:
- Добавить больше образцов
- Добавить регуляризацию
- Уменьшить количество функций
- Уменьшить сложность модели
- Добавить лучшие функции
- Изменить архитектуру модели

Вдохновением для этих стратегий являются Эндрю НгКурс Courseraперефразируя <a href = "http: //"target =" _ blank "rel =" noopener "> здесьи стремление Эндрю Нг к машинному обучениюучебник

Выбор модели: важность функции

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

- вдохновлять новые идеи функций → помогает как с большим смещением, так и с высокой дисперсией
- получить список главных функций, которые будут использоваться для сокращения функций → помогает с высокой дисперсией
- указать на ошибки в вашем конвейере → помогает с устойчивостью модели

Мы можем получить важность функции от логистической регрессии, используя следующее

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

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

В случае высокой дисперсии одной из стратегий является уменьшение количества переменных для минимизации перенастройки. После этого анализа вы можете использовать первые N положительных и отрицательных признаков или N важных случайных лесных объектов. Возможно, вам придется настроить N так, чтобы ваша производительность не сильно упала. Например, только использование верхней функции, скорее всего, значительно снизит производительность. Другая стратегия, которую вы можете использовать для уменьшения количества переменных, называется PCA (принцип анализа основных компонентов). Это также реализовано в scikit-learn, если вам интересно.

Последнее, что я хочу упомянуть, это то, что графики важности функций также могут указывать на ошибки в вашей прогнозной модели. Возможно, у вас есть утечка данных в процессе очистки. Утечка данных может рассматриваться как процесс случайного включения в обучение чего-либо, что позволяет алгоритму машинного обучения искусственно обманывать. Например, я построил модель, основанную на заметках врача о выписке (см. Статью TDS).Вот). Когда я выполнил тот же самый анализ самых важных слов, я обнаружил, что главное слово для предсказания того, что кто-то не будет допущен, было «истекло». Это заставило меня понять, что я допустил ошибку и забыл исключить пациентов, которые умерли в текущем посещении больницы. Учась на своих ошибках, я исключил коды выписки, связанные со смертью / хосписом. Подобные вещи могут произойти и при объединении наборов данных. Возможно, когда вы объединили наборы данных, один из классов закончился с Nan для некоторых переменных. Анализ выше поможет вам поймать некоторые из этих случаев.

Выбор модели: настройка гиперпараметра

Следующее, что мы должны исследовать, это настройка гиперпараметров. Настройка гиперпараметра - это, по сути, проектные решения, которые вы приняли при настройке модели машинного обучения. Например, какова максимальная глубина для вашего случайного леса? Каждый из этих гиперпараметров может быть оптимизирован для улучшения модели.

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

Один из методов настройки гиперпараметра называется поиском по сетке, где вы проверяете все возможные комбинации по сетке значений. Это очень интенсивно в вычислительном отношении. Другим вариантом является случайная проверка их перестановки. Эта методика, называемая случайным поиском, также реализована в scikit-learn. Большая часть этого раздела основана на этом среднем блогепослеУильям Керсен. Я настоятельно рекомендую следовать за ним на пути к науке о данных. Он пишет статьи высокого качества.

Давайте создадим сетку из нескольких случайных гиперпараметров леса.

Чтобы использовать функцию RandomizedSearchCV, нам нужно что-то оценить или оценить набор гиперпараметров. Здесь мы будем использовать AUC

Три важных параметраRandomizedSearchCVявляются

  • оценка = метрика оценки, используемая для выбора лучшей модели
  • n_iter = количество разных комбинаций
  • cv = количество перекрестных проверок

увеличение двух последних из них увеличит время выполнения, но уменьшит вероятность переоснащения. Обратите внимание, что количество переменных и размер сетки также влияет на время выполнения. Перекрестная проверка - это метод разделения данных несколько раз, чтобы получить лучшую оценку показателя производительности. Для целей этого проекта мы ограничимся 2 CV, чтобы сократить время.

Мы можем подогнать наш случайный лес рандомизированного поиска с помощью следующего кода.

Давайте проанализируем производительность лучшей модели по сравнению с базовой моделью.

Точно так же мы можем оптимизировать производительность классификаторов стохастического градиентного спуска и повышения градиента.

Мы можем агрегировать результаты и сравнивать с базовыми моделями в наборе валидации.

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

Выбор модели: лучший классификатор

Здесь мы выберем классификатор повышения градиента, так как он имеет лучший AUC в наборе проверки. Вы не захотите тренировать свой лучший классификатор каждый раз, когда захотите выполнить новые прогнозы. Поэтому нам нужно сохранить классификатор. Мы будем использовать пакетpickle,

Оценка модели

Теперь, когда мы выбрали нашу лучшую модель (оптимизированный классификатор повышения градиента). Давайте оценим производительность тестового набора.

Окончательная оценка приведена в таблице.

Мы также можем создать кривую ROC для 3 наборов данных, как показано ниже

Вывод

В рамках этого проекта мы создали модель машинного обучения, которая способна прогнозировать пациентов с диабетом с наибольшим риском повторной госпитализации в течение 30 дней. Лучшей моделью был классификатор повышения градиента с оптимизированными гиперпараметрами. Модель смогла поймать 58% реадмиссий и примерно в 1,5 раза лучше, чем просто случайный отбор пациентов. В целом, я считаю, что многие ученые, работающие с данными здравоохранения, работают над прогностическими моделями реадмиссии в больницах. Если это так для вас, я хотел бы связаться с вами (наLinkedin) и делиться опытом. Не стесняйтесь оставлять любые отзывы или вопросы в комментариях ниже.

Ссылки

Остлинг, Вайкофф, Чарковский, Пай, Чо, Баль, Джанчандани (2017). «Взаимосвязь между сахарным диабетом и 30-дневной реадмиссией» вКлинический диабет и эндокринология, 3: 1

Оригинальная статья

Footer decor

© machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map