2016-03-31 12 views
0

Hier ist mein Beispielcode für SVM-Klassifizierung.So zeichnen Sie SVM-Klassifizierung Hyperebene

train <- read.csv("traindata.csv") 
    test <- read.csv("testdata.csv") 

    svm.fit=svm(as.factor(value)~ ., data=train, kernel="linear", method="class") 

    svm.pred = predict(svm.fit,test,type="class") 

Die Funktion Wert in meinem Beispiel ist ein Faktor, der zwei Ebenen (entweder wahr oder falsch) gibt. Ich wollte eine Grafik meines SVM-Klassifikators plotten und sie in zwei Gruppen gruppieren. Eine Gruppe diejenigen mit einer "wahren" und eine andere Gruppe als falsch. Wie produzieren wir ein 3D oder 2D SVM-Diagramm? Ich habe versucht mit plot(svm.fit, train), aber es scheint nicht für mich zu arbeiten. Es gibt diese Antwort, die ich auf SO fand, aber ich bin nicht klar, mit was t, x, y, z, w und cl in der Antwort sind.

Plotting data from an svm fit - hyperplane

ich habe etwa 50 Funktionen in meinem Dataset, die die letzte Spalte ist ein Faktor. Jede einfache Art, es zu tun oder wenn jemand mir helfen könnte, seine Antwort zu erklären.

Antwort

1

Die kurze Antwort ist: Sie können nicht. Ihre Daten sind 50-dimensional. Sie können nicht 50 Dimensionen plotten. Das einzige, was Sie tun können, sind einige grobe Näherungen, Reduktionen und Projektionen, aber keines davon kann tatsächlich darstellen, was im Inneren passiert. Um eine 2D/3D-Entscheidungsgrenze zu zeichnen, müssen Ihre Daten 2D/3D sein (2 oder 3 Merkmale, was genau in dem bereitgestellten Link passiert - sie haben nur 3 Merkmale, so dass sie alle grafisch darstellen können). Mit 50 Funktionen bleibt Ihnen eine statistische Analyse, keine eigentliche visuelle Inspektion.

Sie können natürlich einige Scheiben betrachten (wählen Sie 3 Merkmale oder Hauptkomponenten von PCA-Projektionen). Wenn Sie mit der zugrundeliegenden linearen Algebra nicht vertraut sind, können Sie einfach gmum.r package verwenden, was dies für Sie tut. Trainiere einfach svm und zeichne es auf, um "pca" zu visualisieren, wie hier: http://r.gmum.net/samples/svm.basic.html.

library(gmum.r) 

# We will perform basic classification on breast cancer dataset 
# using LIBSVM with linear kernel 
data(svm_breast_cancer_dataset) 

# We can pass either formula or explicitly X and Y 
svm <- SVM(X1 ~ ., svm.breastcancer.dataset, core="libsvm", kernel="linear", C=10) 
## optimization finished, #iter = 8980 
pred <- predict(svm, svm.breastcancer.dataset[,-1]) 

plot(svm, mode="pca") 

die

SVM visualization

für weitere Beispiele gibt können Sie verweisen Website http://r.gmum.net/

aber das zeigt nur Punkte projetions und ihre Einstufung projizieren - Sie nicht die Hyperebene sehen kann, weil sie ist ein hochdimensionales Objekt (in Ihrem Fall 49 dimensional) und in einer solchen Projektion wäre diese Hyperebene ... der ganze Bildschirm. Genau genommen würde kein Pixel "draußen" gelassen werden (bedenke es in diesem Sinne - wenn du 3D Raum und Hyperplane innen hast, wird dies eine 2D Ebene sein. Wenn du nun versuchst, es in 1D zu plotten, wirst du mit der ganzen Linie enden "gefüllt" mit Ihrer Hyperebene, denn egal, wo Sie eine Linie in 3D platzieren, die Projektion der 2D - Ebene auf dieser Linie füllt es! Die einzige andere Möglichkeit ist, dass die Linie senkrecht ist und dann Projektion ist ein einzelner Punkt; Das gleiche gilt hier - wenn Sie versuchen, 49-dimensionale Hyperebene auf 3D zu projizieren, wird am Ende der gesamte Bildschirm "schwarz" angezeigt.

+0

kann ich "train" anstelle von "svm_breast_cancer_dataset" nicht verwenden? – Mahsolid

+1

Genau. Sie werden nicht in der Lage sein, die Entscheidungsgrenze ** in einem realen Daten-Datensatz ** darzustellen. Dies ist nur für Spielzeugdatensätze möglich, die bis zu 3 Funktionen haben. Für echte Daten - Sie können immer noch etwas visualisieren (wie in der Antwort beschrieben) - aber nicht die eigentliche Hyperebene – lejlot

+0

Gehen Sie durch die Grundlagen des Aufrufs von SVM auf Ihre Daten, alles ist in dem angegebenen Link beschrieben. – lejlot

Verwandte Themen