2012-04-12 12 views

risposta

19

Ecco come l'ho fatto here. Se ricordo bene, questo è basato su come funziona lo dual form dell'ottimizzazione SVM.

model = svmtrain(...); 
w = (model.sv_coef' * full(model.SVs)); 

E il bias è (e non mi ricordo il motivo per cui il suo negativo):

bias = -model.rho; 

Quindi per fare la classificazione (per uno SVM lineare), per un N-per-M set di dati 'caratteristiche' con le istanze e le caratteristiche N M,

predictions = sign(features * w' + bias); 

Se il kernel non è lineare, allora questo non vi darà la risposta giusta.

Per ulteriori informazioni, vedere How could I generate the primal variable w of linear SVM?, dal manuale di libsvm.

+0

E in che modo esattamente li uso per classificare manualmente? Sto parlando del caso a 2 classi. – Trup

+0

Ho modificato la mia domanda per spiegare, anche se non c'è davvero alcun senso nel farlo ... restituirà esattamente lo stesso risultato di 'probs' in' [guess, acc, probs] = svmpredict (...); '. – Richante

+0

No, non ha restituito lo stesso risultato, restituisce solo -1. So che non ha senso, ma mi piacerebbe essere sicuro che sia corretto, e quindi userò semplicemente i pesi in un'applicazione separata per classificare "manualmente" senza eseguire esplicitamente alcun materiale SVM. Grazie mille, questo è davvero un collo di bottiglia nel mio progetto. Puoi per favore ricontrollare questo e vedere dove si trova il bug? – Trup