Слова, важные для класса, можно использовать для улучшения компромисса между точностью и воспроизведением при классификации. Использование наиболее значимых терминов в качестве словаря для управления классификатором дает улучшенные результаты с моделью гораздо меньшего размера для прогнозирования повторных разрешений MIMIC-III CCU из выписанных примечаний…

И это сложнее (прости, Йоги!), Когда целевые классы, которые можно предсказать, имеют сильно различающиеся опоры.

Но это часто случается с наборами данных реального мира. Речь идет о прогнозе повторной госпитализации пациента в ОИТ в ближайшем будущем на основании выписки. Лишь небольшая часть пациентов повторно поступает в ОИТ в течение 30 дней после выписки. Наш анализ данных MIMIC-III в предыдущем посте показал, что более 93% пациентов не нуждались в повторной госпитализации. Это определенно хорошие новости. Но если вы занимаетесь прогнозированием, у вас есть более сложная проблема. Вы хотите идентифицировать как можно больше из тех немногих будущих фактических случаев реадмиссии из множества дел, которые не будут подвергнуты реадмиссии. И вы, конечно же, хотите избежать ложной пометки дел как будущих повторных разрешений.

У нас есть классическая проблема точности и отзыва, знакомая всем нам, работающим в сфере поиска информации.

  • Игнорируйте точность и добейтесь 100% отзыва. Просто пометьте все записи как будущие повторные допуски. FN = 0
  • Игнорируйте отзыв и добейтесь 100% точности. Просто пометьте все заметки как будущие запреты на повторную отправку. FP = 0

1. Важные условия

Удовлетворять как точность, так и отзывчивость - непростая задача, и здесь могут помочь важные термины. В предыдущем посте Прогнозирование реадмиссии в ОИТ из выписок: важные термины мы рассмотрели основные термины, что они собой представляют и как извлечь их из текстового корпуса с помощью Elasticsearch. Суть этого поста заключалась в следующем.

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

Итак, мы переходим к пункту 3 выше и рассмотрим различные способы использования важных терминов для задачи классификации. Сначала давайте определим наш поезд и тестовые данные из набора данных MIMIC-III.

Данные MIMIC-III

В предыдущем посте мы просмотрели набор данных MIMIC-III и подготовили индекс Elasticsearch.

Каждый документ представляет собой выписку с меткой повторный прием, полученный как 0 (при этой выписке не было повторной госпитализации в течение 30 дней) или 1 (пациент повторно госпитализирован в CCU в течение 30 дней после этой выписки). У нас было 40873 документа с readmit = 0 и 2892 документа с readmit = 1. Это затрудняет получение правильных прогнозов для класса меньшинства readmit = 1. Мы разделяем данные на обучающие и тестовые наборы при стратификации по флагу readmit.

train_docs, test_docs, train_labels, test_labels, train_ids, test_ids = train_test_split (docs, labels, ids, test_size=0.20, random_state=0, stratify=labels)

В итоге мы получаем следующий дистрибутив для обучения и тестирования. Только около 6,6% документов имеют readmit = 1 либо в обучающем, либо в тестовом наборе. Мы строим модели, используя обучающий набор, и прогнозируем, насколько хорошо мы справимся с классом меньшинства readmit.

# Of Train / Test : 35012 / 8753
# Of Train Readmit / NoReadmit: 32698 / 2314
# Of Test Readmit / NoReadmit: 8175 / 578

Как бы то ни было, мы используем весь обучающий набор для построения моделей. Передискретизация класса большинства без допуска или передискретизация класса меньшинства readmit с помощью SMOTE имеют свои собственные проблемы, от которых мы хотим избежать. Однако мы попытаемся учесть это позже, придав больший вес прогнозам класса меньшинства в контексте классификации, например, с помощью логистической регрессии…

Следующий фрагмент кода предоставляет идентификаторы обучающего набора для каждого класса и получает важные термины с помощью Elasticsearch.

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

2. Прямая классификация с существенными условиями

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

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

Количество рассматриваемых важных терминов варьируется, чтобы увидеть их влияние на результаты. На рисунке 1 ниже показаны точность и отзыв, полученные для прогнозирования класса повторного доступа (readmit = 1).

Ключевые выводы здесь следующие.

  • Напоминание увеличивается, а точность уменьшается по мере того, как мы рассматриваем все более и более важные термины. Конечно, имеет смысл.
  • Почти полный отзыв в 99% достигается при использовании 500–1000 значащих терминов с точностью около 7%. Только одна выписка из 578 истинных дел о реадмиссии была ошибочно классифицирована как случай без реадмиссии.
  • Оба метода chi_square и jlh для извлечения значимых терминов дают аналогичные результаты с небольшим преимуществом, удерживаемым chi_square. Мы будем придерживаться chi_square до конца этого поста.

3. BoW со значительными терминами в качестве словаря

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

Значимые термины извлекаются из корпуса на основе относительных количественных показателей по классам, и каждому термину присваивается оценка его важности для класса. Tf-Idf включает собственные веса, которые охватывают весь корпус и независимо от класса…

В любом случае словарный запас корпуса почти всегда довольно велик. Даже с проведенной очисткой мы получили более 124000 терминов из текстового корпуса MIMIC-III. Конечно, мы можем ограничить это количество. В приведенном ниже фрагменте кода будет учитываться только верхнее количество n_features всех слов, поэтому векторы документа будут иметь длину n_features.

vectorizer = CountVectorizer(analyzer=lambda x: x, min_df=1, max_features=n_features).fit(train_docs + test_docs)

Но что, если бы мы использовали только значимые слова, а НЕ все слова? И только топ-500 или 100 из них? Ранее мы видели, что значимые термины для одного класса сильно отличаются от терминов для другого. Фактически, для двоичной ситуации перекрытие будет нулевым.

векторов документов, построенных только на основе важных терминов для класса readmit , может быть достаточно для обеспечения достаточной дискриминирующей способности…

Во всяком случае, это тезис. Если это сработает, у нас будет гораздо меньшая модель и, надеюсь, сопоставимая точность и отзывчивость, которые могут быть даны полностью развернутыми длинными векторами, которые использовали весь словарный запас. Предоставить CountVectorizer собственный словарь очень просто. У нас уже есть список важных терминов для класса readmit в порядке важности. Верхнее n_features количество слов из этого списка используется в качестве словаря в приведенном ниже фрагменте.

vectorizer = CountVectorizer(analyzer=lambda x: x, min_df=1, vocabulary=significant_terms_for_class_readmit_1[0:n_features]).fit(train_docs + test_docs)

Построение и запуск модели логистической регрессии с использованием любого словаря несложно. Мы просто предоставляем другой векторизатор для функции ниже. Кроме того, мы обязательно применяем class_weight (сбалансированный), чтобы доминирующий класс no-readmit имел меньший вес по сравнению с меньшим readmit класс. Причина, по которой мы это делаем, заключается в том, что мы работаем со всем обучающим набором, который сильно отклоняется в сторону класса no-readmit. Это помогает уравнять игровое поле между классами, побуждая классификатора больше ценить прогнозы класса меньшинства.

На рис. 2 показаны результаты повторения и точности этих словарей в зависимости от количества используемых слов.

Конечно интересная графика.

  • Когда вы ограничиваете количество функций, CountVectorizer выбирает наиболее часто встречающиеся слова. Как мы знаем, это отдает предпочтение воспоминаниям, а не точности. Увеличение количества используемых слов улучшает запоминание - до определенного предела! Когда используются все слова, количество воспоминаний резко падает с небольшим увеличением точности. Имеет смысл.
  • Более равномерные и последовательные результаты получаются, когда значимые термины определяют словарь. Что еще интереснее, похоже, что мы могли бы просто использовать 25 самых важных слов для класса readmit в сочетании с Countvectorizer и логистической регрессией, чтобы получить как более высокую точность, так и отзыв.

4. Области прецизионного отзыва и ROC.

Прогнозы точности и отзыва на рисунках 1 и 2 основаны на пороговой вероятности 0,5. То есть, когда нормализованная оценка заметки (которая в сумме составляет 1,0 по двум меткам) для класса readmit больше 0,5, тогда прогноз для этой заметки повторяется. Конечно, есть некоторая свобода выбора этого порога.

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

Еще раз стоит повторить, что прогнозы на предыдущих рисунках основаны на нейтральном пороге 0,5. Выберите достаточно низкий порог вероятности, любой классификатор может получить 99% отзыва.

Но 99% запоминаемости с использованием наиболее значимых терминов на рисунке 1 было получено с нейтральным порогом 0,5.

Один из способов оценить классификатор - это увидеть, насколько он чувствителен к этой пороговой вероятности. Это удобно получить с помощью кривых прецизионного вызова и ROC, а также областей, которые они включают. На рисунке 3 показаны кривые точности-отзыва и ROC при использовании 100 основных терминов (значимые термины или словарный запас корпуса).

На рисунке 4 показана площадь под кривой (AUC) для кривых точности-отзыва и ROC в зависимости от размера словаря, используемого различными методами, которые мы опробовали в этой публикации.

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

Но мы знаем, что метод, основанный на подсчете, был лучше, если бы отзыв меньшинства имел первостепенное значение. Это может быть случай для предсказания чего-то вроде события повторного доступа CCU. Это ваш вопрос, хотите ли вы вспомнить!

5. Выводы

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

  • Определение слов, которые являются особенными / значимыми для класса, полезно в танце с точным воспроизведением.
  • Эти слова служат окном в природу содержания для этого класса. Помогает объяснить, почему документ был помечен классификатором как таковой (Объясняемый ИИ?)
  • Использование значащих слов в качестве словаря для построения векторов документов, кажется, дает некоторые надежды на оптимизацию точности и запоминания. Кроме того, вам понадобится всего несколько таких, что приведет к созданию гораздо меньших моделей.
  • Векторизация Tf-Idf в сочетании со значимыми терминами, поскольку словарь требует дальнейшего анализа относительно того, что именно он делает.

Первоначально опубликовано на http://xplordat.com 23 декабря 2019 г.