Большинству из нас нужно интерпретировать наши модели, а не просто обучать их и хранить в памяти. И наиболее часто задаваемый вопрос: "Как мне проверить важность моей функции?"

Возьмем пример из реальной жизни. Когда мы готовимся к экзаменам, мы должны пройти несколько глав по предмету. Некоторые главы имеют решающее значение (задают в 70–80% случаев), тогда как некоторые менее важны. Откуда мы это знаем? Весы!! Мы видим вес главы, глядя на предыдущие экзаменационные работы. Почему бы нам не изучить все главы? Просто потому, что это добавляет шума в наш процесс обучения. Что, если есть глава, представляющая собой смесь двух глав, которые вы уже прошли. Вы бы прочитали это? Нет! Эти два мы уже прочитали: P

Сегодня мы углубимся в то, как рассчитывается важность функции и как улучшается показатель точности модели.

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

Написание с нуля будет выглядеть так:

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

Но я хотел бы упомянуть здесь одну оговорку, которую большинство людей упускают из виду. Эти методы будут работать только в том случае, если все функции независимы друг от друга. Не соотнесены друг с другом. В большинстве проектов у нас есть знание предметной области, поэтому мы можем отбросить функции, которые коррелируют друг с другом. Но в остальных случаях с помощью метода ранговой корреляции Спирмена. Теперь, почему мы не можем сохранить высококоррелированные функции?

Давайте изменим наши данные и продублируем один столбец. При этом то, что происходит внутренне, - это во время построения модели RF, разделение узлов будет выбирать одинаково важные переменные примерно 50–50 раз. Это означает, что когда вы вычисляете важность функции, важность также будет разделена поровну. Хотя это может не быть проблемой во время выбора функций, но это повлияет на интерпретируемость модели. Это может привести к неверному выводу о том, что один из признаков является сильным предиктором, а другие в той же группе неважны, хотя на самом деле они очень близки по своей взаимосвязи.

Рассмотрим исходные данные с 6 функциями и их важностью:

Теперь давайте дублируем функцию f6 как «f6_duplicate», а затем вычисляем важность:

Как видите, первоначальная важность признака f6, равная 0,1, грубо делится на 0,07 и 0,017.

Эта статья для iSchoolConnect — первая из многих других, которые я надеюсь опубликовать в области машинного обучения. Следите за этой публикацией, чтобы узнать больше :)