Czy są dostępne biblioteki dla metod podobnych do CART przy użyciu rzadkich predyktorów i odpowiedzi?

11

Pracuję z niektórymi dużymi zestawami danych przy użyciu pakietu gbm w R. Zarówno moja macierz predykcyjna, jak i mój wektor odpowiedzi są dość rzadkie (tzn. Większość wpisów ma wartość zero). Miałem nadzieję zbudować drzewa decyzyjne przy użyciu algorytmu, który korzysta z tej rzadkości, jak to tutaj zrobiono ). W tym artykule, podobnie jak w mojej sytuacji, większość elementów ma tylko kilka z wielu możliwych funkcji, więc były w stanie uniknąć wielu zmarnowanych obliczeń, zakładając, że ich elementy nie miały danej cechy, chyba że dane wyraźnie mówią inaczej. Mam nadzieję, że mogę uzyskać podobne przyspieszenie, używając tego rodzaju algorytmu (a następnie owijając go algorytmem wzmacniającym, aby poprawić moją dokładność predykcyjną).

Ponieważ wydaje się, że nie opublikowali swojego kodu, zastanawiałem się, czy istnieją jakieś pakiety lub biblioteki typu open source (w dowolnym języku), które są zoptymalizowane do tego przypadku. Idealnie chciałbym coś, co mogłoby wziąć rzadką matrycę bezpośrednio z Matrixpaczki R , ale wezmę to, co mogę.

Rozejrzałem się i wydaje się, że tego rodzaju rzeczy powinny tam być:

  • Wydaje się, że chemicy często napotykają ten problem (artykuł, który zamieściłem powyżej, dotyczył uczenia się, jak znaleźć nowe związki leków), ale implementacje, które mogłem znaleźć, były zastrzeżone lub wysoce wyspecjalizowane w analizach chemicznych. Możliwe jednak, że jeden z nich mógłby zostać ponownie wykorzystany.

  • Klasyfikacja dokumentów wydaje się być także obszarem, w którym przydatne jest uczenie się z rzadkich przestrzeni obiektów (większość dokumentów nie zawiera większości słów). Na przykład w tym dokumencie znajduje się skośne odniesienie do rzadkiej implementacji C4.5 (algorytm podobny do CART) , ale nie ma kodu.

  • Zgodnie z listą dyskusyjną WEKA może akceptować nieliczne dane, ale w przeciwieństwie do metody w powyższym dokumencie, który podłączyłem, WEKA nie jest zoptymalizowana pod kątem faktycznego wykorzystania jej pod względem unikania marnowania cykli procesora.

Z góry dziękuję!

David J. Harris
źródło
2
Nie R, ale Python scikits.learn ma coraz większe wsparcie dla rzadkich macierzy.
chl
@ ch1 dzięki. Wygląda na to, że nie dodali jeszcze metod drzewa. Ktoś pracuje nad implementacją , ale nie jestem pewien, czy będzie w stanie korzystać z rzadkich danych. Na pewno będę jednak pamiętać o rzadkich metodach SVM!
David J. Harris,
Kiedy mówisz „CART-like”, czy konkretnie chcesz drzew decyzyjnych lub innego rodzaju modelu predykcyjnego?
Michael McGowan
@Michael - Chciałbym drzew, ponieważ będę je karmić procedurą przypominającą i mają dużą wariancję.
David J. Harris,
2
Nie wiem od An modeli drzew, ale glmneti e1071::svmwsparcia zarówno skąpe Matrixobiektów. GAMboosti GLMboost(z paczki GAMboost) może również.
Zach.

Odpowiedzi:

2

Chciałbym zobaczyć porównanie ich rzadkiej implementacji z nowoczesnymi implementacjami CART używanymi w rf's. Ten artykuł jest dość stary pod względem postępów w tej dziedzinie i byłbym zaskoczony, gdyby nadal zapewniał znaczne przyspieszenie.

Częściowo dlatego, że użycie sprytnego algorytmu sortowania, takiego jak Quicksort w wyszukiwaniu dzielonym, może zapewnić wydajność zbliżoną do O (n) dla funkcji prawie stałych (w tym rzadkich). Szybkie implementacje śledzą także, kiedy cecha stała się stała w gałęzi drzewa i nie powinna być dłużej badana. Gęste reprezentacje funkcji zapewniają szybkie wyszukiwanie w przyjazny dla pamięci podręcznej procesor, więc potrzebujesz naprawdę sprytnej rzadkiej reprezentacji, aby wygrywać w cyklach procesora.

Zostało to omówione tutaj , tutaj , tutaj .

Właściwie zaimplementowałem rzadką reprezentację danych w jednym punkcie w moim pakiecie rf CloudForest, ale odkryłem, że jest wolniejsza niż gęsta reprezentacja danych i porzuciłem ją, choć zapewniała pewne zalety pamięci.

Polecam wypróbować scikit learn lub cloudforest wbudowane w zwiększanie wydajności i sprawdzić, czy jest wystarczająco szybki. Oba można rozszerzyć o niestandardowe kryteria wzmocnienia, jeśli chcesz zrobić coś niestandardowego. (Właściwie napisałem pierwotnie Cloudforest do pracy z dużymi, wielowymiarowymi zestawami danych genetycznych, które są bardzo podobne do tego, co opisujesz).

Ryan Bressler
źródło
1

Prawdopodobnie istnieje jakaś szansa na dowolny kod, który by to wykorzystał - wolałbyś napisać coś na własną rękę.
Inną opcją jest jednak przekształcenie danych w celu zmniejszenia ich rozmiaru i usunięcie zbędnych informacji. Trudno powiedzieć, jak bez informacji o twoich danych, ale może możesz połączyć niektóre funkcje, o których wiesz, że się nie pokrywają, części PCA lub zmienić reprezentację niektórych deskryptorów? Ponadto, jeśli powiesz, że twoja odpowiedź również jest rzadka, może uzasadnione jest próbkowanie w dół obiektów z 0 w odpowiedzi?


źródło
Dziękuję za odpowiedź. Próbkowanie w dół brzmi jak ciekawy pomysł. Obecnie zmniejszam ważność niektórych aspektów danych z innych powodów, ale to też może być dobry pomysł. Ale dlaczego mówisz, że kod do tego jest mało prawdopodobny? Odniosłem się do artykułu sprzed 12 lat, który wydaje się dotyczyć tego samego problemu.
David J. Harris,
@David Krótko mówiąc, wydaje mi się, że to nie ma sensu - jest to problem „niewłaściwego pytania”. Rzadkość pokazuje, że dane są w wyjątkowo nieoptymalnej formie, a znacznie bardziej efektywnym podejściem jest próba ich konwersji. Papier, który podłączyłeś, to trochę inny problem.
Obawiam się, że nie rozumiem tego, co mówisz. Konwersja postaci danych jest dokładnie tym, co chcę zrobić i, o ile mogę stwierdzić, dokładnie to robi ten dokument. Nie chcieli wymieniać wszystkich cech, których brakowało w każdej substancji chemicznej, tylko tych, które miały. To miało sens w ich sytuacji, ponieważ większość chemikaliów nie ma większości cech, tak jak w moim przypadku. Więc przekonwertowali swoje funkcje na rzadką macierz, a następnie bezpośrednio na nieczuły algorytm partycjonowania rekurencyjnego. Szukam sposobów typu open source, aby zrobić to samo z moimi danymi. czego mi brakuje? Dzięki
David J. Harris,
@David, myślę, że punktem mbq jest to, że duże 1-z-n kodowanie (np. Identyfikator strony internetowej / klienta itp.) Lub lista obecnych chemikaliów jest często bardzo złym przedstawieniem do nauki. Lepiej jest przejść na „funkcje”, np. W przypadku strony internetowej może to być kategoryzacja: sklep / aktualności / blog sport / technologia itp.
seanv507 16.08.13
1

Czy spojrzałeś na caretpaczkę w R? To zapewnia interfejs, który ułatwia korzystanie z wielu modeli, w tym kilka dla rekurencyjnego podziału takich jak rpart, ctreei ctree2.

Paweł
źródło
Znam te pakiety / funkcje i żaden z nich nie działa na rzadkich danych, o ile wiem.
David J. Harris,
1
obsługa karetki dla Matrixobiektów byłaby cudowna, ale obecnie nie istnieje. Wszystko zostaje przymuszone do data.frame.
Zach.
Możesz spróbować wysłać e-maila do programisty i zapytać go o to. Wysłałem mu e-maila na coś innego, a on udzielił pomocnej odpowiedzi - max.kuhn [at] pfizer.com
paul