Machine learning - Normalize or Standarizing When prepocessing continuous and integer data, is it better to normalize to $[0, 1]$ (i.e., $\frac{x-\min(x)}{\max(x)-\min(x)}$) or normalize via z-score (i.e., $\frac{x-\bar{x}}{s_x}$)? Is doing both a bad practice?
Would you suggest other normalization techniques?
 A: It depends on your input.
If you have for example 8-bit RGB channels, then you know that the minimum and maximum of any future data will always be 0 and 255. In such cases, normalizing is clearly the better choice.
If you have data with a central tendency, and a variance, both of which you expect to be somewhat similar in future data, then you should standardize using the meand and standard deviation of the train set.
Doing both makes no sense: The second scaling option undoes the changes introduced by the first.
A: Any normalization can be wrong, and will usually be inferior to an informed choice of scaling parameters. It is only a common choice to get a first impression of data and to get results quickly.
For example, you should not use it on any kind of histogram (it should be normalised to a total sum of 2 instead, not per bucket!). It is also inappropriate to use it on TF-IDF vectors, here normalizing to a L2 norm of 1 is more appropriate. When your data is skewed, also both will usually fail, and also when your data has outliers (then the scaling will be based on the outliers, not the data!). In some cases, you really should first do a log transform or a box-cox transform. Last but not least, don't forget more robust alternatives, for example $$\frac{x-Median(X)}{MAD(X)}$$
