2013-10-17 13 views
6

Ich habe einen Datensatz zu klassifizieren. Mit KNN Algo bekomme ich eine Genauigkeit von 90%, aber während mit SVM ich nur in der Lage, über 70% zu bekommen. Ist SVM nicht besser als KNN? Ich weiß, dass das dumm sein könnte zu fragen, aber was sind die Parameter für SVM, die annähernd ungefähre Ergebnisse als KNN algo liefern werden. Ich verwende libsvm Paket auf Matlab R2008Support Vector Machine vs K Nächste Nachbarn

+2

Diese Frage scheint off-topic zu sein, denn es geht um maschinelles Lernen und wäre besser geeignet für http://stats.stackexchange.com/ – Shai

+0

, also ist maschinelles Lernen kein Teil der Programmierung? Dies ist eine offene Plattform und jeder kann Fragen stellen, solange es mit dem Programmieren zu tun hat und Leute zum Brainstorming braucht. Wenn Sie es also nicht nützlich finden, können Sie sich von dieser Diskussion fernhalten und andere daran teilnehmen lassen. –

+0

Ich behaupte nicht, dass es nicht hierher gehört, ich denke einfach, dass Sie mehr informierte Publikum und bessere Antworten in einem spezielleren Forum wie http://stats.stackexchange.com finden. – Shai

Antwort

8

kNN und SVM repräsentieren verschiedene Ansätze zum Lernen. Jeder Ansatz beinhaltet ein anderes Modell für die zugrunde liegenden Daten.

SVM geht davon aus, dass es eine Hyperebene gibt, die die Datenpunkte trennt (ziemlich restriktive Annahme), während kNN versucht, die zugrunde liegende Verteilung der Daten in einer nichtparametrischen Weise anzunähern (grobe Näherung des Parsenfensterschätzers).

Sie müssen sich die Besonderheiten Ihres Szenarios ansehen, um eine bessere Entscheidung zu treffen, welcher Algorithmus und welche Konfiguration am besten verwendet werden.

+2

"SVM nimmt an, dass es eine Hyper-Ebene gibt, die die Datenpunkte trennt (ziemlich restriktive Annahme)" Es ist überhaupt nicht restriktiv, SVM mit RBF-Kernel kann jeden Datensatz mit einer beliebigen Kombination von Labels streuen. – Pedrom

+0

@Pedom tatsächlich Kernel SVM sind ein sehr mächtiges Werkzeug – Shai

+1

@ValentinHeinitz Sie nicht wirklich erwarten, eine genaue Erklärung in 10 Zeilen zu erhalten? – Shai

6

Es hängt wirklich von dem Datensatz ab, den Sie verwenden. Wenn Sie etwas wie die erste Zeile dieses Bildes (http://scikit-learn.org/stable/_images/plot_classifier_comparison_1.png) haben, wird kNN wirklich gut und Linear SVM wirklich schlecht funktionieren.

Wenn Sie möchten, dass SVM besser funktioniert, können Sie eine kernelbasierte SVM wie die im Bild verwenden (sie verwendet einen rbf-Kernel).

Wenn Sie Scikit-Learn für Python verwenden Sie hier ein wenig mit Code spielen können, um zu sehen, wie der Kernel SVM verwenden http://scikit-learn.org/stable/modules/svm.html

5

kNN im Grunde sagt, „wenn Sie schließen x koordinieren, dann die Klassifizierung wird den beobachteten Ergebnissen bei x ähnlich sein. " In SVM würde ein nahes Analogon einen hochdimensionalen Kernel mit einem "kleinen" Bandbreitenparameter verwenden, da SVM dadurch mehr übersteuert. Das heißt, SVM wird näher an "wenn Sie nahe an x ​​zu koordinieren, dann wird die Klassifizierung ähnlich zu denen bei x beobachtet werden."

Ich empfehle, dass Sie mit einem Gaußschen Kernel beginnen und überprüfen Sie die Ergebnisse für verschiedene Parameter. Aus meiner eigenen Erfahrung (die sich natürlich auf bestimmte Arten von Datensätzen konzentriert, so dass Ihre Laufleistung variieren kann), übertrifft die eingestellte SVM die eingestellte kNN.

Fragen für Sie:

1) Wie werden die Auswahl Sie k in kNN?

2) Welche Parameter haben Sie für SVM probiert?

3) Messen Sie die Genauigkeit in der Probe oder außerhalb der Probe?

Verwandte Themen