В части I я обсуждал исследовательский анализ данных и применение точечной взаимной информации к парам мутаций, чтобы выяснить, существует ли какая-либо корреляция между оценками PMI и сходством классов мутаций. В этой части я буду обсуждать обучение модели распределенной полиномиальной логистической регрессии (MLR) и ее применение к набору тестовых данных для определения классов мутаций.
Опять же, для краткости я делюсь только некоторыми частями кода в этой статье. Полный код можно найти по ссылке здесь на GitHub. Я также подготовил 5-минутный видеоролик, который вы можете найти здесь.
Прежде чем перейти к обучению модели в MLlib, необходимо выполнить несколько шагов предварительной обработки:
Предварительная обработка данных
- Работа с отсутствующими значениями. Как мы видели в части I, в наборе обучающих данных есть 5 записей, не связанных с текстом исследовательской работы. У них есть значения NaN в столбце «Текст». Я заменил эти значения NaN комбинацией значений Gene + Mutation.
- Выполнение основных операций НЛП: я выполнил несколько основных операций НЛП с текстом исследовательской работы (текстовый столбец каждой строки), чтобы стандартизировать значения по строкам и уменьшить размер набора данных без потери ценной информации. Эти операции были:
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), понимание того, что модель изучает, исследуя изученные коэффициенты, придумывая более эффективные способы представления данные и применение этого метода к другим областям биомедицинского интеллектуального анализа текста, чтобы проверить его эффективность. Я буду публиковать статьи по некоторым из этих тем в будущем, когда получу интересные результаты, которыми я смогу поделиться.
Надеюсь, вы нашли эту серию из двух частей полезной. Не стесняйтесь обращаться, если вы хотите узнать больше о какой-либо части этого исследования или хотите сотрудничать со мной.
(Опять же, я благодарен Намратешу за его пост об этом наборе данных, который помог мне провести начальные этапы предварительной обработки данных.)