Изучите пять простых скриптов на Python для эффективного отбора признаков. Каждый из них практичен, минималистичен и прост в использовании в реальных проектах.

Изображение предоставлено автором.
# Введение
Как специалист в области машинного обучения, вы знаете, что отбор признаков — важная, но трудоемкая работа. Вам необходимо определить, какие признаки действительно влияют на производительность модели, удалить избыточные переменные, выявить мультиколлинеарность, отфильтровать зашумленные признаки и найти оптимальное подмножество признаков. Для каждого метода отбора вы тестируете различные пороговые значения, сравниваете результаты и отслеживаете, что работает лучше всего.
По мере роста пространства признаков эта задача становится все сложнее. При наличии сотен инженерных признаков вам потребуются систематические подходы для оценки важности признаков, устранения избыточности и выбора наилучшего подмножества.
В этой статье рассматриваются пять скриптов на языке Python, предназначенных для автоматизации наиболее эффективных методов отбора признаков.
Скрипты можно найти на GitHub .
# 1. Фильтрация постоянных признаков с использованием пороговых значений дисперсии
// Болевая точка
Признаки с низкой или нулевой дисперсией предоставляют мало или совсем никакой информации для прогнозирования. Признак, который остается постоянным или почти постоянным во всех выборках, не может помочь различить разные целевые классы. Ручное определение таких признаков означает вычисление дисперсии для каждого столбца, установку соответствующих пороговых значений и обработку крайних случаев, таких как бинарные признаки или признаки с разными масштабами.
// Что делает скрипт
Выявляет и удаляет признаки с низкой дисперсией на основе настраиваемых пороговых значений. Правильно обрабатывает как непрерывные, так и бинарные признаки, нормализует расчеты дисперсии для справедливого сравнения в разных масштабах и предоставляет подробные отчеты, показывающие, какие признаки были удалены и почему.
// Как это работает
Скрипт вычисляет дисперсию для каждого признака, применяя различные стратегии в зависимости от типа признака.
- Для непрерывных признаков вычисляется стандартное отклонение, и при необходимости может быть выполнена нормализация по диапазону значений признака для обеспечения сопоставимости пороговых значений.
- Для бинарных признаков вычисляется доля миноритарного класса, поскольку дисперсия бинарных признаков связана с дисбалансом классов.
Признаки, не достигшие порогового значения, помечаются для удаления. Для обеспечения прозрачности скрипт поддерживает сопоставление удаленных признаков и их дисперсионных показателей.
⏩ Получите скрипт для выбора признаков на основе порогового значения дисперсии
# 2. Исключение избыточных признаков посредством корреляционного анализа
// Болевая точка
Сильно коррелированные признаки избыточны и могут вызывать проблемы мультиколлинеарности в линейных моделях. Когда два признака имеют высокую корреляцию, сохранение обоих увеличивает размерность без добавления информации . Но при наличии сотен признаков выявление всех коррелированных пар, решение о том, какие из них сохранить, и обеспечение сохранения признаков, наиболее коррелированных с целевым значением, требует систематического анализа.
// Что делает скрипт
Выявляет пары признаков с высокой степенью корреляции, используя коэффициент корреляции Пирсона для числовых признаков и коэффициент Крамера V для категориальных признаков. Для каждой пары признаков автоматически выбирает, какой из них оставить, исходя из корреляции с целевой переменной. Удаляет избыточные признаки, максимизируя при этом прогностическую мощность. Генерирует тепловые карты корреляции и подробные отчеты об удаленных признаках.
// Как это работает
Скрипт вычисляет корреляционную матрицу для всех признаков. Для каждой пары, превышающей пороговое значение корреляции, он сравнивает корреляцию обоих признаков с целевой переменной. Признак с более низкой целевой корреляцией помечается для удаления. Этот процесс продолжается итеративно для обработки цепочек коррелированных признаков. Скрипт обрабатывает пропущенные значения, смешанные типы данных и предоставляет визуализации, показывающие кластеры корреляции и решение о выборе для каждой пары.
⏩ Получите скрипт для выбора признаков на основе корреляции
# 3. Выявление значимых характеристик с помощью статистических тестов
// Болевая точка
Не все признаки имеют статистически значимую связь с целевой переменной. Признаки, не демонстрирующие значимой связи с целевой переменной, добавляют шум и часто увеличивают риск переобучения. Проверка каждого признака требует выбора соответствующих статистических тестов, вычисления p-значений, коррекции на множественное тестирование и правильной интерпретации результатов.
// Что делает скрипт
Скрипт автоматически выбирает и применяет соответствующий статистический тест в зависимости от типа признака и целевой переменной. Он использует F-тест дисперсионного анализа (ANOVA) для числовых признаков в паре с целевой переменной классификации, критерий хи-квадрат для категориальных признаков, оценку взаимной информации для выявления нелинейных зависимостей и F-тест регрессии, когда целевая переменная является непрерывной. Затем он применяет поправку Бонферрони или поправку на ложноположительные результаты (FDR) для учета множественных сравнений и возвращает все признаки, ранжированные по статистической значимости, вместе с их p-значениями и статистическими показателями теста.
// Как это работает
Сначала скрипт определяет тип признака и тип цели, а затем направляет каждый признак к соответствующему тесту. Для задач классификации с числовыми признаками используется дисперсионный анализ (ANOVA), который проверяет, существенно ли различается среднее значение признака в разных классах цели. Для категориальных признаков используется критерий хи-квадрат для проверки статистической независимости между признаком и целью. Наряду с ними вычисляются показатели взаимной информации, чтобы выявить любые нелинейные зависимости, которые могут быть упущены стандартными тестами. Если цель является непрерывной, вместо этого используется регрессионный F-тест.
После проведения всех тестов значения p корректируются с использованием либо поправки Бонферрони (где каждое значение p умножается на общее количество признаков), либо метода коррекции ложноположительных результатов (менее консервативный метод). Признаки со скорректированными значениями p ниже порогового значения значимости по умолчанию 0,05 помечаются как статистически значимые и имеют приоритет при включении в анализ.
⏩ Получите скрипт для выбора признаков на основе статистического теста
Если вас интересует более строгий статистический подход к отбору признаков, я предлагаю вам дополнительно улучшить этот скрипт, как описано ниже.
// Что еще можно изучить и улучшить
В случаях, когда предположения не выполняются, следует использовать непараметрические альтернативы. Дисперсионный анализ (ANOVA) предполагает приблизительное нормальное распределение и равенство дисперсий между группами. Для сильно асимметричных или ненормально распределенных признаков более надежным вариантом является использование критерия Краскала-Уоллиса , который не делает никаких предположений о распределении.
С категориями с низкой частотой встречаемости следует обращаться осторожно. Критерий хи-квадрат требует, чтобы ожидаемая частота ячеек составляла не менее 5. Если это условие не выполняется — что часто встречается в категориях с высокой мощностью множества или низкой частотой встречаемости — более безопасной и точной альтернативой является точный критерий Фишера .
Показатели взаимной информации следует рассматривать отдельно от p-значений. Поскольку показатели взаимной информации не являются p-значениями, они не вписываются естественным образом в рамки поправки Бонферрони или FDR. Более чистый подход заключается в ранжировании признаков по показателю взаимной информации независимо и использовании его в качестве дополнительного сигнала, а не в объединении их в один и тот же алгоритм оценки значимости.
В условиях высокой размерности предпочтительнее использовать коррекцию ложноположительных результатов (FDR). Метод Бонферрони по своей природе консервативен, что уместно, когда ложные срабатывания обходятся очень дорого, но он может отбрасывать действительно полезные признаки, если их много. Коррекция FDR Бенджамини-Хохберга обеспечивает большую статистическую мощность в больших наборах данных и, как правило, предпочтительнее в рабочих процессах отбора признаков в машинном обучении.
Наряду с p-значениями, следует указывать и величину эффекта. Статистическая значимость сама по себе не говорит о том, насколько практически важна та или иная характеристика. Сопоставление p-значений с показателями величины эффекта дает более полную картину того, какие характеристики стоит сохранить.
Добавьте тест на значимость на основе перестановок. Для сложных или смешанных наборов данных перестановочное тестирование предлагает независимый от модели способ оценки значимости без опоры на какие-либо предположения о распределении. Оно работает путем многократного перемешивания целевой переменной и проверки того, как часто признак получает такой же результат случайно.
# 4. Ранжирование признаков с использованием оценок важности на основе модели.
// Болевая точка
Оценка важности признаков на основе модели позволяет напрямую определить, какие признаки влияют на точность прогнозирования, однако разные модели дают разные оценки важности. Запуск нескольких моделей, извлечение оценок важности и объединение результатов в согласованный рейтинг — сложная задача.
// Что делает скрипт
Обучает несколько типов моделей и извлекает из каждой из них важность признаков. Нормализует оценки важности признаков по всем моделям для справедливого сравнения. Вычисляет важность ансамбля путем усреднения или ранжирования по моделям. Предоставляет оценку важности методом перестановок в качестве альтернативы, не зависящей от модели. Возвращает ранжированные признаки с оценками важности от каждой модели и рекомендуемыми подмножествами признаков.
// Как это работает
Скрипт обучает каждый тип модели на полном наборе признаков и извлекает исходные оценки важности, такие как важность на основе деревьев для лесов и коэффициенты для линейных моделей. Для оценки важности путем перестановки он случайным образом перемешивает каждый признак и измеряет снижение производительности модели. Оценки важности нормализуются таким образом, чтобы их сумма равнялась 1 внутри каждой модели.
Показатель ансамбля вычисляется как средний ранг или средняя нормализованная важность по всем моделям. Признаки сортируются по важности ансамбля, и выбираются N лучших признаков или признаки, превышающие пороговое значение важности.
⏩ Получите скрипт селектора на основе модели
# 5. Оптимизация подмножеств признаков с помощью рекурсивного исключения
// Болевая точка
Оптимальное подмножество признаков не всегда состоит из N наиболее важных признаков по отдельности; взаимодействие признаков также имеет значение. Признак может казаться слабым сам по себе, но быть ценным в сочетании с другими. Рекурсивное исключение признаков проверяет подмножества признаков путем итеративного удаления наиболее слабых признаков и переобучения моделей. Но это требует выполнения сотен итераций обучения модели и отслеживания производительности для подмножеств различного размера.
// Что делает скрипт
Систематически удаляет признаки в итеративном процессе, переобучая модели и оценивая производительность на каждом шаге. Начинает со всех признаков и удаляет наименее важный признак на каждой итерации. Отслеживает производительность модели для всех размеров подмножеств. Определяет оптимальное подмножество признаков, которое максимизирует производительность или достигает целевой производительности при минимальном количестве признаков. Поддерживает перекрестную проверку для получения надежных оценок производительности.
// Как это работает
Скрипт начинает работу с полного набора признаков и обучает модель. Он ранжирует признаки по важности и удаляет признак с самым низким рейтингом. Этот процесс повторяется, обучая новую модель с уменьшенным набором признаков на каждой итерации. Для каждого размера подмножества регистрируются показатели производительности, такие как точность, F1 и AUC.
Скрипт применяет перекрестную проверку для получения стабильных оценок производительности на каждом шаге. Итоговый результат включает кривые производительности, показывающие, как метрики изменяются в зависимости от количества признаков и оптимального подмножества признаков. Это означает, что вы видите либо оптимальную производительность, либо точку перегиба, где добавление признаков дает убывающую отдачу.
⏩ Получите скрипт рекурсивного удаления функций
# Завершение
Эти пять скриптов рассматривают основные проблемы выбора признаков, определяющие производительность модели и эффективность обучения. Вот краткий обзор:
| Сценарий | Описание |
|---|---|
| Селектор порогового значения дисперсии | Удаляет неинформативные постоянные или почти постоянные характеристики. |
| Селектор на основе корреляции | Устраняет избыточные функции, сохраняя при этом точность прогнозирования. |
| Инструмент выбора статистических тестов | Выявляет признаки, имеющие значимую связь с целевым объектом. |
| Селектор на основе модели | Ранжирует признаки, используя ансамблевую важность, полученную из нескольких моделей. |
| Рекурсивное исключение признаков | Находит оптимальные подмножества признаков посредством итеративного тестирования. |
Каждый скрипт можно использовать независимо для решения конкретных задач отбора или объединить в полный конвейер обработки данных. Удачного отбора признаков!
Бала Прия С. — разработчик и технический писатель из Индии. Ей нравится работать на стыке математики, программирования, анализа данных и создания контента. В сферу её интересов и компетенции входят DevOps, анализ данных и обработка естественного языка. Она любит читать, писать, программировать и пить кофе! В настоящее время она работает над изучением и распространением своих знаний среди сообщества разработчиков, создавая учебные пособия, руководства, аналитические статьи и многое другое. Бала также создает увлекательные обзоры ресурсов и обучающие материалы по программированию.
Источник: www.kdnuggets.com






















