2014-06-12 8 views
6

Il modello svm viene creato con il pacchetto e1071 in R. Per utilizzare il modello, è necessario salvarlo e leggere come necessario. Il pacchetto ha write.svm, ma non ha read.svm. Se usoPerché load (...) restituisce il nome del carattere dell'oggetto invece dell'oggetto stesso?

model <- svm(x, y) 

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

oggetto M contiene solo la parola 'modello'.

Come salvare il modello svm e rileggere in seguito, per applicare ad alcuni nuovi dati?

risposta

4

Osservare il valore di ritorno per la funzione load nel file di aiuto:

Valore:

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

Così "modello" è davvero il valore atteso di M. Il tuo svm è stato ripristinato con il suo nome originale, che è model.

Se lo trovate un po 'di confusione che load non restituisce l'oggetto caricato, ma invece lo ripristina con il nome utilizzato in salvarlo, considerare l'utilizzo di saveRDS e readRDS.

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

e M devono contenere il modello svm.

Io preferisco saveRDS e readRDS perché con loro so quali oggetti sto creando nel mio spazio di lavoro - vedi il post sul blog di Gavin Simpson (collegato nella sua risposta) per una discussione dettagliata.

+0

Funziona, tranne che la funzione è chiamata non "loadRDS", ma "readRDS". Grazie! – user3276530

+0

@ user3276530 Oops, riparato ora. Se il problema è stato risolto, considera di accettare una risposta facendo clic sul segno di spunta accanto ad essa. –

+0

Ricevo 'nessun metodo applicabile per 'prevedere' applicato a un oggetto di classe" tune "' errore con la seguente riga di codice: 'svm.pred <- predicice (get (" svm.model "), testData [ , -17]), suggeriscono i pls. –

3

Hai frainteso cosa fa load. Ripristina un oggetto con lo stesso nome che aveva quando si save() d it. Quello che stai vedendo in M è il valore restituito della funzione load(). Chiamare load() ha l'ulteriore effetto collaterale di caricare l'oggetto con lo stesso nome con cui è stato salvato.

considerare:

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") 

Ora guardate l'area di lavoro

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

Quindi model è stata restaurata come un effetto collaterale di load().

Da ?load vediamo la ragione M contiene il nome degli oggetti creati (e quindi salvato in origine)

Value: 

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

Se si desidera ripristinare un oggetto con un nuovo nome, utilizzare saveRDS() e readRDS():

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

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

Se vuoi sapere di più su saveRDS() e readRDS() vedere la Guida relativa ?saveRDS() e si potrebbe essere interessati a un blog post I wrote on this topic.

+0

Grazie mille! Aiuta. – user3276530