Quelle est la relation entre le nombre de vecteurs de support et les performances des données de formation et des classificateurs?

J’utilise LibSVM pour classer certains documents. Les documents semblent un peu difficiles à classer comme le montrent les résultats finaux. Cependant, j’ai remarqué quelque chose lors de l’entraînement de mes modèles. et c’est-à-dire que si mon ensemble d’entraînement est par exemple 1000, environ 800 d’entre eux sont sélectionnés comme vecteurs de support. J’ai cherché partout pour trouver si c’est une bonne ou une mauvaise chose. Je veux dire, y a-t-il une relation entre le nombre de vecteurs de support et les performances des classificateurs? J’ai lu ce post post précédent . Cependant, j’effectue une sélection de parameters et je suis sûr que les atsortingbuts des vecteurs de fonctionnalités sont tous ordonnés. J’ai juste besoin de connaître la relation. Merci. ps: j’utilise un kernel linéaire.

Les machines à vecteurs de support sont un problème d’optimisation. Ils tentent de trouver un hyperplan qui divise les deux classes avec la plus grande marge. Les vecteurs de support sont les points qui tombent dans cette marge. Il est plus facile de comprendre si vous le construisez de simple à plus complexe.

Marge linéaire SVM linéaire

Dans un ensemble d’entraînement où les données sont linéairement séparables et où vous utilisez une marge dure (pas de jeu permis), les vecteurs de support sont les points situés le long des hyperplans de support (les hyperplans parallèles à l’hyperplan marge)

SVM à marge dure

Tous les vecteurs de support se trouvent exactement sur la marge. Indépendamment du nombre de dimensions ou de la taille de l’dataset, le nombre de vecteurs de support pourrait être aussi bas que 2.

SVM linéaire à marge molle

Mais que faire si notre dataset n’est pas linéairement séparable? Nous introduisons la SVM à marge douce. Nous n’exigeons plus que nos points de données soient en dehors de la marge, nous autorisons certains d’entre eux à passer par-dessus la ligne dans la marge. Nous utilisons le paramètre slack C pour contrôler cela. (nu in nu-SVM) Cela nous donne une marge plus large et une plus grande erreur sur le jeu de données d’apprentissage, mais améliore la généralisation et / ou nous permet de trouver une séparation linéaire des données qui ne sont pas linéairement séparables.

SVM linéaire à marge douce

Maintenant, le nombre de vecteurs de support dépend de la quantité de temps disponible et de la dissortingbution des données. Si nous permettons une grande quantité de mou, nous aurons un grand nombre de vecteurs de support. Si on laisse très peu de marge, nous aurons très peu de vecteurs de support. La précision dépend de la détermination du bon niveau de mou pour les données analysées. Certaines données ne permettront pas d’obtenir un haut niveau de précision, nous devons simplement trouver le meilleur ajustement possible.

SVM non linéaire

Cela nous amène à SVM non linéaire. Nous essayons toujours de diviser linéairement les données, mais nous essayons maintenant de le faire dans un espace de plus grande dimension. Cela se fait via une fonction du kernel, qui a bien sûr son propre ensemble de parameters. Lorsque nous traduisons cela dans l’espace des entités d’origine, le résultat est non linéaire:

entrer la description de l'image ici

Maintenant, le nombre de vecteurs de support dépend toujours de la quantité de temps disponible, mais cela dépend aussi de la complexité de notre modèle. Chaque tour dans le modèle final dans notre espace de saisie nécessite un ou plusieurs vecteurs de support à définir. En fin de compte, la sortie d’un SVM est constituée des vecteurs de support et d’un alpha, ce qui définit essentiellement l’influence de ce vecteur de support spécifique sur la décision finale.

Ici, la précision dépend du compromis entre un modèle de grande complexité qui peut surpasser les données et une grande marge qui classera incorrectement certaines des données d’apprentissage dans l’intérêt d’une meilleure généralisation. Le nombre de vecteurs de support peut aller de très peu à chaque sharepoint données si vous adaptez complètement vos données. Ce compromis est contrôlé via C et via le choix des parameters du kernel et du kernel.

Je suppose que lorsque vous avez dit performance, vous faisiez référence à la précision, mais je pensais aussi parler de performance en termes de complexité de calcul. Afin de tester un sharepoint données à l’aide d’un modèle SVM, vous devez calculer le produit scalaire de chaque vecteur de support avec le sharepoint test. Par conséquent, la complexité de calcul du modèle est linéaire dans le nombre de vecteurs de support. Moins de vecteurs de support signifie une classification plus rapide des points de test.

Une bonne ressource: un tutoriel sur les machines à vecteurs de support pour la reconnaissance de formes

800 sur 1000 vous indique essentiellement que le SVM doit utiliser presque chaque échantillon de formation pour encoder l’ensemble de formation. Cela vous dit fondamentalement qu’il n’y a pas beaucoup de régularité dans vos données.

On dirait que vous avez des problèmes majeurs avec des données de formation insuffisantes. Pensez également à certaines fonctionnalités spécifiques qui séparent mieux ces données.

Le nombre d’échantillons et le nombre d’atsortingbuts peuvent influencer le nombre de vecteurs de support, ce qui rend le modèle plus complexe. Je pense que vous utilisez des mots ou même des ngrams comme atsortingbuts, il y en a donc beaucoup, et les modèles de langage naturel sont eux-mêmes très complexes. Donc, 800 vecteurs de support de 1000 échantillons semblent bien fonctionner. (Faites également attention aux commentaires de @karenu concernant les parameters C / nu qui ont également un effet important sur le nombre de SV).

Pour avoir une intuition à propos de ce rappel, rappelez l’idée principale. SVM fonctionne dans un espace multi-dimensionnel et tente de trouver un hyperplan qui sépare tous les échantillons donnés. Si vous avez beaucoup d’échantillons et seulement 2 entités (2 dimensions), les données et l’hyperplan peuvent ressembler à ceci:

entrer la description de l'image ici

Ici, il n’y a que 3 vecteurs de support, tous les autres sont derrière eux et ne jouent donc aucun rôle. Notez que ces vecteurs de support ne sont définis que par 2 coordonnées.

Imaginez maintenant que vous ayez un espace à 3 dimensions et que les vecteurs de support sont définis par 3 coordonnées.

entrer la description de l'image ici

Cela signifie qu’un paramètre supplémentaire (coordonnées) doit être ajusté et que cet ajustement peut nécessiter plus d’échantillons pour trouver l’hyperplan optimal. En d’autres termes, dans le pire des cas, SVM ne trouve qu’une coordonnée d’hyperplan par échantillon.

Lorsque les données sont bien structurées (c.-à-d. Qu’elles contiennent assez de modèles), seuls plusieurs vecteurs de support peuvent être nécessaires. Tous les autres restront en arrière. Mais le texte est très, très mal structuré. SVM fait de son mieux, essayant d’ajuster l’échantillon aussi bien que possible, et prend donc comme vecteurs de support encore plus d’échantillons que de gouttes. Avec le nombre croissant d’échantillons, cette “anomalie” est réduite (plus d’échantillons non significatifs apparaissent), mais le nombre absolu de vecteurs de support rest très élevé.

La classification SVM est linéaire dans le nombre de vecteurs de support (SV). Le nombre de SV est, dans le pire des cas, égal au nombre d’échantillons d’entraînement, donc le 800/1000 n’est pas encore le pire des cas, mais il est encore très mauvais.

Là encore, 1000 documents de formation constituent un petit ensemble de formation. Vous devriez vérifier ce qui se passe lorsque vous mettez à niveau jusqu’à 10 000 documents ou plus. Si les choses ne s’améliorent pas, envisagez d’utiliser des SVM linéaires, formés avec LibLinear , pour la classification des documents. ceux-ci évoluent beaucoup mieux (la taille du modèle et le temps de classification sont linéaires dans le nombre d’entités et indépendamment du nombre d’échantillons d’apprentissage).

Il y a une certaine confusion entre les sources. Dans le manuel ISLR 6th Ed, par exemple, C est décrit comme un «budget de violation des limites», d’où il résulte que des C plus élevés permettront plus de violations des limites et davantage de vecteurs de support. Mais dans les implémentations de svm dans R et python, le paramètre C est implémenté comme “violation de violation”, ce qui est le contraire et vous observerez que pour les valeurs plus élevées de C, il y a moins de vecteurs de support.