Scalanie rzadkich i gęstych danych w uczeniu maszynowym w celu poprawy wydajności

17

Mam rzadkie cechy, które są predykcyjne, mam też pewne gęste cechy, które są również predykcyjne. Muszę połączyć te funkcje razem, aby poprawić ogólną wydajność klasyfikatora.

Rzecz w tym, że kiedy próbuję połączyć je ze sobą, cechy gęste mają tendencję do dominacji nad cechami rzadkimi, a zatem dają tylko 1% poprawę AUC w porównaniu do modelu z cechami tylko gęstymi.

Czy ktoś napotkał podobne problemy? Naprawdę doceniam nakłady, jakby utknęły. Próbowałem już wielu różnych klasyfikatorów, kombinacji klasyfikatorów, transformacji cech i przetwarzania przy użyciu różnych algorytmów.

Z góry dziękuję za pomoc.

Edytuj :

Próbowałem już sugestii podanych w komentarzach. Zauważyłem, że dla prawie 45% danych rzadkie cechy działają naprawdę dobrze, otrzymuję AUC około 0,9 z tylko rzadkimi cechami, ale dla pozostałych gęste cechy działają dobrze z AUC około 0,75. W pewnym sensie próbowałem wyodrębnić te zestawy danych, ale otrzymuję AUC równe 0,6, więc nie mogę po prostu wytrenować modelu i zdecydować, których funkcji użyć.

Jeśli chodzi o fragment kodu, wypróbowałem tak wiele rzeczy, że nie jestem pewien, co dokładnie udostępnić :(

Sagar Waghmode
źródło
Jak rzadkie są twoje funkcje? Czy są wypełnione w 1%, czy nawet mniej?
João Almeida
2
Należy również pamiętać, że jeśli twoje funkcje są rzadkie, powinny one pomóc w sklasyfikowaniu tylko niewielkiej części zestawu danych, co oznacza, że ​​dokładność nie powinna się znacząco zmieniać. To rodzaj przypuszczenia, ponieważ nie wiem, jakie są cechy twojego zestawu danych.
João Almeida
@ JoãoAlmeida Nie są tak rzadkie. Są wypełnione w około 5%. Problem polega na tym, że kiedy patrzę na różnicę w prognozach w porównaniu z dwoma modelami, w których prognozy się różnią, model z rzadkimi funkcjami ma tendencję do lepszej wydajności, dlatego spodziewałem się, że zobaczy on wzrost AUC również po połączeniu ich z gęstymi funkcjami . Dostaję impuls, ale wydaje się bardzo niski.
Sagar Waghmode,
przydźwięk ... Nie mam wtedy dla ciebie żadnego pomysłu
João Almeida,
napotkałem ten sam problem, może po prostu umieszczenie gęstej i rzadkiej funkcji w jednym modelu nie jest dobrym wyborem. może możesz wypróbować szeroki i głęboki model. szeroki dla rzadkich cech i głęboki dla gęstych cech, jeśli wypróbowałeś tę metodę, proszę powiedz mi odpowiedź.
Jianye Ji,

Odpowiedzi:

6

To wydaje się być zadaniem dla głównej analizy składników. W Scikit PCA jest dobrze zaimplementowane i pomogło mi wiele razy.

PCA w pewien sposób łączy twoje funkcje. Ograniczając liczbę komponentów, pobierasz model z danymi pozbawionymi szumów (w najlepszym przypadku). Ponieważ twój model jest tak dobry, jak twoje dane.

Rozważ poniżej prosty przykład.

from sklearn.pipeline import Pipeline
pipe_rf = Pipeline([('pca', PCA(n_components=80)),
                    ('clf',RandomForestClassifier(n_estimators=100))])
pipe_rf.fit(X_train_s,y_train_s)

pred = pipe_rf.predict(X_test)

Dlaczego wybrałem 80? Kiedy wykreślam wariancję skumulowaną, mam to poniżej, co mówi mi, że przy ~ 80 składnikach osiągam prawie całą wariancję. skumulowana wariancja

Powiedziałbym więc, że spróbuj, użyj go w swoich modelach. To powinno pomóc.

HonzaB
źródło
4

Najlepszym sposobem na połączenie cech jest zastosowanie metod grupowania. Zasadniczo istnieją trzy różne metody: pakowanie, wzmacnianie i układanie w stosy. Możesz albo skorzystać z Adabbost wzbogaconego o wybór funkcji (w tym względzie zarówno cechy rzadkie, jak i gęste) lub układać na stosie (funkcja losowa - losowa podprzestrzeń) Wolę drugą opcję, którą możesz wyszkolić zestaw podstawowych uczniów (decyzje. Drzewa) za pomocą losowych podzbiory i funkcja losowa (utrzymuj bazę uczniów, dopóki nie obejmiesz całego zestawu funkcji) Kolejnym krokiem jest przetestowanie zestawu szkoleniowego w celu wygenerowania metadanych. Użyj tych metadanych, aby wytrenować meta klasyfikator. Meta klasyfikator dowie się, która cecha jest ważniejsza i jakiego rodzaju relacji należy użyć

Baszar Haddad
źródło
Czy możesz podzielić się odpowiednią dokumentacją? Nie zrozumiałeś dokładnie, co miałeś na myśli?
Sagar Waghmode,
Możesz przeczytać artykuł na temat stawiania „problemów w technikach układania w stosy, 1999”, czytać o układaniu w stosy C. Bardzo ważne jest, aby wiedzieć, że mówię o całym wektorze (np. 1x36 w przypadku Wieprza) jako jednej cechy, ale nie o wymiarach w nim zawartych. Musisz śledzić, która funkcja była używana z którym podstawowym uczniem. Uważaj na problem przeuczenia
Bashar Haddad,
Jeśli podasz więcej szczegółów na temat bazy danych, liczby klas, liczby próbek, kodu, tego, czego próbowałeś, co zauważyłeś, masz problem z nierównowagą danych, głośne próbki, itp. Wszystkie te szczegóły są ważne i mogą pomóc w wyborze najlepszej metody. Podaj mi więcej szczegółów, jeśli to w porządku, a mogę pomóc w lepszy sposób
Bashar Haddad,
1

Grupy zmiennych mogą być wielokoliniowe lub konwersja między rzadką a gęstą może się nie powieść. Czy zastanawiałeś się nad zastosowaniem klasyfikatora / zestawu do głosowania? http://scikit-learn.org/stable/modules/ensemble.html W ten sposób można rozwiązać oba powyższe problemy.

Diego
źródło
Wypróbowałem już techniki zespołowe, a także klasyfikatorów do głosowania. Wciąż nie ma szczęścia.
Sagar Waghmode,
Widzisz więc dużo nakładania się między prognozami z dwóch zestawów danych? Czy może rzeczywiście nie ma nowych informacji? To znaczy, że dane opowiadają tę samą historię.
Diego,
tak, właśnie to zrobiłem. Chociaż prognozy nie są całkowicie różne, liczba próbek, w których prognozy się różnią, jest dość wysoka (około 15-20%) danych. Dla tych próbek model z rzadkimi elementami działa lepiej niż model z gęstymi elementami. Chodzi mi o to, że jeśli rzadkie funkcje działają lepiej, dlaczego nie są tak ważne w żadnym z modeli, które próbowałem do tej pory.
Sagar Waghmode,
Jakiego algorytmu predykcyjnego używasz?
Diego,
Wypróbowałem sporo algorytmów i zdecydowałem się na Model Wzmocnienia Gradientu, a także dość często korzystam z Losowych Lasów dla mojego problemu.
Sagar Waghmode,
1

Oprócz niektórych powyższych sugestii zaleciłbym zastosowanie dwuetapowego podejścia do modelowania .

  1. Najpierw użyj rzadkich funkcji i opracuj najlepszy model.
  2. Oblicz przewidywane prawdopodobieństwo na podstawie tego modelu.
  3. Wprowadź oszacowanie prawdopodobieństwa do drugiego modelu (jako element wejściowy), który obejmowałby elementy gęste. Innymi słowy, użyj wszystkich gęstych elementów i oszacowania prawdopodobieństwa do zbudowania drugiego modelu.
  4. Ostateczna klasyfikacja będzie wówczas oparta na drugim modelu.
Vishal
źródło
0

Wypróbuj PCA tylko na rzadkich funkcjach i połącz wyjście PCA z gęstymi funkcjami.

Otrzymasz gęsty zestaw (oryginalnych) funkcji + gęsty zestaw funkcji (które pierwotnie były rzadkie).

+1 za pytanie. Zaktualizuj nas o wyniki.

Tagar
źródło
Wow, to faktycznie obniżyło AUC :( Nie jestem pewien, co to znaczy, muszę sprawdzić ważność funkcji i wszystko. Ale moją filozofią jest, że spośród około 2,3k rzadkich cech, użyłem cech 1k, które wyjaśniały współczynnik wariancji 0,97, ta utrata informacji mogła obniżyć AUC
Sagar Waghmode,
Ciekawy. Dzięki za udostępnienie. Mamy bardzo podobny zestaw danych do twojego (rzadkie funkcje 1k-2k). Z ciekawości, ile głównych elementów wygenerowałeś? Jeśli liczba ta jest zbyt niska, może to wyjaśniać, dlaczego AUC spadło.
Tagar
Jak już powiedziałem, wygenerowałem 1k głównych komponentów, które wyjaśniały wariancję 0,97.
Sagar Waghmode,