Mam zestaw danych zawierający około 5000 funkcji. Dla tych danych najpierw użyłem testu Chi Square do wyboru funkcji; potem otrzymałem około 1500 zmiennych, które wykazały związek istotności ze zmienną odpowiedzi.
Teraz muszę dopasować do tego regresję logistyczną. Używam pakietu glmulti dla R (pakiet glmulti zapewnia efektywny wybór podzbiorów dla vlm), ale może używać tylko 30 funkcji jednocześnie, w przeciwnym razie jego wydajność spada, ponieważ liczba wierszy w moim zestawie danych wynosi około 20000.
Czy istnieje inne podejście lub techniki rozwiązania powyższych problemów? Jeśli zastosuję powyższą metodę, dopasowanie modelu zajmie zbyt dużo czasu.
sklearn
„sLogisticRegression
i rozwiązuje 4000 funkcji, 20.000 wierszy problemu w około minuty na moim laptopie.Odpowiedzi:
Nie należy przeprowadzać przeglądu funkcji, a następnie wprowadzać funkcje, które przeżyły, do metody, która nie rozumie, ile tortur przeprowadzono wcześniej. Lepiej jest zastosować metodę, która może obsłużyć wszystkie potencjalne cechy (np. Elastyczną siatkę). Sugestie innych osób dotyczące stosowania redukcji danych są również doskonałymi pomysłami.
źródło
Pierwszym podejściem jest użycie PCA w celu zmniejszenia wymiarów zestawu danych. Staraj się zachować ~ 97% całkowitej wariancji, może to nieco pomóc.
Inną opcją jest użycie stochastycznego spadku gradientu, może to być znacznie szybszy algorytm i pasujący do pamięci R.
EDYCJA: Jednym z problemów z R jest to, że możesz używać tylko pamięci RAM, więc jeśli masz tylko 8 GB pamięci, to do tego jesteś ograniczony. Zetknąłem się z wieloma problemami i od tego czasu zacząłem używać scikit-learn Pythona, który wydaje się znacznie lepiej obsługiwać większe zbiory danych.
Bardzo fajny wykres, który daje pewne wyobrażenie o miejscach do rozpoczęcia w oparciu o rozmiar zestawu danych, można znaleźć tutaj: http://3.bp.blogspot.com/-dofu6J0sZ8o/UrctKb69QdI/AAAAAAAADfg/79ewPecn5XU/s1600/scikit-learn-flow -chart.jpg
źródło
Jak już wspomniano @Frank Harrell, użycie elastycznej siatki lub LASSO do przeprowadzenia regresji karnej ze wszystkimi 5000 cechami ( p ) byłoby dobrym początkiem do wyboru cech (nie można po prostu usunąć 3500 zmiennych, ponieważ nie są one „statystycznie istotne” z zależna zmienna zainteresowania). Każdą z tych metod można wykonać przy użyciu pakietu R
glmnet
. , .Aby uwzględnić relacje wspólne między potencjalnymi zmiennymi predykcyjnymi będącymi przedmiotem zainteresowania ( p = 5000), zaleciłbym uruchomienie losowego lasu za pomocą
randomForest
pakietu i / lub zwiększenie gradientu za pomocągbm
pakietu w celu oceny względnej ważności potencjalnych zmiennych predykcyjnych w odniesieniu do wyniku binarnego. Dzięki tym informacjom będziesz znacznie lepiej przygotowany do zbudowania bardziej oszczędnego modelu regresji logistycznej.źródło
Zakładam, że nie jesteś ograniczony do R, ponieważ jest to problem dużych zbiorów danych, którego prawdopodobnie nie powinieneś. Możesz wypróbować MLlib , która jest skalowalną biblioteką uczenia maszynowego Apache Spark.
Z kolei Apache Spark to szybki i ogólny silnik do przetwarzania danych na dużą skalę w pamięci. Działają one na platformie Hadoop, która umożliwia rozproszone przetwarzanie dużych zbiorów danych w klastrach komputerów przy użyciu prostych modeli programowania. Został zaprojektowany do skalowania z pojedynczych serwerów na tysiące komputerów, z których każdy oferuje lokalne obliczenia i pamięć.
Pamiętaj, że „tysiące komputerów” jest opcjonalne (!), Możesz je również skonfigurować na lokalnym komputerze stacjonarnym do pracy / domu.
Wracając do MLlib, zawiera następujące algorytmy:
Jeśli regularnie pracujesz z dużymi zbiorami danych, może być konieczne przyjęcie rozwiązania Hadoop.
źródło
Możesz wypróbować Vowpal Wabbit: Vowpal Wabbit . Działa dobrze z bardzo dużymi zestawami danych i bardzo dużą liczbą funkcji.
według strony internetowej:
źródło