Как быстро выбрать важные переменные из очень большого набора данных?


9

У меня есть набор данных с около 2000 двоичных переменных / 200 000 строк, и я пытаюсь предсказать одну двоичную зависимую переменную. Моя главная цель на данном этапе - не получить точность прогноза, а скорее определить, какие из этих переменных являются важными предикторами. Я хотел бы уменьшить количество переменных в моей окончательной модели до примерно 100.

Есть ли относительно быстрый способ получения наиболее важных переменных? randomForest, кажется, занимает много времени.

Мне не нужно использовать все 200 000 наблюдений, поэтому выборка - это вариант на столе.


Под «важными», а не «точными» предикторами вы подразумеваете, что хотите найти тех, которые являются лучшими кандидатами для объяснения результата и помощи в построении теории? Если это так, 100 объясняющих переменных - это очень большое число - непомерно большое. Построение теории и истинное объяснение (а не простое предсказание), вероятно, потребует, чтобы вы сократили количество X до 10 или 15.
rolando2

2
@ rolando2 В некоторых приложениях 100 совсем невелико. Например, литература о доступности высокоскоростной широкополосной связи указывает примерно на 150 переменных (из многих сотен проанализированных), и все они являются разумными: они касаются простоты проектирования (рельеф, тип породы, климат и т. Д.), Экономики (SES и т. Д.), Демографии, геометрии местной транспортной инфраструктуры, политике (налоговый и деловой климат) и т. Д. Я считаю, что многие экономические модели также могут включать в себя многие сотни теоретически важных переменных.
uuber

@whuber - Я обдумываю вашу точку зрения ... Согласитесь ли вы с тем, что требуется необычайно преданный, талантливый и опытный аналитик, чтобы разобраться в причинных (а не просто предсказательных) ролях, которые играют так много переменных?
rolando2

@rolando Конечно. 2000 переменных - это много работы!
whuber

Ответы:


6

Вы можете начать с простого фильтра Univariate и использовать перекрестную проверку, чтобы решить, какие переменные оставить. sbfФункция в caretпакете для R является действительно полезной. Вы можете прочитать больше об этом здесь , начиная со страницы 19.


Спасибо. Я только что прочитал газету, и это кажется надежным подходом. Однако я столкнулся с некоторыми проблемами с памятью в моей 64-битной системе памяти 4 МБ.
DevX

1
@DevX: Если у вас слишком много данных, вы можете попробовать взять выборку и выбрать переменные на основе выборки?
Зак

13

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

Авторы книги сделали эффективную реализацию лассо и эластичной сетки доступной в виде R-пакета под названием glmnet . Ранее я использовал этот пакет для анализа двоичных данных с матрицами данных приблизительно из 250 000 строк, хотя несколько меньше столбцов, но фактически выполнял регрессии всех столбцов относительно всех других столбцов. Если матрица данных также является разреженной, реализация также может воспользоваться этим, и я полагаю, что метод может действительно работать для полного набора данных OPs. Вот несколько комментариев о лассо:

  • 1
  • Выбор параметра настройки часто выполняется путем перекрестной проверки, но даже без этапа перекрестной проверки способ может дать хорошую последовательность выбранных переменных, проиндексированных параметром штрафов.
  • Недостатком выбора переменных является то, что лассо может быть нестабильным при выборе переменных, в частности, если они несколько коррелированы. Для улучшения этой нестабильности был изобретен более общий эластичный штраф, но он не решает проблему полностью. Адаптивное лассо - еще одна идея для улучшения выбора переменных для лассо.
  • Выбор стабильности - это общий метод, предложенный Майнсхаузеном и Бюльманом для достижения большей стабильности выбранных переменных с помощью методов, подобных лассо. Он требует нескольких подгонок к подвыборкам набора данных и, как таковой, требует гораздо больших вычислительных ресурсов.
  • Разумный образ мышления лассо - это метод создания одномерного набора «хороших» моделей, начиная от модели с одной переменной и заканчивая более сложной моделью (не обязательно включающей все переменные), параметризованной параметром штрафов. Напротив, одномерные фильтры производят выбор или упорядочение только хороших моделей с одной переменной.

Для Python в scikit-learn есть реализация таких методов, как лассо и эластичная сеть.


В качестве дополнительного понятия, если количество потенциальных предикторов резко возрастет, как в GWAS, вы можете сделать что-то вроде этой статьи, чтобы предварительно выбрать: анализ ассоциации по всему геному с помощью лассо-наказанной логистической регрессии
Ник Сэбб,

@NickSabbe, спасибо за эту ссылку. Это очень полезно. В контексте GWAS, а также, возможно, также в других контекстах с огромным количеством коррелированных предикторов, я слышал, что Сильвия Ричардсон рекомендует выбор байесовской модели на основе, например, некоторых сравнений с выбором стабильности. Однако вычисления MCMC действительно требовательны.
NRH

Я думаю, что стоит обратить особое внимание на Adaptive lasso, поскольку его легко реализовать (почти два вызова вместо одного glmnetв R). Другой вариант - Thresholding the Lasso, который также довольно прост в реализации. См. Раздел 2.9 сайта springer.com/gp/book/9783642201912 .
Бенджамин Кристофферсен

2

Вы можете сделать логистическую регрессию / критерий хи-квадрат для каждой переменной и сохранить только те, у которых значение p меньше некоторого значения, скажем .2.


4
Чтобы понять, как эта рекомендация может быть выполнена, рассмотрим случай, когда существует 100 (скажем) важных предикторов (сильно коррелированных с зависимой переменной), а остальные абсолютно не связаны с зависимой переменной и друг с другом. Сохранение значений с p-значениями менее 0,2 гарантирует, что вы получите примерно 100 + 0,2 * (2000-100) = 480 переменных, из которых 380 бесполезны. Для небольших наборов данных этот подход иногда используется в качестве быстрого начального экрана, но он действительно не может быть серьезно рассмотрен здесь.
whuber

Хороший вопрос @whuber. Вы должны будете установить свой альфа-уровень намного ниже, чтобы сохранить около 100, но тогда вы можете пропустить переменные, которые могут влиять только на других. Однако переход от 2000 к 480 мог бы быть более управляемым при запуске чего-то вроде случайных лесов.
Глен

Вы правы, есть смысл в такой проверке - если она работает правильно. 480 - сокращение, но есть дополнительные проблемы из-за возможности высокой корреляции среди всех 2000 исходных переменных. Это может привести к тому, что любая из 100 правильных переменных не будет сохранена, как показано в некоторых ответах на связанный вопрос .
whuber
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.