2010-12-27 5 views
7

J'ai une question à propos de la méthode svm_predict() dans libsvm.libsvm prédit la confusion de méthode

Le README a ce code exemple QuickStart:

>>> y, x = [1,-1], [{1:1, 3:1}, {1:-1,3:-1}] 
>>> prob = svm_problem(y, x) 
>>> param = svm_parameter('-c 4 -b 1') 
>>> m = svm_train(prob, param) 

>>> p_label, p_acc, p_val = svm_predict(y, x, m) 

Je comprends maintenant que y est une liste de catégories qui sont associées aux dictionnaires dans x. Je comprends également la partie svm_train.

La partie qui n'a pas de sens est que svm_predict, je suis tenu de fournir les « valeurs vraies » de y, ainsi que les données de test dans x. Je pensais que l'idée était que je ne connaissais pas les classifications des données d'essai à l'avance.

si mes données de formation est:

y = [1, 2, 3] 
x = [{1:1}, {1:10}, {1:20}] 

mais mes données de test:

z = [{1:4}, {1:12}, {1:19}] 

Alors, pourquoi dois-je passer en vraies valeurs de z dans svm_predict() comme:

a, b, c = svm_predict(y, z, m) 

Je ne vais pas connaître les vraies valeurs pour z - c'est ce que la prédiction est pour. Dois-je simplement mettre des valeurs de classification arbitraires pour y quand j'effectue une prédiction, ou est-ce que je manque complètement quelque chose?

Merci à tous

Répondre

5

Il utilise les vraies étiquettes pour vous donner des statistiques de précision dans le cas où vous faites un test hors échantillon.

Si vous utilisez ce « en ligne », à savoir que vous n'avez pas réellement les vraies étiquettes, puis il suffit de mettre [0]*len(z) au lieu de y

+0

est logique, merci. – apexdodge