Costruzione di funzionalità e normalizzazione nell'apprendimento automatico


13

Diciamo che voglio creare un classificatore logistico per un film M. Le mie caratteristiche sarebbero qualcosa come l'età della persona, il genere, l'occupazione, la posizione. Quindi il set di allenamento sarebbe qualcosa del tipo:

  • Età Genere Occupazione Luogo Mi piace (1) / Non mi piace (0)
  • 23 M Software US 1
  • 24 F Doctor UK 0

e così via .... Ora la mia domanda è come devo ridimensionare e rappresentare le mie caratteristiche. In un modo ho pensato: dividi l'età per fasce d'età, quindi 18-25, 25-35, 35 sopra, sesso come M, F, località come Stati Uniti, Regno Unito, Altri. Ora crea una funzione binaria per tutti questi valori, quindi age avrà 3 caratteristiche binarie ciascuna corrispondente a una fascia d'età e così via. Quindi, un maschio di 28 anni proveniente dagli Stati Uniti sarebbe rappresentato come 010 10 100 (010-> fascia d'età 25-35, 10 -> maschio, 100 -> USA)

Quale potrebbe essere il modo migliore per rappresentare le funzionalità qui? Inoltre, ho notato in alcuni esempi di sklearn che tutte le funzionalità sono state ridimensionate / normalizzate in qualche modo, ad esempio il genere è rappresentato da due valori, 0,0045 e -,0,0045 per maschio e femmina. Non ho idea di come eseguire il ridimensionamento / mormalizzazione in questo modo?


Non mi è chiaro perché vuoi ridimensionare le tue funzionalità? Spesso le caratteristiche sono normalizzate per avere 0 unità media std dev. Potrebbe essere necessario definire il problema in termini di classi che si sta tentando di classificare, la regressione logistica è utile per la classificazione binaria.
BGreene,

Non vorrai certo classificare le età. Come viene misurata la "valutazione del film"? È una scala da 1 a 10, un "mi piace / non mi piace" o cosa?
Peter Flom - Ripristina Monica

Per semplicità, supponiamo che ci siano solo due classi, Like e Dislike. Mi piace essere 1 e Non mi piace essere 0. Ho cambiato l'istruzione del problema per riflettere questo.
snow_leopard,

Risposte:


15

Caso binario

Se vuoi che le tue funzioni siano binarie, le buone rappresentazioni per i valori categorici (o reali ) sono la codifica a caldo (o termometro ). Non è necessario normalizzarli.

Per la codifica a caldo di una caratteristica categoriale , è sufficiente riservare un bit per ogni classe. La lunghezza di questa codifica è quindi il numero di classi della tua funzione. Prendiamo il tuo esempio di paese,

  • 00001 per gli Stati Uniti
  • 00010 per il Regno Unito
  • 00100 per l'Asia
  • 01000 per l'Europa
  • 10000 per altri

Per la codifica del termometro di una funzione reale / intera , devi scegliere una lunghezza e le soglie. Per il tuo esempio di età, hai scelto di dividere l'età in base alle soglie 18,25 e 35. La codifica sarà

  • 000 per 0-17
  • 001 per 18-25
  • 011 per 25-34
  • 111 per 35 sopra

00010UK01130yo

Caso continuo

00010UK3030yo

As BGreene said, you should then normalize this value to keep a mean of 0 and a standard deviation of 1, which insure stability of many regression models. In order to do that, simply subtract the empirical mean and divide by the empirical standard deviation.

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

If the mean of all the age of all persons in your data base is 25, and its standard deviation is 10, the normalized value for a 30y.o. person will be (3025)/10=0.5, leading to the representation

00010UK0.530yo

Cool... so lets say we have an example person as follows: Country: UK, AgeGroup : 25-34. This will lead to values as Country: 2, Agegroup: 4 if we use one hot encoding. Now while creating a feature vector we should normalize these. So lets say they come as 0.4 and 0.6, then our input feature vector to model essentially becomes [0.4, 0.6], correct ?
snow_leopard

hmm .. se uso la codifica "one hot", dovrei convertire il valore di codifica nella sua rappresentazione Integer come una funzione, ad esempio 0010 diventa 2. O dovrei considerare questo come un insieme di 4 funzionalità su cui solo una sarà attiva? Nel primo caso non introduce l'idea che 1000 sia ulteriore rispetto a 0001 e poi a 0100, il che potrebbe non essere l'intenzione in quanto non vogliamo che il valore delle caratteristiche degli Stati Uniti sia più vicino al valore delle caratteristiche del Regno Unito rispetto al valore dell'Asia o qualcos'altro?
snow_leopard,

Ho modificato la mia risposta per chiarire questi punti. Non è necessario normalizzare le funzionalità binarie e trattarle come un vettore, non convertirle in un numero intero.
Emile,

Really helpful and crystal clear explanation. Thanks!
George Liu
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.