Иллюстрация того, как правильно (и неправильно) выполнять выбор функции с помощью одномерной фильтрации

Работа с наборами данных, которые имеют гораздо больше функций, чем количество наблюдений, теперь обычное дело во многих областях, от информатики до психологии. Это обычно называют проблемой «p› n »(где p = количество признаков и n = количество наблюдений),« проклятием размерности »или моим личным фаворитом, работая с« короткими жирными данными ».

Традиционные методы, такие как линейная регрессия, в этих условиях не работают. Мы можем наблюдать это в игрушечном примере, где мы урезаем набор данных «mtcars», чтобы сделать # строк ‹# столбцов. Пытаясь вычислить бета-коэффициенты, мы сталкиваемся с проблемами сингулярности.

Выбор функции

Распространенной стратегией решения этой проблемы является выполнение выбора функций, цель которого - найти значимое подмножество функций для использования при построении модели. Есть много разных способов выполнить выбор функции (для краткого обзора ознакомьтесь с этим обзором). Здесь мы сосредоточимся на самом простом варианте - на выборе функций с помощью одномерного фильтра. Как и в случае с другими стратегиями выбора признаков, цель одномерного фильтра - найти подмножество признаков, имеющих отношение к результату. Это можно сделать очень простым способом, сопоставив характеристики с результатом и выбрав только те, которые соответствуют определенному порогу (например, абсолютное значение r ›.10).

Зачем сосредотачиваться на одномерных фильтрах для выбора функций?

Как отмечалось в Элементах статистического обучения (ESL) и в статье 2002 года, во многих опубликованных работах выбор признаков был выполнен неправильно. Несомненно, это будет и дальше оставаться проблемой, поскольку персональные данные продолжают становиться все более распространенными в областях биологии, социальных наук и здравоохранения, поскольку исследователи сталкиваются с более крупными наборами данных. На самом деле неудивительно, почему фильтрация обычно выполняется неправильно. На первый взгляд, кажется нет ничего плохого в простом удалении функций из набора данных, не связанных с вашим результатом.

Чтобы проиллюстрировать, как выбор признаков с помощью фильтрации может быть выполнен неправильно и правильно, мы сначала сгенерируем короткий, объемный набор данных, в котором наши предикторы в значительной степени не связаны с нашей зависимой переменной y. Что касается подгонки модели, мы, по сути, будем следовать ESL на страницах 245–247 и кодировать примеры, чтобы увидеть, как эти цифры могут быть получены. Перво-наперво, давайте сгенерируем некоторые в основном ортогональные данные.

Неправильная одномерная фильтрация

Теперь, когда у нас есть данные, я покажу, как неправильно фильтровать данные, отбирая данные вне перекрестной проверки. То есть, взяв весь набор данных, сохраняя функции, которые коррелируют с результатом на уровне r = .1 или выше, и впоследствии построив модель. Для 100 итераций мы разделим этот набор данных на обучающие и тестовые наборы и изучим распределение корреляций между наблюдаемыми и прогнозируемыми значениями.

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

Правильная одномерная фильтрация

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

Чтобы реализовать это, мы воспользуемся функцией в каретке SBF (выделение фильтрацией). Спецификация внешнего цикла проверки, который управляет фильтрацией, выполняется в «sbfControl», в то время как настройка параметров указывается как нормальная в «trainControl». Для непрерывных результатов и функций каретка использует обобщенные аддитивные модели, чтобы связать результат с каждой функцией - приятный штрих, который может уловить нелинейные отношения. Значение p из каждой из этих моделей используется в качестве критерия фильтрации. По умолчанию установлено значение p = 0,05, что означает, что функции будут сохранены только в том случае, если они имеют значительную связь с результатом на этом уровне.

Как и ожидалось, мы видим сильную взаимосвязь во внутреннем цикле обучения, но наблюдаем по существу ортогональные прогнозы (среднее r около 0) во внешнем цикле обучения и когда мы, наконец, подбираем нашу модель слева. данные. Если вы посмотрите страницу 246 ESL, вы заметите похожую картину результатов.

Сравнение с Glmnet

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

Как и ожидалось, среднее значение r равно примерно 0.

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

Подведение итогов

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