В части I я обсуждал исследовательский анализ данных и применение точечной взаимной информации к парам мутаций, чтобы выяснить, существует ли какая-либо корреляция между оценками PMI и сходством классов мутаций. В этой части я буду обсуждать обучение модели распределенной полиномиальной логистической регрессии (MLR) и ее применение к набору тестовых данных для определения классов мутаций.

Опять же, для краткости я делюсь только некоторыми частями кода в этой статье. Полный код можно найти по ссылке здесь на GitHub. Я также подготовил 5-минутный видеоролик, который вы можете найти здесь.

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

Предварительная обработка данных

  1. Работа с отсутствующими значениями. Как мы видели в части I, в наборе обучающих данных есть 5 записей, не связанных с текстом исследовательской работы. У них есть значения NaN в столбце «Текст». Я заменил эти значения NaN комбинацией значений Gene + Mutation.
  2. Выполнение основных операций НЛП: я выполнил несколько основных операций НЛП с текстом исследовательской работы (текстовый столбец каждой строки), чтобы стандартизировать значения по строкам и уменьшить размер набора данных без потери ценной информации. Эти операции были:

A. Замена в тексте специальных символов, таких как *, @ и т. Д., Одним пробелом

Б. Замена нескольких пробелов одним пробелом

C. Преобразование всех символов в нижний регистр

D. Сохранение только тех слов из текста, которые являются безостановочными. Такие слова, как и, то, такое и т. Д., Известны как стоп-слова. Они необходимы для создания грамматически правильных предложений, но в большинстве случаев не содержат полезной информации. Например, рассмотрим предложение «Аспирин долгое время использовался как болеутоляющее». Какое из этих двух слов является ключевым словом: «Аспирин» или «как»? Стоп-слов много, и хотя их удаление может привести к некоторой потере смысла, эта потеря обычно минимальна, а полученное сжатие данных огромно, поскольку это, безусловно, самые частые слова в любом документе.

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

Распределенная реализация этих шагов предварительной обработки, как показано ниже, заняла 8 секунд по сравнению с 30 секундами, когда я делал это на одной машине.

3. Векторизация генов, мутаций (вариаций) и текстовых функций. Я создал одну горячую кодировку для генов, мутаций и всего текста в наборе обучающих данных. Во всех статьях обучающего набора данных было 65946 уникальных слов.

4. Объединение всех кодировок для создания консолидированного набора обучающих данных.

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

В каждой строке было 69229 двоичных записей, как показано на рисунке ниже:

5. Преобразование фрейма данных в формат, удобный для Spark MLlib.

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

Обучение модели MLR

Вот фрагмент кода, который я использовал для обучения модели MLR. Я установил значения гиперпараметров (константа регуляризации = 0,01 и elasticNetParam = 1), которые дали хорошие результаты после ручной настройки этих значений и наблюдения за результатами. Более систематическим способом будет GridsearchCV, и я обновлю этот пост, как только сделаю это, и получу лучшие результаты.

Результаты

Я получил общую точность классификации 64% и полиномиальную логарифмическую потерю 1,12, что сопоставимо со значениями, указанными лучшими участниками конкурса Kaggle Competition. Они получили полиномиальную потерю журнала 2,03, хотя
их тестовый набор данных отличался от моего, поскольку я подготовил свой тестовый набор данных после разделения набора обучающих данных. Тем не менее, MLR, кажется, работает хорошо
для этого набора данных в целом.

Вот матрица отзыва:

Приятно видеть, что модель хорошо предсказывает реальные классы. Ошибочная маркировка 2–7, 3–7 и 8–7 имеет большое значение и требует дальнейшего расследования. Это может быть связано с большим смещением, которое приводит к тому, что модель классифицирует классы меньшинств (2, 3, 8) как класс большинства (7).

Матрица точности показана ниже:

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

Матрица неточности показана ниже:

Еще раз, модель имеет хорошую точность в предсказании классов мутаций. Существует значительное несоответствие 2–7 и 1–4, которое требует дальнейшего изучения.

Заключение

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

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

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