Como normalizar dados entre -1 e 1?

36

Eu vi a fórmula de normalização min-max, mas que normaliza valores entre 0 e 1. Como normalizaria meus dados entre -1 e 1? Eu tenho valores negativos e positivos na minha matriz de dados.

covfefe
fonte
1
Se você estiver trabalhando em R, consulte este tópico para algumas opções. Em particular, um comentário sobre a resposta aceita tem essa função em que você define 'newMax' como 1 e 'newMin' como -1 e executa a função em seus dados
mtreg
Você pode encontrar referências na Wikipedia da seguinte maneira: en.wikipedia.org/wiki/Normalization_(statistics)
salem
Exemplo de Javascript, retirado daqui . função convertRange (valor, r1, r2) {retorno (valor - r1 [0]) * (r2 [1] - r2 [0]) / (r1 [1] - r1 [0]) + r2 [0]; } convertRange (328,17, [300,77, 559,22], [1, 10]); >>> 1.9541497388276272
Giuseppe Canale
1
@covfefe se você ainda está em torno de você pode querer aceitar uma das respostas
Simone

Respostas:

97

Com:

x=xminxmaxxminx
você normaliza seu recurso x em [0,1] .

Para normalizar em [1,1] você pode usar:

x=2xminxmaxxminx1

Em geral, você sempre pode obter uma nova variável x em [a,b] :

x=(ba)xminxmaxxminx+a
Simone
fonte
15
Honestamente, não tenho citações para isso. É apenas uma transformação linear de uma variável aleatória. Veja o efeito de transformações lineares no suporte de uma variável aleatória.
Simone
-1

Eu testei em dados gerados aleatoriamente e

Xout=(ba)XinminXinmaxXinminXin+a

não preserva a forma da distribuição. Realmente gostaria de ver a derivação apropriada disso usando funções de variáveis ​​aleatórias.

A abordagem que preservou a forma para mim estava usando:

Xout=Xinμinσinσout+μout

Onde

σout=ba6

(Admito que usar 6 é um pouco sujo ) e

μout=b+a2

e

a e representa a gama desejada; assim como por causa original seria e .ba=1b=1

Cheguei ao resultado desse raciocínio

Zout=Zin

Xoutμoutσout=Xinμinσin

AL Verminburger
fonte
3
Tem certeza de que isso garante que os dados transformados estejam dentro dos limites? Em R, tente: set.seed(1); scale(rnorm(1000))*.333. Eu recebo no máximo 1.230871. Seu método parece ser apenas um ajuste na padronização de dados, em vez de normalizá-los conforme solicitado. Observe que a pergunta não pede um método que preserve a forma da distribuição (o que seria um requisito estranho para normalização).
gung - Restabelecer Monica
3
Não tenho certeza de como a transformação original pode falhar em preservar a forma dos dados. É equivalente a subtrair uma constante e depois dividi-la por uma constante, que é o que a sua proposta faz e que não altera a forma dos dados. Sua proposta pressupõe que todos os dados estejam dentro de três desvios padrão da média, o que pode ser um tanto razoável com amostras pequenas distribuídas aproximadamente normalmente, mas não com amostras grandes ou fora do normal.
Noah
1
@Noah Não é equivalente a subtrair e dividir por constantes, porque o mínimo e o máximo dos dados são variáveis ​​aleatórias. De fato, para a maioria das distribuições subjacentes, elas são bastante variáveis ​​- mais variáveis ​​que o restante dos dados -, portanto, usá-las para qualquer forma de padronização geralmente não é uma boa idéia. Nesta resposta não está claro o que e média ou como eles podem estar relacionadas aos dados. ab
whuber
2
@whuber true, mas eu quis dizer que em um determinado conjunto de dados (ou seja, tratando os dados como fixos), eles são constantes, da mesma forma que a média da amostra e o desvio padrão da amostra funcionam como constantes ao padronizar um conjunto de dados. Minha impressão foi que o OP queria normalizar um conjunto de dados, não uma distribuição.
Noah
@Noah, tive a mesma impressão, mas acredito que o presente post pode estar respondendo a uma interpretação diferente.
whuber