Normalisation

La normalisation des données est souvent inutile d'un point de vue mathématique. C'est une autre histoire d'un point de vue numérique où le fait d'avoir des données qui se ressemblent améliore la convergence des algorithmes et la précision des calculs. Voyons cela sur quelques exemples.

Le premier jeu de données est une simple fonction linéaire sur deux variables d'ordre de grandeur différents.

On cale une régression linéaire.

Voyons comment ce chiffre évolue en fonction du paramètre coef.

Le modèle ne semble pas en souffrir. Les performances sont très stables. Augmentons les bornes.

Au delà d'un certain seuil, la performance chute. La trop grande différence d'ordre de grandeur entre les deux variables nuit à la convergence du modèle. Et si on normalise avant...

Le modèle ne souffre plus de problème numérique car il travaille sur des données normalisées. Que se passe-t-il avec un arbre de décision ?

La librairie XGBoost est moins sensible aux problèmes d'échelle. Les arbres de décision implémentés par scikit-learn le sont de façon assez surprenante. Il faudrait regarder l'implémentation plus en détail pour comprendre pourquoi le modèle se comporte mal lorsque coef est proche de 0. Le code source utilise une constante FEATURE_THRESHOLD égale à $10^{-7}$ qui rend l'algorithme insensible à toute variation en deça de ce seuil.