Normalisation of a range of numbers to another range

185 Views Asked by At

I want to normalise a set of range of values having 0 Min and a Max that is known but can vary; say 22000 and would like to normalise these values from 0 to 300 and also from 0 to 20. I found a formula here on stack Exchange that is a general formula. The general one-line formula to linearly rescale data values having observed min and max into a new arbitrary range min' to max' is:

newvalue= (max'-min')/(max-min)*(value-max)+max'

I have used it for my purpose, but would like to know how this formula is derived from the following:

newvalue = a * value + b. a = (max'-min')/(max-min) and b = max' - a * max

How can I reference it or back it? And is it the right way to normalise anyway? Any help would be appreciated.

1

There are 1 best solutions below

0
On

For how the formula is derived, think about it this way. You have a value, $V$, which lies between a minimum $A$ and a maximum $B$. You want to rescale so it to a new value $v$ so it is between $a$ and $b$ instead. Without knowing anything else about the application, it is simplest to assume that what matters in this rescaling is "how far between $A$ and $B$ is $V$," or, "what is the distance between $A$ and $V$ compared to the maximum distance between $A$ and $B$."

So to preserve this in the rescaling you make the ratio $(V-A)/(B-A)$ the same as the ratio $(v-a)/(b-a)$: $${V-A\over B-A}={v-a\over b-a}$$ And you can easily solve for $v$: $$v=a+(b-a){V-A\over B-A}$$

(The formula you cite has min and max reversed from the one I show here, but it actually gives the same answer. You can see this by subtracting both sides of my first equation from 1.)

Whether this is the "right" way to rescale it depends entirely on the application. For instance, maybe your values $V$ have some non-uniform probability distribution between $A$ and $B$, but you want the rescaled values to have a uniform distribution between $a$ and $b$ while preserving the ordering of the values. In this case the linear rescaling would not be the one you wanted.