Jedna alternatywa kodowania na gorąco dla dużych wartości jakościowych?

13

Cześć, mam ramkę danych z dużymi wartościami kategorialnymi ponad 1600 kategorii. Czy mogę znaleźć alternatywy, aby nie mieć ponad 1600 kolumn.

Znalazłem to poniżej ciekawy link http://amunategui.github.io/feature-hashing/#sourcecode

Ale konwertują na klasę / obiekt, którego nie chcę. Czy chcę, aby końcowy wynik był ramką danych, aby móc testować za pomocą różnych modeli uczenia maszynowego? czy jest jakiś sposób, w jaki mogę wykorzystać genetyczną matrycę do szkolenia innych modeli uczenia maszynowego innych niż regresja logistyczna lub XGBoost?

Czy mogę coś zaimplementować?

vinaykva
źródło
To naprawdę problem? Zakładając, że używasz rzadkiej reprezentacji macierzy, kodowanie onehot nie będzie prawdziwym problemem.
Louis T
@LouisT Mam miliony rekordów ponad 500 milionów rekordów
vinaykva
Mimo to, jeśli jest jeden gorący, nie będzie miało znaczenia, jeśli użyjesz rzadkiej matrycy
Louis T
@LouisT Złożoność wzrośnie, a czas pociągu również się zwiększy, a moje dane staną się zbyt rzadkie
vinaykva
1
twój post jest około 1 rok temu i być może już go nie interesujesz, ale jeśli nadal jesteś zainteresowany, czy słyszałeś o Osadzaniu jednostek za pomocą sieci neuronowych? medium.com/@satnalikamayank12/…
TwinPenguins

Odpowiedzi:

10

Jedną z opcji jest odwzorowanie rzadkich wartości na „inne”. Zwykle odbywa się to np. W przetwarzaniu języka naturalnego - intuicja polega na tym, że bardzo rzadkie etykiety nie mają dużej mocy statystycznej.

Widziałem także ludzi, którzy odwzorowują 1-gorące wartości kategorialne na wektory o niższych wymiarach, gdzie każdy 1-gorący wektor jest ponownie reprezentowany jako remis z wielowymiarowego Gaussa. Zobacz np. Artykuł Deep Knowledge Tracing, który mówi, że takie podejście jest motywowane ideą kompresyjnego wykrywania:

BARANIUK, R. Wykrywanie kompresji. Magazyn przetwarzania sygnałów IEEE 24, 4 (2007).

W szczególności mapują każdy wektor o długości N na krótszy wektor o długości log2 (N). Nie zrobiłem tego sam, ale myślę, że warto spróbować.

Tomek
źródło
Zastanawiam się, jak obliczyć odległość za pomocą takiego kodowania?
eric2323223
2

Możesz odczytać dane i najpierw uzyskać listę wszystkich unikalnych wartości zmiennych jakościowych. Następnie możesz dopasować jeden gorący obiekt kodujący (taki jak sklearn.preprocessing.CategoricalEncoder) na liście unikalnych wartości.

Ta metoda może również pomóc w strukturze testu pociągu lub podczas odczytywania danych we fragmentach. Stworzyłem moduł python, który robi to wszystko sam. Możesz go znaleźć w tym repozytorium GitHub - dummyPy

Krótki samouczek na ten temat - Jak za jednym razem zakodować zmienne kategorialne w Pythonie?

Yashu Seth
źródło
0

Możesz wykonywać grupowanie podobnych wartości, dzięki czemu wartości (lub kolumny), które zawierają najbliższy wzorzec (lub mają bardzo podobne) wzorzec, można zastąpić jedną wartością (lub kolumną), a zatem 1600 wartości może sprowadzić się do powiedzenia 400 (lub nawet mniej).

Dawny. dla wartości takich jak (chmura jak - chmury Nimbus, mżawka, lekki deszcz, deszcz, ulewny deszcz można przekształcić na (lekki deszcz, deszcz, ulewny deszcz).

akash manakshe
źródło