# Normalization by decimal scaling

I came to this normalization technique

Normalization by decimal scaling normalizes by moving the decimal point of values of attribute A. The number of decimal points moved depends on the maximum absolute value of A. A value v of A is normalized to v’ by computing: v’ = ( v / 10powerj )

where j is the smallest integer such that Max(|v’|)<1.

So if we have matrix e.g. [1 3 5 7] j should be 1 I believe and when matrix is [ 1 3 5 99 ] j will be 2 ??

Is this method superior over min-max scaling e.g. for SVM ?? Obviously this method doesn't scale to range 0-1 as commonly suggested.

Is any MATLAB code for this method available somewhere ??

Are you asking for a way to compute $j$ ?

If so, I would simply take j = log10(max(v)). (round it if you want an integer power)

Is this method superior over min-max scaling e.g. for SVM ?

I believe there is no single answer for that, i.e. it may depend on your data. The best way to know is to try both normalizations, conducting your experiments with the two data, and comparing the performances.

Edit:

I already gave you the MATLAB code j = round(log10(max(v)));

And the example you gave looks perfectly good to me. If you try min-max normalization (with mapminmax(v)), you will see that the final values will be -1 <= v' <= 1.

But if you definitely want max(v') < 1 (why though) then you should increment j by 1.

So in MATLAB, you need to do : j = round(log10(max(v))) + 1;

• Its not so simple as it looks. For matrix [ 1 2 10] j = log10(max(v)) = 1 v'= [0.1 0.2 1] and Max(|v’|)<1 is not fulfilled, j must be 2 and it will be scaled to [0.01 0.02 0.1]. This is a reason that i asked for MATLAB code as it was looking suspicious for me. I know I can try, I only found 3 papers where this method was used and claim to be superior so I'm asking community if one knows more about it. Sep 19, 2015 at 10:20
• I edited the answer in case you don't want 1 in your final vector, although I don't see why. The whole idea of normalization is to make the features in a similar range. So in your example, if you want j=2, then you will actually be limiting your values between 0.01 and 0.1, which is probably worse then them being between 0.1 and 1. Those 3 papers claim to be superior because they probably tried other normalizations and they experimentally found out that this method was better. Even with this, there is no guarantee that their method will generalize well to new data.
– jeff
Sep 19, 2015 at 13:38
• I have no idea why in those papers is max(v') < 1 not max(v') =< 1. Anyway I will just try. The paper is Data Mining: A Preprocessing Engine written by Al. Shalabi than A Comparision of Normalization techniques in predicting Dengue outbreak by Zuriani Mustaffa Sep 19, 2015 at 17:10
• I looked at the paper, it seems there is no justification why <1 and why not <=1. It might be just a typo as well as they might have overlooked this issue when max(v) is actually a power of 10. I would try both, but my intuition says the first one (without incrementing j by 1, therefore allowing your final variables in the range [*,1]) should be better.
– jeff
Sep 19, 2015 at 22:12