Do tej pory usunąłem zmienne współliniowe w ramach procesu przygotowania danych, patrząc na tabele korelacji i eliminując zmienne, które przekraczają pewien próg. Czy istnieje bardziej akceptowany sposób na zrobienie tego? Ponadto jestem świadomy, że patrzenie tylko na korelację między 2 zmiennymi jednocześnie nie jest idealne, pomiary takie jak VIF uwzględniają potencjalną korelację między kilkoma zmiennymi. Jak można systematycznie wybierać kombinacje zmiennych, które nie wykazują wielokoliniowości?
Mam swoje dane w ramce danych pand i używam modeli sklearn.
python
multicollinearity
scikit-learn
pomarańczowy 1
źródło
źródło
Odpowiedzi:
Dzięki SpanishBoy - To dobry kawałek kodu. @ilanman: Sprawdza wartości VIF, a następnie upuszcza zmienne, których VIF jest większy niż 5. Przez „wydajność” myślę, że ma na myśli czas działania. Powyższy kod zajął mi około 3 godzin, aby uruchomić na około 300 zmiennych, 5000 wierszy.
Nawiasem mówiąc, zmodyfikowałem go, aby usunąć dodatkowe pętle. Poza tym sprawiłem, że jest trochę czystszy i zwracam ramkę danych ze zredukowanymi zmiennymi. Ta wersja skróciła mój czas działania o połowę! Mój kod jest poniżej - Mam nadzieję, że to pomaga.
źródło
usdm
metoda pakietowavifstep
) dla VIF, a czas działania był naprawdę fajny. Jak powiedziałem wcześniej, powyższy wariant i twój (zoptymalizowany o połowę) są tak powolni w porównaniu z R. Czy są jeszcze inne pomysły na optymalizację?Możesz spróbować użyć poniższego kodu:
Działa, ale nie podoba mi się wydajność tego podejścia
źródło
Próbowałem odpowiedzi SpanishBoy i znalazłem serwal błędy, uruchamiając ją dla ramki danych. Oto debugowane rozwiązanie.
Nie miałem również problemów z wydajnością, ale nie przetestowałem go dokładnie.
źródło
RuntimeWarning: divide by zero encountered in double_scalars