2016-04-19 11 views
0

Ich möchte mit SVM Klassifizierung arbeiten. Wie ist es möglich, die Features pro Spalte in meinem Dataset zu normalisieren (oder zu skalieren), bevor ich das Modell SVM verwende?SVM-Klassifizierung - Normalisierung in R

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

svm.fit=svm(as.factor(type)~ ., data=train, core="libsvm",kernel="linear",cross=10, probability=TRUE) 
+0

Haben Sie einige Beispieldaten haben Sie zur Verfügung stellen können? Nicht sicher, welche Art von Daten Sie haben (z. B. diskret, kontinuierlich) – Whitebeard

Antwort

1

können Sie die scale Funktion in einem sapply verwenden:

Wenn Ihre Datenvariablen mit NaN Werten oder mit 0 Varianz enthalten, können Sie ersten Prozess könnte und die ursprünglichen Daten-Sets Teilmenge vor der Funktion über.

# get a vector of variables to drop 
dropVars <- sapply(train, function(i) { 
       if((is.numeric(i) & !any(is.nan(i)) & sd(i) > 0) | is.factor(i) | is.character(i)) TRUE 
       else FALSE 
       } 
# subset test dropping columns that don't fit the criteria 
smallerdf <- test[, dropVars] 

gelten dann die ursprüngliche sapply Funktion oben auf smallerdf

+0

Es gibt mir diesen Fehler. 'Fehler in model.frame.default (Formel, Daten): Variable Längen unterscheiden sich (gefunden für 'Lice_id')' Ich habe es mit 'na.action = na.omit' versucht, aber das scheint auch nicht zu helfen. – Mahsolid

+1

@Mahsolid Ich bin mir nicht sicher, was das Problem ist, aber es klingt wie eine der Variablen fehlende Werte hat. Sie können eine bessere Antwort finden, indem Sie diese Fehlermeldung in einer Suchmaschine und SO zusammen mit der Funktion ausführen, die Sie verwenden. Sie können sich auch Ihre Variablen ansehen, um zu sehen, ob Sie fehlende Werte finden. Wenn keine der beiden Antworten eine Antwort liefert, kann es sich lohnen, eine neue Frage zu SO zu stellen, damit diejenigen, die diese Funktion häufiger nutzen, einen Blick darauf werfen können. – lmo