2016-05-02 1 views
1

J'essaie d'intégrer un modèle de régression SVM à l'aide de Scikit Learn Package mais cela ne fonctionne pas comme prévu.Problème avec le package Scikit Learn pour la régression SVR

Pourriez-vous m'aider s'il vous plaît à trouver l'erreur? Le code que je voudrais utiliser est:

from sklearn.svm import SVR 
import numpy as np 


X = [] 
x = np.arange(0, 20) 
y = [3, 4, 8, 4, 6, 9, 8, 12, 15, 26, 35, 40, 45, 54, 49, 59, 60, 62, 63, 68] 
X.append(x) 

clf = SVR(verbose=1) 
clf.fit(np.transpose(X), y) 

print("Expecting Result:") 
print(y) 
print("Predicted Result:") 
print(clf.predict(np.transpose(X))) 

La sortie que j'ai est:

[LibSVM]* 
optimization finished, #iter = 10 
obj = -421.488272, rho = -30.500000 
nSV = 20, nBSV = 20 
Expecting Result: 
[3, 4, 8, 4, 6, 9, 8, 12, 15, 26, 35, 40, 45, 54, 49, 59, 60, 62, 63, 68] 
Predicted Result: 
[ 29.1136814 28.74580196 28.72748632 28.72736291 28.7273628 
    28.7273628 28.72736302 28.72760984 28.76424112 29.5   31.5 
    32.23575888 32.27239016 32.27263698 32.2726372 32.2726372 
    32.27263709 32.27251368 32.25419804 31.8863186 ] 

Nous pouvons voir que les résultats prévus sont très loin des données de formation. Comment puis-je améliorer le raccord?

Merci

David

Répondre

2

Ceci est un cas limite où RBF noyaux (par défaut pour le SVM scikit-learn) ne fonctionnent pas très bien.

Modifier la ligne SVR à ceci: clf = SVR(verbose=1, kernel='linear') et vous verrez des résultats beaucoup plus raisonnables.

[LibSVM]Expecting Result: [3, 4, 8, 4, 6, 9, 8, 12, 15, 26, 35, 40, 45, 54, 49, 59, 60, 62, 63, 68] Predicted Result: [ -6.9 -2.9 1.1 5.1 9.1 13.1 17.1 21.1 25.1 29.1 33.1 37.1 41.1 45.1 49.1 53.1 57.1 61.1 65.1 69.1]

Je comprends que vous essayez juste d'avoir une idée de la façon dont le travail de SVM. Jetez un oeil à this blog pour savoir comment fonctionnent les noyaux RBF.

+0

Merci pour votre aide. J'ai testé et ça marche. Je serai plus vigilant sur le choix du noyau. –