Kodowanie funkcji jakościowych do liczb w celu uczenia maszynowego

14

Wiele algorytmów uczenia maszynowego, na przykład sieci neuronowe, oczekuje obsługi liczb. Tak więc, jeśli masz dane kategoryczne, musisz je przekonwertować. Przez kategoryczne rozumiem na przykład:

Marki samochodów: Audi, BMW, Chevrolet ... ID użytkownika: 1, 25, 26, 28 ...

Mimo że identyfikatory użytkowników są liczbami, są tylko etykietami i nie oznaczają niczego w kategoriach ciągłości, takich jak wiek lub suma pieniędzy.

Tak więc podstawowe podejście wydaje się wykorzystywać wektory binarne do kodowania kategorii:

Audi: 1, 0, 0 ... BMW: 0, 1, 0 ... Chevrolet: 0, 0, 1 ...

Jest OK, gdy jest kilka kategorii, ale poza tym wygląda to trochę nieefektywnie. Na przykład, gdy masz 10 000 identyfikatorów użytkowników do zakodowania, to 10 000 funkcji.

Pytanie brzmi, czy jest lepszy sposób? Może z udziałem prawdopodobieństw?

Sferyczne
źródło
3
Dlaczego chcesz uwzględnić identyfikator użytkownika w modelu predykcyjnym? Jeśli chodzi o inne zmienne kategoryczne o liczności większej niż chcesz, kiedy używasz fałszywego kodowania zmiennych, tak jak to opisujesz, najpierw uruchamiam je w drzewie decyzyjnym jako jedynym predyktorze - aby zwinąć poziomy. Może również ponownie bin, grupując „rzadkie” poziomy itp.
B_Miner
Brzmi interesująco - na przykład efekty losowe w modelu statystycznym, w którym interesują Cię efekty specyficzne dla konkretnej osoby. Mogę sobie wyobrazić sytuacje, w których przydałoby się to, na przykład, jeśli ciągle widujesz te same osoby i chciałbym przewidzieć, co zrobi ta konkretna osoba. Jeśli możesz, podziel się więcej o swoich planach. Możesz także spojrzeć na modelowanie wielopoziomowe, chociaż jest ono tradycyjnie stosowane w ustawieniach wnioskowania, a nie w uczeniu maszynowym.
Anne Z.
Pamiętam, jak czytałem o konkursie ML, w którym niektórzy inteligentni badacze wykryli, że identyfikatory użytkowników w danych zostały podane podczas tworzenia konta użytkownika. Stąd ujawniono znaczniki czasu, które zostały zaciemnione (pozytywnie wpływające na prognozowanie odpowiedzi). Oprócz takich przypadków i przypadków wymienionych przez Anne (systemy polecające) nie podałbym identyfikatora użytkownika.
steffen
Anne - Czy model efektów losowych faktycznie NIE jest zainteresowany osobami - dlatego są one uważane za próbkę z populacji?
B_Miner
Nie rozumiem, jeśli problemem uczenia się jest przewidywanie kategorii binarnej zamożnej / niezamożnej, dlaczego nie miałoby sensu mieć cechy marki samochodu określonego użytkownika. Identyfikatory użytkowników można wykorzystać, jeśli znana jest sieć społecznościowa danej osoby: np. W celu wykazania, że ​​przyjaciele użytkownika X są bardziej podatni na zamożność. Czy coś jest nie tak z tym tokiem myślenia?
Vladtn

Odpowiedzi:

6

Zawsze możesz traktować swoje identyfikatory użytkownika jak worek słów: większość klasyfikatorów tekstu radzi sobie z setkami tysięcy wymiarów, gdy dane są rzadkie (wiele zer, których nie musisz przechowywać jawnie w pamięci, na przykład, jeśli używasz skompresowanych wierszy rzadkich reprezentacja macierzy danych).

Pytanie jednak brzmi: czy warto traktować identyfikatory użytkowników jako funkcje? Czy nie byłoby rozsądniej denormalizować danych relacji i używać funkcji użytkownika (wiek, lokalizacja, charakterystyka pseudonimu online, historia transakcji ...) zamiast ich identyfikatorów?

Możesz także przeprowadzić grupowanie surowych wektorów użytkownika i użyć N najlepszych najbliższych centrów jako aktywowanych funkcji zamiast identyfikatorów użytkownika.

ogrisel
źródło
OK, choć jest to bardziej ogólne pytanie, widzę, że większość z was koncentruje się na kwestii identyfikatorów użytkowników, więc oto dlaczego chciałbym ich użyć. Spójrzmy na jeden z konkursów Kaggle, o Grockit: kaggle.com/c/WhatDoYouKnow . Celem jest przewidzenie, czy użytkownik odpowie poprawnie na pytanie. Moim zdaniem jest to problem podobny do systemów rekomendujących, po prostu dostajesz pytania zamiast filmów i poprawiasz / niepoprawnie zamiast ocen, a także inne dane.
Znaczniki
1
W takim przypadku możesz założyć, że użytkownik jest niezależny i możesz zbudować jeden klasyfikator na użytkownika przeszkolonego tylko na podstawie jego własnej historii.
ogrisel
1

Kodowanie równoboczne jest prawdopodobnie tym, czego szukasz, próbując zakodować klasy w sieci neuronowej. Zwykle działa lepiej niż kodowanie „1 z n”, o którym mowa w innych postach. W celach informacyjnych mogę zasugerować: http://www.heatonresearch.com/wiki/Equilateral

S Szczupak
źródło
Wydaje się, że jest to związane z kodowaniem wartości wyjściowych, a nie kodowaniem kategorialnym wartości wejściowych, o które prosi OP.
Alex