web-dev-qa-db-fra.com

Pourquoi mettre à l'échelle les fonctionnalités?

J'ai trouvé que la mise à l'échelle dans les problèmes SVM (Support Vector Machine) améliore vraiment ses performances ... J'ai lu cette explication:

"Le principal avantage de la mise à l'échelle est d'éviter que les attributs situés dans des plages numériques plus importantes ne dominent ceux situés dans des plages numériques plus petites."

Malheureusement, cela ne m'a pas aidé ... Quelqu'un peut-il me fournir une meilleure explication? Merci d'avance!

36
Kevin

La véritable raison de la mise à l'échelle des fonctionnalités dans SVM est le fait que ce classificateur n'est pas une transformation affine invariante. En d'autres termes, si vous multipliez une entité par 1000, une solution donnée par SVM sera complètement différente. Cela n'a presque rien à voir avec les techniques d'optimisation sous-jacentes (bien qu'elles soient affectées par ces problèmes d'échelles, elles devraient quand même converger vers l'optimum global).

Prenons un exemple: vous avez un homme et une femme, codés par leur sexe et leur taille (deux caractéristiques). Supposons un cas très simple avec de telles données:

0 -> homme 1 -> femme

╔═════╦════════╗
║ sex ║ height ║
╠═════╬════════╣
║  1  ║  150   ║
╠═════╬════════╣
║  1  ║  160   ║
╠═════╬════════╣
║  1  ║  170   ║
╠═════╬════════╣
║  0  ║  180   ║
╠═════╬════════╣
║  0  ║  190   ║
╠═════╬════════╣
║  0  ║  200   ║
╚═════╩════════╝

Et laissez-nous faire quelque chose de stupide. Entraînez-le à prédire le sexe de la personne, nous essayons donc d'apprendre f (x, y) = x (en ignorant le deuxième paramètre).

Il est facile de voir que pour de telles données, le plus grand classificateur de marge "coupera" l'avion horizontalement quelque part autour de la hauteur "175", donc une fois que nous aurons un nouvel échantillon "0 178" (une femme de 178 cm de hauteur), nous obtiendrons la classification qu'elle est un homme.

Cependant, si nous réduisons tout à [0,1], nous obtenons qch comme

╔═════╦════════╗
║ sex ║ height ║
╠═════╬════════╣
║  1  ║  0.0   ║
╠═════╬════════╣
║  1  ║  0.2   ║
╠═════╬════════╣
║  1  ║  0.4   ║
╠═════╬════════╣
║  0  ║  0.6   ║
╠═════╬════════╣
║  0  ║  0.8   ║
╠═════╬════════╣
║  0  ║  1.0   ║
╚═════╩════════╝

et maintenant le plus grand classificateur de marge "coupe" l'avion presque verticalement (comme prévu) et donc étant donné le nouvel échantillon "0 178" qui est également mis à l'échelle autour de "0 0,56", nous obtenons qu'il s'agit d'une femme (correct!)

Donc, en général, la mise à l'échelle garantit que, simplement parce que certaines fonctionnalités sont grandes, cela ne les conduira pas à les utiliser comme n prédicteur principal.

46
lejlot

La mise à l'échelle des fonctionnalités est une astuce générale appliquée aux problèmes d'optimisation (pas seulement SVM). L'algorithme de soulignement pour résoudre le problème d'optimisation du SVM est le gradient descendant. Andrew Ng a une grande explication dans ses vidéos de coursera ici .

Je vais illustrer les idées fondamentales ici (j'emprunte les diapositives d'Andrew). Supposons que vous n'ayez que deux paramètres et que l'un des paramètres puisse prendre une plage de valeurs relativement large. Le contour de la fonction de coût peut alors ressembler à des ovales très grands et maigres (voir ovales bleus ci-dessous). Vos dégradés (le chemin du dégradé est tracé en rouge) pourraient prendre beaucoup de temps et aller et venir pour trouver la solution optimale.
enter image description here

Au lieu de cela, si vous mettez votre entité à l'échelle, le contour de la fonction de coût peut ressembler à des cercles; alors le gradient peut prendre un chemin beaucoup plus droit et atteindre le point optimal beaucoup plus rapidement. enter image description here

58
greeness

Juste des pensées personnelles d'un autre point de vue.
1. pourquoi avoir une influence sur la mise à l'échelle?
Il y a un mot dans l'application de l'algorithme d'apprentissage automatique, 'garbage in, garbage out'. Plus la réflexion de vos fonctionnalités est réelle, plus votre algorithme sera précis. Cela s'applique également à la façon dont les algorithmes d'apprentissage automatique traitent les relations entre les fonctionnalités. Différent du cerveau humain, lorsque les algorithmes d'apprentissage automatique font la classification par exemple, toutes les caractéristiques sont exprimées et calculées par le même système de coordonnées, qui dans un certain sens, établissent une hypothèse a priori entre les fonctionnalités (pas vraiment le reflet des données elles-mêmes). Et la nature de la plupart des algorithmes est également de trouver le pourcentage de poids le plus approprié entre les fonctionnalités pour adapter les données. Ainsi, lorsque l'entrée de ces algorithmes concerne des caractéristiques non mises à l'échelle, les données à grande échelle ont plus d'influence sur le poids. En fait, ce n'est pas le reflet des données elles-mêmes.
2. pourquoi généralement la mise à l'échelle des fonctionnalités améliore la précision?
La pratique courante dans les algorithmes d'apprentissage automatique non supervisés concernant la sélection d'hyper-paramètres (ou d'hyper-hyper paramètres) (par exemple, processus de Dirichlet hiérarchique, hLDA) est que vous ne devez pas ajouter d'hypothèse subjective personnelle sur les données. La meilleure façon est simplement de supposer qu'ils ont la probabilité d'égalité d'apparaître. Je pense que cela s'applique ici aussi. La mise à l'échelle des fonctionnalités essaie simplement de faire l'hypothèse que toutes les fonctionnalités ont la possibilité d'égalité d'influencer le poids, ce qui reflète plus vraiment les informations/connaissances que vous connaissez sur les données. Il en résulte généralement une meilleure précision.

BTW, à propos de la transformation affine invariante et converger plus rapidement, il y a un lien d'intérêt ici sur stats.stackexchange.com.

2
weiheng

Nous pouvons accélérer la descente du gradient en ayant chacune de nos valeurs d'entrée dans à peu près la même plage. En effet, θ descendra rapidement sur de petites plages et lentement sur de grandes plages, et oscillera donc de manière inefficace jusqu'à l'optimum lorsque les variables sont très inégales. Cela vient d'Andrews NG coursera course.

Donc, c'est fait pour faire quelque chose comme standardiser les données. Parfois, les chercheurs veulent savoir si une observation spécifique est courante ou exceptionnelle. exprimer un score en termes de nombre d'écarts-types, il est retiré de la moyenne. Ce nombre est ce que nous appelons un z-score. Si nous recodons les scores originaux en z-scores, nous disons que nous standardisons une variable.

2
iali87

Oui, si la normalisation n'est pas là, le contour sera maigre donc avec la normalisation:

  1. Les valeurs doivent être dans la plage
  2. Accélère le calcul de thêta car le nombre de calculs requis sera moindre
1
Nitish Kumar

D'après ce que j'ai appris du cours Andrew Ng sur coursera, c'est que la mise à l'échelle des fonctionnalités nous aide à atteindre le gradient décent plus rapidement, si les données sont plus réparties, cela signifie que si elles ont une déviation standard plus élevée, cela prendra relativement plus de temps. pour calculer le gradient décent par rapport à la situation lorsque nous mettons à l'échelle nos données via la mise à l'échelle des fonctionnalités

1
Dude

L'idée de la mise à l'échelle est de supprimer les calculs excédentaires sur une variable particulière en standardisant toutes les variables sur une même échelle.Nous avons tendance à calculer la pente beaucoup plus facilement (y = mx + c) où nous normalisons le paramètre M pour converger le plus rapidement possible.

1
Sree11