2009-07-17 8 views
11

Ho uno SVM in R e vorrei ora tracciare lo spazio di classificazione per questa macchina. Ho trovato alcuni esempi su Internet, ma non riesco a dare un senso a loro.Come faccio a tracciare un grafico classificazione di uno SVM in R

Il mio script R è il seguente:

library(e1071) 
day_of_week <- c(0,1,2,3,4,5,6) 
holiday <- factor(c(T, F, F, F, F, F, T)) 
model <- svm(day_of_week, holiday) 
plot(model, day_of_week, holiday) 

non riesco a ottenere il comando complotto per lavorare. Vorrei un grafico simile a questo http://bm2.genes.nig.ac.jp/RGM2/R_current/library/e1071/man/images/plot.svm_001.png

risposta

18

Prima di tutto, la funzione plot.svm presuppone che i dati varino su due dimensioni. I dati che hai utilizzato nel tuo esempio è solo unidimensionale e così il confine decisione avrebbe dovuto essere tracciato su una linea, che non è supportata. In secondo luogo, la funzione sembra avere bisogno di un frame di dati come input e si sta lavorando con i vettori.

Questo dovrebbe funzionare ...

library(e1071) 

day = c(0,1,2,3,4,5,6) 
weather = c(1,0,0,0,0,0,0) 
happy = factor(c(T,F,F,F,F,F,F)) 

d = data.frame(day=day, weather=weather, happy=happy) 
model = svm(happy ~ day + weather, data = d) 
plot(model, d) 
+0

Grazie, a quanto pare ho bisogno di avere familiarità con il ~ all'operatore che si riferisce alla formula. Avevo pensato che dato un oggetto svm sarebbe stato in grado di renderizzare gli spazi di classificazione senza ulteriori direzioni. –

+0

Qualcuno potrebbe dirmi quale pacchetto devo installare per usare svm in R? – sunqiang

+1

Il pacchetto è E1071. Ho aggiunto il comando per caricare il pacchetto nel codice sopra – Stompchicken

13

In alternativa, è possibile utilizzare il pacchetto kernlab:

library(kernlab) 

model.ksvm = ksvm(happy ~ day + weather, data = d, type="C-svc") 
plot(model.ksvm, data=d)