Selon la documentation de l' objet StandardScaler dans scikit-learn:
Par exemple, de nombreux éléments utilisés dans la fonction objective d'un algorithme d'apprentissage (comme le noyau RBF des machines à vecteurs de support ou les régularisateurs L1 et L2 des modèles linéaires) supposent que toutes les fonctionnalités sont centrées autour de 0 et ont des variances dans le même ordre. Si une caractéristique présente une variance de plusieurs ordres de grandeur plus grande que d'autres, elle pourrait dominer la fonction objective et empêcher l'estimateur d'apprendre correctement des autres caractéristiques comme prévu.
Je devrais mettre à l'échelle mes fonctionnalités avant la classification. Existe-t-il un moyen simple de montrer pourquoi je dois le faire? Des références à des articles scientifiques seraient encore meilleures. J'en ai déjà trouvé un mais il y en a probablement beaucoup d'autres.
Cela dépend du noyau que vous utilisez. De loin le plus couramment utilisé (en dehors du linéaire) est le noyau gaussien, qui a la forme
Un SVM prend cette fonction et l'utilise pour comparer la similitude d'un point ( ) à tous les autres points de l'ensemble d'apprentissage en additionnant les différences comme suit :x1
où est votre exemple et les valeurs de sont les points de repère.x l
Si la fonction va de 0 à 50 000 tandis que la fonction va de 0 à 0,01, vous pouvez voir que va dominer cette somme tandis que n'aura pratiquement aucun impact. Pour cette raison, il est nécessaire de mettre à l'échelle les fonctionnalités avant d'appliquer le kernal.x1 x2 x1 x2
Si vous voulez en savoir plus, je recommande le module 12 (Support Vector Machines) du cours en ligne de Stanford sur l'apprentissage automatique à Coursera (gratuit et disponible à tout moment): https://www.coursera.org/course/ml
la source