Eu quero representar uma variável como um número entre 0 e 1. A variável é um número inteiro não negativo sem limite inerente. Mapeio 0 a 0, mas o que posso mapear para 1 ou números entre 0 e 1?
Eu poderia usar o histórico dessa variável para fornecer os limites. Isso significaria que eu tenho que reafirmar as estatísticas antigas se o máximo aumentar. Preciso fazer isso ou existem outros truques que devo conhecer?
normalization
Russell Gallop
fonte
fonte
Respostas:
Um truque muito comum para fazer isso (por exemplo, na modelagem conexionista) é usar o tangh hiperbólico da tangente como a 'função de esmagar ". Ele ajusta automaticamente todos os números no intervalo entre -1 e 1. O que, no seu caso, restringe o intervalo de 0 a 1. In
r
ematlab
você obtém viatanh()
.Outra função de esmagamento é a função logística (graças a Simon pelo nome), fornecida por , que restringe o intervalo de 0 a 1 (com 0 mapeado para. 5) Portanto, você teria que multiplicar o resultado por 2 e subtrair 1 para ajustar seus dados no intervalo entre 0 e 1.f( x ) = 1 / ( 1 + e- x)
Aqui está um código R simples que plota as duas funções (tanh em vermelho, logístico em azul) para que você possa ver como os dois squash:
fonte
Freqüentemente, minha primeira pergunta seria " por que você quer fazer isso", então vi que você já respondeu isso nos comentários da pergunta: " Estou medindo o conteúdo em várias dimensões diferentes e quero ser capaz de fazer comparações em termos de quão relevante é uma determinada parte do conteúdo. Além disso, quero exibir valores nessas dimensões explicáveis e de fácil compreensão " .
fonte
mad()
rank()
ecdf()
ecdf(x)
Qualquer função sigmóide funcionará:
fonte
Além das boas sugestões de Henrik e Simon Byrne, você pode usar f (x) = x / (x + 1). A título de comparação, a função logística exagerará as diferenças à medida que x aumenta. Ou seja, a diferença entre f (x) ef (x + 1) será maior com a função logística do que com f (x) = x / (x + 1). Você pode ou não querer esse efeito.
fonte
Meu post anterior tem um método para classificar entre 0 e 1. Conselhos sobre correlação de entrada do classificador
No entanto, na classificação que usei, Tmin / Tmax usa a amostra min / max, mas você pode achar a população min / max mais apropriada. Também procure z scores
fonte
Para adicionar às outras respostas sugerindo pnorm ...
Para um método potencialmente ideal para selecionar parâmetros, sugiro esta aproximação para pnorm.
Isso é essencialmente a Softmax Normalização.
Referência Pnorm em uma pitada
fonte
Existem duas maneiras de implementar isso que eu uso normalmente. Estou sempre trabalhando com dados em tempo real, portanto, isso pressupõe entrada contínua. Aqui estão alguns pseudo-códigos:
Usando um minmax treinável:
Esta função requer que você execute uma fase inicial de treinamento (usando
calibrate()
) ou que treine novamente em determinados intervalos ou de acordo com determinadas condições. Por exemplo, imagine uma função como esta:Usando um minmax histórico:
fonte
Uma opção muito simples é dividir cada número em seus dados pelo maior número em seus dados. Se você tiver muitos números pequenos e alguns muito grandes, isso pode não transmitir bem as informações. Mas é relativamente fácil; se você acha que informações significativas são perdidas ao representar graficamente os dados dessa maneira, tente uma das técnicas mais sofisticadas sugeridas por outras pessoas.
fonte