2010-08-05 26 views
1

L'implémentation d'opencv SVM prend un paramètre appelé "type SVM" qui doit être utilisé dans la structure CVSVMParams utilisée pour l'apprentissage du SVM. Tout l'explication que je peux trouver est:Qu'est-ce que le paramètre de type OpenCV svm?

// SVM type
enum { C_SVC=100, NU_SVC=101, ONE_CLASS=102, EPS_SVR=103, NU_SVR=104 };

Quelqu'un sait ce que ces différentes valeurs représentent?

Répondre

6

En général:

  • Classification SVM type 1 (également connu sous le nom de classification C-SVM)
  • Classification SVM type 2 (également connu sous le classement nu-SVM)
  • régression SVM type 1 (également connu sous le nom de régression epsilon-SVM)
  • régression SVM type 2 (également connu sous le nom de régression nu-SVM)

Détails peut être trouvé à la page SVM

+1

Qu'en est-il d'une classe? – petersaints

9

Ce sont des formulations différentes de SVM. Au cœur de SVM se trouve un problème d'optimisation mathématique. Ce problème peut être énoncé de différentes manières.

C-SVM utilise C comme paramètre de compromis entre la taille de la marge et le nombre de points d'apprentissage mal classés. C est juste un nombre, la plage utile dépend de l'ensemble de données et peut aller de très petit (comme 10-5) à très grand (comme 10^5), selon vos données. Nu-SVM utilise nu au lieu de C. nu est approximativement un pourcentage de points d'entraînement qui finiront comme vecteurs de support. Plus les vecteurs de support sont nombreux, plus votre marge est grande, plus les points d'entraînement seront mal classés. nu varie de 0,1 à 0,8 - à 0,1 environ 10% des points d'entraînement seront vecteurs de soutien, à 0,8, plus de 80%. Je dis à peu près parce que c'est juste corrélé de cette façon - ce n'est pas exact.

epsilon-SVR et nu-SVR utilisent SVM pour la régression. Au lieu de faire une classification binaire en trouvant un hyperplan de marge maximale, le concept est plutôt utilisé pour trouver un hypertube qui correspond le mieux aux données afin de l'utiliser pour prédire les futurs modèles. Ils diffèrent dans la façon dont ils sont paramétrés (comme nu-SVM et C-SVM diffèrent).

SVM à une classe est la détection de nouveauté. Plutôt que de classer binaire, ou de prédire une valeur, vous donnez au SVM un ensemble d'apprentissage et tentez de former un modèle pour envelopper cet ensemble afin qu'une instance future puisse être classée dans la classe ou en dehors de la classe (roman ou aberrantes).