Як швидко вибрати важливі змінні з дуже великого набору даних?


9

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

Чи є відносно швидкий спосіб отримання найважливіших змінних? randomForest, здається, займає тривалий час.

Мені не доведеться використовувати всі 200 000 спостережень, тому вибірки є варіантом на столі.


Під "важливими", а не "точними" прогнозами, ти маєш на увазі, що ти хочеш знайти тих, хто найкращий кандидат, щоб пояснити результат та допомогти побудувати теорію? Якщо так, то 100 пояснювальних змінних дуже велика кількість - непомірно велика. Побудова теорії та правдиве пояснення (а не просто передбачення), ймовірно, вимагають зменшити кількість X до 10 або 15.
rolando2

2
@ rolando2 У деяких додатках 100 зовсім не велика. Наприклад, література про доступність до високошвидкісного широкосмугового зв'язку вказує приблизно на 150 змінних (з багатьох сотень, що аналізуються), і всі вони розумні: вони стосуються простоти техніки (рельєф, тип скелі, клімату тощо), економіки (ЄЕП тощо), демографії, геометрії місцевої транспортної інфраструктури, політиці (податковий та бізнес-клімат) тощо. Я вважаю, що багато економічних моделей можуть включати багато сотень теоретично важливих змінних.
whuber

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

@rolando Звичайно. 2000 змінних - велика робота!
whuber

Відповіді:


6

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


Дякую. Я просто читаю статтю, і це здається твердим підходом. Однак я зіткнувся з деякими проблемами пам'яті в моїй 64-бітовій системі пам'яті 4 Мб.
DevX

1
@DevX: Якщо у вас занадто багато даних, ви можете спробувати взяти вибірку та вибрати змінні на основі вибірки?
Зак

13

Це звучить як відповідна проблема для ласо і друзів, які роблять усадку і змінюють вибір. Елементи статистичного навчання описують ласо та еластичну сітку для регресії та, що більш актуально для цієї проблеми, логістичну регресію.

Автори книги зробили ефективну реалізацію сітки та еластичної сітки, доступної у вигляді пакету R під назвою glmnet . Раніше я використовував цей пакет для аналізу двійкових даних з матрицями даних приблизно в 250 000 рядків, хоч дещо менше стовпців, але фактично виконував регресії всіх стовпців проти всіх інших стовпців. Якщо матриця даних також є рідкою, реалізація може скористатися і цим, і я вважаю, що метод може реально працювати для повного набору даних ОП. Ось кілька коментарів щодо ласо:

  • Лассо досягає вибору змінної, використовуючи функцію штрафу, яка є негладкою ( ), яка, як правило, призводить до оцінки параметрів, де деякі параметри точно рівні 0. Скільки ненульових параметрів оцінюється і скільки ненульові параметри стискаються, визначається параметром настройки. Ефективність реалізації в glmnet значною мірою залежить від того, що для великого штрафу лише декілька параметрів відрізняються від 0.1
  • Вибір параметра настройки часто проводиться шляхом перехресної перевірки, але навіть без кросу перехресної перевірки метод може бути в змозі надати гарну послідовність вибраних змінних, індексованих параметром штрафу.
  • З іншого боку, для вибору змінних полягає в тому, що ласо може бути нестабільним у відборі змінних, зокрема, якщо вони дещо співвідносяться. Для покращення цієї нестабільності було винайдено більш загальне пружне чисте покарання, але воно не вирішує проблему повністю. Адаптивна ласо - це ще одна ідея, яка покращиться при виборі змінної для ласо.
  • Вибір стабільності - це загальний метод, запропонований Майнсхаузеном та Бюльманом для досягнення більшої стабільності вибраних змінних за допомогою таких методів, як ласо. Він вимагає певної кількості підходів до підпроборів набору даних і, як такий, набагато більш обчислювальний.
  • Розумний спосіб мислення Лассо - це метод генерування одновимірного набору "хороших" моделей, починаючи від однозмінної моделі до більш складної моделі (не обов'язково включаючи всі змінні), параметризованої параметром штрафу. На відміну від цього, уніваріантні фільтри виробляють вибір або замовлення лише хороших одно змінних моделей.

Для Python є впровадження в scikit-learn таких методів, як ласо і еластична сітка.


Як додане поняття, якщо кількість потенційних прогнокторів зростає, як у GWAS, ви можете зробити щось подібне у цій статті для попереднього вибору: Аналіз асоціацій на геном шляхом ласо-пенізованої логістичної регресії
Nick Sabbe

@NickSabbe, дякую за це посилання. Це дуже корисно. У контексті GWAS, а також, мабуть, і в інших контекстах з величезною кількістю корельованих прогнозів, я чув, як Сильвія Річардсон рекомендує вибір байєсівської моделі на основі, наприклад, деяких порівнянь з вибором стабільності. Однак обчислення MCMC були дуже вимогливими.
NRH

Я думаю, що варто наголосити на адаптивному ласо, оскільки його легко здійснити (майже всього два дзвінки замість одного glmnetв R). Інший варіант - Порог Лассо, який також досить простий у виконанні. Дивіться розділ 2.9 Springer.com/gp/book/9783642201912 .
Бенджамін Кристофферсен

2

Ви можете зробити логістичну регресію / тест-квадрат-тест асоціації для кожної змінної і зберегти лише ті, у яких p-значення менше деякого значення, скажімо, .2.


4
Щоб зрозуміти, як ця рекомендація може виконуватись, розглянемо випадок, коли є 100 (скажімо) важливих предикторів (сильно корелюються із залежною змінною), а решта абсолютно не пов'язані із залежною змінною та один з одним. Якщо зберегти значення з р-значеннями менше 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.