2013-10-17 12 views
6

Ho un set di dati da classificare. Usando KNN algo ho una precisione del 90% ma, usando SVM, riesco a superare il 70%. SVM non è migliore di KNN. So che potrebbe essere stupido da chiedere, ma quali sono i parametri per SVM che daranno risultati quasi approssimativi come KNN. Sto usando il pacchetto libsvm su MATLAB R2008Supporto Vector Machine vs K Vicini vicini più vicini

+2

Questa domanda sembra essere fuori tema perché riguarda l'apprendimento automatico e sarebbe più adatta per http://stats.stackexchange.com/ – Shai

+0

quindi l'apprendimento automatico non fa parte della codifica? questa è una piattaforma aperta e chiunque è libero di porre qualsiasi domanda purché sia ​​collegato alla codifica e richiede alle persone di confrontarsi. Quindi se non lo trovi utile puoi stare lontano da questa discussione e lasciare che altri partecipino. –

+0

Non pretendo che non appartenga a questo sito, penso semplicemente che troverai un pubblico più informato e risposte migliori in un forum più dedicato come http://stats.stackexchange.com – Shai

risposta

8

kNN e SVM rappresentano approcci diversi all'apprendimento. Ogni approccio implica un modello diverso per i dati sottostanti.

SVM assume esiste un iper-plane separa i punti di dati (piuttosto assunzione restrittiva), mentre kNN tenta di approssimare la distribuzione sottostante dei dati in modo non parametrico (approssimazione grossolana di Parsen-finestra stimatore).

Dovrai esaminare le specifiche del tuo scenario per prendere una decisione migliore su quale algoritmo e configurazione utilizzare al meglio.

+2

"SVM presuppone che esista un iper-piano che separa i punti di dati (un'ipotesi piuttosto restrittiva)" In realtà non è affatto restrittivo, SVM con il kernel RBF può distribuire qualsiasi set di dati con qualsiasi combinazione di etichette. – Pedrom

+0

@Pedrom infatti il ​​kernel SVM è uno strumento molto potente – Shai

+1

@ValentinHeinitz non ti aspetti veramente di ottenere una spiegazione accurata in 10 righe? – Shai

6

Dipende molto dal set di dati che si sta utilizzando. Se hai qualcosa come la prima riga di questa immagine (http://scikit-learn.org/stable/_images/plot_classifier_comparison_1.png) kNN funzionerà davvero bene e SVM lineare molto male.

Se si desidera che SVM funzioni meglio, è possibile utilizzare un SVM basato su kernel come quello nell'immagine (utilizza un kernel rbf).

Se si utilizza scikit-learn per Python si può giocare un po 'con il codice qui per vedere come utilizzare il kernel SVM http://scikit-learn.org/stable/modules/svm.html

5

kNN in pratica dice "se siete vicini per coordinare x, quindi la classificazione sarà simile ai risultati osservati in x. " In SVM, un analogico vicino userebbe un kernel ad alta dimensionalità con un parametro "piccolo" di larghezza di banda, poiché ciò causerebbe un sovraccarico di SVM. Cioè, SVM sarà più vicino a "se sei vicino a coordinare x, la classificazione sarà simile a quella osservata in x".

Si consiglia di iniziare con un kernel gaussiano e controllare i risultati per diversi parametri. Dalla mia esperienza (che è, ovviamente, focalizzata su determinati tipi di set di dati, quindi il tuo chilometraggio può variare), SVM ottimizzato supera le prestazioni di kNN sintonizzato.

Domande per voi:

1) k Come si selezionano in kNN?

2) Quali parametri hai provato per SVM?

3) Misurate la precisione in-sample o out-of-sample?

Problemi correlati