2014-06-12 10 views
6

Das SVM-Modell wird mit dem Paket e1071 in R erstellt. Um das Modell zu verwenden, muss ich es speichern und nach Bedarf lesen. Das Paket hat write.svm, hat aber keine read.svm. Wenn ichWarum gibt load (...) den Charakternamen eines Objekts anstelle des Objekts selbst zurück?

model <- svm(x, y) 

save(model, 'modelfile.rdata') 
M <- load('modelfile.rdata') 

Objekt M enthält nur das Wort ‚Modell‘.

Wie speichert man das SVM-Modell und liest es später zurück, um es auf einige neue Daten anzuwenden?

Antwort

4

Blick auf dem Rückgabewert für die Funktion load in der Hilfedatei:

Wert:

A character vector of the names of objects created, invisibly. 

So "Modell" ist in der Tat der erwartete Wert von M. Ihr SVM wurde unter seinem ursprünglichen Namen wiederhergestellt, der model ist.

Wenn Sie es ein bisschen verwirrend, dass load nicht zurück auf das geladene Objekt finden, sondern stellt sie wieder her unter dem Namen in dem Speichern verwendet wird, betrachten saveRDS und readRDS verwenden.

saveRDS(model, 'modelfile.rds') 
M <- readRDS('modelfile.rds') 

und M sollte Ihr SVM-Modell enthalten.

Ich bevorzuge saveRDS und readRDS, denn mit ihnen weiß ich, welche Objekte ich in meinem Arbeitsbereich erstellen - siehe den Blogbeitrag von Gavin Simpson (in seiner Antwort verlinkt) für eine ausführliche Diskussion.

+0

Es funktioniert, außer die Funktion heißt nicht 'loadRDS', sondern 'readRDS'. Vielen Dank! – user3276530

+0

@ user3276530 Hoppla, jetzt behoben. Wenn Ihr Problem gelöst wurde, können Sie eine der Antworten akzeptieren, indem Sie auf das Häkchen daneben klicken. –

+0

Ich bekomme 'keine anwendbare Methode für 'vorhersagen' angewendet auf ein Objekt der Klasse" tune "' Fehler mit der folgenden Codezeile: 'svm.pred <- predict (get (" svm.model "), testData [ , -17]) ', schlagen Sie vor. –

3

Sie missverstehen, was load tut. Es stellt ein Objekt auf den gleichen Namen wieder her, den es hatte, als Sie es save() d it. Was Sie in M sehen, ist der Rückgabewert der load() Funktion. Der Aufruf von load() hat den zusätzlichen Nebeneffekt, das Objekt unter dem gleichen Namen zurück zu laden, mit dem es gespeichert wurde.

Bedenken Sie:

require("e1071") 
data(iris) 

## classification mode 
# default with factor response: 
model <- svm (Species~., data=iris) 
## Save it 
save(model, file = "my-svm.RData") 
## delete model 
rm(model) 
## load the model 
M <- load("my-svm.RData") 

Nun ein Blick auf den Arbeitsbereich

> ls() 
[1] "iris" "M"  "model" 

Daher model als Nebenwirkung von load() wiederhergestellt wurde.

Von ?load sehen wir den Grund M den Namen der Objekte enthält erstellt (und ursprünglich damit gespeichert)

Value: 

    A character vector of the names of objects created, invisibly. 

Wenn Sie ein Objekt in einen neuen Namen wiederherstellen möchten, verwenden Sie saveRDS() und readRDS():

saveRDS(model, "svm-model.rds") 
newModel <- readRDS("svm-model.rds") 
ls() 

> ls() 
[1] "iris"  "M"  "model" "newModel" 

Wenn Sie mehr über saveRDS() und readRDS() wissen, finden Sie in der entsprechenden Hilfe ?saveRDS() und Sie könnten in einem 01 interessiert sein.

+0

Vielen Dank! Es hilft. – user3276530

Verwandte Themen