Come trovare ciò che è il vettore w, cioè la perpendicolare al piano di separazione?Libsvm di Matlab - come trovare i coefficienti w
risposta
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.
E in che modo esattamente li uso per classificare manualmente? Sto parlando del caso a 2 classi. – Trup
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
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
e per favore dare una soluzione, come trovare il vettore w in JAVA? –