Аннотация:

Благодаря применению и перекрестной проверке нескольких моделей машинного обучения мне удалось разработать алгоритм, который может с точностью 98,67 % предсказывать наличие опухоли головного мозга по 13 ключевым признакам МРТ. Набор данных, который я использовал для обучения и тестирования, был найден в библиотеке наборов данных Kaggle. Он включает около 3800 записей в 15 столбцах. Изучая различные модели, такие как классификатор дерева решений, классификатор случайного леса и классификатор AdaBoost, я смог определить наиболее коррелирующие функции, чтобы точно и надежно предсказать цель.

Наводящие вопросы:

Как только я нашел набор данных для изучения, у меня появилось несколько вопросов, которые помогли мне в процессе программирования:

  1. Какие особенности данных МРТ окажутся наиболее важными для прогнозирования наличия или отсутствия опухоли головного мозга?
  2. Какая модель машинного обучения обеспечит наибольшую точность при сравнении тестовых данных с прогнозируемыми данными?

Исследование и сравнение моделей:

Шаг 1. Обучение, тестирование, базовый уровень

Я начал с использования библиотеки выбора модели обучения scikit, чтобы разделить свои данные с помощью train_test_split на 2 набора: обучение (70%) и тестирование (30%). Затем я хотел определить базовую точность, которую модель может построить с помощью DummyClassifier из манекена scikit Learn. Стратегия, которую я использовал, была «наиболее частой». Моя базовая точность оказалась примерно 55%, так что на самом деле все, что выше этого, было бы хорошей моделью.

Шаг 2. Ознакомьтесь с другими моделями

Классификатор дерева решений

Мне нравится начинать с классификатора дерева решений из дерева обучения scikit, потому что я считаю, что он обеспечивает надежную высокую точность для большинства моделей и позволяет визуализировать матрицу признаков с помощью дерева обучения scikit.plot_tree(). Точность моей модели дерева решений оказалась 97,8%. Я был рад увидеть этот результат, так как он намного выше, чем мой базовый уровень. Я хотел визуализировать точность в матрице путаницы, которая продемонстрировала высокую точность, потому что только 24 из 3800 прогнозов не соответствовали истинному значению. В приведенном ниже дереве решений отображаются решающие функции дерева с параметром max_depth, установленным на 5, чтобы избежать переобучения дерева.

Единственная проблема с моделью дерева решений — важность функции. Признаки первого порядка набора данных были перечислены как эксцесс, дисперсия, асимметрия, среднее значение и стандартное отклонение; однако из этих 5 только Куртозис был во второй ветви. Эта модель была достаточно точной, поэтому я мог бы остановиться на этом, но я хотел посмотреть, как я могу добиться высокой точности и соответствия важности признаков атрибутам первого порядка. Таким образом, я продолжил тестирование других моделей.

Классификатор пакетов

Затем я перешел к Bagging Classifier в группе scikit Learn. Бум! Точность 98,4%. См. матрицу путаницы ниже: всего 18 прогнозов, не совпадающих с истинным значением.

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

Классификатор случайного леса

Случайный лес (RF) — это, по сути, модифицированный метод мешков, который усредняет количество декоррелированных деревьев. Модели случайного леса обычно имеют более низкую дисперсию из-за декорреляции при каждом разделении дерева. Моя модель RF создала 100 базовых моделей, из которых затем усреднялись прогнозы. Ниже приведен фрагмент последних 7 оценок отзыва модели и статистика тех базовых моделей, которые создали модель RF.

Как видно выше, моя радиочастотная модель имела показатель полноты 97,2% и показатель точности 98,67%. Это отлично. Модель Random Forest официально стала лидером алгоритма машинного обучения с высочайшей точностью для прогнозирования наличия опухоли головного мозга. С таким успехом я хотел посмотреть, сможет ли моя модель улучшиться с использованием бустинга.

Классификатор AdaBoost

Повышение отличается от бэггинга, потому что вместо того, чтобы пытаться уменьшить дисперсию, повышающие модели стремятся к низкому смещению. Это очень современная модель машинного обучения, которая улучшает прогнозы каждой последующей модели. При max_depth, равном 4, моя модель AdaBoost достигла точности 98,14%: не улучшение по сравнению с RF, но и не сильное ухудшение. Попробуем еще одну модель…

XGBoost

Известный как один из лучших алгоритмов машинного обучения, XGBoost определенно был оставлен напоследок :). Моя модель XGB имела среднеквадратичную ошибку всего 0,11. Еще более захватывающими, чем точность, являются веса признаков, используемые в модели XGB. Среди первых 6 важных признаков в этой модели 4 из них были атрибутами первого порядка в обучающем наборе. Модель XGBoost не только точно предсказала отсутствие или наличие опухоли головного мозга с RMSE всего 0,1, но и сделала это за счет надежного взвешивания признаков.

Модель XGBoost намного превосходит другие модели благодаря точному отчету о важности функций.

Обсуждение и заключение

Проанализировав данные и создав различные модели для точного прогнозирования опухолей головного мозга, я обнаружил, что мои самые точные модели сводятся к моделям Random Forest и XGBoost. Каждый из них достиг примерно 99% точности в определении наличия опухоли головного мозга. Тем не менее, я должен признать, что модель XGBoost занимает первое место в прогнозировании опухолей головного мозга из-за ее сортировки по важности признаков. Модель RF имеет энергию, энтропию, ASM и однородность в качестве основных характеристик при создании модели; однако каждый из них является атрибутом второго порядка в наборе данных. Модель XGBoost была гораздо точнее в списке важности функций и, следовательно, является более надежной моделью в долгосрочной перспективе.

Нажмите здесь для выбора источника набора данных:

Репозиторий Github: нажмите здесь

Как всегда, спасибо за чтение! Я ценю это :)