2015-10-23 1 views
-1

J'essaye d'entraîner un SVM linéaire sur une donnée qui a 100 dimensions. J'ai 80 exemples de formation. Je forme le SVM en utilisant la fonction fitcsvm dans MATLAB et je vérifie la fonction en utilisant predict sur les données d'entraînement. Lorsque je classe les données d'entraînement avec le SVM, tous les points de données sont classés en une seule classe.Matlab prédire la fonction ne fonctionne pas

SVM = fitcsvm(votes,b,'ClassNames',unique(b)'); 
predict(SVM,votes); 

Ceci donne les sorties comme tous les 0 qui correspondent à la 0e classe. b contient 1 et 0 indiquant la classe à laquelle appartient chaque point de données. Les données utilisées, à savoir la matrice votes et vecteur b sont donnés la link

+0

Bien sûr, vous ne pouvez pas former un SVM en utilisant 100 classes avec seulement 80 points d'entraînement. – Adriaan

+0

@Adriaan Thanx petites choses juste échapper aux attentions – Aditya

+0

@Adriaan ressemble à b ne contient que deux classes, 80 est la taille de l'ensemble d'apprentissage et 100 est la caractéristique dim. – gregswiss

Répondre

2

suivante Assurez-vous que vous utilisez un noyau non linéaire, comme un noyau gaussienne et que les paramètres du noyau sont peaufinés. Tout comme un point de départ:

SVM = fitcsvm(votes,b,'KernelFunction','RBF', 'KernelScale','auto'); 
bp = predict(SVM,votes); 

qui dit que vous devez diviser votre jeu dans un jeu de formation et un ensemble de tests, sinon vous risquez overfitting

+1

+1, La solution à [mon problème] (http://stackoverflow.com/questions/39267100/svm-prediction-does-not-predict-ok-though-the-support-vectors-are-valid). – dariush