Quelle est l'influence du C dans les SVM avec un noyau linéaire?


134

J'utilise actuellement un SVM avec un noyau linéaire pour classer mes données. Il n'y a pas d'erreur sur le set d'entraînement. J'ai essayé plusieurs valeurs pour le paramètre ( ). Cela n'a pas modifié l'erreur sur l'ensemble de test.10 - 5 , , 10 2C105,,102

Maintenant, je me demande: est-ce une erreur causée par les liaisons Ruby car libsvmj'utilise ( rb-libsvm ) ou est-ce théoriquement explicable ?

Le paramètre toujours modifier les performances du classificateur?C


Juste un commentaire, pas une réponse: Tout programme qui minimise la somme de deux termes, tels que devrait (à mon humble avis) vous indiquer quels sont les deux termes à la fin. que vous pouvez voir comment ils équilibrent. (Si vous avez besoin d'aide pour calculer vous-même les deux termes SVM, essayez de poser une question distincte. Avez-vous examiné quelques-uns des points les moins bien classés? Pourriez-vous poser un problème similaire au vôtre?)|w|2+Cξi,
denis

Réponses:


136

Le paramètre C indique à l'optimisation SVM à quel point vous voulez éviter de classer chaque exemple d'apprentissage de manière erronée. Pour les grandes valeurs de C, l'optimisation choisira un hyperplan à plus faible marge si cet hyperplan réussit mieux à classer correctement tous les points d'apprentissage. Inversement, une très petite valeur de C obligera l'optimiseur à rechercher un hyperplan de séparation à marge plus grande, même si cet hyperplan classe de manière erronée plus de points. Pour de très petites valeurs de C, vous devriez obtenir des exemples mal classés, souvent même si vos données d’entraînement sont séparables linéairement.


1
OK, je comprends que C détermine l’influence de la classification erronée sur la fonction objectif. La fonction objectif est la somme d'un terme de régularisation et du taux de classification erronée (voir en.wikipedia.org/wiki/Support_vector_machine#Soft_margin ). Lorsque je change de C, cela n’a aucun effet sur le minimum de ma fonction objectif. Cela signifie-t-il que le terme de régularisation est toujours très petit?
Alfa

3
Je suggérerais d'essayer une gamme plus large de valeurs C, peut-être 10 ^ [- 5, ..., 5], ou plus si l'optimisation est rapide sur votre jeu de données, pour voir si vous obtenez quelque chose qui semble plus raisonnable. L'erreur d'apprentissage et la valeur du coût minimum devraient changer à mesure que C change. En outre, l’échelle de vos données est-elle extrême? En général, un paramètre C optimal doit être plus grand lorsque vous réduisez vos données, et inversement. Par conséquent, si vous avez de très petites valeurs pour les entités, veillez à inclure de très grandes valeurs pour les valeurs C possibles. Si rien de ce qui précède ne permet de résoudre le problème , je suppose que le problème vient des reliures ruby
Marc Shivers

3
changer la précision équilibrée de 0,5 (deviner) à 0,86 ne me semble pas être une influence marginale. Ce serait une bonne idée d’enquêter sur une grille de valeurs plus fine pour C, comme le suggère Marc, mais les résultats que vous avez donnés semblent être un comportement assez normal. On pourrait s’attendre à ce que l’erreur remonte à nouveau, car C tend vers l’infini en raison de la superposition, mais cela ne semble pas trop poser de problème dans ce cas. Notez que si vous êtes vraiment intéressé par l'erreur équilibrée et que votre jeu d'entraînement n'a pas de division 50:50, vous pourrez peut-être obtenir de meilleurs résultats ...
Dikran Marsupial

2
... en utilisant différentes valeurs de C pour les motifs appartenant aux classes positive et négative (ce qui revient asymptotiquement à ré-échantillonner les données pour modifier la proportion de motifs appartenant à chaque classe).
Dikran Marsupial

2
Je pense qu'il est possible qu'une fois que vous atteignez C = 10 ^ 0, le SVM classe déjà correctement toutes les données d'apprentissage et aucun des vecteurs de support n'est lié (l'alpha est égal à C), ce qui rend C plus grand. aucun effet sur la solution.
Dikran Marsupial

152

Dans un SVM, vous recherchez deux choses: un hyperplan avec la marge minimale la plus grande et un hyperplan qui sépare correctement autant d'instances que possible. Le problème est que vous ne pourrez pas toujours obtenir les deux choses. Le paramètre c détermine à quel point votre désir pour ce dernier est grand. J'ai dessiné un petit exemple ci-dessous pour illustrer cela. Sur la gauche, vous avez un c bas qui vous donne une marge minimale assez large (violet). Cependant, cela nécessite que nous négligions la valeur aberrante du cercle bleu que nous n'avons pas classée correcte. Sur la droite vous avez un haut c. Maintenant, vous ne négligerez pas la valeur aberrante et vous vous retrouverez ainsi avec une marge beaucoup plus petite.

entrez la description de l'image ici

Alors, lequel de ces classificateurs est le meilleur? Cela dépend de ce à quoi ressembleront les données futures que vous prévoyez et, bien souvent, vous ne le savez pas. Si les données futures ressemblent à ceci:

grand c est le meilleur alors le classifieur appris en utilisant une grande valeur c est le meilleur.

Par contre, si les données futures ressemblent à ceci:

faible c est le meilleur alors le classifieur appris en utilisant une faible valeur c est le meilleur.

Selon votre ensemble de données, la modification de c peut produire ou non un hyperplan différent. Si elle ne produire un hyperplan différent, cela ne signifie pas que votre classificateur sortie différentes classes pour les données particulières que vous avez utilisé pour classer. Weka est un bon outil pour visualiser des données et jouer avec différents réglages d'un SVM. Cela peut vous aider à avoir une meilleure idée de l'apparence de vos données et de la raison pour laquelle changer la valeur c ne modifie pas l'erreur de classification. En général, le nombre limité d'instances de formation et de nombreux attributs facilite la séparation linéaire des données. De plus, le fait que vous évaluiez vos données d'entraînement et non de nouvelles données invisibles facilite la séparation.

Quels types de données essayez-vous d'apprendre un modèle? Combien de données? Peut-on le voir?


4
Je n'ai pas touché les données depuis plus de 3 ans maintenant. Il est très bruyant et de grande dimension et je ne suis pas autorisé à le publier. La question a déjà reçu une réponse, mais je pense que votre visualisation est très bonne et intuitive.
alfa

impressionnant. Avez-vous de telles explications pour Gama Value aussi?
MonsterMMORPG

2
Le paramètre gamma est utilisé pour la fonction du noyau gaussien. Les fonctions du noyau peuvent être considérées comme un moyen efficace de transformer vos entités d'origine en un autre espace, dans lequel un hyperplan de séparation dans le nouvel espace d'entités ne doit pas nécessairement être linéaire dans l'espace d'entités d'origine. Par exemple, la position en deux dimensions d’un point de données dans l’espace original peut être utilisée pour calculer une nouvelle entité représentant la distance à un marqueur sur une carte. Avec cette nouvelle fonctionnalité, un classifieur non linéaire (dans l'espace d'origine) peut être créé, dont la frontière de décision forme un cercle autour du marqueur
Kent Munthe Caspersen

@KentMuntheCaspersen votre explication de C n'est-elle pas incorrecte? C'est l'inverse de ce qui est écrit dans le livre "Introduction à l'apprentissage statistique".
diugalde

2
@diugalde pouvez-vous citer du livre ce qui diffère exactement de mon explication? Je pense toujours à c comme au coût d'une mauvaise classification (facile à retenir par c dans la classification). De cette manière, c plus élevé signifie un coût élevé de classification erronée, ce qui conduit l’algorithme à tenter de séparer parfaitement tous les points de données. Avec les valeurs éloignées, cela n’est pas toujours possible ou ne conduit pas toujours à un bon résultat général, ce qui est une bonne raison de baisser / introduire c.
Kent Munthe Caspersen

26

C est essentiellement un paramètre de régularisation, qui contrôle le compromis entre l'obtention d'une erreur faible sur les données d'apprentissage et la réduction au minimum de la norme des poids. Il est analogue au paramètre de crête dans la régression de crête (en fait, il y a peu de différence de performance ou de théorie entre les SVM linéaires et la régression de crête, aussi j'utilise généralement la dernière - ou régression de crête de noyau s'il y a plus d'attributs que d'observations).

Le réglage correct de C est une étape essentielle dans les meilleures pratiques d’utilisation des SVM, car la minimisation des risques structurels (principe fondamental de l’approche de base) est partiellement mise en œuvre via le réglage de C. Le paramètre C impose une limite supérieure à la norme de poids, ce qui signifie qu'il existe un ensemble imbriqué de classes d'hypothèses indexées par C. En augmentant C, nous augmentons la complexité de la classe d'hypothèses (si nous augmentons légèrement C, nous pouvons toujours former tous les modèles linéaires que nous pouvions auparavant et aussi certains que nous ne pouvions pas avant nous avons augmenté la limite supérieure de la norme admissible des poids). Donc, en plus de mettre en œuvre SRM via la classification de la marge maximale, il est également implémenté par la limitation de la complexité de la classe d'hypothèses via le contrôle C.

Malheureusement, la théorie pour déterminer comment définir C n'est pas très bien développée pour le moment, aussi la plupart des gens ont-ils tendance à utiliser la validation croisée (s'ils font quoi que ce soit).


OK, je pense que je comprends le sens de C maintenant. :)
alfa

2
Mais si C est un paramètre de régularisation, pourquoi une sur-adaptation plus élevée augmente-t-elle, alors qu'en règle générale une régularisation est effectuée pour atténuer la sur-adaptation, c'est-à-dire en créant un modèle plus général?
user1603472

2
C est un paramètre de régularisation, mais il est essentiellement lié au terme d’adaptation des données (la somme des variables de jeu) plutôt qu’au terme de régularisation (le bit de marge), de sorte qu’une valeur plus grande de C signifie moins de régularisation que plus. Vous pouvez également afficher la représentation habituelle du paramètre de régularisation sous la forme 1 / C.
Dikran Marsupial

8

C est un paramètre de régularisation qui contrôle le compromis entre l'obtention d'une erreur de formation faible et d'une erreur de test faible, à savoir la possibilité de généraliser votre classificateur à des données invisibles.

Considérons la fonction objectif d'un SVM linéaire: min | w | ^ 2 + C∑ξ. Si votre C est trop grand, l'algorithme d'optimisation essaiera de réduire | w | autant que possible conduisant à un hyperplan qui essaie de classer chaque exemple de formation correctement. Cela entraînera une perte des propriétés de généralisation du classifieur. D'autre part, si votre C est trop petit, vous donnez à votre fonction objectif une certaine liberté pour augmenter | w | beaucoup, ce qui entraînera une erreur d’entraînement importante.

Les images ci-dessous peuvent vous aider à visualiser cela. Classificateur SVM linéaire avec C = 10000000Classificateur SVM linéaire avec C = 0.001


Je ne comprends pas vraiment vos intrigues. Pouvez-vous l'expliquer?
Alfa

1
@alfa: Mon intention de montrer les tracés était la suivante: 1) Si C est trop grand (tracé 1), votre classificateur sera trop ajusté, c'est-à-dire qu'il essaiera de classer chaque point de données d'entraînement avec précision. Le tracé 1 montre que presque tous les points d’entraînement ont été classés correctement. 2) Par contre, si C est trop petit (tracé 2), votre classificateur sera sous ajustement. La parcelle 2 montre le classifieur insuffisant. Il ne sépare pas les points dans leurs classes respectives. J'espère que cela t'aides.
Deerishi

Cela signifie que vos axes x et y présentent deux caractéristiques différentes. Les étiquettes "longueur du jeu de données" et "Somme des moyennes" sont un peu déroutantes?
alfa

Il serait intéressant de voir dans quelle mesure le bon choix pour C aide dans les deux cas.
alfa

2
Je pense qu'il n'est pas évident de voir que C = 10000000 est un mauvais choix et je pense que le jeu de données n'est pas le bon pour le démontrer. Peut-être serait-il préférable d’utiliser un jeu de données ne contenant que quelques valeurs aberrantes du mauvais côté de l’hyperplan séparateur?
alfa

4

Les réponses ci-dessus sont excellentes. Après avoir lu attentivement vos questions, j’ai constaté qu’il y avait deux faits importants que nous pourrions négliger.

  1. Vous utilisez un noyau linéaire
  2. Vos données d'entraînement sont séparables linéairement, car "Il n'y a pas d'erreur sur le kit d'apprentissage".

Étant donné les 2 faits, si les valeurs de C changent dans une plage raisonnable, l'hyperplan optimal se déplacera de manière aléatoire dans une faible mesure dans la marge (l'écart formé par les vecteurs de support).

Intuitivement, supposons que la marge sur les données d'apprentissage soit petite et / ou qu'il n'y ait pas de points de données de test dans la marge également, le décalage de l'hyperplan optimal dans la marge n'affectera pas l'erreur de classification de l'ensemble de test.

Néanmoins, si vous définissez C = 0, SVM ignorera les erreurs et tentera simplement de minimiser la somme des carrés des poids (w). Vous obtiendrez peut-être des résultats différents sur l'ensemble de tests.


2

Le paramètre C est utilisé pour contrôler les valeurs aberrantes - C bas signifie que nous autorisons plus de valeurs aberrantes, C élevé signifie que nous autorisons moins de valeurs aberrantes.


1

C élevé (coût) signifie que le coût de la classification erronée est augmenté. Cela signifie qu'un noyau flexible deviendra plus ondulé pour éviter les erreurs de classification des observations dans l'ensemble d'apprentissage.

Si le noyau doit être ondulé, le modèle ne se généralisera pas bien lors de la prévision sur de nouvelles données.

Si le noyau est rectiligne, le modèle ne se généralisera pas bien lors de la prévision sur de nouvelles données.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.