Jak szybko wybrać ważne zmienne z bardzo dużego zestawu danych?

9

Mam zestaw danych z około 2000 zmiennymi binarnymi / 200 000 wierszy i próbuję przewidzieć pojedynczą zmienną zależną binarnie. Moim głównym celem na tym etapie nie jest uzyskanie dokładności prognoz, ale raczej określenie, które z tych zmiennych są ważnymi predyktorami. Chciałbym zmniejszyć liczbę zmiennych w moim ostatecznym modelu do około 100.

Czy istnieje względnie szybki sposób uzyskania najważniejszych zmiennych? Wydaje się, że randomForest zajmuje dużo czasu.

Nie muszę używać wszystkich 200 000 obserwacji, więc próbkowanie jest opcją na stole.

DevX
źródło
Przez „ważne”, a nie „dokładne” predyktory, masz na myśli, że chcesz znaleźć tych, którzy są najlepszymi kandydatami do wyjaśnienia wyniku i pomocy w zbudowaniu teorii? Jeśli tak, 100 zmiennych objaśniających jest liczbą bardzo dużą - zbyt dużą. Budowanie teorii i prawdziwe wyjaśnienie (a nie zwykłe przewidywanie) prawdopodobnie wymagałoby zmniejszenia liczby X do 10 lub 15.
rolando2
2
@ rolando2 W niektórych aplikacjach 100 nie jest wcale duże. Na przykład literatura na temat dostępności do szybkich łączy szerokopasmowych wskazuje na około 150 zmiennych (spośród wielu setek analizowanych) i wszystkie z nich są racjonalne: dotyczą łatwości inżynierii (terenu, rodzaju skały, klimatu itp.), Ekonomii (SES itp.), Demografii, geometrii lokalnej infrastruktury transportowej, polityce (klimat podatkowy i klimat biznesowy) itp. Uważam, że wiele modeli ekonomicznych może zawierać wiele setek teoretycznie ważnych zmiennych.
whuber
@ whuber - Zastanawiam się nad twoim punktem ... Czy zgodziłbyś się, że potrzeba niezwykle oddanego, utalentowanego i doświadczonego analityka, aby uporządkować przyczynowe (a nie tylko przewidujące) role odgrywane przez tak wiele zmiennych?
rolando2
@rolando Sure. 2000 zmiennych to dużo pracy!
whuber

Odpowiedzi:

6

Możesz zacząć od prostego filtra Univariate i użyć weryfikacji krzyżowej, aby zdecydować, które zmienne zachować. sbfFunkcja w caretpakiecie dla R jest naprawdę przydatna. Możesz przeczytać więcej na ten temat tutaj , od strony 19.

Zach
źródło
Dzięki. Właśnie przeczytałem gazetę i wydaje się to solidnym podejściem. Mam jednak problemy z pamięcią w moim 64-bitowym systemie pamięci 4 MB.
DevX
1
@DevX: Jeśli masz za dużo danych, możesz spróbować pobrać próbkę i wybrać zmienne na podstawie próbki?
Zach.
13

Brzmi to jak odpowiedni problem dla lasso i przyjaciół, którzy dokonują skurczu i wyboru zmiennych. Elementy uczenia statystycznego opisują lasso i elastyczną sieć do regresji, a co bardziej istotne dla tego problemu, regresję logistyczną.

Autorzy książki udostępnili wydajną implementację lasso i elastycznej siatki jako pakiet R o nazwie glmnet . Wcześniej używałem tego pakietu do analizy danych binarnych z macierzami danych zawierającymi około 250 000 wierszy, choć nieco mniej kolumn, ale w rzeczywistości przeprowadzam regresję wszystkich kolumn względem wszystkich innych kolumn. Jeśli macierz danych jest również rzadka, implementacja również może z tego skorzystać i uważam, że metoda może faktycznie działać dla pełnego zestawu danych PO. Oto kilka komentarzy na temat lasso:

  • Lasso dokonuje selekcji zmiennych za pomocą nierównomiernej funkcji kary ( -norm), co ogólnie skutkuje oszacowaniem parametrów, przy czym niektóre parametry są dokładnie równe 0. Ile szacowanych parametrów niezerowych i ile niezerowe parametry są zmniejszane, jest określane przez parametr strojenia. Wydajność implementacji w glmnet zależy w dużej mierze od faktu, że za dużą karę tylko kilka parametrów różni się od 0.1
  • Wyboru parametru dostrajającego często dokonuje się przez walidację krzyżową, ale nawet bez etapu walidacji krzyżowej metoda może być w stanie zapewnić dobrą sekwencję wybranych zmiennych indeksowanych przez parametr kary.
  • Minusem w przypadku wyboru zmiennych jest to, że lasso może być niestabilny w wyborze zmiennych, w szczególności jeśli są one nieco skorelowane. Bardziej elastyczna kara netto została wymyślona w celu poprawy tej niestabilności, ale nie rozwiązuje ona całkowicie problemu. Adaptacyjne lasso to kolejny pomysł na ulepszenie wyboru zmiennych dla lasso.
  • Wybór stabilności jest ogólną metodą sugerowaną przez Meinshausena i Bühlmanna w celu osiągnięcia większej stabilności wybranych zmiennych za pomocą metod takich jak lasso. Wymaga szeregu dopasowań do podpróbek zestawu danych i jako taki jest o wiele bardziej wymagający obliczeniowo.
  • Rozsądnym sposobem myślenia o lasso jest metoda generowania jednowymiarowego zestawu „dobrych” modeli, od modelu z jedną zmienną do modelu bardziej złożonego (niekoniecznie zawierającego wszystkie zmienne) sparametryzowanego parametrem kary. Przeciwnie, filtry jednowymiarowe wytwarzają wybór lub porządek tylko dobrych modeli z jedną zmienną.

W Pythonie istnieje implementacja scikit-learn takich metod, jak lasso i elastyczna sieć.

NRH
źródło
Jako dodatkowy pojęcia, jeśli liczba potencjalnych czynników predykcyjnych skyrockets, podobnie jak w GWAS, można zrobić coś podobnego w tym artykule prefiksem: genomu analizy asocjacji przez lasso ukarany regresji logistycznej
Nick sabbe
@NickSabbe, dzięki za odniesienie. To jest bardzo użyteczne. W kontekście GWAS i prawdopodobnie również w innych kontekstach z ogromną liczbą skorelowanych predyktorów, słyszałem, że Sylvia Richardson poleca wybór modelu Bayesa na podstawie np. Niektórych porównań z wyborem stabilności. Obliczenia MCMC były jednak bardzo wymagające.
NRH
Myślę, że warto bardziej podkreślić Adaptacyjne lasso, ponieważ jest ono łatwe do wdrożenia (prawie tylko dwa wywołania zamiast jednego do glmnetR). Inną opcją jest Próg Lasso, który jest również dość prosty do wdrożenia. Zobacz rozdział 2.9 springer.com/gp/book/9783642201912 .
Benjamin Christoffersen
2

Możesz wykonać regresję logistyczną / test asocjacji chi-kwadrat dla każdej zmiennej i zachować tylko te, które mają wartość p mniejszą niż pewna wartość, powiedzmy .2.

Dolina górska
źródło
4
Aby zrozumieć, jak to zalecenie może się spełnić, rozważ przypadek, w którym istnieje 100 (powiedzmy) ważnych predyktorów (silnie skorelowanych ze zmienną zależną), a reszta jest całkowicie niezwiązana ze zmienną zależną i ze sobą. Zachowanie tych z wartościami p mniejszymi niż 0,2 zapewnia, że ​​skończysz z około 100 + 0,2 * (2000-100) = 480 zmiennych, z których 380 jest bezwartościowych. W przypadku małych zestawów danych takie podejście jest czasem używane jako szybki ekran początkowy, ale tak naprawdę nie można go tutaj poważnie rozważyć.
whuber
Dobry punkt @ whuber. Będziesz musiał ustawić poziom alfa znacznie niżej, aby zachować około 100, ale wtedy możesz przegapić zmienne, które mogą wpływać tylko na dostosowanie dla innych. Jednak przejście od 2000 do 480 może być łatwiejsze w zarządzaniu czymś w rodzaju losowych lasów.
Glen,
Masz rację, taka kontrola ma sens - jeśli działa poprawnie. 480 oznacza redukcję, ale istnieją dodatkowe problemy wynikające z możliwości wysokich korelacji między wszystkimi 2000 pierwotnymi zmiennymi. Może to spowodować, że jedna lub wszystkie 100 poprawnych zmiennych nie zostanie zachowanych, jak pokazano w niektórych odpowiedziach na powiązane pytanie .
whuber