Korzystam z pakietu imprezowego w R z 10 000 wierszy i 34 funkcjami, a niektóre funkcje czynnikowe mają ponad 300 poziomów. Czas przetwarzania jest za długi. (Jak dotąd zajęło to 3 godziny i jeszcze się nie skończyło.)
Chcę wiedzieć, które elementy mają duży wpływ na czas obliczeń losowego lasu. Czy ma to zbyt wiele czynników? Czy są jakieś zoptymalizowane metody poprawy czasu obliczeń RF?
r
random-forest
Chenghao Liu
źródło
źródło
Ponieważ randomForest jest zbiorem niezależnych wózków szkolonych na losowym podzbiorze funkcji i zapisów, nadaje się do równoległości.
combine()
Funkcja w lasy losowe pakietu będzie połączyć ze sobą niezależnie wyszkolonych lasy. Oto przykład zabawki. Jak stwierdza odpowiedź @mpq, nie należy używać zapisu formuły, ale przekazać ramkę danych / macierz zmiennych i wektor wyników. Bezwstydnie zdjąłem je z dokumentów.Przekazałem funkcję łączenia randomForest do podobnie nazwanego parametru .combine (który steruje funkcją na wyjściu pętli. Wadą jest brak wskaźnika błędów OOB lub bardziej tragicznie zmienne znaczenie.
Edytować:
Po ponownym przeczytaniu postu zdaję sobie sprawę, że nie mówię nic o kwestii czynnika 34+. Całkowicie nie przemyślaną odpowiedzią może być przedstawienie ich jako zmiennych binarnych. To jest każdy czynnik kolumna, która jest zakodowana na poziomie 0/1 współczynnik na temat jego obecności / braku obecności. Dokonując selekcji zmiennych dotyczących nieistotnych czynników i usuwając je, możesz zatrzymać zbyt dużą przestrzeń dla funkcji.
źródło
Sugerowałbym kilka linków:
1) Zmniejszenie liczby poziomów zmiennej czynnikowej jest linkiem do pytania,
stackoverflow
które dotyczy podobnego problemu podczas korzystania zrandomForest
pakietu. W szczególności dotyczy to używania tylko najczęściej występujących poziomów i przypisywania nowego poziomu do wszystkich innych, rzadziej występujących poziomów.Pomysł zrodził się stąd: Powolne wyzwanie KDD Cup 2009 . Dane dla tej konkurencji zawierały wiele czynników i wiele poziomów. Omówiono niektóre metody, które wykorzystali do zmniejszenia danych z 50 000 wierszy o 15 000 kolumn do uruchomienia na laptopie z 2 rdzeniami / 2 GB pamięci RAM.
Moją ostatnią propozycją byłoby przyjrzenie się temu problemowi, jak zasugerowano powyżej, równolegle na instancji Amazon EC2 o wysokiej wydajności.
źródło
Nie mogę mówić o szybkości określonych algorytmów w języku R, ale powinno być oczywiste, co powoduje długi czas obliczeń. Dla każdego drzewa w każdej gałęzi CART szuka najlepszego podziału binarnego. Tak więc dla każdej z 34 cech najbardziej patrzy na podziały podane przez każdy z poziomów zmiennych. Pomnóż czas wykonywania każdego podziału w drzewie przez liczbę gałęzi w drzewie, a następnie pomnóż go przez liczbę drzew w lesie, a otrzymasz długi czas pracy. Kto wie? Może nawet z szybkim komputerem ukończenie tego może zająć lata?
Myślę, że najlepszym sposobem na przyspieszenie jest zbicie niektórych poziomów razem, tak aby każda zmienna spadła do 3 do 5 poziomów zamiast do 300. Oczywiście zależy to od możliwości zrobienia tego bez utraty ważnej wartości informacje w twoich danych.
Potem może będziesz mógł sprawdzić, czy istnieje jakiś sprytny algorytm, który może przyspieszyć czas wyszukiwania podziału na każdym węźle poszczególnych drzew. może się zdarzyć, że przy danym drzewie wyszukiwanie podzielone jest powtórzeniem wyszukiwania już wykonanego dla poprzedniego drzewa. Więc jeśli możesz zapisać rozwiązania z poprzednich decyzji dotyczących podziału i określić, kiedy powtarzasz, być może ta strategia może trochę zaoszczędzić czas obliczeniowy.
źródło