Konstrukcja i normalizacja funkcji uczenia maszynowego

13

Powiedzmy, że chcę utworzyć klasyfikator logistyczny do filmu M. Moje funkcje to coś w rodzaju wieku osoby, płci, zawodu, lokalizacji. Więc zestaw treningowy wyglądałby tak:

  • Wiek Płeć Zawód Lokalizacja Lubię (1) / Nie lubię (0)
  • 23 M Oprogramowanie US 1
  • 24 F Doctor UK 0

i tak dalej .... Teraz mam pytanie, jak skalować i przedstawiać moje funkcje. Pomyślałem jeden sposób: Podziel wiek na grupy wiekowe, więc 18-25, 25-35, 35-powyżej, Płeć jako M, F, Lokalizacja jako USA, Wielka Brytania, Inne. Teraz utwórz funkcję binarną dla wszystkich tych wartości, dlatego wiek będzie miał 3 funkcje binarne, każda odpowiadająca grupie wiekowej i tak dalej. Tak więc 28-letni mężczyzna z USA byłby reprezentowany jako 010 10 100 (010-> Grupa wiekowa 25-35, 10 -> Mężczyzna, 100 -> USA)

Jaki może być najlepszy sposób na przedstawienie funkcji tutaj? Zauważyłem też w niektórych np. sklearn, że wszystkie funkcje zostały w jakiś sposób skalowane / znormalizowane, np. Płeć jest reprezentowana przez dwie wartości, 0,0045 i -0,0045 dla mężczyzny i kobiety. Nie mam pojęcia, jak skalować / mormalizować w ten sposób?

Pantera śnieżna
źródło
Nie jest dla mnie jasne, dlaczego chcesz skalować swoje funkcje? Często funkcje są znormalizowane, aby mieć 0 średnią jedność std dev. Konieczne może być zdefiniowanie problemu w kategoriach klas, które próbujesz sklasyfikować, regresja logistyczna jest przydatna do klasyfikacji binarnej.
BGreene,
Na pewno nie chcesz kategoryzować grup wiekowych. Jak mierzona jest „ocena filmu”? Czy to skala od 1 do 10, „lubię / nie lubię” czy co?
Peter Flom - Przywróć Monikę
Dla uproszczenia załóżmy, że istnieją tylko dwie klasy, Like i Dislike. Jak bycie 1 i Nie lubię bycia 0. Zmieniono opis problemu, aby to odzwierciedlić.
snow_leopard

Odpowiedzi:

15

Sprawa binarna

Jeśli chcesz, aby Twoje cechy, aby być binarny, dobre reprezentacje na kategoryczne (odp. Realny ) wartości stanowią jeden gorący (resp. Termometr ) kodującego. Ty nie musisz ich normalizacji.

Dla jednego hot kodowania z kategorycznym funkcji, wystarczy zarezerwować jeden bit dla każdej klasy. Długość tego kodowania jest więc liczbą klas twojej funkcji. Weźmy przykład kraju,

  • 00001 dla USA
  • 00010 dla Wielkiej Brytanii
  • 00100 dla Azji
  • 01000 dla Europy
  • 10000 dla innych

W przypadku kodowania termometrem funkcji rzeczywistej / całkowitej należy wybrać długość i progi. Jako przykład wieku wybrałeś podział wieku według progów 18, 25 i 35. Kodowanie będzie

  • 000 dla 0–17
  • 001 dla 18–25
  • 011 dla 25–34
  • 111 dla 35-powyżej

00010UK01130yo

Ciągły przypadek

00010UK3030yo

Jak powiedział BGreene, powinieneś następnie znormalizować tę wartość, aby zachować średnią 0 i odchylenie standardowe 1, co zapewnia stabilność wielu modeli regresji. W tym celu wystarczy odjąć średnią empiryczną i podzielić przez standardowe odchylenie empiryczne.

Y_normalized = ( Y - mean(Y) ) / std(Y)

(3025)/10=0.5

00010UK0.530yo
Emile
źródło
Fajnie ... powiedzmy, że mamy przykładową osobę w następujący sposób: Kraj: Wielka Brytania, Grupa wiekowa: 25-34 lata. Doprowadzi to do wartości takich jak Country: 2 , Agegroup: 4, jeśli użyjemy jednego kodowania na gorąco . Teraz, tworząc wektor cech, powinniśmy je znormalizować. Powiedzmy, że mają one wartość 0,4 i 0,6, a następnie nasz wektor cech wejściowych do modelowania zasadniczo staje się [0,4, 0,6], prawda?
snow_leopard
hmm .. jeśli użyję kodowania „na gorąco”, czy powinienem przekonwertować wartość kodowania na jego liczbę całkowitą jako funkcję, np. 0010 staje się 2. LUB czy powinienem traktować to jako zestaw 4 funkcji, z których tylko jedna będzie WŁĄCZONA? Czy w pierwszym przypadku nie wprowadza się pojęcia, że ​​1000 jest dalej do 0001, a następnie 0100, co może nie być intencją, ponieważ nie chcemy, aby wartość amerykańskiego obiektu była bliższa wartości brytyjskiej niż wartość Azji czy coś innego?
snow_leopard
Zredagowałem swoją odpowiedź, aby wyjaśnić te kwestie. Nie musisz znormalizować funkcji binarnych i musisz traktować je jako wektor, nie przekształcaj ich w liczby całkowite.
Emile,
Naprawdę pomocne i krystalicznie jasne wyjaśnienie. Dzięki!
George Liu,