2010-12-27 15 views
7

Ho una domanda sul metodo svm_predict() in libsvm.libsvm prevedere metodo confusione

Il README ha questo codice di esempio 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) 

Ora capisco che y è un elenco di categorie che sono associati con i dizionari in x. Capisco anche la parte svm_train.

La parte che non ha senso è che in svm_predict, sono tenuto a fornire i 'valori effettivi' da y, insieme con i dati di test in x. Pensavo che l'idea fosse che non conosco le classificazioni dei dati dei test prima del tempo.

se il mio dati formazione è:

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

, ma i dati di prova è:

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

Allora perché sto tenuti a passare in veri valori di z in svm_predict() come:

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

io non ho intenzione di conoscere i veri valori per z - questo è ciò che la previsione è per. Devo semplicemente inserire valori di classificazione arbitrari per y quando eseguo una previsione, o mi manca completamente qualcosa?

Grazie a tutti

risposta

5

Esso utilizza i veri etichette per darvi le statistiche di precisione nel caso in cui si sta facendo un test di out-of-sample.

Se si esegue lo "online", vale a dire che in realtà non si hanno le vere etichette, quindi basta mettere [0]*len(z) invece di y

+0

senso, grazie. – apexdodge