Domanda:
È una buona pratica scalare / normalizzare sempre i dati per l'apprendimento automatico?
Juan Antonio Gomez Moriano
2016-01-07 10:09:44 UTC
view on stackexchange narkive permalink

La mia comprensione è che quando alcune caratteristiche hanno intervalli diversi nei loro valori (ad esempio, immagina che una caratteristica sia l'età di una persona e un'altra il loro stipendio in USD) influenzerà negativamente gli algoritmi perché la caratteristica con valori maggiori assumerà più influenza, è una buona pratica semplicemente scalare / normalizzare SEMPRE i dati?

Mi sembra che se i valori sono già simili tra allora, normalizzarli avrà scarso effetto, ma se i valori sono molto diversi la normalizzazione aiuterà, tuttavia sembra troppo semplice per essere vero :)

Mi sto perdendo qualcosa? Ci sono situazioni / algoritmi in cui è effettivamente desiderabile lasciare che alcune funzionalità prevalgano deliberatamente su altre?

Correlati: http://stats.stackexchange.com/questions/89809/is-it-important-to-scale-data-before-clustering
Sette risposte:
one_observation
2016-01-07 10:53:13 UTC
view on stackexchange narkive permalink

Per prima cosa, non penso che ci siano molte domande del tipo "È una buona pratica usare sempre X nel machine learning" dove la risposta sarà definitiva. Sempre? Sempre sempre? Attraverso modelli parametrici, non parametrici, bayesiani, Monte Carlo, scienze sociali, puramente matematici e milioni di funzionalità? Sarebbe carino, no!

In concreto, però, ecco alcuni modi in cui: dipende.

Alcune volte in cui la normalizzazione è buona:

1) Diversi algoritmi, in particolare SVM, a volte possono convergere molto più velocemente su dati normalizzati (anche se, precisamente, non riesco a ricordare).

2) Quando il modello è sensibile all'ampiezza e le unità di due caratteristiche diverse sono diverse e arbitrarie. È come il caso che suggerisci, in cui qualcosa ha più influenza di quanto dovrebbe.

Ma ovviamente - non tutti gli algoritmi sono sensibili alla grandezza nel modo in cui suggerisci. I coefficienti di regressione lineare saranno identici se ridimensionate o non ridimensionate i dati, perché sta esaminando le relazioni proporzionali tra di loro.

Alcune volte quando la normalizzazione è cattivo:

1) Quando vuoi interpretare i tuoi coefficienti e non si normalizzano bene. La regressione su qualcosa come i dollari ti dà un risultato significativo. La regressione sulla proporzione del massimo di dollari nel campione potrebbe non esserlo.

2) Quando, in effetti, le unità sulle tue caratteristiche sono significative e la distanza fa fa la differenza! Tornando agli SVM: se stai cercando di trovare un classificatore di margine massimo, le unità che entrano in quel "massimo" sono importanti. Le funzionalità di ridimensionamento per gli algoritmi di clustering possono modificare sostanzialmente il risultato. Immagina quattro gruppi attorno all'origine, ciascuno in un quadrante diverso, tutti ben ridimensionati. Ora, immagina che l'asse y venga allungato fino a dieci volte la lunghezza dell'asse x. invece di quattro piccoli gruppi di quadranti, otterrai la lunga baguette schiacciata di dati tagliata in quattro pezzi lungo la sua lunghezza! (E, la parte importante è che potresti preferire uno di questi!)

In un riepilogo sono sicuro insoddisfacente, la risposta più generale è che devi chiederti seriamente cosa ha senso con i dati, e il modello che stai utilizzando.

Grazie per la risposta, ma ecco un'altra domanda, tu dici che nei modelli di regressione normalizzare ad esempio lo stipendio (1000-100000) e (diciamo) l'età (10-80) non aiuterà molto (specialmente perché si perde il significato delnumeri ...), però, se non lo normalizzo, succederà che lo stipendio supererà l'età, no?
Cosa intendi per superare?Presumo che lo stipendio e l'età siano entrambe variabili indipendenti qui.La loro normalizzazione cambia solo le unità sui loro coefficienti.Ma ad esempio, poiché è più chiaro di una costante di normalizzazione, dividiamo per diciamo 1000. Ma allora il tuo coefficiente significa semplicemente cambiamento per - \ $ 1000-cambiamento, al contrario di cambiamento-per - \ $ 1-cambiamento.I numeri sono diversi, ma dovresti sempre pensare a cosa significano i tuoi coefficienti: non puoi fermarti solo con i numeri.
Normalizzandoli intendo usare una funzione come scale in r, come data $ age <-scale (data $ age) e data $ salary <- scale (data $ salary).Alla fine della giornata, quando si usa qualcosa come la regressione logistica, si stanno solo imparando i parametri per un vettore, giusto?se tale vettore contiene alcune variabili i cui valori sono in un intervallo molto più ampio di altri non sarebbe un problema?Ho giocato con e senza dati in scala per la regressione logistica e il ridimensionamento sembra aiutare ... Mi manca qualcosa?
_Normalizzazione_, capisco: hai usato la parola _outweigh_ e continuo a non capire come la usi.E ancora, il ridimensionamento "sembra aiutare" - cosa intendi?Aiuto _how_?
Forse è il mio inglese :).Quello che voglio dire è che dato che una variabile (stipendio) ha una gamma più ampia di un'altra (ad esempio età), significa che l'età avrà poca importanza quando si tratta di eseguire previsioni mentre lo stipendio sarà il fattore più determinante e cioènon sempre desiderabile.Con "sembra aiutare" intendo che quando si prova un modello addestrato con / senza valori in scala, quello in scala generalizza meglio (usando il set di convalida incrociata).Spero che questo chiarisca :)
@JuanAntonioGomezMoriano: Non è vero: i modelli lineari sono invarianti alle trasformazioni lineari dei loro predittori.È importante solo quando penalizzi le stime dei coefficienti in base alla loro grandezza (un caso del 2 ° punto di Sophologist).Vedere [Quando si esegue la regressione multipla, quando si dovrebbero centrare le variabili predittore e quando si dovrebbero standardizzarle?] (Http://stats.stackexchange.com/q/29781/17230).Se il ridimensionamento dei predittori porta a * qualsiasi cambiamento * nelle previsioni, ha a che fare con problemi numerici nell'algoritmo di adattamento.
"I coefficienti di regressione lineare saranno identici se ridimensionate o meno i dati".Questo è vero per scalare sia gli ingressi che le uscite di un singolo valore costante.Ma scalare ogni caratteristica (o l'uscita) separatamente cambierebbe i coefficienti.
Una cosa che nessuno ha ancora menzionato è l'impatto che le scale di differenza delle variabili indipendenti hanno sull'intercetta del modello.Puoi sicuramente finire con intercettazioni negative, che diventano difficili da interpretare (piuttosto, spiegare a un dirigente).
Amir
2016-01-07 10:56:06 UTC
view on stackexchange narkive permalink

Beh, credo che un punto di vista più geometrico aiuterà a decidere meglio se la normalizzazione aiuta o meno. Immagina che il tuo problema di interesse abbia solo due caratteristiche e variano in modo diverso. Quindi geometricamente, i punti dati vengono distribuiti e formano un ellissoide. Tuttavia, se le caratteristiche sono normalizzate, saranno più concentrate e, si spera, formeranno un cerchio unitario e renderanno la covarianza diagonale o almeno vicino alla diagonale. Questa è l'idea alla base di metodi come la normalizzazione in batch delle rappresentazioni intermedie dei dati nelle reti neurali. Usando BN la velocità di convergenza aumenta sorprendentemente (forse 5-10 volte) poiché il gradiente può facilmente aiutare i gradienti a fare quello che dovrebbero fare per ridurre l'errore.

Nel caso non normalizzato, gradiente- gli algoritmi di ottimizzazione basati avranno difficoltà a spostare i vettori del peso verso una buona soluzione. Tuttavia, la superficie dei costi per il caso normalizzato è meno allungata ei metodi di ottimizzazione basati sul gradiente funzioneranno molto meglio e divergeranno meno.

Questo è certamente il caso dei modelli lineari e in particolare di quelli la cui funzione di costo è una misura della divergenza tra l'output del modello e l'obiettivo (es. regressione lineare con funzione di costo MSE), ma potrebbe non essere necessariamente la caso in quelli non lineari. La normalizzazione non fa male per i modelli non lineari; non farlo per i modelli lineari farà male.

L'immagine seguente potrebbe essere [approssimativamente] vista come l'esempio di una superficie di errore allungata in cui i metodi basati sul gradiente potrebbero avere difficoltà ad aiutare i vettori di peso passare all'ottimo locale.

enter image description here

_Tuttavia, la normalizzazione non danneggia i modelli non lineari, ma non farlo per i modelli lineari farà male._ Trovo questa frase difficile da capire.È (grosso modo) irrilevante per i modelli non lineari se i dati sono normalizzati?Non farlo per i modelli lineari spezzerà qualcosa, ma puoi specificare meglio per i modelli non lineari?Forse cerca di evitare di mescolare espressioni positive e negative in questa frase.
Nei modelli lineari, le caratteristiche con ampi intervalli inducono un'elevata varianza al modello e quindi possono diventare inutilmente importanti.Ad esempio, nella PCA queste caratteristiche avranno autovalori molto più grandi di altri.Tuttavia, nei modelli non lineari (dipende da molti fattori) questo potrebbe non essere il caso poiché il modello può cambiare completamente la rappresentazione dei dati attraverso le non linearità.Quindi non è così facile analizzare cosa succede in un modello non lineare e come le caratteristiche non normalizzate influenzano l'output.
Quindi, fondamentalmente, l'effetto della normalizzazione nei modelli non lineari è difficile da prevedere e dovrebbe essere deciso caso per caso?
Vero.Sebbene sia stato stabilito empiricamente che la normalizzazione aiuta anche nei modelli non lineari.
Grazie per questo chiarimento.Questo mi ha aiutato a capire meglio la tua risposta.
Potresti aggiungere una spiegazione di cosa significa il tuo secondo grafico?
@JuanAntonioGomezMoriano Questa è la convergenza (avvicinarsi ai minimi locali)
Qual è l'asse X e Y?
L'asse X è il numero di iterazioni dell'asse Y è la convergenza rappresenta
Vihari Piratla
2016-01-07 12:36:25 UTC
view on stackexchange narkive permalink

Lascia che ti racconti la storia di come ho imparato l'importanza della normalizzazione.

Stavo cercando di classificare i dati di cifre scritte a mano (è un semplice compito di classificare le caratteristiche estratte da immagini di caratteri scritti a mano cifre) con Neural Networks come compito per un corso di Machine Learning.
Proprio come chiunque altro, ho iniziato con una libreria / strumento di rete neurale, l'ho alimentata con i dati e ho iniziato a giocare con i parametri. Ho provato a cambiare il numero di strati, il numero di neuroni e varie funzioni di attivazione. Nessuno di loro ha prodotto risultati attesi (accuratezza intorno a 0,9).

Il colpevole? Il fattore di scala nella funzione di attivazione = $ \ frac {s} {1 + e ^ {- s.x}} $ - 1. Se il parametro s non è impostato, la funzione di attivazione attiverà ogni ingresso o annullerà ogni ingresso in ogni iterazione. Il che ovviamente ha portato a valori inaspettati per i parametri del modello. Il punto è che non è facile impostare s quando l'input x varia su valori elevati.

Come alcune delle altre risposte hanno già sottolineato, la "buona pratica "in merito alla normalizzazione o meno dei dati dipende dai dati, dal modello e dall'applicazione. Con la normalizzazione, stai effettivamente buttando via alcune informazioni sui dati come i valori massimi e minimi assoluti. Quindi, non esiste una regola pratica.

arielf
2016-01-08 02:51:51 UTC
view on stackexchange narkive permalink

Come altri hanno detto, la normalizzazione non è sempre applicabile; per esempio. da un punto di vista pratico.

Per poter scalare o normalizzare le caratteristiche su un intervallo comune come [0,1] , è necessario conoscere il min / max (o mean / stdev a seconda del metodo di ridimensionamento applicato) di ciascuna funzione. IOW: devi avere tutti i dati per tutte le funzionalità prima di iniziare la formazione.

Molti problemi pratici di apprendimento non ti forniscono tutte le dati a priori, quindi semplicemente non puoi normalizzarli. Tali problemi richiedono un approccio di apprendimento online.

Tuttavia, tieni presente che alcuni algoritmi online (al contrario dell'apprendimento batch) che apprendono da un esempio alla volta, supportano un ' approssimazione al ridimensionamento /normalizzazione. Imparano le scale e le compensano, in modo iterativo. vowpal wabbit , ad esempio, normalizza iterativamente per la scala per impostazione predefinita (a meno che non disabiliti esplicitamente il ridimensionamento automatico forzando un certo algoritmo di ottimizzazione come l'ingenuo --sgd )

probabilityislogic
2018-09-29 03:29:07 UTC
view on stackexchange narkive permalink

Il ridimensionamento / normalizzazione cambia leggermente il modello. Il più delle volte ciò corrisponde all'applicazione di una funzione affine. Quindi hai $ Z = A_X + B_XXC_X $ dove $ X $ sono i tuoi "dati di input / originali" (una riga per ogni esempio di formazione, una colonna per ogni caratteristica). Quindi $ A_X, B_X, C_X $ sono matrici che sono tipicamente funzioni di $ X $ . La matrice $ Z $ è ciò che inserisci nel tuo algoritmo di machine learning.

Ora, supponi di voler fare previsioni per un nuovo campione. Ma hai solo $ X_ {new} $ e non $ Z_ {new} $ . Dovresti applicare la funzione $ Z_ {new} = A_X + B_XX_ {new} C_X $ . Cioè, usa lo stesso $ A_X, B_X, C_X $ dal set di dati di addestramento, piuttosto che riesaminali. Ciò fa sì che queste matrici abbiano la stessa forma degli altri parametri nel modello.

Sebbene siano spesso equivalenti in termini di valori previsti che ottieni dal set di dati di addestramento, certamente non si tratta di nuovi dati per le previsioni. Un semplice esempio, prevedere per $ 1 $ nuova osservazione, standardizzare questa (sottrazione media, divisione per sd) restituirà sempre zero.

Steven Scott
2018-09-29 02:06:16 UTC
view on stackexchange narkive permalink

Per i modelli di machine learning che includono coefficienti (ad es. regressione, regressione logistica, ecc.) il motivo principale per la normalizzazione è la stabilità numerica.Matematicamente, se una delle colonne del predittore viene moltiplicata per 10 ^ 6, il coefficiente di regressione corrispondente verrà moltiplicato per 10 ^ {- 6} e i risultati saranno gli stessi.

A livello computazionale, i tuoi predittori vengono spesso trasformati dall'algoritmo di apprendimento (ad esempio, la matrice X dei predittori in una regressione diventa X'X) e alcune di queste trasformazioni possono comportare una perdita di precisione numerica se X è molto grande o molto piccolo.Se i tuoi predittori sono sulla scala di 100, questo non avrà importanza.Se stai modellando granelli di sabbia, unità astronomiche o conteggi di query di ricerca, potrebbe farlo.

Ayush
2016-05-30 04:02:17 UTC
view on stackexchange narkive permalink

Stavo cercando di risolvere il problema di regressione della cresta utilizzando la discesa del gradiente. Ora senza normalizzazione ho impostato una dimensione del passo appropriata e ho eseguito il codice. Per assicurarmi che la mia codifica fosse priva di errori, ho codificato lo stesso obiettivo anche in CVX. Ora CVX ha impiegato solo poche iterazioni per convergere a un certo valore ottimale, ma ho eseguito il mio codice per la dimensione del passo migliore che ho trovato per 10k iterazioni ed ero vicino al valore ottimale di CVX ma ancora non esatto.

Dopo aver normalizzato il set di dati e averlo fornito al mio codice e al CVX, sono rimasto sorpreso di vedere che ora la convergenza richiedeva solo 100 iterazioni e il valore ottimale a cui convergeva la discesa del gradiente era esattamente uguale a quello di CVX.
Anche la quantità di "varianza spiegata" per modello dopo la normalizzazione era maggiore rispetto a quella originale. Quindi proprio da questo ingenuo esperimento ho capito che per quanto riguarda il problema della regressione avrei optato per la normalizzazione dei dati. A proposito, qui la normalizzazione implica la sottrazione per media e la divisione per la deviazione standard.

Per sostenermi sulla regressione, vedere questa domanda pertinente e la discussione su di essa:
Quando si esegue la regressione multipla, quando dovresti centra le tue variabili predittive & quando dovresti standardizzarle?

ciò che chiamate normalizzazione si chiama standardizzazione.Vedi https://en.wikipedia.org/wiki/Feature_scaling#Standardization


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...