Вопрос или проблема
У меня есть более концептуальный вопрос, по которому я надеюсь получить обратную связь. Я пытаюсь запустить модель машинного обучения с бустингом для выявления подмножества важных предикторов для некоторого клинического состояния. Набор данных включает более 100000 строк и близко к 1000 предикторам. Однако этиология болезни, которую мы пытаемся предсказать, во многом неизвестна. Таким образом, у нас, вероятно, нет данных о многих важных предикторах для этого состояния. Другими словами, как модель предсказания, любая модель, которую я создаю, будет довольно плохо предсказывать результат. Однако основная цель здесь не в предсказании, а в выявлении важных переменных, которые мы затем можем целенаправленно использовать в будущих анализах. Поэтому я пытаюсь использовать модель машинного обучения в качестве инструмента выбора переменных.
Обычно мы можем оценить эффективность модели, оценив ее метрики на новом наборе данных – например, используя вложенную перекрестную проверку или разделение на обучающую и тестовую выборки. Но вместо того, чтобы оценивать метрики модели, моя основная цель здесь – оценить согласованность, с которой выбираются разные предикторы (т.е. согласованность списка важности признаков). По сути, я думаю, что хочу случайным образом разделить базу данных (например, использовать 60% данных), провести перекрестную проверку для настройки гиперпараметров, а затем, используя лучшие гиперпараметры, обучить модель на всех 60% и получить важность признаков. Затем я повторю тот же процесс X раз, каждый раз используя случайно выбранную выборку 60%. Это даст мне X таблиц важности признаков, по одной из каждого запуска. Но есть ли способ затем как-то «объединить» все эти таблицы важности признаков, чтобы получить представление о том, насколько стабилен процесс выбора на разных запусках? Или есть ли более эффективные способы сделать это? Спасибо большое!
Это интересный вопрос, и на него нет универсального ответа. Если разбить ваш вопрос на две основные части, я бы сказал:
Выбор важных переменных
- Эксперт в области: Всегда полезно иметь мнение эксперта в области о том, какие переменные наиболее важны, особенно в вашем случае, когда у вас есть 1000 переменных на выбор. Учитывая размер вашего набора данных, это действительно сократит время обработки.
- Интеллектуальные меры важности переменных: существует множество способов ограничить ваши переменные теми, которые действительно имеют значение, начиная от простых метрик корреляции и ковариации до байесовских методов. Существуют пакеты, которые сделают это за вас. Например, если вы программируете на R,
Boruta
– это один из тех, которые я часто использую (читайте здесь). Сказав это, вы всегда можете использовать методы изsklearn
. Уверен, вы понимаете, что это все происходит на этапе предварительного моделирования, прежде чем вы начнете работу с моделями машинного обучения.
После того как вы поймете, какие переменные важны и в какой степени, я бы ограничил модели машинного обучения первыми 100 переменными, возможно? Это сэкономит вам массу времени и усилий.
Моделирование машинного обучения
Мне нравится ваш подход к разделению на обучающую и тестовую выборки, и на самом деле, это то, что я делаю большую часть времени. Вы можете определить dataframe
, чтобы хранить меры важности из вашей модели машинного обучения каждый раз, когда вы запускаете модель, и добавлять к нему новые значения. Таким образом, в конце, скажем, 20 раундов моделирования, у вас будет 20 значений для каждой переменной
, которые вы затем сможете усреднить и ранжировать.
Весь этот процесс должен дать вам представление о том, какие переменные действительно важны, а затем я бы занялся «оптимизацией гиперпараметров», когда пойму, какие переменные использовать.
1.) Если ваша цель – найти наиболее релевантные признаки, первое, что вы должны сделать, это инжиниринг признаков с использованием знаний в области. Это самая эффективная техника выбора признаков, и если она выполнена правильно, не требует никаких дополнительных техник выбора признаков.
2.) После того как вы выполните вышеуказанный шаг, если вы хотите получить меру «важности» признаков относительно целевой переменной, можно использовать mutual_info_regression
. Это даст значения важности для всех ваших признаков за один шаг! Кроме того, он может измерять «любые отношения» с целевой переменной (не только линейные, как делают некоторые техники).
3.) Если вы захотите продолжить выбор признаков, вы можете попробовать одну из методов обертки, например RFECV, методы вперед/назад и т.д. Лично я бы выбрал RFECV!
Я бы сказал, сосредоточьтесь на шаге 1, так как он обязательно даст вам лучшие результаты.
Ответ или решение
Агрегация важности признаков в модели машинного обучения
Ваш вопрос о том, как агрегировать важность признаков в контексте бустированной регрессионной модели, является актуальным и позволяет глубже понять процесс выбора значимых переменных, особенно в условиях неопределенности, касающейся этиологии заболевания. Давайте разберем основные аспекты и предложим методы, которые могут помочь в решении этой задачи.
1. Подход к выбору признаков
Прежде всего, важно начать с профессионального анализа признаков, воспользовавшись опытом экспертов в соответствующей области. Они могут подсказать, какие из признаков имеют наибольшее значение для изучаемого состояния, что позволит значительно сократить объем обработки данных, не теряя при этом в качестве.
Кроме того, существует множество методов для оценки важности признаков, начиная от простых корреляционных и ковариационных анализов до более сложных подходов, например, методов, основанных на Bayesian. Например, в R можно использовать пакет Boruta, который хорошо зарекомендовал себя для выбора значимых переменных.
2. Процесс выборки и агрегации важности признаков
Ваш предложенный подход к разделению данных и последующему анализу заслуживает внимания. Ниже представлен алгоритм, который можно использовать для агрегации важности признаков по множеству запусков модели:
-
Разделение данных: Начните с случайного разделения вашего набора данных на обучающую (60%) и тестовую (40%) выборки.
-
Кросс-валидация: Используйте кросс-валидацию для подбора гиперпараметров модели. Это поможет избежать переобучения и повысит стабильность получаемых результатов.
-
Обучение модели: Обучите модель на обучающей выборке с наилучшими гиперпараметрами.
-
Извлечение важности признаков: После каждой итерации получите таблицу важности признаков и сохраните её.
-
Повторение процесса: Повторите шаги 1-4 несколько раз (например, 20 раз), чтобы сформировать несколько таблиц важности признаков.
-
Агрегация и анализ:
- Среднее значение: Рассчитайте среднее значение важности каждого признака из всех полученных таблиц.
- Медиана и стандартное отклонение: Для оценки стабильности можно также рассчитать медиану и стандартное отклонение.
- Рейтинг признаков: На основе среднего значения или медианы можно составить окончательный рейтинг признаков, что позволит выделить наиболее важные из них.
3. Уточнения и рекомендации
- Исключение незначительных признаков: После предварительного анализа вероятно стоит отобрать только самые важные признаки (например, топ-100) для последующего моделирования, что существенно сэкономит ресурсы и время.
- Инженерия признаков: Обратите особое внимание на создание новых признаков на основе экспертизы в области. Это часто является наиболее эффективным методом выбора значимых переменных.
- Метрики важности: Для получения людей важности можно использовать такие функции, как
mutual_info_regression
, которые учитывают любые связи между признаками и целевой переменной, выходящие за пределы линейных зависимостей.
Применяя данные рекомендации и систему агрегации важности признаков, вы сможете эффективно отобрать наиболее значимые переменные для вашей модели и заложить прочный фундамент для будущих исследований. Это в свою очередь поможет углубить понимание проблемы и более точно определить направления для дальнейшего анализа.