Questão:
É uma boa prática sempre dimensionar / normalizar os dados para aprendizado de máquina?
Juan Antonio Gomez Moriano
2016-01-07 10:09:44 UTC
view on stackexchange narkive permalink

Meu entendimento é que quando alguns recursos têm faixas diferentes em seus valores (por exemplo, imagine um recurso sendo a idade de uma pessoa e outro sendo seu salário em dólares americanos) afetará negativamente os algoritmos porque o recurso com valores maiores assumirá mais influência, é uma boa prática simplesmente SEMPRE dimensionar / normalizar os dados?

Parece-me que se os valores já forem semelhantes entre eles, normalizá-los terá pouco efeito, mas se os valores a normalização é muito diferente vai ajudar, mas parece muito simples para ser verdade :)

Estou perdendo alguma coisa? Existem situações / algoritmos em que realmente é desejável permitir que alguns recursos superem deliberadamente outros?

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

Em primeiro lugar, não acho que existam muitas perguntas do tipo "É uma boa prática usar sempre o X no aprendizado de máquina" em que a resposta será definitiva. Sempre? Sempre sempre? Através de modelos paramétricos, não paramétricos, Bayesianos, Monte Carlo, ciências sociais, puramente matemáticos e milhões de modelos de recursos? Isso seria bom, não seria!

Porém, concretamente, aqui estão algumas maneiras em que: depende.

Algumas vezes, quando a normalização é boa:

1) Vários algoritmos, em particular SVMs vêm à mente, às vezes podem convergir muito mais rápido em dados normalizados (embora por que, precisamente, eu não me lembre).

2) Quando seu modelo é sensível à magnitude e as unidades de dois recursos diferentes são diferentes e arbitrárias. É como o caso que você sugere, em que algo obtém mais influência do que deveria.

Mas é claro - nem todos os algoritmos são sensíveis à magnitude da maneira que você sugere. Os coeficientes de regressão linear serão idênticos se você fizer ou não dimensionar seus dados, porque estão observando relações proporcionais entre eles.

Algumas vezes, quando a normalização é ruim:

1) Quando você deseja interpretar seus coeficientes e eles não se normalizam bem. A regressão em algo como o dinheiro fornece um resultado significativo. A regressão na proporção do máximo de dólares na amostra pode não.

2) Quando, na verdade, as unidades em seus recursos são significativas e a distância faz fazer diferença! De volta aos SVMs - se você está tentando encontrar um classificador de margem máxima, as unidades que entram nesse 'máximo' são importantes. O escalonamento de recursos para algoritmos de agrupamento pode alterar substancialmente o resultado. Imagine quatro clusters ao redor da origem, cada um em um quadrante diferente, todos bem dimensionados. Agora, imagine o eixo y sendo alongado até dez vezes o comprimento do eixo x. em vez de quatro pequenos grupos de quadrantes, você obterá a longa baguete amassada de dados cortada em quatro pedaços ao longo de seu comprimento! (E, a parte importante é que você pode preferir qualquer um desses!)

No resumo certamente insatisfatório, a resposta mais geral é que você precisa se perguntar seriamente o que faz sentido com os dados, e o modelo que você está usando.

Obrigado pela resposta, mas aí vai outra pergunta, você diz que em modelos de regressão normalizar, por exemplo, salário (1000-100000) e (digamos) idade (10-80) não vai ajudar muito (especialmente porque se perde o significado donúmeros ...), porém, se eu não normalizar isso, vai acontecer que o salário supere a idade, não é?
O que você quer dizer com compensar?Estou assumindo que salário e idade são variáveis independentes aqui.Normalizá-los apenas altera as unidades de seus coeficientes.Mas, por exemplo, porque é mais claro do que uma constante de normalização, vamos dividir por 1000. Mas então seu coeficiente significa apenas mudança por - \ $ 1000 mudança, ao contrário de mudança por - \ $ 1-mudança.Os números são diferentes, mas você deve sempre estar pensando sobre o que significam seus coeficientes - você simplesmente não pode parar apenas com os números.
Normalizando-os, pretendo usar uma função como escala em r, como dados $ idade <-escala (dados $ idade) e dados $ salário <- escala (dados $ salário).No final das contas, ao usar algo como regressão logística, está-se apenas aprendendo os parâmetros de um vetor, correto?se tal vetor contiver algumas variáveis cujos valores estão em uma faixa muito maior do que outros, isso não seria um problema?Tenho brincado com e sem dados escalonados para regressão logística e escalonar parece ajudar ... Estou faltando alguma coisa?
_Normalizando_, eu entendo - você usou a palavra _pesar_, e ainda não entendo como está usando.E, novamente, dimensionar "parece ajudar" - o que você quer dizer?Ajuda _como_?
Possivelmente é o meu inglês :).O que quero dizer é que dado que uma variável (salário) tem um intervalo mais amplo do que outra (digamos, idade), significará que a idade terá muito pouca importância quando se trata de fazer previsões, enquanto o salário será o fator mais determinante e isso énem sempre desejável.Por "parece ajudar", quero dizer que ao tentar um modelo treinado com / sem valores escalados, o escalado generaliza melhor (usando o conjunto de validação cruzada).Espero que isso esclareça :)
@JuanAntonioGomezMoriano: Isso não é verdade: os modelos lineares são invariantes às transformações lineares de seus preditores.Somente quando você está penalizando estimativas de coeficientes de acordo com sua magnitude isso importa (um caso do segundo ponto de Sofologista).Consulte [Ao conduzir regressão múltipla, quando você deve centralizar suas variáveis de previsão e quando você deve padronizá-las?] (Http://stats.stackexchange.com/q/29781/17230).Se os preditores de escala levam a * qualquer mudança * nas previsões, isso tem a ver com problemas numéricos em seu algoritmo de ajuste.
"Os coeficientes de regressão linear serão idênticos se você fizer ou não dimensionar seus dados".Isso é verdadeiro para dimensionar entradas e saídas por um único valor constante.Mas dimensionar cada recurso (ou a saída) separadamente mudaria os coeficientes.
Uma coisa que ninguém ainda mencionou é o impacto das escalas de diferença de variáveis independentes no "Intercepto" do modelo.Você pode definitivamente terminar com interceptações negativas, que se tornam difíceis de interpretar (em vez disso, explicar para um executivo).
Amir
2016-01-07 10:56:06 UTC
view on stackexchange narkive permalink

Bem, acredito que um ponto de vista mais geométrico ajudará a decidir melhor se a normalização ajuda ou não. Imagine que seu problema de interesse tenha apenas dois recursos e variam de maneira diferente. Em seguida, geometricamente, os pontos de dados são espalhados e formam um elipsóide. No entanto, se as características forem normalizadas, elas ficarão mais concentradas e, com sorte, formarão um círculo unitário e tornar a covariância diagonal ou pelo menos próxima da diagonal. Essa é a ideia por trás de métodos como a normalização em lote das representações intermediárias de dados em redes neurais. Usando BN, a velocidade de convergência aumenta surpreendentemente (talvez 5-10 vezes), uma vez que o gradiente pode facilmente ajudar os gradientes a fazerem o que deveriam fazer para reduzir o erro.

No caso não normalizado, gradiente- algoritmos de otimização baseados terão muita dificuldade em mover os vetores de peso em direção a uma boa solução. No entanto, a superfície de custo para o caso normalizado é menos alongada e os métodos de otimização com base em gradiente farão muito melhor e divergem menos.

Este é certamente o caso para modelos lineares e especialmente aqueles cuja função de custo é uma medida de divergência da saída do modelo e o alvo (por exemplo, regressão linear com função de custo MSE), mas pode não ser necessariamente o caso nos não lineares. A normalização não prejudica os modelos não lineares; não fazer isso para modelos lineares vai doer.

A imagem abaixo pode ser [aproximadamente] vista como o exemplo de uma superfície de erro alongada na qual os métodos baseados em gradiente podem ter dificuldade em ajudar os vetores de peso vá em direção ao ótimo local.

enter image description here

_No entanto, a normalização não prejudica o para modelos não lineares, mas não fazê-lo para os modelos lineares prejudica._ Acho esta frase difícil de entender.É (grosso modo) irrelevante para modelos não lineares se os dados são normalizados?Não fazer isso para modelos lineares quebrará algo, mas você pode especificar melhor para modelos não lineares?Talvez tente evitar misturar expressões positivas e negativas nesta frase.
Em modelos lineares, as características com grandes faixas irão induzir alta variância ao modelo e, portanto, podem se tornar desnecessariamente importantes.Por exemplo, no PCA, esses recursos terão autovalores muito maiores do que outros.No entanto, em modelos não lineares (depende de muitos fatores) isso pode não ser o caso, pois o modelo pode alterar completamente a representação dos dados por meio das não linearidades.Portanto, não é tão fácil analisar o que acontece em um modelo não linear e como os recursos não normalizados afetam a saída.
Então, basicamente, o efeito da normalização em modelos não lineares é difícil de prever e deve ser decidido caso a caso?
Verdadeiro.Embora tenha sido comprovado empiricamente que a normalização também ajuda em modelos não lineares.
Obrigado por este esclarecimento.Isso me ajudou a entender melhor sua resposta.
Você poderia adicionar uma explicação sobre o que significa o seu segundo gráfico?
@JuanAntonioGomezMoriano Isso é convergência (chegando perto dos mínimos locais)
Qual é o eixo X e Y?
O eixo X é o número de iterações do eixo Y é a convergência representa
Vihari Piratla
2016-01-07 12:36:25 UTC
view on stackexchange narkive permalink

Deixe-me contar a história de como aprendi a importância da normalização.

Eu estava tentando classificar dados de dígitos escritos à mão (é uma tarefa simples de classificar recursos extraídos de imagens de dígitos) com Redes Neurais como uma tarefa para um curso de Aprendizado de Máquina.
Assim como qualquer outra pessoa, comecei com uma biblioteca / ferramenta de Rede Neural, alimentei-a com os dados e comecei a brincar com os parâmetros. Tentei mudar o número de camadas, o número de neurônios e várias funções de ativação. Nenhum deles produziu os resultados esperados (precisão em torno de 0,9).

O culpado? O (s) fator (es) de escala na função de ativação = $ \ frac {s} {1 + e ^ {- s.x}} $ - 1. Se o parâmetro s não for definido, a função de ativação irá ativar todas as entradas ou anular todas as entradas em cada iteração. O que obviamente levou a valores inesperados para os parâmetros do modelo. Meu ponto é, não é fácil definir s quando a entrada x está variando em valores grandes.

Como algumas das outras respostas já apontaram, o "bom prática "para normalizar os dados ou não depende dos dados, modelo e aplicativo. Ao normalizar, você está, na verdade, jogando fora algumas informações sobre os dados, como os valores máximo e mínimo absolutos. Portanto, não existe uma regra prática.

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

Como outros disseram, a normalização nem sempre é aplicável; por exemplo. de um ponto de vista prático.

Para ser capaz de dimensionar ou normalizar recursos para um intervalo comum como [0,1] , você precisa saber o min / max (ou mean / stdev dependendo de qual método de escala você aplica) de cada recurso. IOW: você precisa ter todos os dados para todos os recursos antes de iniciar o treinamento.

Muitos problemas práticos de aprendizagem não fornecem todos os dados a priori, então você simplesmente não pode normalizar. Esses problemas exigem uma abordagem de aprendizado online.

No entanto, observe que alguns algoritmos online (em oposição ao aprendizado em lote) que aprendem com um exemplo por vez, suportam uma aproximação para escalonamento /normalização. Eles aprendem as escalas e as compensam, iterativamente. vowpal wabbit por exemplo, normaliza iterativamente para escala por padrão (a menos que você desabilite explicitamente a escala automática, forçando um certo algoritmo de otimização como ingênuo --sgd )

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

Escalar / normalizar muda ligeiramente o seu modelo. Na maioria das vezes, isso corresponde à aplicação de uma função afim. Então você tem $ Z = A_X + B_XXC_X $ onde $ X $ são seus "dados de entrada / originais" (uma linha para cada exemplo de treinamento, uma coluna para cada recurso). Então, $ A_X, B_X, C_X $ são matrizes que são normalmente funções de $ X $ . A matriz $ Z $ é o que você alimenta em seu algoritmo de ML.

Agora, suponha que você queira fazer uma previsão para alguma nova amostra. Mas você tem apenas $ X_ {new} $ e não $ Z_ {new} $ . Você deve aplicar a função $ Z_ {new} = A_X + B_XX_ {new} C_X $ . Ou seja, use o mesmo $ A_X, B_X, C_X $ do conjunto de dados de treinamento, em vez de reestimá-los. Isso faz com que essas matrizes tenham a mesma forma que outros parâmetros em seu modelo.

Embora geralmente sejam equivalentes em termos dos valores previstos que você obtém do conjunto de dados de treinamento, certamente não é em novos dados para previsões. Um exemplo simples, prever para $ 1 $ nova observação, padronizando isso (subtrair a média, dividir por sd) sempre retornará zero.

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

Para modelos de aprendizado de máquina que incluem coeficientes (por exemplo, regressão, regressão logística etc.), o principal motivo para normalizar é a estabilidade numérica.Matematicamente, se uma de suas colunas de previsão for multiplicada por 10 ^ 6, o coeficiente de regressão correspondente será multiplicado por 10 ^ {- 6} e os resultados serão os mesmos.

Computacionalmente, seus preditores são frequentemente transformados pelo algoritmo de aprendizagem (por exemplo, a matriz X de preditores em uma regressão torna-se X'X) e algumas dessas transformações podem resultar em perda de precisão numérica se X for muito grande ou muito pequeno.Se seus preditores estiverem na escala de 100, isso não importa.Se você estiver modelando grãos de areia, unidades astronômicas ou contagens de consulta de pesquisa, pode sim.

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

Eu estava tentando resolver o problema de regressão de crista usando descida de gradiente. Agora, sem normalização, defini algum tamanho de etapa apropriado e executei o código. Para ter certeza de que minha codificação estava livre de erros, codifiquei o mesmo objetivo no CVX também. Agora, o CVX levou apenas algumas iterações para convergir para um determinado valor ideal, mas eu executei meu código para o melhor tamanho de passo que pude encontrar em 10k iterações e estava perto do valor ideal de CVX, mas ainda não exato.

Depois de normalizar o conjunto de dados e alimentá-lo para meu código e CVX, fiquei surpreso ao ver que agora a convergência levou apenas 100 iterações e o valor ideal para o qual a descida de gradiente convergiu foi exatamente igual ao de CVX.
Além disso, a quantidade de "variância explicada" por modelo após a normalização foi maior em comparação com o original. Então, apenas a partir desse experimento ingênuo, percebi que, no que diz respeito ao problema de regressão, eu iria para a normalização dos dados. BTW, aqui a normalização implica subtrair pela média e dividir pelo desvio padrão.

Para me apoiar na regressão, consulte esta questão relevante e discussão sobre ela:
Ao conduzir a regressão múltipla, quando você deve centralize suas variáveis ​​de previsão & quando você deve padronizá-las?

o que você chama de normalização é chamado de padronização.Veja https://en.wikipedia.org/wiki/Feature_scaling#Standardization


Estas perguntas e respostas foram traduzidas automaticamente do idioma inglês.O conteúdo original está disponível em stackexchange, que agradecemos pela licença cc by-sa 3.0 sob a qual é distribuído.
Loading...