使用R中的包 e1071 创建svm模型。要使用该模型,我需要保存并根据需要进行读取。该软件包有write.svm
,但没有read.svm
。如果我使用
model <- svm(x, y)
save(model, 'modelfile.rdata')
M <- load('modelfile.rdata')
对象M
只包含单词&#39; model&#39;。
如何保存svm模型并稍后回读,以应用于某些新数据?
答案 0 :(得分:6)
查看帮助文件中函数load
的返回值:
值:
A character vector of the names of objects created, invisibly.
所以&#34;模特&#34;确实是M
的期望值。您的svm已恢复为原始名称,即model
。
如果您发现load
没有返回加载的对象,而是使用保存时使用的名称恢复它,有点令人困惑,请考虑使用saveRDS
和readRDS
。
saveRDS(model, 'modelfile.rds')
M <- readRDS('modelfile.rds')
和M
应包含您的svm模型。
我更喜欢saveRDS
和readRDS
因为我知道我在工作区中创建了哪些对象 - 请参阅Gavin Simpson的博客文章(在他的回答中链接)进行详细讨论
答案 1 :(得分:3)
你误解了load
的作用。它会将对象恢复为save()
时的对象名称。您在M
中看到的是load()
函数的返回值。调用load()
会产生额外的副作用,即以与保存对象相同的名称加载对象。
考虑:
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")
现在看看工作区
> ls()
[1] "iris" "M" "model"
因此model
已恢复为load()
的副作用。
从?load
我们看到原因M
包含创建的对象的名称(因此最初保存)
Value:
A character vector of the names of objects created, invisibly.
如果要将对象还原为新名称,请使用saveRDS()
和readRDS()
:
saveRDS(model, "svm-model.rds")
newModel <- readRDS( "svm-model.rds")
ls()
> ls()
[1] "iris" "M" "model" "newModel"
如果您想了解有关saveRDS()
和readRDS()
的详情,请参阅相关帮助?saveRDS()
,您可能会对blog post I wrote on this topic感兴趣。