Con: $$ x' = \frac{x - \min{x}}{\max{x} - \min{x}} $$ normalizas tu característica $x$ en $[0,1]$.
Para normalizar en $[-1,1]$ puedes usar:
$$ x'' = 2\frac{x - \min{x}}{\max{x} - \min{x}} - 1 $$
En general, siempre puedes obtener una nueva variable $x'''$ en $[a,b]$:
$$ x''' = (b-a)\frac{x - \min{x}}{\max{x} - \min{x}} + a $$
Y en caso de que quieras devolver una variable a su valor original puedes hacerlo porque estas son transformaciones lineales y por lo tanto invertibles. Por ejemplo:
$$ x = (x''' - a)\frac{(\max{x} - \min{x})}{b-a} + \min{x} $$
Un ejemplo en Python:
import numpy as np
x = np.array([1, 3, 4, 5, -1, -7])
# meta: rango [0, 1]
x1 = (x - min(x)) / (max(x) - min(x))
print(x1)
>>> [0.66666667 0.83333333 0.91666667 1. 0.5 0.]
Un ejemplo en JavaScript:
// meta: rango [0, 1]
const array = [1,3,4,5,-1,-7];
const minX = Math.min(...array);
const maxX = Math.max(...array);
const normalizedArray = array.map(x => (x-minX) / (maxX-minX));
console.log(normalizedArray);
1 votos
Si estás trabajando en R, consulta este hilo para ver algunas opciones. En particular, un comentario en la respuesta aceptada tiene esta función donde se configura 'newMax' a 1 y 'newMin' a -1 y se ejecuta la función en tus datos.
0 votos
Puede encontrar la referencia en Wikipedia de la siguiente manera: en.wikipedia.org/wiki/Normalization_(statistics)
0 votos
Ejemplo de Javascript, tomado de aquí. function convertRange( valor, r1, r2 ) { return ( valor - r1[ 0 ] ) * ( r2[ 1 ] - r2[ 0 ] ) / ( r1[ 1 ] - r1[ 0 ] ) + r2[ 0 ]; } convertRange( 328.17, [ 300.77, 559.22 ], [ 1, 10 ] ); >>> 1.9541497388276272
1 votos
@covfefe si todavía estás por aquí, podría ser una buena idea que aceptes una de las respuestas.
0 votos
Aquí hay un gist de Python del comando Javascript
convertRange
compartido por Giuseppe Canale.